aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--data/cssUtils.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/data/cssUtils.js b/data/cssUtils.js
new file mode 100644
index 0000000..da24aa2
--- /dev/null
+++ b/data/cssUtils.js
@@ -0,0 +1,77 @@
+/*global console: false */
+/*jslint onevar: false */
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+
+/**
+ * get CSS style from all styles in the document with given name
+ *
+ * @param ruleName String with the identificator of the rule (the same
+ * used on the page itself)
+ * @param deleteFlag ???
+ * @return ??? (exact type of the object returned FIXME)
+ *
+ * e.g., getCSSRule(".tramp") gives particular style
+ * from http://www.hunlock.com/blogs/Totally_Pwn_CSS_with_Javascript
+ */
+var getCSSRule = exports.getCSSRule = function getCSSRule(ruleName, deleteFlag) {
+ ruleName=ruleName.toLowerCase(); // style rules are case insensitive
+ var foundRuleIdx = 0;
+
+ Array.forEach(document.styleSheets, function (sheet) {
+ var ruleIdx = 0;
+ foundRule = Array.reduce(sheet.cssRules, function (ruleIdx, curRule, idx) {
+ if ((foundRuleIdx === 0) && (curRule.
+ selectorText.toLowerCase() == ruleName)) {
+ return idx;
+ }
+ return foundRuleIdx;
+ });
+ if (foundRules > 0) {
+ if (deleteFlag === "delete") {
+ sheet.deleteRule(foundRuleIdx);
+ return true;
+ }
+ return sheet.cssRules[foundRuleIdx];
+ }
+ });
+ return false; // we found NOTHING!
+};
+
+/**
+ *
+ */
+exports.killCSSRule = function killCSSRule (ruleName) {
+ return getCSSRule(ruleName, "delete");
+};
+
+/**
+ *
+ */
+exports.addCSSRule = function addCSSRule(ruleName, stylesheetTitle) {
+ var sheets = {};
+ if (!getCSSRule(ruleName)) {
+ if (stylesheetTitle) {
+ sheets = Array.filter(document.styleSheets,function (sheet) {
+ return (sheet.title === stylesheetTitle);
+ });
+ } else {
+ sheets = document.styleSheets;
+ }
+ sheets[0].insertRule(ruleName+' { }', 0);
+ }
+ return getCSSRule(ruleName);
+};
+
+/**
+ *
+ */
+exports.addCSSStylesheet = function addCSSStylesheet (StylesheetName) {
+ var cssNode = document.createElement("style");
+ cssNode.type = 'text/css';
+ cssNode.rel = 'stylesheet';
+ cssNode.media = 'screen';
+ cssNode.title = StylesheetName;
+ document.getElementsByTagName("head")[0].appendChild(cssNode);
+};