diff --git a/Makefile b/Makefile index 3645f6ad..318854e0 100644 --- a/Makefile +++ b/Makefile @@ -6,14 +6,16 @@ VERSION = 0.5.2pre OS = $(shell uname -s) BUILD_DATE = $(shell date "+%Y/%m/%d %H:%M:%S") -JAR_FILES = ${shell find chrome/content -type f \ - -a ! -path '*CVS*' \ - -a \( -path '*.js' \ - -o -path '*.css' \ - -o -path '*.xul' \ - -o -path '*.rdf' \ - -o -path '*.png' \ - \) } chrome.manifest +JAR_FILES = ${shell find content skin \ + -type f \ + -a ! -path '*CVS*' \ + -a \( \ + -path '*.js' \ + -o -path '*.css' \ + -o -path '*.xul' \ + -o -path '*.png' \ + \) \ + } JAR_DIRS = $(foreach f,${JAR_FILES},$(dir $f)) JAR = chrome/vimperator.jar @@ -148,6 +150,7 @@ ${BUILD_JAR_SUBDIRS}: ${JAR}: ${BUILD_JAR_SUBDIRS} ${JAR_FILES} @echo "Building JAR..." + ${Q}mkdir -p $(dir ${JAR}) #FIXME ${Q}for f in ${JAR_FILES} ; do \ ${SED} -e "s,###VERSION###,${VERSION},g" \ -e "s,###DATE###,${BUILD_DATE},g" \ diff --git a/chrome.manifest b/chrome.manifest index 2c931d0a..73afa673 100644 --- a/chrome.manifest +++ b/chrome.manifest @@ -1,3 +1,3 @@ -# vimperators chrome registration file -content vimperator jar:chrome/vimperator.jar!/chrome/content/vimperator/ +content vimperator jar:chrome/vimperator.jar!/content/ +skin vimperator classic/1.0 jar:chrome/vimperator.jar!/skin/ overlay chrome://browser/content/browser.xul chrome://vimperator/content/vimperator.xul diff --git a/chrome/content/vimperator/contents.rdf b/chrome/content/vimperator/contents.rdf deleted file mode 100644 index 6ae9141d..00000000 --- a/chrome/content/vimperator/contents.rdf +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - chrome://vimperator/content/vimperator.xul - - - - - diff --git a/chrome/content/vimperator/bookmarks.js b/content/bookmarks.js similarity index 100% rename from chrome/content/vimperator/bookmarks.js rename to content/bookmarks.js diff --git a/chrome/content/vimperator/buffers.js b/content/buffers.js similarity index 100% rename from chrome/content/vimperator/buffers.js rename to content/buffers.js diff --git a/chrome/content/vimperator/commands.js b/content/commands.js similarity index 100% rename from chrome/content/vimperator/commands.js rename to content/commands.js diff --git a/chrome/content/vimperator/completion.js b/content/completion.js similarity index 100% rename from chrome/content/vimperator/completion.js rename to content/completion.js diff --git a/chrome/content/vimperator/events.js b/content/events.js similarity index 100% rename from chrome/content/vimperator/events.js rename to content/events.js diff --git a/chrome/content/vimperator/file.js b/content/file.js similarity index 100% rename from chrome/content/vimperator/file.js rename to content/file.js diff --git a/chrome/content/vimperator/find.js b/content/find.js similarity index 100% rename from chrome/content/vimperator/find.js rename to content/find.js diff --git a/content/help.css b/content/help.css new file mode 100644 index 00000000..e1ac9f88 --- /dev/null +++ b/content/help.css @@ -0,0 +1,117 @@ +div.main { + font-family: -moz-fixed; + white-space: -moz-pre-wrap; + width: 800px; + margin-left: auto; + margin-right: auto; +} + +h1 { + text-align: center; +} + +p.tagline { + text-align: center; + font-weight: bold; +} + +table.vimperator { + border-width: 1px; + border-style: dotted; + border-color: gray; + margin-bottom: 2em; /* FIXME: just a quick hack until we have proper pages */ +} +table.vimperator td { + border: none; + padding: 3px; +} +tr.separator { + height: 10px; +} +hr { + height: 1px; + background-color: white; + border-style: none; + margin-top: 0; + margin-bottom: 0; +} +td.taglist { + text-align: right; + vertical-align: top; + border-spacing: 13px 10px; +} +td.taglist td { + width: 100px; + padding: 3px 0px; +} +tr.taglist code, td.usage code { + margin: 0px 2px; +} +td.usage code { + white-space: nowrap; +} +td.taglist code { + margin-left: 2em; +} +code.tag { + font-weight: bold; + color: rgb(255, 0, 255); /* magenta */ +} +tr.description { + margin-bottom: 4px; +} +table.commands { + background-color: rgb(250, 240, 230); +} +table.mappings { + background-color: rgb(230, 240, 250); +} +table.options { + background-color: rgb(240, 250, 230); +} + +fieldset.paypal { + border: none; +} + +.argument { + color: #6A97D4; +} + +.command { + font-weight: bold; + color: #632610; +} + +.mapping { + font-weight: bold; + color: #102663; +} + +.option { + font-weight: bold; + color: #106326; +} + +.code { + color: #108826; +} + +.shorthelp { + font-weight: bold; +} + +.version { + position: absolute; + top: 10px; + right: 2%; + color: #C0C0C0; + text-align: right; +} + +.warning { + font-weight: bold; + color: red; +} + +/* vim: set fdm=marker sw=4 ts=4 et: */ diff --git a/chrome/content/vimperator/help.js b/content/help.js similarity index 99% rename from chrome/content/vimperator/help.js rename to content/help.js index 4ee38e98..6da9766e 100644 --- a/chrome/content/vimperator/help.js +++ b/content/help.js @@ -208,7 +208,7 @@ vimperator.help = function(section, easter) //{{{ '\n' + '\n\nVimperator help\n' + // XXX: stylesheet broken here? Have to add it in the vimperator.xul file - '\n' + + '\n' + '\n\n
\n' + 'version ' + vimperator.version + '\n' + header + diff --git a/chrome/content/vimperator/hints.js b/content/hints.js similarity index 100% rename from chrome/content/vimperator/hints.js rename to content/hints.js diff --git a/chrome/content/vimperator/logo_white.png b/content/logo_white.png similarity index 100% rename from chrome/content/vimperator/logo_white.png rename to content/logo_white.png diff --git a/chrome/content/vimperator/mappings.js b/content/mappings.js similarity index 100% rename from chrome/content/vimperator/mappings.js rename to content/mappings.js diff --git a/content/modes.js b/content/modes.js new file mode 100644 index 00000000..a64af728 --- /dev/null +++ b/content/modes.js @@ -0,0 +1,184 @@ +/***** 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. + +(c) 2006-2007: Martin Stubenschrott + +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 *****/ + +vimperator.modes = (function() +{ + var main = 1; // NORMAL + var extended = 0; // NONE + + var passNextKey = false; + var passAllKeys = false; + + function getModeMessage() + { + if (passNextKey && !passAllKeys) + return "PASS THROUGH (next)"; + else if (passAllKeys && !passNextKey) + return "PASS THROUGH"; + + var ext = ""; + switch (extended) + { + case vimperator.modes.QUICK_HINT: + ext = " (quick)"; break; + case vimperator.modes.EXTENDED_HINT: + ext = " (extended)"; break; + case vimperator.modes.ALWAYS_HINT: + ext = " (always)"; break; + case vimperator.modes.MENU: // TODO: desirable? + ext = " (menu)"; break; + } + + switch (main) + { + case vimperator.modes.HINTS: + return "HINTS" + ext; + default: + return null; + } + } + + function handleModeChange(oldmode, newmode) + { + vimperator.log("switching from mode " + oldmode + " to mode " + newmode, 7); + + switch (oldmode) + { + case vimperator.modes.HINTS: + // XXX: for now this does not work, but later it should be here + // vimperator.hints.disableHahMode(); + break; + } + + if (newmode == vimperator.modes.NORMAL) + { + var value = Options.getFirefoxPref("accessibility.browsewithcaret", false); + if (value) + Options.setFirefoxPref("accessibility.browsewithcaret", false); + + vimperator.statusline.updateUrl(); + vimperator.focusContent(); + } + } + + return { + // main modes, only one should ever be active + NONE: 0, + NORMAL: 1 << 0, + HINTS: 1 << 1, + COMMAND_LINE: 1 << 2, + // extended modes, can include multiple modes, and even main modes + EX: 1 << 10, + INPUT_MULTILINE: 1 << 11, + OUTPUT_MULTILINE: 1 << 12, + SEARCH_FORWARD: 1 << 13, + SEARCH_BACKWARD: 1 << 14, + QUICK_HINT: 1 << 15, + EXTENDED_HINT: 1 << 16, + ALWAYS_HINT: 1 << 17, + MENU: 1 << 18, // a popupmenu is active + + reset: function(silent) + { + this.set(vimperator.modes.NORMAL, vimperator.modes.NONE, silent); + }, + + show: function() + { + if (!vimperator.options["showmode"]) + return; + + // never show mode messages if we are in command line mode + if (main == vimperator.modes.COMMAND_LINE) + return; + + var msg = getModeMessage(); + if (msg) + vimperator.commandline.echo("-- " + getModeMessage() + " --"); + else + vimperator.commandline.echo(""); + }, + + // helper function to set both modes in one go + set: function(main_mode, extended_mode, silent) + { + // if a main mode is set, the extended is always cleared + if (typeof main_mode === "number") + { + if (main_mode != main) + handleModeChange(main, main_mode); + + main = main_mode; + if (!extended_mode) + extended = vimperator.modes.NONE; + + } + if (typeof extended_mode === "number") + extended = extended_mode; + + if (!silent) + this.show(); + }, + + // add/remove always work on the extended mode only + add: function(mode) + { + extended |= mode; + this.show(); + }, + remove: function(mode) + { + extended = (extended | mode) ^ mode; + this.show(); + }, + + get passNextKey() { return passNextKey; }, + set passNextKey(value) { passNextKey = value; this.show(); }, + + get passAllKeys() { return passAllKeys; }, + set passAllKeys(value) { passAllKeys = value; this.show(); }, + + get main() { return main; }, + set main(value) { + if (value != main) + handleModeChange(main, value); + + main = value; + // setting the main mode always resets any extended mode + extended = vimperator.modes.NONE; + this.show(); + }, + + get extended() { return extended; }, + set extended(value) { + extended = value; this.show(); + } + } +})(); + +// vim: set fdm=marker sw=4 ts=4 et: diff --git a/chrome/content/vimperator/options.js b/content/options.js similarity index 100% rename from chrome/content/vimperator/options.js rename to content/options.js diff --git a/chrome/content/vimperator/tabs.js b/content/tabs.js similarity index 100% rename from chrome/content/vimperator/tabs.js rename to content/tabs.js diff --git a/content/test.js b/content/test.js new file mode 100755 index 00000000..a09ce39e --- /dev/null +++ b/content/test.js @@ -0,0 +1,13 @@ +var TestCase = mozlab.mozunit.TestCase; +var assert = mozlab.mozunit.assertions; + +var tc = new TestCase('testcase description here'); + +tc.tests = { + 'First test is successful': function() { + var vimperator = new Vimperator(); + assert.isDefined(vimperator); + assert.isTrue(true); + } +} +tc.run() diff --git a/chrome/content/vimperator/ui.js b/content/ui.js similarity index 100% rename from chrome/content/vimperator/ui.js rename to content/ui.js diff --git a/chrome/content/vimperator/vimperator.js b/content/vimperator.js similarity index 100% rename from chrome/content/vimperator/vimperator.js rename to content/vimperator.js diff --git a/chrome/content/vimperator/vimperator.xul b/content/vimperator.xul similarity index 98% rename from chrome/content/vimperator/vimperator.xul rename to content/vimperator.xul index 7c57f892..345d1602 100644 --- a/chrome/content/vimperator/vimperator.xul +++ b/content/vimperator.xul @@ -29,9 +29,7 @@ the terms of any one of the MPL, the GPL or the LGPL. }}} ***** END LICENSE BLOCK ***** --> - - - +