Skip to content

Instantly share code, notes, and snippets.

@eclectic-coding
Forked from jscher2000/showAsPrint.js
Created December 13, 2019 12:59
Show Gist options
  • Save eclectic-coding/ad508208d783b90546bf00cebf2cad79 to your computer and use it in GitHub Desktop.
Save eclectic-coding/ad508208d783b90546bf00cebf2cad79 to your computer and use it in GitHub Desktop.

Revisions

  1. @jscher2000 jscher2000 revised this gist Dec 12, 2018. 1 changed file with 53 additions and 30 deletions.
    83 changes: 53 additions & 30 deletions showAsPrint.js
    Original file line number Diff line number Diff line change
    @@ -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);
    }
    }
    }
  2. @jscher2000 jscher2000 revised this gist Sep 21, 2018. No changes.
  3. @jscher2000 jscher2000 created this gist Sep 21, 2018.
    71 changes: 71 additions & 0 deletions showAsPrint.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,71 @@
    // 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;
    for (var i=0; i<docSS.length; 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'){
    oldMedia = ss.ownerNode.getAttribute('media');
    newMedia = p2s(oldMedia);
    if (newMedia != oldMedia){
    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;
    newMedia = p2s(oldMedia);
    if (newMedia != oldMedia){
    console.log('Updating CSSMediaRule from ' + oldMedia + ' to ' + newMedia);
    ss.cssRules[j].conditionText = newMedia;
    }
    }
    }
    } else if (!ss.ownerNode){
    console.log('No .ownerNode on i=' + i + ' (' + ss.cssRules + ')');
    }
    }
    }
    }
    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;
    for (var i=0; i<docSS.length; i++) {
    var 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 + ')');
    } 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);
    }
    }
    }
    }
    }
    }
    }