Untangle the callbacks; Add linkable diff tabs.
[redakcja.git] / src / redakcja / static / js / wiki / view_column_diff.js
index beb36ed..30ef1bd 100644 (file)
@@ -2,27 +2,50 @@
 
     class DiffPerspective extends $.wiki.Perspective {
         constructor(options) {
-           var old_callback = options.callback || function() {};
+            super(options);
+            this.base_id = options.base_id;
+        }
 
-            options.callback = function() {
-               var self = this;
-               self.base_id = options.base_id;
-               old_callback.call(this);
-           };
-           super(options);
+        static openId(id) {
+            let match = id.match(/R(\d+)-(\d+)/);
+            if (!match)
+                return [];
+            return this.open(match[1], match[2]);
         }
 
-        freezeState() {
-            // must
-        };
+        static open(revFrom, revTo) {
+            let tabId = 'R' + revFrom + '-' + revTo;
+            let tab = $(".tabs #DiffPerspective_" + tabId);
+            if (tab.length) {
+                $.wiki.switchToTab(tab);
+            } else {
+                let result = $.wiki.newTab(CurrentDocument, ''+revFrom +' → ' + revTo, 'DiffPerspective', tabId);
+                $.blockUI({
+                    message: 'Wczytywanie porównania...'
+                });
+
+                CurrentDocument.fetchDiff({
+                    from: revFrom,
+                    to: revTo,
+                    success: function(doc, data){
+                        $(result.view).html(data);
+                        $.wiki.switchToTab(result.tab);
+                        $.unblockUI();
+                    },
+                    failure: function(doc){
+                        $.unblockUI();
+                    }
+                });
+                return result.tab;
+            }
+        }
 
-       destroy() {
+        destroy() {
             $.wiki.switchToTab('#HistoryPerspective');
             $('#' + this.base_id).remove();
             $('#' + this.perspective_id).remove();
-       }
+        }
     }
     $.wiki.DiffPerspective = DiffPerspective;
 
 })(jQuery);
-