From a3941843b182ee683294bafa23e7df9e07a97ea1 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sat, 6 Sep 2014 23:37:58 -0500 Subject: [PATCH] Added an enable/disable feature. --- Makefile | 2 +- build-number.txt | 2 +- src/www/index.html | 4 + src/www/js/personal-display.js | 162 ++++++++++++++++++++------------- 4 files changed, 104 insertions(+), 66 deletions(-) diff --git a/Makefile b/Makefile index b3c3ba1..1702622 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ build : increment-build-number mkdir -p build/js cp src/www/*.* build cp -r resources/* build/. - cp src/www/js/personal-display.js build/js/personal-display-$(VERSION).$(BUILD_NUMBER)js + cp src/www/js/personal-display.js build/js/personal-display-$(VERSION).$(BUILD_NUMBER).js sed -i "s/%VERSION%/$(VERSION).$(BUILD_NUMBER)/g" build/index.html sass src/www/css/personal-display.scss build/css/personal-display.css tar czf personal-display-$(VERSION).$(BUILD_NUMBER).tar.gz build diff --git a/build-number.txt b/build-number.txt index 7ed6ff8..d6b2404 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -5 +19 diff --git a/src/www/index.html b/src/www/index.html index b2f5efa..ab0d932 100644 --- a/src/www/index.html +++ b/src/www/index.html @@ -46,6 +46,8 @@
TimeStamper +
+
@@ -59,6 +61,8 @@
Getting Things Done +
+
diff --git a/src/www/js/personal-display.js b/src/www/js/personal-display.js index 01134f4..6f24d5b 100644 --- a/src/www/js/personal-display.js +++ b/src/www/js/personal-display.js @@ -110,12 +110,13 @@ "change .gtd-config .category" : "addCategory", "click .remove-button" : "removeCategory", - "click .save-button" : "saveAndClose" }, + "click .save-button" : "saveAndClose", + "change input.enabled" : "enableDisable"}, initialize: function() { - _.bindAll(this, "show", "hide", "tsLogin", "gtdLogin", - "loadTsData", "loadGtdData", "addCategory", "makeCategoryItem", - "removeCategory", "saveAndClose"); }, + _.bindAll(this, "addCategory", "enableDisable", "gtdLogin", "hide", + "loadGtdData", "loadTsData", "makeCategoryItem", "removeCategory", + "saveAndClose", "show", "tsLogin"); }, show: function() { var $tsSection = this.$el.find(".timestamper-config"); @@ -126,11 +127,13 @@ $tsSection.find(".username").val(PD.tsCfg.username); $tsSection.find(".password").val(PD.tsCfg.password); $tsSection.find(".host").val(PD.tsCfg.host); + $tsSection.find("input.enabled")[0].checked = PD.tsCfg.enabled; if (PD.tsAuth) { this.loadTsData(PD.tsCfg.host, PD.tsCfg.username); } - this.$el.find('.timeline').val(PD.tsCfg.timelineId); } + this.$el.find('.timeline').val(PD.tsCfg.timelineId); + this.enableDisable({target: $tsSection.find("input.enabled")[0]}); } // Or suggest a default server. else { $tsSection.find(".host").val("timestamper.jdb-labs.com"); } @@ -140,12 +143,15 @@ $gtdSection.find(".username").val(PD.gtdCfg.username); $gtdSection.find(".password").val(PD.gtdCfg.password); $gtdSection.find(".host").val(PD.gtdCfg.host); + $gtdSection.find("input.enabled")[0].checked = PD.gtdCfg.enabled; if (PD.gtdAuth) { this.loadGtdData(PD.gtdCfg.host); } // Create the items for the selected categories $(".category-name").parent().remove(); - _.forEach(PD.gtdCfg.categories, this.makeCategoryItem); } + _.forEach(PD.gtdCfg.categories, this.makeCategoryItem); + + this.enableDisable({target: $gtdSection.find("input.enabled")[0]}); } this.$el.find('.refresh-period').val( PD.refreshPeriod ? PD.refreshPeriod / 1000 : 15); @@ -158,6 +164,7 @@ var username = this.$el.find(".timestamper-config .username").val(); var password = this.$el.find(".timestamper-config .password").val(); var host = this.$el.find(".timestamper-config .host").val(); + var thisView = this; if (!PD.tsCfg) { PD.tsCfg = {}; } @@ -185,7 +192,7 @@ PD.tsAuth = false; // Hide the wait overlay. - this.$el.find(".wait-overlay").fadeOut(); }, + thisView.$el.find(".wait-overlay").fadeOut(); }, success: function(data, textStatus, jqXHR) { PD.tsAuth = true; @@ -196,7 +203,7 @@ PD.configDialog.loadTsData(host, username); // Hide the wait overlay. - this.$el.find(".wait-overlay").fadeOut(); } + thisView.$el.find(".wait-overlay").fadeOut(); } }); }, @@ -205,6 +212,7 @@ var username = this.$el.find(".gtd-config .username").val(); var password = this.$el.find(".gtd-config .password").val(); var host = this.$el.find(".gtd-config .host").val(); + var thisView = this; if (!PD.gtdCfg) { PD.gtdCfg = {}; } @@ -230,7 +238,7 @@ "trying to log into the Getting Things Done service: " + error); } PD.gtdAuth = false; - this.$el.find(".wait-overlay").fadeOut(); }, + thisView.$el.find(".wait-overlay").fadeOut(); }, success: function(data, textStatus, jqXHR) { PD.gtdAuth = true; @@ -238,7 +246,7 @@ $(".validate-tips").text(""); PD.configDialog.loadGtdData(host); - this.$el.find(".wait-overlay").fadeOut(); } + thisView.$el.find(".wait-overlay").fadeOut(); } }); }, @@ -250,7 +258,6 @@ url: 'https://' + host + '/ts_api/timelines/' + username, xhrFields: { withCredentials: true }, success: function(data, textStatus, jqXHR) { - debugger; PD.tsCfg.timelines = data; // Populate the available timelines list. @@ -268,7 +275,7 @@ // Load the user's contexts - var contextedLoaded = $.ajax({ + var contextLoaded = $.ajax({ url: 'http://' + host + '/gtd/contexts', xhrFields: { withCredentials: true }, success: function(data, textStatus, jqXHR) { @@ -294,7 +301,7 @@ $optionEl.attr("value", category.id); $optionEl.text(category.id); $categorySelectEl.append($optionEl); }); - $categorySelectEl[0].selectedIndex = 0; }}, + $categorySelectEl[0].selectedIndex = 0; }); }, makeCategoryItem: function(catName) { var $liEl = $( @@ -313,6 +320,18 @@ removeCategory: function(source) { $(source.target).parent().remove(); }, + enableDisable: function (e) { + var cbEl = e.target; + var $cbEl = $(cbEl); + var $section = $cbEl.closest('section'); + + if (cbEl.checked) { + $section.find('div, ul').show(); } + + else { + $section.find('div, ul').hide(); + $section.find('div.enabled').show(); } }, + saveAndClose: function() { if (!PD.tsCfg) { PD.tsCfg = {}; } if (!PD.gtdCfg) { PD.gtdCfg = {}; } @@ -323,12 +342,14 @@ PD.tsCfg.username = $tsEl.find(".username").val(); PD.tsCfg.password = $tsEl.find(".password").val(); PD.tsCfg.timelineId = $tsEl.find(".timeline").val(); + PD.tsCfg.enabled = $tsEl.find("input.enabled")[0].checked; // Save Getting Things Done configuration. var $gtdEl = this.$el.find(".gtd-config"); PD.gtdCfg.host = $gtdEl.find(".host").val(); PD.gtdCfg.username = $gtdEl.find(".username").val(); PD.gtdCfg.password = $gtdEl.find(".password").val(); + PD.gtdCfg.enabled = $gtdEl.find("input.enabled")[0].checked; PD.gtdCfg.categories = _.map( this.$el.find(".category-name"), function(span) { return $(span).text(); }); @@ -342,7 +363,7 @@ localStorage.setItem("refreshPeriod", JSON.stringify(PD.refreshPeriod)); } - this.hide(); + this.hide(400, PD.main.refresh); } }); @@ -399,7 +420,7 @@ // Check that we are authenticated to the services we need. Try to // authenticate if we are not. - if (!PD.tsAuth) { + if (PD.tsCfg.enabled && !PD.tsAuth) { $.ajax({ url: "https://" + PD.tsCfg.host + "/ts_api/login", xhrFields: { withCredentials: true }, @@ -420,7 +441,7 @@ success: function(data, textStatus, jqXHR) { PD.tsAuth = true; }}); } - if (!PD.gtdAuth) { + if (PD.gtdCfg.enabled && !PD.gtdAuth) { $.ajax({ url: "http://" + PD.gtdCfg.host + "/gtd/login", xhrFields: { withCredentials: true }, @@ -444,66 +465,79 @@ // Check that we have successfully authenticated to both services. // If we are not, we will skip this refresh. - if (!(PD.tsAuth && PD.gtdAuth)) { return; } + if ((PD.tsCfg.enabled && !PD.tsAuth) || + (PD.gtdCfg.enabled && !PD.gtdAuth)) { return; } // Get the latest timestamp from the TimeStamper service. - $.ajax({ - url: "https://" + PD.tsCfg.host + "/ts_api/entries/" + - PD.tsCfg.username + "/" + PD.tsCfg.timelineId, - xhrFields: { withCredentials: true }, - data: {"order": "asc" }, - dataType: 'json', - type: 'GET', - async: true, + if (PD.tsCfg.enabled) { + $("section#current-task").show(); + $.ajax({ + url: "https://" + PD.tsCfg.host + "/ts_api/entries/" + + PD.tsCfg.username + "/" + PD.tsCfg.timelineId, + xhrFields: { withCredentials: true }, + data: {"order": "asc" }, + dataType: 'json', + type: 'GET', + async: true, - error: function(jqXHR, textStatus, errorText) { - if (jqXHR.status == 401) { PD.tsAuth = false; } - else { - alert("Unable to retrieve current timestamp: " + errorText); - PD.configDialog.show(); } }, + error: function(jqXHR, textStatus, errorText) { + if (jqXHR.status == 401) { PD.tsAuth = false; } + else { + alert("Unable to retrieve current timestamp: " + + errorText); + PD.configDialog.show(); } }, - success: function(data, textStatus, jqXHR) { - PD.currentActivityModel.set(data[0]); } }); + success: function(data, textStatus, jqXHR) { + PD.currentActivityModel.set(data[0]); } }); } + + // If the TimeStamper section is not enabled, hide the UI for it + else $("section#current-task").hide(); // Get the list of GTD entries for each of our categories. - var categories = _.reduce( - PD.gtdCfg.categories, - function(acc, cat) { return acc ? acc + "," + cat : cat; }, ""); + if (PD.gtdCfg.enabled) { + var categories = _.reduce( + PD.gtdCfg.categories, + function(acc, cat) { return acc ? acc + "," + cat : cat; }, ""); - $.ajax({ - url: "http://" + PD.gtdCfg.host + "/gtd/next-actions/" + - categories, - xhrFields: { withCredentials: true }, - dataType: 'json', - type: 'GET', - async: true, + $("section#priorities").show(); + $.ajax({ + url: "http://" + PD.gtdCfg.host + "/gtd/next-actions/" + + categories, + xhrFields: { withCredentials: true }, + dataType: 'json', + type: 'GET', + async: true, - error: function(jqXHR, textStatus, errorText) { - if (jqXHR.status == 401) { PD.gtdAtuh = false; } - else if (jqXHR.status == 500) { return; } - else { - alert("Unable to retrieve next actions: " + errorText); - PD.configDialog.show(); } }, + error: function(jqXHR, textStatus, errorText) { + if (jqXHR.status == 401) { PD.gtdAtuh = false; } + else if (jqXHR.status == 500) { return; } + else { + alert("Unable to retrieve next actions: " + + errorText); + PD.configDialog.show(); } }, - success: function(data, textStatus, jqXHR) { - var collection = PD.gtdNextActionCollection; + success: function(data, textStatus, jqXHR) { + var collection = PD.gtdNextActionCollection; - // Add all the retrieved items to the collection. - _.forEach(data, function(actionAttr) { + // Add all the retrieved items to the collection. + _.forEach(data, function(actionAttr) { - // Try to find this entry in out collection. - var model = collection.get(actionAttr.id); - // Update it if found - if (model) { model.set(actionAttr); } - // Insert a new model if not found. - else { collection.add( - new PD.GTDEntryModel(actionAttr)); }}); + // Try to find this entry in out collection. + var model = collection.get(actionAttr.id); + // Update it if found + if (model) { model.set(actionAttr); } + // Insert a new model if not found. + else { collection.add( + new PD.GTDEntryModel(actionAttr)); }}); - // Look through our collection for entries that are no - // longer in our retrieved data and remove them. - collection.forEach(function(model) { - if (!_.any(data, model.equals)) { - collection.remove(model); }}); } }); + // Look through our collection for entries that are no + // longer in our retrieved data and remove them. + collection.forEach(function(model) { + if (!_.any(data, model.equals)) { + collection.remove(model); }}); } }); } + + // If the GTD section is not enabled, hid the UI. + else $("section#priorities").hide(); if (evt) evt.preventDefault(); },