let PLUGIN_INFO = {NAME} clock とけい janus_wel New BSD License 0.15.2 2.0pre 2.2pre https://github.com/vimpr/vimperator-plugins/raw/master/clock.js || let clock_format='(%t %d)' ||< this exapmple show clock like below >|| (20:34 12/12) ||< ]]> || let clock_format='(%t %d)' ||< と書くと以下のように表示されます。 >|| (20:34 12/12) ||< ]]> ; ( function () { // definitions --- // default settings const format = liberator.globalVariables.clock_format || '[%t]'; // class definitions function Clock() { this._initialize.apply(this, arguments); } Clock.prototype = { _initialize: function (format) { this._format = format; this._master = window.document.createElement('label'); this._master.setAttribute('style', this._constants.style); this._intervalInfo = {}; }, _constants: { // default style style: [ 'margin: 0;', 'padding: 1px;', 'border: 0 none;', 'color: black;', 'background-color: white;', 'font-family: monospace;', 'font-weight: bold;', ].join(''), // prefix of id and class name prefix: 'liberator-plugin-clock-', driver: { t: function (label) { return setInterval(function () label.setAttribute('value', time()), 100); }, a: function (label) { return setInterval(function () label.setAttribute('value', weekDay()), 60 * 1000); }, d: function (label) { return setInterval(function () label.setAttribute('value', day()), 60 * 1000); }, y: function (label) { return setInterval(function () label.setAttribute('value', year()), 60 * 1000); }, }, generator: { t: function (self) { let l = self._master.cloneNode(false); l.setAttribute('id', self._constants.prefix + 'clock'); l.setAttribute('value', time()); let id = self._constants.driver.t(l); return { node: l, intervalId: id, }; }, a: function (self) { let l = self._master.cloneNode(false); l.setAttribute('id', self._constants.prefix + 'wday'); l.setAttribute('value', weekDay()); let id = self._constants.driver.a(l); return { node: l, intervalId: id, }; }, d: function (self) { let l = self._master.cloneNode(false); l.setAttribute('id', self._constants.prefix + 'day'); l.setAttribute('value', day()); let id = self._constants.driver.d(l); return { node: l, intervalId: id, }; }, y: function (self) { let l = self._master.cloneNode(false); l.setAttribute('id', self._constants.prefix + 'year'); l.setAttribute('value', year()); let id = self._constants.driver.y(l); return { node: l, intervalId: id, }; }, raw: function (self, str) { let l = self._master.cloneNode(false); l.setAttribute('class', self._constants.prefix + 'raw'); l.setAttribute('value', str); return { node: l, }; }, }, }, // generate generate: function () { let box = window.document.createElement('hbox'); box.setAttribute('id', this._constants.prefix + 'box'); box.setAttribute('style', 'display: block;'); box.setAttribute('class', 'liberator-container'); let format = this._format; let generator = this._constants.generator; let raw = ''; let formatFlag = false; for (let i=0, l=format.length ; i 0) box.appendChild(generator['raw'](this, raw).node); this._box = box; }, get instance() this._box, get width() this._box.boxObject.width, hide: function () this._box.setAttribute('style', 'display: none;'), appear: function () this._box.setAttribute('style', 'display: block;'), justify: function (parentWidth) this._box.setAttribute('left', parentWidth - this.width), start: function () { let info = this._intervalInfo; for (let [k, i] in Iterator(info)) { if (!i.intervalId) { i.intervalId = this._constants.driver[k](i.node); } } }, stop: function () { let info = this._intervalInfo; for (let [k, i] in Iterator(info)) { if (i.intervalId) { clearInterval(i.intervalId); i.intervalId = undefined; } } }, }; // main --- let commandlineStack = getCommandlineStack(); if (!commandlineStack) { let errmsg = 'clock.js: not found the commandline.'; liberator.log(errmsg, 0); liberator.echoerr(errmsg); return; } // build clock let clock = new Clock(format); clock.generate(); // insert commandlineStack.appendChild(clock.instance); // register command [ [['clockhide'], 'hide clock', function () clock.hide() ], [['clockappear'], 'clock appear', function () clock.appear() ], [['clockstart'], 'start clock', function () clock.start() ], [['clockstop'], 'stop clock', function () clock.stop() ], [['clockjustify'], 'justify', function () clock.justify(window.innerWidth) ], ].forEach( function ([n, d, f]) commands.addUserCommand(n, d, f, {}) ); window.addEventListener( 'resize', function () { clock.justify(window.innerWidth); }, false ); autocommands.add( 'VimperatorEnter', /.*/, function () { clock.justify(window.innerWidth); } ); // stuff functions --- function time() { let now = new Date(); let hour = now.getHours().toString(10); let min = now.getMinutes().toString(10); if (hour.length < 2) hour = '0' + hour; if (min.length < 2) min = '0' + min; return hour + (now.getMilliseconds() < 400 ? ' ' : ':') + min; } function weekDay() { const wdays = 'sun mon tue wed thu fri sat'.split(/%s/); let now = new Date(); return now.toLocaleFormat ? now.toLocaleFormat('%a') : wdays[now.getDay()]; } function day() { let now = new Date(); let date = now.getDate().toString(10); let month = (now.getMonth() + 1).toString(10); if (date.length < 2) date = '0' + date; if (month.length < 2) month = '0' + month; return month + '/' + date; } function year() { return new Date().getFullYear().toString(10); } // node control function getCommandlineStack() { let messageTextarea = window.document.getElementById('liberator-message'); let commandlineStack = messageTextarea.parentNode; return commandlineStack.localName === 'stack' ? commandlineStack : null; } } )(); // vim: set sw=4 ts=4 et;