', 'prev page', function() prevPage()],
['^', 'first page', function() loadPage(0)],
['$', 'last page', function() loadPage(pages.length-1)],
['.', 'last page', function(count) loadPage(count?count-1:0), {count: true}],
['q', 'stop presentation', function() stop()],
];
let win;
let doc;
let pages = [];
let curpage = 0;
let pre;
let header;
let fontSize = 18.0;
function addKeys() {
keys.forEach(function([key, desc, action, extra])
mappings.addUserMap([modes.NORMAL], [key], desc, action, extra));
}
function fitPage() {
if(pre.innerHTML=='') return;
pre.style.display = 'inline';
let parentWidth = pre.parentNode.offsetWidth;
let parentHeight = pre.parentNode.offsetHeight;
let width = pre.offsetWidth;
let height = pre.offsetHeight;
let preRatio = width/height;
let winRatio = parentWidth/parentHeight;
if(preRatio>winRatio) {
fontSize *= 0.9*(parentWidth-10)/width;
} else {
fontSize *= 0.9*(parentHeight-10)/height;
}
pre.style.fontSize = fontSize+'px';
pre.style.display = 'block';
}
function loadPage(page) {
let text = pages[page];
pre.innerHTML = text;
if(header) {
header.innerHTML = (page+1)+'/'+pages.length;
}
fitPage();
}
function nextPage() {
curpage = curpage>=pages.length-1 ? 0 : curpage+1;
loadPage(curpage);
}
function prevPage() {
curpage = curpage<=0 ? pages.length-1 : curpage-1;
loadPage(curpage);
}
function parsePages(text) {
return text.split('----')
.map(function(txt) txt.replace(/^(?:\r\n|[\r\n])|(?:\r\n|[\r\n])$/g, ''));
}
function save_setting(setting) {
setting.fullscreen = options.fullscreen;
setting.guioptions = options.guioptions;
// TODO: save key mapping
//setting.mappings = keys.map(function([key,]) {
// let mapping = mappings.get(modes.NORMAL, key);
// return [mapping.modes, key, mapping.description, mapping.action, mapping.extra];
//});
}
function load_setting(setting) {
options.fullscreen = setting.fullscreen;
options.guioptions = setting.guioptions;
// TODO: load key mapping
//setting.mappings.forEach(function([modes, key, desc, action, extra]) {
// mappings.addUserMap(modes, [key], desc, action, extra);
//});
}
let original_setting = {};
function start() {
save_setting(original_setting);
options.fullscreen = true;
options.guioptions = '';
win = window.content;
doc = win.document;
let text = util.evaluateXPath('//div[@id="text"]').snapshotItem(0);
pages = parsePages(text.innerHTML);
addKeys();
header = util.evaluateXPath('//*[@id="header"]').snapshotItem(0);
pre = util.evaluateXPath('//pre[@id="page"]').snapshotItem(0);
pre.style.fontSize = fontSize+'px';
pre.style.margin = '0px';
loadPage(0);
}
function stop() {
load_setting(original_setting);
}
commands.add(['presentation'], 'start presentation', //{{{
function(args) {
start();
},
{
argCount: '0',
}); //}}}
})();
// vim: fdm=marker sw=4 ts=4 et:
'n29' href='#n29'>29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// PLUGIN_INFO//{{{
var PLUGIN_INFO =
<VimperatorPlugin>
<name>{NAME}</name>
<description>hash of file</description>
<author mail="konbu.komuro@gmail.com" homepage="http://d.hatena.ne.jp/hogelog/">hogelog</author>
<version>0.2.2</version>
<minVersion>2.3</minVersion>
<maxVersion>2.3</maxVersion>
<updateURL>https://github.com/vimpr/vimperator-plugins/raw/master/hash.js</updateURL>
<detail><![CDATA[
== COMMANDS ==
hash:
:hash md2|md5|sha1|sha256|sha384|sha512 file-path
]]></detail>
</VimperatorPlugin>;
//}}}
(function() {
const PR_UINT_MAX = 0xffffffff;
let Crypt = Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
let Algos = [
["md2", "MD2 Algorithm"],
["md5", "MD5 Algorithm"],
["sha1", "SHA1 Algorithm"], // SHA-1
["sha256", "SHA256 Algorithm"], // SHA-256
["sha384", "SHA384 Algorithm"], // SHA-384
["sha512", "SHA512 Algorithm"], // SHA-512
];
function getStream(path)
{
let file = io.File(path);
let stream = Cc["@mozilla.org/network/file-input-stream;1"]
.createInstance(Ci.nsIFileInputStream);
stream.init(file, 0x01, 0444, 0);
return stream;
}
// return the two-digit hexadecimal code for a byte
function toHexString(charCode)
{
return ("0" + charCode.toString(16)).slice(-2);
}
commands.addUserCommand(["hash"], "hash of file",
function(args){
if (args.length!=2) {
liberator.echo("usage \":hash md2|md5|sha1|sha256|sha384|sha512 file-path\"");
return false;
}
let [algo, path] = args;
let stream = getStream(path);
Crypt.initWithString(algo);
// read the entire stream
Crypt.updateFromStream(stream, PR_UINT_MAX);
stream.close();
// get base-64 string
let hash = Crypt.finish(false);
// convert the binary hash data to a hex string.
let str = [toHexString(hash.charCodeAt(i)) for(i in hash)].join("");
util.copyToClipboard(str, true);
},
{
bang: true,
completer: function (context, args){
if (args.completeArg == 0) {
context.title = ["hash", "algorithm"];
context.completions = Algos;
} else if (args.completeArg == 1) {
completion.url(context, "f");
}
},
literal: 1,
},
true
);
})();
// vim: fdm=marker sw=4 ts=4 et:
|