diff --git a/js/main.js b/js/main.js
index fde5564d..4e2d2d21 100644
--- a/js/main.js
+++ b/js/main.js
@@ -308,65 +308,58 @@ var MM = (function() {
var setSelectionMethodsForModules = function(modules) {
/* 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)
*
* return array - Filtered collection of modules.
*/
var withClass = function(className) {
- var searchClasses = className;
- 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;
+ return modulesByClass(className, true);
};
/* 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)
*
* return array - Filtered collection of modules.
*/
var exceptWithClass = function(className) {
- var searchClasses = className;
- 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 false;
- }
- }
-
- return true;
- });
-
- setSelectionMethodsForModules(newModules);
- return newModules;
+ 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;
+ 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 include;
+ }
+ }
+
+ return !include;
+ });
+
+ setSelectionMethodsForModules(newModules);
+ return newModules;
+ };
+
/* exceptModule(module)
* Removes a module instance from the collection.
*
diff --git a/js/module.js b/js/module.js
index dfd5f2bc..ffe49416 100644
--- a/js/module.js
+++ b/js/module.js
@@ -203,22 +203,7 @@ var Module = Class.extend({
* argument callback function - Function called when done.
*/
loadStyles: function (callback) {
- var self = this;
- 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();
+ this.loadDependencies("getStyles", callback);
},
/* loadScripts()
@@ -227,24 +212,34 @@ var Module = Class.extend({
* argument callback function - Function called when done.
*/
loadScripts: function (callback) {
- var self = this;
- var scripts = this.getScripts();
-
- var loadNextScript = function () {
- if (scripts.length > 0) {
- var nextScript = scripts[0];
- Loader.loadFile(nextScript, self, function () {
- scripts = scripts.slice(1);
- loadNextScript();
- });
- } else {
- callback();
- }
- };
-
- loadNextScript();
+ this.loadDependencies("getScripts", callback);
},
+ /* loadDependencies(funcName, callback)
+ * Helper method to load all dependencies.
+ *
+ * argument funcName string - Function name to call to get scripts or styles.
+ * argument callback function - Function called when done.
+ */
+ 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 {
+ callback();
+ }
+ };
+
+ loadNextDependency();
+ },
+
/* loadScripts()
* Load all required scripts by requesting the MM object to load the files.
*
diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js
index 72808c1f..70352885 100644
--- a/modules/default/calendar/calendar.js
+++ b/modules/default/calendar/calendar.js
@@ -327,54 +327,54 @@ Module.register("calendar", {
/* symbolForUrl(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
*/
symbolForUrl: function (url) {
- for (var c in this.config.calendars) {
- var calendar = this.config.calendars[c];
- if (calendar.url === url && typeof calendar.symbol === "string") {
- return calendar.symbol;
- }
- }
-
- return this.config.defaultSymbol;
+ return this.getCalendarProperty(url, "symbol", this.config.defaultSymbol);
},
/* colorForUrl(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
*/
colorForUrl: function (url) {
- for (var c in this.config.calendars) {
- var calendar = this.config.calendars[c];
- if (calendar.url === url && typeof calendar.color === "string") {
- return calendar.color;
- }
- }
-
- return "#fff";
+ return this.getCalendarProperty(url, "color", "#fff");
},
+
/* countTitleForUrl(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
*/
countTitleForUrl: function (url) {
- for (var c in this.config.calendars) {
- var calendar = this.config.calendars[c];
- if (calendar.url === url && typeof calendar.repeatingCountTitle === "string") {
- return calendar.repeatingCountTitle;
- }
- }
+ return this.getCalendarProperty(url, "repeatingCountTitle", this.config.defaultRepeatingCountTitle);
+ },
- return 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) {
+ var calendar = this.config.calendars[c];
+ if (calendar.url === url && typeof calendar[property] === "string") {
+ return calendar[property];
+ }
+ }
+
+ return defaultValue;
},
/* shorten(string, maxLength)
diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js
index e24ee004..d5ca075e 100644
--- a/modules/default/calendar/calendarfetcher.js
+++ b/modules/default/calendar/calendarfetcher.js
@@ -52,6 +52,10 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
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) {
var event = data[e];
var now = new Date();
@@ -70,10 +74,10 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
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;
if (typeof event.end !== "undefined") {
- endDate = (event.end.length === 8) ? moment(event.end, "YYYYMMDD") : moment(new Date(event.end));
+ endDate = eventDate(event, "end");
} else {
if (!isFacebookBirthday) {
endDate = startDate;
diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js
index 1882c52e..6824ae8f 100644
--- a/modules/default/clock/clock.js
+++ b/modules/default/clock/clock.js
@@ -74,23 +74,18 @@ Module.register("clock",{
if (this.config.timezone) {
now.tz(this.config.timezone);
}
+
+ var hourSymbol = "HH";
+ if (this.config.timeFormat !== 24) {
+ hourSymbol = "h";
+ }
+
if (this.config.clockBold === true) {
- timeString = now.format("HH[]mm[]");
+ timeString = now.format(hourSymbol + "[]mm[]");
} else {
- timeString = now.format("HH:mm");
+ timeString = now.format(hourSymbol + ":mm");
}
- if (this.config.timeFormat !== 24) {
- // var now = new Date();
- // var hours = now.getHours() % 12 || 12;
- if (this.config.clockBold === true) {
- //timeString = hours + moment().format("[]mm[]");
- timeString = now.format("h[]mm[]");
- } else {
- //timeString = hours + moment().format(":mm");
- timeString = now.format("h:mm");
- }
- }
if(this.config.showDate){
dateWrapper.innerHTML = now.format("dddd, LL");
}
@@ -203,30 +198,29 @@ Module.register("clock",{
digitalWrapper.appendChild(dateWrapper);
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") {
digitalWrapper.style.display = "inline-block";
digitalWrapper.style.verticalAlign = "top";
analogWrapper.style.display = "inline-block";
- if (placement === "left") {
- analogWrapper.style.padding = "0 20px 0 0";
- wrapper.appendChild(analogWrapper);
- wrapper.appendChild(digitalWrapper);
- } else {
- analogWrapper.style.padding = "0 0 0 20px";
- wrapper.appendChild(digitalWrapper);
- wrapper.appendChild(analogWrapper);
- }
+
+ appendClocks("left", 1, 3);
} else {
digitalWrapper.style.textAlign = "center";
- if (placement === "top") {
- analogWrapper.style.padding = "0 0 20px 0";
- wrapper.appendChild(analogWrapper);
- wrapper.appendChild(digitalWrapper);
- } else {
- analogWrapper.style.padding = "20px 0 0 0";
- wrapper.appendChild(digitalWrapper);
- wrapper.appendChild(analogWrapper);
- }
+
+ appendClocks("top", 2, 0);
}
}