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; id='n202' href='#n202'>202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238