From 2cac12007a59b7e5b1d3f6839ab815acf05f10f5 Mon Sep 17 00:00:00 2001 From: anekos Date: Sat, 27 Nov 2010 18:04:58 +0900 Subject: Initial release: for ePub Reader addon. --- epub-reader.js | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 epub-reader.js (limited to 'epub-reader.js') diff --git a/epub-reader.js b/epub-reader.js new file mode 100644 index 0000000..0646e10 --- /dev/null +++ b/epub-reader.js @@ -0,0 +1,206 @@ +/* NEW BSD LICENSE {{{ +Copyright (c) 2010, anekos. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + + +################################################################################### +# http://sourceforge.jp/projects/opensource/wiki/licenses%2Fnew_BSD_license # +# に参考になる日本語訳がありますが、有効なのは上記英文となります。 # +################################################################################### + +}}} */ + +// INFO {{{ +let INFO = +<> + + anekos + New BSD License + + + :epubreader + :epubreader action number. +

Do action.

+
+

+ Action list: +

+
next
Go next page
+
prev
Go previous page
+
nextchapter
Go next chapter
+
prevchapter
Go previous chapter
+
bookmark
Bookmark in ePub Reader addon
+
library
Open ePub Reader library
+
+

+

+ Each actions can do mapping. + e.g. + + let g:epub_reader_map_>action< = 'l >'; + +

+
+ + anekos + New BSD License + + + :epubreader + :epubreader action number. +

actionを実行する。

+
+

+ Action のリスト: +

+
next
Go next page
+
prev
Go previous page
+
nextchapter
Go next chapter
+
prevchapter
Go previous chapter
+
bookmark
Bookmark in ePub Reader addon
+
library
Open ePub Reader library
+
+

+

+ 各アクションは + + let g:epub_reader_map_>action< = 'l >'; + + のようにしてマッピングできます。 + 一つのアクションに複数のマッピングをしたいときは、スペースで区切ります。 +

+
+; +// }}} + + +(function () { + + const MapKeys = { + prev: 'goPreviousPage', + next: 'goNextPage', + prevchapter: 'goPreviousChapter', + nextchapter: 'goNextChapter', + save: 'save', + bookmark: 'bookmark', + library: 'openLibrary' + }; + + const ReaderUrls = /^chrome:\/\/epubreader\/content\/reader.xul/; + + + function press (query) + content.document.querySelector(query).click(); + + function pressN (query, n) { + for (let i = 0; i < (n || 1); i++) + press(query); + } + + function makePress (query) + function () + press(query); + + function makePressN (query) + function (count) + pressN(query, count); + + let api = __context__.API = { + bookmark: + makePress('toolbarbutton#save'), + goPreviousPage: + makePressN('toolbarbutton#nav_page_backwards_button'), + goNextPage: + makePressN('toolbarbutton#nav_page_forwards_button'), + goPreviousChapter: + makePressN('toolbarbutton#nav_backwards_button'), + goNextChapter: + makePressN('toolbarbutton#nav_forwards_button'), + openLibrary: + makePress('toolbarbutton#library'), + save: + makePress('toolbarbutton#bookmark'), + }; + + for (let keyValue in Iterator(MapKeys)) { + let [key, value] = keyValue; + let gvname = 'epub_reader_map_' + key; + let map = liberator.globalVariables[gvname]; + + if (!map) + continue; + + let func = api[value]; + mappings.addUserMap( + [modes.NORMAL], + map.split(/\s+/), + 'for ePub Reader', + function (count) func(count), + { + count: !!func.length, + matchingUrls: ReaderUrls + } + ); + } + + commands.addUserCommand( + ['epubreader'], + 'ePub Reader addon controler', + function (args) { + if (!ReaderUrls(buffer.URL)) + return liberator.echoerr('Not in ePub Reader'); + + let [cmd, num] = args; + let func = api[MapKeys[cmd]]; + if (!func) + return liberator.echoerr('Unknown command: ' + fname); + func(parseInt(num, 10)); + }, + { + completer: function (context, args) { + if (args.length > 1) + return; + + context.completions = + [ + keyValue + for (keyValue in Iterator(MapKeys)) + ]; + } + }, + true + ); + +})(); + +// vim:sw=2 ts=2 et si fdm=marker: -- cgit v1.2.3