the-glorious-startpage/js/dock-buttons.js
2020-06-09 10:02:03 +08:00

125 lines
3.2 KiB
JavaScript

class DockButtons {
constructor() {
this._dock = document.querySelector('#dock');
// Retrieve dockSites object from Config instance
this.dockSites = config.getDockSites();
// Populate dock
this._populateDock();
}
_buildDockButton = (id, className, callback = null) => {
const dockButton = document.createElement('div');
dockButton.id = `button${id}`;
dockButton.className = 'dockButton';
dockButton.onmouseup = callback;
return dockButton;
}
_buildDockButtonImage = (id, className, background) => {
const buttonImage = document.createElement('div');
buttonImage.id = id;
buttonImage.className = className;
buttonImage.style.background = background;
buttonImage.style.backgroundSize = 'cover';
return buttonImage;
}
_generateFromManual = (id, icon, callback) => {
const dockButton = this._buildDockButton(
`button${id}`,
'dockButton',
callback
);
const buttonImage = this._buildDockButtonImage(
`buttonImage${id}`,
'dockButtonImage',
`url('assets/buttons/${icon}.svg')`
);
dockButton.appendChild(buttonImage);
this._dock.appendChild(dockButton);
}
_generateFromList = () => {
for (let i = 0; i < (this.dockSites.length); i++) {
const site = this.dockSites[i].site;
const icon = this.dockSites[i].icon;
const url = this.dockSites[i].url;
// Create a href
const aDock = document.createElement('a');
aDock.className = 'dockLink';
aDock.href = url;
// Create div container
const dockButton = this._buildDockButton(
site,
'dockButton'
);
// Create div container for button icon
const buttonImage = this._buildDockButtonImage(
`buttonImage${i}`,
'dockButtonImage',
`url('assets/webcons/${icon}.svg')`
);
// Append divs
dockButton.appendChild(buttonImage);
aDock.appendChild(dockButton);
this._dock.appendChild(aDock);
};
}
_populateDock = () => {
// Create launcher button
this._generateFromManual(
'Launch',
'launch',
() => {
// Toggle web menu
webMenu.toggleWebMenu();
}
);
// Create dock buttons fetched from sites-list.js
this._generateFromList();
// Create weather button
this._generateFromManual(
'Weather',
'weather',
() => {
// Toggle weather screen
weatherScreen.toggleWeatherScreen();
}
);
// Create menu button
this._generateFromManual(
'Dashboard',
'dashboard',
() => {
// Toggle dashboard
dashboard.toggleDashboard();
}
);
}
}