[feature] adding update module

This commit is contained in:
zombieFox
2019-01-06 15:47:08 +00:00
parent c9f05f5c6b
commit 588fc3654d
11 changed files with 142 additions and 66 deletions

View File

@ -286,6 +286,7 @@
<script src="js/helper.js"></script>
<script src="js/data.js"></script>
<script src="js/update.js"></script>
<script src="js/state.js"></script>
<script src="js/bookmarks.js"></script>
<script src="js/control.js"></script>

View File

@ -215,8 +215,7 @@ var bookmarks = (function() {
get: get,
add: add,
edit: edit,
remove: remove,
restore: restore
remove: remove
};
})();

View File

@ -108,7 +108,7 @@ var control = (function() {
_layout();
};
var _dependents = function(options) {
var _dependents = function() {
var _date = function() {
var activeCount = 0;
var toCheck = [state.get().header.date.show.date, state.get().header.date.show.day, state.get().header.date.show.month, state.get().header.date.show.year];

View File

@ -16,6 +16,7 @@ var data = (function() {
var save = function() {
var data = {
version: version.get(),
state: state.get(),
bookmarks: bookmarks.get()
};
@ -28,17 +29,37 @@ var data = (function() {
return data;
};
var _checkForSavedData = function(data) {
if (data) {
console.log("data loaded");
if (!("version" in data) || data.version != version.get()) {
console.log("data version found less than current");
data = update.render(data);
set(saveName, JSON.stringify(data));
} else {
console.log("data version =", version.get());
};
} else {
console.log("no data found to load");
};
};
var init = function() {
_checkForSavedData(load());
};
var wipe = function() {
clear(saveName);
};
return {
init: init,
save: save,
clear: clear,
set: set,
get: get,
wipe: wipe,
load: load
load: load,
wipe: wipe
};
})();

View File

@ -69,16 +69,16 @@ var helper = (function() {
return object;
};
var applyOptions = function(defaultOptions, options) {
if (defaultOptions && options) {
if (options) {
for (var key in options) {
if (key in defaultOptions) {
defaultOptions[key] = options[key];
var applyOptions = function(options, override) {
if (options && override) {
if (override) {
for (var key in override) {
if (key in options) {
options[key] = override[key];
};
};
};
return defaultOptions;
return options;
} else {
return null;
};
@ -156,75 +156,75 @@ var helper = (function() {
return array;
};
function setObject(options) {
var defaultOptions = {
function setObject(override) {
var options = {
path: null,
object: null,
newValue: null
};
if (options) {
var defaultOptions = applyOptions(defaultOptions, options);
if (override) {
var options = applyOptions(options, override);
};
var address = _makeAddress(defaultOptions.path);
var address = _makeAddress(options.path);
var _setData = function() {
while (address.length > 1) {
// shift off and store the first key
var currentKey = address.shift();
// if the key is not found make a new object
if (!(currentKey in defaultOptions.object)) {
if (!(currentKey in options.object)) {
// make an empty object in the current object level
if (isNaN(currentKey)) {
defaultOptions.object[currentKey] = {};
options.object[currentKey] = {};
} else {
defaultOptions.object[currentKey] = [];
options.object[currentKey] = [];
};
};
// drill down the object with the first key
defaultOptions.object = defaultOptions.object[currentKey];
options.object = options.object[currentKey];
};
var finalKey = address.shift();
defaultOptions.object[finalKey] = defaultOptions.newValue;
options.object[finalKey] = options.newValue;
};
if (defaultOptions.object != null && defaultOptions.path != null && defaultOptions.newValue != null) {
if (options.object != null && options.path != null && options.newValue != null) {
_setData();
} else {
return false;
};
};
function getObject(options) {
var defaultOptions = {
function getObject(override) {
var options = {
object: null,
path: null
};
if (options) {
var defaultOptions = applyOptions(defaultOptions, options);
if (override) {
var options = applyOptions(options, override);
};
var address = _makeAddress(defaultOptions.path);
var address = _makeAddress(options.path);
var _getData = function() {
while (address.length > 1) {
// shift off and store the first key
var currentKey = address.shift();
// if the key is not found make a new object
if (!(currentKey in defaultOptions.object)) {
if (!(currentKey in options.object)) {
// make an empty object in the current object level
if (isNaN(currentKey)) {
defaultOptions.object[currentKey] = {};
options.object[currentKey] = {};
} else {
defaultOptions.object[currentKey] = [];
options.object[currentKey] = [];
};
};
// drill down the object with the first key
defaultOptions.object = defaultOptions.object[currentKey];
options.object = options.object[currentKey];
};
var finalKey = address.shift();
if (!(finalKey in defaultOptions.object)) {
if (!(finalKey in options.object)) {
return "";
} else {
return defaultOptions.object[finalKey];
return options.object[finalKey];
};
};
if (defaultOptions.object != null && defaultOptions.path != null) {
if (options.object != null && options.path != null) {
return _getData();
} else {
return false;

View File

@ -1,16 +1,19 @@
// log version
console.log("nightTab v", version.get(), "loaded");
// check for old versions
data.init();
// bind and update controls
// render states
state.init();
// close menu if left open
menu.init();
// restore bookmarks
bookmarks.init();
// close menu if left open
menu.init();
// render input color value
// render css accent var
theme.init();

View File

@ -11,8 +11,8 @@ var modal = (function() {
};
};
var render = function(options) {
var defaultOptions = {
var render = function(override) {
var options = {
heading: "Modal",
content: "Body",
action: null,
@ -20,8 +20,8 @@ var modal = (function() {
cancelText: "Cancel",
size: "medium"
};
if (options) {
defaultOptions = helper.applyOptions(defaultOptions, options);
if (override) {
options = helper.applyOptions(options, override);
};
var makeModal = function() {
var body = helper.e("body");
@ -32,11 +32,11 @@ var modal = (function() {
var modalWrapper = document.createElement("div");
modalWrapper.setAttribute("class", "modal-wrapper");
var modal = document.createElement("div");
if (defaultOptions.size == "large") {
if (options.size == "large") {
modal.setAttribute("class", "modal modal-large");
} else if (defaultOptions.size == "small") {
} else if (options.size == "small") {
modal.setAttribute("class", "modal modal-small");
} else if (defaultOptions.size) {
} else if (options.size) {
modal.setAttribute("class", "modal");
};
modal.destroy = function() {
@ -59,30 +59,30 @@ var modal = (function() {
var actionButton = document.createElement("button");
actionButton.setAttribute("tabindex", "1");
actionButton.setAttribute("class", "button button-primary button-block");
actionButton.textContent = defaultOptions.actionText;
actionButton.textContent = options.actionText;
var cancelButton = document.createElement("button");
cancelButton.setAttribute("tabindex", "1");
cancelButton.setAttribute("class", "button button-primary button-block");
cancelButton.textContent = defaultOptions.cancelText;
cancelButton.textContent = options.cancelText;
modalControls.appendChild(cancelButton);
modalControls.appendChild(actionButton);
if (defaultOptions.heading != null) {
if (options.heading != null) {
var modalHeading = document.createElement("h1");
modalHeading.setAttribute("tabindex", "1");
modalHeading.setAttribute("class", "modal-heading");
modalHeading.textContent = defaultOptions.heading;
modalHeading.textContent = options.heading;
modalBody.appendChild(modalHeading);
};
if (defaultOptions.content) {
if (typeof defaultOptions.content == "string") {
if (options.content) {
if (typeof options.content == "string") {
var container = document.createElement("div");
container.setAttribute("class", "container");
var para = document.createElement("p");
para.textContent = defaultOptions.content;
para.textContent = options.content;
container.appendChild(para);
modalBody.appendChild(container);
} else {
modalBody.appendChild(defaultOptions.content);
modalBody.appendChild(options.content);
};
};
modalWrapper.appendChild(modalBody);
@ -99,8 +99,8 @@ var modal = (function() {
actionButton.addEventListener("click", function(event) {
this.destroy();
shade.destroy();
if (defaultOptions.action) {
defaultOptions.action();
if (options.action) {
options.action();
};
}.bind(modal), false);
cancelButton.addEventListener("click", function(event) {

View File

@ -11,13 +11,13 @@ var shade = (function() {
};
};
var render = function(options) {
var defaultOptions = {
var render = function(override) {
var options = {
action: null,
includeHeader: false
};
if (options) {
defaultOptions = helper.applyOptions(defaultOptions, options);
if (override) {
options = helper.applyOptions(options, override);
};
var _destroy_previousShade = function() {
if (previousShade != null) {
@ -28,7 +28,7 @@ var shade = (function() {
var body = helper.e("body");
var shade = document.createElement("div");
shade.setAttribute("class", "shade");
if (defaultOptions.includeHeader) {
if (options.includeHeader) {
helper.addClass(shade, "m-shade-top");
};
shade.destroy = function() {
@ -49,8 +49,8 @@ var shade = (function() {
}.bind(shade), false);
shade.addEventListener("click", function() {
this.destroy();
if (defaultOptions.action) {
defaultOptions.action();
if (options.action) {
options.action();
};
}, false);
previousShade = shade;

View File

@ -116,8 +116,7 @@ var state = (function() {
return {
init: init,
get: get,
change: change,
restore: restore
change: change
};
})();

52
js/update.js Normal file
View File

@ -0,0 +1,52 @@
var update = (function() {
var _update_100 = function(data) {
var time = new Date().getTime();
data.bookmarks.forEach(function(arrayItem, index) {
time = time + 1;
arrayItem.timeStamp = time;
});
data.version = 1.00;
return data;
};
var _update_200 = function(data) {
state.change({
path: "layout.theme",
value: data.theme
});
data = {
state: state.get(),
bookmarks: data.bookmarks
};
data.version = 2.00;
return data;
};
// var _update_300 = function(data) {
// data.version = 3.00;
// return data;
// };
function render(data) {
if (!("version" in data)) {
console.log("\trunning update", 1.00);
data = _update_100(data);
};
if (data.version < 2.00) {
console.log("\trunning update", 2.00);
data = _update_200(data);
};
// if (data.version < 3.00) {
// console.log("\t# running update", 3.00);
// data = _update_300(data);
// };
return data;
};
// exposed methods
return {
render: render
};
})();

View File

@ -1,9 +1,10 @@
var version = (function() {
var current = 2.0;
var current = "2.0.0";
var get = function() {
return current;
var number = current.split(".");
return parseFloat(number.shift() + "." + number.join(""));
};
// exposed methods