Skip to content
This repository has been archived by the owner on Sep 19, 2022. It is now read-only.

Commit

Permalink
padrino g component -s jquery
Browse files Browse the repository at this point in the history
  • Loading branch information
sue445 committed Jan 24, 2016
1 parent f2df7ea commit e1ae31a
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .components
Expand Up @@ -2,7 +2,7 @@
:orm: activerecord
:test: rspec
:mock: none
:script: none
:script: jquery
:renderer: slim
:stylesheet: sass
:namespace: CccPrivacyCrawler
Expand Down
1 change: 1 addition & 0 deletions public/javascripts/application.js
@@ -0,0 +1 @@
// Put your application scripts here
109 changes: 109 additions & 0 deletions public/javascripts/jquery-ujs.js
@@ -0,0 +1,109 @@
/*
* 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
**/

$(function(){
$('form').on('submit', function(e) {
var element = $(this), message = element.data('confirm');
if (message && !confirm(message)) { return false; }
if (element.data('remote') == true) {
e.preventDefault(); e.stopped = true;
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?'
**/

$(document).on('click', 'a[data-confirm]', 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
**/

$(document).on('click', 'a[data-remote=true]', 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
**/

$(document).on('click', 'a[data-method]:not([data-remote])', function(e) {
if (e.stopped) return;
JSAdapter.sendMethod($(this));
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>');
var csrf_token = $('meta[name=csrf-token]').attr('content');
var csrf_param = $('meta[name=csrf-param]').attr('content');
form.hide().appendTo('body');
if (verb !== 'post') {
var field = '<input type="hidden" name="_method" value="' + verb + '" />';
form.append(field);
}
if (csrf_param !== undefined && csrf_token !== undefined) {
var field = '<input type="hidden" name="' + csrf_param + '" value="' + csrf_token + '" />';
form.append(field);
}
form.submit();
}
};

// Every xhr request is sent along with the CSRF token.
$.ajaxPrefilter(function(options, originalOptions, xhr) {
if (options.verb !== 'GET') {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) xhr.setRequestHeader('X-CSRF-Token', token);
}
});
});
4 changes: 4 additions & 0 deletions public/javascripts/jquery.js

Large diffs are not rendered by default.

0 comments on commit e1ae31a

Please sign in to comment.