Mondo Meta
By Michael Devore
—
Last update Jun 15, 2007
—
Installed
1,189 times.
Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
// mondo_meta.user.js
//
// Copyright 2005-2007, Michael Devore
// This file is licensed under the terms of the Artistic License.
// See http://www.opensource.org/licenses/artistic-license.php for the license itself.
//
// This is a Greasemonkey script.
// See http://www.greasespot.net/ for more information on Greasemonkey.
//
// ==UserScript==
// @name Mondo Meta
// @namespace http://www.devoresoftware.com/gm/mm
// @description Personalize the Metafilter experience
// @include http://*.metafilter.com/*
// @include http://www.devoresoftware.com/*
// ==/UserScript==
//
// Work begun, December 2005
// Version 1.0, released January 2006
// Version 1.1, released January 2006
// Version 1.2, released December 2006
// Version 1.3, released early February 2007
// Version 2.0, released mid-June 2007, pre-release, 2.01 final
//
var mondoMetaVersion = "Version 2.01, Mondo Meta";
var expandedLinksFlag = 0;
var boxUp = 0;
var mondo_meta_control = null;
var mondo_meta_highlight_control = null;
var mondo_meta_delete_control = null;
var mondo_meta_tag_control = null;
var mondo_meta_style_control = null;
var mondo_meta_manage_control = null;
var freeRules = new Array();
var aDeleteInfo = new Array();
var aHighlightInfo = new Array();
var aTagInfo = new Array();
var aStyleInfo = new Array();
var storedRuleCount = 0;
var currentRuleNumber = 0;
var currentRuleType = 0;
var deactivateDeleteFlag = false;
var deactivateHighlightFlag = false;
var deactivateTagFlag = false;
var deactivateStyleFlag = false;
var flagMultiple = 1;
var flagHighlight = flagMultiple << 1;
var flagDelete = flagHighlight << 1;
var flagTag = flagDelete << 1;
var flagStyle = flagTag << 1;
var originalMenuHeight = "50px";
var originalSiblingHeight = "50px";
var expandTextChoice = [ "Expand Links", "Compact Links"];
var deleteFilterText = "Delete-Filter";
var tagText = "Tag";
var highlightText = "Highlight";
var styleText = "Style";
var manageText = "Manage";
//var separatorText = "------------";
var compactText = "compact";
var defaultText = "default";
var expandText = "expand";
var usedRuleHeader = "Used:mm1.0:";
var freeRuleHeader = "Free:mm1.0:";
var deleteHeader = "Delete:";
var highlightHeader = "Highlight:";
var tagHeader = "Tag:";
var styleHeader = "Style:";
var systemHeader = "System:mm1.0:";
var systemStatusText = "System Status";
var optionText = "Option";
var contentText = "Content";
var footerText = "Footer";
var contentFooterText = contentText + "+" + footerText;
var customText = "Custom";
var unchangedText = "Unchanged";
var buttonText = "button";
var spanText = "SPAN";
var removeText = "Remove";
var invisibleText = "Make Invisible";
var fg_bgText = "Foreground = Background";
var mmHighlightAttribText = "mmModifiedHighlight";
var mmDeleteAttribText = "mmModifiedDelete";
var mmTagClassText = "mmTagClass";
var mmStyledPostAttribText = "mmStyledPost";
var whiteText = "white";
var darkBlueText = "darkblue";
var textNodeText = "#text";
var trueText = "true";
var falseText = "false";
var clickText = "click";
var noneText = "none";
var hiddenText = "hidden";
var visibleText = "visible";
var xText = "x";
var moveMouseAreaWidth = 50;
var moveMouseAreaSeconds = 3;
var dropdownPeekABoo = false;
function switchSidebar(onSwitch)
{
var xpath = "//div[@id='page']/div[@id='ajaxcontentarea']/div[@id='menu']/div[@class='sidebar']";
var menu_div = document.evaluate(
xpath,
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
if (menu_div)
{
var menu_node = menu_div.snapshotItem(0);
// try to affect subscription buttons following
var sibling = null;
if (menu_node)
{
sibling = menu_node.nextSibling;
}
if (sibling)
{
if (sibling.nodeName === textNodeText)
{
sibling = sibling.nextSibling;
}
if (sibling && sibling.nodeName != "DIV")
{
sibling = null;
}
}
if (menu_node)
{
menu_node.style.visibility = onSwitch ? visibleText : hiddenText;
if (sibling)
{
sibling.style.visibility = onSwitch ? visibleText : hiddenText;
}
if (onSwitch)
{
menu_node.style.height = originalMenuHeight;
if (sibling)
{
sibling.style.height = originalSiblingHeight;
}
}
else
{
originalMenuHeight = menu_node.style.height;
menu_node.style.height = "1px";
if (sibling)
{
originalSiblingHeight = sibling.style.height;
sibling.style.height = "1px";
}
}
}
}
}
function isPostFooter(node)
{
if (!node)
{
return 0;
}
var currentNode = node;
while (currentNode)
{
if (currentNode.nodeName === spanText && currentNode.getAttribute('class') === 'smallcopy')
{
return 1;
}
currentNode = currentNode.parentNode;
}
return 0;
}
function escapePattern(toEscape)
{
var needsEscaping = "\\^.*?$|([{}])";
var afterEscape = "";
var pos = 0;
while (pos < toEscape.length)
{
var c = toEscape.charAt(pos++);
if (needsEscaping.indexOf(c) >= 0)
{
afterEscape += "\\" + c;
}
else
{
afterEscape += c;
}
}
return afterEscape;
}
// get free configuration value slot
function getFreeSlot()
{
if (freeRules.length)
{
var slotID = freeRules.pop();
}
else
{
var slotID = "Rule" + (++storedRuleCount);
}
return slotID;
}
// store information to free configuration value slot
function storeInfoToSlot(infoString)
{
var gmKey = getFreeSlot();
var gmValue = usedRuleHeader + infoString;
GM_setValue(gmKey, gmValue);
return gmKey;
}
// show a slot as free
function freeSlot(ruleID)
{
GM_setValue(ruleID, freeRuleHeader);
freeRules.push(ruleID);
}
function expandLinks()
{
var xpath = "//div[@class='copy' or @class='comments' or @class='comments best']//a";
var link_anchors = document.evaluate(
xpath,
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null
);
switchSidebar(expandedLinksFlag);
for (var i = 0; i < link_anchors.snapshotLength; i++)
{
var candidate = link_anchors.snapshotItem(i);
var href_value;
if ((href_value = candidate.getAttribute('href')) && !isPostFooter(candidate))
{
if (!expandedLinksFlag)
{
var expansion = " [" + href_value + "] ";
candidate.appendChild(document.createTextNode(expansion));
}
else if (candidate.lastChild)
{
candidate.removeChild(candidate.lastChild);
}
}
}
expandedLinksFlag ^= 1;
}
function saveDeleteItem(deleteInfo)
{
var infoString = deleteHeader;
for (var i = 0; i < 9; i++)
{
infoString += String(deleteInfo[i]).length + ":" + deleteInfo[i];
}
var gmKey = storeInfoToSlot(infoString);
return gmKey;
}
function saveDelete(event)
{
event.stopPropagation();
// userDelText, userLocated, userHow, userWhole, userCase, userLinks, userRegExp, userDuration
mondo_meta_delete_control.style.display = noneText;
var elem = document.getElementById("mondo_meta_delete_text");
var userDelText = elem.value;
elem = document.getElementById("mondo_meta_delete_located");
var userLocated = elem.value;
elem = document.getElementById("mondo_meta_delete_how");
var userHow = elem.value;
var checkNode = document.getElementById("mondo_meta_delete_wholeword");
var userWhole = checkNode.checked;
checkNode = document.getElementById("mondo_meta_delete_matchcase");
var userCase = checkNode.checked;
checkNode = document.getElementById("mondo_meta_delete_matchlinks");
var userLinks = checkNode.checked;
checkNode = document.getElementById("mondo_meta_delete_regexp");
var userRegExp = checkNode.checked;
elem = document.getElementById("mondo_meta_delete_duration");
var userDuration = elem.value;
var rightNow = new Date();
aDeleteInfo.push([
userDelText,
userLocated,
userHow,
userWhole,
userCase,
userLinks,
userRegExp,
userDuration,
rightNow.getTime()]);
nodeBreaker(flagDelete, aDeleteInfo.length - 1);
var gmKey = saveDeleteItem(aDeleteInfo[aDeleteInfo.length - 1]);
aDeleteInfo[aDeleteInfo.length - 1][9] = gmKey;
boxUp = 0;
}
function cancelDelete(event)
{
event.stopPropagation();
boxUp = 0;
mondo_meta_delete_control.style.display = noneText;
}
function saveTagItem(tagInfo)
{
var infoString = tagHeader;
for (var i = 0; i < tagInfo.length; i++)
{
infoString += String(tagInfo[i]).length + ":" + tagInfo[i];
}
var gmKey = storeInfoToSlot(infoString);
return gmKey;
}
function saveTag(event)
{
event.stopPropagation();
// userTagText, userLocated, userTagTags, userWhole, userCase, userRegExp,
mondo_meta_tag_control.style.display = noneText;
var elem = document.getElementById("mondo_meta_tag_text");
var userTagText = elem.value;
elem = document.getElementById("mondo_meta_tag_located");
var userLocated = elem.value;
elem = document.getElementById("mondo_meta_tag_tags");
var userTagTags = elem.value;
var checkNode = document.getElementById("mondo_meta_tag_wholeword");
var userWhole = checkNode.checked;
checkNode = document.getElementById("mondo_meta_tag_matchcase");
var userCase = checkNode.checked;
checkNode = document.getElementById("mondo_meta_tag_regexp");
var userRegExp = checkNode.checked;
var rightNow = new Date();
aTagInfo.push([
userTagText,
userLocated,
userTagTags,
userWhole,
userCase,
userRegExp,
rightNow.getTime()]);
nodeBreaker(flagTag, aTagInfo.length - 1);
var gmKey = saveTagItem(aTagInfo[aTagInfo.length - 1]);
aTagInfo[aTagInfo.length - 1][aTagInfo[aTagInfo.length - 1].length] = gmKey;
boxUp = 0;
}
function cancelTag(event)
{
event.stopPropagation();
boxUp = 0;
mondo_meta_tag_control.style.display = noneText;
}
function saveStyleItem(styleInfo)
{
var infoString = styleHeader;
for (var i = 0; i < styleInfo.length; i++)
{
infoString += String(styleInfo[i]).length + ":" + styleInfo[i];
}
var gmKey = storeInfoToSlot(infoString);
return gmKey;
}
function saveStyle(event)
{
event.stopPropagation();
// userStyleText, userLocated, userStyleStyles, userWhole, userCase, userRegExp,
mondo_meta_style_control.style.display = noneText;
var elem = document.getElementById("mondo_meta_style_text");
var userStyleText = elem.value;
elem = document.getElementById("mondo_meta_style_located");
var userLocated = elem.value;
elem = document.getElementById("mondo_meta_style_styles");
var userStyleStyles = elem.value;
var checkNode = document.getElementById("mondo_meta_style_wholeword");
var userWhole = checkNode.checked;
checkNode = document.getElementById("mondo_meta_style_matchcase");
var userCase = checkNode.checked;
checkNode = document.getElementById("mondo_meta_style_regexp");
var userRegExp = checkNode.checked;
var rightNow = new Date();
aStyleInfo.push([
userStyleText,
userLocated,
userStyleStyles,
userWhole,
userCase,
userRegExp,
false,
rightNow.getTime()]);
nodeBreaker(flagStyle, aStyleInfo.length - 1);
var gmKey = saveStyleItem(aStyleInfo[aStyleInfo.length - 1]);
aStyleInfo[aStyleInfo.length - 1][aStyleInfo[aStyleInfo.length - 1].length] = gmKey;
boxUp = 0;
}
function cancelStyle(event)
{
event.stopPropagation();
boxUp = 0;
mondo_meta_style_control.style.display = noneText;
}
function saveHighlightItem(highlightInfo)
{
var infoString = highlightHeader;
for (var i = 0; i < 11; i++)
{
infoString += String(highlightInfo[i]).length + ":" + highlightInfo[i];
}
var gmKey = storeInfoToSlot(infoString);
return gmKey;
}
function d2h(decNum)
{
var hexDigits="0123456789ABCDEF";
var hexNum = hexDigits.substr(decNum & 15, 1);
decNum >>= 4;
hexNum = hexDigits.substr(decNum & 15, 1) + hexNum;
return hexNum;
}
function processRGBvalue(rgbString)
{
var result;
if (result = rgbString.match(/[ ;.,-]*(\d{1,3})[ ;.,-]+(\d{1,3})[ ;.,-]+(\d{1,3})/))
{
// 3 sets of digits, change to #xxxxxx hexadecimal
var ret = "#";
ret += d2h(result[1]);
ret += d2h(result[2]);
ret += d2h(result[3]);
return ret;
}
else if (result = rgbString.match(/\s*(#([0-9a-fA-F]{6}))/))
{
// already #xxxxxx hexadecimal, use it
return result[1];
}
return "";
}
function deleteTransform(
candidate,
doAllFlag,
doValue,
spanFooterStore,
boldFooterStore,
anchorStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore)
{
if (deactivateDeleteFlag)
{
return;
}
if (candidate.getAttribute(mmDeleteAttribText))
{
// entire message already processed for deleting
return;
}
if (doAllFlag)
{
var start = 0;
var end = aDeleteInfo.length;
}
else
{
var start = doValue;
var end = start + 1;
}
// peek at the delete conditions to see if we need to check all three types of targets
// set up only search targets that are needed
var searchTargetAll = "";
var searchTargetContent = "";
var searchTargetFooter = "";
var useAll, useContent, useFooter;
for (var loop = start; loop < end; loop++)
{
var requestContent = (aDeleteInfo[loop][1].indexOf(contentText) >= 0 ? true: false);
var requestFooter = (aDeleteInfo[loop][1].indexOf(footerText) >= 0 ? true: false);
if (requestContent && requestFooter)
{
useAll = true;
}
else if (requestContent)
{
useContent = true;
}
else if (requestFooter)
{
useFooter = true;
}
}
var textValStore = new Array();
if (useAll)
{
// no destructive popping of array
for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
{
var aNode = textAllNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetAll = textValStore.join('');
textValStore.length = 0;
}
if (useContent)
{
for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
{
var aNode = textContentNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetContent = textValStore.join('');
textValStore.length = 0;
}
if (useFooter)
{
for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
{
var aNode = textFooterNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetFooter = textValStore.join('');
}
var hrefValueStore = new Array();
for (var aLoop = 0; aLoop < anchorStore.length; aLoop++)
{
var aNode = anchorStore[aLoop];
hrefValueStore.push(aNode.getAttribute('href'));
}
var hrefText = hrefValueStore.join(" ");
for (var loop = start; loop < end; loop++)
{
// set test conditions
// userHiText, userLocated, userArea, userFg, userBg, userFrgb, userBrgb,
// userWhole, userCase, userRegExp
if (!aDeleteInfo[loop][0])
{
continue;
}
if (aDeleteInfo[loop][6] === false)
{
requestText = escapePattern(aDeleteInfo[loop][0]);
if (aDeleteInfo[loop][3] === true)
{
// wrap pattern in \b for whole word
requestText = "\\b" + requestText + "\\b";
}
}
else
{
// direct RegExp specified
requestText = aDeleteInfo[loop][0];
}
if (aDeleteInfo[loop][4] === false)
{
var requestPattern = new RegExp(requestText, "i"); // ignore case
}
else
{
var requestPattern = new RegExp(requestText);
}
// restrict searches for this rule to appropriate content/footer location
var restrictSearchTargetAll = "";
var restrictSearchTargetContent = "";
var restrictSearchTargetFooter = "";
if (aDeleteInfo[loop][1] === contentText)
{
restrictSearchTargetContent = searchTargetContent;
}
else if (aDeleteInfo[loop][1] === footerText)
{
restrictSearchTargetFooter = searchTargetFooter;
}
else
{
restrictSearchTargetAll = searchTargetAll;
}
var requestLinks = aDeleteInfo[loop][5];
if (requestLinks)
{
if (restrictSearchTargetAll.length)
{
restrictSearchTargetAll = searchTargetAll + " " + hrefText;
}
if (restrictSearchTargetContent.length)
{
restrictSearchTargetContent = searchTargetContent + " " + hrefText;
}
}
// search as appropriate
if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
{
// delete filter this post
var requestHow = aDeleteInfo[loop][2];
candidate.setAttribute(mmDeleteAttribText, "on");
switch (requestHow)
{
case invisibleText:
candidate.style.visibility = hiddenText;
break;
case fg_bgText:
var backgroundColor = null;
if (candidate.style)
{
backgroundColor = document.defaultView.getComputedStyle(candidate, null).getPropertyValue("background-color");
}
var aNode = candidate;
while (aNode && (!backgroundColor || backgroundColor === "transparent"))
{
aNode = aNode.parentNode;
if (aNode && aNode.style)
{
backgroundColor = document.defaultView.getComputedStyle(aNode, null).getPropertyValue("background-color");
}
}
if (!backgroundColor || backgroundColor === "transparent")
{
// hard-code and hope
var newColor = "#006699";
}
else
{
var newColor = backgroundColor;
}
candidate.style.color = newColor;
// no destructive popping of anchorStore array
for (var aLoop = 0; aLoop < anchorStore.length; aLoop++)
{
var aNode = anchorStore[aLoop];
aNode.style.color = newColor;
}
for (var aLoop = 0; aLoop < spanFooterStore.length; aLoop++)
{
var aNode = spanFooterStore[aLoop];
aNode.style.color = newColor;
}
for (var aLoop = 0; aLoop < boldFooterStore.length; aLoop++)
{
var aNode = boldFooterStore[aLoop];
aNode.style.color = newColor;
}
break;
default: // remove
candidate.style.display = noneText;
var followNode = candidate.nextSibling;
// remove following BR if present
while (followNode)
{
if (followNode.nodeName === "BR")
{
var removeNode = followNode;
followNode = followNode.nextSibling;
var parentNode = removeNode.parentNode;
parentNode.removeChild(removeNode);
}
else if (followNode.nodeName != textNodeText)
{
break;
}
else
{
followNode = followNode.nextSibling;
}
}
break;
}
}
}
}
function tagTransform(
candidate,
doAllFlag,
doValue,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore)
{
if (deactivateTagFlag)
{
return;
}
if (candidate.getAttribute(mmDeleteAttribText))
{
return;
}
if (doAllFlag)
{
var start = 0;
var end = aTagInfo.length;
}
else
{
var start = doValue;
var end = start + 1;
}
var tInfo = {
tagText : 0,
locatedIn : 1,
tagTags : 2,
wholeWord : 3,
caseSensitive : 4,
useRegExp : 5
};
var searchTargetAll = "";
var searchTargetContent = "";
var searchTargetFooter = "";
var useAll, useContent, useFooter;
for (var loop = start; loop < end; loop++)
{
var requestLocContent = (aTagInfo[loop][tInfo.locatedIn].indexOf(contentText) >= 0 ? true: false);
var requestLocFooter = (aTagInfo[loop][tInfo.locatedIn].indexOf(footerText) >= 0 ? true: false);
if (requestLocContent && requestLocFooter)
{
useAll = true;
}
else if (requestLocContent)
{
useContent = true;
}
else if (requestLocFooter)
{
useFooter = true;
}
}
var textValStore = new Array();
if (useAll)
{
for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
{
var aNode = textAllNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetAll = textValStore.join('');
textValStore.length = 0;
}
if (useContent)
{
for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
{
var aNode = textContentNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetContent = textValStore.join('');
textValStore.length = 0;
}
if (useFooter)
{
for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
{
var aNode = textFooterNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetFooter = textValStore.join('');
}
for (var loop = start; loop < end; loop++)
{
if (!aTagInfo[loop][tInfo.tagText])
{
continue;
}
var restrictSearchTargetAll = "";
var restrictSearchTargetContent = "";
var restrictSearchTargetFooter = "";
if (aTagInfo[loop][tInfo.locatedIn] === contentText)
{
restrictSearchTargetContent = searchTargetContent;
}
else if (aTagInfo[loop][tInfo.locatedIn] === footerText)
{
restrictSearchTargetFooter = searchTargetFooter;
}
else
{
restrictSearchTargetAll = searchTargetAll;
}
if (aTagInfo[loop][tInfo.useRegExp] == false)
{
var requestText = escapePattern(aTagInfo[loop][0]);
if (aTagInfo[loop][tInfo.wholeWord] == true)
{
requestText = "\\b" + requestText + "\\b";
}
}
else
{
var requestText = aTagInfo[loop][0];
}
if (aTagInfo[loop][tInfo.caseSensitive] == false)
{
var requestPattern = new RegExp(requestText, "i");
}
else
{
var requestPattern = new RegExp(requestText);
}
if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
{
// tag this post
if (textFooterNodeStore.length)
{
var leadingNode = textFooterNodeStore[0];
// look for 'posted by'
var testNode = spanFooterStore[0];
while (testNode)
{
var childNode = testNode.firstChild;
var bFound = false;
while (childNode)
{
if (childNode.nodeName === textNodeText && childNode.nodeValue.search('posted by') >= 0)
{
leadingNode = childNode;
bFound = true;
break;
}
childNode = childNode.nextSibling;
}
if (bFound)
{
break;
}
testNode = testNode.nextSibling;
}
var newSpanNode = document.createElement(spanText);
newSpanNode.className = mmTagClassText;
var backgroundColor = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("background-color");
if (!backgroundColor || backgroundColor === "transparent")
{
var newColor = "#000000";
}
else
{
var newColor = backgroundColor;
}
var foregroundColor = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("color");
if (!foregroundColor || foregroundColor === "transparent")
{
var newBackColor = "#FFFFFF";
}
else
{
var newBackColor = foregroundColor;
}
newSpanNode.style.backgroundColor = newBackColor;
newSpanNode.style.color = newColor;
var tNode = document.createTextNode("\u00a0"+aTagInfo[loop][tInfo.tagTags]+"\u00a0");
newSpanNode.appendChild(tNode);
leadingNode.parentNode.insertBefore(newSpanNode,leadingNode);
tNode = document.createTextNode("\u00a0");
var spacerSpanNode = document.createElement(spanText);
spacerSpanNode.style.backgroundColor = newColor;
spacerSpanNode.style.color = newBackColor;
spacerSpanNode.appendChild(tNode);
newSpanNode.parentNode.insertBefore(spacerSpanNode,newSpanNode.nextSibling);
}
}
}
}
function highlightTransform(
candidate,
doAllFlag,
doValue,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore)
{
if (deactivateHighlightFlag)
{
return;
}
if (candidate.getAttribute(mmDeleteAttribText))
{
// entire message already processed for deleting
return;
}
if (candidate.getAttribute(mmHighlightAttribText))
{
// entire message already processed for highlighting
return;
}
if (doAllFlag)
{
var start = 0;
var end = aHighlightInfo.length;
}
else
{
var start = doValue;
var end = start + 1;
}
// peek at the highlight conditions to see if we need to check all three types of targets
// set up only search targets that are needed
var searchTargetAll = "";
var searchTargetContent = "";
var searchTargetFooter = "";
var useAll, useContent, useFooter;
for (var loop = start; loop < end; loop++)
{
var requestLocContent = (aHighlightInfo[loop][1].indexOf(contentText) >= 0 ? true: false);
var requestLocFooter = (aHighlightInfo[loop][1].indexOf(footerText) >= 0 ? true: false);
if (requestLocContent && requestLocFooter)
{
useAll = true;
}
else if (requestLocContent)
{
useContent = true;
}
else if (requestLocFooter)
{
useFooter = true;
}
}
var textValStore = new Array();
if (useAll)
{
// no destructive popping of array
for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
{
var aNode = textAllNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetAll = textValStore.join('');
textValStore.length = 0;
}
if (useContent)
{
for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
{
var aNode = textContentNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetContent = textValStore.join('');
textValStore.length = 0;
}
if (useFooter)
{
for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
{
var aNode = textFooterNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetFooter = textValStore.join('');
}
for (var loop = start; loop < end; loop++)
{
// set test conditions
if (!aHighlightInfo[loop][0])
{
continue;
}
// restrict searches for this rule to appropriate content/footer location
var restrictSearchTargetAll = "";
var restrictSearchTargetContent = "";
var restrictSearchTargetFooter = "";
if (aHighlightInfo[loop][1] === contentText)
{
restrictSearchTargetContent = searchTargetContent;
}
else if (aHighlightInfo[loop][1] === footerText)
{
restrictSearchTargetFooter = searchTargetFooter;
}
else
{
restrictSearchTargetAll = searchTargetAll;
}
if (aHighlightInfo[loop][9] == false)
{
var requestText = escapePattern(aHighlightInfo[loop][0]);
if (aHighlightInfo[loop][7] == true)
{
// wrap pattern in \b for whole word
requestText = "\\b" + requestText + "\\b";
}
}
else
{
// direct RegExp specified
var requestText = aHighlightInfo[loop][0];
}
if (aHighlightInfo[loop][8] == false)
{
var requestPattern = new RegExp(requestText, "i"); // ignore case
}
else
{
var requestPattern = new RegExp(requestText);
}
// search as appropriate
if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
{
// highlight this post
var requestHiEntire = (aHighlightInfo[loop][2].indexOf("Entire") >= 0 ? true: false);
var requestHiFooter = (aHighlightInfo[loop][2].indexOf(footerText) >= 0 ? true: false);
var requestForeground = null;
if (aHighlightInfo[loop][3].indexOf(customText) >= 0)
{
// get rgb color, if valid
var result = processRGBvalue(aHighlightInfo[loop][5]);
if (result.length)
{
requestForeground = result;
}
}
else if (aHighlightInfo[loop][3].indexOf(unchangedText) < 0)
{
requestForeground = aHighlightInfo[loop][3];
}
var requestBackground = null;
if (aHighlightInfo[loop][4].indexOf(customText) >= 0)
{
var result = processRGBvalue(aHighlightInfo[loop][6]);
if (result.length)
{
requestBackground = result;
}
}
else if (aHighlightInfo[loop][4].indexOf(unchangedText) < 0)
{
requestBackground = aHighlightInfo[loop][4];
}
if (requestHiEntire)
{
candidate.setAttribute(mmHighlightAttribText, "on");
if (requestForeground)
{
candidate.style.color = requestForeground;
}
if (requestBackground)
{
candidate.style.backgroundColor = requestBackground;
}
}
else if (requestHiFooter && spanFooterStore)
{
for (var aLoop = 0; aLoop < spanFooterStore.length; aLoop++)
{
var aNode = spanFooterStore[aLoop];
if (aNode.getAttribute(mmHighlightAttribText))
{
// message already processed for highlighting
continue;
}
aNode.setAttribute(mmHighlightAttribText, "on");
if (requestForeground)
{
aNode.style.color = requestForeground;
}
if (requestBackground)
{
aNode.style.backgroundColor = requestBackground;
}
}
}
}
}
}
function styleTransform(
candidate,
doAllFlag,
doValue,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore)
{
if (deactivateStyleFlag)
{
return;
}
if (candidate.getAttribute(mmDeleteAttribText))
{
return;
}
if (doAllFlag)
{
var start = 0;
var end = aStyleInfo.length;
}
else
{
var start = doValue;
var end = start + 1;
}
var sInfo = {
styleText : 0,
locatedIn : 1,
styleStyles : 2,
wholeWord : 3,
caseSensitive : 4,
useRegExp : 5,
styleUsed : 6,
ruleDate : 7,
ruleID : 8
};
var searchTargetAll = "";
var searchTargetContent = "";
var searchTargetFooter = "";
var useAll, useContent, useFooter;
for (var loop = start; loop < end; loop++)
{
var requestLocContent = (aStyleInfo[loop][sInfo.locatedIn].indexOf(contentText) >= 0 ? true: false);
var requestLocFooter = (aStyleInfo[loop][sInfo.locatedIn].indexOf(footerText) >= 0 ? true: false);
if (requestLocContent && requestLocFooter)
{
useAll = true;
}
else if (requestLocContent)
{
useContent = true;
}
else if (requestLocFooter)
{
useFooter = true;
}
}
var textValStore = new Array();
if (useAll)
{
for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
{
var aNode = textAllNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetAll = textValStore.join('');
textValStore.length = 0;
}
if (useContent)
{
for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
{
var aNode = textContentNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetContent = textValStore.join('');
textValStore.length = 0;
}
if (useFooter)
{
for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
{
var aNode = textFooterNodeStore[aLoop];
if (aNode.nodeValue)
{
textValStore.push(aNode.nodeValue);
}
}
searchTargetFooter = textValStore.join('');
}
for (var loop = start; loop < end; loop++)
{
if (!aStyleInfo[loop][sInfo.styleText])
{
continue;
}
var restrictSearchTargetAll = "";
var restrictSearchTargetContent = "";
var restrictSearchTargetFooter = "";
if (aStyleInfo[loop][sInfo.locatedIn] === contentText)
{
restrictSearchTargetContent = searchTargetContent;
}
else if (aStyleInfo[loop][sInfo.locatedIn] === footerText)
{
restrictSearchTargetFooter = searchTargetFooter;
}
else
{
restrictSearchTargetAll = searchTargetAll;
}
if (aStyleInfo[loop][sInfo.useRegExp] == false)
{
var requestText = escapePattern(aStyleInfo[loop][0]);
if (aStyleInfo[loop][sInfo.wholeWord] == true)
{
requestText = "\\b" + requestText + "\\b";
}
}
else
{
var requestText = aStyleInfo[loop][0];
}
if (aStyleInfo[loop][sInfo.caseSensitive] == false)
{
var requestPattern = new RegExp(requestText, "i");
}
else
{
var requestPattern = new RegExp(requestText);
}
if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
{
// style this post
if (!aStyleInfo[loop][sInfo.styleUsed])
{
// first time style is used, add it
var userStyle = document.createElement("style");
userStyle.setAttribute('type', 'text/css');
var modStyle = aStyleInfo[loop][sInfo.styleStyles];
modStyle = modStyle.replace(/\b(mmStyledPost)\b/,"$1"+aStyleInfo[loop][sInfo.ruleID]);
userStyle.innerHTML = modStyle;
document.getElementsByTagName('head')[0].appendChild(userStyle);
aStyleInfo[loop][sInfo.styleUsed] = true;
}
candidate.setAttribute(mmStyledPostAttribText + aStyleInfo[loop][sInfo.ruleID], "on");
}
}
}
function nodeBreaker(flags, singleValue)
{
var xpath = "//div[@class='copy' or @class='comments' or @class='comments best']";
var divNodes = document.evaluate(
xpath,
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
var countTo = divNodes.snapshotLength;
var spanFooterStore = new Array();
var boldFooterStore = new Array();
var anchorStore = new Array();
var textAllNodeStore = new Array();
var textFooterNodeStore = new Array();
var textContentNodeStore = new Array();
var parentNodeStore = new Array();
var footerStatusStore = new Array();
for (var i = 0; i < countTo; i++)
{
var candidate = divNodes.snapshotItem(i);
if (!candidate)
{
break;
}
spanFooterStore.length = 0;
boldFooterStore.length = 0;
anchorStore.length = 0;
textAllNodeStore.length = 0;
textFooterNodeStore.length = 0;
textContentNodeStore.length = 0;
parentNodeStore.length = 0;
footerStatusStore.length = 0;
footerStatus = 0;
currentNode = candidate;
var looking = true;
while (looking)
{
// track multiple SPAN's since "more inside" is also smallcopy (and therefore a footer for now)
if (currentNode.nodeName === spanText &&
currentNode.getAttribute('class') === "smallcopy")
{
footerStatus = true;
spanFooterStore.push(currentNode);
// track footer bolds for FG = BG delete filter, since they need explicit color setting
var cNode = currentNode.firstChild;
while (cNode)
{
if (cNode.nodeName === "B")
{
boldFooterStore.push(cNode);
}
cNode = cNode.nextSibling;
}
}
else if (currentNode.nodeName === "A")
{
anchorStore.push(currentNode);
}
else if (currentNode.nodeName === textNodeText && currentNode.nodeValue)
{
textAllNodeStore.push(currentNode);
if (footerStatus)
{
textFooterNodeStore.push(currentNode);
}
else
{
textContentNodeStore.push(currentNode);
}
}
if (currentNode.childNodes.length)
{
// child exists, save state info for this node level
parentNodeStore.push(currentNode);
footerStatusStore.push(footerStatus);
currentNode = currentNode.firstChild;
}
else // next sibling
{
while (1)
{
if (currentNode == candidate || !currentNode)
{
// done
looking = false;
break;
}
if (currentNode = currentNode.nextSibling)
{
// valid node assignment
break;
}
currentNode = parentNodeStore.pop();
footerStatus = footerStatusStore.pop();
}
}
}
if (flags & flagMultiple)
{
deleteTransform(
candidate,
true,
0,
spanFooterStore,
boldFooterStore,
anchorStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
tagTransform(
candidate,
true,
0,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
highlightTransform(
candidate,
true,
0,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
styleTransform(
candidate,
true,
0,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
}
else if (flags & flagHighlight)
{
highlightTransform(
candidate,
false,
singleValue,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
}
else if (flags & flagDelete)
{
deleteTransform(
candidate,
false,
singleValue,
spanFooterStore,
boldFooterStore,
anchorStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
}
else if (flags & flagTag)
{
tagTransform(
candidate,
false,
singleValue,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
}
else if (flags && flagStyle)
{
styleTransform(
candidate,
false,
singleValue,
spanFooterStore,
textAllNodeStore,
textContentNodeStore,
textFooterNodeStore);
}
}
}
function saveHighlight(event)
{
event.stopPropagation();
mondo_meta_highlight_control.style.display = noneText;
var elem = document.getElementById("mondo_meta_highlight_text");
var userHiText = elem.value;
elem = document.getElementById("mondo_meta_highlight_located");
var userLocated = elem.value;
elem = document.getElementById("mondo_meta_highlight_area");
var userArea = elem.value;
elem = document.getElementById("mondo_meta_highlight_fgcolor");
var userfgColor = elem.value;
elem = document.getElementById("mondo_meta_highlight_bgcolor");
var userbgColor = elem.value;
elem = document.getElementById("mondo_meta_highlight_fgRGB");
var userfgRGB = elem.value;
elem = document.getElementById("mondo_meta_highlight_bgRGB");
var userbgRGB = elem.value;
var checkNode = document.getElementById("mondo_meta_highlight_wholeword");
var userWhole = checkNode.checked;
checkNode = document.getElementById("mondo_meta_highlight_matchcase");
var userCase = checkNode.checked;
checkNode = document.getElementById("mondo_meta_highlight_regexp");
var userRegExp = checkNode.checked;
var rightNow = new Date();
aHighlightInfo.push([
userHiText,
userLocated, userArea,
userfgColor, userbgColor,
userfgRGB, userbgRGB,
userWhole, userCase, userRegExp,
rightNow.getTime()]);
nodeBreaker(flagHighlight, aHighlightInfo.length - 1);
var gmKey = saveHighlightItem(aHighlightInfo[aHighlightInfo.length - 1]);
aHighlightInfo[aHighlightInfo.length - 1][11] = gmKey;
boxUp = 0;
}
function cancelHighlight(event)
{
event.stopPropagation();
boxUp = 0;
mondo_meta_highlight_control.style.display = noneText;
}
function changeFgHighlight(event)
{
event.stopPropagation();
var sNode = document.getElementById( "mondo_meta_highlight_fgcolor");
var iNode = document.getElementById( "mondo_meta_highlight_fgRGB");
if (sNode.value === customText)
{
iNode.disabled = false;
iNode.style.backgroundColor = whiteText;
iNode.focus();
}
else
{
iNode.disabled = true;
iNode.style.backgroundColor = "gray";
}
}
function changeBgHighlight(event)
{
event.stopPropagation();
var sNode = document.getElementById( "mondo_meta_highlight_bgcolor");
var iNode = document.getElementById( "mondo_meta_highlight_bgRGB");
if (sNode.value === customText)
{
iNode.disabled = false;
iNode.style.backgroundColor = whiteText;
iNode.focus();
}
else
{
iNode.disabled = true;
iNode.style.backgroundColor = "gray";
}
}
// whichType == 1 for delete, 2 for tag, 3 for highlight, 4 for style
function showRuleInfo(ruleNumber, whichType)
{
var rNode = document.getElementById( "mondo_meta_rulehead");
var tNode = rNode.firstChild;
if (!ruleNumber)
{
tNode.nodeValue = "Saved Rule 0 of 0";
var aNode = document.getElementById( "mondo_meta_ruletext");
aNode.style.visibility = hiddenText;
aNode = document.getElementById( "mondo_meta_mantext");
aNode.style.visibility = hiddenText;
}
else
{
switch (whichType)
{
case 1:
var trueRuleNumber = ruleNumber;
break;
case 2:
var trueRuleNumber = aDeleteInfo.length + ruleNumber;
break;
case 3:
var trueRuleNumber = aTagInfo.length + aDeleteInfo.length + ruleNumber;
break;
case 4:
var trueRuleNumber = aHighlightInfo.length + aTagInfo.length + aDeleteInfo.length + ruleNumber;
break;
}
var ruleHead = "Saved Rule " + trueRuleNumber + " of " + (aDeleteInfo.length + aHighlightInfo.length + aTagInfo.length + aStyleInfo.length);
tNode.nodeValue = ruleHead;
var aNode = document.getElementById( "mondo_meta_mantext");
tNode = aNode.firstChild;
switch (whichType)
{
case 1:
tNode.nodeValue = "Delete Text:";
break;
case 2:
tNode.nodeValue = "Tag Text:";
break;
case 3:
tNode.nodeValue = "Highlight Text:";
break;
case 4:
tNode.nodeValue = "Style Text:";
break;
}
aNode.style.fontWeight = "bold";
aNode.style.visibility = visibleText;
aNode = document.getElementById( "mondo_meta_ruletext");
switch (whichType)
{
case 1:
aNode.value = aDeleteInfo[ruleNumber - 1][0];
break;
case 2:
aNode.value = aTagInfo[ruleNumber - 1][0];
break;
case 3:
aNode.value = aHighlightInfo[ruleNumber - 1][0];
break;
case 4:
aNode.value = aStyleInfo[ruleNumber - 1][0];
break;
}
aNode.style.visibility = visibleText;
}
currentRuleNumber = ruleNumber;
currentRuleType = whichType;
}
// currentRuleType == 1 for delete, 2 for tag, 3 for highlight, 4 for style
function prevManage(event)
{
event.stopPropagation();
if (!currentRuleNumber || !currentRuleType)
{
return;
}
if (currentRuleNumber > 1)
{
showRuleInfo(currentRuleNumber - 1, currentRuleType);
return;
}
if (currentRuleType == 1) // delete
{
if (aStyleInfo.length)
{
showRuleInfo(aStyleInfo.length, 4);
}
else if (aHighlightInfo.length)
{
showRuleInfo(aHighlightInfo.length, 3);
}
else if (aTagInfo.length)
{
showRuleInfo(aTagInfo.length, 2);
}
else
{
showRuleInfo(aDeleteInfo.length, 1);
}
}
else if (currentRuleType == 2) // tag
{
if (aDeleteInfo.length)
{
showRuleInfo(aDeleteInfo.length, 1);
}
else if (aStyleInfo.length)
{
showRuleInfo(aStyleInfo.length, 4);
}
else if (aHighlightInfo.length)
{
showRuleInfo(aHighlightInfo.length, 3);
}
else
{
showRuleInfo(aTagInfo.length, 2);
}
}
else if (currentRuleType == 3) // highlight
{
if (aTagInfo.length)
{
showRuleInfo(aTagInfo.length, 2);
}
else if (aDeleteInfo.length)
{
showRuleInfo(aDeleteInfo.length, 1);
}
else if (aStyleInfo.length)
{
showRuleInfo(aStyleInfo.length, 4);
}
else
{
showRuleInfo(aHighlightInfo.length, 3);
}
}
else if (currentRuleType == 4) // style
{
if (aHighlightInfo.length)
{
showRuleInfo(aHighlightInfo.length, 3);
}
else if (aTagInfo.length)
{
showRuleInfo(aTagInfo.length, 2);
}
else if (aDeleteInfo.length)
{
showRuleInfo(aDeleteInfo.length, 1);
}
else
{
showRuleInfo(aStyleInfo.length, 4);
}
}
}
// currentRuleType == 1 for delete, 2 for tag, 3 for highlight, 4 for style
function nextManage(event)
{
event.stopPropagation();
if (!currentRuleNumber || !currentRuleType)
{
return;
}
if (currentRuleType == 1) // delete
{
if (currentRuleNumber < aDeleteInfo.length)
{
showRuleInfo(currentRuleNumber + 1, 1);
}
else
{
if (aTagInfo.length)
{
showRuleInfo(1, 2);
}
else if (aHighlightInfo.length)
{
showRuleInfo(1, 3);
}
else if (aStyleInfo.length)
{
showRuleInfo(1, 4);
}
else
{
showRuleInfo(1, 1);
}
}
}
else if (currentRuleType == 2) // tag
{
if (currentRuleNumber < aTagInfo.length)
{
showRuleInfo(currentRuleNumber + 1, 2);
}
else
{
if (aHighlightInfo.length)
{
showRuleInfo(1, 3);
}
else if (aStyleInfo.length)
{
showRuleInfo(1, 4);
}
else if (aDeleteInfo.length)
{
showRuleInfo(1, 1);
}
else
{
showRuleInfo(1, 2);
}
}
}
else if (currentRuleType == 3) // highlight
{
if (currentRuleNumber < aHighlightInfo.length)
{
showRuleInfo(currentRuleNumber + 1, 3);
}
else
{
if (aStyleInfo.length)
{
showRuleInfo(1, 4);
}
else if (aDeleteInfo.length)
{
showRuleInfo(1, 1);
}
else if (aTagInfo.length)
{
showRuleInfo(1, 2);
}
else
{
showRuleInfo(1, 3);
}
}
}
else if (currentRuleType == 4) // style
{
if (currentRuleNumber < aStyleInfo.length)
{
showRuleInfo(currentRuleNumber + 1, 4);
}
else
{
if (aDeleteInfo.length)
{
showRuleInfo(1, 1);
}
else if (aTagInfo.length)
{
showRuleInfo(1, 2);
}
else if (aHighlightInfo.length)
{
showRuleInfo(1, 3);
}
else
{
showRuleInfo(1, 4);
}
}
}
}
function deleteManage(event)
{
event.stopPropagation();
if (!currentRuleNumber || !currentRuleType)
{
return;
}
if (currentRuleType == 1)
{
freeSlot(aDeleteInfo[currentRuleNumber - 1][9]); // rule ID
aDeleteInfo.splice(currentRuleNumber - 1, 1);
}
else if (currentRuleType == 2)
{
freeSlot(aTagInfo[currentRuleNumber - 1][7]);
aTagInfo.splice(currentRuleNumber - 1, 1);
}
else if (currentRuleType == 3)
{
freeSlot(aHighlightInfo[currentRuleNumber - 1][11]);
aHighlightInfo.splice(currentRuleNumber - 1, 1);
}
else if (currentRuleType == 4)
{
freeSlot(aStyleInfo[currentRuleNumber - 1][8]);
aStyleInfo.splice(currentRuleNumber - 1, 1);
}
if (currentRuleNumber > 1)
{
currentRuleNumber--;
}
if (!aDeleteInfo.length && !aTagInfo.length && !aHighlightInfo.length && !aStyleInfo.length)
{
showRuleInfo(0, 0);
return;
}
while (1)
{
if (currentRuleType == 1 && !aDeleteInfo.length)
{
currentRuleNumber = 1;
currentRuleType++;
}
else if (currentRuleType == 2 && !aTagInfo.length)
{
currentRuleNumber = 1;
currentRuleType++;
}
else if (currentRuleType == 3 && !aHighlightInfo.length)
{
currentRuleNumber = 1;
currentRuleType++;
}
else if (currentRuleType == 4 && !aStyleInfo.length)
{
currentRuleNumber = 1;
currentRuleType = 1;
}
else
{
break;
}
}
showRuleInfo(currentRuleNumber, currentRuleType);
}
function saveManageStatus()
{
var gmKey = systemStatusText;
// NB: system values are in order: delete,highlight,tag,style
var infoString = String(deactivateDeleteFlag).length + ":" + deactivateDeleteFlag;
infoString += String(deactivateHighlightFlag).length + ":" + deactivateHighlightFlag;
infoString += String(deactivateTagFlag).length + ":" + deactivateTagFlag;
infoString += String(deactivateStyleFlag).length + ":" + deactivateStyleFlag;
var gmValue = systemHeader + infoString;
GM_setValue(gmKey, gmValue);
}
function closeManage(event)
{
event.stopPropagation();
var checkNode = document.getElementById("mondo_meta_manage_deactdel");
deactivateDeleteFlag = checkNode.checked;
checkNode = document.getElementById("mondo_meta_manage_deacthi");
deactivateHighlightFlag = checkNode.checked;
checkNode = document.getElementById("mondo_meta_manage_deacttag");
deactivateTagFlag = checkNode.checked;
checkNode = document.getElementById("mondo_meta_manage_deactsty");
deactivateStyleFlag = checkNode.checked;
saveManageStatus();
boxUp = 0;
showRuleInfo(0, 0);
mondo_meta_manage_control.style.display = noneText;
}
function processManage()
{
mondo_meta_manage_control.style.display = "";
var checkNode = document.getElementById("mondo_meta_manage_deactdel");
checkNode.checked = deactivateDeleteFlag;
checkNode = document.getElementById("mondo_meta_manage_deacthi");
checkNode.checked = deactivateHighlightFlag;
checkNode = document.getElementById("mondo_meta_manage_deacttag");
checkNode.checked = deactivateTagFlag;
checkNode = document.getElementById("mondo_meta_manage_deactsty");
checkNode.checked = deactivateStyleFlag;
if (aDeleteInfo.length)
{
showRuleInfo(1, 1);
}
else if (aTagInfo.length)
{
showRuleInfo(1, 2);
}
else if (aHighlightInfo.length)
{
showRuleInfo(1, 3);
}
else if (aStyleInfo.length)
{
showRuleInfo(1, 4);
}
else
{
showRuleInfo(0, 0);
}
}
function do_a_mondo(event)
{
event.stopPropagation();
var which = event.target.selectedIndex;
var choice = event.target.options[which].value;
if (choice === expandText || choice === compactText)
{
expandLinks();
// don't count on the selection, count on the display status
if (expandedLinksFlag)
{
event.target.options[which].text = expandTextChoice[1];
event.target.options[which].value = compactText;
}
else
{
event.target.options[which].text = expandTextChoice[0];
event.target.options[which].value = expandText;
}
}
else if (choice === deleteFilterText && !boxUp)
{
boxUp = 1;
mondo_meta_delete_control.style.display = "";
var elem = document.getElementById("mondo_meta_delete_text");
elem.focus();
}
else if (choice === highlightText && !boxUp)
{
boxUp = 1;
mondo_meta_highlight_control.style.display = "";
var elem = document.getElementById("mondo_meta_highlight_text");
elem.focus();
}
else if (choice === tagText && !boxUp)
{
boxUp = 1;
mondo_meta_tag_control.style.display = "";
var elem = document.getElementById("mondo_meta_tag_text");
elem.focus();
}
else if (choice === styleText && !boxUp)
{
boxUp = 1;
mondo_meta_style_control.style.display = "";
var elem = document.getElementById("mondo_meta_style_text");
elem.focus();
}
else if (choice === manageText & !boxUp)
{
boxUp = 1;
processManage();
}
event.target.selectedIndex = 0;
}
function processRule(rule, ruleID)
{
if (rule.substr(0, 4).toUpperCase() != "USED")
{
freeRules.push(ruleID);
}
else
{
var bBad = false;
var pos = usedRuleHeader.length;
if (rule.substr(pos, deleteHeader.length) === deleteHeader)
{
pos += deleteHeader.length;
// DelText, Located, How, Whole, Case, Links, RegExp, Duration, Date
var storeDelText, storeLocated, storeHow;
var storeWhole, storeCase, storeLinks, storeRegExp;
var storeDuration, storeDate;
for (var j = 0; !bBad && j < 9; j++)
{
var len = parseInt(rule.substr(pos));
if (isNaN(len))
{
bBad = true;
break;
}
pos = rule.indexOf(":", pos);
if (pos == -1)
{
bBad = true;
break;
}
pos++;
var result = rule.substr(pos, len);
pos += len;
switch (j)
{
case 0:
storeDelText = result;
break;
case 1:
storeLocated = result;
break;
case 2:
storeHow = result;
break;
case 3:
storeWhole = (result === trueText ? true : false);
break;
case 4:
storeCase = (result === trueText ? true : false);
break;
case 5:
storeLinks = (result === trueText ? true : false);
break;
case 6:
storeRegExp = (result === trueText ? true : false);
break;
case 7:
storeDuration = result;
break;
case 8:
storeDate = result;
break;
}
}
if (!bBad)
{
var rightNow = new Date();
if (storeDate + parseInt(storeDuration) <= rightNow.getTime())
{
freeSlot(ruleID);
}
else
{
aDeleteInfo.push([
storeDelText,
storeLocated,
storeHow,
storeWhole,
storeCase,
storeLinks,
storeRegExp,
storeDuration,
storeDate,
ruleID]);
}
}
}
else if (rule.substr(pos, highlightHeader.length) === highlightHeader)
{
pos += highlightHeader.length;
// HiText, Located, Area,
// fgColor, userbgColor, userfgRGB, userbgRGB,
// Whole, Case, RegExp, Date
var storeHiText, storeLocated, storeArea;
var storefgColor, storebgColor, storefgRGB, storebgRGB;
var storeWhole, storeCase, storeRegExp, storeDate
for (var j = 0; !bBad && j < 11; j++)
{
var len = parseInt(rule.substr(pos));
if (isNaN(len))
{
bBad = true;
break;
}
pos = rule.indexOf(":", pos);
if (pos == -1)
{
bBad = true;
break;
}
pos++;
var result = rule.substr(pos, len);
pos += len;
switch (j)
{
case 0:
storeHiText = result;
break;
case 1:
storeLocated = result;
break;
case 2:
storeArea = result;
break;
case 3:
storefgColor = result;
break;
case 4:
storebgColor = result;
break;
case 5:
storefgRGB = result;
break;
case 6:
storebgRGB = result;
break;
case 7:
storeWhole = (result === trueText ? true : false);
break;
case 8:
storeCase = (result === trueText ? true : false);
break;
case 9:
storeRegExp = (result === trueText ? true : false);
break;
case 10:
storeDate = result;
break;
}
}
if (!bBad)
{
aHighlightInfo.push([
storeHiText,
storeLocated,
storeArea,
storefgColor,
storebgColor,
storefgRGB,
storebgRGB,
storeWhole,
storeCase,
storeRegExp,
storeDate,
ruleID]);
}
}
else if (rule.substr(pos, tagHeader.length) === tagHeader)
{
// userTagText, userLocated, userTagTags, userWhole, userCase, userRegExp,
pos += tagHeader.length;
var storeTagText, storeLocated, storeTagTags;
var storeWhole, storeCase, storeRegExp, storeDate
for (var j = 0; !bBad && j < 7; j++)
{
var len = parseInt(rule.substr(pos));
if (isNaN(len))
{
bBad = true;
break;
}
pos = rule.indexOf(":", pos);
if (pos == -1)
{
bBad = true;
break;
}
pos++;
var result = rule.substr(pos, len);
pos += len;
switch (j)
{
case 0:
storeTagText = result;
break;
case 1:
storeLocated = result;
break;
case 2:
storeTagTags = result;
break;
case 3:
storeWhole = (result === trueText ? true : false);
break;
case 4:
storeCase = (result === trueText ? true : false);
break;
case 5:
storeRegExp = (result === trueText ? true : false);
break;
case 6:
storeDate = result;
break;
}
}
if (!bBad)
{
aTagInfo.push([
storeTagText,
storeLocated,
storeTagTags,
storeWhole,
storeCase,
storeRegExp,
storeDate,
ruleID]);
}
}
else if (rule.substr(pos, styleHeader.length) === styleHeader)
{
// userStyleText, userLocated, userStyleStyles, userWhole, userCase, userRegExp,
pos += styleHeader.length;
var storeStyleText, storeLocated, storeStyleStyles;
var storeWhole, storeCase, storeRegExp, storeDate
for (var j = 0; !bBad && j < 7; j++)
{
var len = parseInt(rule.substr(pos));
if (isNaN(len))
{
bBad = true;
break;
}
pos = rule.indexOf(":", pos);
if (pos == -1)
{
bBad = true;
break;
}
pos++;
var result = rule.substr(pos, len);
pos += len;
switch (j)
{
case 0:
storeStyleText = result;
break;
case 1:
storeLocated = result;
break;
case 2:
storeStyleStyles = result;
break;
case 3:
storeWhole = (result === trueText ? true : false);
break;
case 4:
storeCase = (result === trueText ? true : false);
break;
case 5:
storeRegExp = (result === trueText ? true : false);
break;
case 6:
storeDate = result;
break;
}
}
if (!bBad)
{
aStyleInfo.push([
storeStyleText,
storeLocated,
storeStyleStyles,
storeWhole,
storeCase,
storeRegExp,
false,
storeDate,
ruleID]);
}
}
if (bBad)
{
// couldn't parse it, kill the rule
freeSlot(ruleID);
}
}
}
function processSystemStatus()
{
var settingsExist = ((statusValues = GM_getValue(systemStatusText, "x")) != "x");
if (!settingsExist)
{
return;
}
// system values are in order: delete,highlight,tag,style
if (statusValues.substr(0, systemHeader.length) === systemHeader)
{
var pos = systemHeader.length;
for (var j = 0; j < 4; j++)
{
var len = parseInt(statusValues.substr(pos));
if (isNaN(len))
{
break;
}
pos = statusValues.indexOf(":", pos);
if (pos == -1)
{
break;
}
pos++;
var result = statusValues.substr(pos, len);
pos += len;
switch (j)
{
case 0:
deactivateDeleteFlag = (result === trueText ? true : false);
break;
case 1:
deactivateHighlightFlag = (result === trueText ? true : false);
break;
case 2:
deactivateTagFlag = (result === trueText ? true : false);
break;
case 3:
deactivateStyleFlag = (result === trueText ? true : false);
break;
default:
}
}
}
}
// load existing filter/highlight info settings and process them
function loadPermanentInfo()
{
processSystemStatus();
var count = 0;
var rule;
var ruleID;
freeRules.length = aDeleteInfo.length = aHighlightInfo.length = 0;
aTagInfo.length = aStyleInfo.length = 0;
while ((rule = GM_getValue(ruleID = ("Rule"+(++count)), "x")) != "x")
{
processRule(rule, ruleID);
storedRuleCount++; // increments even on invalid rule
}
nodeBreaker(flagMultiple, 0);
var mmParam = GM_getValue("moveMouseAreaWidth", xText);
if (mmParam != xText)
{
moveMouseAreaWidth = mmParam;
}
else
{
GM_setValue("moveMouseAreaWidth", moveMouseAreaWidth);
}
mmParam = GM_getValue("moveMouseAreaSeconds", xText);
if (mmParam != xText)
{
moveMouseAreaSeconds = mmParam;
}
else
{
GM_setValue("moveMouseAreaSeconds", moveMouseAreaSeconds);
}
mmParam = GM_getValue("dropdownPeekABoo", xText);
if (mmParam != xText)
{
dropdownPeekABoo = (mmParam === trueText ? true : false);
}
else
{
GM_setValue("dropdownPeekABoo", falseText);
}
}
function init()
{
mondo_meta_control = document.getElementById( "mondo_meta_control")
if (mondo_meta_control)
{
return;
}
GM_setValue("Version", mondoMetaVersion);
loadPermanentInfo();
mondo_meta_control = document.createElement("select");
mondo_meta_control.style.position = "fixed";
mondo_meta_control.style.bottom = "5px";
mondo_meta_control.style.left = "5px";
mondo_meta_control.style.fontSize = "12px";
mondo_meta_control.style.color = darkBlueText;
mondo_meta_control.style.backgroundColor = whiteText;
var opt_count = 0;
var optmmo = document.createElement(optionText);
optmmo.text = "Mondo Meta Options";
optmmo.value = defaultText;
optmmo.defaultselected = true;
optmmo.selected = true;
optmmo.style.color = darkBlueText;
optmmo.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optmmo;
var optel = document.createElement(optionText);
optel.text = expandTextChoice[0];
optel.value = expandText;
optel.style.color = darkBlueText;
optel.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optel;
/*
var optsep = document.createElement(optionText);
optsep.text = separatorText;
optsep.value = separatorText;
optsep.style.color = darkBlueText;
optsep.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optsep;
*/
var optfd = document.createElement(optionText);
optfd.text = deleteFilterText;
optfd.value = deleteFilterText;
optfd.style.color = darkBlueText;
optfd.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optfd;
var opthi = document.createElement(optionText);
opthi.text = highlightText;
opthi.value = highlightText;
opthi.style.color = darkBlueText;
opthi.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = opthi;
var optsty = document.createElement(optionText);
optsty.text = styleText;
optsty.value = styleText;
optsty.style.color = darkBlueText;
optsty.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optsty;
var opttag = document.createElement(optionText);
opttag.text = tagText;
opttag.value = tagText;
opttag.style.color = darkBlueText;
opttag.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = opttag;
/*
var optsep = document.createElement(optionText);
optsep.text = separatorText;
optsep.value = separatorText;
optsep.style.color = darkBlueText;
optsep.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optsep;
*/
var optman = document.createElement(optionText);
optman.text = manageText;
optman.value = manageText;
optman.style.color = darkBlueText;
optman.style.backgroundColor = whiteText;
mondo_meta_control.options[opt_count++] = optman;
mondo_meta_control.length = opt_count;
mondo_meta_control.addEventListener('change', do_a_mondo, false);
document.getElementsByTagName('body')[0].appendChild(mondo_meta_control);
var addHeader =
'td.mondo_meta_basicstyle INPUT,td.mondo_meta_basicstyle SELECT,td.mondo_meta_basicstyle DIV,td.mondo_meta_basicstyle SPAN' +
'{ font: 12px Verdana, Arial, Helvetica, sans-serif; }' +
'td.mondo_meta_basicstyle INPUT,td.mondo_meta_basicstyle SELECT' +
'{ background-color: white }' +
'td.mondo_meta_basicstyle SPAN { color: darkblue }' +
'.mondo_meta_title { font-weight: bold !important; font-size: 18px !important; padding-bottom: 8px; margin-left: 140px; }' +
'.mondo_meta_minititle { font-weight: bold !important; font-size: 14px !important; padding-bottom: 8px; margin-left: 20px; }' +
'.mondo_meta_label { font-weight: bold; text-align: right; float: left; width: 140px; }' +
'.mondo_meta_userinput { float: left; width: 230px; }' +
'.mondo_meta_checks { font-weight: bold; float: left;}' +
'.mondo_meta_rgb { width: 90px; }' +
'.mondo_meta_duration { width: 40px; }' +
'.mondo_meta_smallindent, .mondo_meta_mantext { margin-left: 20px; }' +
'.mondo_meta_manage { width: 320px; float: left; }' +
'.mondo_meta_mantext { text-align: right; float: left; }' +
'button.mondo_meta { width: 60px; position: absolute; bottom: 10px; }' +
'button.mondo_meta2 { width: 70px; position: absolute; bottom: 10px; }';
var test_style = document.createElement("style");
test_style.setAttribute('type', 'text/css');
test_style.innerHTML = addHeader;
document.getElementsByTagName('head')[0].appendChild(test_style);
mondo_meta_highlight_control = document.createElement("td");
mondo_meta_highlight_control.className = "mondo_meta_basicstyle";
mondo_meta_highlight_control.style.lineHeight = "26px";
mondo_meta_highlight_control.style.color = darkBlueText;
mondo_meta_highlight_control.style.position = "fixed";
mondo_meta_highlight_control.style.bottom = "40px";
mondo_meta_highlight_control.style.left = "5px";
mondo_meta_highlight_control.style.backgroundColor = "#FFCFCF";
mondo_meta_highlight_control.style.borderColor = "black";
mondo_meta_highlight_control.style.borderWidth = "1px";
mondo_meta_highlight_control.style.borderStyle = "solid";
mondo_meta_highlight_control.style.opacity = ".94";
mondo_meta_highlight_control.style.display = noneText;
var highlightHtml =
'<div class="mondo_meta_title">Mondo Meta Highlight</div>' +
'<div>' +
'<span class="mondo_meta_label">Highlight text: </span>' +
'<input id="mondo_meta_highlight_text" class="mondo_meta_userinput" type="text">' +
'<span class="mondo_meta_checks"><input id="mondo_meta_highlight_wholeword" type="checkbox">Whole word only</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Located in: </span>' +
'<span class="mondo_meta_userinput">' +
'<select id="mondo_meta_highlight_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_highlight_matchcase" type="checkbox">Match case</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Area highlighted: </span>' +
'<span class="mondo_meta_userinput">' +
'<select id="mondo_meta_highlight_area">' +
'<option>Footer only</option>' +
'<option>Entire post</option>' +
'</select>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_highlight_regexp" type="checkbox">Regular expression</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Foreground color: </span>' +
'<span style="float: left">' +
'<select id="mondo_meta_highlight_fgcolor">' +
'<option>aqua</option>' +
'<option>black</option>' +
'<option selected>blue</option>' +
'<option>cyan</option>' +
'<option>gray</option>' +
'<option>green</option>' +
'<option>lime</option>' +
'<option>magenta</option>' +
'<option>maroon</option>' +
'<option>navy</option>' +
'<option>olive</option>' +
'<option>purple</option>' +
'<option>red</option>' +
'<option>teal</option>' +
'<option>white</option>' +
'<option>yellow</option>' +
'<option>Unchanged</option>' +
'<option>Custom</option>' +
'</select>' +
' <b>RGB:</b>' +
'<input id="mondo_meta_highlight_fgRGB" class="mondo_meta_rgb" disabled type="text" style="background-color: gray;">' +
'</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Background color: </span>' +
'<span style="float: left">' +
'<select id="mondo_meta_highlight_bgcolor">' +
'<option>aqua</option>' +
'<option>black</option>' +
'<option>blue</option>' +
'<option>cyan</option>' +
'<option>gray</option>' +
'<option>green</option>' +
'<option>lime</option>' +
'<option>magenta</option>' +
'<option>maroon</option>' +
'<option>navy</option>' +
'<option>olive</option>' +
'<option>purple</option>' +
'<option>red</option>' +
'<option>teal</option>' +
'<option>white</option>' +
'<option selected>yellow</option>' +
'<option>Unchanged</option>' +
'<option>Custom</option>' +
'</select>' +
' <b>RGB:</b>' +
'<input id="mondo_meta_highlight_bgRGB" class="mondo_meta_rgb" disabled type="text" style="background-color: gray;">' +
'</span>' +
'</div><br><br><br>';
mondo_meta_highlight_control.innerHTML = highlightHtml;
var saveNode = document.createElement(buttonText);
saveNode.setAttribute("class", "mondo_meta");
saveNode.style.marginLeft = "140px";
saveNode.appendChild(document.createTextNode("Save"));
var cancelNode = document.createElement(buttonText);
cancelNode.setAttribute("class", "mondo_meta");
cancelNode.style.marginLeft = "220px";
cancelNode.appendChild(document.createTextNode("Cancel"));
mondo_meta_highlight_control.appendChild(saveNode);
mondo_meta_highlight_control.appendChild(cancelNode);
document.getElementsByTagName('body')[0].appendChild(mondo_meta_highlight_control);
var sNode = document.getElementById( "mondo_meta_highlight_fgcolor");
sNode.addEventListener('change', changeFgHighlight, true);
sNode = document.getElementById( "mondo_meta_highlight_bgcolor");
sNode.addEventListener('change', changeBgHighlight, true);
saveNode.addEventListener(clickText, saveHighlight, true);
cancelNode.addEventListener(clickText, cancelHighlight, true);
mondo_meta_delete_control = document.createElement("td");
mondo_meta_delete_control.className = "mondo_meta_basicstyle";
mondo_meta_delete_control.style.lineHeight = "26px";
mondo_meta_delete_control.style.color = darkBlueText;
mondo_meta_delete_control.style.position = "fixed";
mondo_meta_delete_control.style.bottom = "40px";
mondo_meta_delete_control.style.left = "5px";
mondo_meta_delete_control.style.backgroundColor = "#FFCFCF";
mondo_meta_delete_control.style.borderColor = "black";
mondo_meta_delete_control.style.borderWidth = "1px";
mondo_meta_delete_control.style.borderStyle = "solid";
mondo_meta_delete_control.style.opacity = ".94";
mondo_meta_delete_control.style.display = noneText;
var deleteHtml =
'<div class="mondo_meta_title">Mondo Meta Delete-Filter</div>' +
'<div>' +
'<span class="mondo_meta_label">Delete if text: </span>' +
'<input id="mondo_meta_delete_text" class="mondo_meta_userinput" type="text">' +
'<span class="mondo_meta_checks"><input id="mondo_meta_delete_wholeword" type="checkbox">Whole word only</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Located in: </span>' +
'<span class="mondo_meta_userinput">' +
'<select id="mondo_meta_delete_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_delete_matchcase" type="checkbox">Match case</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">How: </span>' +
'<span class="mondo_meta_userinput">' +
'<select id="mondo_meta_delete_how">' +
'<option>'+removeText+'</option>' +
'<option>'+invisibleText+'</option>' +
'<option>'+fg_bgText+'</option>' +
'</select>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_delete_matchlinks" type="checkbox">Match links</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Duration: </span>' +
'<span class="mondo_meta_userinput">' +
'<input id="mondo_meta_delete_duration" class="mondo_meta_duration" type="text" value="90">' +
' <b>day(s)</b>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_delete_regexp" type="checkbox">Regular expression</span>' +
'</div><br><br><br>';
mondo_meta_delete_control.innerHTML = deleteHtml;
var saveNode = document.createElement(buttonText);
saveNode.setAttribute("class", "mondo_meta");
saveNode.style.marginLeft = "140px";
saveNode.appendChild(document.createTextNode("Save"));
var cancelNode = document.createElement(buttonText);
cancelNode.setAttribute("class", "mondo_meta");
cancelNode.style.marginLeft = "220px";
cancelNode.appendChild(document.createTextNode("Cancel"));
mondo_meta_delete_control.appendChild(saveNode);
mondo_meta_delete_control.appendChild(cancelNode);
document.getElementsByTagName('body')[0].appendChild(mondo_meta_delete_control);
saveNode.addEventListener(clickText, saveDelete, true);
cancelNode.addEventListener(clickText, cancelDelete, true);
mondo_meta_tag_control = document.createElement("td");
mondo_meta_tag_control.className = "mondo_meta_basicstyle";
mondo_meta_tag_control.style.lineHeight = "26px";
mondo_meta_tag_control.style.color = darkBlueText;
mondo_meta_tag_control.style.position = "fixed";
mondo_meta_tag_control.style.bottom = "40px";
mondo_meta_tag_control.style.left = "5px";
mondo_meta_tag_control.style.backgroundColor = "#FFCFCF";
mondo_meta_tag_control.style.borderColor = "black";
mondo_meta_tag_control.style.borderWidth = "1px";
mondo_meta_tag_control.style.borderStyle = "solid";
mondo_meta_tag_control.style.opacity = ".94";
mondo_meta_tag_control.style.display = noneText;
var tagHtml =
'<div class="mondo_meta_title">Mondo Meta Tag</div>' +
'<div>' +
'<span class="mondo_meta_label">Tag text: </span>' +
'<input id="mondo_meta_tag_text" class="mondo_meta_userinput" type="text">' +
'<span class="mondo_meta_checks"><input id="mondo_meta_tag_wholeword" type="checkbox">Whole word only</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Located in: </span>' +
'<span class="mondo_meta_userinput">' +
'<select id="mondo_meta_tag_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_tag_matchcase" type="checkbox">Match case</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Use Tags: </span>' +
'<input id="mondo_meta_tag_tags" class="mondo_meta_userinput" type="text">' +
'<span class="mondo_meta_checks"><input id="mondo_meta_tag_regexp" type="checkbox">Regular expression</span>' +
'</div><br><br><br>';
mondo_meta_tag_control.innerHTML = tagHtml;
var saveNode = document.createElement(buttonText);
saveNode.setAttribute("class", "mondo_meta");
saveNode.style.marginLeft = "140px";
saveNode.appendChild(document.createTextNode("Save"));
var cancelNode = document.createElement(buttonText);
cancelNode.setAttribute("class", "mondo_meta");
cancelNode.style.marginLeft = "220px";
cancelNode.appendChild(document.createTextNode("Cancel"));
mondo_meta_tag_control.appendChild(saveNode);
mondo_meta_tag_control.appendChild(cancelNode);
document.getElementsByTagName('body')[0].appendChild(mondo_meta_tag_control);
saveNode.addEventListener(clickText, saveTag, true);
cancelNode.addEventListener(clickText, cancelTag, true);
mondo_meta_style_control = document.createElement("td");
mondo_meta_style_control.className = "mondo_meta_basicstyle";
mondo_meta_style_control.style.lineHeight = "26px";
mondo_meta_style_control.style.color = darkBlueText;
mondo_meta_style_control.style.position = "fixed";
mondo_meta_style_control.style.bottom = "40px";
mondo_meta_style_control.style.left = "5px";
mondo_meta_style_control.style.backgroundColor = "#FFCFCF";
mondo_meta_style_control.style.borderColor = "black";
mondo_meta_style_control.style.borderWidth = "1px";
mondo_meta_style_control.style.borderStyle = "solid";
mondo_meta_style_control.style.opacity = ".94";
mondo_meta_style_control.style.display = noneText;
var styleHtml =
'<div class="mondo_meta_title">Mondo Meta Style</div>' +
'<div>' +
'<span class="mondo_meta_label">Style text: </span>' +
'<input id="mondo_meta_style_text" class="mondo_meta_userinput" type="text">' +
'<span class="mondo_meta_checks"><input id="mondo_meta_style_wholeword" type="checkbox">Whole word only</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Located in: </span>' +
'<span class="mondo_meta_userinput">' +
'<select id="mondo_meta_style_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
'</span>' +
'<span class="mondo_meta_checks"><input id="mondo_meta_style_matchcase" type="checkbox">Match case</span>' +
'</div><br><div>' +
'<span class="mondo_meta_label">Use Style: </span>' +
'<input id="mondo_meta_style_styles" class="mondo_meta_userinput" type="text">' +
'<span class="mondo_meta_checks"><input id="mondo_meta_style_regexp" type="checkbox">Regular expression</span>' +
'</div><br><br><br>';
mondo_meta_style_control.innerHTML = styleHtml;
var saveNode = document.createElement(buttonText);
saveNode.setAttribute("class", "mondo_meta");
saveNode.style.marginLeft = "140px";
saveNode.appendChild(document.createTextNode("Save"));
var cancelNode = document.createElement(buttonText);
cancelNode.setAttribute("class", "mondo_meta");
cancelNode.style.marginLeft = "220px";
cancelNode.appendChild(document.createTextNode("Cancel"));
mondo_meta_style_control.appendChild(saveNode);
mondo_meta_style_control.appendChild(cancelNode);
document.getElementsByTagName('body')[0].appendChild(mondo_meta_style_control);
saveNode.addEventListener(clickText, saveStyle, true);
cancelNode.addEventListener(clickText, cancelStyle, true);
mondo_meta_manage_control = document.createElement("td");
mondo_meta_manage_control.className = "mondo_meta_basicstyle";
mondo_meta_manage_control.style.lineHeight = "24px";
mondo_meta_manage_control.style.color = darkBlueText;
mondo_meta_manage_control.style.position = "fixed";
mondo_meta_manage_control.style.bottom = "40px";
mondo_meta_manage_control.style.left = "5px";
mondo_meta_manage_control.style.backgroundColor = "#FFCFCF";
mondo_meta_manage_control.style.borderColor = "black";
mondo_meta_manage_control.style.borderWidth = "1px";
mondo_meta_manage_control.style.borderStyle = "solid";
mondo_meta_manage_control.style.opacity = ".94";
mondo_meta_manage_control.style.display = noneText;
var manageHtml =
'<div class="mondo_meta_title">Manage Mondo Meta</div>' +
'<div id="mondo_meta_rulehead" class="mondo_meta_minititle">Saved Rule</div>' +
'<div><span class="mondo_meta_manage">' +
' </span>' +
'<input id="mondo_meta_manage_deactdel" type="checkbox">' +
'<span>Deactivate All Filters</span></div>' +
'<div><span class="mondo_meta_manage">' +
' </span>' +
'<input id="mondo_meta_manage_deacttag" type="checkbox">' +
'<span>Deactivate All Tags</span></div>' +
'<div><span class="mondo_meta_manage">' +
'<span id="mondo_meta_mantext" class="mondo_meta_mantext">Highlight Text:</span></span>' +
'<input id="mondo_meta_manage_deacthi" type="checkbox">' +
'<span>Deactivate All Highlights</span></div>' +
'<div><span class="mondo_meta_manage">' +
'<input id="mondo_meta_ruletext" class="mondo_meta_userinput mondo_meta_smallindent" type="text"></span>' +
'<input id="mondo_meta_manage_deactsty" type="checkbox">' +
'<span>Deactivate All Styles</span></div><br>' +
'<span class="mondo_meta_smallindent"><b>Web pages must be refreshed to show changes.</b></span><br><br><br>';
mondo_meta_manage_control.innerHTML = manageHtml;
var prevNode = document.createElement(buttonText);
prevNode.setAttribute("class", "mondo_meta2");
prevNode.style.marginLeft = "20px";
prevNode.appendChild(document.createTextNode("Previous"));
mondo_meta_manage_control.appendChild(prevNode);
var nextNode = document.createElement(buttonText);
nextNode.setAttribute("class", "mondo_meta2");
nextNode.style.marginLeft = "100px";
nextNode.appendChild(document.createTextNode("Next"));
mondo_meta_manage_control.appendChild(nextNode);
var deleteNode = document.createElement(buttonText);
deleteNode.setAttribute("class", "mondo_meta2");
deleteNode.style.marginLeft = "220px";
deleteNode.appendChild(document.createTextNode("Delete"));
mondo_meta_manage_control.appendChild(deleteNode);
var closeNode = document.createElement(buttonText);
closeNode.setAttribute("class", "mondo_meta2");
closeNode.style.marginLeft = "400px";
closeNode.appendChild(document.createTextNode("Close"));
mondo_meta_manage_control.appendChild(closeNode);
document.getElementsByTagName('body')[0].appendChild(mondo_meta_manage_control);
prevNode.addEventListener(clickText, prevManage, true);
nextNode.addEventListener(clickText, nextManage, true);
deleteNode.addEventListener(clickText, deleteManage, true);
closeNode.addEventListener(clickText, closeManage, true);
if (dropdownPeekABoo)
{
mondo_meta_control.style.display = noneText;
window.addEventListener("mousemove", handleMouseMove, true);
}
}
function handleMouseMove(event)
{
if (event.clientX > moveMouseAreaWidth && event.clientX < document.body.clientWidth - moveMouseAreaWidth)
{
return;
}
if (handleMouseMove.currentDirection == null)
{
if (event.clientX <= moveMouseAreaWidth)
{
handleMouseMove.currentDirection = 0;
}
else
{
handleMouseMove.currentDirection = 1;
}
return;
}
if (event.clientX <= moveMouseAreaWidth)
{
if (!handleMouseMove.currentDirection)
{
return;
}
else
{
handleMouseMove.currentDirection = 0;
}
}
if (event.clientX > document.body.clientWidth - moveMouseAreaWidth)
{
if (handleMouseMove.currentDirection)
{
return;
}
else
{
handleMouseMove.currentDirection = 1;
}
}
var rightNow = new Date();
var lastTime = rightNow.getTime();
if (handleMouseMove.timeStamp == null)
{
handleMouseMove.timeStamp = 0;
}
if (handleMouseMove.timeStamp == 0)
{
handleMouseMove.timeStamp = lastTime;
}
else if (handleMouseMove.timeStamp + moveMouseAreaSeconds * 1000 < lastTime)
{
handleMouseMove.timeStamp = lastTime;
handleMouseMove.moveCount = 0;
}
if (handleMouseMove.moveCount == null)
{
handleMouseMove.moveCount = 0;
}
handleMouseMove.moveCount++;
if (handleMouseMove.moveCount < 3)
{
return;
}
handleMouseMove.moveCount = 0;
handleMouseMove.timeStamp = 0;
handleMouseMove.currentDirection == null;
if (mondo_meta_control.style.display == noneText)
{
mondo_meta_control.style.display = "";
}
else
{
mondo_meta_control.style.display = noneText;
}
}
function main()
{
if (!GM_setValue)
{
return;
}
init();
}
//window.addEventListener( "load", main, false );
main();