Untangle the callbacks; Add linkable diff tabs.
[redakcja.git] / src / redakcja / static / js / wiki / view_column_diff.js
index 33ffb6a..30ef1bd 100644 (file)
@@ -1,35 +1,51 @@
 (function($){
 
-       function DiffPerspective(options) {
-               var old_callback = options.callback || function() {};
-               var self = this;
-
-        options.callback = function(){
-                       self.base_id = options.base_id;
-                       old_callback.call(this);
-               };
-
-               $.wiki.Perspective.call(this, options);
-    };
-
-    DiffPerspective.prototype = new $.wiki.Perspective();
-
-    DiffPerspective.prototype.freezeState = function(){
-        // must
-    };
-
-       DiffPerspective.prototype.destroy = function() {
-        $.wiki.switchToTab('#HistoryPerspective');
-               $('#' + this.base_id).remove();
-               $('#' + this.perspective_id).remove();
-       };
-
-       DiffPerspective.prototype.onEnter = function(success, failure){
-               $.wiki.Perspective.prototype.onEnter.call(this);
-               console.log("Entered diff view");
-       };
-
-       $.wiki.DiffPerspective = DiffPerspective;
+    class DiffPerspective extends $.wiki.Perspective {
+        constructor(options) {
+            super(options);
+            this.base_id = options.base_id;
+        }
+
+        static openId(id) {
+            let match = id.match(/R(\d+)-(\d+)/);
+            if (!match)
+                return [];
+            return this.open(match[1], match[2]);
+        }
+
+        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() {
+            $.wiki.switchToTab('#HistoryPerspective');
+            $('#' + this.base_id).remove();
+            $('#' + this.perspective_id).remove();
+        }
+    }
+    $.wiki.DiffPerspective = DiffPerspective;
 
 })(jQuery);
-