new file mode 100644
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>gloda</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
new file mode 100644
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,128 @@
+#!/bin/bash
+# build.sh -- builds JAR and XPI files for mozilla extensions
+# by Nickolay Ponomarev <asqueella@gmail.com>
+# (original version based on Nathan Yergler's build script)
+# Most recent version is at <http://kb.mozillazine.org/Bash_build_script>
+
+# This script assumes the following directory structure:
+# ./
+# chrome.manifest (optional - for newer extensions)
+# install.rdf
+# (other files listed in $ROOT_FILES)
+#
+# content/ |
+# locale/ |} these can be named arbitrary and listed in $CHROME_PROVIDERS
+# skin/ |
+#
+# defaults/ |
+# components/ |} these must be listed in $ROOT_DIRS in order to be packaged
+# ... |
+#
+# It uses a temporary directory ./build when building; don't use that!
+# Script's output is:
+# ./$APP_NAME.xpi
+# ./$APP_NAME.jar (only if $KEEP_JAR=1)
+# ./files -- the list of packaged files
+#
+# Note: It modifies chrome.manifest when packaging so that it points to
+# chrome/$APP_NAME.jar!/*
+
+#
+# default configuration file is ./config_build.sh, unless another file is
+# specified in command-line. Available config variables:
+APP_NAME= # short-name, jar and xpi files name. Must be lowercase with no spaces
+CHROME_PROVIDERS= # which chrome providers we have (space-separated list)
+CLEAN_UP= # delete the jar / "files" when done? (1/0)
+ROOT_FILES= # put these files in root of xpi (space separated list of leaf filenames)
+ROOT_DIRS= # ...and these directories (space separated list)
+BEFORE_BUILD= # run this before building (bash command)
+AFTER_BUILD= # ...and this after the build (bash command)
+
+if [ -z $1 ]; then
+ . ./config_build.sh
+else
+ . $1
+fi
+
+if [ -z $APP_NAME ]; then
+ echo "You need to create build config file first!"
+ echo "Read comments at the beginning of this script for more info."
+ exit;
+fi
+
+ROOT_DIR=`pwd`
+TMP_DIR=build
+
+#uncomment to debug
+#set -x
+
+# remove any left-over files from previous build
+rm -f $APP_NAME.jar $APP_NAME.xpi files
+rm -rf $TMP_DIR
+
+$BEFORE_BUILD
+
+mkdir --parents --verbose $TMP_DIR/chrome
+
+# generate the JAR file, excluding CVS and temporary files
+JAR_FILE=$TMP_DIR/chrome/$APP_NAME.jar
+echo "Generating $JAR_FILE..."
+for CHROME_SUBDIR in $CHROME_PROVIDERS; do
+ find $CHROME_SUBDIR -path '*CVS*' -prune -o -type f -print | grep -v \~ >> files
+done
+
+zip -0 -r $JAR_FILE `cat files`
+# The following statement should be used instead if you don't wish to use the JAR file
+#cp --verbose --parents `cat files` $TMP_DIR/chrome
+
+# prepare components and defaults
+echo "Copying various files to $TMP_DIR folder..."
+for DIR in $ROOT_DIRS; do
+ mkdir $TMP_DIR/$DIR
+ FILES="`find $DIR -path '*CVS*' -prune -o -type f -print | grep -v \~`"
+ echo $FILES >> files
+ cp --verbose --parents $FILES $TMP_DIR
+done
+
+# Copy other files to the root of future XPI.
+for ROOT_FILE in $ROOT_FILES install.rdf chrome.manifest; do
+ cp --verbose $ROOT_FILE $TMP_DIR
+ if [ -f $ROOT_FILE ]; then
+ echo $ROOT_FILE >> files
+ fi
+done
+
+cd $TMP_DIR
+
+if [ -f "chrome.manifest" ]; then
+ echo "Preprocessing chrome.manifest..."
+ # You think this is scary?
+ #s/^(content\s+\S*\s+)(\S*\/)$/\1jar:chrome\/$APP_NAME\.jar!\/\2/
+ #s/^(skin|locale)(\s+\S*\s+\S*\s+)(.*\/)$/\1\2jar:chrome\/$APP_NAME\.jar!\/\3/
+ #
+ # Then try this! (Same, but with characters escaped for bash :)
+ sed -i -r s/^\(content\\s+\\S*\\s+\)\(\\S*\\/\)$/\\1jar:chrome\\/$APP_NAME\\.jar!\\/\\2/ chrome.manifest
+ sed -i -r s/^\(skin\|locale\)\(\\s+\\S*\\s+\\S*\\s+\)\(.*\\/\)$/\\1\\2jar:chrome\\/$APP_NAME\\.jar!\\/\\3/ chrome.manifest
+
+ # (it simply adds jar:chrome/whatever.jar!/ at appropriate positions of chrome.manifest)
+fi
+
+# generate the XPI file
+echo "Generating $APP_NAME.xpi..."
+zip -r ../$APP_NAME.xpi *
+
+cd "$ROOT_DIR"
+
+echo "Cleanup..."
+if [ $CLEAN_UP = 0 ]; then
+ # save the jar file
+ mv $TMP_DIR/chrome/$APP_NAME.jar .
+else
+ rm ./files
+fi
+
+# remove the working files
+rm -rf $TMP_DIR
+echo "Done!"
+
+$AFTER_BUILD
new file mode 100644
--- /dev/null
+++ b/chrome.manifest
@@ -0,0 +1,4 @@
+content gloda content/
+locale gloda en-US locale/en-US/
+skin gloda classic/1.0 skin/
+overlay chrome://messenger/content/messenger.xul chrome://gloda/content/thunderbirdOverlay.xul
new file mode 100644
--- /dev/null
+++ b/config_build.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Build config for build.sh
+APP_NAME=gloda
+CHROME_PROVIDERS="content locale skin"
+CLEAN_UP=1
+ROOT_FILES=
+ROOT_DIRS="defaults"
+BEFORE_BUILD=
+AFTER_BUILD=
new file mode 100644
--- /dev/null
+++ b/content/options.xul
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ***** BEGIN LICENSE BLOCK *****
+ - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ -
+ - The contents of this file are subject to the Mozilla Public License Version
+ - 1.1 (the "License"); you may not use this file except in compliance with
+ - the License. You may obtain a copy of the License at
+ - http://www.mozilla.org/MPL/
+ -
+ - Software distributed under the License is distributed on an "AS IS" basis,
+ - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ - for the specific language governing rights and limitations under the
+ - License.
+ -
+ - The Original Code is Global Database.
+ -
+ - The Initial Developer of the Original Code is
+ - Andrew Sutherland.
+ - Portions created by the Initial Developer are Copyright (C) 2008
+ - the Initial Developer. All Rights Reserved.
+ -
+ - Contributor(s):
+ -
+ - Alternatively, the contents of this file may be used under the terms of
+ - either the GNU General Public License Version 2 or later (the "GPL"), or
+ - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ - in which case the provisions of the GPL or the LGPL are applicable instead
+ - of those above. If you wish to allow use of your version of this file only
+ - under the terms of either the GPL or the LGPL, and not to allow others to
+ - use your version of this file under the terms of the MPL, indicate your
+ - decision by deleting the provisions above and replace them with the notice
+ - and other provisions required by the GPL or the LGPL. If you do not delete
+ - the provisions above, a recipient may use your version of this file under
+ - the terms of any one of the MPL, the GPL or the LGPL.
+ -
+ - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<!DOCTYPE prefwindow SYSTEM "chrome://gloda/locale/prefwindow.dtd">
+<prefwindow id="glodaPreferences" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" title="&prefwindow.title;">
+ <prefpane id="pane1" label="&pane1.title;">
+ <preferences>
+ <preference id="boolpref1" name="extensions.gloda.boolpref" type="bool"/>
+ <preference id="intpref1" name="extensions.gloda.intpref" type="int"/>
+ <preference id="stringpref1" name="extensions.gloda.stringpref" type="string"/> <!-- note that this is only an ASCII string - use unichar for unicode strings -->
+ </preferences>
+ <checkbox id="checkboolpref" preference="boolpref1" label="&checkboolpref.label;" accesskey="&checkboolpref.accesskey;"/>
+ <label accesskey="&intpref.accesskey;" control="textintpref">&intpref.label;</label><textbox id="textintpref" preference="intpref1"/>
+ <label accesskey="&stringpref.accesskey;" control="textstringpref">&stringpref.label;</label><textbox id="textstringpref" preference="stringpref1"/>
+ </prefpane>
+</prefwindow>
new file mode 100644
--- /dev/null
+++ b/content/overlay.js
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Global Database.
+ *
+ * The Initial Developer of the Original Code is
+ * Andrew Sutherland.
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var gloda = {
+ onLoad: function() {
+ // initialization code
+ this.initialized = true;
+ this.strings = document.getElementById("gloda-strings");
+ },
+ onMenuItemCommand: function(e) {
+ var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
+ .getService(Components.interfaces.nsIPromptService);
+ promptService.alert(window, this.strings.getString("helloMessageTitle"),
+ this.strings.getString("helloMessage"));
+ },
+
+};
+window.addEventListener("load", function(e) { gloda.onLoad(e); }, false);
new file mode 100644
--- /dev/null
+++ b/content/thunderbirdOverlay.xul
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ***** BEGIN LICENSE BLOCK *****
+ - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ -
+ - The contents of this file are subject to the Mozilla Public License Version
+ - 1.1 (the "License"); you may not use this file except in compliance with
+ - the License. You may obtain a copy of the License at
+ - http://www.mozilla.org/MPL/
+ -
+ - Software distributed under the License is distributed on an "AS IS" basis,
+ - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ - for the specific language governing rights and limitations under the
+ - License.
+ -
+ - The Original Code is Global Database.
+ -
+ - The Initial Developer of the Original Code is
+ - Andrew Sutherland.
+ - Portions created by the Initial Developer are Copyright (C) 2008
+ - the Initial Developer. All Rights Reserved.
+ -
+ - Contributor(s):
+ -
+ - Alternatively, the contents of this file may be used under the terms of
+ - either the GNU General Public License Version 2 or later (the "GPL"), or
+ - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ - in which case the provisions of the GPL or the LGPL are applicable instead
+ - of those above. If you wish to allow use of your version of this file only
+ - under the terms of either the GPL or the LGPL, and not to allow others to
+ - use your version of this file under the terms of the MPL, indicate your
+ - decision by deleting the provisions above and replace them with the notice
+ - and other provisions required by the GPL or the LGPL. If you do not delete
+ - the provisions above, a recipient may use your version of this file under
+ - the terms of any one of the MPL, the GPL or the LGPL.
+ -
+ - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://gloda/skin/overlay.css" type="text/css"?>
+<!DOCTYPE overlay SYSTEM "chrome://gloda/locale/gloda.dtd">
+<overlay id="gloda-overlay"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <script src="overlay.js"/>
+ <stringbundleset id="stringbundleset">
+ <stringbundle id="gloda-strings" src="chrome://gloda/locale/gloda.properties"/>
+ </stringbundleset>
+
+ <menupopup id="taskPopup">
+ <menuitem id="gloda-hello" label="&gloda.label;"
+ oncommand="gloda.onMenuItemCommand(event);"/>
+ </menupopup>
+</overlay>
new file mode 100644
--- /dev/null
+++ b/defaults/preferences/gloda.js
@@ -0,0 +1,5 @@
+pref("extensions.gloda.boolpref", false);
+pref("extensions.gloda.intpref", 0);
+pref("extensions.gloda.stringpref", "A string");
+// See http://kb.mozillazine.org/Localize_extension_descriptions
+pref("extensions.gloda@mozillamessaging.com.description", "chrome://gloda/locale/gloda.properties");
new file mode 100644
--- /dev/null
+++ b/install.rdf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+ <Description about="urn:mozilla:install-manifest">
+ <em:id>gloda@mozillamessaging.com</em:id>
+ <em:name>Global Database</em:name>
+ <em:version>1.0</em:version>
+ <em:creator>Andrew Sutherland</em:creator>
+ <em:description>Adds a global database to Thunderbird</em:description>
+ <em:optionsURL>chrome://gloda/content/options.xul</em:optionsURL>
+ <em:targetApplication>
+ <Description>
+ <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- thunderbird -->
+ <em:minVersion>1.5</em:minVersion>
+ <em:maxVersion>2.0.0.*</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+ </Description>
+</RDF>
new file mode 100644
--- /dev/null
+++ b/locale/en-US/gloda.dtd
@@ -0,0 +1,1 @@
+<!ENTITY gloda.label "Your localized menuitem">
new file mode 100644
--- /dev/null
+++ b/locale/en-US/gloda.properties
@@ -0,0 +1,4 @@
+helloMessage=Hello World!
+helloMessageTitle=Hello
+prefMessage=Int Pref Value: %d
+extensions.gloda.description=Adds a global database to Thunderbird
new file mode 100644
--- /dev/null
+++ b/locale/en-US/prefwindow.dtd
@@ -0,0 +1,8 @@
+<!ENTITY prefwindow.title "Global Database preferences">
+<!ENTITY pane1.title "Global Database preferences">
+<!ENTITY checkboolpref.label "A Boolean Preference">
+<!ENTITY checkboolpref.accesskey "B">
+<!ENTITY intpref.label "An Integer Preference">
+<!ENTITY intpref.accesskey "I">
+<!ENTITY stringpref.label "A String Preference">
+<!ENTITY stringpref.accesskey "S">
new file mode 100644
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1,21 @@
+This extension was generated by the Extension Wizard at
+http://ted.mielczarek.org/code/mozilla/extensionwiz/ .
+This extension is compatible only with Firefox 1.5 and
+above. Most of the files in this package are based on
+the 'helloworld' extension from the Mozillazine Knowledge Base.
+
+You can build an XPI for installation by running the
+build.sh script located in this folder. For development
+you should do the following:
+ 1. Unzip the entire contents of this package to somewhere,
+ e.g, c:\dev or /home/user/dev
+ 2. Put the full path to the folder (e.g. c:\dev\gloda on
+ Windows, /home/user/dev/gloda on Linux) in a file named
+ gloda@mozillamessaging.com and copy that file to
+ [your profile folder]\extensions\
+ 3. Restart Firefox.
+
+For more information, see the Mozillazine Knowledge Base:
+http://kb.mozillazine.org/Getting_started_with_extension_development
+
+-Ted Mielczarek <ted.mielczarek@gmail.com>
new file mode 100644
--- /dev/null
+++ b/skin/overlay.css
@@ -0,0 +1,5 @@
+/* This is just an example. You shouldn't do this. */
+#gloda-hello
+{
+ color: red ! important;
+}