JSON でもいけるらしい

研究室の隣の席の T さんに,JSON というのを教えてもらった.これを使えば GM_ な関数がなくてもなんとかなるらしい.時間を見つけて調べてみることにしよう.

それと T さんに協力してもらって見た目よくした.やっぱりスタイルシートって難しい.

てかさっき気がついたけどソースを貼ってなかった.意味ない.すんごく汚いけどせっかくなので貼っておく.

// ==UserScript==
// @name del.icio.us viewer
// @author shimomura sho
// @version 0.1
// @namespace http://www.agusa.i.is.nagoya-u.ac.jp/person/shimo/
// @published 2008/2/5
// @modified 2008/2/5
// @description : open and close bookmark bar by typing C-d 
// @include       http://*
// ==/UserScript==

(function (){
   var sitename = "http://del.icio.us";
   var username = "username";  // <- your account name

   var delsearch;
   var searchfield = document.createElement("div");
   searchfield.style.width = "100%";
   searchfield.id = "searchfield";
   var tagfield = document.createElement("div");
   tagfield.style.width = "100%";
   tagfield.id = "tags";

   function createSearch() {
      delsearch = document.createElement('div');
      delsearch.style.top = "0px";
      delsearch.style.color="#FFFFFF";
      delsearch.style.display="none";
      delsearch.style.fontSize="14px";
      delsearch.style.left="0px";
      delsearch.style.overflow="auto";
      delsearch.style.position="absolute";
      delsearch.style.width="100%";
      delsearch.style.zIndex="10000"; 
      delsearch.style.position="fixed";
      delsearch.style.backgroundImage=
	 "url(http://www.agusa.i.is.nagoya-u.ac.jp/person/shimo/tip.png)";
      delsearch.style.wordBreak="break-all";
      delsearch.style.fontFamily=
	 '"Times New Roman",Times,"ヒラギノ角ゴ Pro W3","MS Pゴシック",sans-serif';
      delsearch.style.textAlign="left";

      /* prepare textbox */
      var tmp = document.createElement("a");
      tmp.style.color = "white";
      tmp.innerHTML = "Search Tag : ";
      searchfield.appendChild(tmp);
      var input = document.createElement("input");
      input.style.border="solid 0 #fff";
      input.style.margin="5px 5px 0px 0px";
      input.style.height="20px";
      input.style.width="200px";
      input.style.background =
	 "transparent "+
	 "url(http://www.agusa.i.is.nagoya-u.ac.jp/person/shimo/textfield_bg.gif) "+
	 "no-repeat";
      input.style.type="text";
      input.id = "filter_field";
      searchfield.appendChild(input);
      delsearch.appendChild(searchfield);
      /* prepare post to delicious */
      var tmp = document.createElement("a");
      tmp.style.color = "white";
      tmp.setAttribute("href",
		       "javascript:location.href='http://del.icio.us/post?v=4;"+
		       "url='+encodeURIComponent(location.href)+';"+
		       "title='+encodeURIComponent(document.title.replace(/^\s*|\s*$/g,''))");
      tmp.innerHTML = "Post to del.ico.us";
      searchfield.appendChild(tmp);
      
      /* access to the delicious */
      GM_xmlhttpRequest({
	 method: "GET",
         url: sitename+"/"+username+"/",
         onload: function(r) {
	    var delicious = document.createElement("div");
	    delicious.innerHTML = r.responseText;

	    var lis = delicious.getElementsByTagName("li");

	    var tags = new Array(lis.length);
	    var j = 0;
	    for ( i=0 ; i < lis.length ; i++ ) {
	       if ( lis[i].parentNode.parentNode.className == "bundle fold" ) {
		  var span = document.createElement("span");
		  var tmp = lis[i].firstChild;
                  /* relative -> abusolute */
		  tmp.setAttribute("href",sitename+tmp.getAttribute("href"));
		  if ( tmp.className == "ten" ) {
		     tmp.style.fontSize = "110%";
		     tmp.style.color = "#ffffff";
		     tmp.style.display = "inline";
		  } else if ( tmp.className == "one") {
		     tmp.style.fontSize = "90%";
		     tmp.style.color = "#aaaaaa";
		     tmp.style.display = "inline";
		  } else {
		     tmp.style.color = "#dddddd";
		     tmp.style.display = "inline";
		  }
		  span.appendChild(tmp);
		  span.style.margin = "3px";
		  tags[j++] = span;
	       }
	    }
	    for ( i=0 ; i < j ; i++ ) {
	       tagfield.appendChild(tags[i]);
	       tagfield.appendChild(document.createTextNode(" "));
	    }
	    delsearch.appendChild(tagfield);
	 }})
      
      return delsearch;
   }
   /* show and hide search bar */
   function showSearch(){
      if (delsearch.style.display == "none") {
	 delsearch.style.display = "block";
	 document.getElementById("filter_field").focus();
      } else {
	 delsearch.style.display = "none";
      }
   }

   document.addEventListener('keyup', function(e){
      // if '^d' is pushed
      if (e.keyCode == 68 && e.ctrlKey) {
	 if (delsearch == undefined){
	    delsearch = createSearch();
	    document.body.appendChild(delsearch);
	 }
	 showSearch();
      } else
      if ( delsearch != undefined &&
	  delsearch.style.display == "block" &&
	  !e.ctrlKey ) {
	     var f = document.getElementById("filter_field").value;
	     var len = f.length;
	     var num = tagfield.childNodes.length;
	     for ( i=0 ; i < num ; i+=2 ) {
		if ( tagfield.childNodes[i].tagName == "SPAN" ) {
		   if(tagfield.childNodes[i].firstChild.textContent.indexOf(f) != -1)
		      tagfield.childNodes[i].style.display = "inline";  
		   else
		      tagfield.childNodes[i].style.display = "none";
		}
	     }
	  }
   }, false);
})();