Google Chrome plugin for improved productivity on the web.
- Gmail
- Outlook.com
- Yahoo Mail
Development is done using Grunt. So first you need to install Node.js and Grunt.
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.
-
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.
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}}
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.
The init
method should respond with a boolean value, false
by default, and true
if the plugin should be activated.
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: ''
}
// TODO
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