diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/App.css | 16 | ||||
-rw-r--r-- | source/App.js | 28 | ||||
-rw-r--r-- | source/api.js | 38 | ||||
-rw-r--r-- | source/dataView.js | 103 | ||||
-rw-r--r-- | source/main.js | 46 | ||||
-rw-r--r-- | source/package.js | 1 |
6 files changed, 209 insertions, 23 deletions
diff --git a/source/App.css b/source/App.css index 0c4a1fb..20fa076 100644 --- a/source/App.css +++ b/source/App.css @@ -223,6 +223,22 @@ h3, h1 { max-width: 300px; } +/* DATA VIEW */ +.data-view-back { + position: absolute; + left: 0; + margin: 8px 2px 1px; +} + +.data-view-button.active { + border: 2px solid; + border-radius: 5px; +} + +.item-text { + font-size: 0.9em; +} + /* OVERRIDE SOME ONYX SETTINGS */ .onyx-toolbar { padding: 5px; diff --git a/source/App.js b/source/App.js index f324232..1f98230 100644 --- a/source/App.js +++ b/source/App.js @@ -11,12 +11,20 @@ enyo.kind({ fit: true, components: [ {name: "panel", kind: "Panels", fit: true, animate: false, classes: "app-panels", arrangerKind: "CardArranger", draggable: false, onTransitionFinish: "handlePanels", components: [ - {name: "main", kind: "biblez.main", onOpenModuleManager: "openModuleManager", onOpenBC: "openSelector", onModuleChanged: "handleChangeModule", onOpenPreferences: "openPreferences", onOpenNotes: "openNotes"}, + {name: "main", kind: "biblez.main", + onOpenModuleManager: "openModuleManager", + onOpenBC: "openSelector", + onModuleChanged: "handleChangeModule", + onOpenPreferences: "openPreferences", + onOpenNotes: "openNotes", + onOpenDataView: "openDataView" + }, {name: "moduleManager", kind: "biblez.moduleManager", onBack: "handleBack", onInstalled: "handleInstalledModule"}, {name: "bcSelector", kind: "biblez.bcSelector", onSelect: "handlePassageSelect", onBack: "handleBack"}, {name: "moduleManagerDesktop", kind: "biblez.moduleManagerDesktop", onBack: "handleBack", onInstalled: "handleInstalledModule"}, {name: "settings", kind: "biblez.settings", onBack: "handleBack", onChange: "handleSettings"}, - {name: "notes", kind: "biblez.notes", onBack: "handleBack", onChange: "handleNote"} + {name: "notes", kind: "biblez.notes", onBack: "handleBack", onChange: "handleNote"}, + {name: "dataView", kind: "biblez.dataView", onBack: "handleBack", onVerse: "handleVerse"} ]} ], @@ -46,8 +54,11 @@ enyo.kind({ openModuleManager: function (inSender, inEvent) { if(enyo.platform.firefox) this.$.panel.setIndex(3); - else + else { this.$.panel.setIndex(1); + this.$.moduleManager.start(); + } + return true; }, @@ -87,6 +98,17 @@ enyo.kind({ handleNote: function (inSender, inEvent) { this.$.main.handleNote(inSender, inEvent); return true; + }, + + openDataView: function (inSender, inEvent) { + this.$.dataView.setSection(inEvent.section); + this.$.panel.setIndex(6); + }, + + handleVerse: function (inSender, inEvent) { + this.$.main.handlePassage(inEvent.osisRef); + this.$.panel.setIndex(0); + return true; } }); diff --git a/source/api.js b/source/api.js index 832114c..fdd9e22 100644 --- a/source/api.js +++ b/source/api.js @@ -42,7 +42,10 @@ var api = { storeName: "bookmarks", keyPath: 'id', autoIncrement: true, - dbVersion: 1, + dbVersion: 2, + indexes: [ + {name: "osisRef", keyPath: "osisRef", unique: true} + ], onStoreReady: function() { //console.log("isInitialized", self.isInitialized); self.isBmInitialized = true; @@ -66,7 +69,10 @@ var api = { storeName: "highlights", keyPath: 'id', autoIncrement: true, - dbVersion: 1, + dbVersion: 2, + indexes: [ + {name: "osisRef", keyPath: "osisRef", unique: true} + ], onStoreReady: function() { self.isHlInitialized = true; if(inCallback) inCallback(null, self.hlStore); @@ -89,7 +95,10 @@ var api = { storeName: "notes", keyPath: 'id', autoIncrement: true, - dbVersion: 1, + dbVersion: 2, + indexes: [ + {name: "osisRef", keyPath: "osisRef", unique: true} + ], onStoreReady: function() { self.isNoteInitialized = true; if(inCallback) inCallback(null, self.noteStore); @@ -232,6 +241,13 @@ var api = { ); }, + _query: function(inDB, inOptions, inCallback) { + //inOptions["onError"] = function (inError) {inCallback(inError);}; + inDB.query(function (inResults) { + inCallback(null, inResults); + }, inOptions); + }, + get: function (inId, inCallback) { this.wrapper(enyo.bind(this, function (inError, inDB) { if(!inError) this._get(inDB, inId, inCallback); @@ -255,7 +271,7 @@ var api = { getAllBookmarks: function (inCallback) { this.bmWrapper(enyo.bind(this, function (inError, inDB) { - if(!inError) this._getAll(inDB, inCallback); + if(!inError) this._query(inDB, {index: "osisRef"}, inCallback); else inCallback(inError); })); }, @@ -267,6 +283,13 @@ var api = { })); }, + getAllHighlights: function (inCallback) { + this.hlWrapper(enyo.bind(this, function (inError, inDB) { + if(!inError) this._query(inDB, {index: "osisRef"}, inCallback); + else inCallback(inError); + })); + }, + getNote: function (inId, inCallback) { this.noteWrapper(enyo.bind(this, function (inError, inDB) { if(!inError) this._get(inDB, inId, inCallback); @@ -281,6 +304,13 @@ var api = { })); }, + getAllNotes: function (inCallback) { + this.noteWrapper(enyo.bind(this, function (inError, inDB) { + if(!inError) this._query(inDB, {index: "osisRef"}, inCallback); + else inCallback(inError); + })); + }, + getUserData: function(inOsis, inVMax, inCallback) { var z=1, userData = {}; diff --git a/source/dataView.js b/source/dataView.js new file mode 100644 index 0000000..03995ae --- /dev/null +++ b/source/dataView.js @@ -0,0 +1,103 @@ +enyo.kind({ + name: "biblez.dataView", + kind: "enyo.FittableRows", + fit: true, + events: { + onBack: "", + onVerse: "" + }, + published: { + section: "" + }, + components: [ + {name: "messagePopup", kind: "onyx.Popup", centered: true, floating: true, classes: "message-popup"}, + {kind: "onyx.MoreToolbar", layoutKind:"FittableColumnsLayout", components: [ + {kind: "onyx.IconButton", src: "assets/back.png", ontap: "handleBack"}, + {kind: "onyx.RadioGroup", onActivate:"sectionActivated", classes: "center", fit: true, defaultKind: "onyx.IconButton", components: [ + {name: "rbBm", src: "assets/bookmarksTB.png", section: "bookmarks", style: "margin: 0 10px;"}, + {name: "rbNotes", src: "assets/notesTB.png", section: "notes", style: "margin: 0 10px;"}, + {name: "rbHl", src: "assets/highlightsTB.png", section: "highlights", style: "margin: 0 10px;"} + ]}, + ]}, + {name: "dataList", kind: "List", fit: true, touch: true, onSetupItem: "setupItem", components: [ + {name: "item", classes: "item", ontap: "handleListTap", components: [ + {kind: "enyo.FittableRows", components: [ + {name: "itemOsis", classes: ""}, + {name: "itemText", classes: "item-text", allowHtml: true} + ]} + ]} + ]} + ], + + data: [], + + sectionActivated: function (inSender, inEvent) { + if (inEvent.originator.getActive()) { + this.section = inEvent.originator.section; + this.sectionChanged(); + } + }, + + sectionChanged: function (inSender, inEvent) { + if (this.section === "bookmarks") { + this.$.rbBm.setActive(true); + api.getAllBookmarks(enyo.bind(this, function (inError, inData) { + if(!inError) { + this.data = inData; + this.$.dataList.setCount(this.data.length); + this.$.dataList.refresh(); + } else + this.handleError(inError); + })); + } else if (this.section === "notes") { + this.$.rbNotes.setActive(true); + api.getAllNotes(enyo.bind(this, function (inError, inData) { + if(!inError) { + this.data = inData; + this.$.dataList.setCount(this.data.length); + this.$.dataList.refresh(); + } else + this.handleError(inError); + })); + } else if (this.section === "highlights") { + this.$.rbHl.setActive(true); + api.getAllHighlights(enyo.bind(this, function (inError, inData) { + if(!inError) { + this.data = inData; + this.$.dataList.setCount(this.data.length); + this.$.dataList.refresh(); + } else + this.handleError(inError); + })); + } + }, + + setupItem: function(inSender, inEvent) { + var data = this.data[inEvent.index]; + this.$.itemOsis.setContent(api.formatOsis(data.osisRef)); + if(this.section === "highlights") + this.$.item.applyStyle("background-color", data.color); + else + this.$.item.applyStyle("background-color", null); + if(this.section === "notes") + this.$.itemText.setContent(data.text); + else + this.$.itemText.setContent(""); + //this.$.index.setContent(inEvent.index); + }, + + handleListTap: function (inSender, inEvent) { + this.doVerse({osisRef: this.data[inEvent.index].osisRef}); + }, + + handleBack: function() { + this.doBack(); + }, + + handleError: function (inMessage) { + if (inMessage.message) + inMessage = inMessage.message; + this.$.messagePopup.setContent(inMessage); + this.$.messagePopup.show(); + } +});
\ No newline at end of file diff --git a/source/main.js b/source/main.js index f0cd675..26d7f7f 100644 --- a/source/main.js +++ b/source/main.js @@ -7,7 +7,8 @@ enyo.kind({ onOpenPreferences: "", onModuleChanged: "", onOpenBC: "", - onOpenNotes: "" + onOpenNotes: "", + onOpenDataView: "" }, published: { passage: "" @@ -22,9 +23,8 @@ enyo.kind({ {name: "bcPopup", classes: "biblez-bc-popup", kind: "onyx.Popup", modal: true, floating: true, components: [ {kind: "biblez.bcSelector", name: "bcSelector", onSelect: "passageChanged", onBack: "closePopup"} ]}, - {kind: "onyx.MoreToolbar", name: "topTB", components: [ + {kind: "onyx.MoreToolbar", showing: false, name: "topTB", components: [ {name: "moduleSelector", kind: "onyx.MenuDecorator", onSelect: "moduleSelected", components: [ - //{kind: "onyx.IconButton", src: "assets/modules.png"}, {kind: "onyx.Button", name: "btnModules", classes: "tb-button", style: "background-color: #934A15;"}, {kind: "onyx.Menu", name: "moduleMenu"} ]}, @@ -56,14 +56,14 @@ enyo.kind({ ]} ]} ]}, - {kind: "onyx.IconButton", src: "assets/font.png", ontap: "handleFontMenu", style:"position:absolute; right:0;"}, + {name: "btFont", kind: "onyx.IconButton", src: "assets/font.png", ontap: "handleFontMenu", style:"position:absolute; right:0;"}, //{name: "btnPrefs", kind:"onyx.IconButton", src: "assets/settings.png", ontap: "handlePrefs"}, //{name: "plus", kind: "onyx.IconButton", src: "assets/add.png", style:"position:absolute;right:0;", ontap: "doOpenModuleManager"}, /*{kind: "onyx.InputDecorator", components: [ {kind: "onyx.Input", placeholder: "Enter a passage...", onchange: "handlePassage", name: "passageInput", value: "Matt 1"} ]}*/ ]}, - {name: "mainPanel", kind: "Panels", fit: true, ondragfinish: "handleChangeChapter", onTransitionStart: "handlePanelIndex", arrangerKind: "LeftRightArranger", margin: 0, classes: "background", components: [ + {name: "mainPanel", kind: "Panels", fit: true, animate: false, ondragfinish: "handleChangeChapter", onTransitionStart: "handlePanelIndex", arrangerKind: "LeftRightArranger", margin: 0, classes: "background", components: [ {}, {kind: "FittableColumns", noStretch: true, components: [ {fit: true}, @@ -78,6 +78,10 @@ enyo.kind({ {fit: true} ]}, {}, + {name: "firstStart", classes: "center", style: "margin-top: 100px;", components: [ + {content: $L("You have no modules installed. Open the Module Manager to install one."), style: "font-weight: bold; margin-bottom: 20px;"}, + {kind: "onyx.Button", classes: "onyx-affirmative", content: $L("Open Module Manager"), ontap: "doOpenModuleManager"} + ]} ]}, ], @@ -138,14 +142,15 @@ enyo.kind({ sword.moduleMgr.getModules(enyo.bind(this, function(inError, inModules) { if (!inError) { if(inModules.length !== 0) { - this.$.moduleSelector.show(); - this.$.btnPassage.show(); + this.$.mainPanel.setIndex(2); + this.$.mainPanel.draggable = true; + this.$.topTB.show(); this.modules = inModules; this.renderModuleMenu(this.modules); } else { - this.$.moduleSelector.hide(); - this.$.btnPassage.hide(); - this.$.main.setContent("<center>" + $L("You have no modules installed. Tap on the '+' to install one!" + "</center>")); + this.$.topTB.hide(); + this.$.mainPanel.draggable = false; + this.$.mainPanel.setIndex(5); } } else { this.handleError(inError); @@ -213,6 +218,11 @@ enyo.kind({ this.$.spinner.start(); if (typeof passage === "string") { + //BibleZ currently supports only Book.Chapter Osis passages in the mainView + if(passage.split(".").length > 2) { + passage = passage.slice(0, passage.lastIndexOf(".")); + } + this.currentPassage.osis = passage.replace(" ", "."); this.currentPassage.label = passage.replace(".", " "); } @@ -339,14 +349,16 @@ enyo.kind({ }, handleChangeChapter: function (inSender, inEvent) { - if(this.currentModule) { - if(this.panelIndex === 1) { - this.handlePassage(sword.verseKey.previous(this.currentPassage.osis, this.currentModule.config.Versification).osis); - } else if(this.panelIndex === 3) { - this.handlePassage(sword.verseKey.next(this.currentPassage.osis, this.currentModule.config.Versification).osis); + if(this.$.mainPanel.getIndex() !== 5) { + if(this.currentModule) { + if(this.panelIndex === 1) { + this.handlePassage(sword.verseKey.previous(this.currentPassage.osis, this.currentModule.config.Versification).osis); + } else if(this.panelIndex === 3) { + this.handlePassage(sword.verseKey.next(this.currentPassage.osis, this.currentModule.config.Versification).osis); + } } + this.$.mainPanel.setIndexDirect(2); } - this.$.mainPanel.setIndexDirect(2); }, handleVerseTap: function (inSender, inEvent) { @@ -407,6 +419,8 @@ enyo.kind({ this.doOpenModuleManager(); else if(inEvent.originator.action === "preferences") this.doOpenPreferences(); + else + this.doOpenDataView({section: inEvent.originator.action}); }, handlePanelIndex: function (inSender, inEvent) { diff --git a/source/package.js b/source/package.js index 1ff7f76..42060fb 100644 --- a/source/package.js +++ b/source/package.js @@ -13,5 +13,6 @@ enyo.depends( "popup.js", "settings.js", "notes.js", + "dataView.js", "App.js" ); |