Easy Menu

A multi-browser automagic extension builder


Homepage  -  Download  -  Tutorial
How to create the XML input
To create the XML input for Easy Menu just follow those rules and see the testmenu.xml example file.
  1. Escape all the XML reserved charachters (&, <, >) or enclose the string and text data in a CDATA section
  2. Put in the ./icons/ folder all the PNG icons called in the XML input
  3. Set the encoding to UTF-8

XML input example
Here follows the example XML input with a detailed description for all the tags. Descriptions are not repeated for the same tag.
The XML input must be structured on orderly tags as indicated, except for those tags that have a blu symbol at their left. There are four types of tags:
  • Tag without any blue symbols at their left must be inserted once
  • Tag with an asterisk (*) can either be left out or be inserted multiple times
  • Tag with a question mark (?) can either be left out or be inserted only once
  • Tag with a plus sign (+) can be inserted multiple times but at least once
The principles of orderly placement of different tags applies also to the specific child list of individual tags.

Example XML:

 
<?xml version="1.0" encoding="UTF-8"?>
The standard utf-8 encoding XML Declaration
 
<easy-menu>
Description Attributes Data Childs
The root element (alternatively called the document element) NO NO extension
main-menu
 
   <extension short-name="test-menu" version="0.0.9">
Description Attributes Data Childs
The extension tag contains all the general information needed to create the structure of the extension menu short-name: the short name of the extension. Only a-z,A-Z,0-9,-,_ characters are allowed.

version: the version of the extension. Only a-z,A-Z,0-9,.,-,_ characters are allowed
NO id
name
author-name
author-email
author-url?
homepageURL
icon?
en-description
en-icon-license?
localized+
debian?
 
      <id>{84f12230-d3b4-4fd2-8e57-077f94ea76eb}</id>
Description Attributes Data Childs
The UUID that identify the extension. You must create a new id only when you create a new extension. For every update of an existing extension be sure to use the same id. Both email adress id and UUID can be used. A new UUID can be generated in many ways, for example using a web service like this one or this other one. Choose the format with the 8-4-4-4-12 characters schema. NO A UUID with 8-4-4-4-12 characters schema enclosed in curly brackets or an id in the email address format. NO
 
      <name>A test menu</name>
Description Attributes Data Childs
The English extension's name that will be used in the about window, if the localized name is not provided. NO String NO
 
      <author-name>Test Author </author-name>
Description Attributes Data Childs
The Author Name that will be used as the extension's Author NO String, usually in the form Name Surname NO
 
      <author-email>author@test.com</author-email>
Description Attributes Data Childs
The Author's Email address NO Valid email address. NO
?
      <author-url>http://www.author.com/about</author-url>
Description Attributes Data Childs
[OPTIONAL TAG] The author's personal page on some website. NO Valid URL address. NO
 
      <homepageURL>http://www.author.com/test-menu</homepageURL>
Description Attributes Data Childs
The extension's page on some website or the homepage of the extension's website, if any. NO Valid URL address. NO
?
      <icon>testlogo</icon>
Description Attributes Data Childs
[OPTIONAL TAG] The icon's file name (without the extension ".png") to be used as the extension's logo in the about window. The icon must be a 32x32 px PNG image with the given file name and the ".png" extension in the "./icons" folder. NO String NO
 
      <en-description><![CDATA[Brief English description of the menu. This menu is for testing purposes only, as an example usage of the program Easy Menu.]]></en-description>
Description Attributes Data Childs
The English description of the extension. NO Text NO
?
      <en-icon-license><![CDATA[test01.png, test02.png owned by Test Inc.
test.png released under the terms of the CC-by-sa license]]></en-icon-license>
Description Attributes Data Childs
[OPTIONAL TAG] The license of all the icons that cannot be released under the term of the GNU General Public License version 3, that is the extension's license. In order to allow the usage of icons with different license in the extension, the text provided here will be added to the extension's license as a license exception. Ensure to add here all the licenses relative to the icons inserted in the extension. NO Text NO
+
      <localized locale="en-US">
Description Attributes Data Childs
[AT LEAST ONE TAG] At least one localized tag is required, the first of which will be de default locale language of the extension, the one shown if the user have set the browser to a locale not provided in the extension. This tag enclose all the general information of the extension in the choosen locale language. locale: the locale language of the child tags. A valid locale code. NO locale-name
name?
description
menu-changelog?
 
         <locale-name>English (US)</locale-name>
