PageSourceSearch

https://biblewebapp.com/study-v2/js/docs/navigators.bible.js

js biblewebapp.com collected 2026-09-24 19:09:26 UTC 5,404 bytes, 182 lines download raw bytes

1/**
2 * All the functions necessary to navigate a Bible
3 * @requires bible.BibleFormatter
4 *
5 * @author John Dyer (http://j.hn/)
6 */
7
8bible.BibleNavigator = {
9	
10	name: 'bible',
11	
12	sectionSelector: 'div.chapter',
13	
14	sectionIdAttr: 'data-osis',
15	
16	fragmentSelector: 'span.verse',
17	
18	fragmentIdAttr: 'data-osis',
19	
20	getOptions: function() {
21		var html = '',
22			langCode,
23			language,
24			versionCode,
25			version;
26		
27		for (langCode in bible.versions.versionData) {
28			language = bible.versions.versionData[langCode];
29			
30			html += '<optgroup label="' + language.languageName + '">';
31			
32			for (versionCode in language.versions) {
33				version = language.versions[versionCode];
34				
35				html += '<option value="' + versionCode + '" data-language="' + langCode + '" data-version=\'' + JSON.stringify(version) + '\'>' + version.abbreviation + ' - ' + version.name + '</option>';
36				
37			}
38			
39			html += '</optgroup>';
40		}
41	
42		return html;
43	},
44	
45	formatNavigation: function(fragmentId, language) {
46		
47		var reference = new bible.Reference(fragmentId);
48		reference.language = language;
49		
50		return reference.toString();
51		
52		//return bible.BibleFormatter.verseCodeToReferenceString(fragmentId, 0);
53	},
54	
55	findFragment: function(fragmentId, content) {
56		return content.find('span.verse[data-osis="' + fragmentId + '"]');
57	},
58	
59	parseString: function(input) {
60		var reference = new bible.Reference(input);
61		
62		if (reference != null) {
63			// make sure the first verse is seleced
64			
65			if (reference.verse1 < 1) {
66				reference.verse1 = 1;
67			}
68			return reference.toOsisVerse(); // not to chapter, to verse
69		} else {
70			return null;
71		}
72	},
73	
74	convertFragmentIdToSectionId: function(fragmentId) {
75		
76		//
77		var parts = fragmentId.split('.'),
78			chapter = parts[0] + '.' + parts[1];
79			
80		
81		return chapter;
82	},
83	
84	getNextSectionId: function(sectionId) {
85		var reference = new bible.Reference(sectionId),
86			nextChapterReference = reference.nextChapter();
87			
88		if (nextChapterReference !== null) {
89			return nextChapterReference.toOsisChapter();
90		} else {
91			return null;
92		}
93		//return bible.BibleFormatter.getNextChapterCode(sectionId);
94	},
95	
96	getPrevSectionId: function(sectionId) {
97		var reference = new bible.Reference(sectionId),
98			prevChapterReference = reference.prevChapter();
99			
100		if (prevChapterReference !== null) {
101			return prevChapterReference.toOsisChapter();
102		} else {
103			return null;
104		}
105	},
106	
107	setupNavigationList: function(document) {
108		document.navigationWindow.on('mouseleave', function() {
109			$(this).hide();
110		});
111		document.navigationWindow.html(
112			'<div class="book-list document-navigation-list"><h3>' + docs.Localizer.get('bible_navigator_books') + '</h3><div class="nav-scroller"><ul></ul></div></div>' +
113			'<div class="chapter-list document-navigation-list"><h3>' + docs.Localizer.get('bible_navigator_chapters') + '</h3><div class="nav-scroller"><ul></ul></div></div>'
114		);
115		
116		// events!
117		document.navigationWindow.on('click', '.book-list li', function() {
118					
119			var li = $(this),
120				chapters =  parseInt(li.attr('data-chapters'), 10),
121				chaptersHtml = "";
122				
123			for (var i= 0; i<chapters; i++) {
124				chaptersHtml += '<li>' + (i+1) + '</li>';
125			}
126			
127			document.navigationWindow.find('.chapter-list ul').html(chaptersHtml);
128			
129			li.addClass('selected').siblings().removeClass('selected');
130		});
131		
132		document.navigationWindow.on('click', '.chapter-list li', function() {
133			
134			var li = $(this),
135				chapterNumber = parseInt(li.html(), 10),
136				bookOsis = li.closest('.document-navigation-window').find('.book-list li.selected').attr('data-osis');
137			
138			console.log(bookOsis + ' ' + chapterNumber);
139				
140			document.navigateByString(bookOsis + ' ' + chapterNumber);
141			document.navigationWindow.hide();
142		});			
143	},
144	
145	showNavigationList: function(document) {
146		
147		// get books
148		var versionInfo = JSON.parse( document.selector.find('option:selected').attr('data-version') );
149			booksHtml = '';
150
151		for (var i in versionInfo.books) {
152			//books += '<li data-osis="' + bible.BOOK_DATA[ versionInfo.books[i] ].chapters.length + '">' + versionInfo.bookNames[i] + '</li>';
153			booksHtml += '<li class="' + versionInfo.code.toLowerCase() + '" data-osis="' + versionInfo.books[i] + '" data-chapters="' + bible.BOOK_DATA[ versionInfo.books[i] ].chapters.length + '">' +
154				//versionInfo.bookNames[i] +
155				bible.BOOK_DATA[ versionInfo.books[i] ].names[versionInfo.language.toLowerCase()][0] + 
156			'</li>';
157		}
158		document.navigationWindow.find('.book-list ul').html(booksHtml);
159		
160		
161		// show
162		var inputPos = document.input.offset(),
163			inputHeight = document.input.outerHeight();
164		
165		document.navigationWindow.css({
166			'top': (inputPos.top + inputHeight) + 'px',
167			'left': (inputPos.left) + 'px'
168		})
169		.show();
170		
171		var reference = new bible.Reference(document.input.val()),
172			bookToSelect = document.navigationWindow.find('.book-list li[data-osis="' + reference.osisBookID + '"]'),
173			selectedBookOffset = bookToSelect.offset(),
174			scroller = document.navigationWindow.find('.book-list .nav-scroller'),
175			scrollerOffset = scroller.offset();
176			
177		scroller.scrollTop( selectedBookOffset.top - scrollerOffset.top - scroller.scrollTop() - 10);
178			
179		bookToSelect.click();		
180	}
181	
182};

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.