|
|
- // Utility functions
-
-
- // Namespace
- Util = {};
-
-
- // Activity context handling
- var app;
- Util.context = {
- filter: {category: "", text: "", favorite: false},
- libraries: null,
- library: null,
- favorites: {},
- readtimes: {},
- currentindex: 0
- };
- Util.saveContext = function() {
- if (Util.onSugar() || !app || !app.activity) return;
- var datastoreObject = app.activity.getDatastoreObject();
- var jsonData = JSON.stringify(Util.context);
- datastoreObject.setDataAsText(jsonData);
- //console.log("SAVE CONTEXT <"+jsonData+">");
- datastoreObject.save(function() {});
- };
- Util.loadContext = function(callback, loaded) {
- if (!Util.onSugar()) {
- requirejs(["sugar-web/env"], function (env) {
- env.getEnvironment(function(err, environment) {
- if (environment.objectId) {
- var datastoreObject = app.activity.getDatastoreObject();
- datastoreObject.loadAsText(function (error, metadata, data) {
- //console.log("LOAD CONTEXT <"+data+">");
- var context = JSON.parse(data);
- if (context) {
- Util.context = context;
- app.loadDatabase();
- } else {
- app.loadLibraries();
- }
- callback();
- });
- } else {
- app.loadLibraries();
- }
- });
- });
-
-
- } else {
- Util.context = loaded;
- app.loadDatabase();
- app.hideLibraries();
- }
- };
-
- // Context update
- Util.setFilter = function(newfilter) {
- if (newfilter.favorite !== undefined) Util.context.filter.favorite = newfilter.favorite;
- if (newfilter.category !== undefined) Util.context.filter.category = newfilter.category;
- if (newfilter.text !== undefined) Util.context.filter.text = newfilter.text;
- app.filterChanged();
- }
- Util.getFilter = function() {
- return Util.context.filter;
- }
-
- Util.getCollection = function() {
- var database = Util.database;
- var filter = [];
- for (var i = 0 ; i < database.length ; i++) {
- if (Util.context.filter.favorite && !Util.getFavorite(database[i].id))
- continue;
- if (Util.context.filter.category.length > 0 && database[i].category != Util.context.filter.category )
- continue;
- if (Util.context.filter.text.length > 0 && database[i].title.toLowerCase().indexOf(Util.context.filter.text.toLowerCase()) == -1)
- continue;
- filter.push(database[i]);
- }
- return filter;
- }
-
- Util.setFavorite = function(id, value) {
- if (value)
- Util.context.favorites[id] = value;
- else
- Util.context.favorites[id] = undefined;
- }
- Util.getFavorite = function(id) {
- return Util.context.favorites[id];
- }
-
- Util.setReadTime = function(id, time) {
- if (time)
- Util.context.readtimes[id] = time;
- else
- Util.context.readtimes[id] = undefined;
- }
- Util.getReadTime = function(id) {
- return Util.context.readtimes[id];
- }
-
- Util.database = [];
- Util.categories = [];
- Util.loadLibraries = function(response, error) {
- Util.getLanguage(function(language) {
- var ajax = new enyo.Ajax({
- url: constant.librariesUrl+"?lang="+language,
- method: "GET",
- handleAs: "json"
- });
- ajax.response(function(sender, data) {
- Util.context.libraries = data;
- response();
- });
- ajax.error(error);
- ajax.go();
- });
- }
- Util.loadDatabase = function(response, error) {
- if (Util.context.library == null)
- return;
- Util.getLanguage(function(language) {
- var url = Util.context.library.database.replace(new RegExp("%language%", "g"),language);
- if (document.location.protocol == "https:") {
- url = url.replace("http://", "https://");
- }
- var ajax = new enyo.Ajax({
- url: url,
- method: "GET",
- handleAs: "json"
- });
- ajax.response(function(sender, data) {
- // Store date base loaded
- Util.database = data;
-
- // Store categories
- Util.categories = [];
- for (var i = 0 ; i < data.length ; i++) {
- var category = data[i].category;
- if (category !== undefined) {
- var found = false;
- for (var j = 0 ; !found && j < Util.categories.length ; j++) {
- if (category == Util.categories[j].id) found = true;
- }
- if (!found) Util.categories.push({id: category, title: category});
- }
- }
- app.getFilter().setCategories(Util.categories);
- response(data);
- });
- ajax.error(error);
- ajax.go();
- });
- }
- Util.getDatabase = function() {
- return Util.database;
- }
-
- Util.getVideos = function() {
- return Util.context.library.videos;
- }
- Util.getImages = function() {
- return Util.context.library.images;
- }
-
- Util.setIndex = function(index) {
- Util.context.currentindex = index;
- }
- Util.getIndex = function() {
- return Util.context.currentindex;
- }
-
- Util.setLibrary = function(library) {
- Util.context.library = library;
- }
- Util.getLibrary = function() {
- return Util.context.library;
- }
- Util.addLibrary = function(library) {
- Util.context.libraries.push(library);
- }
- Util.removeLibrary = function(library) {
- if (Util.context.library == library || Util.context.libraries.length == 1)
- return;
- var newlibraries = [];
- for (var i = 0 ; i < Util.context.libraries.length ; i++) {
- if (Util.context.libraries[i] != library)
- newlibraries.push(Util.context.libraries[i]);
- }
- Util.context.libraries = newlibraries;
- }
-
- // Misc
- Util.onSugar = function() {
- var getUrlParameter = function(name) {
- var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
- return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
- };
- return getUrlParameter("onsugar");
- }
-
- Util.getLanguage = function(callback) {
- if (Util.onSugar()) {
- callback(navigator.language);
- return;
- }
- if (typeof chrome != 'undefined' && chrome.app && chrome.app.runtime) {
- chrome.storage.local.get('sugar_settings', function(values) {
- callback(JSON.parse(values.sugar_settings).language);
- });
- } else {
- callback(JSON.parse(localStorage.sugar_settings).language);
- }
- }
-
- // Encoding functions taken from
- // https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
- function uint6ToB64 (nUint6) {
- return nUint6 < 26 ?
- nUint6 + 65 : nUint6 < 52 ?
- nUint6 + 71 : nUint6 < 62 ?
- nUint6 - 4 : nUint6 === 62 ?
- 43 : nUint6 === 63 ?
- 47 : 65;
- }
- Util.toBase64 = function(aBytes) {
- var eqLen = (3 - (aBytes.length % 3)) % 3, sB64Enc = "";
- for (var nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
- nMod3 = nIdx % 3;
- nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);
- if (nMod3 === 2 || aBytes.length - nIdx === 1) {
- sB64Enc += String.fromCharCode(uint6ToB64(nUint24 >>> 18 & 63), uint6ToB64(nUint24 >>> 12 & 63), uint6ToB64(nUint24 >>> 6 & 63), uint6ToB64(nUint24 & 63));
- nUint24 = 0;
- }
- }
- return eqLen === 0 ? sB64Enc : sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? "=" : "==");
- }
|