Cover cropping.
[redakcja.git] / src / redakcja / static / js / wiki / view_search.js
index b49671c..09f64da 100644 (file)
@@ -6,8 +6,7 @@
     function SearchPerspective(options){
         var old_callback = options.callback || function() { };
 
-        this.noupdate_hash_onenter = true;
-        this.vsplitbar = 'ZNAJDŹ I ZAMIEŃ';
+        this.vsplitbar = 'ZNAJDŹ I ZAMIEŃ';
 
         options.callback = function(){
             var self = this;
@@ -17,6 +16,7 @@
             this.$searchInput = $('#search-input', this.$element);
             this.$replaceInput = $('#replace-input', this.$element);
             this.$searchButton = $('#search-button', this.$element);
+            this.$searchPrevButton = $('#search-prev-button', this.$element);
             this.$replaceButton = $('#replace-button', this.$element);
 
             this.$replaceButton.attr("disabled","disabled");
                     alert('Brak wyników.');
             });
 
+            this.$searchPrevButton.click(function(){
+                if (!self.search(false))
+                    alert('Brak wyników.');
+            });
+
             this.$replaceButton.click(function(){
                 self.replace();
             });
             old_callback.call(this);
         };
 
-        $.wiki.Perspective.call(this, options);
+        $.wiki.SidebarPerspective.call(this, options);
     };
 
-    SearchPerspective.prototype = new $.wiki.Perspective();
+    SearchPerspective.prototype = new $.wiki.SidebarPerspective();
 
-    SearchPerspective.prototype.search = function(){
+    SearchPerspective.prototype.search = function(forward=true){
         var self = this;
         var query = self.$searchInput.val();
 
             self.editor = $.wiki.perspectiveForTab('#CodeMirrorPerspective').codemirror
 
         if (!self.searchCursor) {
+            var options = {};
+            options.caseFold = !self.options['search-case-sensitive'];
+            var start = 0;
+            if (self.options['search-from-cursor']) {
+                start = self.editor.getCursor();
+            }
             self.searchCursor = self.editor.getSearchCursor(
                 self.$searchInput.val(), 
-                self.options['search-from-cursor'], 
-                !self.options['search-case-sensitive']
+                start,
+                options
             );
         }
-        if (self.searchCursor.findNext()) {
-            self.searchCursor.select();
+        if (forward ? self.searchCursor.findNext() : self.searchCursor.findPrevious()) {
+            self.editor.setSelection(self.searchCursor.from(), self.searchCursor.to());
+            self.editor.scrollIntoView({from: self.searchCursor.from(), to: self.searchCursor.to()}, 20);
             self.$replaceButton.removeAttr("disabled");
             return true;
         }
             self.search();
         }
         else {}
-        self.searchCursor.select();
+
+        self.editor.setSelection(self.searchCursor.from(), self.searchCursor.to());
+        self.editor.scrollIntoView({from: self.searchCursor.from(), to: self.searchCursor.to()}, 20);
+
         self.searchCursor.replace(query);
         if(self.search() && self.options['replace-all']) {
             self.replace();
     SearchPerspective.prototype.onEnter = function(success, failure){
         var self = this;
 
-        $.wiki.Perspective.prototype.onEnter.call(this);
+        $.wiki.SidebarPerspective.prototype.onEnter.call(this);
         self.$searchCursor = null;
 
-        $('.vsplitbar').not('.active').trigger('click');
-        $(".vsplitbar-title").html("↓ ZNAJDŹ I ZAMIEŃ ↓");        
-        
         if ($.wiki.activePerspective() != 'CodeMirrorPerspective')
             $.wiki.switchToTab('#CodeMirrorPerspective');
     };