Files
nightTab/src/js/bookmarks.js
2019-10-20 23:41:12 +01:00

324 lines
7.0 KiB
JavaScript

var bookmarks = (function() {
var mod = {};
mod.all = [{
name: "Cool stuff",
items: [{
display: "icon",
letter: "AS",
icon: {
name: "dice-d20",
prefix: "fas",
label: "Dice D20"
},
name: "awesomeSheet",
url: "https://zombiefox.github.io/awesomeSheet/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453104010
}, {
display: "letter",
letter: "AZ",
icon: {
name: "amazon",
prefix: "fab",
label: "Amazon"
},
name: "Amazon",
url: "https://www.amazon.co.uk/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453107633
}, {
display: "letter",
letter: "GM",
icon: {
name: "envelope",
prefix: "fas",
label: "Envelope"
},
name: "Gmail",
url: "https://mail.google.com/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453110265
}, {
display: "icon",
letter: "R",
icon: {
name: "reddit-alien",
prefix: "fab",
label: "reddit Alien"
},
name: "Reddit",
url: "https://www.reddit.com/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453111491
}, {
display: "icon",
letter: "N",
icon: {
name: "film",
prefix: "fas",
label: "Film"
},
name: "Netflix",
url: "https://www.netflix.com/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453104460
}, {
display: "letter",
letter: "DR",
icon: {
name: null,
prefix: null,
label: null
},
name: "Drive",
url: "https://drive.google.com/drive/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453111953
}]
}, {
name: "Dev sites",
items: [{
display: "icon",
letter: "DEV",
icon: {
name: "code",
prefix: "fas",
label: "Code"
},
name: "Devdocs",
url: "http://devdocs.io/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453101749
}, {
display: "icon",
letter: "GIT",
icon: {
name: "github",
prefix: "fab",
label: "GitHub"
},
name: "Github",
url: "https://github.com/",
accent: {
override: false,
color: {
r: null,
g: null,
b: null
}
},
timeStamp: 1546453108926
}]
}];
mod.get = function(data) {
var _singleBookmark = function() {
var found = false;
if (mod.all.length > 0) {
mod.all.forEach(function(arrayItem, index) {
arrayItem.forEach(function(arrayItem, index) {
if (arrayItem[index].timeStamp === data.timeStamp) {
found = arrayItem[index];
};
});
});
};
return found;
};
if (data && typeof data.timeStamp == "number") {
return _singleBookmark();
} else {
return mod.all;
};
};
mod.restore = function(data) {
if ("bookmarks" in data) {
mod.all = data.bookmarks;
};
};
mod.add = {
link: function(data) {
if (data.position.group.new) {
mod.add.group();
};
mod.all[data.position.destination.group].items.splice(data.position.destination.item, 0, data.link);
},
group: function(data) {
var makeName = function() {
var count = get().length + 1;
return "Group " + count;
};
if (data) {
if (data.group.name == null) {
data.group.name = makeName();
} else if (typeof data.group.name == "string") {
data.group.name = data.group.name.trim();
if (data.group.name == "") {
data.group.name = makeName();
};
};
mod.all.splice(data.position.destination, 0, data.group);
} else {
mod.all.push({
name: makeName(),
items: []
});
};
}
};
mod.edit = {
link: function(data) {
if (data.position.group.new) {
mod.add.group(data);
};
var item = JSON.parse(JSON.stringify(data.link));
mod.all[data.position.origin.group].items.splice(data.position.origin.item, 1);
mod.all[data.position.destination.group].items.splice(data.position.destination.item, 0, item);
},
group: function(data) {
var group = JSON.parse(JSON.stringify(data.group));
mod.all.splice(data.position.origin, 1);
mod.all.splice(data.position.destination, 0, group);
}
};
mod.remove = {
link: function(data) {
mod.all[data.position.origin.group].items.splice(data.position.origin.item, 1);
},
group: function(data) {
mod.all.splice(data.position.origin, 1);
}
};
mod.sort = function(by) {
var action = {
name: function(array) {
return helper.sortObject(array, "name");
},
letter: function(array) {
return helper.sortObject(array, "letter");
},
icon: function(array) {
return helper.sortObject(array, "icon.name");
}
};
mod.all.forEach(function(arrayItem, index) {
arrayItem.items = action[by](arrayItem.items);
});
};
mod.move = {
link: function(data) {
var item = JSON.parse(JSON.stringify(mod.all[data.position.origin.group].items[data.position.origin.item]));
mod.all[data.position.origin.group].items.splice(data.position.origin.item, 1);
mod.all[data.position.destination.group].items.splice(data.position.destination.item, 0, item);
},
group: function(data) {
var group = JSON.parse(JSON.stringify(mod.all[data.position.origin]));
mod.all.splice(data.position.origin, 1);
mod.all.splice(data.position.destination, 0, group);
}
};
mod.count = function() {
var count = 0;
mod.all.forEach(function(arrayItem, index) {
count = count + arrayItem.items.length
});
return count;
};
var count = function() {
return mod.count();
};
var get = function(data) {
return mod.get(data);
};
var sort = function(by) {
mod.sort(by);
};
var remove = {
link: function(data) {
mod.remove.link(data);
},
group: function(data) {
mod.remove.group(data);
}
};
var init = function() {
if (data.load()) {
mod.restore(data.load());
};
};
// exposed methods
return {
init: init,
mod: mod,
get: get,
sort: sort,
count: count,
remove: remove
};
})();