// Ctrl+Enter Submits // version 0.7 // 2008-09-13 // home: http://clear.com.ua/projects/firefox/ctrl_enter // Copyright (c) 2005, Tim Babych // Released under the GPL license // http://www.gnu.org/copyleft/gpl.html // // -------------------------------------------------------------------- // // This is a Greasemonkey user script. // // To install, you need Greasemonkey: http://greasemonkey.mozdev.org/ // Then restart Firefox and revisit this script. // Under Tools, there will be a new menu item to "Install User Script". // Accept the default configuration and install. // // To uninstall, go to Tools/Manage User Scripts, // select "Ctrl+Enter Submits", and click Uninstall. // // -------------------------------------------------------------------- // // Opera 8 compartible. // // To install, download it to some folder and chose this folder in // Tools > Preferences > Advanced > Content > Javascript Options // "My Javascript files" // Restart Opera // // To uninstall, remove the file from that folder. // // --------------------------------------------------------------------- // // ==UserScript== // @name Ctrl+Enter Submits // @description Allows submitting on Ctrl+Enter in any input and textarea // @include * // ==/UserScript== function zakavych(text) { // cyrillic quotes // quote_replacers = '$1\u00ab$2\u00bb$3' //latin quotee quote_replacers = '$1\u201c$2\u201d$3' replacements = [ // smart quotes [/(\s+|^)"([^\"]+?)"(\s+|$|\.|\,|\!|\?)/g, quote_replacers], [/\({2}([\S\s]+?)\){2}\n?/g, '
  $1
'], // ukrainian apostrophe [/([\u0406-\u0491])[\*'`]([\u0406-\u0491])/g, '$1\u2019$2'], // trademark (TM) and such [/\((tm|TM|\u0422\u041C|\u0442\u043C)\)/g, '\u2122'], // copyright (C) and such [/\([cC\u0421\u0441]\)/g, '\u00a9'], // registered (R) and such [/\([rR\u0420\u0440]\)/g, '\u00ae'], // mdash -- one or two minuses surrounded by spaces [/(\s+|^)--?(\s+)/g, '$1\u2014$2'], // **bold** [/\*{2}([^\*]+?)\*{2}/g, '$1'], // //italic// [/([^\:]|^)\/{2}(.+?[^:])\/{2}/g, '$1$2'], // --strikeout-- [/([^\!]|^)-{2}([^-]+?)-{2}/g, '$1$2'], // __underlined__ [/_{2}([^_]+?)_{2}/g, '$1'], // ndash for number ranges: 1995-2005 [/(\s)(\d+)-(\d+)(\s)/g, '$1$2\u2013$3$4'], // ellipsis [/\.\.\./g, '\u2026'], // extra LFs at the end [/\n*$/, ''] ]; s = text for( i=0; i < replacements.length; i++) { s = s.replace(replacements[i][0], replacements[i][1]) } return s } function trigger_submit_on_ctrl_enter(e) { if ((e.keyCode==13) && (e.ctrlKey || e.shiftKey)) { p = this.parentNode i = 0 if (this.nodeName == 'TEXTAREA') this.value = zakavych(this.value) while (p.nodeName != 'FORM' && i++ < 100) p = p.parentNode if (p.nodeName == 'FORM' && e.ctrlKey) p.submit() } } if (document.evaluate) { http:// Firefox allInps = document.evaluate("http://textarea[not(@id='instant_comment_textarea')] | http://select | http://input", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < allInps.snapshotLength; i++) { t = allInps.snapshotItem(i); t.addEventListener("keydown", trigger_submit_on_ctrl_enter, 0); } } else { // Opera 8 does not support XPath elemTags = ['textarea', 'select', 'input'] for(j = 0; j< elemTags.length; j++) { inps = document.getElementsByTagName(elemTags[j]) for (var i = 0; i < inps.length; i++) inps[i].addEventListener("keydown", trigger_submit_on_ctrl_enter, 0); } }