Waze Editor Clock

Wazeエディターにドラッグ可能でサイズ変更可能な装飾付き時計を表示します

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Waze Editor Clock
// @namespace   waze-editor-clock
// @version     1.8
// @description Wazeエディターにドラッグ可能でサイズ変更可能な装飾付き時計を表示します
// @author      Bard
// @match       https://www.waze.com/ja/editor?env=*
// @grant       none
// ==/UserScript==

// 時計要素
const clockElement = document.createElement('div');
clockElement.id = 'waze-editor-clock';
clockElement.style.cssText = `
  position: fixed;
  bottom: 19px;
  left: 50%; /* 中央揃え */
  transform: translateX(-50%);
  z-index: 1000;
  background-color: #007bff; /* 背景色を青に変更 */
  color: #fff; /* テキスト色を白に変更 */
  padding: 10px;
  border-radius: 5px; /* 角を丸くする */
  font-size: 23px;
  cursor: move; /* 時計をドラッグ可能にする */
  aspect-ratio: 1; /* アスペクト比を維持する */
  resize: both; /* サイズ変更を有効にする */
  overflow: hidden; /* サイズ変更中のオーバーフローを隠す */
  min-width: 100px; /* 最小幅を設定 */
  min-height: 40px; /* 最小高さを設定 */
  text-align: center; /* テキストを中央揃えにする */
`;

// ローカルストレージから時計の位置とサイズを読み込む
const storedClockStyle = localStorage.getItem('wazeEditorClockStyle');
if (storedClockStyle) {
  clockElement.style.cssText = storedClockStyle;
}

// ドラッグイベントを処理する関数
function handleDrag(event) {
  const newX = event.clientX - offsetX;
  const newY = event.clientY - offsetY;
  // アスペクト比を維持するため、垂直方向の移動を制限する
  if (newY >= 0 && newY + clockElement.offsetHeight <= window.innerHeight) {
    clockElement.style.left = newX + 'px';
    clockElement.style.top = newY + 'px';
    // 新しい位置をローカルストレージに保存する
    saveClockStyle();
  }
}

// ドラッグを開始する関数
function startDrag(event) {
  offsetX = event.clientX - clockElement.getBoundingClientRect().left;
  offsetY = event.clientY - clockElement.getBoundingClientRect().top;
  window.addEventListener('mousemove', handleDrag);
  window.addEventListener('mouseup', stopDrag);
}

// ドラッグを停止する関数
function stopDrag() {
  window.removeEventListener('mousemove', handleDrag);
  window.removeEventListener('mouseup', stopDrag);
}

// 時計のスタイルをローカルストレージに保存する関数
function saveClockStyle() {
  localStorage.setItem('wazeEditorClockStyle', clockElement.style.cssText);
}

// ドラッグ中のオフセットを格納する変数
let offsetX, offsetY;

// 時計をドラッグ可能にする
clockElement.addEventListener('mousedown', startDrag);

// 1秒ごとに時計を更新する
setInterval(() => {
  const date = new Date();
  const hours = date.getHours().toString().padStart(2, '0');
  const minutes = date.getMinutes().toString().padStart(2, '0');
  // 秒を時計表示から削除する
  clockElement.textContent = `${hours}:${minutes}`;
}, 1000);

// 時計要素をbodyに追加する
document.body.appendChild(clockElement);