mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-01-13 10:50:27 +00:00
Kicking off TiddlyFox, a Firefox extension for TiddlyWiki
Start with Mozilla's HelloWorld sample Firefox extension
This commit is contained in:
parent
44bef260f0
commit
c45b0a7641
128
tiddlyfox/extension/build.sh
Normal file
128
tiddlyfox/extension/build.sh
Normal file
@ -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, SVN, 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*' -o -path '*.svn*' \) -prune -o -type f -print | grep -v \~ >> files
|
||||||
|
done
|
||||||
|
|
||||||
|
zip -0 -r $JAR_FILE -@ < 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*' -o -path '*.svn*' \) -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
|
155
tiddlyfox/extension/build_mac.sh
Executable file
155
tiddlyfox/extension/build_mac.sh
Executable file
@ -0,0 +1,155 @@
|
|||||||
|
#!/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)
|
||||||
|
|
||||||
|
# is "cpio" available? If not, fall back to GNU-only "cp --parents"
|
||||||
|
HAVE_CPIO=0
|
||||||
|
which cpio 2>&1 > /dev/null && HAVE_CPIO=1
|
||||||
|
echo "have cpio: $HAVE_CPIO"
|
||||||
|
|
||||||
|
function cp_parents {
|
||||||
|
if [ $HAVE_CPIO = 1 ]; then
|
||||||
|
echo $1 | cpio -pduv $TMP_DIR
|
||||||
|
else
|
||||||
|
cp --verbose --parents $1 $TMP_DIR
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function cp_parents_chr {
|
||||||
|
if [ $HAVE_CPIO = 1 ]; then
|
||||||
|
echo $1 | cpio -pduv $TMP_DIR/chrome
|
||||||
|
else
|
||||||
|
cp --verbose --parents $1 $TMP_DIR/chrome
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# verbose, create each non-existent directorys
|
||||||
|
mkdir -v -p $TMP_DIR/chrome
|
||||||
|
|
||||||
|
# generate the JAR file, excluding CVS, SVN, 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*' -o -path '*.svn*' \) -prune -o -type f -print | grep -v \~ >> files
|
||||||
|
done
|
||||||
|
|
||||||
|
#zip -0 -r $JAR_FILE -@ < files
|
||||||
|
# The following statement should be used instead if you don't wish to use the JAR file
|
||||||
|
FLS=`cat files`
|
||||||
|
LL=""
|
||||||
|
for F in $FLS; do
|
||||||
|
cp_parents $F
|
||||||
|
done
|
||||||
|
|
||||||
|
# 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*' -o -path '*.svn*' \) -prune -o -type f -print | grep -v \~`"
|
||||||
|
echo $FILES >> files
|
||||||
|
cp_parents $FILES
|
||||||
|
done
|
||||||
|
|
||||||
|
# Copy other files to the root of future XPI.
|
||||||
|
for ROOT_FILE in $ROOT_FILES install.rdf chrome.manifest; do
|
||||||
|
cp_parents $ROOT_FILE
|
||||||
|
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
|
7
tiddlyfox/extension/chrome.manifest
Normal file
7
tiddlyfox/extension/chrome.manifest
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
content helloworld content/
|
||||||
|
overlay chrome://browser/content/browser.xul chrome://helloworld/content/overlay.xul
|
||||||
|
|
||||||
|
locale helloworld en-US locale/en-US/
|
||||||
|
|
||||||
|
skin helloworld classic/1.0 skin/
|
||||||
|
style chrome://global/content/customizeToolbar.xul chrome://helloworld/skin/overlay.css
|
11
tiddlyfox/extension/config_build.sh
Normal file
11
tiddlyfox/extension/config_build.sh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Build config for the build script, build.sh. Look there for more info.
|
||||||
|
|
||||||
|
APP_NAME=helloworld
|
||||||
|
CHROME_PROVIDERS="content locale skin"
|
||||||
|
CLEAN_UP=1
|
||||||
|
ROOT_FILES="readme.txt"
|
||||||
|
ROOT_DIRS=
|
||||||
|
BEFORE_BUILD=
|
||||||
|
AFTER_BUILD=
|
13
tiddlyfox/extension/content/hello.xul
Normal file
13
tiddlyfox/extension/content/hello.xul
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
|
||||||
|
<!DOCTYPE window SYSTEM "chrome://helloworld/locale/hello.dtd">
|
||||||
|
|
||||||
|
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||||
|
title="&title.label;">
|
||||||
|
|
||||||
|
<hbox align="center">
|
||||||
|
<description flex="1">&separate.label;</description>
|
||||||
|
<button label="&close.label;" oncommand="close();"/>
|
||||||
|
</hbox>
|
||||||
|
|
||||||
|
</window>
|
12
tiddlyfox/extension/content/overlay.js
Normal file
12
tiddlyfox/extension/content/overlay.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var HelloWorld = {
|
||||||
|
onLoad: function() {
|
||||||
|
// initialization code
|
||||||
|
this.initialized = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
onMenuItemCommand: function() {
|
||||||
|
window.open("chrome://helloworld/content/hello.xul", "", "chrome");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener("load", function(e) { HelloWorld.onLoad(e); }, false);
|
12
tiddlyfox/extension/content/overlay.xul
Normal file
12
tiddlyfox/extension/content/overlay.xul
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet href="chrome://helloworld/skin/overlay.css" type="text/css"?>
|
||||||
|
<!DOCTYPE overlay SYSTEM "chrome://helloworld/locale/overlay.dtd">
|
||||||
|
<overlay id="helloworld-overlay"
|
||||||
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||||
|
<script src="overlay.js"/>
|
||||||
|
|
||||||
|
<menupopup id="menu_ToolsPopup">
|
||||||
|
<menuitem id="helloworld-hello" label="&helloworld;"
|
||||||
|
oncommand="HelloWorld.onMenuItemCommand(event);"/>
|
||||||
|
</menupopup>
|
||||||
|
</overlay>
|
BIN
tiddlyfox/extension/helloworld.xpi
Normal file
BIN
tiddlyfox/extension/helloworld.xpi
Normal file
Binary file not shown.
1
tiddlyfox/extension/helloworld@mozilla.doslash.org
Normal file
1
tiddlyfox/extension/helloworld@mozilla.doslash.org
Normal file
@ -0,0 +1 @@
|
|||||||
|
/Users/nickolay/dev/helloworld
|
32
tiddlyfox/extension/install.rdf
Normal file
32
tiddlyfox/extension/install.rdf
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<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>helloworld@mozilla.doslash.org</em:id>
|
||||||
|
<em:name>Hello World extension for Firefox</em:name>
|
||||||
|
<em:version>1.0</em:version>
|
||||||
|
<em:description>Demo extension.</em:description>
|
||||||
|
<em:creator>Nickolay Ponomarev</em:creator>
|
||||||
|
<!-- optional items -->
|
||||||
|
<em:contributor>A person who helped you</em:contributor>
|
||||||
|
<em:contributor>Another one</em:contributor>
|
||||||
|
<em:homepageURL>http://kb.mozillazine.org/Getting_started_with_extension_development</em:homepageURL>
|
||||||
|
<!--em:optionsURL>chrome://sampleext/content/settings.xul</em:optionsURL>
|
||||||
|
<em:aboutURL>chrome://sampleext/content/about.xul</em:aboutURL>
|
||||||
|
<em:iconURL>chrome://sampleext/skin/mainicon.png</em:iconURL>
|
||||||
|
<em:updateURL>http://sampleextension.mozdev.org/update.rdf</em:updateURL-->
|
||||||
|
|
||||||
|
<!-- Firefox -->
|
||||||
|
<em:targetApplication>
|
||||||
|
<Description>
|
||||||
|
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||||
|
<em:minVersion>3.6</em:minVersion>
|
||||||
|
<em:maxVersion>4.0.*</em:maxVersion>
|
||||||
|
</Description>
|
||||||
|
</em:targetApplication>
|
||||||
|
|
||||||
|
</Description>
|
||||||
|
|
||||||
|
</RDF>
|
3
tiddlyfox/extension/locale/en-US/hello.dtd
Normal file
3
tiddlyfox/extension/locale/en-US/hello.dtd
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<!ENTITY title.label "Hello World">
|
||||||
|
<!ENTITY separate.label "This is a separate window!">
|
||||||
|
<!ENTITY close.label "Close">
|
1
tiddlyfox/extension/locale/en-US/overlay.dtd
Normal file
1
tiddlyfox/extension/locale/en-US/overlay.dtd
Normal file
@ -0,0 +1 @@
|
|||||||
|
<!ENTITY helloworld "Hello World!">
|
35
tiddlyfox/extension/readme.txt
Normal file
35
tiddlyfox/extension/readme.txt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
This package accompanies the article at MozillaZine Knowledge Base, which can be
|
||||||
|
found at <http://kb.mozillazine.org/Getting_started_with_extension_development>
|
||||||
|
|
||||||
|
You can use its contents as a starting point for developing extensions. Steps to
|
||||||
|
register these files in the EM are described in the "Registering your extension
|
||||||
|
in the Extension Manager" section of the article. In short:
|
||||||
|
1. Unzip this package to any location, e.g. c:\dev
|
||||||
|
2. Put the path to the "helloworld" folder (e.g. c:\dev\helloworld) in the
|
||||||
|
"helloworld@mozilla.doslash.org" file and move that file to
|
||||||
|
[profile folder]\extensions\
|
||||||
|
3. Restart Firefox.
|
||||||
|
|
||||||
|
You should see a new red "Hello world" item in the Tools menu and the extension
|
||||||
|
should show up in the Extension Manager window (Tools > Extensions).
|
||||||
|
|
||||||
|
********* YOU MUST RUN FIREFOX 3.6 OR FIREFOX 4 TO USE THIS PACKAGE ************
|
||||||
|
|
||||||
|
helloworld.xpi contains working prebuilt version of the extension, just in case.
|
||||||
|
|
||||||
|
You must change the following items before making your extension
|
||||||
|
available to general public:
|
||||||
|
1) the extension's ID in install.rdf (helloworld@mozilla.doslash.org).
|
||||||
|
(For details see <https://developer.mozilla.org/en/install.rdf>)
|
||||||
|
2) the extension's short name (currently "helloworld").
|
||||||
|
The new name must be in lower case.
|
||||||
|
|
||||||
|
********* OK, the example is working. What's next?
|
||||||
|
|
||||||
|
Follow the tips at <https://developer.mozilla.org/en/Setting_up_extension_development_environment>
|
||||||
|
to save yourself time.
|
||||||
|
|
||||||
|
Check the documentation available at <https://developer.mozilla.org/en/Extensions>.
|
||||||
|
|
||||||
|
If you have any problems that you can't solve yourself, feel free to ask questions:
|
||||||
|
<https://developer.mozilla.org/en/Extensions#Community>
|
4
tiddlyfox/extension/skin/overlay.css
Normal file
4
tiddlyfox/extension/skin/overlay.css
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/* This is just an example. You shouldn't do this. */
|
||||||
|
menuitem#helloworld-hello {
|
||||||
|
color: red !important;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user