您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Местное время для Linux.Org.ru
// ==UserScript== // @name Local time for LOR // @name:en Local time for LOR // @description:ru Местное время для Linux.Org.ru // @description:en Local time userscript for Linux.Org.Ru // @namespace https://maximov.space/userscripts // @include https://www.linux.org.ru/* // @version 0.6.2 // @grant none // @description Местное время для Linux.Org.ru // ==/UserScript== /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { var _date = __webpack_require__(1); var _dateFormat = __webpack_require__(3); var _schedule = __webpack_require__(5); var TABULAR_VIEW_RE = /^\/(forum\/\w+|notifications|tracker)\/?$/; function shortDates() { return TABULAR_VIEW_RE.test(window.location.pathname); } var setLocalTime = function setLocalTime(elem) { // Chromium-based browsers don't yet recognize HTMLTimeElement, // so `dateTime` is undefined, then use `getAttribute` instead. var time = elem.dateTime ? elem.dateTime : elem.getAttribute('datetime'); var date = new Date(time); var update = function update(date) { return elem.textContent = (0, _dateFormat.display)(date, _dateFormat.FORMAT.ELAPSED, { shortDates: shortDates() }); }; var scheduleUpdateDays = function scheduleUpdateDays() { return (0, _schedule.schedule)(update, { stop: (0, _schedule.after)({ days: 2 }), every: { hours: 1 } }, date); }; var scheduleUpdateMinutes = function scheduleUpdateMinutes() { return (0, _schedule.schedule)(update, { stop: (0, _schedule.after)({ hours: 1 }), every: { seconds: 10 } }, date); }; update(date); elem.setAttribute('data-tooltip', (0, _dateFormat.display)(date, _dateFormat.FORMAT.EXACT)); if (!(0, _date.elapsed)(date, { hours: 1 })) { scheduleUpdateMinutes().then(scheduleUpdateDays); } else if (!(0, _date.elapsed)(date, { days: 2 })) { scheduleUpdateDays(); } }; var css = '\ntime[data-tooltip] {\n border-bottom: 2px dotted grey;\n cursor: pointer;\n}\ntime[data-tooltip]:hover {\n position: relative;\n}\ntime[data-tooltip]:hover:after {\n font-size: small;\n content: attr(data-tooltip);\n padding: 0.3em 0.5em;\n color: #333;\n position: absolute;\n left: 2em;\n top: 150%;\n white-space: nowrap;\n z-index: 20;\n border-radius: 0.5em;\n box-shadow: 0px 0px 4px #222;\n background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);\n background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #eeeeee),color-stop(1, #cccccc));\n background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);\n background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);\n background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);\n background-image: -o-linear-gradient(top, #eeeeee, #cccccc);\n}\n'; var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; document.body.appendChild(style); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = document.querySelectorAll('time')[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var time = _step.value; setLocalTime(time); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.elapsed = exports.minutesElapsedSince = exports.sameDay = exports.yesterday = exports.getDay = exports.getMonth = exports.getYear = undefined; var _delay = __webpack_require__(2); var getYear = exports.getYear = function getYear(date) { return date.getFullYear(); }; var getMonth = exports.getMonth = function getMonth(date) { return date.getMonth() + 1; }; var getDay = exports.getDay = function getDay(date) { return date.getDate(); }; var yesterday = exports.yesterday = function yesterday(date) { var newDate = new Date(date); newDate.setDate(date.getDate() - 1); return newDate; }; var sameDay = exports.sameDay = function sameDay(date1, date2) { return getYear(date1) === getYear(date2) && getMonth(date1) === getMonth(date2) && getDay(date1) === getDay(date2); }; var minutesElapsedSince = exports.minutesElapsedSince = function minutesElapsedSince(date) { var now = new Date(); var minutesDiff = (now - date) / _delay.FACTORS.minutes; var roundingFunction = minutesDiff < 1 ? Math.ceil : Math.floor; return roundingFunction(minutesDiff); }; var elapsed = exports.elapsed = function elapsed(date, delay) { return new Date() - date >= (0, _delay.translateDelay)(delay); }; /***/ }, /* 2 */ /***/ function(module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); var FACTORS = exports.FACTORS = { millis: 1, millisecond: 1, milliseconds: 1, seconds: 1000, second: 1000, minutes: 1000 * 60, minute: 1000 * 60, hours: 1000 * 60 * 60, hour: 1000 * 60 * 60, days: 1000 * 60 * 60 * 24, day: 1000 * 60 * 60 * 24 }; var units = Object.keys(FACTORS); var translateDelay = exports.translateDelay = function translateDelay(delay) { var translated = 0; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = units[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var unit = _step.value; var value = delay[unit] || 0; translated += value * FACTORS[unit]; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return translated; }; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.display = exports.displayMinutes = exports.displayDate = exports.FORMAT = undefined; var _util = __webpack_require__(4); var _date = __webpack_require__(1); var FORMAT = exports.FORMAT = { EXACT: 'EXACT', ELAPSED: 'ELAPSED' }; var displayDate = exports.displayDate = function displayDate(date, format) { var verbose = format === FORMAT.ELAPSED; var year = (0, _date.getYear)(date).toString(); var month = (0, _util.zeroPad)((0, _date.getMonth)(date), 2); var day = (0, _util.zeroPad)((0, _date.getDay)(date), 2); var now = new Date(); var dateString = undefined; if (verbose && (0, _date.sameDay)(date, now)) { dateString = 'сегодня'; } else if (verbose && (0, _date.sameDay)(date, (0, _date.yesterday)(now))) { dateString = 'вчера'; } else { dateString = day + '.' + month + '.' + year; } return dateString; }; var pluralizeMinutes = function pluralizeMinutes(minutes) { var lastDigit = minutes % 10; if (minutes >= 10 && minutes <= 20 || lastDigit == 0 || lastDigit >= 5) return "минут"; if (lastDigit == 1) return "минута"; return "минуты"; }; var displayMinutes = exports.displayMinutes = function displayMinutes(elapsedMinutes) { if (elapsedMinutes === 1) { return 'минуту назад'; } var minutesString = pluralizeMinutes(elapsedMinutes); return elapsedMinutes + ' ' + minutesString + ' назад'; }; var display = exports.display = function display(date, format) { var options = arguments.length <= 2 || arguments[2] === undefined ? { shortDates: false } : arguments[2]; var verbose = format === FORMAT.ELAPSED; if (verbose) { var elapsedMinutes = (0, _date.minutesElapsedSince)(date); if (elapsedMinutes < 60) { return displayMinutes(elapsedMinutes); } } var hour = (0, _util.zeroPad)(date.getHours(), 2); var minute = (0, _util.zeroPad)(date.getMinutes(), 2); var seconds = (0, _util.zeroPad)(date.getSeconds(), 2); var dateString = displayDate(date, format); dateString = dateString + ' ' + hour + ':' + minute; if (!options.shortDates) { dateString = dateString + ':' + seconds; } return dateString; }; /***/ }, /* 4 */ /***/ function(module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); var zeroPad = exports.zeroPad = function zeroPad(num, places) { var numString = num.toString(); var zero = places - numString.length + 1; return Array(+(zero > 0 && zero)).join('0') + num; }; /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.schedule = exports.after = undefined; var _delay = __webpack_require__(2); var _date = __webpack_require__(1); var after = exports.after = function after(delay) { return function (date) { return (0, _date.elapsed)(date, delay); }; }; var schedule = exports.schedule = function schedule(action, options) { for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { args[_key - 2] = arguments[_key]; } options = options || {}; return new Promise(function (resolve, reject) { if (!options.every) return reject(new Error('options.every not set')); if (!options.stop) return reject(new Error('options.stop not set')); if (typeof options.stop !== 'function') return reject(new Error('options.stop is not a function')); if (_typeof(options.every) !== 'object') return reject(new Error('options.every is not an object')); var interval = undefined; interval = setInterval(function () { var _options; var result = action.apply(undefined, args); if ((_options = options).stop.apply(_options, args)) { clearInterval(interval); return resolve(result); } }, (0, _delay.translateDelay)(options.every)); }); }; /***/ } /******/ ]);