いくつかのこと:
- ツイートはAJAXを介して追加されるため、AJAX対応のスクリプトを使用する必要があります。以下に、waitForKeyElements()ユーティリティを使用してこれを行う方法を示します。
- 使用しないでください
innerHTML
。それは物事を破滅させます(そしてそれはより遅くなります)。jQueryまたは「DOMテクニック」を使用します(以下にも示されています)。
- 正規表現を使用して時間を取得し、何億もの異なる
.replace()
ステートメントが必要ないようにします。
それをすべてまとめると、完全に機能するスクリプトがここにあります。
// ==UserScript==
// @name _PSO2 Emg Bot Script
// @namespace Twitter
// @description Convert time to EST
// @include https://twitter.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
waitForKeyElements ("p.js-tweet-text", ChangeSpecialTimeStrs);
function ChangeSpecialTimeStrs (jNode) {
var node = jNode[0];
//-- Search only in the first-level text nodes of this paragraph.
for (var K = 0, numC = node.childNodes.length; K < numC; ++K) {
var childNode = node.childNodes[K];
if (childNode.nodeType === Node.TEXT_NODE) {
if (childNode.nodeValue.length > 8) {
//-- Anything shorter can't have our kind of string.
childNode.nodeValue = childNode.nodeValue.replace (
/*-- This matches strings like: "5:00~15:30"
Where "~" may be unicode FF5E
*/
/\b(\d{1,2}):(\d{2})(?:~|\uFF5E)(\d{1,2}):(\d{2})\b/gi,
shiftHourStr
);
}
}
}
}
function shiftHourStr (
matchedStr, //- Housekeeping supplied by .replace()
hour1Str, minute1Str, //- Payload vals from () groups
hour2Str, minute2Str, //- Payload vals from () groups
matchOffset, totalString //- Housekeeping supplied by .replace()
) {
//-- Return a string with a format like: "12:00 A.M. ~ 12:30 A.M."
const tzOffsetHours = 10;
var newHr1Arry = getHourOffset (hour1Str, tzOffsetHours);
var newHr2Arry = getHourOffset (hour2Str, tzOffsetHours);
var outputStr = newHr1Arry[0] //-- Hour value
+ ":" + minute1Str
+ newHr1Arry[1] //-- AM or PM
+ " ~ "
+ newHr2Arry[0] //-- Hour value
+ ":" + minute2Str
+ newHr2Arry[1] //-- AM or PM
;
return outputStr;
};
function getHourOffset (hourVal, hoursOffset) {
var amPmStr = "A.M.";
var newHourVal = parseInt (hourVal, 10) + hoursOffset;
if (newHourVal > 23) {
newHourVal -= 24;
}
if (newHourVal >= 12) {
newHourVal -= 12;
amPmStr = "P.M.";
}
if (newHourVal == 0) {
newHourVal = 12;
amPmStr = "A.M.";
}
return [newHourVal, " " + amPmStr];
}