From 210218eccbf2384751ec1768cf4cd77844ff570e Mon Sep 17 00:00:00 2001 From: Jim Brock Date: Tue, 19 Nov 2024 10:26:26 -0500 Subject: [PATCH 1/6] Got add item buttons working initially. Needs code cleanup and re-org, comments, and maybe better way of specifying buttons in config. --- MMM-Todoist.css | 23 +++++ MMM-Todoist.js | 97 ++++++++++++++------ node_helper.js | 228 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 321 insertions(+), 27 deletions(-) diff --git a/MMM-Todoist.css b/MMM-Todoist.css index 313155e..2f276c7 100644 --- a/MMM-Todoist.css +++ b/MMM-Todoist.css @@ -94,3 +94,26 @@ width: 400px; overflow: hidden; } + +.bring-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.bring-list-item-add { + display: flex; + flex-direction: column; + width: 98px; + height: 100px; + margin: 2px; + font-size: 20px; + font-weight: bold; + color: white; + text-align: center; + padding: 50px 0px 0px 0px; + border: 1px solid black; + border-radius: 5px; + background-color: grey; + justify-content: left; +} diff --git a/MMM-Todoist.js b/MMM-Todoist.js index fee163a..855d435 100644 --- a/MMM-Todoist.js +++ b/MMM-Todoist.js @@ -58,7 +58,7 @@ Module.register("MMM-Todoist", { // "#ffcc00", "#74e8d3", "#3bd5fb", "#dc4fad", "#ac193d", "#d24726", "#82ba00", "#03b3b2", "#008299", // "#5db2ff", "#0072c6", "#000000", "#777777" // ], //These colors come from Todoist and their order matters if you want the colors to match your Todoist project colors. - + //TODOIST Change how they are doing Project Colors, so now I'm changing it. projectColors: { 30:'#b8256f', @@ -83,11 +83,14 @@ Module.register("MMM-Todoist", { 49:'#ccac93' }, - //This has been designed to use the Todoist Sync API. + // list input parameters + useKeyboard: false, + inputTasks: [], + + // Non-configurable parameters apiVersion: "v9", apiBase: "https://todoist.com/API", todoistEndpoint: "sync", - todoistResourceType: "[\"items\", \"projects\", \"collaborators\", \"user\", \"labels\"]", debug: false @@ -158,6 +161,12 @@ Module.register("MMM-Todoist", { UserPresence = payload; this.GestionUpdateIntervalToDoIst(); } + + if (notification == "KEYBOARD_INPUT" && payload.key === "MMM-Todoist") { + //this.addItemToList(payload.data, payload.message); + var ndata = {"config" : this.config, "addData" : payload}; + this.sendSocketNotification("ADDITEM_TODOIST", ndata); + } }, GestionUpdateIntervalToDoIst: function () { @@ -237,6 +246,9 @@ Module.register("MMM-Todoist", { Log.log("ToDoIst update OK, project : " + this.config.projects + " at : " + moment.unix(this.lastUpdate).format(this.config.displayLastUpdateFormat)); //AgP } + this.loaded = true; + this.updateDom(1000); + } else if (notification === "ADDITEM") { this.loaded = true; this.updateDom(1000); } else if (notification === "FETCH_ERROR") { @@ -597,33 +609,14 @@ Module.register("MMM-Todoist", { return cell; }, - getDom: function () { - - if (this.config.hideWhenEmpty && this.tasks.items.length===0) { - return null; - } - - //Add a new div to be able to display the update time alone after all the task - var wrapper = document.createElement("div"); - - //display "loading..." if not loaded - if (!this.loaded) { - wrapper.innerHTML = "Loading..."; - wrapper.className = "dimmed light small"; - return wrapper; - } - + buildTaskTable: function () { //New CSS based Table var divTable = document.createElement("div"); divTable.className = "divTable normal small light"; var divBody = document.createElement("div"); divBody.className = "divTableBody"; - - if (this.tasks === undefined) { - return wrapper; - } // create mapping from user id to collaborator index var collaboratorsMap = new Map(); @@ -637,7 +630,6 @@ Module.register("MMM-Todoist", { var divRow = document.createElement("div"); //Add the Row divRow.className = "divTableRow"; - //Columns divRow.appendChild(this.addPriorityIndicatorCell(item)); @@ -653,10 +645,61 @@ Module.register("MMM-Todoist", { } divBody.appendChild(divRow); - }); - + }); divTable.appendChild(divBody); - wrapper.appendChild(divTable); + + return divTable; + }, + + getDom: function () { + + if (this.config.hideWhenEmpty && this.tasks.items.length===0) { + return null; + } + + //Add a new div to be able to display the update time alone after all the task + var wrapper = document.createElement("div"); + + //display "loading..." if not loaded + if (!this.loaded) { + wrapper.innerHTML = "Loading..."; + wrapper.className = "dimmed light small"; + return wrapper; + } + + if (this.tasks === undefined) { + return wrapper; + } + + taskTable = this.buildTaskTable(); + wrapper.appendChild(taskTable); + + var self = this; + if (this.config.useKeyboard) { + const bringList = document.createElement("div"); + bringList.className = "bring-list"; + + // For each "inputTask", add a button + //this.config.inputTasks.forEach(function (item, index) { + + const bringListAdds = []; + for (var idx = 0; idx < this.config.inputTasks.length; idx++) { + var item = this.config.inputTasks[idx]; + bringListAdds[idx] = document.createElement("div"); + bringListAdds[idx].className = "bring-list-item-add"; + bringListAdds[idx].id = item[0] + "-" + item[1]; + bringListAdds[idx].innerHTML = item[1]; + bringListAdds[idx].addEventListener("click", event => { + this.sendNotification("KEYBOARD", { + key: "MMM-Todoist", + style: "default", + data: {"id" : event.target.id } + }); + }); + bringList.appendChild(bringListAdds[idx]); + } + wrapper.appendChild(bringList); + } // create the gradient if (this.config.fade && this.config.fadePoint < 1) divTable.querySelectorAll('.divTableRow').forEach((row, i, rows) => row.style.opacity = Math.max(0, Math.min(1 - ((((i + 1) * (1 / (rows.length))) - this.config.fadePoint) / (1 - this.config.fadePoint)) * (1 - this.config.fadeMinimumOpacity), 1))); diff --git a/node_helper.js b/node_helper.js index 4d189d8..d8590a4 100644 --- a/node_helper.js +++ b/node_helper.js @@ -1,5 +1,6 @@ "use strict"; +const { unsubscribe } = require("diagnostics_channel"); /* Magic Mirror * Module: MMM-Todoist * @@ -24,6 +25,11 @@ module.exports = NodeHelper.create({ this.config = payload; this.fetchTodos(); } + if (notification === "ADDITEM_TODOIST") { + this.config = payload.config; + this.addData = payload.addData; + this.addItemToList(); + } }, fetchTodos : function() { @@ -66,6 +72,228 @@ module.exports = NodeHelper.create({ console.log("Todoist api request status="+response.statusCode); } + }); + }, + + findItem: function(taskJson, reqProj, reqTask) { + var itemid = null; + taskJson.items.filter(function (item) { + if (item.project_id == reqProj) { + if (item.day_order === -1) { + if (item.due) { + let duedate = item.due["date"]; + let date = new Date(); + let year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date); + let month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date); + let day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date); + let today = `${year}-${month}-${day}`; + //console.log("Comparing Dates " + duedate + " : " + today); + if (duedate === today) { + //console.log("Comparing Names " + item.content + " : " + reqTask); + if (item.content === reqTask) { + console.log("ITEM FOUND: " + JSON.stringify(item)); + itemid = item.id; + } + } + } + } + } + }); + return itemid; + }, + + returnIDMapping: function(tmpid, itemid) { + return [tmpid, itemid]; + }, + + // TBD + addNewSubItemToList: function(self, proj, task, parent) { + var acessCode = self.config.accessToken; + + const crypto = require('crypto'); + // Create self.addData.message as new item + var uuid = crypto.randomBytes(16).toString('hex'); + var tmpid = crypto.randomBytes(16).toString('hex'); + var itemid = null; + console.log("UUID:" + uuid); + console.log("TMPID: " + tmpid); + console.log("PARENT: " + parent); + request({ + url: self.config.apiBase + "/" + self.config.apiVersion + "/" + self.config.todoistEndpoint + "/", + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded", + "cache-control": "no-cache", + "Authorization": "Bearer " + acessCode + }, + form: { + commands:"[{ \ + \"type\": \"item_add\", \ + \"temp_id\": \"" + tmpid + "\", \ + \"uuid\": \"" + uuid + "\", \ + \"args\": { \ + \"content\": \"" + task + "\", \ + \"project_id\": \"" + proj + "\", \ + \"parent_id\": \"" + parent + "\" \ + }}]" + } + }, + function(error, response, body) { + if (error) { + self.sendSocketNotification("ADDNEWSUBITEM_ERROR", { + error: error + }); + return console.error(" ERROR - MMM-Todoist: " + error); + } + if(self.config.debug){ + console.log(body); + } + if (response.statusCode === 200) { + var taskJson = JSON.parse(body); + console.log(JSON.stringify(taskJson)); + console.log(JSON.stringify(taskJson["temp_id_mapping"])); + console.log(JSON.stringify(taskJson["temp_id_mapping"][tmpid])); + itemid = taskJson["temp_id_mapping"][JSON.stringify(tmpid)]; + } + }); + }, + + // TBD + addNewItemToList: function(proj, task, callback = null) { + var self = this; + var acessCode = self.config.accessToken; + + const crypto = require('crypto'); + // Create self.addData.message as new item + var uuid = crypto.randomBytes(16).toString('hex'); + var tmpid = crypto.randomBytes(16).toString('hex'); + var itemid = null; + console.log("UUID:" + uuid); + console.log("TMPID: " + tmpid); + request({ + url: self.config.apiBase + "/" + self.config.apiVersion + "/" + self.config.todoistEndpoint + "/", + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded", + "cache-control": "no-cache", + "Authorization": "Bearer " + acessCode + }, + form: { + commands:"[{ \ + \"type\": \"item_add\", \ + \"temp_id\": \"" + tmpid + "\", \ + \"uuid\": \"" + uuid + "\", \ + \"args\": { \ + \"content\": \"" + task + "\", \ + \"project_id\": \"" + proj + "\", \ + \"due\": {\"string\":\"today\"} \ + }}]" + } + }, + function(error, response, body) { + if (error) { + self.sendSocketNotification("ADDNEWITEM_ERROR", { + error: error + }); + return console.error(" ERROR - MMM-Todoist: " + error); + } + if(self.config.debug){ + console.log(body); + } + if (response.statusCode === 200) { + var taskJson = JSON.parse(body); + console.log(JSON.stringify(taskJson)); + console.log(JSON.stringify(taskJson["temp_id_mapping"])); + console.log(JSON.stringify(taskJson["temp_id_mapping"][tmpid])); + itemid = taskJson["temp_id_mapping"][tmpid]; + console.log(itemid); + if (callback) { + callback(self, proj, self.addData.message, itemid); + } + } + }); + }, + + addItemToList: function() { + var self = this; + var acessCode = self.config.accessToken; + request({ + url: self.config.apiBase + "/" + self.config.apiVersion + "/" + self.config.todoistEndpoint + "/", + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded", + "cache-control": "no-cache", + "Authorization": "Bearer " + acessCode + }, + form: { + sync_token: "*", + resource_types: self.config.todoistResourceType + } + }, + function(error, response, body) { + if (error) { + self.sendSocketNotification("FETCH_ERROR", { + error: error + }); + return console.error(" ERROR - MMM-Todoist: " + error); + } + if(self.config.debug){ + console.log(body); + } + if (response.statusCode === 200) { + var taskJson = JSON.parse(body); + taskJson.items.forEach((item)=>{ + item.contentHtml = markdown.makeHtml(item.content); + }); + taskJson.accessToken = acessCode; + + if (taskJson == undefined) { + return; + } + if (taskJson.accessToken != self.config.accessToken) { + return; + } + if (taskJson.items == undefined) { + return; + } + + console.log("ADD ITEM Command: "); + console.log(self.addData.data["id"]); + console.log(self.addData.data["id"].split("-")); + console.log(self.addData.data["id"].split("-")[0]); + console.log(self.addData.data["id"].split("-")[1]); + console.log(self.addData.message); + console.log("END ADD ITEM Command"); + + const crypto = require('crypto'); + var reqProj = self.addData.data["id"].split("-")[0]; + var reqTask = self.addData.data["id"].split("-")[1]; + + // If we're making a new item, make it + if (reqTask == "NEW") { + self.addNewItemToList(reqProj, self.addData.message); + } else { // add a sub-item to an item + var tmpid = null; + var itemid = null; + itemid = self.findItem(taskJson, reqProj, reqTask); + + // If parent item not found, add it + if (itemid == null) { + console.log("ITEM NOT FOUND"); + // Create self.addData.data["task"] as new item (get itemid) + self.addNewItemToList(reqProj, reqTask, self.addNewSubItemToList); + } else { + // ADD self.addData.message as sub-item to itemid + console.log("ITEM ID: " + itemid); + self.addNewSubItemToList(self, reqProj, self.addData.message, itemid); + } + } + + self.sendSocketNotification("ADDITEM", itemid); + } else { + console.log("Todoist api request status="+response.statusCode); + } + }); } }); \ No newline at end of file From c4e4f3526ab74fc49ea4a78ca104a07fed717ea8 Mon Sep 17 00:00:00 2001 From: Jim Brock Date: Tue, 19 Nov 2024 16:46:10 -0500 Subject: [PATCH 2/6] Updating readme with input button options. --- README.md | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bcf1c2f..479ebb1 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,12 @@ modules: [ fade: false, // projects and/or labels is mandatory: projects: [ 166564794 ], - labels: [ "MagicMirror", "Important" ] // Tasks for any projects with these labels will be shown. - } + labels: [ "MagicMirror", "Important" ], // Tasks for any projects with these labels will be shown. + inputTasks: [ + {"project" : 166564794, "task" : "Groceries", "symbol" : "cart-shopping"}, + {"project" : 166564794, "task" : "Hardware Store", "symbol" : "screwdriver-wrench", "color" : "white", "bg-color" : "darkorange"} + ] + } } ] ```` @@ -37,7 +41,6 @@ modules: [ The following properties can be configured: - @@ -113,7 +116,7 @@ The following properties can be configured: - + - + + + + + +
intervalupdateInterval How often the module should load new todos. Be careful, this is in ms, NOT seconds! So, too low a number will lock you out for repeated server attempts!

Possible values: int in milliseconds
Default value: 10*60*1000 @@ -222,10 +225,80 @@ The following properties can be configured:
Default value: false
inputTasksAdd buttons for adding tasks and subtasks to lists below task list. Depends on MMM-Keyboard module being installed.
+
Possible values: An array, see inputTask configuration below. +
Default value: [] +
+ + +## InputTask Configuration options + +The following properties can be configured for each inputTask: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
project(required) Project to which this task will belong.
+
Possible values: any project id +
Default value: none +
Example: 166564792 +
+ Getting the Todoist ProjectID:
+ 1) Go to Todoist (Log in if you aren't)
+ 2) Click on a Project in the left menu
+ 3) Your browser URL will change to something like
"https://todoist.com/app?lang=en&v=818#project%2F166564897"

