diff --git a/startpage.html b/startpage.html
index 31b5d63..d8cb798 100644
--- a/startpage.html
+++ b/startpage.html
@@ -633,7 +633,7 @@
this.loadSavedContainer();
}
// new text container content,
- else if (imageUrl == "") {
+ else if (imageUrl == undefined) {
this.initializeNewTextContainer();
}
// or new image container content
@@ -643,13 +643,19 @@
this.initializeNewImageContainer();
}
- // apply cosmetic customizations to container
- this.applyContainerSettings();
- // and create container settings UI
+ // apply bookmarks
+ this.loadBookmarks();
+ // then create container options UI in settings menu
this.insertContainerOptionsMenu();
+ this.applyContainerSettings();
+
numberOfContainers++;
}
+ /**
+ * creates a basic container shell and lets
+ * loadBookmarks() and applyContainerSettings() do the rest
+ */
loadSavedContainer() {
document.body.insertAdjacentHTML(
"beforeend",
@@ -658,7 +664,6 @@
`
);
- this.loadBookmarks();
}
/**
@@ -805,7 +810,7 @@
}
/**
- * creates a default image container
+ * creates a default image container (NEED TO IMPLEMENT DEFAULT IMAGE CONTAINER SETTINGS)
*/
initializeNewImageContainer() {
// use default settings
@@ -824,7 +829,7 @@
src="${this.imageUrl}"
draggable=false
/>
-
+
`
);
@@ -842,6 +847,8 @@
initializeNewTextContainer() {
// use default settings
this.containerSettings = defaultTextContainerSettings;
+ // set no sections
+ this.sections = {};
// insert default container HTML
document.body.insertAdjacentHTML(
@@ -895,186 +902,20 @@
}
/*
- * applies saved cosmetic customization options to instance
+ * applies saved cosmetic customizations to container
*/
applyContainerSettings() {
- /** SET POSITION + SIZE INFORMATION */
+ /** set options relevant to both image and text containers */
+ /** POSITION */
document.getElementById(this.id).style.top = this.y;
document.getElementById(this.id).style.left = this.x;
+ /** SIZE */
+ const containerSettings = this.containerSettings;
document.getElementById(this.id).style.width =
- this.width - 2 * parseInt(this.containerSettings.borderWidth);
+ this.width - 2 * parseInt(containerSettings.borderWidth);
document.getElementById(this.id).style.height =
- this.height - 2 * parseInt(this.containerSettings.borderWidth);
-
- let containerSettings = this.containerSettings;
-
- /** BACKGROUND COLOR */
- document.getElementById(this.id).style.backgroundColor =
- containerSettings.backgroundRgba;
- // fill-in settings ui
- document.getElementById(this.id + "-settings-bg-color").value =
- rgbToHex(
- containerSettings.backgroundRgba
- .replace("rgba(", "")
- .slice(0, -1)
- .split(",")
- .splice(0, 3)
- );
- document.getElementById(this.id + "-settings-bg-alpha").value =
- containerSettings.backgroundRgba
- .replace("rgba(", "")
- .slice(0, -1)
- .split(",")[3] * 100;
-
- /**
- *
- *
- * todo
- * separate section and link font?
-
- nah per container is good enough
- *
- *
- *
- *
- * FONT */
- if (containerSettings.sectionFontName == "") {
- document.getElementById(this.id + "-settings-font-name").innerHTML =
- "system default";
- } else {
- document.getElementById(this.id + "-settings-font-name").innerHTML =
- containerSettings.sectionFontName;
- }
- if (containerSettings.sectionFontCode != "") {
- document.head.insertAdjacentHTML(
- "beforeend",
- containerSettings.sectionFontCode
- );
- // fill in settings ui
- document.body.style.fontFamily = containerSettings.sectionFontName;
- }
-
- /** TEXT ALIGNMENT */
- if (containerSettings.centerAlign) {
- document.getElementById(this.id).style.textAlign = "center";
- } else {
- document.getElementById(this.id).style.textAlign = "left";
- }
- // fill-in settings ui
- document.getElementById(this.id + "-settings-left-align").checked =
- !containerSettings.centerAlign;
- document.getElementById(this.id + "-settings-center-align").checked =
- containerSettings.centerAlign;
- /**
- *
- *
- * TODO
- * need to apply container SECTION + LINK customizations + font
- *
- * idea:
- * when generating sections, give class of this.id + 'section'
- * (same for link)
- * then can query for elements by class name here
- *
- *
- *
- */
-
- // fill-in settings ui
- document.getElementById(this.id + "-settings-section-font-name").value =
- containerSettings.sectionFontName;
- document.getElementById(this.id + "-settings-section-color").value =
- containerSettings.sectionColor;
- document.getElementById(this.id + "-settings-section-size").value =
- containerSettings.sectionSize;
- document.getElementById(this.id + "-settings-section-bold").checked =
- containerSettings.sectionBold;
- document.getElementById(this.id + "-settings-section-italic").checked =
- containerSettings.sectionItalic;
-
- document.getElementById(this.id + "-settings-link-color").value =
- containerSettings.linkColor;
- document.getElementById(this.id + "-settings-link-size").value =
- containerSettings.linkSize;
-
- /** BORDER */
- document.getElementById(this.id).style.borderStyle = "solid";
- document.getElementById(this.id).style.borderWidth =
- containerSettings.borderWidth + "px";
- document.getElementById(this.id).style.borderRadius =
- containerSettings.borderRadius + "px";
- document.getElementById(this.id).style.borderColor =
- containerSettings.borderColor;
- // fill-in settings ui
- document.getElementById(this.id + "-settings-border-color").value =
- containerSettings.borderColor;
- document.getElementById(this.id + "-settings-border-width").value =
- containerSettings.borderWidth;
- document.getElementById(this.id + "-settings-border-radius").value =
- containerSettings.borderRadius;
-
- /** CLOCK */
-
- // TODO EITHER SHOW THE CLOCK OR DONT
- if (containerSettings.enableClock) {
- }
- if (containerSettings.enableDate) {
- }
-
- document.getElementById(this.id + "-settings-clock").style.color =
- containerSettings.clockColor;
- document.getElementById(this.id + "-clock").style.fontSize =
- containerSettings.clockSize + "px";
- if (containerSettings.clockBold) {
- document.getElementById(this.id + "-clock").style.fontWeight = "bold";
- }
- if (containerSettings.clockItalic) {
- document.getElementById(this.id + "-clock").style.fontStyle =
- "italic";
- }
- // fill-in settings ui
- document.getElementById(this.id + "-settings-date-toggle").checked =
- containerSettings.enableDate;
- document.getElementById(this.id + "-settings-clock-toggle").checked =
- containerSettings.enableClock;
-
- document.getElementById(this.id + "-settings-clock-color").value =
- containerSettings.clockColor;
- document.getElementById(this.id + "-settings-clock-size").value =
- containerSettings.clockSize;
- document.getElementById(this.id + "-settings-clock-bold").checked =
- containerSettings.clockBold;
- document.getElementById(this.id + "-settings-clock-italic").checked =
- containerSettings.clockItalic;
-
- /** DIVIDER */
- let divider = document.getElementById(this.id + "-divider");
- if (containerSettings.disableDivider) {
- document.getElementById(this.id + "-divider").hidden = true;
-
- /**
- *
- * TODO:
- * need to fix links access here when sections overhaul is done
- *
- * vvvvvvvvvvvvv
- */
-
- if (links.length > 0) {
- document.getElementById(this.id + "-clock").style.marginBottom =
- "18px";
- }
- } else {
- divider.style.color = containerSettings.dividerColor;
- divider.style.backgroundColor = containerSettings.dividerColor;
- divider.style.borderColor = containerSettings.dividerColor;
- }
- // fill-in settings ui
- document.getElementById(this.id + "-settings-divider-toggle").checked =
- containerSettings.disableDivider;
- document.getElementById(this.id + "-settings-divider-color").value =
- containerSettings.dividerColor;
+ this.height - 2 * parseInt(containerSettings.borderWidth);
/** SHADOW / GLOW */
document.getElementById(this.id).style.boxShadow =
@@ -1105,6 +946,150 @@
.replace("rgba(", "")
.slice(0, -1)
.split(",")[3] * 100;
+
+ /** BORDER */
+ document.getElementById(this.id).style.borderStyle = "solid";
+ document.getElementById(this.id).style.borderWidth =
+ containerSettings.borderWidth + "px";
+ document.getElementById(this.id).style.borderRadius =
+ containerSettings.borderRadius + "px";
+ document.getElementById(this.id).style.borderColor =
+ containerSettings.borderColor;
+ // fill-in settings ui
+ document.getElementById(this.id + "-settings-border-color").value =
+ containerSettings.borderColor;
+ document.getElementById(this.id + "-settings-border-width").value =
+ containerSettings.borderWidth;
+ document.getElementById(this.id + "-settings-border-radius").value =
+ containerSettings.borderRadius;
+
+ /** if this is an image container, set the IMAGE SOURCE and then we are done */
+ if (this.imageUrl != undefined) {
+ document.getElementById(this.id).src = this.imageUrl;
+ return;
+ }
+ /** otherwise, this is a text-based container and there are more options to set: */
+
+ /** FONT */
+ if (containerSettings.sectionFontName == "") {
+ document.getElementById(this.id + "-settings-font-name").innerHTML =
+ "system default";
+ } else {
+ document.getElementById(this.id + "-settings-font-name").innerHTML =
+ containerSettings.sectionFontName;
+ }
+ if (containerSettings.sectionFontCode != "") {
+ document.head.insertAdjacentHTML(
+ "beforeend",
+ containerSettings.sectionFontCode
+ );
+ // fill in settings ui
+ document.getElementById(this.id).style.fontFamily =
+ containerSettings.sectionFontName;
+ }
+
+ /** TEXT ALIGNMENT */
+ if (containerSettings.centerAlign) {
+ document.getElementById(this.id).style.textAlign = "center";
+ } else {
+ document.getElementById(this.id).style.textAlign = "left";
+ }
+ // fill-in settings ui
+ document.getElementById(this.id + "-settings-left-align").checked =
+ !containerSettings.centerAlign;
+ document.getElementById(this.id + "-settings-center-align").checked =
+ containerSettings.centerAlign;
+
+ /** SECTION CUSTOMIZATION */
+ // (weight, italic, colors, etc. are all set upon render in loadBookmarks())
+ // fill-in settings ui
+
+ // (FONT NEEDS WORK)
+ // document.getElementById(this.id + "-settings-section-font-name").value =
+ // containerSettings.sectionFontName;
+ document.getElementById(this.id + "-settings-section-color").value =
+ containerSettings.sectionColor;
+ document.getElementById(this.id + "-settings-section-size").value =
+ containerSettings.sectionSize;
+ document.getElementById(this.id + "-settings-section-bold").checked =
+ containerSettings.sectionBold;
+ document.getElementById(this.id + "-settings-section-italic").checked =
+ containerSettings.sectionItalic;
+
+ document.getElementById(this.id + "-settings-link-color").value =
+ containerSettings.linkColor;
+ document.getElementById(this.id + "-settings-link-size").value =
+ containerSettings.linkSize;
+
+ /** BACKGROUND COLOR */
+ document.getElementById(this.id).style.backgroundColor =
+ containerSettings.backgroundRgba;
+ // fill-in settings ui
+ document.getElementById(this.id + "-settings-bg-color").value =
+ rgbToHex(
+ containerSettings.backgroundRgba
+ .replace("rgba(", "")
+ .slice(0, -1)
+ .split(",")
+ .splice(0, 3)
+ );
+ document.getElementById(this.id + "-settings-bg-alpha").value =
+ containerSettings.backgroundRgba
+ .replace("rgba(", "")
+ .slice(0, -1)
+ .split(",")[3] * 100;
+
+ /** CLOCK */
+ // TODO EITHER SHOW THE CLOCK OR DONT
+ if (containerSettings.enableClock) {
+ }
+ if (containerSettings.enableDate) {
+ }
+ document.getElementById(this.id + "-settings-clock").style.color =
+ containerSettings.clockColor;
+ document.getElementById(this.id + "-clock").style.fontSize =
+ containerSettings.clockSize + "px";
+ if (containerSettings.clockBold) {
+ document.getElementById(this.id + "-clock").style.fontWeight = "bold";
+ }
+ if (containerSettings.clockItalic) {
+ document.getElementById(this.id + "-clock").style.fontStyle =
+ "italic";
+ }
+ // fill-in settings ui
+ document.getElementById(this.id + "-settings-date-toggle").checked =
+ containerSettings.enableDate;
+ document.getElementById(this.id + "-settings-clock-toggle").checked =
+ containerSettings.enableClock;
+
+ document.getElementById(this.id + "-settings-clock-color").value =
+ containerSettings.clockColor;
+ document.getElementById(this.id + "-settings-clock-size").value =
+ containerSettings.clockSize;
+ document.getElementById(this.id + "-settings-clock-bold").checked =
+ containerSettings.clockBold;
+ document.getElementById(this.id + "-settings-clock-italic").checked =
+ containerSettings.clockItalic;
+
+ /** DIVIDER */
+ let divider = document.getElementById(this.id + "-divider");
+ if (containerSettings.disableDivider) {
+ document.getElementById(this.id + "-divider").hidden = true;
+ // if there are links in this container, add room under the divider
+ if (Object.keys(this.sections).length > 0) {
+ document.getElementById(this.id + "-clock").style.marginBottom =
+ "18px";
+ }
+ } else {
+ divider.style.color = containerSettings.dividerColor;
+ divider.style.backgroundColor = containerSettings.dividerColor;
+ divider.style.borderColor = containerSettings.dividerColor;
+ }
+ // fill-in settings ui
+ document.getElementById(this.id + "-settings-divider-toggle").checked =
+ containerSettings.disableDivider;
+ document.getElementById(this.id + "-settings-divider-color").value =
+ containerSettings.dividerColor;
}
/**
@@ -1205,45 +1190,61 @@
*/
loadBookmarks() {
let containerSettings = this.containerSettings;
-
let linkContainer = document.getElementById(this.id);
linkContainer.innerHTML = "";
// ensure uncategorized links (if any) stay at top
- const noneSectionIndex = this.sections.indexOf("none");
+ const noneSectionIndex = Object.keys(this.sections).indexOf("none");
if (noneSectionIndex != -1 && noneSectionIndex != 0) {
this.sections.splice(noneSectionIndex, 1);
this.sections.unshift("none");
}
- let sections = this.sections;
// render the sections
+ let sectionNames = Object.keys(this.sections);
let weight = containerSettings.sectionBold ? "bold" : "normal";
let italic = containerSettings.sectionItalic ? "italic" : "normal";
- sections.forEach((section, index) => {
- return linkContainer.insertAdjacentHTML(
+
+ for (let i = 0; i < sectionNames.length; i++) {
+ linkContainer.insertAdjacentHTML(
"beforeend",
`
- ${index == 0 ? "" : `
`}
-