Browse Source

work on serializeToJSON

causefx 6 năm trước cách đây
mục cha
commit
e39ea2abbb
3 tập tin đã thay đổi với 163 bổ sung147 xóa
  1. 2 3
      api/pages/settings-tab-editor-tabs.php
  2. 2 2
      js/functions.js
  3. 159 142
      js/jquery.serializeToJSON.js

+ 2 - 3
api/pages/settings-tab-editor-tabs.php

@@ -4,12 +4,11 @@ $pageSettingsTabEditorTabs = '
 buildTabEditor();
 $( \'#tabEditorTable\' ).sortable({
     stop: function () {
-        var inputs = $(\'input.order\');
-        var nbElems = inputs.length;
         $(\'input.order\').each(function(idx) {
             $(this).val(idx + 1);
         });
-        submitTabOrder();
+        var newTabs = $( "#submit-tabs-form" ).serializeToJSON();
+        submitTabOrder(newTabs);
     }
 });
 $(".tabIconImageList").select2({

+ 2 - 2
js/functions.js

@@ -3014,11 +3014,11 @@ function submitHomepageOrder(){
 	    console.log('add error');
 	}
 }
-function submitTabOrder(){
+function submitTabOrder(newTabs){
 	var post = {
 		action:'changeOrder',
 		api:'api/?v1/settings/tab/editor/tabs',
-		tabs:$( "#submit-tabs-form" ).serializeToJSON(),
+		tabs:newTabs,
 		messageTitle:'',
 		messageBody:window.lang.translate('Tab Order Saved'),
 		error:'Organizr Function: API Connection Failed'

+ 159 - 142
js/jquery.serializeToJSON.js

@@ -1,7 +1,7 @@
-/** 
+/**
  * serializeToJSON jQuery plugin
  * https://github.com/raphaelm22/jquery.serializeToJSON
- * @version: v1.2.2 (November, 2017)
+ * @version: v1.3.0 (February, 2019)
  * @author: Raphael Nunes
  *
  * Created by Raphael Nunes on 2015-08-28.
@@ -9,160 +9,177 @@
  * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
  */
 
-
-(function($) {
-    "use strict";
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        define(['jquery'], factory);
+    } else if (typeof module === 'object' && module.exports) {
+        module.exports = function( root, jQuery ) {
+            if ( jQuery === undefined ) {
+                if ( typeof window !== 'undefined' ) {
+                    jQuery = require('jquery');
+                }
+                else {
+                    jQuery = require('jquery')(root);
+                }
+            }
+            factory(jQuery);
+            return jQuery;
+        };
+    } else {
+        factory(jQuery);
+    }
+}(function ($) {
+    'use strict';
 
     $.fn.serializeToJSON = function(options) {
 
-		var f = {
-			settings: $.extend(true, {}, $.fn.serializeToJSON.defaults, options),
+        var f = {
+            settings: $.extend(true, {}, $.fn.serializeToJSON.defaults, options),
 
-			getValue: function($input) {
-				var value = $input.val();
+            getValue: function($input) {
+                var value = $input.val();
+
+                if ($input.is(":radio")) {
+                    value = $input.filter(":checked").val() || null;
+                }
 
-			    if ($input.is(":radio")) {
-			        value = $input.filter(":checked").val() || null;
-			    }
+                if ($input.is(":checkbox")) {
+                    value = $($input).prop('checked');
+                }
 
-			    if ($input.is(":checkbox")) {
-			        value = $($input).prop('checked');
-			    }
+                if (this.settings.parseBooleans) {
+                    var boolValue = (value + "").toLowerCase();
+                    if (boolValue === "true" || boolValue === "false") {
+                        value = boolValue === "true";
+                    }
+                }
 
-				if (this.settings.parseBooleans) {
-					var boolValue = (value + "").toLowerCase();
-					if (boolValue === "true" || boolValue === "false") {
-						value = boolValue === "true";
-					}
-				}
+                var floatCondition = this.settings.parseFloat.condition;
+                if (floatCondition !== undefined && (
+                    (typeof(floatCondition) === "string"   && $input.is(floatCondition)) ||
+                    (typeof(floatCondition) === "function" && floatCondition($input)))) {
 
-				var floatCondition = this.settings.parseFloat.condition;
-				if (floatCondition !== undefined && (
-				    (typeof(floatCondition) === "string"   && $input.is(floatCondition)) ||
-				    (typeof(floatCondition) === "function" && floatCondition($input)))) {
+                    value = this.settings.parseFloat.getInputValue($input);
+                    value = Number(value);
 
-					value = this.settings.parseFloat.getInputValue($input);
-					value = Number(value);
-					
                     if (this.settings.parseFloat.nanToZero && isNaN(value)){
                         value = 0;
-                    }                   
+                    }
                 }
 
-				return value;
-			},
-
-			createProperty: function(o, value, names, $input) {
-				var navObj = o;
-
-				for (var i = 0; i < names.length; i++) {
-					var currentName = names[i];
-
-					if (i === names.length - 1) {								
-						var isSelectMultiple = $input.is("select") && $input.prop("multiple");
-						
-						if (isSelectMultiple && value !== null){
-							navObj[currentName] = new Array();
-							
-							if (Array.isArray(value)){
-								$(value).each(function() {
-									navObj[currentName].push(this);
-								});
-							}
-							else{
-								navObj[currentName].push(value);
-							}
-						} else {
-							navObj[currentName] = value;
-						}
-					} else {
-						var arrayKey = /\[\w+\]/g.exec(currentName);
-						var isArray = arrayKey != null && arrayKey.length > 0;
-
-						if (isArray) {
-							currentName = currentName.substr(0, currentName.indexOf("["));
-
-							if (this.settings.associativeArrays) {
-								if (!navObj.hasOwnProperty(currentName)) {
-									navObj[currentName] = {};
-								}
-							} else {
-								if (!Array.isArray(navObj[currentName])) {
-									navObj[currentName] = new Array();
-								}
-							}
-
-							navObj = navObj[currentName];
-
-							var keyName = arrayKey[0].replace(/[\[\]]/g, "");
-							currentName = keyName;
-						}
-
-						if (!navObj.hasOwnProperty(currentName)) {
-							navObj[currentName] = {};
-						}
-
-						navObj = navObj[currentName];
-					}
-				}
-			},
-			
-			includeUncheckValues: function(selector, formAsArray){
-				$(":radio", selector).each(function(){
-					var isUncheckRadio = $("input[name='" + this.name + "']:radio:checked").length === 0;
-					if (isUncheckRadio)
-					{
-						formAsArray.push({
-							name: this.name,
-							value: null
-						});
-					}
-				});
-				
-				$("select[multiple]", selector).each(function(){					
-					if ($(this).val() === null){
-						formAsArray.push({
-							name: this.name,
-							value: null
-						});
-					}
-				});
-			},
-
-			serializer: function(selector) {
-				var self = this;
-				
-				var formAsArray = $(selector).serializeArray();
-				this.includeUncheckValues(selector, formAsArray);
-
-				var serializedObject = {}
-				
-				$.each(formAsArray, function(i, item) {
-					var $input = $(":input[name='" + item.name + "']", selector);
-					
-					var value = self.getValue($input);
-					var names = item.name.split(".");					
-
-					self.createProperty(serializedObject, value, names, $input);
-				});
-
-				return serializedObject;
-			}
-		};
-
-		return f.serializer(this);
+                return value;
+            },
+
+            createProperty: function(o, value, names, $input) {
+                var navObj = o;
+
+                for (var i = 0; i < names.length; i++) {
+                    var currentName = names[i];
+
+                    if (i === names.length - 1) {
+                        var isSelectMultiple = $input.is("select") && $input.prop("multiple");
+
+                        if (isSelectMultiple && value !== null){
+                            navObj[currentName] = new Array();
+
+                            if (Array.isArray(value)){
+                                $(value).each(function() {
+                                    navObj[currentName].push(this);
+                                });
+                            }
+                            else{
+                                navObj[currentName].push(value);
+                            }
+                        } else {
+                            navObj[currentName] = value;
+                        }
+                    } else {
+                        var arrayKey = /\[\w+\]/g.exec(currentName);
+                        var isArray = arrayKey != null && arrayKey.length > 0;
+
+                        if (isArray) {
+                            currentName = currentName.substr(0, currentName.indexOf("["));
+
+                            if (this.settings.associativeArrays) {
+                                if (!navObj.hasOwnProperty(currentName)) {
+                                    navObj[currentName] = {};
+                                }
+                            } else {
+                                if (!Array.isArray(navObj[currentName])) {
+                                    navObj[currentName] = new Array();
+                                }
+                            }
+
+                            navObj = navObj[currentName];
+
+                            var keyName = arrayKey[0].replace(/[\[\]]/g, "");
+                            currentName = keyName;
+                        }
+
+                        if (!navObj.hasOwnProperty(currentName)) {
+                            navObj[currentName] = {};
+                        }
+
+                        navObj = navObj[currentName];
+                    }
+                }
+            },
+
+            includeUncheckValues: function(selector, formAsArray){
+                $(":radio", selector).each(function(){
+                    var isUncheckRadio = $("input[name='" + this.name + "']:radio:checked").length === 0;
+                    if (isUncheckRadio)
+                    {
+                        formAsArray.push({
+                            name: this.name,
+                            value: null
+                        });
+                    }
+                });
+
+                $("select[multiple]", selector).each(function(){
+                    if ($(this).val() === null){
+                        formAsArray.push({
+                            name: this.name,
+                            value: null
+                        });
+                    }
+                });
+            },
+
+            serializer: function(selector) {
+                var self = this;
+
+                var formAsArray = $(selector).serializeArray();
+                this.includeUncheckValues(selector, formAsArray);
+
+                var serializedObject = {}
+
+                $.each(formAsArray, function(i, item) {
+                    var $input = $(":input[name='" + item.name + "']", selector);
+
+                    var value = self.getValue($input);
+                    var names = item.name.split(".");
+
+                    self.createProperty(serializedObject, value, names, $input);
+                });
+
+                return serializedObject;
+            }
+        };
+
+        return f.serializer(this);
     };
-	
-	$.fn.serializeToJSON.defaults = {
+
+    $.fn.serializeToJSON.defaults = {
         associativeArrays: true,
         parseBooleans: true,
-		parseFloat: {
-			condition: undefined,
-			nanToZero: true,
-			getInputValue: function($input){
-				return $input.val().split(",").join("");
-			}
-		}
+        parseFloat: {
+            condition: undefined,
+            nanToZero: true,
+            getInputValue: function($input){
+                return $input.val().split(",").join("");
+            }
+        }
     };
-
-})(jQuery);
+}));