+ Everything after %2F is the Project ID. In this case "166564792"

+
+ Alternatively, if you add debug=true in your config.js the Projects and ProjectsIDs will be displayed on MagicMirror as well as in the Browser console.

+ This value and/or the labels entry must be specified. If both projects and labels are specified, then tasks from both will be shown. +
task(required) Name of the task under which new subtasks will be placed
+
Possible values: string +
Default value: none +
Note: You can use one of three values here. +
symbol(optional) Name of the FontAwesome icon to use for an icon on the button.
+
Possible values: string +
Default value: "plus" +
Note: You can use any of the free Font Awesome icon values found here https://fontawesome.com/v6/search?o=r&m=free. +
color(optional) CSS color to use for the foreground button icon.
+
Possible values: string +
Default value: "grey" +
bg-color(optional) CSS color to use for the background of the button.
+
Possible values: string +
Default value: "white" +
+ ## Dependencies - [request](https://www.npmjs.com/package/request) (installed via `npm install`) @@ -260,6 +333,8 @@ Options enabled: orderBy:dueDateAsc, showProjects: true Options enabled: orderBy:dueDateAsc, showProjects: false ![My image](http://cbrooker.github.io/MMM-Todoist/Screenshots/7.png) +Options enabled: inputTasks +![My image]() ## Attribution From b651447af16d3004f9cf91d04f54ac6a70d39197 Mon Sep 17 00:00:00 2001 From: Jim Brock Date: Tue, 19 Nov 2024 16:52:37 -0500 Subject: [PATCH 3/6] Cleaning up code for buttons. Fixing corner cases when inputTask options are not specified, added screenshot to readme, removed debug statements. --- MMM-Todoist.css | 17 +++--- MMM-Todoist.js | 85 ++++++++++++++++++--------- README.md | 2 +- node_helper.js | 150 +++++++++++++++--------------------------------- 4 files changed, 113 insertions(+), 141 deletions(-) diff --git a/MMM-Todoist.css b/MMM-Todoist.css index 2f276c7..e019d50 100644 --- a/MMM-Todoist.css +++ b/MMM-Todoist.css @@ -95,25 +95,24 @@ overflow: hidden; } -.bring-list { +.add-list { display: flex; flex-direction: row; flex-wrap: wrap; } -.bring-list-item-add { +.add-list-item-add { display: flex; flex-direction: column; - width: 98px; - height: 100px; - margin: 2px; - font-size: 20px; + width: 90px; + height: 80px; + margin: 20px; + font-size: 70px; font-weight: bold; color: white; text-align: center; - padding: 50px 0px 0px 0px; + padding: 20px 10px 10px 10px; border: 1px solid black; - border-radius: 5px; + border-radius: 10px; background-color: grey; - justify-content: left; } diff --git a/MMM-Todoist.js b/MMM-Todoist.js index 855d435..888bff2 100644 --- a/MMM-Todoist.js +++ b/MMM-Todoist.js @@ -9,6 +9,8 @@ */ /* + * Update by dirtylimerix 24/11/2024 + * - Added support for adding to lists and new tasks * Update by mabahj 24/11/2019 * - Added support for labels in addtion to projects * Update by AgP42 the 18/07/2018 @@ -84,7 +86,6 @@ Module.register("MMM-Todoist", { }, // list input parameters - useKeyboard: false, inputTasks: [], // Non-configurable parameters @@ -651,6 +652,57 @@ Module.register("MMM-Todoist", { return divTable; }, + buildInputList: function() { + const addList = document.createElement("div"); + addList.className = "add-list"; + if (this.config.inputTasks.length > 0) { + // For each "inputTask", add a button according to the config parameters + for (var idx = 0; idx < this.config.inputTasks.length; idx++) { + var item = this.config.inputTasks[idx]; + var addListBtn = document.createElement("div"); + var symbol = "plus" + if (item["symbol"]) { + symbol = item["symbol"]; + } + addListBtn.className = "add-list-item-add fas fa-" + symbol; + addListBtn.id = item["project"] + "-" + item["task"]; + if (item["color"]) { + addListBtn.style.color = item["color"]; + } + if (item["bg-color"]) { + addListBtn.style.backgroundColor = item["bg-color"]; + } + addListBtn.addEventListener("click", event => { + this.sendNotification("KEYBOARD", { + key: "MMM-Todoist", + style: "default", + data: {"id" : event.target.id } + }); + }); + addList.appendChild(addListBtn); + } + + // If using input tasks, create a button for new inbox items + if (this.config.inputTasks.length > 0) { + var addNewBtn = document.createElement("div"); + addNewBtn.className = "add-list-item-add fas fa-square-plus"; + //addNewBtn.id = "inbox-NEW"; + addNewBtn.id = "2334830530-NEW"; + addNewBtn.style.color = "white"; + addNewBtn.style.backgroundColor = "darkgrey"; + addNewBtn.addEventListener("click", event => { + this.sendNotification("KEYBOARD", { + key: "MMM-Todoist", + style: "default", + data: {"id" : event.target.id } + }); + }); + addList.appendChild(addNewBtn); + } + } + return addList; + }, + getDom: function () { if (this.config.hideWhenEmpty && this.tasks.items.length===0) { @@ -671,35 +723,12 @@ Module.register("MMM-Todoist", { return wrapper; } + // Build the Todoist task table and add it taskTable = this.buildTaskTable(); wrapper.appendChild(taskTable); - - var self = this; - if (this.config.useKeyboard) { - const bringList = document.createElement("div"); - bringList.className = "bring-list"; - - // For each "inputTask", add a button - //this.config.inputTasks.forEach(function (item, index) { - - const bringListAdds = []; - for (var idx = 0; idx < this.config.inputTasks.length; idx++) { - var item = this.config.inputTasks[idx]; - bringListAdds[idx] = document.createElement("div"); - bringListAdds[idx].className = "bring-list-item-add"; - bringListAdds[idx].id = item[0] + "-" + item[1]; - bringListAdds[idx].innerHTML = item[1]; - bringListAdds[idx].addEventListener("click", event => { - this.sendNotification("KEYBOARD", { - key: "MMM-Todoist", - style: "default", - data: {"id" : event.target.id } - }); - }); - bringList.appendChild(bringListAdds[idx]); - } - wrapper.appendChild(bringList); - } + // Build the input task button list (if enabled) and add it + addList = this.buildInputList(); + wrapper.appendChild(addList); // create the gradient if (this.config.fade && this.config.fadePoint < 1) divTable.querySelectorAll('.divTableRow').forEach((row, i, rows) => row.style.opacity = Math.max(0, Math.min(1 - ((((i + 1) * (1 / (rows.length))) - this.config.fadePoint) / (1 - this.config.fadePoint)) * (1 - this.config.fadeMinimumOpacity), 1))); diff --git a/README.md b/README.md index 479ebb1..634a3aa 100644 --- a/README.md +++ b/README.md @@ -334,7 +334,7 @@ Options enabled: orderBy:dueDateAsc, showProjects: false ![My image](http://cbrooker.github.io/MMM-Todoist/Screenshots/7.png) Options enabled: inputTasks -![My image]() +![My image](todoist_btns.png) ## Attribution diff --git a/node_helper.js b/node_helper.js index d8590a4..58482f1 100644 --- a/node_helper.js +++ b/node_helper.js @@ -4,7 +4,7 @@ const { unsubscribe } = require("diagnostics_channel"); /* Magic Mirror * Module: MMM-Todoist * - * By Chris Brooker + * By Chris Brooker, James Brock * * MIT Licensed. */ @@ -28,11 +28,11 @@ module.exports = NodeHelper.create({ if (notification === "ADDITEM_TODOIST") { this.config = payload.config; this.addData = payload.addData; - this.addItemToList(); + this.fetchTodos(this.addItemToList); } }, - fetchTodos : function() { + fetchTodos : function(callback) { var self = this; //request.debug = true; var acessCode = self.config.accessToken; @@ -66,7 +66,12 @@ module.exports = NodeHelper.create({ }); taskJson.accessToken = acessCode; - self.sendSocketNotification("TASKS", taskJson); + + if (callback) { + callback(self, taskJson); + } else { + self.sendSocketNotification("TASKS", taskJson); + } } else{ console.log("Todoist api request status="+response.statusCode); @@ -87,11 +92,8 @@ module.exports = NodeHelper.create({ let month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date); let day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date); let today = `${year}-${month}-${day}`; - //console.log("Comparing Dates " + duedate + " : " + today); if (duedate === today) { - //console.log("Comparing Names " + item.content + " : " + reqTask); if (item.content === reqTask) { - console.log("ITEM FOUND: " + JSON.stringify(item)); itemid = item.id; } } @@ -102,10 +104,6 @@ module.exports = NodeHelper.create({ return itemid; }, - returnIDMapping: function(tmpid, itemid) { - return [tmpid, itemid]; - }, - // TBD addNewSubItemToList: function(self, proj, task, parent) { var acessCode = self.config.accessToken; @@ -115,9 +113,6 @@ module.exports = NodeHelper.create({ var uuid = crypto.randomBytes(16).toString('hex'); var tmpid = crypto.randomBytes(16).toString('hex'); var itemid = null; - console.log("UUID:" + uuid); - console.log("TMPID: " + tmpid); - console.log("PARENT: " + parent); request({ url: self.config.apiBase + "/" + self.config.apiVersion + "/" + self.config.todoistEndpoint + "/", method: "POST", @@ -150,9 +145,6 @@ module.exports = NodeHelper.create({ } if (response.statusCode === 200) { var taskJson = JSON.parse(body); - console.log(JSON.stringify(taskJson)); - console.log(JSON.stringify(taskJson["temp_id_mapping"])); - console.log(JSON.stringify(taskJson["temp_id_mapping"][tmpid])); itemid = taskJson["temp_id_mapping"][JSON.stringify(tmpid)]; } }); @@ -168,8 +160,12 @@ module.exports = NodeHelper.create({ var uuid = crypto.randomBytes(16).toString('hex'); var tmpid = crypto.randomBytes(16).toString('hex'); var itemid = null; - console.log("UUID:" + uuid); - console.log("TMPID: " + tmpid); + + var proj_str = ""; + if ((proj != "inbox")) { + proj_str = "\"project_id\": \"" + proj + "\","; + } + request({ url: self.config.apiBase + "/" + self.config.apiVersion + "/" + self.config.todoistEndpoint + "/", method: "POST", @@ -184,9 +180,8 @@ module.exports = NodeHelper.create({ \"temp_id\": \"" + tmpid + "\", \ \"uuid\": \"" + uuid + "\", \ \"args\": { \ - \"content\": \"" + task + "\", \ - \"project_id\": \"" + proj + "\", \ - \"due\": {\"string\":\"today\"} \ + \"content\": \"" + task + "\"," + proj_str + + "\"due\": {\"string\":\"today\"} \ }}]" } }, @@ -202,11 +197,7 @@ module.exports = NodeHelper.create({ } if (response.statusCode === 200) { var taskJson = JSON.parse(body); - console.log(JSON.stringify(taskJson)); - console.log(JSON.stringify(taskJson["temp_id_mapping"])); - console.log(JSON.stringify(taskJson["temp_id_mapping"][tmpid])); itemid = taskJson["temp_id_mapping"][tmpid]; - console.log(itemid); if (callback) { callback(self, proj, self.addData.message, itemid); } @@ -214,86 +205,39 @@ module.exports = NodeHelper.create({ }); }, - addItemToList: function() { - var self = this; - var acessCode = self.config.accessToken; - request({ - url: self.config.apiBase + "/" + self.config.apiVersion + "/" + self.config.todoistEndpoint + "/", - method: "POST", - headers: { - "content-type": "application/x-www-form-urlencoded", - "cache-control": "no-cache", - "Authorization": "Bearer " + acessCode - }, - form: { - sync_token: "*", - resource_types: self.config.todoistResourceType - } - }, - function(error, response, body) { - if (error) { - self.sendSocketNotification("FETCH_ERROR", { - error: error - }); - return console.error(" ERROR - MMM-Todoist: " + error); - } - if(self.config.debug){ - console.log(body); - } - if (response.statusCode === 200) { - var taskJson = JSON.parse(body); - taskJson.items.forEach((item)=>{ - item.contentHtml = markdown.makeHtml(item.content); - }); - taskJson.accessToken = acessCode; - - if (taskJson == undefined) { - return; - } - if (taskJson.accessToken != self.config.accessToken) { - return; - } - if (taskJson.items == undefined) { - return; - } - - console.log("ADD ITEM Command: "); - console.log(self.addData.data["id"]); - console.log(self.addData.data["id"].split("-")); - console.log(self.addData.data["id"].split("-")[0]); - console.log(self.addData.data["id"].split("-")[1]); - console.log(self.addData.message); - console.log("END ADD ITEM Command"); - - const crypto = require('crypto'); - var reqProj = self.addData.data["id"].split("-")[0]; - var reqTask = self.addData.data["id"].split("-")[1]; - - // If we're making a new item, make it - if (reqTask == "NEW") { - self.addNewItemToList(reqProj, self.addData.message); - } else { // add a sub-item to an item - var tmpid = null; - var itemid = null; - itemid = self.findItem(taskJson, reqProj, reqTask); - - // If parent item not found, add it - if (itemid == null) { - console.log("ITEM NOT FOUND"); - // Create self.addData.data["task"] as new item (get itemid) - self.addNewItemToList(reqProj, reqTask, self.addNewSubItemToList); - } else { - // ADD self.addData.message as sub-item to itemid - console.log("ITEM ID: " + itemid); - self.addNewSubItemToList(self, reqProj, self.addData.message, itemid); - } - } + addItemToList: function(self, taskJson) { + if (taskJson == undefined) { + return; + } + if (taskJson.accessToken != self.config.accessToken) { + return; + } + if (taskJson.items == undefined) { + return; + } - self.sendSocketNotification("ADDITEM", itemid); + const crypto = require('crypto'); + var reqProj = self.addData.data["id"].split("-")[0]; + var reqTask = self.addData.data["id"].split("-")[1]; + + // If we're making a new item, make it + if (reqTask == "NEW") { + self.addNewItemToList(reqProj, self.addData.message); + } else { // add a sub-item to an item + var tmpid = null; + var itemid = null; + itemid = self.findItem(taskJson, reqProj, reqTask); + + // If parent item not found, add it + if (itemid == null) { + // Create self.addData.data["task"] as new item (get itemid) + self.addNewItemToList(reqProj, reqTask, self.addNewSubItemToList); } else { - console.log("Todoist api request status="+response.statusCode); + // ADD self.addData.message as sub-item to itemid + self.addNewSubItemToList(self, reqProj, self.addData.message, itemid); } + } - }); + self.sendSocketNotification("ADDITEM", itemid); } }); \ No newline at end of file From 5b7f0b36f9ea89995eb9d633c879379d3fd43f80 Mon Sep 17 00:00:00 2001 From: Jim Brock Date: Tue, 19 Nov 2024 16:52:58 -0500 Subject: [PATCH 4/6] Adding screenshot missed in last commit.; --- todoist_btns.png | Bin 0 -> 100381 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 todoist_btns.png diff --git a/todoist_btns.png b/todoist_btns.png new file mode 100644 index 0000000000000000000000000000000000000000..21a83ecfe39f3826a6bb801aa77e7d9700edef89 GIT binary patch literal 100381 zcmeFYQ($FF6EK?0#I|kQwr$(CZD%rZc5K@=Cz{x{?c~on=ldV;>wUR*zwBPMde!Qx zE?2Ke1vzn8C@d%-ARt&t2@xeApr39)KtD_&z`h|VX$COge<036k}442KOYE_i0^Am z7f}rtWqUIhcS9#rAagr=TT@zRV<%HnJ7)`fm#d#WeBYC3|CuE0WNPSQX>UiMVrgp% zq~dByz{p7;XYWS9#K6Qtz`(-A#K6VKMxY=|AgZh~5!X8d1VjKNDI%!ik$Jvh>40;T zb@XD7=c*3`^#qFqBzTQRsmSEIoU&HGad8sq+G4(n7?fpY1A)R8fkx#J+4zUXcRZ2Clo1E-^39W!6nt)=PSWNK6kLaVC zt}3q<__BY+nXLTf&bQ5m%b2YGdEddZ_1eqMyhm2SGS!=hng{r_b+=8E|l5 z+T7B@@6l(w@0WOhECfM_htbhI#sALl@3pj46!#6O)85b;F>TN!BO?P+2qJ(0>b}dm zy56|*dzwvFfcQrL{m`KA+ha@5JiI_%uYZ`1cNhTm3KNw-gB|&ObXpHDW zDljzEB)d8ZHmMa_jBC)|H|0%XIFsn|U^Z%|90Cj*5YX#%hP+peIE4FktPuI0%w=Bwd6%amRCS|p)uv$s z>hkLe@tYVs!hbe@5SKDRZvJ!c4^Gy0C~|P=x_4T*zIOkX4*-3-@-8}>)Q3pqZ}2@n zPk(nEp&3|*L@1BTbgn9OZJk4GDD;s=DTfVfR~Gy19KzPXe55eX%{+>(01W=M<0P0` zfso$|6E(E7PUcqee0`lAeFR#l1bbIvgA87pVLiRDybyU*q~c~_XH$Q&bE>AsCW(EZ zFY`(nuJ_4$L;O)rOfG6l>wUqJX6cFz7Zd_v24?=(Hli6BSUTn@QJLqlTcVn0R&txQ z4!3_oQ?Wd2CRxK53V6xW^$Ra#|7usFuD5sS#U20lx=-9i%3H;|%0D{tuOhgkwc5VF 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 D+j7yY literal 0 HcmV?d00001 From 56e4d96562259c832ae430414139f12c2173296e Mon Sep 17 00:00:00 2001 From: Jim Brock Date: Tue, 19 Nov 2024 17:15:52 -0500 Subject: [PATCH 5/6] Updating README to better explain the button behavior --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 634a3aa..1f3afc2 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,28 @@ The following properties can be configured: ## InputTask Configuration options +InputTasks are buttons that will appear below the task list, enabling user input to add tasks to projects, or add sub-tasks to tasks. If any inputTask is specified, an additional [+] button be automatically added that allows tasks to be added to the inbox. For each specified inputTask, a *project_id* and *task* name is required. The *project_id* specifies the project under which a task will be added. The *task* specifies the parent task under which new tasks will be created (like a list). If the parent task does not exist (as a task under the *project_id* and due "today"), it will be created. + +### Example usage + +For a given config that includes the following: + +````javascript +modules: [ + { + ... + inputTasks: [ + {"project" : 166564794, "task" : "Groceries", "symbol" : "cart-shopping"}, + {"project" : 166564794, "task" : "Hardware Store", "symbol" : "screwdriver-wrench", "color" : "white", "bg-color" : "darkorange"} + ] + } + } +] +```` + +Three buttons will appear (as in the screenshot below), one for a *Groceries* with a shopping cart icon, one for *Hardware Store* with a tools icon, and one for new inbox items with a [+] icon. When you click on any button (i.e. *Groceries*) the visual keyboard (MMM-Keyboard) will show up on the screen. After you input text and hit send, that text will be the name of a new sub-task under *Groceries* in the *project_id* project. If *Groceries* did not already exist, it will be created. Everything is created with a due date of *today* by default. + + The following properties can be configured for each inputTask: From 38d80f26c679f16332d291a7e0542abc0fe23d5f Mon Sep 17 00:00:00 2001 From: Jim Brock Date: Fri, 22 Nov 2024 10:35:59 -0500 Subject: [PATCH 6/6] Updating CSS for smaller, more proportional buttons. --- MMM-Todoist.css | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/MMM-Todoist.css b/MMM-Todoist.css index e019d50..397ac2e 100644 --- a/MMM-Todoist.css +++ b/MMM-Todoist.css @@ -99,15 +99,16 @@ display: flex; flex-direction: row; flex-wrap: wrap; + align-items: center; } .add-list-item-add { display: flex; flex-direction: column; - width: 90px; - height: 80px; - margin: 20px; - font-size: 70px; + width: 50px; + height: 50px; + margin: 10px; + font-size: 40px; font-weight: bold; color: white; text-align: center;