您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Create reminders in the Waze Map Editor.
// // ==UserScript== // @name WME Reminders // @namespace WazeDev // @version 2021.01.15.001 // @description Create reminders in the Waze Map Editor. // @author MapOMatic // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/ // @license GNU GPLv3 // @contributionURL https://github.com/WazeDev/Thank-The-Authors // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js // @grant none // ==/UserScript== /* global WazeWrap */ /* global $ */ /* global GM_info */ const SCRIPT_NAME = GM_info.script.name; const SCRIPT_VERSION = GM_info.script.version; const TAB_BUTTON_TEXT = 'Reminders'; const ALARM_NAME_PLACEHOLDER = '-- alarm name here --'; const SETTINGS_STORE_NAME = 'wmeReminders'; const DEFAULT_ALARM_NAME = 'This is your alarm.'; let _settings = {}; let _alarmTimeInput; let _alarmNameInput; let _tabButton; let _timer; function checkSettings(obj, defaultObj) { Object.keys(defaultObj).forEach(key => { if (!obj.hasOwnProperty(key)) { obj[key] = defaultObj[key]; } else if (defaultObj[key] && (defaultObj[key].constructor === {}.constructor)) { checkSettings(obj[key], defaultObj[key]); } }); } function loadSettings() { const loadedSettings = $.parseJSON(localStorage.getItem(SETTINGS_STORE_NAME)); const defaultSettings = { alarmTime: null, alarmName: null }; if (loadedSettings) { _settings = loadedSettings; checkSettings(_settings, defaultSettings); } else { _settings = defaultSettings; } } function saveSettings() { if (localStorage) { _settings.alarmTime = _alarmTimeInput.val(); _settings.alarmName = _alarmNameInput.val(); localStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(_settings)); } } function onTimeElapsed() { let alarmName = _alarmNameInput.val().trim(); if (!alarmName.length) { alarmName = DEFAULT_ALARM_NAME; } WazeWrap.Alerts.info(SCRIPT_NAME, alarmName, true, false); resetAlarm(); } function killTimer() { if (_timer) clearTimeout(_timer); } function getTimeParts(timeStr) { const match = /(\d+):(\d+)/.exec(timeStr); if (match) { const [, hr, min] = match; return { hr, min }; } return null; } function getNewAlarmOffsetMs(timeParts) { const dtNow = new Date(); const dtNew = dtNow.clone(); dtNew.setHours(timeParts.hr, timeParts.min, 0, 0); if (dtNew < dtNow) { dtNew.addDays(1); } return dtNew - dtNow; } function resetAlarm() { killTimer(); const timeParts = getTimeParts(_alarmTimeInput.val()); if (timeParts) { const alarmTimeOffset = getNewAlarmOffsetMs(timeParts); _timer = setTimeout(onTimeElapsed, alarmTimeOffset); } } function onAlarmTimeInputChanged() { saveSettings(); resetAlarm(); } function onAlarmNameInputChanged() { saveSettings(); } function initTabButton() { _tabButton = $(`a[href="#sidepanel-${TAB_BUTTON_TEXT.toLowerCase()}"]`); _tabButton.empty(); _tabButton.append('<span class="fa fa-bell">'); _tabButton.attr('title', SCRIPT_NAME); } function initAlarmTimeInput() { _alarmTimeInput = $('#wmeRemindersAlarmTime'); _alarmTimeInput.val(_settings.alarmTime); _alarmTimeInput.change(onAlarmTimeInputChanged); resetAlarm(); } function initAlarmNameInput() { _alarmNameInput = $('#wmeRemindersAlarmName'); _alarmNameInput.change(onAlarmNameInputChanged); _alarmNameInput.val(_settings.alarmName); } function initTab() { initTabButton(); initAlarmTimeInput(); initAlarmNameInput(); } function addTab() { const $content = $('<div>').append( $('<span>', { style: 'font-size:14px; font-weight:600' }).text(SCRIPT_NAME), $('<span>', { style: 'font-size:11px;margin-left:10px;color:#aaa;' }).text(SCRIPT_VERSION), $('<div>', { style: 'padding-top:4px;' }).append( $('<div>').append($('<span>').text('Alarm:')), $('<input>', { id: 'wmeRemindersAlarmTime', type: 'time' }), $('<input>', { id: 'wmeRemindersAlarmName', type: 'text', placeholder: ALARM_NAME_PLACEHOLDER }) ) ); new WazeWrap.Interface.Tab(TAB_BUTTON_TEXT, $content.html(), initTab); } function init() { loadSettings(); addTab(); } function bootstrap() { if (WazeWrap.Ready) { init(); } else { setTimeout(bootstrap, 250); } } bootstrap();