Twitterで登録したモーメントを一覧リストで表示

let.hatelabo.jp

// ==UserScript==
// @name         twitter_moment_list
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://twitter.com/i/moments/*
// @grant        none
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js
// ==/UserScript==
var result = document.evaluate('//div[@class="MomentDropdownMenu dropdown"]', document, null, 7, null);
result.snapshotItem(0).insertAdjacentHTML('afterend', '<input type="button" value="登録" id="regist3">');
var result2 = document.evaluate('id("regist3")', document, null, 7, null);
result2.snapshotItem(0).addEventListener('click', sample, false);

function sample() {
  var result3 = document.evaluate('//link[@rel="canonical"]', document, null, 7, null);
  var result4 = document.evaluate('//meta[@name="twitter:text:title"]', document, null, 7, null);
  var result5 = document.evaluate('//meta[@name="twitter:user:author:screen_name"]', document, null, 7, null);
  var n_str = result3.snapshotItem(0).href + "/";
  var n_arr = n_str.split("/");
  var n_mom = n_arr[5];
  for (var i = 0; i < 128; i++) {
    if (!('mom' + (i + 1) in localStorage)) {
      if (i == 127) {
        alert("保存できるモーメントの数は128までに制限しています。\nローカルストレージから登録したキーを削除してください");
        break;
      }
      var cb = list_check(i + 1, n_mom);
      if (cb != 1) {
        localStorage.setItem('mom' + (i + 1), n_mom);
        localStorage.setItem('title' + (i + 1), result4.snapshotItem(0).content);
        localStorage.setItem('author' + (i + 1), result5.snapshotItem(0).content);
        alert("登録しました");
        break;
      } else {
        break;
      }
    }
  }
  //重複チェック
  function list_check(lp, n_name) {
    var flag = 0;
    for (var i = 0; i < lp; i++) {
      if (localStorage.getItem('mom' + (i + 1)) == n_name) {
        alert("このページは既に登録されています");
        flag = 1;
        break;
      }
    }
    return flag;
  }
}
//リスト表示処理
result2.snapshotItem(0).insertAdjacentHTML('afterend', '<input type="button" value="リスト" id="list3">');
var result6 = document.evaluate('id("list3")', document, null, 7, null);
result6.snapshotItem(0).addEventListener('click', sample2, false);

function sample2() {
  localStorage.setItem("n_url", location.href);
  history.pushState(null, null, "/koko_nanimo_naidesuyo5");
  document.body.innerHTML = "<ol type=1></ol>";
  var result7 = document.evaluate('//ol', document, null, 7, null);
  for (var i = 0; i < 128; i++) {
    if ('mom' + (i + 1) in localStorage) {
      result7.snapshotItem(0).insertAdjacentHTML('beforeend', '<li class=line' + (i + 1) + '><img src=https://twitter.com/' + localStorage.getItem('author' + (i + 1)) + '/profile_image?size=mini><a href=https://twitter.com/' + localStorage.getItem('author' + (i + 1)) + '>@' + localStorage.getItem('author' + (i + 1)) + '</a><div><a href=https://twitter.com/i/moments/' + localStorage.getItem('mom' + (i + 1)) + '>' + localStorage.getItem('title' + (i + 1)) + '</a></div></li>');
    } else {
      document.body.insertAdjacentHTML('beforeend', '<input type=button id=remove value=削除>');
      break;
    }
  }
  var listArray = document.querySelectorAll('li+li');
  for (var a = 0; a < listArray.length; a++) {
    listArray[a].style.marginTop = "1em";
  }
  $(function () {
    $('#remove').click(function () {
      var j = window.prompt("何番目のモーメントを削除しますか?\n半角英数で入力してください。\n入力例は1番から3番を消す場合です", "1-3");
      if (/\-/g.test(j)) {
        var j_sp = j.split("-");
        var j_begin = j_sp[0];
        var j_end = j_sp[1];
        while (j_begin <= j_end) {
          $('.line' + j_begin).css({
            "display": "none"
          });
          j_begin++;
        }
      } else {
        $('.line' + j).css({
          "display": "none"
        });
      }
    }, );
  });
  window.addEventListener('popstate', function (event) {
    location.href = localStorage.getItem("n_url");
  });
}