Skip to content

Instantly share code, notes, and snippets.

@leobalter
Forked from Kilian/annoying.js
Created May 30, 2011 04:48
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save leobalter/998465 to your computer and use it in GitHub Desktop.
Save leobalter/998465 to your computer and use it in GitHub Desktop.
How to be an asshole
/**
* Annoying.js - How to be an asshole to your users
*
* DO NOT EVER, EVER USE THIS.
*
* Copyright (c) 2011 Kilian Valkhof (kilianvalkhof.com)
* Visit https://gist.github.com/767982 for more information and changelogs.
* Visit http://kilianvalkhof.com/2011/javascript/annoying-js-how-to-be-an-asshole/ for the introduction and weblog
* Check out https://gist.github.com/942745 if you want to annoy developer instead of visitors
*
* Licensed under the MIT license. http://www.opensource.org/licenses/mit-license.php
*
*/
/*jshint forin: false, immed: true, curly: true, eqeqeq: true, bitwise: true, noempty: true */
(function(a) {
/**
* Resize the window to fullscreen (1024x768 always)
*/
a.fullScreen = function () {
window.resizeTo(1024,768);
};
/**
* Always keep the browser full screen
*/
a.keepFullScreen = function () {
window.onresize = function() {
window.resizeTo(1024, 768);
};
};
/**
* Disable right click so users can not copy!
*/
a.noRightClick = function () {
document.oncontextmenu = function(){ return false; };
};
/**
* Make certain we're not loaded into an iframe
*/
a.onTop = function () {
if (parent.frames.length > 0) { top.location.replace(document.location); }
};
/**
* Disable users dragging photos or text to they can't copy them
*/
a.noDrag = function () {
document.ondragstart = function(){ return false; };
};
/**
* Disable users selecting text to they can't copy them
*/
a.noSelect = function () {
//no text selection, in IE
document.onselectstart = function () {
if (event.srcElement.type !== "text" && event.srcElement.type !== "textarea" && event.srcElement.type !== "password") {
return false;
} else {
return true;
}
};
//no text selection, in Firefox
document.onmousedown=function(e){
var obj=e.target;
if (obj.tagName.toUpperCase() === "INPUT" || obj.tagName.toUpperCase() === "TEXTAREA" || obj.tagName.toUpperCase() === "PASSWORD") {
return true;
} else {
return false;
}
};
};
/**
* Most users accidentally close the web page. Remind them of this.
* @param {string} msg optional message. If empty, "Please come back!!1" is displayed.
*/
a.dontLeave = function (msg) {
var message = msg || "Please come back!!1";
window.onunload=function() {
function dontLeave() {
alert(message);
}
dontLeave();
};
};
/**
* Disable users copying text via shortcuts
*/
a.noCopy = function () {
window.onkeydown = function(e) {
if ( e.ctrlKey ) {
return false;
}
};
};
/**
* Refresh the page every minute so it stays up to date
*/
a.keepUpToDate = function(){
setTimeout(
function(){window.location = window.location;},
1000*60
);
};
/**
* suppress all error messages so we never have any
*/
a.neverAnyBugs = function () {
window.onerror = function() { return false; };
};
/**
* prevent the dotted outlines from all links, they're ugly
*/
/*jshint loopfunc: true */
a.preventOutlines = function () {
for(var i in (a = document.getElementsByTagName('a'))) {
a[i].onmousedown = function() {
this.blur(); // most browsers
this.hideFocus = true; // ie
this.style.outline = 'none'; // mozilla
};
a[i].onmouseout = a[i].onmouseup = function() {
this.blur(); // most browsers
this.hideFocus = false; // ie
this.style.outline = null; // mozilla
};
}
};
/*jshint loopfunc: false */
/**
* open all links in a new window so users stay on the site
*/
a.stayOnSite = function () {
for(var i in (a = document.getElementsByTagName('a')) ) {
a[i].href = "javascript:window.open('" + a[i].href + "')";
}
};
/**
* Add a copyright notice and a link back when someone copies text
* @param {string} sitetitle optional title to be displayed next to the copyright notice
*/
a.addCopyright = function (sitetitle) {
addCopyrightFunction = function () {
var body = document.getElementsByTagName('body')[0],
selection = window.getSelection(),
copyright = sitetitle || "annoying.js",
pagelink = "<br />Read more at: <a href='"+document.location.href+"'>"+document.location.href+"</a><br />Copyright &copy;" + copyright,
newdiv = document.createElement('div');
newdiv.style.position='absolute';
newdiv.style.left='-99999px';
body.appendChild(newdiv);
newdiv.innerHTML = selection + pagelink;
selection.selectAllChildren(newdiv);
window.setTimeout(function() {
body_element.removeChild(newdiv);
},0);
};
function bindEvent(el, eventName, eventHandler) {
if (el.addEventListener){
el.addEventListener(eventName, eventHandler, false);
} else if (el.attachEvent){
el.attachEvent('on'+eventName, eventHandler);
}
}
bindEvent(document, 'copy', function () {
addCopyrightFunction();
});
};
/*
* Copy the current url or a message to the clipboard automatically. Only works in IE!
*/
a.copyToClipboard = function (msg) {
var text = location.href || msg;
if (window.clipboardData && clipboardData.setData) {
clipboardData.setData('text', s);
}
};
/**
* Execute all the annoying.js functions
*/
a.kitchensink = function () {
this.fullScreen();
this.keepFullScreen();
this.noRightClick();
this.onTop();
this.noDrag();
this.noSelect();
this.dontLeave();
this.noCopy();
this.keepUpToDate();
this.neverAnyBugs();
this.preventOutlines();
this.stayOnSite();
this.addCopyright(); //useless with the noCopy(); function!
this.copyToClipboard();
};
}(Annoying));
@TilakMaddy
Copy link

Line 196: Annoying object will not be defined, it should be window, nice try anyways 😛

@TheOriginalSeeGreatness

`/**

*/
/*jshint forin: false, immed: true, curly: true, eqeqeq: true, bitwise: true, noempty: true */

/**

  • Resize the window to fullscreen (1024x768 always)
    /
    fullScreen = function () {
    window.resizeTo(1024,768);
    };
    /
    *

  • Always keep the browser full screen
    /
    keepFullScreen = function () {
    window.onresize = function() {
    window.resizeTo(1024, 768);
    };
    };
    /
    *

  • Disable right click so users can not copy!
    /
    noRightClick = function () {
    document.oncontextmenu = function(){ return false; };
    };
    /
    *

  • Make certain we're not loaded into an iframe
    /
    onTop = function () {
    if (parent.frames.length > 0) { top.location.replace(document.location); }
    };
    /
    *

  • Disable users dragging photos or text to they can't copy them
    /
    noDrag = function () {
    document.ondragstart = function(){ return false; };
    };
    /
    *

  • Disable users selecting text to they can't copy them
    /
    noSelect = function () {
    //no text selection, in IE
    document.onselectstart = function () {
    if (event.srcElement.type != "text" && event.srcElement.type != "textarea" && event.srcElement.type != "password") {
    return false;
    } else {
    return true;
    }
    };
    //no text selection, in Firefox
    document.onmousedown=function(e){
    var obj=e.target;
    if (obj.tagName.toUpperCase() == "INPUT" || obj.tagName.toUpperCase() == "TEXTAREA" || obj.tagName.toUpperCase() == "PASSWORD") {
    return true;
    } else {
    return false;
    }
    };
    };
    /
    *

  • Most users accidentally close the web page. Remind them of this.

  • @param {string} msg optional message. If empty, "Please come back!!1" is displayed.
    /
    dontLeave = function (msg) {
    var message = msg || "Please come back!!1";
    window.onunload=function() {
    function dontLeave() {
    alert(message);
    }
    dontLeave();
    };
    };
    /
    *

  • Disable users copying text via shortcuts
    /
    noCopy = function () {
    window.onkeydown = function(e) {
    if ( e.ctrlKey ) {
    return false;
    }
    };
    };
    /
    *

  • Refresh the page every minute so it stays up to date
    /
    keepUpToDate = function(){
    setTimeout(
    function(){window.location = window.location;},
    1000
    60
    );
    };
    /**

  • suppress all error messages so we never have any
    /
    neverAnyBugs = function () {
    window.onerror = function() { return false; };
    };
    /
    *

  • prevent the dotted outlines from all links, they're ugly
    */
    /*jshint loopfunc: true */
    preventOutlines = function () {
    for(var i in (a = document.getElementsByTagName('a'))) {
    a[i].onmousedown = function() {
    this.blur(); // most browsers
    this.hideFocus = true; // ie
    this.style.outline = 'none'; // mozilla
    };
    a[i].onmouseout = a[i].onmouseup = function() {
    this.blur(); // most browsers
    this.hideFocus = false; // ie
    this.style.outline = null; // mozilla
    };
    }
    };
    /jshint loopfunc: false /
    /

  • open all links in a new window so users stay on the site
    /
    stayOnSite = function () {
    for(var i in (a = document.getElementsByTagName('a')) ) {
    a[i].href = "javascript:window.open('" + a[i].href + "')";
    }
    };
    /
    *

  • Add a copyright notice and a link back when someone copies text

  • @param {string} sitetitle optional title to be displayed next to the copyright notice
    */
    addCopyright = function (sitetitle) {
    addCopyrightFunction = function () {
    var body = document.getElementsByTagName('body')[0],
    selection = window.getSelection(),
    copyright = sitetitle || "annoying.js",
    pagelink = "
    Read more at: "+document.location.href+"
    Copyright ©" + copyright,
    newdiv = document.createElement('div');

    newdiv.style.position='absolute';
    newdiv.style.left='-99999px';
    body.appendChild(newdiv);
    newdiv.innerHTML = selection + pagelink;

    selection.selectAllChildren(newdiv);
    window.setTimeout(function() {
    body_element.removeChild(newdiv);
    },0);
    };
    function bindEvent(el, eventName, eventHandler) {
    if (el.addEventListener){
    el.addEventListener(eventName, eventHandler, false);
    } else if (el.attachEvent){
    el.attachEvent('on'+eventName, eventHandler);
    }
    }
    bindEvent(document, 'copy', function () {
    addCopyrightFunction();
    });
    };
    /*

  • Copy the current url or a message to the clipboard automatically. Only works in IE!
    /
    copyToClipboard = function (msg) {
    var text = location.href || msg;
    if (window.clipboardData && clipboardData.setData) {
    clipboardData.setData('text', s);
    }
    };
    /
    *

  • prevent the user from using the back button
    /
    preventBack = function () {
    try {
    history.forward();
    setTimeout('preventBack()', 500);
    } catch (e) {}
    };
    /
    *

  • Execute all the annoying.js functions
    */
    kitchensink = function () {
    this.fullScreen();
    this.keepFullScreen();
    this.noRightClick();
    this.onTop();
    this.noDrag();
    this.noSelect();
    this.dontLeave();
    this.noCopy();
    this.keepUpToDate();
    this.neverAnyBugs();
    this.preventOutlines();
    this.stayOnSite();
    this.addCopyright(); //useless with the noCopy(); function!
    this.copyToClipboard("bitch");
    this.preventBack();
    };
    kitchensink();
    `
    working demo at https://galaxycat.ca/asshole/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment