練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

Proxomitron: オーガストのサイトのコメントを表示するのに使ってたスクリプト

コメントなし»

過去にコメントにネタ仕込んでたことがあったので作ったけど
結局意味があったのは一回だけだったかな……。

多分もうそういうネタはないんじゃないかと思うので廃棄。

UserScript のヘッダがあるけど実際に使えたかどうか覚えてません。

// ==UserScript==
// @name august-soft.user.js
// @description show august-soft.com comment
// @version 2013.11.14
// @namespace http://rentan.org/
// @author rentan
// @grant none
// @include http://august-soft.com/
// ==/UserScript==

(function () {
  'use strict';

function getAllComments (e) {
  var ELEMENT_NODE = 1;
  var COMMENT_NODE = 8;

  var result = [ ];

  function getComments (e) {
    var childs = e.childNodes;

    for (var i = 0; i < childs.length; ++i) {
      var c = childs [i];
      if (c.nodeType === ELEMENT_NODE) {
        getComments (c);
      }
      else if (c.nodeType === COMMENT_NODE) {
        result.push (c);
      }
    }
  }

  getComments (e);

  return result;
}

function MorseCode (sep, dot, dash) {
  this.sep = new RegExp (sep);
  this.dot = new RegExp (dot, 'g');
  this.dash = new RegExp (dash, 'g');
}

MorseCode.prototype.morseToChar = {
  o_: 'a',
  _ooo: 'b',
  _o_o: 'c',
  _oo: 'd',
  o: 'e',
  oo_o: 'f',
  __o: 'g',
  oooo: 'h',
  oo: 'i',
  o___: 'j',
  _o_: 'k',
  o_oo: 'l',
  __: 'm',
  _o: 'n',
  ___: 'o',
  o__o: 'p',
  __o_: 'q',
  o_o: 'r',
  ooo: 's',
  _: 't',
  oo_: 'u',
  ooo_: 'v',
  o__: 'w',
  _oo_: 'x',
  _o__: 'y',
  o____: '1',
  oo___: '2',
  ooo__: '3',
  oooo_: '4',
  ooooo: '5',
  _oooo: '6',
  __ooo: '7',
  ___oo: '8',
  ____o: '9',
  _____: '0',
  o_o_o_: '.',
  __oo__: ',',
  oo__oo: '?',
  _o_o__: '!',
  _oooo_: '-',
  _oo_o: '/',
  o__o_o: '@',
  _o__o: '(',
  _o__o_: ')',
};

MorseCode.prototype.decode = function (code) {
  code = code.split (this.sep);

  for (var i = 0; i < code.length; ++i) {
    var c = code [i].replace (this.dot, 'o').replace (this.dash, '_');
    if (c) {
      if (!this.morseToChar.hasOwnProperty (c)) {
        throw 'Invalid Code';
      }
      code [i] = this.morseToChar [c];
    }
    else {
      code [i] = ' ';
    }
  }

  return code.join ('');
};

(function main () {
  var comments = getAllComments (document);

  var div = document.createElement ('div');
  div.style.fontSize = '80%';
  div.style.borderBottom = '1px solid blue';

  var morse = new MorseCode (' ', '・', '-');

  comments.forEach (function (c) {
    var p = document.createElement ('p');
    p.style.marginTop = p.style.marginBottom = '0px';

    var lines = c.nodeValue.trim ().split (/[\r\n]+/);
    for (var i = 0; i < lines.length; ++i) {
      if (i) {
        p.appendChild (document.createElement ('br'));
      }

      var s = lines [i];
      try {
        var m = morse.decode (s);
        p.appendChild (document.createTextNode (m + ' ... '));
      }
      catch (e) { }

      p.appendChild (document.createTextNode (s));
    }

    div.appendChild (p);
  });

  var body = document.getElementsByTagName ('body') [0];
  body.insertBefore (div, body.firstChild);
  body.style.backgroundPosition = '0px ' + (div.clientHeight + 1) + 'px';
}) ();

}) ();

// EOF

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です