Fix error with revision check during saving.
[redakcja.git] / src / redakcja / static / js / wiki / view_history.js
index 6e30639..9ce518c 100644 (file)
@@ -1,73 +1,64 @@
 (function($){
 
-    function HistoryPerspective(options) {
-       var old_callback = options.callback || function() {};
-
-       options.callback = function() {
-           var self = this;
-            if (CurrentDocument.diff) {
-                rev_from = CurrentDocument.diff[0];
-                rev_to = CurrentDocument.diff[1];
-                this.doc.fetchDiff({
-                    from: rev_from,
-                    to: rev_to,
-                    success: function(doc, data){
-                        var result = $.wiki.newTab(doc, ''+rev_from +' -> ' + rev_to, 'DiffPerspective');
-
-                        $(result.view).html(data);
-                        $.wiki.switchToTab(result.tab);
-                    }
-                });
-            }
+    class HistoryPerspective extends $.wiki.Perspective {
+        constructor(options) {
+            super(options);
+            var self = this;
 
-           // first time page is rendered
+            // first time page is rendered
             $('#make-diff-button').click(function() {
-               self.makeDiff();
-           });
+                self.makeDiff();
+            });
 
-           $('#pubmark-changeset-button').click(function() {
-               self.showPubmarkForm();
-           });
+            $('#pubmark-changeset-button').click(function() {
+                self.showPubmarkForm();
+            });
 
-           $('#doc-revert-button').click(function() {
-               self.revertDialog();
-           });
+            $('#doc-revert-button').click(function() {
+                self.revertDialog();
+            });
 
-           $('#open-preview-button').click(function(event) {
-               var selected = $('#changes-list .entry.selected');
+            $('#open-preview-button').click(function(event) {
+                var selected = $('#changes-list .entry.selected');
 
-               if (selected.length != 1) {
+                if (selected.length != 1) {
                     window.alert("Wybierz dokładnie *jedną* wersję.");
                     return;
-               }
+                }
 
-               var version = parseInt($("*[data-stub-value='version']", selected[0]).text());
-               window.open($(this).attr('data-basehref') + "?revision=" + version);
+                var version = parseInt($("*[data-stub-value='version']", selected[0]).text());
+                window.open($(this).attr('data-basehref') + "?revision=" + version);
 
-               event.preventDefault();
-           });
+                event.preventDefault();
+            });
 
             $(document).on('click', '#changes-list .entry', function(){
-               var $this = $(this);
+                var $this = $(this);
 
-               var selected_count = $("#changes-list .entry.selected").length;
+                var selected_count = $("#changes-list .entry.selected").length;
 
-               if ($this.hasClass('selected')) {
+                if ($this.hasClass('selected')) {
                     $this.removeClass('selected');
                     selected_count -= 1;
-               }
-               else {
-                   if (selected_count  < 2) {
-                       $this.addClass('selected');
-                       selected_count += 1;
-                   };
-               };
-
-               $('#history-view-editor .toolbar button').attr('disabled', 'disabled').
+                }
+                else {
+                    if (selected_count  < 2) {
+                        $this.addClass('selected');
+                        selected_count += 1;
+                    };
+                };
+
+                $('#history-view-editor .toolbar button').attr('disabled', 'disabled').
                     filter('*[data-enabled-when~="' + selected_count + '"]').
-                   attr('disabled', null);
+                    attr('disabled', null);
             });
 
+            $(document).on('click', '#changes-list .entry .approved', function(){
+                $("#changes-list .entry.selected").removeClass('selected');
+                $(this).closest('.entry').click();
+                self.showPubmarkForm();
+                return false;
+            })
             $(document).on('click', '#changes-list span.tag', function(event){
                 return false;
             });
                     self.triggerFetch();
                 }
             });
+        }
 
