|
|
@@ -1,15 +1,16 @@ |
|
|
// For Firefox's Web Console, creates the functions showAsPrint() and undoShowAsPrint() |
|
|
// to roughly emulate print media and revert |
|
|
function p2s(media){ |
|
|
if (media.indexOf('all') > -1) return media; //no need to change |
|
|
if (media == 'print') return 'all, wasprint'; //show on screen, too |
|
|
if (media.indexOf('print') > -1 && media.indexOf('screen') > -1) return media; //no need to change |
|
|
if (media == 'screen') return 'wasscreen'; //hide these rules |
|
|
if (media.indexOf('screen') > -1) return media.replace('screen', 'wasscreen'); //hide these rules |
|
|
return media + ', WTF'; //for debugging only |
|
|
} |
|
|
function showAsPrint(){ |
|
|
var docSS = document.styleSheets, ss, oldMedia, newMedia; |
|
|
var docSS = document.styleSheets, ss, oldMedia, newMedia, rules; |
|
|
var p2s = function(media){ |
|
|
if (media.indexOf('all') > -1) return media; //no need to change |
|
|
if (media == 'print') return 'all, wasprint'; //show on screen, too |
|
|
if (media.indexOf('print') > -1 && media.indexOf('screen') > -1) return media; //no need to change |
|
|
if (media == 'screen') return 'wasscreen'; //hide these rules |
|
|
if (media.indexOf('screen') > -1) return media.replace('screen', 'wasscreen'); //hide these rules |
|
|
if (media.trim().slice(0,1) == '(' && media.trim().slice(-1) == ')') return media; //too hard to parse |
|
|
return media + ', WTF'; //for debugging only |
|
|
} |
|
|
for (var i=0; i<docSS.length; i++) { |
|
|
ss = docSS[i]; |
|
|
if (!ss.disabled){ |
|
|
@@ -19,52 +20,74 @@ function showAsPrint(){ |
|
|
oldMedia = ss.ownerNode.getAttribute('media'); |
|
|
newMedia = p2s(oldMedia); |
|
|
if (newMedia != oldMedia){ |
|
|
console.log('Updating: ' + ss.ownerNode.outerHTML + ' to ' + newMedia); |
|
|
//console.log('Updating: ' + ss.ownerNode.outerHTML + ' to ' + newMedia); |
|
|
ss.ownerNode.setAttribute('media', newMedia); |
|
|
} |
|
|
} |
|
|
// check content of style sheet for media rules |
|
|
for (var j=0; j<ss.cssRules.length; j++){ |
|
|
if (ss.cssRules[j].type == 4){ |
|
|
oldMedia = ss.cssRules[j].conditionText; |
|
|
try { |
|
|
rules = ss.cssRules; |
|
|
} catch(err) { |
|
|
console.log('Can\'t access cssRules for ' + ss.href + ' due to: ' + err ); |
|
|
rules = []; |
|
|
} |
|
|
for (var j=0; j<rules.length; j++){ |
|
|
if (rules[j].type == 4){ |
|
|
oldMedia = rules[j].conditionText; |
|
|
newMedia = p2s(oldMedia); |
|
|
if (newMedia != oldMedia){ |
|
|
console.log('Updating CSSMediaRule from ' + oldMedia + ' to ' + newMedia); |
|
|
ss.cssRules[j].conditionText = newMedia; |
|
|
//console.log('Updating CSSMediaRule from ' + oldMedia + ' to ' + newMedia); |
|
|
rules[j].conditionText = newMedia; |
|
|
} |
|
|
} |
|
|
} |
|
|
} else if (!ss.ownerNode){ |
|
|
console.log('No .ownerNode on i=' + i + ' (' + ss.cssRules + ')'); |
|
|
console.log('No .ownerNode on i=' + i); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
function unp2s(media){ |
|
|
if (media == 'all, wasprint' || media == 'all,wasprint') return 'print'; //undo applying to screen |
|
|
if (media == 'wasscreen') return 'screen'; //undo hiding |
|
|
return media; // otherwise, we didn't mess with it |
|
|
} |
|
|
function undoShowAsPrint(){ |
|
|
var docSS = document.styleSheets; |
|
|
var docSS = document.styleSheets, ss, oldMedia, newMedia, rules; |
|
|
var unp2s = function(media){ |
|
|
if (media == 'all, wasprint' || media == 'all,wasprint') return 'print'; //undo applying to screen |
|
|
if (media == 'wasscreen') return 'screen'; //undo hiding |
|
|
if (media.indexOf('wasscreen') > -1) return media.replace('wasscreen', 'screen'); //undo hiding |
|
|
return media; // otherwise, we didn't mess with it |
|
|
} |
|
|
for (var i=0; i<docSS.length; i++) { |
|
|
var ss = docSS[i]; |
|
|
ss = docSS[i]; |
|
|
if (!ss.disabled){ |
|
|
if (ss.ownerNode && ss.ownerNode.id.indexOf('stylus-') == -1 && ss.ownerNode.id.indexOf('stylish-') == -1){ |
|
|
// check link or style tag for media attribute and edit as needed |
|
|
if (ss.ownerNode.hasAttribute('media') && ss.ownerNode.getAttribute('media') != 'all'){ |
|
|
ss.ownerNode.setAttribute('media', unp2s(ss.ownerNode.getAttribute('media'))); |
|
|
if (ss.ownerNode) console.log('Updated: ' + ss.ownerNode.outerHTML); |
|
|
else console.log('Updated media attribute but lost .ownerNode for i=' + i + ' (' + ss.cssRules + ')'); |
|
|
oldMedia = ss.ownerNode.getAttribute('media'); |
|
|
newMedia = unp2s(oldMedia); |
|
|
if (newMedia != oldMedia){ |
|
|
//console.log('Restoring: ' + ss.ownerNode.outerHTML + ' to ' + newMedia); |
|
|
ss.ownerNode.setAttribute('media', newMedia); |
|
|
} |
|
|
} else { |
|
|
// check content of style sheet for media rules |
|
|
for (var j=0; j<ss.cssRules.length; j++){ |
|
|
if (ss.cssRules[j].type == 4){ |
|
|
ss.cssRules[j].conditionText = unp2s(ss.cssRules[j].conditionText); |
|
|
console.log('CSSMediaRule updated to ' + ss.cssRules[j].conditionText); |
|
|
try { |
|
|
rules = ss.cssRules; |
|
|
} catch(err) { |
|
|
console.log('Can\'t access cssRules for ' + ss.href + ' due to: ' + err ); |
|
|
rules = []; |
|
|
} |
|
|
for (var j=0; j<rules.length; j++){ |
|
|
if (rules[j].type == 4){ |
|
|
oldMedia = rules[j].conditionText; |
|
|
newMedia = unp2s(oldMedia); |
|
|
if (newMedia != oldMedia){ |
|
|
//console.log('Restoring CSSMediaRule from ' + oldMedia + ' to ' + newMedia); |
|
|
rules[j].conditionText = newMedia; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} else if (!ss.ownerNode){ |
|
|
console.log('No .ownerNode on i=' + i); |
|
|
} |
|
|
} |
|
|
} |
|
|
|