1// This manages events for different states activated through DV interface actions like clicks, mouseovers, etc. 2DV.Schema.events = { 3 // Change zoom level and causes a reflow and redraw of pages. 4 zoom: function(level){ 5 var viewer = this.viewer; 6 var continuation = function() { 7 viewer.pageSet.zoom({ zoomLevel: level }); 8 var ranges = viewer.models.document.ZOOM_RANGES; 9 viewer.dragReporter.sensitivity = ranges[ranges.length-1] == level ? 1.5 : 1; 10 viewer.notifyChangedState(); 11 return true; 12 }; 13 viewer.confirmStateChange ? viewer.confirmStateChange(continuation) : continuation(); 14 }, 15 16 // Draw (or redraw) the visible pages on the screen. 17 drawPages: function() { 18 if (this.viewer.state != 'ViewDocument') return; 19 var doc = this.models.document; 20 var win = this.elements.window[0]; 21 var offsets = doc.baseHeightsPortionOffsets; 22 var scrollPos = this.viewer.scrollPosition = win.scrollTop; 23 var midpoint = scrollPos + (this.viewer.$(win).height() / 3); 24 var currentPage = _.sortedIndex(offsets, scrollPos); 25 var middlePage = _.sortedIndex(offsets, midpoint); 26 if (offsets[currentPage] == scrollPos) currentPage++ && middlePage++; 27 var pageIds = this.helpers.sortPages(middlePage - 1); 28 var total = doc.totalPages; 29 if (doc.currentPage() != currentPage) doc.setPageIndex(currentPage - 1); 30 this.drawPageAt(pageIds, middlePage - 1); 31 }, 32 33 // Draw the page at the given index. 34 drawPageAt : function(pageIds, index) { 35 var first = index == 0; 36 var last = index == this.models.document.totalPages - 1; 37 if (first) index += 1; 38 var pages = [ 39 { label: pageIds[0], index: index - 1 }, 40 { label: pageIds[1], index: index }, 41 { label: pageIds[2], index: index + 1 } 42 ]; 43 if (last) pages.pop(); 44 pages[first ? 0 : pages.length - 1].currentPage = true; 45 this.viewer.pageSet.draw(pages); 46 }, 47 48 check: function(){ 49 var viewer = this.viewer; 50 if(viewer.busy === false){ 51 viewer.busy = true; 52 53 for(var i = 0; i < this.viewer.observers.length; i++){ 54 this[viewer.observers[i]].call(this); 55 } 56 viewer.busy = false; 57 } 58 }, 59 60 loadText: function(pageIndex,afterLoad){ 61 62 pageIndex = (!pageIndex) ? this.models.document.currentIndex() : parseInt(pageIndex,10); 63 this._previousTextIndex = pageIndex; 64 65 var me = this; 66 67 var processText = function(text) { 68 69 var pageNumber = parseInt(pageIndex,10)+1; 70 me.viewer.$('.DV-textContents').replaceWith('<pre class="DV-textContents">' + text + '</pre>'); 71 me.elements.currentPage.text(pageNumber); 72 me.elements.textCurrentPage.text('p. '+(pageNumber)); 73 me.models.document.setPageIndex(pageIndex); 74 me.helpers.setActiveChapter(me.models.chapters.getChapterId(pageIndex)); 75 76 if (me.viewer.openEditor == 'editText' && 77 !(pageNumber in me.models.document.originalPageText)) { 78 me.models.document.originalPageText[pageNumber] = text; 79 } 80 if (me.viewer.openEditor == 'editText') { 81 me.viewer.$('.DV-textContents').attr('contentEditable', true).addClass('DV-editing'); 82 } 83 84 if(afterLoad) afterLoad.call(me.helpers); 85 }; 86 87 if (me.viewer.schema.text[pageIndex]) { 88 return processText(me.viewer.schema.text[pageIndex]); 89 } 90 91 var handleResponse = DV.jQuery.proxy(function(response) { 92 processText(me.viewer.schema.text[pageIndex] = response); 93 }, this); 94 95 this.viewer.$('.DV-textContents').text(''); 96 97 var textURI = me.viewer.schema.document.resources.page.text.replace('{page}', pageIndex + 1); 98 // var crossDomain = this.helpers.isCrossDomain(textURI); 99 // if (crossDomain) textURI += '?callback=?'; 100 DV.jQuery['get'](textURI, {}, handleResponse); 101 // DV.jQuery[crossDomain ? 'getJSON' : 'get'](textURI, {}, handleResponse); 102 }, 103 104 resetTracker: function(){ 105 this.viewer.activeAnnotation = null; 106 this.trackAnnotation.combined = null; 107 this.trackAnnotation.h = null; 108 }, 109 trackAnnotation: function(){ 110 var viewer = this.viewer; 111 var helpers = this.helpers; 112 var scrollPosition = this.elements.window[0].scrollTop; 113 114 if(viewer.activeAnnotation){ 115 var annotation = viewer.activeAnnotation; 116 var trackAnnotation = this.trackAnnotation; 117 118 119 if(trackAnnotation.id != annotation.id){ 120 trackAnnotation.id = annotation.id; 121 helpers.setActiveAnnotationLimits(annotation); 122 } 123 if(!viewer.activeAnnotation.annotationEl.hasClass('DV-editing') && 124 (scrollPosition >
124 (trackAnnotation.h) || scrollPosition < trackAnnotation.combined)) { 125 annotation.hide(true); 126 viewer.pageSet.setActiveAnnotation(null); 127 viewer.activeAnnotation = null; 128 trackAnnotation.h = null; 129 trackAnnotation.id = null; 130 trackAnnotation.combined = null; 131 } 132 }else{ 133 viewer.pageSet.setActiveAnnotation(null); 134 viewer.activeAnnotation = null; 135 trackAnnotation.h = null; 136 trackAnnotation.id = null; 137 trackAnnotation.combined = null; 138 helpers.removeObserver('trackAnnotation'); 139 } 140 } 141};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.