-            old_callback.call(this);
-       }
-
-       $.wiki.Perspective.call(this, options);
-    };
-
-    HistoryPerspective.prototype = new $.wiki.Perspective();
-
-    HistoryPerspective.prototype.freezeState = function(){
-        // must
-    };
-
-    HistoryPerspective.prototype.onEnter = function(success, failure){
-        $.wiki.Perspective.prototype.onEnter.call(this);
-        this.startFetching();
-        success && success();
-    };
-
-    HistoryPerspective.prototype.startFetching = function() {
-        $('#history-view .message-box').html('Wczytywanie historii…').show();
-        $('#changes-list').html('');
-        this.finished = false;
-        this.befored = '';
-        this.triggerFetch();
-    };
-    HistoryPerspective.prototype.stopFetching = function() {
-        self.finished = true;
-        $('#history-view .message-box').hide()
-    };
-
-
-    HistoryPerspective.prototype.triggerFetch = function() {
-        var self = this;
-        self.fetching = true;
-
-        function _finalize() {
-            self.fetching = false;
+        onEnter(success, failure) {
+            super.onEnter();
+            this.startFetching();
+            success && success();
         }
 
-        function _failure(doc, message){
-            $('#history-view .message-box').html('Nie udało się odświeżyć historii:' + message).show();
-            _finalize();
-        };
+        startFetching() {
+            $('#history-view .message-box').html('Wczytywanie historii…').show();
+            $('#changes-list').html('');
+            this.finished = false;
+            this.before = '';
+            this.triggerFetch();
+        }
+        stopFetching() {
+            self.finished = true;
+            $('#history-view .message-box').hide()
+        }
 
-        function _success(doc, data){
-            //$('#history-view .message-box').hide(); ONLY AFTER LAST!
-            var changes_list = $('#changes-list');
-            var $stub = $('#history-view .row-stub');
+        triggerFetch() {
+            var self = this;
+            self.fetching = true;
 
-            if (!data.length) {
-                self.stopFetching();
+            function _finalize() {
+                self.fetching = false;
             }
 
-            $.each(data, function(){
-                $.wiki.renderStub({
-                   container: changes_list,
-                   stub: $stub,
-                   data: this,
-               });
-                self.before = this.version;
-                if (this.version == 1) {
-                    self.stopFetching();
-                }
-            });
+            function _failure(doc, message){
+                $('#history-view .message-box').html('Nie udało się odświeżyć historii:' + message).show();
+                _finalize();
+            };
 
-            _finalize();
-        };
+            function _success(doc, data){
+                //$('#history-view .message-box').hide(); ONLY AFTER LAST!
+                var changes_list = $('#changes-list');
+                var $stub = $('#history-view .row-stub');
 
-        this.doc.fetchHistory({
-            success: _success,
-            failure: _failure,
-            before: this.before,
-        });
-    }
+                if (!data.length) {
+                    self.stopFetching();
+                }
 
+                $.each(data, function(){
+                    $.wiki.renderStub({
+                        container: changes_list,
+                        stub: $stub,
+                        data: this,
+                    });
+                    self.before = this.version;
+                    if (this.version == 1) {
+                        self.stopFetching();
+                    }
+                });
 
-       HistoryPerspective.prototype.showPubmarkForm = function(){
-               var selected = $('#changes-list .entry.selected');
+                _finalize();
+            };
 
-               if (selected.length != 1) {
-            window.alert("Musisz zaznaczyć dokładnie jedną wersję.");
-            return;
+            this.doc.fetchHistory({
+                success: _success,
+                failure: _failure,
+                before: this.before,
+            });
         }
 
-               var version = parseInt($("*[data-stub-value='version']", selected[0]).text());
-               $.wiki.showDialog('#pubmark_dialog', {'revision': version});
-       };
+        showPubmarkForm() {
+            var selected = $('#changes-list .entry.selected');
 
-       HistoryPerspective.prototype.makeDiff = function() {
-        var changelist = $('#changes-list');
-        var selected = $('.entry.selected', changelist);
+            if (selected.length != 1) {
+                window.alert("Musisz zaznaczyć dokładnie jedną wersję.");
+                return;
+            }
 
-        if (selected.length != 2) {
-            window.alert("Musisz zaznaczyć dokładnie dwie wersje do porównania.");
-            return;
+            var version = parseInt($("*[data-stub-value='version']", selected[0]).text());
+            var approved = selected.attr('data-approved') == 'true';
+            $.wiki.showDialog('#pubmark_dialog', {'revision': version, 'approved': !approved});
         }
 
-        $.blockUI({
-            message: 'Wczytywanie porównania...'
-        });
-
-               var rev_from = $("*[data-stub-value='version']", selected[1]).text();
-               var rev_to =  $("*[data-stub-value='version']", selected[0]).text();
-
-        return this.doc.fetchDiff({
-            from: rev_from,
-                       to: rev_to,
-            success: function(doc, data){
-                var result = $.wiki.newTab(doc, ''+rev_from +' -> ' + rev_to, 'DiffPerspective');
-
-                               $(result.view).html(data);
-                               $.wiki.switchToTab(result.tab);
-                               $.unblockUI();
-            },
-            failure: function(doc){
-                $.unblockUI();
+        makeDiff() {
+            var changelist = $('#changes-list');
+            var selected = $('.entry.selected', changelist);
+
+            if (selected.length != 2) {
+                window.alert("Musisz zaznaczyć dokładnie dwie wersje do porównania.");
+                return;
             }
-        });
-    };
 
-    HistoryPerspective.prototype.revertDialog = function(){
-        var self = this;
-        var selected = $('#changes-list .entry.selected');
+            var rev_from = $("*[data-stub-value='version']", selected[1]).text();
+            var rev_to =  $("*[data-stub-value='version']", selected[0]).text();
 
-        if (selected.length != 1) {
-            window.alert("Musisz zaznaczyć dokładnie jedną wersję.");
-            return;
+            $.wiki.DiffPerspective.open(rev_from, rev_to);
         }
 
-        var version = parseInt($("*[data-stub-value='version']", selected[0]).text());
-        $.wiki.showDialog('#revert_dialog', {revision: version});
-    };
+        revertDialog() {
+            var self = this;
+            var selected = $('#changes-list .entry.selected');
 
+            if (selected.length != 1) {
+                window.alert("Musisz zaznaczyć dokładnie jedną wersję.");
+                return;
+            }
+
+            var version = parseInt($("*[data-stub-value='version']", selected[0]).text());
+            $.wiki.showDialog('#revert_dialog', {revision: version});
+        }
+    }
     $.wiki.HistoryPerspective = HistoryPerspective;
 
 })(jQuery);