diff --git a/editor/js-hotkeys/README.md b/editor/js-hotkeys/README.md new file mode 100644 index 00000000..4abcd7ab --- /dev/null +++ b/editor/js-hotkeys/README.md @@ -0,0 +1,93 @@ +#About +**jQuery.hotkeys** is a plug-in that lets you easily add and remove handlers for keyboard events anywhere in your code supporting almost any key combination. + +It is based on a library [Shortcut.js](http://www.openjs.com/scripts/events/keyboard_shortcuts/shortcut.js) written by [Binny V A](http://www.openjs.com/). + +The syntax is as follows: +
+$(expression).bind(,, );
+$(expression).unbind(,, );
+
+$(document).bind('keydown', 'Ctrl+a', fn);
+
+// e.g. replace '$' sign with 'EUR'
+$('input.foo').bind('keyup', '$', function(){
+    this.value = this.value.replace('$', 'EUR');
+});
+
+$('div.foo').unbind('keydown', 'Ctrl+a', fn);
+
+## [Live Demo](http://jshotkeys.googlepages.com/test-static-01.html) + +## Types +Supported types are `'keydown'`, `'keyup'` and `'keypress'` + +## Options +The options are `'combi'` i.e. the key combination, and `'disableInInput'` which allow your code not to be executed when the cursor is located inside an input ( `$(elem).is('input') || $(elem).is('textarea')` ). + +As you can see, the key combination can be passed as string or as an object. You may pass an object in case you wish to override the default option for `disableInInput` which is set to `false`: +
+$(document).bind('keydown', {combi:'a', disableinInput: true}, fn);
+
+I.e. when cursor is within an input field, `'a'` will be inserted into the input field without interfering. + +If you want to use more than one modifiers (e.g. alt+ctrl+z) you should define them by an alphabetical order e.g. alt+ctrl+shift + +Modifiers are case insensitive, i.e. 'Ctrl+a' 'ctrl+a'. + +## Handler +In previous versions there was an option propagate which is removed now and implemented at the user code level. + +When using jQuery, if an event handler returns false, jQuery will call `stopPropagation()` and `preventDefault()` + +## jQuery Compatibility +Tested with *jQuery 1.2.6* + +It known to be working with all the major browsers on all available platforms (Win/Mac/Linux) + + * IE 6/7/8 + * FF 1.5/2/3 + * Opera-9 + * Safari-3 + * Chrome-0.2 + +## Features added in this version (0.7.x) + * Implemented as $.fn - let you use `this`. + * jQuery selectors are supported. + * Extending `$.fn.bind` and `$.fn.unbind` so you get a single interface for binding events to handlers + +## Overriding jQuery +The plugin wraps the following jQuery methods: + * $.fn.bind + * $.fn.unbind + * $.find + +Even though the plugin overrides these methods, the original methods will *always* be called. + +The plugin will add functionality only for the `keydown`, `keyup` and `keypress` event types. Any other types are passed untouched to the original `'bind()'` and `'unbind()'` methods. + +Moreover, if you call `bind()` without passing the shortcut key combination e.g. `$(document).bind('keydown', fn)` only the original `'bind()'` method will be executed. + +I also modified the `$.fn.find` method by adding a single line at the top of the function body. here is the code: + +
+    jQuery.fn.find = function( selector ) {
+        // the line I added
+        this.query=selector;
+        // call jQuery original find
+        return jQuery.fn.__find__.apply(this, arguments);
+    };
+
+ +You can read about this at [jQuery's User Group](http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d) + +###Notes + +Firefox is the most liberal one in the manner of letting you capture all short-cuts even those that are built-in in the browser such as `Ctrl-t` for new tab, or `Ctrl-a` for selecting all text. You can always bubble them up to the browser by returning `true` in your handler. + +Others, (IE) either let you handle built-in short-cuts, but will add their functionality after your code has executed. Or (Opera/Safari) will *not* pass those events to the DOM at all. + +*So, if you bind `Ctrl-Q` or `Alt-F4` and your Safari/Opera window is closed don't be surprised.* + + +###Current Version is: beta 0.7 \ No newline at end of file diff --git a/editor/js-hotkeys/jquery.hotkeys.min.js b/editor/js-hotkeys/jquery.hotkeys.min.js new file mode 100644 index 00000000..53e37cc7 --- /dev/null +++ b/editor/js-hotkeys/jquery.hotkeys.min.js @@ -0,0 +1,19 @@ +(function(jQuery){jQuery.fn.__bind__=jQuery.fn.bind;jQuery.fn.__unbind__=jQuery.fn.unbind;jQuery.fn.__find__=jQuery.fn.find;var hotkeys={version:'0.7.9',override:/keypress|keydown|keyup/g,triggersMap:{},specialKeys:{27:'esc',9:'tab',32:'space',13:'return',8:'backspace',145:'scroll',20:'capslock',144:'numlock',19:'pause',45:'insert',36:'home',46:'del',35:'end',33:'pageup',34:'pagedown',37:'left',38:'up',39:'right',40:'down',109:'-',112:'f1',113:'f2',114:'f3',115:'f4',116:'f5',117:'f6',118:'f7',119:'f8',120:'f9',121:'f10',122:'f11',123:'f12',191:'/'},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":"\"",",":"<",".":">","/":"?","\\":"|"},newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:false};return result;}};hotkeys.specialKeys=jQuery.extend(hotkeys.specialKeys,{96:'0',97:'1',98:'2',99:'3',100:'4',101:'5',102:'6',103:'7',104:'8',105:'9',106:'*',107:'+',109:'-',110:'.',111:'/'});jQuery.fn.find=function(selector){this.query=selector;return jQuery.fn.__find__.apply(this,arguments);};jQuery.fn.unbind=function(type,combi,fn){if(jQuery.isFunction(combi)){fn=combi;combi=null;} +if(combi&&typeof combi==='string'){var selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();var hkTypes=type.split(' ');for(var x=0;x + @@ -93,8 +94,8 @@ Select
Pencil
Line
-Square
-Circle
+Square
+Circle
Text
diff --git a/editor/svg-editor.js b/editor/svg-editor.js index 44b85d78..63baddaa 100644 --- a/editor/svg-editor.js +++ b/editor/svg-editor.js @@ -285,53 +285,19 @@ function svg_edit_setup() { $('#tool_delete').mouseup(function(){$('#tool_delete').removeClass('tool_button_current');}); $('#tool_delete').mouseout(function(){$('#tool_delete').removeClass('tool_button_current');}); - $('#workarea').keyup(function(event){ - if( textBeingEntered ) { return; } - switch (event.keyCode) { - case 37: // left-arrow - break; - case 38: // up-arrow - break; - case 39: // right-arrow - break; - case 40: // down-arrow - break; - case 49: // 1 - clickSelect(); - break; - case 50: // 2 - clickPath(); - break; - case 51: // 3 - clickLine(); - break; - case 52: // 4 - if (event.shiftKey) - clickSquare(); - else - clickRect(); - break; - case 53: // 5 - if (event.shiftKey) - clickCircle(); - else - clickEllipse(); - break; - case 54: // 6 - clickText(); - break; - case 78: // N - clickClear(); - break; - case 83: // S - clickSave(); - break; - case 88: // X - clickDelete(); - break; - } - }); - + // do keybindings using jquery-hotkeys plugin + $(document).bind('keydown', {combi:'1', disableInInput: true}, clickSelect); + $(document).bind('keydown', {combi:'2', disableInInput: true}, clickPath); + $(document).bind('keydown', {combi:'3', disableInInput: true}, clickLine); + $(document).bind('keydown', {combi:'Shift+4', disableInInput: true}, clickSquare); + $(document).bind('keydown', {combi:'4', disableInInput: true}, clickRect); + $(document).bind('keydown', {combi:'Shift+5', disableInInput: true}, clickCircle); + $(document).bind('keydown', {combi:'5', disableInInput: true}, clickEllipse); + $(document).bind('keydown', {combi:'6', disableInInput: true}, clickText); + $(document).bind('keydown', {combi:'N', disableInInput: true}, clickClear); + $(document).bind('keydown', {combi:'S', disableInInput: true}, clickSave); + $(document).bind('keydown', {combi:'X', disableInInput: true}, deleteSelected); + var colorPicker = function(elem) { $('.tools_flyout').hide(); var oldbg = elem.css('background');