diff --git a/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee b/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee index b9a7233b..a7ca7414 100644 --- a/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee +++ b/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee @@ -48,6 +48,11 @@ class Locomotive.Views.ContentEntries.FormView extends Locomotive.Views.Shared.F enable_richtexteditor: -> _.each @$('li.input.rte textarea.html'), (textarea) => settings = _.extend {}, @tinyMCE_settings(), + oninit: ((editor) => + $.cmd 'S', (() => + $(textarea).val(editor.getBody().innerHTML).trigger('change') + @$('form').trigger('submit') + ), [], ignoreCase: true, document: editor.dom.doc), onchange_callback: (editor) => $(textarea).val(editor.getBody().innerHTML).trigger('change') diff --git a/app/assets/javascripts/locomotive/views/editable_elements/short_text_view.js.coffee b/app/assets/javascripts/locomotive/views/editable_elements/short_text_view.js.coffee index f5e3b75b..4c5a5eed 100644 --- a/app/assets/javascripts/locomotive/views/editable_elements/short_text_view.js.coffee +++ b/app/assets/javascripts/locomotive/views/editable_elements/short_text_view.js.coffee @@ -13,6 +13,11 @@ class Locomotive.Views.EditableElements.ShortTextView extends Backbone.View after_render: -> settings = _.extend {}, @tinymce_settings(), + oninit: ((editor) => + $.cmd 'S', (() => + @model.set(content: editor.getBody().innerHTML) + $(@el).parents('form').trigger('submit') + ), [], ignoreCase: true, document: editor.dom.doc), onchange_callback: (editor) => @model.set(content: editor.getBody().innerHTML) diff --git a/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee b/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee index 48bcd499..aa4e0017 100644 --- a/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee +++ b/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee @@ -13,6 +13,9 @@ class Locomotive.Views.Shared.FormView extends Backbone.View # make inputs foldable (if specified) @make_inputs_foldable() + # allow users to save with CTRL+S or CMD+s + @enable_save_with_keys_combination() + return @ save: (event) -> @@ -68,6 +71,9 @@ class Locomotive.Views.Shared.FormView extends Backbone.View else content.slideUp 100, -> parent.addClass('folded') + enable_save_with_keys_combination: -> + $.cmd 'S', (() => @$('form').trigger('submit')), [], ignoreCase: true + after_inputs_fold: -> # overide this method if necessary diff --git a/vendor/assets/javascripts/locomotive/cmd.js b/vendor/assets/javascripts/locomotive/cmd.js new file mode 100644 index 00000000..0a3999bb --- /dev/null +++ b/vendor/assets/javascripts/locomotive/cmd.js @@ -0,0 +1,31 @@ +/** + * Version 0.0.1 + * Catch the CTRL+S keys combination and trigger a callback + * Didier Lafforgue + */ + +$.cmd = function(key, callback, args, options) { + var keyCode = key.charCodeAt(0); + var altKeyCode = keyCode + (32 * (keyCode < 97 ? 1 : -1)); + + options = (options || { ignoreCase: false }); + + if (!options.ignoreCase) altKeyCode = null; + + doc = options.document || window.document; + + $(doc).keydown(function(e) { + var isCtrl = false; + + if (!args) args = []; // IE barks when args is null + + if (e.ctrlKey || e.metaKey) isCtrl = true; + + if ((keyCode == e.which || altKeyCode == e.which) && isCtrl) { + e.preventDefault(); + callback.apply(this, args); + return false; + } + }); + +}; \ No newline at end of file diff --git a/vendor/assets/javascripts/locomotive/menu_toggler.js b/vendor/assets/javascripts/locomotive/menu_toggler.js index 05cdb82f..bf81f9b5 100644 --- a/vendor/assets/javascripts/locomotive/menu_toggler.js +++ b/vendor/assets/javascripts/locomotive/menu_toggler.js @@ -28,6 +28,6 @@ $.fn.toggleMe = function(settings) { }); }; - return $(this).bind("click", toggle); + return $(this).bind('click', toggle); }; \ No newline at end of file