var homeMaker = { makeHeaderContainer: function() { const mainDiv = domMaker.init({ type: "div", id: "homeHeader", className: "hide" }), topHeader = domMaker.init({ type: "div", id: "topHeader", }), bottomHeader = domMaker.init({ type: "div", id: "bottomHeader" }); domMaker.domAppender({ div: topHeader, children: [this.makeTimeContainer(), this.makeStatusBarContainer()] }); bottomHeader.appendChild(this.makeSearchContainer()); topHeader.addEventListener("click", function(e) { if(e.target.id === "topHeader") { if(!e.target.parentElement.nextElementSibling.classList.contains("closed")) { e.target.parentElement.classList.add("hide"); e.target.parentElement.nextElementSibling.classList.add("closed"); e.target.parentElement.nextElementSibling.nextElementSibling.classList.add("closed"); } else { e.target.parentElement.classList.remove("hide"); e.target.parentElement.nextElementSibling.classList.remove("closed"); e.target.parentElement.nextElementSibling.nextElementSibling.classList.remove("closed"); } } }); domMaker.domAppender({ div: mainDiv, children: [topHeader, bottomHeader] }); return mainDiv; }, //Time and Date Related Section populateTimeContainer: function(digitalClock, day, newData) { time.init({ refresh: 30000, twentyfour: newData.isTwentyFourHourTimeEnabled, callback: function(time) { digitalClock.innerHTML = time.hour() + ":" + time.minute(); day.innerHTML = `${time.dayText()}, ${time.date()} ${time.sMonthText()}`; } }); }, makeTimeContainer: function() { const mainDiv = domMaker.init({ type: "div", id: "timeContainer", }), digitalClock = domMaker.init({ type: "div", id: "digitalClock", }), day = domMaker.init({ type: "div", id: "day", }); this.populateTimeContainer(digitalClock, day, api.system); domMaker.domAppender({ div: mainDiv, children: [digitalClock, day] }); return mainDiv; }, //Statusbar Related Section populateStatusbarContainer: function(div, newData) { let signal; let wifi; if(document.getElementById("statusbarSignal")) { div.removeChild(document.getElementById("statusbarSignal")); } if(document.getElementById("statusbarWifi")) { div.removeChild(document.getElementById("statusbarWifi")); } if(newData.wifi.enabled) { wifi = domMaker.init({ type: "img", id: "statusbarWifi", src: "contents/icons/statusIcons/wifi/" + newData.wifi.bars + ".png" }); div.prepend(wifi); } if(newData.telephony.type !== "") { signal = domMaker.init({ type: "img", id: "statusbarSignal", src: "contents/icons/statusIcons/telephony/" + newData.telephony.bars + ".png" }); div.prepend(signal); } }, populateWithBattery: function(div, newData) { let battlevel = Math.ceil((newData.battery.percentage) / 10) * 10; let battery; let batteryChargingURL = lpmMode ? "contents/icons/statusIcons/battery-charging-lpm/" + battlevel + ".png" : "contents/icons/statusIcons/battery-charging/" + battlevel + ".png"; let batteryURL = lpmMode ? "contents/icons/statusIcons/battery-lpm/" + battlevel + ".png" : "contents/icons/statusIcons/battery/" + battlevel + ".png"; switch(newData.battery.state) { case 0: battery = domMaker.init({ type: "img", id: "statusbarBattery", src: batteryURL }); break; case 1: battery = domMaker.init({ type: "img", id: "statusbarBattery", src: batteryChargingURL }); break; default: battery = domMaker.init({ type: "img", id: "statusbarBattery", src: batteryURL }); break; } if(document.getElementById("statusbarBattery")) { div.removeChild(document.getElementById("statusbarBattery")); } div.appendChild(battery); }, makeStatusBarContainer: function() { const mainDiv = domMaker.init({ type: "div", id: "statusbarContainer", }); this.populateStatusbarContainer(mainDiv, api.comms); this.populateWithBattery(mainDiv, api.resources) return mainDiv; }, //Search Related Section makeAppSearchContainer: function() { const mainDiv = domMaker.init({ type: "div", id: "appSearchContainer", className: "closed" }); const appsContainer = domMaker.init({ type: "div", id: "appsContainer", }) appsContainer.addEventListener('touchend', function(el) { let callback = () => { document.getElementById("searchTextField").value = ""; homeMaker.closeAppSearchContainer(); } drawer.openApp(el.target.id, callback); setTimeout(function(){ drawer.animateIcon(false, el.target.id); }, 100); drawer.movedWhilePressing = false; }); appsContainer.addEventListener('touchstart', drawer.animateApp, false); appsContainer.addEventListener('touchmove', () => drawer.movedWhilePressing = true); touchhold.init({ time: 400, element: appsContainer, callback: function(el) { if(!(drawer.switchApp)) { homeMaker.tapHoldAppSearchContainer(el); } }, }); mainDiv.appendChild(appsContainer); return mainDiv; }, tapHoldAppSearchContainer: function(el) { if(el.className === "hsApp") { drawer.invokeMenu = true; drawer.checkIfMenuExists(); homeMaker.makeMenuForAppSearchContainer(el); } }, makeMenuForAppSearchContainer: function(element) { menu.init({ id: element.id + ".Menu", message: element.getAttribute("name"), menuItems: [ { id: "addApp", title: "Add to Homescreen", callback: function() { drawer.invokeMenu = false; if(!localstore['dockFavs'] || localstore['dockFavs'].length !== 8) { let appContainer = document.getElementsByClassName('dockFavs')[0] localstore.addApp('dockFavs', element.id); homeMaker.populateDockContainer(appContainer, api.apps); homeMaker.checkToHide(); } else { alert("Can't add More apps!"); } } }, { id: "deleteApp", title: "Uninstall App", callback: function() { drawer.invokeMenu = false; api.apps.deleteApplication(element.id); drawer.allApplications = api.apps.allApplications; } }, { id: "closeMenu", title: "Cancel", callback: function() { drawer.invokeMenu = false; } } ] }); }, closeAppSearchContainer: function() { let appSearchContainer = document.getElementById("appSearchContainer").firstChild; appSearchContainer.parentElement.classList.add("closed"); setTimeout(() => { appSearchContainer.innerHTML = ""; }, 350); document.getElementById("timeContainer").style.pointerEvents = null; }, populateAppSearch: function(e) { let appSearchContainer = document.getElementById("appSearchContainer"); let div = appSearchContainer.firstChild; let searchString = e.target.value.toLowerCase(); let filteredApps = drawer.allApplications.filter((app) => { return app.name.toLowerCase().includes(searchString); }); if(e.target.value) { if(filteredApps.length > 0) { div.innerHTML = homeMaker.displayApps(filteredApps); setTimeout(() => appSearchContainer.classList.remove("closed"), 350); } else { homeMaker.closeAppSearchContainer(); } } else { homeMaker.closeAppSearchContainer(); } }, redirect: function(e) { if(e.keyCode === 13) { let url = e.target.value, searchEngine; switch(config.searchEngine) { case "Google": searchEngine = 'https://www.google.com/search?q='; break; case "Bing": searchEngine = 'https://www.bing.com/search?q='; break; case "DuckDuckGo": searchEngine = 'https://duckduckgo.com/?q='; break; case "Yahoo": searchEngine = 'https://search.yahoo.com/search?p='; break; case "Youtube": searchEngine = 'https://www.youtube.com/results?search_query=' break; } let regexp = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/; if(e.target.value.substring(0, 8) === "https://" || e.target.value.substring(0,7) === "http://") { window.location = e.target.value; } else if(regexp.test(url)) { let url = `https://${e.target.value}`; window.location = url; } else { window.location = `${searchEngine}${e.target.value}`; } e.target.value = ""; } }, moveUpForTextFieldFocus: function(event) { let offsetFromCenter = event.target.getBoundingClientRect().top - ((screen.height / 2) - 40); if (Math.sign(offsetFromCenter) != -1) { event.target.parentElement.parentElement.style.transform = `translateY(-${offsetFromCenter}px)`; } }, resetMoveUp: function(event) { event.target.parentElement.parentElement.style.transform = null; }, makeSearchContainer: function() { const mainDiv = domMaker.init({ type: "div", id: "searchContainer" }), searchInput = domMaker.init({ type: "input", id: "searchTextField", className: "inputTextField", attribute: ["type", "search"], attribute2: ["placeholder", "Search.."] }), searchIcon = domMaker.init({ type: 'div', id: "searchIcon", className: "inputTextFieldIcons" }); searchInput.addEventListener("focus", (e) => { this.moveUpForTextFieldFocus(e); document.getElementById("timeContainer").style.pointerEvents = "none"; }, false); searchInput.addEventListener("blur", (e) => { this.resetMoveUp(e); homeMaker.closeAppSearchContainer(); e.target.value = ""; }, false); searchInput.addEventListener("keyup", (e) => { homeMaker.populateAppSearch(e); homeMaker.redirect(e); if(!e.target.value) { homeMaker.closeAppSearchContainer(); } }, false) domMaker.domAppender({ div: mainDiv, children: [searchInput, searchIcon] }); return mainDiv; }, //Weather Related Section populateWeatherContainer: function(weatherDiv, weatherDiv2, newData) { weatherDiv.innerHTML = `