var mainlist;
-
-//chrome.tabs.create({ url: chrome.extension.getURL("newtab.html") });
-//window.close();
-
+var rmspan = ["<span class='remove' id='delete-", "'>–</span>"]
document.addEventListener("DOMContentLoaded", function() {
- chrome.storage.sync.get(
-{"lists": [
- [
+ chrome.storage.sync.get(
+ {"lists": [
+ [
["Github", "https://github.com"],
["Wikipedia", "https://en.wikipedia.org"],
["Gmail", "https://mail.google.com"]
- ],
- [
+ ],
+ [
["Desmos", "https://www.desmos.com/calculator"],
["Wolfram", "https://wolframalpha.com"],
["Hacker News", "https://news.ycombinator.com"]
- ],
- [
+ ],
+ [
["Reddit", "https://www.reddit.com"],
["YouTube", "https://youtube.com"],
["Instagram", "https://instagram.com"]
- ]
-],
+ ]
+ ],
"l1name": "General",
"l2name": "Productivity",
"l3name": "Social"},
- userListsCallback);
+ userListsCallback);
});
+function columnToArray(list) {
+ var l = [];
+ var elem = list.getElementsByClassName("item");
+ for (var i = 0; i < elem.length; ++i) {
+ l[i] = [elem[i].innerText, elem[i].getAttribute("href")];
+ }
+ return l;
+}
+
function listToArray(list) {
- var l = [];
- var elem = list.getElementsByTagName("li");
- for (var i = 0; i < elem.length; ++i) {
- l[i] = [elem[i].getElementsByTagName("a")[0].innerText, elem[i].getElementsByTagName("a")[0].getAttribute("href")];
- }
- return l;
+ var l = [];
+ var elem = list.getElementsByTagName("li");
+ for (var i = 0; i < elem.length; ++i) {
+ l[i] = [elem[i].getElementsByTagName("a")[0].innerText, elem[i].getElementsByTagName("a")[0].getAttribute("href")];
+ }
+ return l;
}
var userListsCallback = function(lists) {
- mainlist = [lists["l1name"],lists["l2name"],lists["l3name"]]
- for(var i=0;i<lists["lists"].length;i++) {
- var div = document.createElement("div");
- div.setAttribute("class", "favorites-list users-list");
- document.getElementById("links").appendChild(div);
-
- var ul = document.createElement("ul");
- ul.setAttribute("id", mainlist[i]);
- div.appendChild(ul);
-
- var title = document.createElement("div");
- title.setAttribute("class", "title");
- ul.appendChild(title);
-
- var p = document.createElement("p");
- p.innerText = mainlist[i];
- title.appendChild(p);
-
- title.insertAdjacentHTML("beforeend", "<span id='add-"+mainlist[i]+"'>+</span>");
-
- var list = lists["lists"][i];
- for(var j=0;j<lists["lists"][i].length;j++) {
- var li = document.createElement("li");
- li.setAttribute("id", mainlist[i]+"-"+j);
- var siteurl = list[j][1];
- var name = list[j][0];
- // ronmurphy change start
- var img = document.createElement("img");
- img.className = "icon";
- img.src = "http://www.google.com/s2/favicons?domain="+siteurl+"";
- li.insertAdjacentHTML("beforeend", "<a href="+siteurl+"> <img src="+img.src+" alt="+extractDomain(siteurl,1)+"/> "+name+"</a>");
- // ronmurphy end
- //li.insertAdjacentHTML("beforeend", "<a href="+siteurl+">"+name+"</a>");
- li.insertAdjacentHTML("beforeend", "<span id='delete-"+j+"-"+mainlist[i]+"'>⨯</span>");
- ul.appendChild(li);
- }
-
- var sortable = Sortable.create(ul, {
- group: "userlists",
- onUpdate: function (evt) {
- save();
- }
- });
- }
-
- menu();
+ mainlist = [lists["l1name"],lists["l2name"],lists["l3name"]]
+ for(var i=0;i<lists["lists"].length;i++) {
+ var ul = document.createElement("ul");
+ ul.setAttribute("id", mainlist[i]);
+ document.getElementById("links").appendChild(ul);
+
+ var title = document.createElement("div");
+ title.setAttribute("class", "title");
+ ul.appendChild(title);
+
+ var p = document.createElement("p");
+ p.innerText = mainlist[i];
+ title.appendChild(p);
+
+ title.insertAdjacentHTML("beforeend", "<span class='add' id='add-"+mainlist[i]+"'>+</span>");
+
+ var list = lists["lists"][i];
+ for(var j=0;j<lists["lists"][i].length;j++) {
+ var li = document.createElement("li");
+ li.setAttribute("id", mainlist[i]+"-"+j);
+ var siteurl = list[j][1];
+ var name = list[j][0];
+ var img = document.createElement("img");
+ img.className = "icon";
+ img.src = "http://www.google.com/s2/favicons?domain="+siteurl+"";
+ li.insertAdjacentHTML("beforeend", "<a class='item' href="+siteurl+"><img src="+img.src+" alt="+extractDomain(siteurl,1)+"/> "+name+"</a>");
+ li.insertAdjacentHTML("beforeend", rmspan[0] + j + "-" + mainlist[i] + rmspan[1]);
+ ul.appendChild(li);
+ }
+
+ var sortable = Sortable.create(ul, {
+ group: "userlists",
+ onUpdate: function (evt) {
+ save();
+ }
+ });
+ }
+
+ menu();
};
+document.onkeyup=function(e){
+ var e = e || window.event; // for IE to cover IEs window event-object
+ fields = document.getElementsByClassName("new");
+ if(e.which == 27 && fields != null) {
+ fields[fields.length-1].remove();
+ return false;
+ }
+ if(e.which == 27 && fields != null) {
+ fields[fields.length-1].remove();
+ return false;
+ }
+}
+
function listen(li) {
- li.addEventListener('click', function(event){
- var r = event.target.id.split("-");
- if (r[0] == "delete") {
- var el = document.getElementById(r[2]+"-"+r[1]);
- el.outerHTML = "";
- delete el;
- save();
- } else {
- var ul = document.getElementById(r[1]);
- ul.insertAdjacentHTML("beforeend", "<div class='inp' id='div-"+listToArray(ul).length.toString()+"'><input style='width:35%' type='text' class='name' value='' placeholder='name'><input style='width:47%' type='text' class='url' value='' placeholder='url' id='form-"+listToArray(ul).length.toString()+"'><a id='input-"+listToArray(ul).length.toString()+"'>✔</a></div>");
- var inp = document.getElementById("div-"+listToArray(ul).length.toString());
- var span = document.getElementById("input-"+listToArray(ul).length.toString());
- var form = document.getElementById("form-"+listToArray(ul).length.toString());
-
- form.addEventListener('keyup', function(event){
- if (event.keyCode == 13) {
- span.click();
- }
- });
-
- span.addEventListener('click', function(event){
- inp.outerHTML = "";
- delete inp;
-
- if (inp.getElementsByClassName("name")[0].value != "" || inp.getElementsByClassName("url")[0].value != "") {
- var li = document.createElement("li");
- li.setAttribute("id",r[1]+"-"+listToArray(ul).length.toString());
- //var splitted = splitHostname(inp.getElementsByClassName("url")[0].value); fix later
- var siteurl = addhttp(inp.getElementsByClassName("url")[0].value);
- var name = inp.getElementsByClassName("name")[0].value;
-
- li.insertAdjacentHTML("beforeend", "<a href="+siteurl+">"+name+"</a>");
- li.insertAdjacentHTML("beforeend", "<span id='delete-"+listToArray(ul).length.toString()+"-"+r[1]+"'>-</span>");
- document.getElementById(r[1]).appendChild(li);
- save();
- listen(li);
- }
- });
- }
- }, false);
+ li.addEventListener('click', function(event){
+ var r = event.target.id.split("-");
+ if (r[0] == "delete") {
+ var el = document.getElementById(r[2]+"-"+r[1]);
+ el.outerHTML = "";
+ delete el;
+ save();
+ } else {
+ var ul = document.getElementById(r[1]);
+ var li = document.createElement("li");
+ li.setAttribute("class", "new");
+ li.insertAdjacentHTML("beforeend", "<span class='save' tabindex='3' id='input-"+columnToArray(li).length.toString()+"'>✔</span><input type='text' class='name' value='' placeholder='name' tabindex='1'><br /><input type='text' class='url' value='' placeholder='url' tabindex='2' id='form-"+columnToArray(li).length.toString()+"'>");
+ ul.appendChild(li);
+ var span = document.getElementById("input-"+columnToArray(li).length.toString());
+ var form = document.getElementById("form-"+columnToArray(li).length.toString());
+ var name = document.getElementsByClassName("name")[0].focus();
+ span.addEventListener('click', function(event){
+ var li = document.getElementsByClassName("new")[0]
+ var ul = li.parentNode;
+ if (li.getElementsByClassName("name")[0].value != "" || li.getElementsByClassName("url")[0].value != "") {
+ var newli = document.createElement("li");
+ newli.setAttribute("id",r[1]+"-"+columnToArray(ul).length.toString());
+ var siteurl = addhttp(li.getElementsByClassName("url")[0].value);
+ var name = li.getElementsByClassName("name")[0].value;
+ li.remove()
+ delete li;
+
+ newli.insertAdjacentHTML("beforeend", "<a href="+siteurl+">"+name+"</a>");
+ newli.insertAdjacentHTML("beforeend", rmspan[0]+columnToArray(ul).length.toString()+"-"+r[1]+rmspan[1]);
+ document.getElementById(r[1]).appendChild(newli);
+ save();
+ listen(newli);
+ }
+ });
+ span.addEventListener('keypress', function(e) {
+ if (e.keyCode == 13) {
+ span.click();
+ }
+ });
+ }
+ }, false);
}
function menu() {
- var allUserLi = document.querySelectorAll('.users-list > ul > li > span, .users-list > ul > .title > span');
+ var allUserLi = document.querySelectorAll('.remove, .add');
- allUserLi.forEach(function(li, p_index){
- listen(li);
- });
+ allUserLi.forEach(function(li, p_index){
+ listen(li);
+ });
}
function save(l) {
- var set = l || JSON.parse(JSON.stringify(mainlist));
- d = []
- d = set;
- for (var i = 0; i < set.length; ++i) {
- e = document.getElementById(set[i]);
- d[i] = listToArray(e);
- }
- chrome.storage.sync.set( {"lists": d} );
+ var set = l || JSON.parse(JSON.stringify(mainlist));
+ d = []
+ d = set;
+ console.log("Saving settings");
+ for (var i = 0; i < set.length; ++i) {
+ d[i] = listToArray(document.getElementById(set[i]));
+ }
+ chrome.storage.sync.set( {"lists": d} );
}
-img {
- float: left;
- margin-top: 1px;
- padding-right: 3px;
-}
-
-#search-form > input#search-box:-webkit-autofill {
- -webkit-box-shadow: 0 0 0 1000px #222 inset !important;
- -webkit-text-fill-color: #b5b5a4 !important;
-}
-
-#callback {
- bottom: 0;
- position: absolute;
- height: 115px;
- width: 31.1rem;
-}
-
-#search3 {
- margin-top: -1.5rem;
-}
-
-#wikires > a {
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- margin-bottom: 0.5em;
- height: 19px;
- display: block;
- color: inherit;
- text-decoration: none;
-}
-
-#duckduckres > a {
- margin-bottom: 0.5em;
- display: block;
- color: inherit;
- text-decoration: none;
+html, body {
+ font-size: 16px !important;
+ width: 100%;
+ height: 100%;
}
-#topsites-list {
- display: none;
+body {
+ margin: 0;
+ color: #D8DEE9;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
}
-#search1.active {
- margin-bottom: 2em;
+.favorites {
+ display: flex;
+ flex-direction: row;
+ display: -webkit-flex;
+ -webkit-flex-direction: row;
}
-#search2.active {
- margin-top: 2em;
+ul {
+ list-style: none;
+ padding: 0;
+ width: 10rem;
+ margin: 0.5rem 2em 2em 2em;
}
-.name {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- width: 63px;
+img {
+ float: left;
+ margin-top: 1px;
+ padding-right: 3px;
}
-.url {
- width: 100px;
+input {
+ font-size: 16px !important;
+ padding: 0;
+ height: 18.5px;
+ width: 112px;
+ margin: 5px;
}
-.inp {
- width: 200px;
- padding: 10px 0;
+input.name {
+ margin-bottom: 2.5px
}
-.inp > input {
- font-size: 16px !important;
+input.url {
+ margin-top: 2.5px
}
-.users-list > ul > li > span {
- width: 10px;
- height: 25px;
- padding: 4px 5px 0 10px;
+.remove {
+/* width: 9px;
+ height: 29px;
+ padding: 6px 10px 0 10px;*/
+ width: 29px;
+ height: 35px;
+ padding: 0;
background: #434C5E;
float: right;
- display: none;
+ text-align: center;
+ justify-content: center;
+ align-items: center;
cursor: pointer;
- padding-top: 10px;
-}
-
-.users-list > ul > li > span:hover {
- background: #BF616A;
+ font-family: monospace;
+ display: flex;
}
-.users-list > ul > .inp > a {
- width: 10px;
- height: 18px;
- display: inline-block;
- background: #434C5E;
- padding: 3px 6px 3px 3px;
+.save {
+ padding-left: 8px;
+ float: right;
+ height: 60px;
+ width: 21px;
+ display: flex;
+ text-align: center;
+ align-items: center;
cursor: pointer;
}
-.users-list > ul > .inp > a:hover, .users-list > ul > .inp > a:focus {
+.save:hover, .save:focus, .save:focus-within {
background: #A3BE8C;
}
-.users-list > ul > li:hover > span {
- display: inline-block;
-}
-
-.users-list > ul > .title:hover > span {
- display: inline-block;
-}
-
-.users-list > ul {
- margin: 0;
+.remove:hover {
+ background: #BF616A;
}
-.users-list > ul > .title > span {
+.add {
+ background-color: #434C5E;
margin-top: 14px;
- font-size: 75% !Important;
- font-weight: normal;
- color: black;
- width: 10px;
- content: "+";
- padding: 6px 6px 5px 9px;
- background: #b5b5a4;
+ width: 29px;
+ height: 29px;
+ padding: 0;
+ justify-content: center;
+ align-items: center;
float: right;
display: none;
cursor: pointer;
}
-.users-list > ul > .title > span {
- background-color: #434C5E;
-}
-
-.users-list > ul > .title > span:hover {
+.add:hover {
background-color: #A3BE8C !important;
}
-.users-list > ul > li > a, .users-list > ul > .title > p {
- width: calc(100% - 45px);
- display: inline-block;
-}
-
-div#apps {
- overflow-x: scroll;
+.title:hover > .add {
display: flex;
- width: 907px;
- align-content: flex-start;
- justify-content: flex-start;
}
-::-webkit-scrollbar
-{
- width: 12px; /* for vertical scrollbars */
- height: 12px; /* for horizontal scrollbars */
-}
-
-::-webkit-scrollbar-track
-{
- background: rgba(0, 0, 0, 0);
-}
-
-::-webkit-scrollbar-thumb
-{
- background: rgba(0, 0, 0, 0.2);
-}
-
-li.sortable-chosen.sortable-ghost > a {
- background-color: white;
- color: #2A313B !important;
-}
-
-
-.title > p {
- width: 160px;
- margin-left: 0.5rem;
- margin-bottom: 0.5rem !important;
-}
-.app {
- cursor: pointer;
- text-align: center;
- margin: 16px;
-}
-
-.app > .image {
- width: 64px;
- padding: 8px;
-}
-
-html, body {
- font-family: Roboto !important;
- font-size: 16px !important;
- width: 100vw;
- height: 100vh;
-}
-
-body {
- width: 100%;
- height: 100%;
- margin: 0;
- color: #D8DEE9;
-}
-
-.container {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- width: 100%;
- height: 100%;
-}
-
-.favorites {
+.title:hover .add:not(:hover),
+li:hover > .remove:not(:hover) {
display: flex;
- flex-direction: row;
+ background-color: #434c5e;
}
-.favorites-list {
- width: 10rem;
- margin: 0.5rem 2em 2em 2em;
+li:hover > a, li > a:focus, li > a:focus-within {
+ display: inline-block;
+ background-color: #434c5e;
}
-ul {
- list-style: none;
- padding: 0;
+li:hover {
+ background-color: #434c5e;
}
-.title {
- margin-bottom: 0.5rem;
- font-weight: bold;
- text-align: left;
- border-bottom: 1px solid #434C5E;
-}
-
-ul > li > a {
+a {
color: inherit;
outline: none;
display: block;
text-decoration: none;
padding: 0.5rem;
+ height: 19px;
}
-ul > li > a:hover {
- background-color: #434C5E;
-}
-
-.search.active {
- width: 30rem;
- padding: 0.5rem;
- border: 1px solid #434C5E;
+.remove:not(:hover) {
+ display: none;
}
-#search-box {
- font-size: inherit;
- width: 100%;
- margin: auto;
- padding: 0;
- background-color: rgba(0, 0, 0, 0);
- color: #434C5E;
- border: none;
+a, ul > .title > p {
+ width: calc(100% - 45px);
+ display: inline-block;
}
-#search-box:focus {
- outline: none;
+li.sortable-chosen.sortable-ghost > a {
+ background-color: white;
+ color: #2A313B !important;
}
-
-/* webkit compat */
-
-.container {
- display: -webkit-flex;
- -webkit-flex-direction: column;
- -webkit-align-items: center;
- -webkit-justify-content: center;
+.title {
+ margin-bottom: 0.5rem;
+ font-weight: bold;
+ text-align: left;
+ border-bottom: 1px solid #434C5E;
}
-.favorites {
- display: -webkit-flex;
- -webkit-flex-direction: row;
+.title p {
+ width: 160px;
+ margin-left: 0.5rem;
+ margin-bottom: 0.5rem !important;
}