diff options
author | lou <louiscuny@gmail.com> | 2013-04-19 15:14:46 +0200 |
---|---|---|
committer | lou <louiscuny@gmail.com> | 2013-04-19 15:14:46 +0200 |
commit | cae9c468f77870324b4b1f115226342e4ac5654c (patch) | |
tree | 6fd95aba6987cef6d5ec895e450843d77bff6069 /js/jquery-ujs.js | |
parent | cb71f543a2d1a75643943bc6c66101f837decce0 (diff) | |
download | multi-select-cae9c468f77870324b4b1f115226342e4ac5654c.zip multi-select-cae9c468f77870324b4b1f115226342e4ac5654c.tar.gz multi-select-cae9c468f77870324b4b1f115226342e4ac5654c.tar.bz2 |
Website handmade with HTML in order to be set up on github pages
Diffstat (limited to 'js/jquery-ujs.js')
-rw-r--r-- | js/jquery-ujs.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/js/jquery-ujs.js b/js/jquery-ujs.js new file mode 100644 index 0000000..8a64738 --- /dev/null +++ b/js/jquery-ujs.js @@ -0,0 +1,92 @@ +/* + * Padrino Javascript Jquery Adapter + * Created for use with Padrino Ruby Web Framework (http://www.padrinorb.com) +**/ + +/* Remote Form Support + * form_for @user, '/user', :remote => true +**/ + +$("form[data-remote=true]").live('submit', function(e) { + e.preventDefault(); e.stopped = true; + var element = $(this); + var message = element.data('confirm'); + if (message && !confirm(message)) { return false; } + JSAdapter.sendRequest(element, { + verb: element.data('method') || element.attr('method') || 'post', + url: element.attr('action'), + dataType: element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType) || 'script', + params: element.serializeArray() + }); +}); + +/* Confirmation Support + * link_to 'sign out', '/logout', :confirm => "Log out?" +**/ + +$("a[data-confirm]").live('click', function(e) { + var message = $(this).data('confirm'); + if (!confirm(message)) { e.preventDefault(); e.stopped = true; } +}); + +/* + * Link Remote Support + * link_to 'add item', '/create', :remote => true +**/ + +$("a[data-remote=true]").live('click', function(e) { + var element = $(this); + if (e.stopped) return; + e.preventDefault(); e.stopped = true; + JSAdapter.sendRequest(element, { + verb: element.data('method') || 'get', + url: element.attr('href') + }); +}); + +/* + * Link Method Support + * link_to 'delete item', '/destroy', :method => :delete +**/ + +$("a[data-method]:not([data-remote])").live('click', function(e) { + if (e.stopped) return; + JSAdapter.sendMethod($(e.target)); + e.preventDefault(); e.stopped = true; +}); + +/* JSAdapter */ +var JSAdapter = { + // Sends an xhr request to the specified url with given verb and params + // JSAdapter.sendRequest(element, { verb: 'put', url : '...', params: {} }); + sendRequest : function(element, options) { + var verb = options.verb, url = options.url, params = options.params, dataType = options.dataType; + var event = element.trigger("ajax:before"); + if (event.stopped) return false; + $.ajax({ + url: url, + type: verb.toUpperCase() || 'POST', + data: params || [], + dataType: dataType, + + beforeSend: function(request) { element.trigger("ajax:loading", [ request ]); }, + complete: function(request) { element.trigger("ajax:complete", [ request ]); }, + success: function(request) { element.trigger("ajax:success", [ request ]); }, + error: function(request) { element.trigger("ajax:failure", [ request ]); } + }); + element.trigger("ajax:after"); + }, + // Triggers a particular method verb to be triggered in a form posting to the url + // JSAdapter.sendMethod(element); + sendMethod : function(element) { + var verb = element.data('method'); + var url = element.attr('href'); + var form = $('<form method="post" action="'+url+'"></form>'); + form.hide().appendTo('body'); + if (verb !== 'post') { + var field = '<input type="hidden" name="_method" value="' + verb + '" />'; + form.append(field); + } + form.submit(); + } +};
\ No newline at end of file |