not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

238 lines
6.4 KiB

// 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 ? "=" : "==");
}