枕を欹てて聴く

香炉峰の雪は簾を撥げて看る

Tombloo Hacks livedoorClip を追加先に追加する

主要なSBMの中でなかったので作りました. なんか理由があるのかな?
iconは次のバージョンの仕様準拠し, ローカルでなくfaviconを直接利用しています.
また, optionから選べば, tag補完のtagをlivedoor Clipからとってくることができます.
21_livedoorclip.js

models.register(update({
  name : 'LivedoorClip',
  ICON : 'http://clip.livedoor.com/favicon.ico',
  POST_URL : 'http://clip.livedoor.com/clip/add',

  getUserTags : function(){
    return doXHR(LivedoorClip.POST_URL+'?link=http%3A%2F%2Ftombloo/').addCallback(function(res){
        if(res.responseText.indexOf('loginForm')!=-1) throw new Error('AUTH_FAILD');
        return $x('id("tag_list")/span/text()', convertToHTMLDocument(res.responseText), true)
          .reduce(function(memo, tag){
            memo.push({
              name      : tag,
              frequency : -1,
            });
            return memo;
          }, []);
    });
  },

  check : function(ps){
    return ps.type!='regular' && !ps.file;
  },

  getToken : function(){
    switch (this.updateSession()){
    case 'none':
      throw new Error('AUTH_FAILD');

    case 'same':
      if(this.token)
        return succeed(this.token);

    case 'changed':
      var self = this;
        return doXHR(LivedoorClip.POST_URL+'?link=http%3A%2F%2Ftombloo/').addCallback(function(res){
          if(res.responseText.match(/"postkey" value="(.*)"/)){
            self.token = RegExp.$1;
            return self.token;
          }
          throw new Error('AUTH_FAILD');
        });
    }
  },

  post : function(ps){
    return LivedoorClip.getToken().addCallback(function(token){
      var content = {
        title   : ps.item,
        postKey : token,
        link    : ps.itemUrl,
        tags    : ps.tags? ps.tags.join(' ') : '',
        notes   : joinText([ps.body, ps.description], ' ', true),
      };
      return doXHR(LivedoorClip.POST_URL, {
        sendContent : content,
      });
    });
  },

  getAuthCookie : function(){
    return getCookieString('livedoor.com', '.LRC');
  },
}, AbstractSessionService));

models.copyTo(this);