PageSourceSearch

https://bahai-news.info/javascripts/DV/events/events.js

js bahai-news.info collected 2026-10-02 14:21:50 UTC 5,238 bytes, 141 lines download raw bytes

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.