Description Attributes Data Childs
The name of the locale section NO String NO
 
         <description><![CDATA[Brief en-US description of the menu. This menu is for testing purposes only, as an example usage of the program Easy Menu.]]></description>
Description Attributes Data Childs
The locale description of the extension. NO Text NO
?
         <menu-changelog>
Description Attributes Data Childs
[OPTIONAL TAG] This tag will enclose all the localized information relative to the changelog of the extension. If not provided the extension will be built without a changelog. NO NO changelog-item+
+
            <changelog-item version="0.0.9" date="2008-06-12"><![CDATA[ - Added sub menu]]></changelog-item>
Description Attributes Data Childs
[AT LEAST ONE TAG] A single localized changelog item to be inserted in the extension's changelog. There must be at least one changelog-item tag if there is the menu-changelog tag. version: the version of this changelog item.

date: The date of this changelog item in the standard XSD date format.
Text NO
+
            <changelog-item version="0.0.8" date="2008-04-12"><![CDATA[ - First public release]]></changelog-item>
 
         </menu-changelog>
?
         <about>
Description Attributes Data Childs
[OPTIONAL TAG] This tag will enclose all the localized information relative to the extension's about window. All tags should contain the translation for the relative string in the locale of this section. If not provided the extension will be built with english default values. NO NO changelog
license
created-by
homepage
description
 
            <changelog>Changelog</changelog>
 
            <license>License</license>
 
            <created-by>Created by</created-by>
 
            <homepage>Website</homepage>
 
            <description>Description</description>
 
           </about>
?
         <options>
Description Attributes Data Childs
[OPTIONAL TAG] This tag will enclose all the localized information relative to the extension's options window. All tags should contain the translation for the relative string in the locale of this section. If not provided the extension will be built with english default values. NO NO options-text
appearance
menu
menu-to-show
custom-pages
where-to-show
main-menu
tools-menu
context-menu
show-logo
open-new-window
level
sub-menus-to-show
custom-pages-name
 
            <options-text>Options...</options-text>
 
            <appearance>Appearance</appearance>
 
            <menu>Menu</menu>
 
            <menu-to-show>Which menu to show</menu-to-show>
 
            <custom-pages>Custom pages</custom-pages>
 
            <where-to-show>Where to show the menus</where-to-show>
 
            <main-menu>In the main menu bar</main-menu>
 
            <tools-menu>In the Tools menu</tools-menu>
 
            <context-menu>In the context menu</context-menu>
 
            <show-logo>Show logo in main menu bar</show-logo>
 
            <open-new-window>Open all links in a new tab</open-new-window>
 
            <level>Level</level>
 
            <sub-menus-to-show>Sub-menus to show</sub-menus-to-show>
 
            <custom-pages-name>Fill in order to show the custom links</custom-pages-name>
 
         </options>
 
      </localized>
+
      <localized locale="it-IT">
 
         <locale-name>Italian (IT)</locale-name>
?
         <name>Un menu di test</name>
Description Attributes Data Childs
[OPTIONAL TAG] The localized extension's name. NO String NO
 
         <description><![CDATA[Breve descrizione it-IT del menu. Questo menu ha solo finalità di testing del progamma Easy Menu]]></description>
?
         <menu-changelog>
+
            <changelog-item version="0.0.9" date="2008-06-12"><![CDATA[ - Aggiunto sottomenu]]></changelog-item>
+
            <changelog-item version="0.0.8" date="2008-04-12"><![CDATA[ - Prima release pubblica]]></changelog-item>
 
         </menu-changelog>
 
      </localized>
?
      <debian>
Description Attributes Data Childs
This tag will enclose all the information needed to built also the orig.tar.gz and diff.gz files suitable for packaging purposes in Debian-based systems. NO NO package-name
maintainer
orig-maintainer
watch-dir
one-line-desc
bzr-branch
deb-changelog
 
         <package-name>test-menu</package-name>
Description Attributes Data Childs
The source-package name. NO String NO
 
         <maintainer>Maintainer &lt;maintainer@distro.org&gt;</maintainer>
Description Attributes Data Childs
The maintainer of the package. Usually in the form Name Surname <name@domain.tld>. NO String NO
 
         <orig-maintainer><![CDATA[Original Maintainer <orig_maintainer@distro.org>]]></orig-maintainer>
Description Attributes Data Childs
The original maintainer of the package. Usually in the form Name Surname <name@domain.tld>. NO String NO
 
         <watch-dir>http://www.author.com/test-menu/sources/</watch-dir>
