]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6152 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 6 Dec 2023 17:26:26 +0000 (18:26 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 6 Dec 2023 17:26:26 +0000 (18:26 +0100)
resources/linkeditor/js/linkeditor.form.js
resources/linkeditor/js/linkeditor.links.js

index acda0312a157ab06b172895049043e3c8741c239..bc36bee4a7464c0c020034ab0b2a6c5b5d101914 100644 (file)
@@ -1,5 +1,6 @@
 function LinkeditorForm(linkeditor) {
     this.linkeditor = linkeditor;
+    this.loadingFields = {};
     this._maskChangeEvent = false;
     this._maskChangeEventTimeout = null;
     this.init();
@@ -19,7 +20,6 @@ LinkeditorForm.prototype = {
             return false;
         });
 
-
         $(document).on('change', '.calculation', function () {
             var v = $(this).val();
             if (/[0-9\., \-\+\*\/]+/.test(v)) {
@@ -81,15 +81,28 @@ LinkeditorForm.prototype = {
             $('body').append(form);
 
             var parent = $(this).closest('.freefile-file');
+            var tf = $(parent).find('.freefile-text-input');
+            let tfname = $(tf).attr('name');
+            let uid = $this.getCurrentFormUID();
+            $this.loadingFields[uid + '_' + tfname] = true;
+
             $(parent).addClass('loading');
             var f = $(form).ajaxSubmit({dataType: 'json'});
             var xhr = f.data('jqxhr');
             xhr.done(function (data) {
-                var tf = $(parent).find('.freefile-text-input');
-                tf.val(data[0]);
-                tf.trigger('change');
-                $(parent).removeClass('loading');
-                $this.saveFormDataInLink();
+                if ($this.getCurrentFormUID() === uid) {
+                    let tf = $("#linkeditor-panel-form").find('.freefile-text-input[name="' + tfname + '"]');
+                    tf.val(data[0]);
+                    tf.trigger('change');
+                    $(tf).closest('.freefile-file').removeClass('loading');
+                    $this.saveFormDataInLink();
+                } else {
+                    let linkData = {};
+                    linkData[tfname] = data[0];
+                    $this.linkeditor.links.updateLinkData(uid, linkData, true);
+                    $this.linkeditor.hasChanged();
+                }
+                $this.loadingFields[uid + '_' + tfname] = false;
                 setTimeout(function () {
                     $this.linkeditor.save.saveIfUnsavedChanges(TRANSLATIONS.upload_save_message, false, function () {
 
@@ -100,6 +113,14 @@ LinkeditorForm.prototype = {
         });
     },
 
+    getCurrentFormUID: function () {
+        let uid = $("#linkeditor-panel-form").find('[name="uid"]');
+        if (uid.length > 0) {
+            return uid.val();
+        }
+        return false;
+    },
+
     saveFormDataInLink: function () {
         var $this = this;
         var form = $("#linkeditor-panel-form form");
@@ -256,10 +277,12 @@ LinkeditorForm.prototype = {
             return;
         }
 
+        let linkData = this.linkeditor.links.getLinkData(link);
+        let uid = linkData.uid;
         var map = {top: 'y', left: 'x', width: 'w', height: 'h'};
 
         this.maskChangeEvent();
-        $.each(this.linkeditor.links.getLinkData(link), function (k, v) {
+        $.each(linkData, function (k, v) {
             if (map[k] !== undefined) {
                 k = map[k];
             }
@@ -269,6 +292,10 @@ LinkeditorForm.prototype = {
             } else {
                 $(form).find('[name=' + k + ']').val(v);
             }
+
+            if ($this.loadingFields[uid + '_' + k] === true) {
+                $(form).find('[name=' + k + ']').closest('.freefile-file').addClass('loading');
+            }
         });
         this.unmaskChangeEvent();
     },
index 340308555a550c947cb5e2518dc79bf4d6b00e22..ca609b6db79cb3eb5d9d019b291897aacd8bbb4a 100644 (file)
@@ -1127,13 +1127,19 @@ LinkeditorLinks.prototype = {
         }
     },
 
-    updateLinkData: function (id, data) {
+    updateLinkData: function (id, data, updateHTML) {
         if (LINKS[id] === undefined) {
             console.warn('Link ' + id + ' not found');
             return;
         }
+
+        let htmlLink = updateHTML ? $('.link[fb-uid="' + id + '"]') : false;
+
         $.each(data, function (k, v) {
             LINKS[id][k] = v;
+            if (htmlLink) {
+                $(htmlLink).attr('fb-' + k, v);
+            }
         });
         this.linkeditor.rulers.updateMagnetValues();
         this.updateLayers();