Gorgias Chrome Extension
Google Chrome plugin for improved productivity on the web.
Sites supported
- Gmail
- Outlook.com
- Yahoo Mail
Developing extension
Development is done using Grunt. So first you need to install Node.js and Grunt.
Then, run npm install
to install all dependencies.
There are available following commands:
grunt
orgrunt dev
orgrunt d
- Development mode. Creates development manifest, watches for styl files and recompiles them automatically.grunt production
orgrunt p
- Build extension.grunt test
orgrunt t
- Run tests.grunt build
orgrunt b
- Build and compress extension.
Known issues
-
Saving a template from the context menus doesn't work with multi-lines.
Relevant bug: https://code.google.com/p/chromium/issues/detail?id=116429
This means that when selecting a text to save as a template it will not preserve newlines.
Creating templates
Templates are powered by handlebars.js.
Following template variables are available:
- subject string
- from list; Each list element contains:
- name string
- firt_name string
- last_name string
- email string
- to list similar to from
- cc list similar to from
- bcc list similar to from
To output a string use following syntax:
String variables are denoted by double curly braces: {{subject}}
If subject is My email subject then it be rendered to:
String variables are denoted by double curly braces: My email subject
To output a list use following syntax:
To:
{{#each to}}
- Name {{name}}
- First name {{first_name}}
- Last name {{last_name}}
- Email {{email}}
{{/each}}
You also may want to output list only if it has values:
{{#if to}}
To:
{{#each to}}
- Name {{name}}
- First name {{first_name}}
- Last name {{last_name}}
- Email {{email}}
{{/each}}
{{/if}}
If you want to output only second element from list (note that list numbering starts with 0):
{{#if to.[1]}}
Second To:
- Name {{to.1.name}}
- First name {{to.1.first_name}}
- Last name {{to.1.last_name}}
- Email {{to.1.email}}
{{/if}}
Building plugins
You can build plugins using the App.plugin('PLUGIN_NAME', {})
method.
Check out the src/content/plugins/*.js
files for examples on how a plugin show look.
Each plugin must expose the following methods:
init
getData
All plugin methods should take two arguments: params
and callback
.
The params
argument is an object which can contain other objects or properties that you can use in the method.
The callback
argument should be a function called at the end of the method, after all async functionality.
The callback
function uses Node.js
-style arguments. The first one is an error object returned in case of errors, otherwise return null
. The second argument is the actual method response.
Plugin methods
init
The init
method should respond with a boolean value, false
by default, and true
if the plugin should be activated.
getData
The getData
method receives the following params
object:
params: {
element: DOM_ELEMENT
}
The params.element
object is a reference to the DOM element on which the autocomplete was triggered. It can be a contenteditable
element, or a form element.
The response of the getData
method should look like:
{
from: [],
to: [],
cc: [],
bcc: [],
subject: ''
}
Each array should contain objects that look like:
{
name: '',
first_name: '',
last_name: '',
email: ''
}
setTitle
// TODO
Testing
Before running the tests, run:
npm install
Then key your Chrome private .pem
keyfile and copy it as key.pem
in the repository root.
Set the QUICKTEXT_GMAIL_USERNAME
and QUICKTEXT_GMAIL_PASSWORD
ENV variables, for logging-in into Gmail.
export QUICKTEXT_GMAIL_USERNAME=abc
export QUICKTEXT_GMAIL_PASSWORD=def
Then, to run all the tests:
grunt test
or only for the contentscript:
grunt test:content
or only for the background script:
grunt test:background
Running the tests will recompile the app for production and test that.
If you want to run the tests locally (not on Sauce Labs) without recompiling the app, run:
grunt protractor:background
or
grunt protractor:content