Merge pull request #695 from fewieden/develop

applied dry pattern
This commit is contained in:
Michael Teeuw 2017-02-08 09:11:02 +01:00 committed by GitHub
commit a43c8a2def
5 changed files with 91 additions and 105 deletions

View File

@ -308,43 +308,36 @@ var MM = (function() {
var setSelectionMethodsForModules = function(modules) { var setSelectionMethodsForModules = function(modules) {
/* withClass(className) /* withClass(className)
* filters a collection of modules based on classname(s). * calls modulesByClass to filter modules with the specified classes.
* *
* argument className string/array - one or multiple classnames. (array or space divided) * argument className string/array - one or multiple classnames. (array or space divided)
* *
* return array - Filtered collection of modules. * return array - Filtered collection of modules.
*/ */
var withClass = function(className) { var withClass = function(className) {
var searchClasses = className; return modulesByClass(className, true);
if (typeof className === "string") {
searchClasses = className.split(" ");
}
var newModules = modules.filter(function(module) {
var classes = module.data.classes.toLowerCase().split(" ");
for (var c in searchClasses) {
var searchClass = searchClasses[c];
if (classes.indexOf(searchClass.toLowerCase()) !== -1) {
return true;
}
}
return false;
});
setSelectionMethodsForModules(newModules);
return newModules;
}; };
/* exceptWithClass(className) /* exceptWithClass(className)
* filters a collection of modules based on classname(s). (NOT) * calls modulesByClass to filter modules without the specified classes.
* *
* argument className string/array - one or multiple classnames. (array or space divided) * argument className string/array - one or multiple classnames. (array or space divided)
* *
* return array - Filtered collection of modules. * return array - Filtered collection of modules.
*/ */
var exceptWithClass = function(className) { var exceptWithClass = function(className) {
return modulesByClass(className, false);
};
/* modulesByClass(className, include)
* filters a collection of modules based on classname(s).
*
* argument className string/array - one or multiple classnames. (array or space divided)
* argument include boolean - if the filter should include or exclude the modules with the specific classes.
*
* return array - Filtered collection of modules.
*/
var modulesByClass = function(className, include) {
var searchClasses = className; var searchClasses = className;
if (typeof className === "string") { if (typeof className === "string") {
searchClasses = className.split(" "); searchClasses = className.split(" ");
@ -356,11 +349,11 @@ var MM = (function() {
for (var c in searchClasses) { for (var c in searchClasses) {
var searchClass = searchClasses[c]; var searchClass = searchClasses[c];
if (classes.indexOf(searchClass.toLowerCase()) !== -1) { if (classes.indexOf(searchClass.toLowerCase()) !== -1) {
return false; return include;
} }
} }
return true; return !include;
}); });
setSelectionMethodsForModules(newModules); setSelectionMethodsForModules(newModules);

View File

@ -203,22 +203,7 @@ var Module = Class.extend({
* argument callback function - Function called when done. * argument callback function - Function called when done.
*/ */
loadStyles: function (callback) { loadStyles: function (callback) {
var self = this; this.loadDependencies("getStyles", callback);
var styles = this.getStyles();
var loadNextStyle = function () {
if (styles.length > 0) {
var nextStyle = styles[0];
Loader.loadFile(nextStyle, self, function () {
styles = styles.slice(1);
loadNextStyle();
});
} else {
callback();
}
};
loadNextStyle();
}, },
/* loadScripts() /* loadScripts()
@ -227,22 +212,32 @@ var Module = Class.extend({
* argument callback function - Function called when done. * argument callback function - Function called when done.
*/ */
loadScripts: function (callback) { loadScripts: function (callback) {
var self = this; this.loadDependencies("getScripts", callback);
var scripts = this.getScripts(); },
var loadNextScript = function () { /* loadDependencies(funcName, callback)
if (scripts.length > 0) { * Helper method to load all dependencies.
var nextScript = scripts[0]; *
Loader.loadFile(nextScript, self, function () { * argument funcName string - Function name to call to get scripts or styles.
scripts = scripts.slice(1); * argument callback function - Function called when done.
loadNextScript(); */
loadDependencies: function (funcName, callback) {
var self = this;
var dependencies = this[funcName]();
var loadNextDependency = function () {
if (dependencies.length > 0) {
var nextDependency = dependencies[0];
Loader.loadFile(nextDependency, self, function () {
dependencies = dependencies.slice(1);
loadNextDependency();
}); });
} else { } else {
callback(); callback();
} }
}; };
loadNextScript(); loadNextDependency();
}, },
/* loadScripts() /* loadScripts()

View File

@ -327,54 +327,54 @@ Module.register("calendar", {
/* symbolForUrl(url) /* symbolForUrl(url)
* Retrieves the symbol for a specific url. * Retrieves the symbol for a specific url.
* *
* argument url sting - Url to look for. * argument url string - Url to look for.
* *
* return string - The Symbol * return string - The Symbol
*/ */
symbolForUrl: function (url) { symbolForUrl: function (url) {
for (var c in this.config.calendars) { return this.getCalendarProperty(url, "symbol", this.config.defaultSymbol);
var calendar = this.config.calendars[c];
if (calendar.url === url && typeof calendar.symbol === "string") {
return calendar.symbol;
}
}
return this.config.defaultSymbol;
}, },
/* colorForUrl(url) /* colorForUrl(url)
* Retrieves the color for a specific url. * Retrieves the color for a specific url.
* *
* argument url sting - Url to look for. * argument url string - Url to look for.
* *
* return string - The Color * return string - The Color
*/ */
colorForUrl: function (url) { colorForUrl: function (url) {
for (var c in this.config.calendars) { return this.getCalendarProperty(url, "color", "#fff");
var calendar = this.config.calendars[c];
if (calendar.url === url && typeof calendar.color === "string") {
return calendar.color;
}
}
return "#fff";
}, },
/* countTitleForUrl(url) /* countTitleForUrl(url)
* Retrieves the name for a specific url. * Retrieves the name for a specific url.
* *
* argument url sting - Url to look for. * argument url string - Url to look for.
* *
* return string - The Symbol * return string - The Symbol
*/ */
countTitleForUrl: function (url) { countTitleForUrl: function (url) {
return this.getCalendarProperty(url, "repeatingCountTitle", this.config.defaultRepeatingCountTitle);
},
/* getCalendarProperty(url, property, defaultValue)
* Helper method to retrieve the property for a specific url.
*
* argument url string - Url to look for.
* argument property string - Property to look for.
* argument defaultValue string - Value if property is not found.
*
* return string - The Property
*/
getCalendarProperty: function (url, property, defaultValue) {
for (var c in this.config.calendars) { for (var c in this.config.calendars) {
var calendar = this.config.calendars[c]; var calendar = this.config.calendars[c];
if (calendar.url === url && typeof calendar.repeatingCountTitle === "string") { if (calendar.url === url && typeof calendar[property] === "string") {
return calendar.repeatingCountTitle; return calendar[property];
} }
} }
return this.config.defaultRepeatingCountTitle; return defaultValue;
}, },
/* shorten(string, maxLength) /* shorten(string, maxLength)

View File

@ -52,6 +52,10 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
var limitFunction = function(date, i) {return i < maximumEntries;}; var limitFunction = function(date, i) {return i < maximumEntries;};
var eventDate = function(event, time) {
return (event[time].length === 8) ? moment(event[time], "YYYYMMDD") : moment(new Date(event[time]));
};
for (var e in data) { for (var e in data) {
var event = data[e]; var event = data[e];
var now = new Date(); var now = new Date();
@ -70,10 +74,10 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
if (event.type === "VEVENT") { if (event.type === "VEVENT") {
var startDate = (event.start.length === 8) ? moment(event.start, "YYYYMMDD") : moment(new Date(event.start)); var startDate = eventDate(event, "start");
var endDate; var endDate;
if (typeof event.end !== "undefined") { if (typeof event.end !== "undefined") {
endDate = (event.end.length === 8) ? moment(event.end, "YYYYMMDD") : moment(new Date(event.end)); endDate = eventDate(event, "end");
} else { } else {
if (!isFacebookBirthday) { if (!isFacebookBirthday) {
endDate = startDate; endDate = startDate;

View File

@ -74,23 +74,18 @@ Module.register("clock",{
if (this.config.timezone) { if (this.config.timezone) {
now.tz(this.config.timezone); now.tz(this.config.timezone);
} }
if (this.config.clockBold === true) {
timeString = now.format("HH[<span class=\"bold\">]mm[</span>]"); var hourSymbol = "HH";
} else { if (this.config.timeFormat !== 24) {
timeString = now.format("HH:mm"); hourSymbol = "h";
} }
if (this.config.timeFormat !== 24) { if (this.config.clockBold === true) {
// var now = new Date(); timeString = now.format(hourSymbol + "[<span class=\"bold\">]mm[</span>]");
// var hours = now.getHours() % 12 || 12; } else {
if (this.config.clockBold === true) { timeString = now.format(hourSymbol + ":mm");
//timeString = hours + moment().format("[<span class=\"bold\">]mm[</span>]");
timeString = now.format("h[<span class=\"bold\">]mm[</span>]");
} else {
//timeString = hours + moment().format(":mm");
timeString = now.format("h:mm");
}
} }
if(this.config.showDate){ if(this.config.showDate){
dateWrapper.innerHTML = now.format("dddd, LL"); dateWrapper.innerHTML = now.format("dddd, LL");
} }
@ -203,30 +198,29 @@ Module.register("clock",{
digitalWrapper.appendChild(dateWrapper); digitalWrapper.appendChild(dateWrapper);
digitalWrapper.appendChild(timeWrapper); digitalWrapper.appendChild(timeWrapper);
var appendClocks = function(condition, pos1, pos2) {
var padding = [0,0,0,0];
padding[(placement === condition) ? pos1 : pos2] = "20px";
analogWrapper.style.padding = padding.join(" ");
if (placement === condition) {
wrapper.appendChild(analogWrapper);
wrapper.appendChild(digitalWrapper);
} else {
wrapper.appendChild(digitalWrapper);
wrapper.appendChild(analogWrapper);
}
};
if (placement === "left" || placement === "right") { if (placement === "left" || placement === "right") {
digitalWrapper.style.display = "inline-block"; digitalWrapper.style.display = "inline-block";
digitalWrapper.style.verticalAlign = "top"; digitalWrapper.style.verticalAlign = "top";
analogWrapper.style.display = "inline-block"; analogWrapper.style.display = "inline-block";
if (placement === "left") {
analogWrapper.style.padding = "0 20px 0 0"; appendClocks("left", 1, 3);
wrapper.appendChild(analogWrapper);
wrapper.appendChild(digitalWrapper);
} else {
analogWrapper.style.padding = "0 0 0 20px";
wrapper.appendChild(digitalWrapper);
wrapper.appendChild(analogWrapper);
}
} else { } else {
digitalWrapper.style.textAlign = "center"; digitalWrapper.style.textAlign = "center";
if (placement === "top") {
analogWrapper.style.padding = "0 0 20px 0"; appendClocks("top", 2, 0);
wrapper.appendChild(analogWrapper);
wrapper.appendChild(digitalWrapper);
} else {
analogWrapper.style.padding = "20px 0 0 0";
wrapper.appendChild(digitalWrapper);
wrapper.appendChild(analogWrapper);
}
} }
} }