Description Attributes Data Childs
A "watchable dir", an online directory where found the source files of the extension and where any new version will be uploaded. Put there the orig.tar.gz files generated by Easy Menu. NO Valid URL address. NO
 
         <one-line-desc>Brief en-US description max 60 characters</one-line-desc>
Description Attributes Data Childs
A one line brief English description of the extension with at maximum 60 characters. The string will be cutted at 60 characters in any case. NO String, 60 characters maximum NO
 
         <bzr-branch>https://code.launchpad.net/~ubuntu-dev/firefox-extensions/
test-menu.ubuntu</bzr-branch>
Description Attributes Data Childs
This URL address will be used for the "Vcs-Bzr" field of the "debian/control" file in the diff.gz file. This must be a public accessible Bazaar branch, for example hosted on site like Launchpad. NO Valid URL address. NO
 
         <deb-changelog><![CDATA[test-menu (0.0.9-0ubuntu1) hardy; urgency=low

New upstream version (LP: #222222)

-- Original Maintainer <orig_maintainer@distro.org> Thu, 12 Jun 2008 13:00:25 +0200

test-menu (0.0.8-0ubuntu1) hardy; urgency=low

Initial release (LP: #111111)

-- Original Maintainer <orig_maintainer@distro.org> Sat, 12 Apr 2008 10:00:48 +0200]]></deb-changelog>
Description Attributes Data Childs
The content of the "debian/changelog" file of the last version of the package or the content you want to put there if this is the first packaging attempt. Easy Menu will not change anything here, copying this content directly in the diff.gz NO Text NO
 
      </debian>
 
   </extension>
 
   <main-menu>
Description Attributes Data Childs
The main-menu tag contains the structure and the content of the menu. NO NO bgcolor?
icon?
itemname+
content
?
      <icon>test0</icon>
Description Attributes Data Childs
[OPTIONAL TAG] The icon's file name (without the extension ".png") to be used as the menu's logo in the browser. The icon must be a 16x16 px PNG image with the given file name and the ".png" extension in the "./icons" folder. This tag can be child of many different tags with always the same meaning, the icon to be shown near the menu/item in the extension. NO Filename NO
+
      <itemname locale="en-US" ak="T">Test Menu</itemname>
Description Attributes Data Childs
[AT LEAST ONE TAG] The localized menu/item name to be shown with the relative locale. There must be one itemname tag for every different locale provided along with the extension. This tag can be child of many different tags, but his meaning is always the same. locale: the locale at which the content refers to. A valid locale code.

ak [OPTIONAL]: if provided an "accesskey" will be added to the menu/item for a quick access. Only one character.
String NO
+
      <itemname locale="it-IT" ak="M">Menu di Test</itemname>
*
      <tooltiptext locale="en-US">An example menu</tooltiptext>
Description Attributes Data Childs
[OPTIONAL TAG] The localized menu/item tooltiptext to be shown with the relative locale. This tag is optional but if used one tag for each locale must be provided. This tag can be child of many different tags, but his meaning is always the same. locale: the locale at which the content refers to. A valid locale code. String NO
*
      <tooltiptext locale="it-IT">Un menu di esempio</tooltiptext>
 
      <content>
Description Attributes Data Childs
Contains all the content to be inserted into a menu. NO NO (menu | menuitem | menuseparator
mailmenu | searchitem | customitem) *
The content tag can have multiple childs
of the above list in whatever order.
*
         <menuitem>
Description Attributes Data Childs
An item to be inserted in the menu. Contains all the information needed to create the item. NO NO style?
icon?
url?
itemname+
?
            <style bold="true" />
Description Attributes Data Childs
Specify a style for that menu/item. bold [OPTIONAL]: if this attribute is set to "true" the menu/item name will have bold font weight.

color [OPTIONAL]: the text color to be used for the menu/item name. Hexadecimal color code with 3 or 6 characters without the "#" at the beginning and the ";" at the end.:

bg_col [OPTIONAL]: the background color to be used for the menu/item name. Hexadecimal color code with 3 or 6 characters without the "#" at the beginning and the ";" at the end.
NO NO
?
            <url>http://easymenu.googlepage.com/</url>
Description Attributes Data Childs
The URL which the item should link. If not provided the item will have no link and no action, useful only for separators or description text. NO Valid URL address. NO
+
            <itemname locale="en-US" ak="E">Easy Menu</itemname>
+
            <itemname locale="it-IT" ak="E">Easy Menu</itemname>
*
      <tooltiptext locale="en-US">An example item</tooltiptext>
*
      <tooltiptext locale="it-IT">Un elemento di esempio</tooltiptext>
 
         </menuitem>
*
         <menuitem>
?
            <url>https://launchpad.net/easymenu</url>
+
            <itemname locale="en-US" ak="L">Easy Menu on Launchpad</itemname>
+
            <itemname locale="it-IT" ak="L">Easy Menu su Launchpad</itemname>
 
         </menuitem>
*
         <menuseparator />
Description Attributes Data Childs
This tag tell Easy Menu to insert a menu separator in the menu that is a simple horizontal line useful for grouping items in the menu. NO NO NO
*
         <mailmenu icons="true">
Description Attributes Data Childs
A special menu item that automatically insert into the menu a submenu where will be inserted the 4 links to the last month archive pages, of a Mailman standard mailing list, ordered by Thread, Subject, Author and Date. Only the URL of the mailing list archive root is needed. icons: if "true" the 4 standard icons provided along with Easy Menu will be shown near the links of the submenu. If "false" no icons will be shown near the links. NO bgcolor?
style?
icon?
url
itemname+
label+
thread+
subject+
author+
date+
?
            <bgcolor border="b6a391">fea</bgcolor>
Description Attributes Data Childs
The background color to be used for the menu. border [OPTIONAL]: The border color to be used for the menu. Hexadecimal color code with 3 or 6 characters without the "#" at the beginning and the ";" at the end. Hexadecimal color code with 3 or 6 characters without the "#" at the beginning and the ";" at the end. NO
?
            <style bold="true" color="cf1d1d" bg_col="ffc" />
 
            <url>http://mail.python.org/pipermail/mailman-announce/</url>
Description Attributes Data Childs
The URL of the "root" page of a Mailman mailing list archive. Easy Menu will create automatically the links in the extension to link dinamically the last month archives. NO Valid URL address. NO
+
            <itemname locale="en-US" ak="M">Mailman Mailing list</itemname>
+
            <itemname locale="it-IT" ak="M">Mailing list di Mailman</itemname>
*
      <tooltiptext locale="en-US">An example mail menu</tooltiptext>
*
      <tooltiptext locale="it-IT">Un 'mail menu' di esempio</tooltiptext>
+
            <label locale="en-US" bold="true">Last month ordered by:</label>
Description Attributes Data Childs
[AT LEAST ONE TAG] This localized label, without any link or action, will be inserted in the submenu just before the 4 links to the last month list archives. locale: the locale at which the content refers to. A valid locale code.

bold [OPTIONAL]: if "true" the label will have a bold font weight.
String. NO
+
            <label locale="it-IT" bold="true">Ultimo mese ordinato per:</label>
+
            <thread locale="en-US" ak="T">Thread</thread>
Description Attributes Data Childs
[AT LEAST ONE TAG] The localized name to be placed near the "ordered by thread" link of the submenu. locale: the locale at which the content refers to. A valid locale code.

ak [OPTIONAL]: if provided an "accesskey" will be added to the item for a quick access. Only one character.
String NO
+
            <thread locale="it-IT" ak="D">Discussione</thread>
+
            <subject locale="en-US" ak="S">Subject</subject>
Description Attributes Data Childs
[AT LEAST ONE TAG] The localized name to be placed near the "ordered by subject" link of the submenu. locale: the locale at which the content refers to. A valid locale code.

ak [OPTIONAL]: if provided an "accesskey" will be added to the item for a quick access. Only one character.
String NO
+
            <subject locale="it-IT" ak="S">Soggetto</subject>
+
            <author locale="en-US" ak="A">Author</author>
Description Attributes Data Childs
[AT LEAST ONE TAG] The localized name to be placed near the "ordered by author" link of the submenu. locale: the locale at which the content refers to. A valid locale code.

ak [OPTIONAL]: if provided an "accesskey" will be added to the item for a quick access. Only one character.
String NO
+
            <author locale="it-IT" ak="A">Autore</author>
+
            <date locale="en-US" ak="D">Date</date>
Description Attributes Data Childs
[AT LEAST ONE TAG] The localized name to be placed near the "ordered by date" link of the submenu. locale: the locale at which the content refers to. A valid locale code.

ak [OPTIONAL]: if provided an "accesskey" will be added to the item for a quick access. Only one character.
String NO
+
            <date locale="it-IT" ak="a">Data</date>
 
         </mailmenu>
*
         <menu>
Description Attributes Data Childs
The menu tag contains the structure and the content of a submenu. NO NO bgcolor?
style?
icon?
itemname+
content
?
            <bgcolor border="b6a391">cdf</bgcolor>
?
            <style bg_col="cdf" />
?
            <icon>test1</icon>
+
            <itemname locale="en-US" ak="S">A Sub Menu</itemname>
+
            <itemname locale="it-IT" ak="S">Un Sottomenu</itemname>
 
            <content>
*
               <menuitem>
?
                  <icon>test1</icon>
?
                  <url>http://www.ubuntu.com/</url>
+
                  <itemname locale="en-US" ak="U">Ubuntu Linux</itemname>
+
                  <itemname locale="it-IT" ak="U">Ubuntu Linux</itemname>
 
               </menuitem>
*
               <menu>
+
                  <itemname locale="en-US" ak="S">Another Sub Menu</itemname>
+
                  <itemname locale="it-IT" ak="S">Un ulteriore Sottomenu</itemname>
 
                  <content>
*
                     <menuitem>
?
                        <icon>test1</icon>
?
                        <url>http://addons.mozilla.org/</url>
+
                        <itemname locale="en-US" ak="A">Mozilla Addons site</itemname>
+
                        <itemname locale="it-IT" ak="A">Sito degli Addons di Mozilla</itemname>
 
                     </menuitem>
 
                  </content>
 
               </menu>
 
            </content>
 
         </menu>
*
         <menuseparator />
*
         <customitem>
Description Attributes Data Childs
Allow to insert a customizable item in the menu. When the extension is installed this item is not shown because the relative value is not set. In the extension's preferences will be a tab where the user can setup the value for that item. If a value is specified in the extension's preferences the item will be shown. This special item can be useful for personal pages on some site, personal account page, etc. Just the "base URL" is needed. The extension will automatically generate the link to the "base URL" + the user value. NO NO style?
icon?
url
itemname+
customlabel+
 
            <url>https://launchpad.net/~</url>
Description Attributes Data Childs
The "base URL" of the custom item. The extension item link will be "base URL" + the user value set in the extension's preferences. NO Valid URL address. NO
+
            <itemname locale="en-US" ak="P">Personal Page on Launchpad</itemname>
+
            <itemname locale="it-IT" ak="P">Profilo su Launchpad</itemname>
*
      <tooltiptext locale="en-US">An example custom item</tooltiptext>
*
      <tooltiptext locale="it-IT">Una voce personalizzata di esempio</tooltiptext>
+
            <customlabel locale="en-US">Insert the name of the personal page on Launchpad</customlabel>
Description Attributes Data Childs
The localized label to be shown in the extension's preferences tab where the user have to set their custom part of the URL. locale: the locale at which the content refers to. A valid locale code. String NO
+
            <customlabel locale="it-IT">Inserire il nome della pagina personale su Launchpad</customlabel>
 
         </customitem>
*
         <searchitem>
Description Attributes Data Childs
Insert a search item in the menu. This will be shown as a normal item in the menu but when the user click on it a popup window will appear with an input textbox where the user can write the string to be searched with the provided search engine. Every GET search method can be used. NO NO style?
icon?
url
itemname+
searchlabel+
 
            <url>https://launchpad.net/+search?field.text=</url>
Description Attributes Data Childs
The URL to be used for the search. The text inserted by the user will be automatically added at the end of the URL. Every search form of type GET can be used, just put the GET variable that need the user input at the end of the URL, ending with the equal sign (=). NO Valid URL address. NO
+
            <itemname locale="en-US" ak="S">Launchpad search example</itemname>
+
            <itemname locale="it-IT" ak="r">Esempio di ricerca su Launchpad</itemname>
*
      <tooltiptext locale="en-US">An example search item</tooltiptext>
*
      <tooltiptext locale="it-IT">Una voce di ricerca di esempio</tooltiptext>
+
            <searchlabel locale="en-US">Search on Launchpad site</searchlabel>
Description Attributes Data Childs
The localized label to be shown in the popup window just above the textbox input where the user have to write the search string. locale: the locale at which the content refers to. A valid locale code. String NO
+
            <searchlabel locale="it-IT">Ricerca sul sito Launchpad</searchlabel>
 
         </searchitem>
*
         <menuitem>
?
            <icon>test2</icon>
?
            <url>http://www.python.org/</url>
+
            <itemname locale="en-US" ak="y">Python.org</itemname>
+
            <itemname locale="it-IT" ak="y">Python.org</itemname>
 
         </menuitem>
 
      </content>
 
   </main-menu>
 
</easy-menu>