BUGFIXES: Fixes a variety of the remaining issues

* css formatting issues
 * upgraded to latest jquery
 * removed requirejs because of incompatibility with jquery mobile
 * multiple bug fixes relating to above
 * search now opens automatically when performing a search
This commit is contained in:
jason.wall 2014-12-25 19:18:38 -05:00
parent 61753ba299
commit f9dc9e5819
10 changed files with 17224 additions and 1814 deletions

View File

@ -1,5 +1,15 @@
a a.link
{ {
font-weight: normal;
color: #000;
text-decoration:none;
border-bottom: 1px dotted darkgray;
_border-bottom: 1px solid lightgray; /* IE */
}
a.hiddenlink
{
font-weight: normal;
color: #000; color: #000;
text-decoration:none; text-decoration:none;
border-bottom: 1px dotted darkgray; border-bottom: 1px dotted darkgray;
@ -47,7 +57,6 @@ a:hover {
{ {
background-color: #fff; background-color: #fff;
} }
#resultwrap { #resultwrap {
float: left; float: left;
font: 18px georgia; font: 18px georgia;

3
css/jquery.mobile-1.4.5.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -8,16 +8,23 @@
<meta name="keywords" content="AJAX, KJV, King James Version, Strong's Dictionary, Strongs" /> <meta name="keywords" content="AJAX, KJV, King James Version, Strong's Dictionary, Strongs" />
<title>The Bible with Strong's Numbers and Cross References</title> <title>The Bible with Strong's Numbers and Cross References</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/jquery.mobile-1.3.2.min.css" />
<link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css" />
<link rel="stylesheet" href="css/themes/db.css" /> <link rel="stylesheet" href="css/themes/db.css" />
<style>@import "css/bible.css";</style> <style>@import "css/bible.css";</style>
<script src="js/jquery-1.9.1.min.js"></script> <script src="js/jquery-1.11.1.min.js"></script>
<script src="js/jquery.mobile-1.3.2.min.js"></script> <script src="js/jquery.ui.js"></script>
<script src="js/jquery.slidePanel.js"></script>
<script src="js/jquery.mobile-1.4.5.js"></script>
<script src="js/reference.js"></script>
<script src="js/common.js"></script>
<script src="js/main.js"></script>
<script data-main="js/main" type="text/javascript" src="js/require-jquery.js"></script>
<style> <style>
.panel-content { padding:3px; } .panel-content { padding:3px; }
@ -27,18 +34,9 @@
.ui-submit .ui-btn-inner .ui-btn-text { font-size: 1.2em;} .ui-submit .ui-btn-inner .ui-btn-text { font-size: 1.2em;}
.ui-submit {height:35px;} .ui-submit {height:35px;}
.ui-block-c div {
/* margin-top: 9px;
.resultbody { max-width: 600px;}
@media all and (min-width: 900px) {
.resultbody {
-webkit-columns: 2;
-moz-columns: 2;
columns: 2;
} }
}
*/
</style> </style>
</head> </head>
<body> <body>
@ -60,7 +58,7 @@
</div><!-- /content --> </div><!-- /content -->
</div> </div>
<div data-role="panel" id="searchpanel" data-theme="a" data-position="right"> <div data-role="panel" id="searchpanel" data-theme="a" data-position="right" data-display="overlay">
<div class="panel-content"> <div class="panel-content">
<h3>Search Results: <span id="searchTotal"></span></h3> <h3>Search Results: <span id="searchTotal"></span></h3>
<div id="searchresults"></div> <div id="searchresults"></div>

View File

@ -1,23 +1,8 @@
(function() {
var CurrentReferences = {}; var CurrentReferences = {};
define(['jquery', 'reference', 'tagging', 'jquery.ui'],
function($, reference, tagging) {
function SortNumeric(x, y) { function SortNumeric(x, y) {
return x - y; return x - y;
} }
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, "");
};
String.prototype.ltrim = function() {
return this.replace(/^\s+/, "");
};
String.prototype.rtrim = function() {
return this.replace(/\s+$/, "");
};
var Util = { var Util = {
HandleLink: function(e) { HandleLink: function(e) {
Search($(e.target).text()); Search($(e.target).text());
@ -97,7 +82,6 @@
var Search = function(sv) { var Search = function(sv) {
try { try {
var qs = sv.split(";"); var qs = sv.split(";");
for (var x in qs) { for (var x in qs) {
var q = qs[x].trim(); var q = qs[x].trim();
if (q != "") { if (q != "") {
@ -105,9 +89,13 @@
if (q.search(/[0-9]/i) == -1) { if (q.search(/[0-9]/i) == -1) {
// get new results. // get new results.
Words.FindReferences(q); Words.FindReferences(q);
$("#searchpanel").panel("open");
} else if (q.search(/(H|G)[0-9]/i) != -1) { } else if (q.search(/(H|G)[0-9]/i) != -1) {
var original_q = q;
// its a strongs lookup // its a strongs lookup
var dict = q.substring(0, 1); var dict = q.substring(0, 1);
if (dict.search(/h/i) != -1) { if (dict.search(/h/i) != -1) {
dict = "heb"; dict = "heb";
} else { } else {
@ -129,12 +117,11 @@
Strongs.DisplayStrongs(results[result]); Strongs.DisplayStrongs(results[result]);
//} //}
} }
CurrentReferences[original_q.toString()] = true;
} else { } else {
// its a verse reference. // its a verse reference.
var passage = "";
if (q.trim() != "") { if (q.trim() != "") {
var myref = reference.Parse(q.trim()); var myref = new Reference(q.trim());
var r = Bible.GetPassage(myref.book, myref.startchapter, myref.endchapter, myref.startverse, myref.endverse); var r = Bible.GetPassage(myref.book, myref.startchapter, myref.endchapter, myref.startverse, myref.endverse);
Bible.DisplayPassage(r.cs, myref, r.testament); Bible.DisplayPassage(r.cs, myref, r.testament);
@ -152,6 +139,9 @@
Util.HandleError(err); Util.HandleError(err);
} }
//$("#searchpanel").removeClass("ui-panel-closed");
//$("#searchpanel").addClass("ui-panel-open");
//$("#searchpanel").trigger("updatelayout");
return false; return false;
}; };
var Settings = { var Settings = {
@ -185,10 +175,11 @@
function(i, ref) { function(i, ref) {
if (ref != undefined && ref.trim() != "") if (ref != undefined && ref.trim() != "")
{ {
var myref = reference.Parse(ref); Search(ref);
var r = Bible.GetPassage(myref.book, myref.startchapter, myref.endchapter, myref.startverse, myref.endverse); //var myref = new Reference(ref);
//var r = Bible.GetPassage(myref.book, myref.startchapter, myref.endchapter, myref.startverse, myref.endverse);
Bible.DisplayPassage(r.cs, myref, r.testament); //Bible.DisplayPassage(r.cs, myref, r.testament);
} }
}); });
} }
@ -231,7 +222,7 @@
SaveResults: function() { SaveResults: function() {
if (typeof localStorage != 'undefined') { if (typeof localStorage != 'undefined') {
var results = ""; var results = "";
for (ref in CurrentReferences) { for (var ref in CurrentReferences) {
results += ref + ';'; results += ref + ';';
} }
localStorage.Results = results; localStorage.Results = results;
@ -276,17 +267,6 @@
} }
} }
var t = $("<div class='passage result'><a href='javascript:void();' class='removeresult' style='border: 0;'><img style='border: 0px;' src='images/delete.png' width='48' height='48' /></a><a href='#' class='trigger left'>&nbsp;</a><div class='tags panel left'></div><span class='resultbody'>" + "<h2><a href='http://www.dynamicbible.com/?r=" + ref.toString() + "'>" + ref.toString() + "</a></h2>" + r + "</span><br clear='all' /></div>"); var t = $("<div class='passage result'><a href='javascript:void();' class='removeresult' style='border: 0;'><img style='border: 0px;' src='images/delete.png' width='48' height='48' /></a><a href='#' class='trigger left'>&nbsp;</a><div class='tags panel left'></div><span class='resultbody'>" + "<h2><a href='http://www.dynamicbible.com/?r=" + ref.toString() + "'>" + ref.toString() + "</a></h2>" + r + "</span><br clear='all' /></div>");
var tagsform = $("<p>Tags: <br /><input type='text' class='input-addtag' /><button class='btn-addtag' type='button'>Update Tags</button></p>");
tagging.GetTags(
ref.toString(), {
success: function(data) {
var ts = data ?
(data.data ?
data.data.tagList : []) : [];
tagsform.find('.input-addtag').val(ts.join(', '));
}});
t.find(".panel").append(tagsform);
Bible.AttachEvents(t, ref); Bible.AttachEvents(t, ref);
$("#result").prepend(t); $("#result").prepend(t);
CurrentReferences[ref.toString()] = true; CurrentReferences[ref.toString()] = true;
@ -492,7 +472,7 @@
$(this).find("r").each(function(j) { $(this).find("r").each(function(j) {
var ref = $(this).attr("r").split(";"); var ref = $(this).attr("r").split(";");
crtxt += "<a href='javascript:void();' class='link'>" + reference.BookName(ref[0]) + " " + ref[1] + ":" + ref[2] + "</a>, "; crtxt += "<a href='javascript:void();' class='link'>" + BookName(ref[0]) + " " + ref[1] + ":" + ref[2] + "</a>, ";
}); });
crtxt = crtxt.substr(0, crtxt.length - 2); crtxt = crtxt.substr(0, crtxt.length - 2);
crtxt += "<br />"; crtxt += "<br />";
@ -595,7 +575,7 @@
var txt = "<h4>Query: <a href='javascript:void();' class='link'>" + q + "</a></h4><ul>"; var txt = "<h4>Query: <a href='javascript:void();' class='link'>" + q + "</a></h4><ul>";
for (var i = 0; i < results.length; i++) { for (var i = 0; i < results.length; i++) {
var r = results[i].split(":"); var r = results[i].split(":");
txt += "<li /><a href='javascript:void();' class='link' alt='" + reference.BookName(r[0]) + " " + r[1] + ":" + r[2] + "'>" + reference.BookName(r[0]) + " " + r[1] + ":" + r[2] + "</a>"; txt += "<li /><a href='javascript:void();' class='link' alt='" + BookName(r[0]) + " " + r[1] + ":" + r[2] + "'>" + BookName(r[0]) + " " + r[1] + ":" + r[2] + "</a>";
} }
txt += "</ul>"; txt += "</ul>";
@ -1034,15 +1014,3 @@
}); });
} }
}; };
return {
Traverse: Traverse,
Search: Search,
Settings: Settings,
Util: Util,
Bible: Bible,
Strongs: Strongs,
Words: Words
};
}
);
})();

4
js/jquery-1.11.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

15454
js/jquery.mobile-1.4.5.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +1,24 @@
require(["jquery", "db", "common", "reference", "jquery.cookie", "jquery.ui", "jquery.slidePanel"],
function($, db, common, ref) {
$(document).ready(function() $(document).ready(function()
{ {
$("#searchvalue").keypress(function(event) { $("#searchvalue").keypress(function(event) {
if (event.which === 13) { if (event.which === 13) {
common.Search($("#searchvalue").val()); Search($("#searchvalue").val());
return false; return false;
} }
}); });
$("#searchbtn").click(function() $("#searchbtn").click(function()
{ {
common.Search($("#searchvalue").val()); Search($("#searchvalue").val());
return false; return false;
}); });
$("#growfont").click(function() $("#growfont").click(function()
{ {
common.Settings.IncreaseResultFontSize(); Settings.IncreaseResultFontSize();
return false; return false;
}); });
$("#shrinkfont").click(function() $("#shrinkfont").click(function()
{ {
common.Settings.DecreaseResultFontSize(); Settings.DecreaseResultFontSize();
return false; return false;
}); });
$("#showhelp").click(function() $("#showhelp").click(function()
@ -34,21 +32,19 @@ require(["jquery", "db", "common", "reference", "jquery.cookie", "jquery.ui", "j
}); });
$("#changefont").change(function() $("#changefont").change(function()
{ {
common.Settings.ChangeResultFont($("#changefont").val()); Settings.ChangeResultFont($("#changefont").val());
return false; return false;
}); });
// load querystring // load querystring
var ref = decodeURIComponent(common.Util.GetUrlVars().r); var ref = decodeURIComponent(Util.GetUrlVars().r);
if (ref !== "undefined") { if (ref !== "undefined") {
// remember the settings, first, because if you have results, the load process would wipe out the passage you want to load. // remember the settings, first, because if you have results, the load process would wipe out the passage you want to load.
common.Settings.Load(); Settings.Load();
// now load the passage from the querystring. // now load the passage from the querystring.
common.Search(ref); Search(ref);
$("#searchvalue").val(ref); $("#searchvalue").val(ref);
} else { } else {
common.Settings.Load(); Settings.Load();
} }
// you need to do this last, otherwise the settings load resets the window height. // you need to do this last, otherwise the settings load resets the window height.
@ -58,19 +54,13 @@ require(["jquery", "db", "common", "reference", "jquery.cookie", "jquery.ui", "j
$(".my-breakpoint.ui-grid-c .ui-block-b").css("width", window.innerWidth - 230); $(".my-breakpoint.ui-grid-c .ui-block-b").css("width", window.innerWidth - 230);
$(".my-breakpoint.ui-grid-c .ui-block-c").css("width", 100); $(".my-breakpoint.ui-grid-c .ui-block-c").css("width", 100);
$(".my-breakpoint.ui-grid-c .ui-block-d").css("width", 55); $(".my-breakpoint.ui-grid-c .ui-block-d").css("width", 55);
$("#searchresults").css("height", window.innerHeight - 100); $("#searchresults").css("height", window.innerHeight - 100);
return false; return false;
}); });
$(".my-breakpoint.ui-grid-c .ui-block-a").css("width", 55); $(".my-breakpoint.ui-grid-c .ui-block-a").css("width", 55);
$(".my-breakpoint.ui-grid-c .ui-block-b").css("width", window.innerWidth - 235); $(".my-breakpoint.ui-grid-c .ui-block-b").css("width", window.innerWidth - 235);
$(".my-breakpoint.ui-grid-c .ui-block-c").css("width", 100); $(".my-breakpoint.ui-grid-c .ui-block-c").css("width", 100);
$(".my-breakpoint.ui-grid-c .ui-block-d").css("width", 55); $(".my-breakpoint.ui-grid-c .ui-block-d").css("width", 55);
$("#searchresults").css("height", window.innerHeight - 100); $("#searchresults").css("height", window.innerHeight - 100);
});
});
});

View File

@ -3,8 +3,6 @@
// Jason@walljm.com // www.walljm.com // Jason@walljm.com // www.walljm.com
// Jeremy@marzhillstudios.com // jeremy.marzhillstudios.com // Jeremy@marzhillstudios.com // jeremy.marzhillstudios.com
define("reference",
function() {
String.prototype.trim = function() { String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, ""); return this.replace(/^\s+|\s+$/g, "");
}; };
@ -17,21 +15,132 @@ define("reference",
return this.replace(/\s+$/, ""); return this.replace(/\s+$/, "");
}; };
function parseReference(ref, r) {
var rest = ParseBook(ref, r.start, r); function Reference(ref)
rest = parseFirstNum(rest, r.start, r); {
rest = maybeParseSecondNum(rest, r.start, r); var r = {
rest = maybeParseRangeSep(rest, r, r); start: {
rest = maybeParseBook(rest, r.end, r); first: '',
rest = maybeParseFirstNumOrVerse(rest, r.end, r); second: ''
rest = maybeParseSecondNum(rest, r.end, r); },
return r; end: {
first: '',
second: ''
}
};
// First collect all our tokens so to speak
this.parseReference(ref.toLowerCase().trim(), r);
this.book = r.start.book;
this.bookname = r.start.bookname;
this.longbookname = r.start.longbookname;
this.startchapter = r.start.first;
this.endchapter = r.start.first;
this.startverse = '1';
// Then start our statemachine.
// Determine start verse
if (r.start.second != '') {
this.startverse = r.start.second;
this.endverse = '*';
}
// Determine possible end verse
if (r.end.second != '') {
this.endverse = r.end.second;
}
// Enforce some general data cleanliness
if (r.end.second != '*' && Number(r.end.second) < Number(r.start.second)) {
this.endverse = this.startverse;
}
// Determine end chapter and verse
if (r.end.first == '') {
if (r.start.second == '' || typeof r.end.book != 'undefined') {
this.endchapter = r.end.second || r.start.first;
this.endverse = '*';
}
} else {
this.endchapter = r.end.first;
}
} }
function ParseBook(ref, data) { function BookName(booknum) {
var book = new Array();
book[0] = "";
book[1] = "Genesis";
book[2] = "Exodus";
book[3] = "Leviticus";
book[4] = "Numbers";
book[5] = "Deuteronomy";
book[6] = "Joshua";
book[7] = "Judges";
book[8] = "Ruth";
book[9] = "1 Samuel";
book[10] = "2 Samuel";
book[11] = "1 Kings";
book[12] = "2 Kings";
book[13] = "1 Chronicles";
book[14] = "2 Chronicles";
book[15] = "Ezra";
book[16] = "Nehemiah";
book[17] = "Esther";
book[18] = "Job";
book[19] = "Psalm";
book[20] = "Proverbs";
book[21] = "Ecclesiastes";
book[22] = "Song of Songs";
book[23] = "Isaiah";
book[24] = "Jeremiah";
book[25] = "Lamentations";
book[26] = "Ezekiel";
book[27] = "Daniel";
book[28] = "Hosea";
book[29] = "Joel";
book[30] = "Amos";
book[31] = "Obadiah";
book[32] = "Jonah";
book[33] = "Micah";
book[34] = "Nahum";
book[35] = "Habakkuk";
book[36] = "Zephaniah";
book[37] = "Haggai";
book[38] = "Zechariah";
book[39] = "Malachi";
book[40] = "Matthew";
book[41] = "Mark";
book[42] = "Luke";
book[43] = "John";
book[44] = "Acts";
book[45] = "Romans";
book[46] = "1 Corinthians";
book[47] = "2 Corinthians";
book[48] = "Galatians";
book[49] = "Ephesians";
book[50] = "Philippians";
book[51] = "Colossians";
book[52] = "1 Thessalonians";
book[53] = "2 Thessalonians";
book[54] = "1 Timothy";
book[55] = "2 Timothy";
book[56] = "Titus";
book[57] = "Philemon";
book[58] = "Hebrews";
book[59] = "James";
book[60] = "1 Peter";
book[61] = "2 Peter";
book[62] = "1 John";
book[63] = "2 John";
book[64] = "3 John";
book[65] = "Jude";
book[66] = "Revelation";
return book[booknum];
}
Reference.prototype.parseBook = function(ref, data) {
ref = ref.toLowerCase().trim(); ref = ref.toLowerCase().trim();
var fbook = ref.substring(0, ref.search(/\w\s+\d/i) + 1); var fbook = ref.substring(0, ref.search(/\w\s+\d/i) + 1);
if (!fbook) fbook = ref; if (!fbook)
fbook = ref;
var rest = ref.slice(ref.search(/\w\s+\d/i) + 1); var rest = ref.slice(ref.search(/\w\s+\d/i) + 1);
if (fbook.search(/\b(genesis|gen|ge|gn)\b/i) != -1) { if (fbook.search(/\b(genesis|gen|ge|gn)\b/i) != -1) {
@ -437,9 +546,9 @@ define("reference",
data.lastchapter = 22; data.lastchapter = 22;
} }
return rest; return rest;
} };
function parseFirstNum(ref, r, errAcc) { Reference.prototype.parseFirstNum = function(ref, r, errAcc) {
ref = ref.ltrim(); ref = ref.ltrim();
var found = false; var found = false;
for (var i = 0; i <= ref.length; i++) { for (var i = 0; i <= ref.length; i++) {
@ -460,9 +569,9 @@ define("reference",
} }
} }
return ""; return "";
} };
function parseSecondNum(ref, r, errAcc, skipColon) { Reference.prototype.parseSecondNum = function(ref, r, errAcc, skipColon) {
ref = ref.toLowerCase().ltrim(); ref = ref.toLowerCase().ltrim();
if (!skipColon) { if (!skipColon) {
if (ref[0] != ":") { if (ref[0] != ":") {
@ -488,167 +597,51 @@ define("reference",
} }
} }
return ""; return "";
} };
function maybeDo(ref, r, errAcc, f) { Reference.prototype.maybeDo = function(ref, r, errAcc, f) {
ref = ref.toLowerCase().ltrim(); ref = ref.toLowerCase().ltrim();
if (ref != "") { if (ref != "") {
return f(ref, r, errAcc); return f(ref, r, errAcc);
} }
return ""; return "";
} };
function maybeParseBook(ref, r, errAcc) { Reference.prototype.maybeParseBook = function(ref, r, errAcc) {
return maybeDo(ref, r, errAcc, ParseBook); var self = this;
} return self.maybeDo(ref, r, errAcc, self.parseBook);
};
function maybeParseSecondNum(ref, r, errAcc, skipColon) { Reference.prototype.maybeParseSecondNum = function(ref, r, errAcc, skipColon) {
return maybeDo(ref, r, errAcc, function (ref, r, errAcc) { var self = this;
return parseSecondNum(ref, r, errAcc, skipColon); return self.maybeDo(ref, r, errAcc, function(ref, r, errAcc) {
return self.parseSecondNum(ref, r, errAcc, skipColon);
}); });
} };
function maybeParseFirstNumOrVerse(ref, r, errAcc) { Reference.prototype.maybeParseFirstNumOrVerse = function(ref, r, errAcc) {
return maybeDo(ref, r, errAcc, function(ref, r, errAcc) { var self = this;
return self.maybeDo(ref, r, errAcc, function(ref, r, errAcc) {
if (typeof r.book != -1) { if (typeof r.book != -1) {
if (ref.search(/:/) != -1) { if (ref.search(/:/) != -1) {
ref = parseFirstNum(ref, r, errAcc); ref = self.parseFirstNum(ref, r, errAcc);
} }
return parseSecondNum(ref, r, errAcc, true); return self.parseSecondNum(ref, r, errAcc, true);
} }
return ""; return "";
}); });
} };
function maybeParseRangeSep(ref, r, errAcc) { Reference.prototype.maybeParseRangeSep = function(ref, r, errAcc) {
return maybeDo(ref.ltrim(), r, errAcc, function(ref, r, errAcc) { var self = this;
return self.maybeDo(ref.ltrim(), r, errAcc, function(ref, r, errAcc) {
if (ref[0] == "-") { if (ref[0] == "-") {
return ref.slice(1).ltrim(); return ref.slice(1).ltrim();
} }
return ""; return "";
}); });
}
function Reference(ref)
{
var r = {
start: {
first: '',
second: ''
},
end: {
first: '',
second: ''
}
}; };
// First collect all our tokens so to speak
parseReference(ref.toLowerCase().trim(), r);
this.book = r.start.book;
this.bookname = r.start.bookname;
this.longbookname = r.start.longbookname;
this.startchapter = r.start.first;
this.endchapter = r.start.first;
this.startverse = '1';
// Then start our statemachine.
// Determine start verse
if (r.start.second != '') {
this.startverse = r.start.second;
this.endverse = '*';
}
// Determine possible end verse
if (r.end.second != '') {
this.endverse = r.end.second;
}
// Enforce some general data cleanliness
if (r.end.second != '*' && Number(r.end.second) < Number(r.start.second)) {
this.endverse = this.startverse;
}
// Determine end chapter and verse
if (r.end.first == '') {
if (r.start.second == '' || typeof r.end.book != 'undefined') {
this.endchapter = r.end.second || r.start.first;
this.endverse = '*';
}
} else {
this.endchapter = r.end.first;
}
}
function BookName(booknum) {
var book = new Array();
book[0] = "";
book[1] = "Genesis";
book[2] = "Exodus";
book[3] = "Leviticus";
book[4] = "Numbers";
book[5] = "Deuteronomy";
book[6] = "Joshua";
book[7] = "Judges";
book[8] = "Ruth";
book[9] = "1 Samuel";
book[10] = "2 Samuel";
book[11] = "1 Kings";
book[12] = "2 Kings";
book[13] = "1 Chronicles";
book[14] = "2 Chronicles";
book[15] = "Ezra";
book[16] = "Nehemiah";
book[17] = "Esther";
book[18] = "Job";
book[19] = "Psalm";
book[20] = "Proverbs";
book[21] = "Ecclesiastes";
book[22] = "Song of Songs";
book[23] = "Isaiah";
book[24] = "Jeremiah";
book[25] = "Lamentations";
book[26] = "Ezekiel";
book[27] = "Daniel";
book[28] = "Hosea";
book[29] = "Joel";
book[30] = "Amos";
book[31] = "Obadiah";
book[32] = "Jonah";
book[33] = "Micah";
book[34] = "Nahum";
book[35] = "Habakkuk";
book[36] = "Zephaniah";
book[37] = "Haggai";
book[38] = "Zechariah";
book[39] = "Malachi";
book[40] = "Matthew";
book[41] = "Mark";
book[42] = "Luke";
book[43] = "John";
book[44] = "Acts";
book[45] = "Romans";
book[46] = "1 Corinthians";
book[47] = "2 Corinthians";
book[48] = "Galatians";
book[49] = "Ephesians";
book[50] = "Philippians";
book[51] = "Colossians";
book[52] = "1 Thessalonians";
book[53] = "2 Thessalonians";
book[54] = "1 Timothy";
book[55] = "2 Timothy";
book[56] = "Titus";
book[57] = "Philemon";
book[58] = "Hebrews";
book[59] = "James";
book[60] = "1 Peter";
book[61] = "2 Peter";
book[62] = "1 John";
book[63] = "2 John";
book[64] = "3 John";
book[65] = "Jude";
book[66] = "Revelation";
return book[booknum];
}
Reference.prototype.toString = function() { Reference.prototype.toString = function() {
var ref = this.bookname.concat(" "). var ref = this.bookname.concat(" ").
concat(this.startchapter).concat(":"). concat(this.startchapter).concat(":").
@ -659,6 +652,7 @@ define("reference",
return ref.concat("-").concat(this.endchapter) return ref.concat("-").concat(this.endchapter)
.concat(":").concat(this.endverse); .concat(":").concat(this.endverse);
}; };
Reference.prototype.toDict = function() { Reference.prototype.toDict = function() {
return { return {
startBook: this.bookname, startBook: this.bookname,
@ -669,10 +663,14 @@ define("reference",
endVerse: this.endverse endVerse: this.endverse
}; };
}; };
return {
Parse: function(ref) {return new Reference(ref);}, Reference.prototype.parseReference = function(ref, r) {
ParseBook: ParseBook, var rest = this.parseBook(ref, r.start, r);
BookName: BookName rest = this.parseFirstNum(rest, r.start, r);
rest = this.maybeParseSecondNum(rest, r.start, r);
rest = this.maybeParseRangeSep(rest, r, r);
rest = this.maybeParseBook(rest, r.end, r);
rest = this.maybeParseFirstNumOrVerse(rest, r.end, r);
rest = this.maybeParseSecondNum(rest, r.end, r);
return r;
}; };
}
);