├── icon512.png
├── src
├── .DS_Store
├── inject
│ ├── icon.png
│ ├── icon.png.bak
│ ├── icon.png.bak3
│ ├── icon.pngbak2
│ ├── inject.css
│ └── inject.js
├── options_custom
│ ├── icon.png
│ ├── custom.css
│ ├── js
│ │ ├── i18n.js
│ │ └── classes
│ │ │ ├── tab.js
│ │ │ ├── search.js
│ │ │ ├── fancy-settings.js
│ │ │ └── setting.js
│ ├── css
│ │ ├── setting.css
│ │ └── main.css
│ ├── settings.js
│ ├── index.html
│ ├── i18n.js
│ ├── lib
│ │ ├── store.js
│ │ └── default.css
│ ├── README.md
│ └── manifest.js
├── bg
│ ├── background.html
│ └── background.js
└── browser_action
│ └── browser_action.html
├── icons
├── icon128.png
├── icon16.png
├── icon19.png
├── icon48.png
├── icon16.png.bak
├── icon19.png.bak
├── icon48.png.bak
└── icon128.png.bak
├── screenshots
├── meeting_costifier.png
├── meeting_costifier2.png
└── meeting_costifier3.png
├── readme.md
├── LICENSE
├── manifest.json
└── _locales
└── en
└── messages.json
/icon512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icon512.png
--------------------------------------------------------------------------------
/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/src/.DS_Store
--------------------------------------------------------------------------------
/icons/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon128.png
--------------------------------------------------------------------------------
/icons/icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon16.png
--------------------------------------------------------------------------------
/icons/icon19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon19.png
--------------------------------------------------------------------------------
/icons/icon48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon48.png
--------------------------------------------------------------------------------
/icons/icon16.png.bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon16.png.bak
--------------------------------------------------------------------------------
/icons/icon19.png.bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon19.png.bak
--------------------------------------------------------------------------------
/icons/icon48.png.bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon48.png.bak
--------------------------------------------------------------------------------
/src/inject/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/src/inject/icon.png
--------------------------------------------------------------------------------
/icons/icon128.png.bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/icons/icon128.png.bak
--------------------------------------------------------------------------------
/src/inject/icon.png.bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/src/inject/icon.png.bak
--------------------------------------------------------------------------------
/src/inject/icon.png.bak3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/src/inject/icon.png.bak3
--------------------------------------------------------------------------------
/src/inject/icon.pngbak2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/src/inject/icon.pngbak2
--------------------------------------------------------------------------------
/src/options_custom/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/src/options_custom/icon.png
--------------------------------------------------------------------------------
/screenshots/meeting_costifier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/screenshots/meeting_costifier.png
--------------------------------------------------------------------------------
/screenshots/meeting_costifier2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/screenshots/meeting_costifier2.png
--------------------------------------------------------------------------------
/screenshots/meeting_costifier3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekryski/meeting-costifier/master/screenshots/meeting_costifier3.png
--------------------------------------------------------------------------------
/src/bg/background.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/options_custom/custom.css:
--------------------------------------------------------------------------------
1 | /*
2 | // Add your own style rules here, not in css/main.css
3 | // or css/setting.css for easy updating reasons.
4 | */
5 |
--------------------------------------------------------------------------------
/src/bg/background.js:
--------------------------------------------------------------------------------
1 | chrome.extension.onMessage.addListener(
2 | function(request, sender, sendResponse) {
3 | chrome.pageAction.show(sender.tab.id);
4 | sendResponse();
5 | });
6 |
7 | chrome.tabs.onUpdated.addListener(
8 | function(tabId, changeInfo, tab) {
9 | // read changeInfo data and do something with it
10 | // like send the new url to contentscripts.js
11 | if (changeInfo.url) {
12 | chrome.tabs.sendMessage( tabId, {
13 | message: 'AddingCalendarEvent',
14 | url: changeInfo.url
15 | })
16 | }
17 | }
18 | );
--------------------------------------------------------------------------------
/src/browser_action/browser_action.html:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
Meeting Costifier
16 |
When navigating to a Google Calendar page in full view, you will see a new button at the bottom of the page that will add the cost of the meeting to the title.
17 |
Values used: $100 per hour per person.
18 |
Create Calendar Event
19 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | ## Meeting Costifier
2 |
3 | Quickly add a cost tag to your Google meeting signifying the value of meeting time. Encourage productive meetings and sanctify time.
4 |
5 | ## Download
6 |
7 | You can download this extension in the Google Chrome store: https://chrome.google.com/webstore/detail/meeting-costifier/binhlcibajcpjcmnkagcommjdmealmno
8 |
9 | ## Parameters
10 |
11 | Currently, this extension uses the following parameters:
12 | - Duration of the meeting (start/end date parsed from the DOM)
13 | - Number of participants (parsed from the children divs in participants list or the guest count if available)
14 | - $100 an hour
15 |
16 | The cost calculation is currently #people * hours * $100.
17 |
18 | ## Screenshots
19 |
20 | 
--------------------------------------------------------------------------------
/src/options_custom/js/i18n.js:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 Frank Kohlhepp
3 | // https://github.com/frankkohlhepp/fancy-settings
4 | // License: LGPL v2.1
5 | //
6 | (function () {
7 | var lang = navigator.language;
8 | if (this.i18n === undefined) { this.i18n = {}; }
9 | this.i18n.get = function (value) {
10 | if (value === "lang") {
11 | return lang;
12 | }
13 |
14 | if (this.hasOwnProperty(value)) {
15 | value = this[value];
16 | if (value.hasOwnProperty(lang)) {
17 | return value[lang];
18 | } else if (value.hasOwnProperty("en")) {
19 | return value["en"];
20 | } else {
21 | return Object.values(value)[0];
22 | }
23 | } else {
24 | return value;
25 | }
26 | };
27 | }());
28 |
--------------------------------------------------------------------------------
/src/inject/inject.css:
--------------------------------------------------------------------------------
1 | /* These values were inspected from an existing google calendar button. */
2 | #meetingCost {
3 | display: inline-block;
4 | background-color: rgb(14, 114, 237);
5 | color: rgb(255, 255, 255);
6 | line-height: 36px;
7 | font-family: "Google Sans", Roboto, Helvetica, Arial, sans-serif;
8 | font-weight: 500;
9 | font-size: 14px;
10 | border-width: 0px;
11 | border-style: initial;
12 | border-color: initial;
13 | border-image: initial;
14 | padding: 0px 8px;
15 | border-radius: 4px;
16 | font-family: 'Google Sans',Roboto,Arial,sans-serif;
17 | border-radius: 4px;
18 | line-height: 38px;
19 | font-weight: 500;
20 | letter-spacing: .25px;
21 | line-height: 36px;
22 | text-decoration: none;
23 | text-transform: none;
24 | font-size: 14px;
25 | cursor: pointer;
26 | text-align: center;
27 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Time by Ping
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Meeting Costifier",
3 | "version": "0.0.2",
4 | "manifest_version": 2,
5 | "description": "Quickly add a cost tag to your Google meeting signifying the value of meeting time. Encourage productive meetings",
6 | "icons": {
7 | "16": "icons/icon16.png",
8 | "48": "icons/icon48.png",
9 | "128": "icons/icon128.png"
10 | },
11 | "default_locale": "en",
12 | "background": {
13 | "page": "src/bg/background.html",
14 | "persistent": true
15 | },
16 | "options_page": "src/options_custom/index.html",
17 | "browser_action": {
18 | "default_icon": "icons/icon19.png",
19 | "default_title": "Meeting Costifier",
20 | "default_popup": "src/browser_action/browser_action.html"
21 | },
22 | "permissions": [
23 | "https://calendar.google.com/*",
24 | "tabs"
25 | ],
26 | "content_scripts": [
27 | {
28 | "matches": [
29 | "https://calendar.google.com/calendar/*"
30 | ],
31 | "css": [
32 | "src/inject/inject.css"
33 | ]
34 | },
35 | {
36 | "matches": [
37 | "https://calendar.google.com/calendar/*"
38 | ],
39 | "js": [
40 | "src/inject/inject.js"
41 | ]
42 | }
43 | ],
44 | "web_accessible_resources": ["src/inject/icon.png"]
45 | }
--------------------------------------------------------------------------------
/src/options_custom/css/setting.css:
--------------------------------------------------------------------------------
1 | /*
2 | // Copyright (c) 2011 Frank Kohlhepp
3 | // https://github.com/frankkohlhepp/fancy-settings
4 | // License: LGPL v2.1
5 | */
6 | .tab-content h2 {
7 | margin: 0;
8 | padding-bottom: 5px;
9 | font-size: 26px;
10 | color: #707070;
11 | line-height: 1;
12 | }
13 |
14 | .setting.group {
15 | border-top: 1px solid #EEEEEE;
16 | margin-top: 10px;
17 | padding-top: 5px;
18 | padding-left: 2px;
19 | }
20 |
21 | .setting.group-name {
22 | width: 140px;
23 | padding: 0;
24 | font-size: 14px;
25 | font-weight: bold;
26 | vertical-align: top;
27 | }
28 |
29 | .setting.bundle {
30 | max-width: 600px;
31 | margin-bottom: 5px;
32 | }
33 |
34 | .setting.bundle.list-box {
35 | margin-bottom: 10px;
36 | }
37 |
38 | .setting.label.radio-buttons + .setting.container.radio-buttons {
39 | margin-top: 3px;
40 | }
41 |
42 | .setting.label, .setting.element-label {
43 | margin-right: 15px;
44 | font-size: 13px;
45 | font-weight: normal;
46 | }
47 |
48 | .setting.label.checkbox, .setting.element-label {
49 | margin-left: 5px;
50 | margin-right: 0;
51 | }
52 |
53 | .setting.label.checkbox {
54 | position: relative;
55 | top: 1px;
56 | }
57 |
58 | .setting.element.slider {
59 | position: relative;
60 | width: 150px;
61 | top: 4px;
62 | }
63 |
64 | .setting.element.list-box {
65 | display: block;
66 | height: 100px;
67 | width: 100%;
68 | }
69 |
70 | .setting.display.slider {
71 | margin-left: 5px;
72 | color: #666666;
73 | }
74 |
75 | #nothing-found {
76 | display: none;
77 | margin-top: 10px;
78 | font-size: 18px;
79 | font-weight: lighter;
80 | color: #999999;
81 | }
82 |
--------------------------------------------------------------------------------
/src/options_custom/settings.js:
--------------------------------------------------------------------------------
1 | window.addEvent("domready", function () {
2 | // Option 1: Use the manifest:
3 | new FancySettings.initWithManifest(function (settings) {
4 | settings.manifest.myButton.addEvent("action", function () {
5 | alert("You clicked me!");
6 | });
7 | });
8 |
9 | // Option 2: Do everything manually:
10 | /*
11 | var settings = new FancySettings("My Extension", "icon.png");
12 |
13 | var username = settings.create({
14 | "tab": i18n.get("information"),
15 | "group": i18n.get("login"),
16 | "name": "username",
17 | "type": "text",
18 | "label": i18n.get("username"),
19 | "text": i18n.get("x-characters")
20 | });
21 |
22 | var password = settings.create({
23 | "tab": i18n.get("information"),
24 | "group": i18n.get("login"),
25 | "name": "password",
26 | "type": "text",
27 | "label": i18n.get("password"),
28 | "text": i18n.get("x-characters-pw"),
29 | "masked": true
30 | });
31 |
32 | var myDescription = settings.create({
33 | "tab": i18n.get("information"),
34 | "group": i18n.get("login"),
35 | "name": "myDescription",
36 | "type": "description",
37 | "text": i18n.get("description")
38 | });
39 |
40 | var myButton = settings.create({
41 | "tab": "Information",
42 | "group": "Logout",
43 | "name": "myButton",
44 | "type": "button",
45 | "label": "Disconnect:",
46 | "text": "Logout"
47 | });
48 |
49 | // ...
50 |
51 | myButton.addEvent("action", function () {
52 | alert("You clicked me!");
53 | });
54 |
55 | settings.align([
56 | username,
57 | password
58 | ]);
59 | */
60 | });
61 |
--------------------------------------------------------------------------------
/src/options_custom/index.html:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |