Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////////////
- //
- //@title おーぷん2ちゃんねるツール
- //@include http://*.open2ch.net
- //@private
- //
- //作った人: Awn(@Awn_tw)
- //
- //改定履歴
- //-20161021(ver 1.0.0): とりあえず作ってみた。
- //-20161024(ver 1.1.0): isSurenusiを追加。
- //-20161025(ver 1.2.0): _getNameを追加。モジュールパターンっぽくしてみた。isSurenusi -> _isSurenusiに変更。
- //-20161025(ver 1.3.0): _getName -> _getResNameに変更。_getResRawと_getResTimeと_getResIDを追加。
- //-20161025(ver 1.4.0): _isBrokenと_getValidNumを追加。
- //-20161025(ver 1.4.1): モジュールパターンではあるが、より正確に言えばリビーリングモジュールパターンっぽい。
- //-20161025(ver 1.4.2): URLの末尾に半角ハイフンを含む場合も"[全部]のURLに移動します。"のケースに含める。
- //-20161027(ver 1.4.3): (面倒なので)canonicalなURLで無い時はcanonicalなURLに飛ばす。kari_compの取得方法を変更(splitを減らし正規表現で取得)
- //-20161029(ver 1.5.0): _getValidNumを廃止 -> _gvnに変更。_getDTを追加。jQueryっぽいものをquerySelectorAllやDOM APIに変更。とても速くなった(当社比)。
- //
- //諸注意
- //-ご利用は自己責任でお願いします。
- //-スクリプトは予告なく修正または廃止されることがあります。
- //-コンソールでしか動かない、と思います。
- //-悪用は厳禁です。
- //-改造改良改悪はご自由にどうぞ。
- //
- //////////////////////////////////////////////////////////////////////////
- var Op2ools = (function(){
- /* private member */
- var _VERSION = "1.5.0";
- var _BBSNAME = "";
- var _SURETAI = "";
- var _isInitSuccess = false;
- /* private initializer */
- _init();
- /* private method */
- function _init(){
- /*
- ------------------
- _init : 初期化メソッド。失敗したらOp2oolsをundefinedにする
- ------------------
- */
- var _hostname = location.hostname;
- var _url = location.href;
- var _urlcanonical = document.querySelector("link[rel='canonical']").href;
- //init failure
- if( _hostname.indexOf("open2ch") === -1 ){
- _failureMessage("このツールはおーぷん2ちゃんねる(http://*.open2ch.net)での動作しか保証しておりません。");
- return _isInitSuccess;
- }
- if( _url.indexOf("read.cgi") === -1 ){
- _failureMessage("特定のスレを開いてください。");
- return _isInitSuccess;
- }
- if( _url !== _urlcanonical ){
- _failureMessage("[全部]のURLに移動します。\n再度、Op2oolsを実行してください。");
- location.href = _urlcanonical;
- return _isInitSuccess;
- }
- //init success
- _BBSNAME = _url.split("/")[5];
- _SURETAI = document.title;
- _isInitSuccess = true;
- console.log("Op2ools: init success!");
- return _isInitSuccess;
- }
- function _failureMessage(mes){
- /*
- ------------------
- _failureMessage : エラーメッセージを書き出したりalertしたりする
- ------------------
- */
- console.warn(mes);
- alert(mes);
- console.log("Op2ools: init failure!");
- }
- function _getLastResNum(){
- /*
- ------------------
- _getLastResNum : 最終レス番号を返す
- ------------------
- */
- var d = document.querySelectorAll("dt");
- var dnum = d[d.length-1].getElementsByClassName("num")[0];
- var rtn = dnum !== undefined ? dnum.innerText -0 : d[d.length-2].getElementsByClassName("num")[0].innerText - 0;
- return rtn;
- }
- function _getRes(num){
- /*
- ------------------
- _getRes : レス番号に対応する書き込みメッセージを"改行コード付きで"返す
- ------------------
- */
- num = _gvn(num);
- var rtn;
- if( num !== undefined ){
- rtn = document.querySelectorAll("dd")[num].innerText;
- return rtn;
- }else{
- return rtn;
- }
- }
- function _getResName(num){
- /*
- ------------------
- _getResName : レス番号に対応する名前欄を返す
- ------------------
- */
- num = _gvn(num);
- var dt;
- var rtn;
- if( num !== undefined){
- dt = _getDT(num);
- rtn = dt.split(":")[1];
- rtn = rtn.substr(rtn.length -1) === " " ? rtn.substr(0,rtn.length-1) : rtn;
- return rtn;
- }else{
- return rtn;
- }
- }
- function _getResTime(num){
- /*
- ------------------
- _getResTime : レス番号に対応する書き込み時間を返す
- ------------------
- */
- num = _gvn(num);
- var dt;
- var rtn;
- if( num !== undefined){
- dt = _getDT(num);
- rtn = dt.split(":")[2].split(" ")[0];
- return rtn;
- }else{
- return rtn;
- }
- }
- function _getResID(num){
- /*
- ------------------
- _getResID : レス番号に対応するIDを返す
- ------------------
- */
- num = _gvn(num);
- var dt;
- var rtn;
- if( num !== undefined){
- dt = _getDT(num);
- rtn = dt.split(":")[2].split(" ")[1].split(":")[1];
- return rtn;
- }else{
- return rtn;
- }
- }
- function _isSurenusi(num){
- /*
- ------------------
- _isSurenusi : スレ主かどうかチェックし、trueかfalseで返す
- ------------------
- */
- num = _gvn(num);
- var dt;
- var rtn = false;
- if( num !== undefined ){
- dt = _getDT(num);
- rtn = dt.split(":")[2].indexOf("主") > -1 ? true : false;
- return rtn;
- }else{
- return rtn;
- }
- }
- function _getDT(num){
- /*
- ------------------
- _getDT : dt[num]のinnerTextを返す
- num : _gvn済みのnum
- ------------------
- */
- var rtn = document.querySelectorAll("dt")[num].innerText;
- return rtn;
- }
- function _gvn(kari){
- /*
- ------------------
- _gvn : 入力したレス番号が存在するかチェックすると共に補正する関数(_gvnは_getValidNumberの改良版)。該当するレス番号が無い場合はundefinedを返す
- kari : 入力したレス番号
- ------------------
- */
- //変数
- var rtn;
- var isTypeOK = false;
- var isRangeOK = false;
- var kariBreakFlag = true;
- var inc = 0;
- var inc_computed = 0;
- var d;
- var d_temp;
- //形式チェック
- isTypeOK = typeof(kari) === "number" ? true : false;
- isRangeOK = kari > 0 && kari < 1006 ? true : false;
- //論理チェック
- if(isTypeOK && isRangeOK){
- //dtタグのノードリストを取得
- d = document.querySelectorAll("dt");
- do{
- inc_computed = inc % 2 === 0 ? (-1) * (inc/2) : (inc+1)/2;//inc_computed := {-0,+1,-1,+2,-2,...}
- rtn = kari - 1 + inc_computed;//添字の補正
- d_temp = d[ rtn ];//d[ rtn ] is Object if exists unless undefined
- d_temp = d_temp !== undefined ? d_temp.getElementsByClassName("num")[0] : undefined;
- d_temp = d_temp !== undefined ? d_temp.innerText - 0 : undefined;
- if( d_temp === kari ){
- kariBreakFlag = false;
- }else{
- inc++;
- //incが1000を超えていた場合、探索打ち切り
- kariBreakFlag = inc > 1000 ? false : true;
- rtn = inc > 1000 ? undefined : rtn;
- }
- }while(kariBreakFlag);
- return rtn;
- }else{
- return rtn;
- }
- }
- /* public API */
- if(_isInitSuccess){
- return{
- VERSION : _VERSION,
- BBSNAME : _BBSNAME,
- SURETAI : _SURETAI,
- getLastResNum : _getLastResNum,
- getRes : _getRes,
- getResName : _getResName,
- getResTime : _getResTime,
- getResID : _getResID,
- isSurenusi : _isSurenusi
- };
- }else{
- return undefined;
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement