-/* NEW BSD LICENSE {{{
-Copyright (c) 2012, 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 = xml`
-<plugin name="PDF.js.js" version="1.0.0"
- href="http://vimpr.github.com/"
- summary="PDF.js controller."
- lang="en-US"
- xmlns="http://vimperator.org/namespaces/liberator">
- <author email="anekos@snca.net">anekos</author>
- <license>New BSD License</license>
- <project name="Vimperator" minVersion="3.0"/>
- <p></p>
- <item>
- <tags>:pdfjs-mapping-sample</tags>
- <description><p>mapping sample</p><code><![CDATA[
- nnoremap -urls ^\\.pdf$ i :<C-u>pdfjs index<Space>
- nnoremap -urls ^\\.pdf$ z :<C-u>pdfjs zoom<Space>
- ]]></code></description>
- </item>
-</plugin>`;
-// }}}
-
-(function () {
-
- let scrollCount = 1;
-
- // Functions {{{
-
- function getScrollHeight (count) {
- let base = content.innerHeight / 10;
- if (count > 0)
- scrollCount = count;
- return base * scrollCount;
- }
-
- function addMap (keys, desc, action) {
- mappings.addUserMap(
- [modes.NORMAL],
- keys,
- desc + ' - PDF.js.js',
- action,
- {
- count: true,
- matchingUrls: /\.pdf$/
- }
- );
- }
-
- function getOutline () {
- return Array.slice(content.document.querySelector('#outlineView').querySelectorAll('.outlineItem > a'));
- }
-
- function getOutlineLevel (node) {
- let level = 0;
- while (node && (node.getAttribute('id') != 'outlineView')) {
- node = node.parentNode;
- level++;
- }
- return node ? (level / 2): 0;
- }
-
- function nSpace (level) {
- let res = '';
- for (i = 0; i < level; i++)
- res += ' ';
- return res;
- }
-
- // }}}
-
- // Mappings {{{
-
- addMap(
- ['j'],
- 'Scroll Down',
- function (count) {
- content.document.querySelector('#viewerContainer').scrollTop += getScrollHeight(count);
- }
- );
-
- addMap(
- ['k'],
- 'Scroll up',
- function (count) {
- content.document.querySelector('#viewerContainer').scrollTop -= getScrollHeight(count);
- }
- );
-
- addMap(
- ['n'],
- 'Next page',
- function (count) {
- content.window.wrappedJSObject.PDFView.page += (count > 0 ? count : 1);
- }
- );
-
- addMap(
- ['p'],
- 'Previous page',
- function (count) {
- content.window.wrappedJSObject.PDFView.page -= (count > 0 ? count : 1);
- }
- );
-
- addMap(
- ['gg'],
- 'Go to page top or N page.',
- function (count) {
- if (count > 0)
- content.window.wrappedJSObject.PDFView.page = count;
- else
- content.window.wrappedJSObject.PDFView.page = 1;
- }
- );
-
- addMap(
- ['zh'],
- 'Fit to page.',
- function (count) {
- liberator.execute('pdfjs zoom page-fit');
- }
- );
-
- addMap(
- ['zw'],
- 'Fit to page to width.',
- function (count) {
- liberator.execute('pdfjs zoom page-width');
- }
- );
-
- addMap(
- ['za'],
- 'Fit to page to width.',
- function (count) {
- liberator.execute('pdfjs zoom auto');
- }
- );
-
- addMap(
- ['zz'],
- 'Fit to page to width.',
- function (count) {
- commandline.open('', 'pdfjs zoom ', modes.EX);
- }
- );
-
- // }}}
-
- commands.addUserCommand( // {{{
- ['pdfjs'],
- 'PDF.js',
- function () void 'Meow is best',
- {
- subCommands: [
- new Command(
- ['i[ndex]'],
- 'Jump page by index',
- function (args) {
- let index = args.literalArg.match(/^#(\d+)$/);
- if (index) {
- let os = getOutline();
- buffer.followLink(os[parseInt(index[1], 10)], liberator.CURRENT_TAB);
- } else {
- content.window.wrappedJSObject.PDFView.page = parseInt(args.literalArg, 10);
- }
- },
- {
- literal: 0,
- completer: function (context, args) {
- function desc (o) {
- const PageRE = /#page=(\d+)\&/;
- if (o.href && PageRE.test(o.href)) {
- return `${nSpace(getOutlineLevel(o))} ${o.textContent} (p${o.href.match(PageRE)[1]})`;
- } else {
- return `${nSpace(getOutlineLevel(o))} ${o.textContent}`;
- }
- }
-
- let os = getOutline();
- context.compare = void 0;
- context.filters = [CompletionContext.Filter.textDescription];
- context.completions = [
- [
- '#' + i, desc(o)
- ]
- for ([i, o] in Iterator(os))
- ];
- }
- }
- ),
-
- new Command(
- ['z[oom]'],
- 'Zoom',
- function (args) {
- content.window.wrappedJSObject.PDFView.parseScale(args.literalArg);
- },
- {
- literal: 0,
- completer: function (context, args) {
- let os = Array.slice(content.document.querySelector('#scaleSelect').querySelectorAll('option'));
- context.completions = [
- [o.value, o.textContent]
- for ([, o] in Iterator(os))
- ];
- }
- }
- )
- ]
- },
- true
- ); // }}}
-
-})();
-
-// vim:sw=2 ts=2 et si fdm=marker: