diff options
Diffstat (limited to 'js/options/user-js.js')
| -rw-r--r-- | js/options/user-js.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/js/options/user-js.js b/js/options/user-js.js new file mode 100644 index 00000000..240e7b95 --- /dev/null +++ b/js/options/user-js.js @@ -0,0 +1,80 @@ +/* + * options/user-js.js - allow user enter custom javascripts + * + * Copyright (c) 2014 Marcin Ćabanowski <marcin@6irc.net> + * + * Usage: + * $config['additional_javascript'][] = 'js/jquery.min.js'; + * $config['additional_javascript'][] = 'js/options.js'; + * $config['additional_javascript'][] = 'js/options/user-js.js'; + */ + ++function(){ + +var tab = Options.add_tab("user-js", "code", _("User JS")); + +var textarea = $("<textarea></textarea>").css({ + "font-size": 12, + position: "absolute", + top: 35, bottom: 35, + width: "calc(100% - 12px)", margin: 0, padding: 0, border: "1px solid black", + left: 5, right: 5 +}).appendTo(tab.content); +var submit = $("<input type='button' value='"+_("Update custom Javascript")+"'>").css({ + position: "absolute", + height: 25, bottom: 5, + width: "calc(100% - 10px)", + left: 5, right: 5 +}).click(function() { + localStorage.user_js = textarea.val(); + document.location.reload(); +}).appendTo(tab.content); + +var apply_js = function() { + var proc = function() { + $('.user-js').remove(); + $('script') + .last() + .after($("<script></script>") + .addClass("user-js") + .text(localStorage.user_js) + ); + } + + if (/immediate()/.test(localStorage.user_js)) { + proc(); // Apply the script immediately + } + else { + $(proc); // Apply the script when the page fully loads + } +}; + +var update_textarea = function() { + if (!localStorage.user_js) { + textarea.text("/* "+_("Enter here your own Javascript code...")+" */\n" + + "/* "+_("Have a backup of your storage somewhere, as messing here\n may render you this website unusable.")+" */\n" + + "/* "+_("You can include JS files from remote servers, for example:")+" */\n" + + 'load_js("http://example.com/script.js");'); + } + else { + textarea.text(localStorage.user_js); + apply_js(); + } +}; + +update_textarea(); + + +// User utility functions +window.load_js = function(url) { + $('script') + .last() + .after($("<script></script>") + .prop("type", "text/javascript") + .prop("src", url) + ); +}; +window.immediate = function() { // A dummy function. +} + +}(); |
