X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/5913c54d19b8f6775633176032161d49f9b2f1aa..cb900d10b9d0d42b0b6aa035be45dcbaa2f61af6:/src/redakcja/static/js/wiki/view_search.js diff --git a/src/redakcja/static/js/wiki/view_search.js b/src/redakcja/static/js/wiki/view_search.js index b49671c6..cad64fba 100644 --- a/src/redakcja/static/js/wiki/view_search.js +++ b/src/redakcja/static/js/wiki/view_search.js @@ -3,114 +3,124 @@ /* * Perspective */ - function SearchPerspective(options){ - var old_callback = options.callback || function() { }; - - this.noupdate_hash_onenter = true; - this.vsplitbar = 'ZNAJDŹ I ZAMIEŃ'; + class SearchPerspective extends $.wiki.SidebarPerspective { + constructor(options) { + var old_callback = options.callback || function() { }; + + options.callback = function(){ + var self = this; + + this.vsplitbar = 'ZNAJDŹ I ZAMIEŃ'; + this.editor = null; + this.$element = $("#side-search"); + 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"); + this.options = Array(); + + // handlers + this.$searchInput.change(function(event){ + self.searchCursor = null; + }); + this.$replaceInput.change(function(event){ + self.searchCursor = null; + }); + + $("#side-search input:checkbox").each(function() { + self.options[this.id] = this.checked; + }).change(function(){ + self.options[this.id] = this.checked; + self.searchCursor = null; + }); + + this.$searchButton.click(function(){ + if (!self.search()) + 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); + }; + + super(options); + } - options.callback = function(){ + search(forward=true) { var self = this; - - this.editor = null; - this.$element = $("#side-search"); - this.$searchInput = $('#search-input', this.$element); - this.$replaceInput = $('#replace-input', this.$element); - this.$searchButton = $('#search-button', this.$element); - this.$replaceButton = $('#replace-button', this.$element); - - this.$replaceButton.attr("disabled","disabled"); - this.options = Array(); - - // handlers - this.$searchInput.change(function(event){ - self.searchCursor = null; - }); - this.$replaceInput.change(function(event){ + var query = self.$searchInput.val(); + + if (!self.editor) + 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(), + start, + options + ); + } + 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; + } + else { self.searchCursor = null; - }); - - $("#side-search input:checkbox").each(function() { - self.options[this.id] = this.checked; - }).change(function(){ - self.options[this.id] = this.checked; - self.searchCursor = null; - }); - - this.$searchButton.click(function(){ - if (!self.search()) - alert('Brak wyników.'); - }); + this.$replaceButton.attr("disabled","disabled"); + return false; + } + } - this.$replaceButton.click(function(){ - self.replace(); - }); + replace() { + var self = this; + var query = self.$replaceInput.val(); - old_callback.call(this); - }; + if (!self.searchCursor) { + self.search(); + } + else {} - $.wiki.Perspective.call(this, options); - }; + self.editor.setSelection(self.searchCursor.from(), self.searchCursor.to()); + self.editor.scrollIntoView({from: self.searchCursor.from(), to: self.searchCursor.to()}, 20); - SearchPerspective.prototype = new $.wiki.Perspective(); + self.searchCursor.replace(query); + if(self.search() && self.options['replace-all']) { + self.replace(); + } + } - SearchPerspective.prototype.search = function(){ - var self = this; - var query = self.$searchInput.val(); + onEnter(success, failure) { + var self = this; - if (!self.editor) - self.editor = $.wiki.perspectiveForTab('#CodeMirrorPerspective').codemirror + super.onEnter(); + self.$searchCursor = null; - if (!self.searchCursor) { - self.searchCursor = self.editor.getSearchCursor( - self.$searchInput.val(), - self.options['search-from-cursor'], - !self.options['search-case-sensitive'] - ); + if ($.wiki.activePerspective() != 'CodeMirrorPerspective') + $.wiki.switchToTab('#CodeMirrorPerspective'); } - if (self.searchCursor.findNext()) { - self.searchCursor.select(); - self.$replaceButton.removeAttr("disabled"); - return true; - } - else { - self.searchCursor = null; - this.$replaceButton.attr("disabled","disabled"); - return false; - } - }; - - SearchPerspective.prototype.replace = function(){ - var self = this; - var query = self.$replaceInput.val(); - if (!self.searchCursor) { - self.search(); + onExit(success, failure) { } - else {} - self.searchCursor.select(); - 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); - self.$searchCursor = null; - - $('.vsplitbar').not('.active').trigger('click'); - $(".vsplitbar-title").html("↓ ZNAJDŹ I ZAMIEŃ ↓"); - - if ($.wiki.activePerspective() != 'CodeMirrorPerspective') - $.wiki.switchToTab('#CodeMirrorPerspective'); - }; - - SearchPerspective.prototype.onExit = function(success, failure) { - - }; + } $.wiki.SearchPerspective = SearchPerspective;