del.icio.usのタグに英語しか使わない人のためのGreasemonkeyスクリプト

せっかくなのでさっきのエントリturnOffIME() を使ってdel.icio.us用のGreasemonkeyスクリプトを書いてみました。Windows限定です。

機能は4つ。

  • 投稿ページのtags欄にフォーカスするとIMEがオフになる。
  • ページ上部のパンくずリストのタグを入力する所にフォーカスするとIMEがオフになる。
  • 投稿ページを表示したときにtags欄にフォーカスする。
  • 投稿ページじゃなかったらパンくずリストのタグを入力する所にフォーカスする。

追記 2007-01-15 19:55

IMEのキャレットが表示されなくなっていた不具合を修正しました。

コード

// ==UserScript==
// @name           del.icio.us IME OFF
// @namespace      http://d.hatena.ne.jp/margin/
// @include        http://del.icio.us/*
// ==/UserScript==

(function(){

  function turnOffIME(focusElement) {
    function c() {
      var s = document.createElement('span');
      s.innerHTML =
        '<input type="password" style="visibility:hidden;position:fixed">';
      return document.body.appendChild(s.firstChild);
    }

    var p = c();
    p.focus();
    document.body.removeChild(p);
    if (focusElement && focusElement.focus) {
      focusElement.focus();
    } else {
      var x = turnOffIME.x = turnOffIME.x || c();
      x.focus();
      x.blur();
    }
  }

  function turnOffIMEOnFocus(element) {
    element._focused = false;
    element.addEventListener('focus', function() {
      if(!this._focused) {
        this._focused = true;
        turnOffIME(this);
      }
    }, false);
    element.addEventListener('blur', function(){
      this._focused = false;
    }, false);
  }

  window.addEventListener('load', function() {
    var crumb = document.getElementById('crumb');
    if (crumb) {
      var crumbs = crumb.getElementsByTagName('input');
      crumb = crumbs[crumbs.length-1];
      turnOffIMEOnFocus(crumb);
      crumb.focus();
    }

    var tags = document.getElementById('tags');
    if (tags) {
      turnOffIMEOnFocus(tags);
      tags.focus();
    }
  }, false);

})();