128 lines
8.3 KiB
JavaScript
128 lines
8.3 KiB
JavaScript
(function($){$().ajaxSend(function(a,xhr,s){xhr.setRequestHeader("Accept","text/javascript, text/html, application/xml, text/xml, */*")})})(jQuery);(function($){$.fn.reset=function(){return this.each(function(){if(typeof this.reset=="function"||(typeof this.reset=="object"&&!this.reset.nodeType)){this.reset()}})};$.fn.enable=function(){return this.each(function(){this.disabled=false})};$.fn.disable=function(){return this.each(function(){this.disabled=true})}})(jQuery);(function($){$.extend({fieldEvent:function(el,obs){var field=el[0]||el,e="change";if(field.type=="radio"||field.type=="checkbox"){e="click"}else{if(obs&&field.type=="text"||field.type=="textarea"){e="keyup"}}return e}});$.fn.extend({delayedObserver:function(delay,callback){var el=$(this);if(typeof window.delayedObserverStack=="undefined"){window.delayedObserverStack=[]}if(typeof window.delayedObserverCallback=="undefined"){window.delayedObserverCallback=function(stackPos){observed=window.delayedObserverStack[stackPos];if(observed.timer){clearTimeout(observed.timer)}observed.timer=setTimeout(function(){observed.timer=null;observed.callback(observed.obj,observed.obj.formVal())},observed.delay*1000);observed.oldVal=observed.obj.formVal()}}window.delayedObserverStack.push({obj:el,timer:null,delay:delay,oldVal:el.formVal(),callback:callback});var stackPos=window.delayedObserverStack.length-1;if(el[0].tagName=="FORM"){$(":input",el).each(function(){var field=$(this);field.bind($.fieldEvent(field,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})})}else{el.bind($.fieldEvent(el,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})}},formVal:function(){var el=this[0];if(el.tagName=="FORM"){return this.serialize()}if(el.type=="checkbox"||self.type=="radio"){return this.filter("input:checked").val()||""}else{return this.val()}}})})(jQuery);(function($){$.fn.extend({visualEffect:function(o){e=o.replace(/\_(.)/g,function(m,l){return l.toUpperCase()});return eval("$(this)."+e+"()")},appear:function(speed,callback){return this.fadeIn(speed,callback)},blindDown:function(speed,callback){return this.show("blind",{direction:"vertical"},speed,callback)},blindUp:function(speed,callback){return this.hide("blind",{direction:"vertical"},speed,callback)},blindRight:function(speed,callback){return this.show("blind",{direction:"horizontal"},speed,callback)},blindLeft:function(speed,callback){this.hide("blind",{direction:"horizontal"},speed,callback);return this},dropOut:function(speed,callback){return this.hide("drop",{direction:"down"},speed,callback)},dropIn:function(speed,callback){return this.show("drop",{direction:"up"},speed,callback)},fade:function(speed,callback){return this.fadeOut(speed,callback)},fadeToggle:function(speed,callback){return this.animate({opacity:"toggle"},speed,callback)},fold:function(speed,callback){return this.hide("fold",{},speed,callback)},foldOut:function(speed,callback){return this.show("fold",{},speed,callback)},grow:function(speed,callback){return this.show("scale",{},speed,callback)},highlight:function(speed,callback){return this.show("highlight",{},speed,callback)},puff:function(speed,callback){return this.hide("puff",{},speed,callback)},pulsate:function(speed,callback){return this.show("pulsate",{},speed,callback)},shake:function(speed,callback){return this.show("shake",{},speed,callback)},shrink:function(speed,callback){return this.hide("scale",{},speed,callback)},squish:function(speed,callback){return this.hide("scale",{origin:["top","left"]},speed,callback)},slideUp:function(speed,callback){return this.hide("slide",{direction:"up"},speed,callback)},slideDown:function(speed,callback){return this.show("slide",{direction:"up"},speed,callback)},switchOff:function(speed,callback){return this.hide("clip",{},speed,callback)},switchOn:function(speed,callback){return this.show("clip",{},speed,callback)}})})(jQuery);
|
|
|
|
jQuery(function ($) {
|
|
var csrf_token = $('meta[name=csrf-token]').attr('content'),
|
|
csrf_param = $('meta[name=csrf-param]').attr('content');
|
|
|
|
$.fn.extend({
|
|
/**
|
|
* Triggers a custom event on an element and returns the event result
|
|
* this is used to get around not being able to ensure callbacks are placed
|
|
* at the end of the chain.
|
|
*
|
|
* TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our
|
|
* own events and placing ourselves at the end of the chain.
|
|
*/
|
|
triggerAndReturn: function (name, data) {
|
|
var event = new $.Event(name);
|
|
this.trigger(event, data);
|
|
|
|
return event.result !== false;
|
|
},
|
|
|
|
/**
|
|
* Handles execution of remote calls firing overridable events along the way
|
|
*/
|
|
callRemote: function () {
|
|
var el = this,
|
|
data = el.is('form') ? el.serializeArray() : [],
|
|
method = el.attr('method') || el.attr('data-method') || 'GET',
|
|
url = el.attr('action') || el.attr('href');
|
|
|
|
if (url === undefined) {
|
|
throw "No URL specified for remote call (action or href must be present).";
|
|
} else {
|
|
if (el.triggerAndReturn('ajax:before')) {
|
|
$.ajax({
|
|
url: url,
|
|
data: data,
|
|
dataType: 'script',
|
|
type: method.toUpperCase(),
|
|
beforeSend: function (xhr) {
|
|
el.trigger('ajax:loading', xhr);
|
|
},
|
|
success: function (data, status, xhr) {
|
|
el.trigger('ajax:success', [data, status, xhr]);
|
|
},
|
|
complete: function (xhr) {
|
|
el.trigger('ajax:complete', xhr);
|
|
},
|
|
error: function (xhr, status, error) {
|
|
el.trigger('ajax:failure', [xhr, status, error]);
|
|
}
|
|
});
|
|
}
|
|
|
|
el.trigger('ajax:after');
|
|
}
|
|
}
|
|
});
|
|
|
|
/**
|
|
* confirmation handler
|
|
*/
|
|
$('a[data-confirm],input[data-confirm]').live('click', function () {
|
|
var el = $(this);
|
|
if (el.triggerAndReturn('confirm')) {
|
|
if (!confirm(el.attr('data-confirm'))) {
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
/**
|
|
* remote handlers
|
|
*/
|
|
$('form[data-remote]').live('submit', function (e) {
|
|
$(this).callRemote();
|
|
e.preventDefault();
|
|
});
|
|
|
|
$('a[data-remote],input[data-remote]').live('click', function (e) {
|
|
$(this).callRemote();
|
|
e.preventDefault();
|
|
});
|
|
|
|
$('a[data-method]:not([data-remote])').live('click', function (e){
|
|
var link = $(this),
|
|
href = link.attr('href'),
|
|
method = link.attr('data-method'),
|
|
form = $('<form method="post" action="'+href+'">'),
|
|
metadata_input = '<input name="_method" value="'+method+'" type="hidden" />';
|
|
|
|
if (csrf_param != null && csrf_token != null) {
|
|
metadata_input += '<input name="'+csrf_param+'" value="'+csrf_token+'" type="hidden" />';
|
|
}
|
|
|
|
form.hide()
|
|
.append(metadata_input)
|
|
.appendTo('body');
|
|
|
|
e.preventDefault();
|
|
form.submit();
|
|
});
|
|
|
|
/**
|
|
* disable-with handlers
|
|
*/
|
|
var disable_with_input_selector = 'input[data-disable-with]';
|
|
var disable_with_form_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')';
|
|
|
|
$(disable_with_form_selector).live('ajax:before', function () {
|
|
$(this).find(disable_with_input_selector).each(function () {
|
|
var input = $(this);
|
|
input.data('enable-with', input.val())
|
|
.attr('value', input.attr('data-disable-with'))
|
|
.attr('disabled', 'disabled');
|
|
});
|
|
});
|
|
|
|
$(disable_with_form_selector).live('ajax:after', function () {
|
|
$(this).find(disable_with_input_selector).each(function () {
|
|
var input = $(this);
|
|
input.removeAttr('disabled')
|
|
.val(input.data('enable-with'));
|
|
});
|
|
});
|
|
}); |