From a573835219b6ddb863c5b8a01f045548c9850194 Mon Sep 17 00:00:00 2001 From: Seth Trowbridge Date: Mon, 3 Nov 2025 13:24:16 -0500 Subject: [PATCH] colors improved, still not quite right --- app.js | 133 +++++++++--------- graph/graph.js | 17 ++- graph/types.ts | 4 +- mock-user-folder/graph/room.js | 7 +- .../store/room_01/pass_01/u5.json | 8 ++ .../store/room_01/pass_02/u1.json | 8 ++ .../store/room_01/pass_02/u5.json | 8 ++ styles.js | 19 ++- 8 files changed, 121 insertions(+), 83 deletions(-) create mode 100644 mock-user-folder/store/room_01/pass_01/u5.json create mode 100644 mock-user-folder/store/room_01/pass_02/u1.json create mode 100644 mock-user-folder/store/room_01/pass_02/u5.json diff --git a/app.js b/app.js index d6bcdfe..74a06f0 100644 --- a/app.js +++ b/app.js @@ -132,77 +132,82 @@ function Desks(inDesks) } } - let emptyCount = 0; - - /** @type {(part:TYPES.Part, index:number, array:TYPES.Part[], pass:TYPES.Pass, dirty:number[], type:"need"|"make")=>HTMLElement|null} */ - const Iterator = (part, index, array, pass, dirty, type)=>{ - - const partPass = part.pass.get(pass); - if(partPass) - { - const time = partPass.time; - const latest = partPass.work.find(t=>t[0] == time); - - if(type == "need") - { - if(!latest) - { - emptyCount++; - } - } - - const attributes = { - class: dirty.includes(index) ? Tag("DeskDirty") : (type == "need"&&!latest) ? Tag("PartEmpty") : "" - }; - - - if(type == "make") - { - attributes.onclick=function(){ - loggedIn.rawVal && van.add(this, Input((str)=>{ - if(loggedIn.rawVal) - { - blocking.val = true; - partPass.make(loggedIn.rawVal, str).then(()=>{ - deskRender.val++; - blocking.val = false; - }) - } - else - { - return false; - } - - })); - } - } - - return DOM.td( - Div.Part( - attributes, - latest?.[1] || "" - ) - ); - } - return null; - } const work = []; - for(const [pass, dirty] of desk.pass) + for(const [pass, scan] of desk.pass) { - emptyCount = 0; - - const need = desk.need.map((part, index, array)=>Iterator(part, index, array, pass, dirty.need, "need")); - if(desk.need.length == 0 || emptyCount == 0) - { - - } + const drawDirtyAsCaution = scan.need_empty.length>0 && scan.need_empty.length + { + const partPass = part.pass.get(pass); + if(!partPass){ return null } + const latest = partPass.work.find(t=>t[0] == partPass.time)?.[1]; + + const attributes = {}; + + attributes.class = latest ? Tag("PartGood") : Tag("PartEmpty"); + + if(scan.need_dirty.includes(index)) + { + attributes.class = drawDirtyAsCaution ? Tag("PartCaution") : Tag("PartDirty"); + } + + return DOM.td( + Div.Part( + attributes, + latest + ) + ); + }), DOM.td("->"), - desk.make.map((part, index, array)=>Iterator(part, index, array, pass, dirty.make, "make")) + desk.make.map((part, index, array)=> + { + const partPass = part.pass.get(pass); + if(!partPass){ return null } + const latest = partPass.work.find(t=>t[0] == partPass.time)?.[1]; + + const attributes = { + onclick(){ + loggedIn.rawVal && van.add(this, Input((str)=>{ + if(loggedIn.rawVal) + { + blocking.val = true; + partPass.make(loggedIn.rawVal, str).then(()=>{ + deskRender.val++; + blocking.val = false; + }) + } + else + { + return false; + } + + })); + } + }; + + attributes.class = latest ? Tag("PartGood") : Tag("PartEmpty"); + + if(scan.make_dirty.includes(index)) + { + attributes.class = drawDirtyAsCaution ? Tag("PartCaution") : Tag("PartDirty"); + } + if(desk.need.length == 0 && !latest) + { + attributes.class = Tag("PartDirty"); + } + + return DOM.td( + Div.Part( + attributes, + latest + ) + ); + }), )) } diff --git a/graph/graph.js b/graph/graph.js index 58b3735..71daf6d 100644 --- a/graph/graph.js +++ b/graph/graph.js @@ -219,6 +219,9 @@ const Scan =(desk, pass)=> const dirtyNeed = []; const dirtyMake = []; + const emptyNeed = []; + const emptyMake = []; + let makeMin = Infinity; let needMax = -Infinity; @@ -228,6 +231,7 @@ const Scan =(desk, pass)=> const part = desk.need[i]; const partPassTime = part.pass.get(pass)?.time || 0; if(partPassTime > needMax) needMax = partPassTime; + if(!partPassTime) emptyNeed.push(i) } // update makeMin AND dirty check makes @@ -236,10 +240,8 @@ const Scan =(desk, pass)=> const part = desk.make[i]; const partPassTime = part.pass.get(pass)?.time || 0; if(partPassTime < makeMin) makeMin = partPassTime; - if(partPassTime < needMax) - { - dirtyMake.push(i); - } + if(partPassTime < needMax) dirtyMake.push(i); + if(!partPassTime) emptyMake.push(i) } // dirty check needs @@ -247,11 +249,8 @@ const Scan =(desk, pass)=> { const part = desk.need[i]; const partPassTime = part.pass.get(pass)?.time || 0; - if(partPassTime > makeMin) - { - dirtyNeed.push(i); - } + if(partPassTime > makeMin) dirtyNeed.push(i); } - desk.pass.set(pass, {need:dirtyNeed, make:dirtyMake}) + desk.pass.set(pass, {need_dirty:dirtyNeed, make_dirty:dirtyMake, need_empty:emptyNeed, make_empty:emptyMake}) }; \ No newline at end of file diff --git a/graph/types.ts b/graph/types.ts index 90758c4..ac96f57 100644 --- a/graph/types.ts +++ b/graph/types.ts @@ -1,10 +1,10 @@ export type User = {name:string, id:string, desk:Set}; export type Role = {name:string, id:string, user:User[]}; -export type Desk = {name:string, id:string, need:Part[], time:number[], make:Part[], pass:Map, mode:string, role:Role[]}; +export type Desk = {name:string, id:string, need:Part[], time:number[], make:Part[], pass:Map, mode:string, role:Role[]}; export type Pass = {name:string, id:string, path:string, live:boolean, load:()=>Promise, dump:()=>void}; export type Part = {name:string, id:string, pass:MapPromise}>, need:Desk[], make:Desk[]}; export type Work = [time:number, data:string, user:User]; -export type Flag = {need:number[], make:number[]} +export type Scan = {need_dirty:number[], make_dirty:number[], need_empty:number[], make_empty:number[]} export type GraphBuilder= < diff --git a/mock-user-folder/graph/room.js b/mock-user-folder/graph/room.js index 4218488..836ed69 100644 --- a/mock-user-folder/graph/room.js +++ b/mock-user-folder/graph/room.js @@ -8,13 +8,13 @@ const user = { u6:"Matt Y", u7:"Seth F", u8:"Brittany F" -} +}; export default CreateAllRooms({ room_01:Room({ user, role:{ - dev:["Development", "u1"], + dev:["Development", "u1"], write:["Writing", "u5"], admin:["Admin", "u4"] }, @@ -22,10 +22,11 @@ export default CreateAllRooms({ p1:"Page title", p2:"Page slug", p3:"Page preview", + p4:"Page Project", }, desk:{ d1:["Write page metas", ["admin", "write"], "all", {}, "p1", "p2"], - d2:["Build Page preview", ["admin", "dev"], "all", {p1:1, p2:1}, "p3" ] + d2:["Build Page preview", ["admin", "dev"], "all", {p1:1, p2:1}, "p3", "p4"] }, pass:{ pass_01:["January"], diff --git a/mock-user-folder/store/room_01/pass_01/u5.json b/mock-user-folder/store/room_01/pass_01/u5.json new file mode 100644 index 0000000..b777230 --- /dev/null +++ b/mock-user-folder/store/room_01/pass_01/u5.json @@ -0,0 +1,8 @@ +{ + "p2": [ + [ + 1762186044460, + "le-slug" + ] + ] +} \ No newline at end of file diff --git a/mock-user-folder/store/room_01/pass_02/u1.json b/mock-user-folder/store/room_01/pass_02/u1.json new file mode 100644 index 0000000..839715b --- /dev/null +++ b/mock-user-folder/store/room_01/pass_02/u1.json @@ -0,0 +1,8 @@ +{ + "p4": [ + [ + 1762193485093, + "proj01" + ] + ] +} \ No newline at end of file diff --git a/mock-user-folder/store/room_01/pass_02/u5.json b/mock-user-folder/store/room_01/pass_02/u5.json new file mode 100644 index 0000000..f947370 --- /dev/null +++ b/mock-user-folder/store/room_01/pass_02/u5.json @@ -0,0 +1,8 @@ +{ + "p1": [ + [ + 1762186057868, + "new post" + ] + ] +} \ No newline at end of file diff --git a/styles.js b/styles.js index 5b443ed..6e3da7a 100644 --- a/styles.js +++ b/styles.js @@ -12,11 +12,24 @@ export default Gale({ Part:{ border: `1px solid black`, borderRadius: `5px`, - padding: `1rem` + padding: `1rem`, + }, + PartGood:{ + background:"#009b2e", + color:"white", + fontWeight: "bolder", }, PartEmpty:{ background:"gray" }, + PartDirty:{ + background:"tomato", + color:"white", + }, + PartCaution:{ + background:"yellow", + color:"black", + }, BlockScreen:{ position: "fixed", zIndex: "9999", @@ -31,10 +44,6 @@ export default Gale({ borderRadius: `5px`, padding: `1rem` }, - DeskDirty:{ - background:"tomato", - color:"white", - }, GapHorizontal:{ borderCollapse:"separate", borderSpacing:"0 2rem",