diff --git a/punch_list/backlog.html b/punch_list/backlog.html new file mode 100644 index 0000000..cf5f68a --- /dev/null +++ b/punch_list/backlog.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Time Boxer +
+ +
+
+ Backlog +
+
+
+ +
+ + diff --git a/punch_list/backlogManage.js b/punch_list/backlogManage.js new file mode 100644 index 0000000..4ba89bc --- /dev/null +++ b/punch_list/backlogManage.js @@ -0,0 +1,397 @@ +var punches, punchList, listLength, object; + +function isItArray(object) { + console.log(`is ${object} Array = ${Array.isArray(object)}`); +// return Array.isArray(object); +} + +function putJson(data) { + let req = new XMLHttpRequest(); + + req.onreadystatechange = () => { + if (req.readyState == XMLHttpRequest.DONE) { + //document.getElementById("result").innerHTML = new Date().getTime() + " - " + req.status; + getJson(); + } + }; + + req.open("PUT", jsonUrl, true); + req.setRequestHeader("Content-type", "application/json"); + req.send(data); +} + +function getJson() { + +// var GoogleAuth = gapi.auth2.init(); +// if (GoogleAuth.isSignedIn.get() === true) { + //displayMeta(); + console.log(`getJson`); + let req = new XMLHttpRequest(); + req.onreadystatechange = () => { + if (req.readyState == XMLHttpRequest.DONE) { + window.punches = JSON.parse(req.responseText); + window.punches.sort(function(a, b){return a.priority - b.priority}); + //callback(window.punches); + genStatuses(window.punches); + } + }; + + req.open("GET", jsonUrl, true); + req.send(); +// } else { +// console.log('not logged in'); +// } +} + +function findArrayId(uid) { + var length = window.punches.length; + + for (x = 0; x < length; x++) { + if (window.punches[x].uuid === uid) { + return x; + } + } +} + +function tagFilter(tagItem) { + console.log(`In tagFilter function`); + window.tagFilterItem = tagItem; + getJson(); +} + +function clearTagFilter() { + console.log(`Clear Tags`); + window.tagFilterItem = undefined; + getJson(); +} + +function getStatus(punchList, statusFilter) { + return punchList.filter(function(punch) { return punch.progress.toLowerCase() != statusFilter; }); +} + +function genStatuses(punchList) { +// genList(getStatus(punchList, "in progress"), "punchListInProgress"); +// genList(getStatus(punchList, "new"), "punchListNew"); + genList(getStatus(punchList, ""), "punchListBacklog"); +} + +function genBacklog(punchList) { + genList(punchList, "punchListBacklog"); +} + +function genList(punchList, element) { + enableElement("punchListAll"); + var itemStyle = "punches"; +// isItArray(punchList); + +// punchList.sort(function(a, b){return new Date(a.date).getTime() - new Date(b.date).getTime()}); + listLength = punchList.length; + + var list = '
    '; + + for (i = 0; i < listLength; i++) { + if (punchList[i].progress.toLowerCase() === "done" && punchList[i].priority != 99999) { + setPriority(punchList[i].uuid, 99999); + } else if (punchList[i].progress.toLowerCase() != "done"){ + list += '
  1. ' + punchList[i].subject + ' | ' + punchList[i].progress + '
  2. '; + } + } + + list += "
"; + document.getElementById(element).innerHTML = list; + +mkSortable(); +} + +function mkSortable() { + punchList = window.punches; + + $( function() { + $( "#sortable" ).sortable({ + start: function(event, ui) { + window.sortObjectUUID = punchList[ui.item.index()].uuid; + console.log(`Start Position: ${ui.item.index()}`); + }, + stop: function(event, ui) { + setPriority(window.sortObjectUUID, ui.item.index()); + console.log(`New Position: ${ui.item.index()}`); + } + }); + $( "#sortable" ).disableSelection(); + } ); +} + +function setPriority(sortObject, newPosition) { + var punchList = window.punches; + item = findArrayId(sortObject); + + for (i = 0; i < punchList.length; i++) { + if (punchList[i].priority < 100 && punchList[i].priority >= newPosition && punchList[i].uuid != punchList[item].uuid) { + punchList[i].priority = i; + } + } + + punchList[item].priority = newPosition; + + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); +} + +function startPunch(uuid) { + var punchList = window.punches; + item = findArrayId(uuid); + + punchList[item].progress = "In Progress"; + + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); +} + +function completePunch(uuid) { + var punchList = window.punches; + item = findArrayId(uuid); + punchList[item].progress = "Done"; + + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); +} + +function enablePunchDetail(uuid) { + var punchList = window.punches; + item = findArrayId(uuid); + console.log(`inside enablePunchDetail`); + disableElement("punchListAll"); + enableElement("punchDetail"); +// html = ""; + html = "

subject: " + punchList[item].subject + "
Created: " + punchList[item].cDate + "
Modified Date: " + punchList[item].mDate + "
Priority: " + punchList[item].priority + "
Progress: " + punchList[item].progress + "

"; + document.getElementById("punchDetail").innerHTML = html; +} + +function createNewEvent() { + /* Before doing this, + Refresh the array, + So that we don't overwrite data */ +getJson(); + +// console.log(`${punchList}`); +// console.log(`${window.punches}`); +// disableElement("punchList"); +// disableElement("punchDetail"); + punchList = window.punches; + + var subjectField = document.getElementById("newSubject").value; + var priorityField = document.getElementById("newPriority").value; + var progressField = document.getElementById("newProgress").value; + var nDateField = document.getElementById("timepickerCreate").value; + var notesField = document.getElementById("newNotes").value; + + var newEventJson = { uuid: genUid(), nDate: nDateField, subject: subjectField, priority: priorityField, progress: progressField, notes: notesField }; + punchList.push(newEventJson); + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); + disableElement("newEvent"); + enableElement("punchListAll"); +// document.getElementById("newEventList").innerHTML = jsonStr; +} + +function genDaily() { + /* Before doing this, + Refresh the array, + So that we don't overwrite data */ +getJson(); + + punchList = window.punches; + + var daily = [ "Check Workday", "Check Expenses", "Check Change Cases", "Check TD's", "Check at-mentions" ]; + console.log(`${daily[1]}`); + + for (x = 0; x < daily.length; x++) { + var newEventJson = { uuid: genUid(), nDate: "EOD", subject: daily[x], priority: "1", progress: "new", notes: "", tags: [ "work", "daily", "today" ] }; + punchList.push(newEventJson); + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); + } +} + +function genWeekly() { + /* Before doing this, + Refresh the array, + So that we don't overwrite data */ +getJson(); + + punchList = window.punches; + + var weekly = [ "Update ORB Notes", "Prep Weekly Meeting", "Build out Broadcast Timer" ]; + + for (x = 0; x < weekly.length; x++) { + var newEventJson = { uuid: genUid(), nDate: "Tuesday", subject: weekly[x], priority: "1", progress: "new", notes: "", tags: [ "work", "weekly" ] }; + punchList.push(newEventJson); + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); + } +} + +function deletePunch(uuid) { + /* Before doing this, + Refresh the array, + So that we don't overwrite data */ +getJson(); + +// console.log(`${punchList}`); +// console.log(`${window.punches}`); + punchList = window.punches; + item = findArrayId(uuid); + + console.log(`splicing ${item}`); + + + punchList.splice(item, 1); + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); +// document.getElementById("newEventList").innerHTML = jsonStr; +} + + +function enableElement(element) { + console.log(`enabling ${element}`); + document.getElementById(element).style.display = "block"; +} + +function disableElement(element) { + console.log(`disabling ${element}`); + document.getElementById(element).style.display = "none"; +} + +function displayMeta() { + document.getElementById("meta").innerHTML = "Version: " + version ; +} + +function toggleShowDone() { + if (showDone === false) { + window.showDone = true; + } else if (showDone === true) { + window.showDone = false; + } else { + window.showDone = false; + } + getJson(); +} + +function editPunch(uuid) { + /* Before doing this, + Refresh the array, + So that we don't overwrite data */ +getJson(); + + disableElement("newEvent"); + disableElement("punchListAll"); + enableElement("editPunch"); + + punchList = window.punches; + item = findArrayId(uuid); + + var id = item; + + var subject = punchList[id].subject; + var priority = punchList[id].priority; + var progress = punchList[id].progress; + var nDate = punchList[id].nDate; + var notes = punchList[id].notes; + + document.getElementById("editID").value = id; + document.getElementById("editSubject").value = subject; + document.getElementById("timepickerEdit").value = nDate; + document.getElementById("editNotes").value = notes; + document.getElementById("editProgress").value = progress; + document.getElementById("editPriority").value = priority; +} + +function submitEditPunch() { + punchList = window.punches; + + var id = document.getElementById("editID").value; + var subjectField = document.getElementById("editSubject").value; + var priorityField = document.getElementById("editPriority").value; + var progressField = document.getElementById("editProgress").value; + var nDateField = document.getElementById("timepickerEdit").value; + var notesField = document.getElementById("editNotes").value; + + punchList[id].subject = subjectField; + punchList[id].priority = priorityField; + punchList[id].progress = progressField; + punchList[id].nDate = nDateField; + punchList[id].notes = notesField; + + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); + disableElement("editPunch"); +} + +function addTag() { + /* Before doing this, + Refresh the array, + So that we don't overwrite data */ +getJson(); + + var item = document.getElementById("editID").value; + var newTag = document.getElementById("tag").value.toLowerCase(); + + console.log(`Item: ${item}`); + console.log(`New Tag: ${newTag}`); + // make sure tags object exists + if (punchList[item].tags === undefined) { + console.log(`Adding tags object to punchList[${item}]`); + punchList[item].tags = []; + } + + punchList[item].tags.push(newTag); + console.log(`${punchList[item].tags}`); + + jsonStr = JSON.stringify(punchList); + putJson(jsonStr); + disableElement("editPunch"); + enableElement("punchListAll"); +} + +function clearDefault(a){ + if (a.defaultValue == a.value) { + a.value=""; + } +} + +function genUid() { + function chr4() { + return Math.random().toString(16).slice(-4); + } + return chr4() + chr4() + + '-' + chr4() + + '-' + chr4() + + '-' + chr4() + + '-' + chr4() + chr4() + chr4(); +} + +//google stuff +function onSignIn(googleUser) { +// var profile = googleUser.getBasicProfile(); +// console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead. +// console.log('Name: ' + profile.getName()); +// console.log('Image URL: ' + profile.getImageUrl()); +// console.log('Email: ' + profile.getEmail()); // This is null if the 'email' scope is not present. +// getJson(); +} + +function signOut() { + var auth2 = gapi.auth2.getAuthInstance(); + auth2.signOut().then(function () { + console.log('User signed out.'); + }); +} + +getJson(); + +$('li').on("click", function(event){ + var target = event.target, + index = $(target).index(); + console.log(target, index); + document.getElementById("debug1").innerHTML = target + "
" + index; +}); diff --git a/punch_list/css/custom.css b/punch_list/css/custom.css index a64be62..c800df6 100644 --- a/punch_list/css/custom.css +++ b/punch_list/css/custom.css @@ -1,3 +1,7 @@ +#sortable { list-style-type: none; margin: 0; padding: 0; width: 100%; } +#sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; } +#sortable li span { position: absolute; margin-left: -1.3em; } +.hide { display: none; } body { background: #222; color: #AAA; } diff --git a/punch_list/metadata.js b/punch_list/metadata.js index c436bf7..a47e428 100644 --- a/punch_list/metadata.js +++ b/punch_list/metadata.js @@ -1,4 +1,4 @@ -var version = "0.4.015", +var version = "0.5.132", debug = false, jsonUrl = "https://api.myjson.com/bins/1dodsj", showDone = false,