diff --git a/src/jquery.jeditable.ajaxupload.js b/src/jquery.jeditable.ajaxupload.js new file mode 100644 index 0000000..ff502d2 --- /dev/null +++ b/src/jquery.jeditable.ajaxupload.js @@ -0,0 +1,27 @@ +/* + * Ajaxupload for Jeditable + * + * Copyright (c) 2008-2009 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Depends on Ajax fileupload jQuery plugin by PHPLetter guys: + * http://www.phpletter.com/Our-Projects/AjaxFileUpload/ + * + * Project home: + * http://www.appelsiini.net/projects/jeditable + * + * Revision: $Id$ + * + */ + +$.editable.addInputType('file', { + /* create input element */ + element : function(settings) { + settings.onblur = 'ignore'; + var input = $(''); + $(this).append(input); + return(input); + } +}); diff --git a/src/jquery.jeditable.js b/src/jquery.jeditable.js index f5e157c..ce14076 100644 --- a/src/jquery.jeditable.js +++ b/src/jquery.jeditable.js @@ -1,3 +1,8 @@ +/** + * @author Adam Świątkowski + * @name Customization for Laravel. DO NOT COPY! + +*/ /** * @file Jeditable - jQuery in place edit plugin * @home https://github.com/NicolasCARPi/jquery_jeditable @@ -155,7 +160,7 @@ /* Abort if onedit hook returns false. */ if (false === onedit.apply(this, [settings, self, e])) { - return; + return; } /* execute the before function if any was specified */ @@ -177,7 +182,7 @@ /* Remove placeholder text, replace is here because of IE. */ if ($(this).html().toLowerCase().replace(/(;|"|\/)/g, '') === settings.placeholder.toLowerCase().replace(/(;|"|\/)/g, '')) { - $(this).html(''); + $(this).html(''); } self.editing = true; @@ -248,16 +253,16 @@ $.extend(loaddata, settings.loaddata); } $.ajax({ - type : settings.loadtype, - url : settings.loadurl, - data : loaddata, - async: false, - cache : false, - success: function(result) { - self.clearTimeout(t); - input_content = result; - input.disabled = false; - } + type : settings.loadtype, + url : settings.loadurl, + data : loaddata, + async: false, + cache : false, + success: function(result) { + self.clearTimeout(t); + input_content = result; + input.disabled = false; + } }); } else if (settings.data) { input_content = settings.data; @@ -365,78 +370,78 @@ isSubmitting = false !== submit.apply(form, [settings, self]); if (isSubmitting) { - /* Check if given target is function */ - if ($.isFunction(settings.target)) { - /* Callback function to handle the target reponse */ - var responseHandler = function(value, complete) { - isSubmitting = false; - if (false !== complete) { - $(self).html(value); - self.editing = false; - callback.apply(self, [self.innerHTML, settings]); - if (!$.trim($(self).html())) { - $(self).html(settings.placeholder); - } - } - }; - /* Call the user target function */ - var userTarget = settings.target.apply(self, [input.val(), settings, responseHandler]); - /* Handle the target function return for compatibility */ - if (false !== userTarget && undefined !== userTarget) { - responseHandler(userTarget, userTarget); - } - - } else { - /* Add edited content and id of edited element to POST. */ - var submitdata = {}; - submitdata[settings.name] = input.val(); - submitdata[settings.id] = self.id; - /* Add extra data to be POST:ed. */ - if ($.isFunction(settings.submitdata)) { - $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings, submitdata])); - } else { - $.extend(submitdata, settings.submitdata); - } - - /* Quick and dirty PUT support. */ - if ('PUT' === settings.method) { - submitdata._method = 'put'; - } - - // SHOW INDICATOR - $(self).html(settings.indicator); - - /* Defaults for ajaxoptions. */ - var ajaxoptions = { - type : 'POST', - complete: function (xhr, status) { - isSubmitting = false; - }, - data : submitdata, - dataType: 'html', - url : settings.target, - success : function(result, status) { - - // INTERCEPT - result = intercept.apply(self, [result, status]); - - if (ajaxoptions.dataType === 'html') { - $(self).html(result); - } - self.editing = false; - callback.apply(self, [result, settings, submitdata]); - if (!$.trim($(self).html())) { - $(self).html(settings.placeholder); - } - }, - error : function(xhr, status, error) { - onerror.apply(form, [settings, self, xhr]); - } - }; - - /* Override with what is given in settings.ajaxoptions. */ - $.extend(ajaxoptions, settings.ajaxoptions); - $.ajax(ajaxoptions); + /* Check if given target is function */ + if ($.isFunction(settings.target)) { + /* Callback function to handle the target reponse */ + var responseHandler = function(value, complete) { + isSubmitting = false; + if (false !== complete) { + $(self).html(value); + self.editing = false; + callback.apply(self, [self.innerHTML, settings]); + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + } + }; + /* Call the user target function */ + var userTarget = settings.target.apply(self, [input.val(), settings, responseHandler]); + /* Handle the target function return for compatibility */ + if (false !== userTarget && undefined !== userTarget) { + responseHandler(userTarget, userTarget); + } + + } else { + let formData = new FormData(); + formData.append('token', settings.token); + formData.append('modelName', settings.modelName); + formData.append('modelId', settings.modelId); + formData.append('fieldType', settings.type); + formData.append('fieldName', settings.fieldName); + formData.append('value', input.val()); + $.each($('#file'), function(i, value) + { + formData.append('files['+i+']', value.files[0]); + }); + + // SHOW INDICATOR + $(self).html(settings.indicator); + + /* Defaults for ajaxoptions. */ + var ajaxoptions = { + type : 'POST', + complete: function (xhr, status) { + isSubmitting = false; + }, + data : formData, + dataType: 'JSON', + url : settings.target, + success: function (result, status) { + + // INTERCEPT + result = intercept.apply(self, [result, status]); + + if (ajaxoptions.dataType === 'JSON') { + $(self).html(input.val()); + if(settings.type !== 'select' && settings.type !== 'file' && settings.type !== 'password') + { + settings.data = input.val(); + } + } + self.editing = false; + callback.apply(self, [result, settings, formData]); + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + }, + error: function (xhr, status, error) { + onerror.apply(form, [settings, self, xhr]); + } + }; + + /* Override with what is given in settings.ajaxoptions. */ + $.extend(ajaxoptions, settings.ajaxoptions); + $.ajax(ajaxoptions); } } } @@ -471,14 +476,14 @@ // DESTROY self.destroy = function(form) { $(self) - .unbind($(self).data('event.editable')) - .removeData('disabled.editable') - .removeData('event.editable'); + .unbind($(self).data('event.editable')) + .removeData('disabled.editable') + .removeData('event.editable'); self.clearTimeouts(); if (self.editing) { - reset.apply(form, [settings, self]); + reset.apply(form, [settings, self]); } }; @@ -513,26 +518,26 @@ // SETTIMEOUT self.setTimeout = function(callback, time) { - var timeouts = $(self).data('timeouts'); - var t = setTimeout(function() { - callback(); - self.clearTimeout(t); - }, time); - if(!timeouts) { - timeouts = []; - $(self).data('timeouts', timeouts); - } - timeouts.push(t); - return t; + var timeouts = $(self).data('timeouts'); + var t = setTimeout(function() { + callback(); + self.clearTimeout(t); + }, time); + if(!timeouts) { + timeouts = []; + $(self).data('timeouts', timeouts); + } + timeouts.push(t); + return t; }; }); }; -var _supportInType = function (type) { - var i = document.createElement('input'); - i.setAttribute('type', type); - return i.type !== 'text' ? type : 'text'; -}; + var _supportInType = function (type) { + var i = document.createElement('input'); + i.setAttribute('type', type); + return i.type !== 'text' ? type : 'text'; + }; $.editable = { @@ -563,7 +568,7 @@ var _supportInType = function (type) { form.submit(); } }); - /* Otherwise use button with given string as text. */ + /* Otherwise use button with given string as text. */ } else { submit = $('