|
|
- // Rebase require directory
- requirejs.config({
- baseUrl: "lib"
- });
-
- // Default library url
- var defaultUrlLibrary = (document.location.protocol.substr(0,5)=="https"?"https":"http") + "://sugarizer.org/content/books.php";
-
- // Vue main app
- var app = new Vue({
- el: '#app',
- components: { 'ebook-reader': EbookReader, 'library-viewer': LibraryViewer, 'toolbar': Toolbar, 'localization': Localization, 'popup': Popup, 'tutorial': Tutorial },
- data: {
- currentBook: null,
- currentEpub: null,
- currentView: LibraryViewer,
- currentLibrary: {database: []},
- timer: null
- },
-
- created: function() {
- requirejs(["sugar-web/activity/activity", "sugar-web/env"], function(activity, env) {
- // Initialize Sugarizer
- activity.setup();
- });
- },
-
- mounted: function() {
- // Load last library from Journal
- var vm = this;
- requirejs(["sugar-web/activity/activity", "sugar-web/env"], function(activity, env) {
- env.getEnvironment(function(err, environment) {
- // Use buddy color for background
- env.getEnvironment(function(err, environment) {
- document.getElementById("canvas").style.backgroundColor = environment.user.colorvalue.fill;
- });
-
- // Load context
- if (environment.objectId) {
- activity.getDatastoreObject().loadAsText(function(error, metadata, data) {
- if (error==null && data!=null) {
- var parsed = JSON.parse(data);
- vm.currentLibrary = parsed.library;
- if (parsed.current !== undefined) {
- vm.currentBook = vm.currentLibrary.database[parsed.current];
- vm.currentEpub = ePub(vm.currentLibrary.information.fileprefix+vm.currentBook.file);
- vm.currentView = EbookReader;
- } else if (vm.currentLibrary.database.length == 0) {
- vm.loadLibrary(defaultUrlLibrary);
- }
- document.getElementById("spinner").style.visibility = "hidden";
- }
- });
- } else {
- vm.loadLibrary(defaultUrlLibrary);
- }
- });
- });
-
- // Handle resize
- window.addEventListener("resize", function() {
- vm.onResize();
- });
-
- // Handle unfull screen buttons (b)
- document.getElementById("unfullscreen-button").addEventListener('click', function() {
- vm.unfullscreen();
- });
- },
-
- updated: function() {
- if (this.currentView === EbookReader) {
- this.$refs.view.render(this.currentEpub, this.currentBook.location);
- }
- },
-
- methods: {
-
- localized: function() {
- this.$refs.toolbar.localized(this.$refs.localization);
- this.$refs.tutorial.localized(this.$refs.localization);
- },
-
- loadLibrary: function(url) {
- var vm = this;
- vm.currentLibrary = {database: []};
- defaultUrlLibrary = url;
- document.getElementById("spinner").style.visibility = "visible";
- axios.get(url+"?lang="+vm.$refs.localization.code)
- .then(function(response) {
- vm.currentLibrary = response.data;
- document.getElementById("spinner").style.visibility = "hidden";
- document.getElementById("cloudwarning").style.visibility = "hidden";
- })
- .catch(function(error) {
- document.getElementById("spinner").style.visibility = "hidden";
- document.getElementById("cloudwarning").style.visibility = "visible";
- });
- },
-
- saveContext: function() {
- if (this.currentView === EbookReader) {
- this.currentBook.location = this.$refs.view.getLocation();
- } else {
- this.currentLibrary = this.$refs.view.library;
- }
- },
-
- switchView: function() {
- this.saveContext();
- if (this.currentView === EbookReader) {
- this.currentView = LibraryViewer;
- } else {
- if (this.currentBook) {
- this.currentView = EbookReader;
- }
- }
- },
-
- // Handle fullscreen mode
- fullscreen: function() {
- document.getElementById("main-toolbar").style.opacity = 0;
- document.getElementById("canvas").style.top = "0px";
- document.getElementById("unfullscreen-button").style.visibility = "visible";
- if (this.currentView === EbookReader) {
- var reader = this.$refs.view;
- reader.render(this.currentEpub, reader.getLocation());
- }
- },
- unfullscreen: function() {
- document.getElementById("main-toolbar").style.opacity = 1;
- document.getElementById("canvas").style.top = "55px";
- document.getElementById("unfullscreen-button").style.visibility = "hidden";
- if (this.currentView === EbookReader) {
- var reader = this.$refs.view;
- reader.render(this.currentEpub, reader.getLocation());
- }
- },
-
- // Handling popup settings
- setLibraryUrl: function() {
- var titleOk = this.$refs.localization.get("Ok"),
- titleCancel = this.$refs.localization.get("Cancel"),
- titleSettings = this.$refs.localization.get("Settings"),
- titleUrl = this.$refs.localization.get("Url");
- this.$refs.settings.show({
- content: `
- <div id='popup-toolbar' class='toolbar' style='padding: 0'>
- <button class='toolbutton pull-right' id='popup-ok-button' title='`+titleOk+`' style='outline:none;background-image: url(lib/sugar-web/graphics/icons/actions/dialog-ok.svg)'></button>
- <button class='toolbutton pull-right' id='popup-cancel-button' title='`+titleCancel+`' style='outline:none;background-image: url(lib/sugar-web/graphics/icons/actions/dialog-cancel.svg)'></button>
- <div style='position: absolute; top: 20px; left: 60px;'>`+titleSettings+`</div>
- </div>
- <div id='popup-container' style='width: 100%; overflow:auto'>
- <div class='popup-label'>`+titleUrl+`</div>
- <input id='input' class='popup-input'/>
- </div>`,
- closeButton: false,
- modalStyles: {
- backgroundColor: "white",
- height: "160px",
- width: "600px",
- maxWidth: "90%"
- }
- });
- },
- settingsShown: function() {
- var vm = this;
- document.getElementById('popup-container').style.height = (document.getElementById("popup-toolbar").parentNode.offsetHeight - 55*2) + "px";
- document.getElementById('popup-ok-button').addEventListener('click', function() {
- vm.$refs.settings.close(true);
- });
- document.getElementById('popup-cancel-button').addEventListener('click', function() {
- vm.$refs.settings.close();
- });
- document.getElementById('input').value = defaultUrlLibrary;
- },
- settingsClosed: function(result) {
- if (result) {
- this.loadLibrary(document.getElementById('input').value);
- }
- this.$refs.settings.destroy();
- },
-
- // Handle events
- onBookSelected: function(book) {
- if (this.currentView === LibraryViewer) {
- // Load book
- var vm = this;
- vm.currentBook = book;
- Vue.set(book, 'spinner', true);
- vm.currentEpub = new ePub.Book();
- vm.currentEpub.open(vm.currentLibrary.information.fileprefix+vm.currentBook.file).then(function() {
- vm.currentView = EbookReader;
- book.spinner = false;
- }, function() {
- console.log("Error loading "+vm.currentLibrary.information.fileprefix+vm.currentBook.file);
- book.spinner = false;
- });
- }
- },
-
- onResize: function() {
- var vm = this;
- if (vm.currentView === EbookReader) {
- var reader = vm.$refs.view;
- if (this.timer) {
- window.clearTimeout(this.timer);
- }
- this.timer = window.setTimeout(function() {
- vm.currentBook.location = reader.getLocation();
- reader.render(vm.currentEpub, vm.currentBook.location);
- this.timer = null;
- }, 500);
- }
- },
-
- onHelp: function() {
- var options = {};
- options.switchbutton = this.$refs.toolbar.$refs.switchbutton.$el;
- options.settingsbutton = this.$refs.toolbar.$refs.settings.$el;
- options.fullscreenbutton = this.$refs.toolbar.$refs.fullscreen.$el;
- if (this.currentView === LibraryViewer && this.$refs.view.$refs.item0 && this.$refs.view.$refs.item0[0]) {
- options.book = this.$refs.view.$refs.item0[0].$el;
- } else if (this.currentView === EbookReader) {
- options.prevbutton = document.getElementById("left");
- options.nextbutton = document.getElementById("right");
- }
- this.$refs.tutorial.show(options);
- },
-
- onStop: function() {
- // Save current library in Journal on Stop
- var vm = this;
- vm.saveContext();
- requirejs(["sugar-web/activity/activity"], function(activity) {
- console.log("writing...");
- var context = {
- library: { information:vm.currentLibrary.information, database:vm.currentLibrary.database }
- };
- if (vm.currentView === EbookReader) {
- context.current = vm.currentLibrary.database.indexOf(vm.currentBook);
- }
- var jsonData = JSON.stringify(context);
- activity.getDatastoreObject().setDataAsText(jsonData);
- activity.getDatastoreObject().save(function(error) {
- if (error === null) {
- console.log("write done.");
- } else {
- console.log("write failed.");
- }
- });
- });
- }
- }
- });
|