From 8961ab5a8931104e14711a82fb240707af9d9653 Mon Sep 17 00:00:00 2001 From: amki Date: Mon, 27 Jul 2020 15:54:26 +0200 Subject: [PATCH] Add ugly self-made timeline --- cd.css | 10 ++++++++++ cd.js | 56 ++++++++++++++++++++++++++++++++++-------------------- index.html | 6 ++++-- 3 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 cd.css diff --git a/cd.css b/cd.css new file mode 100644 index 0000000..587e5d5 --- /dev/null +++ b/cd.css @@ -0,0 +1,10 @@ +.timeline-container { + width: 100%; + height: 50px; + background-color: green; +} +.timeline-used { + position: absolute; + height: 50px; + background-color: red; +} \ No newline at end of file diff --git a/cd.js b/cd.js index afd6d72..993eea8 100644 --- a/cd.js +++ b/cd.js @@ -33,23 +33,34 @@ var trackedCooldowns = { // Do stuff when HTML parsing is ready $(() => { - ko.bindingHandlers.foreachprop = { - transformObject: function (obj) { - var properties = []; - ko.utils.objectForEach(obj, function (key, value) { - properties.push({ key: key, value: value }); - }); - return properties; + ko.components.register('fight-timeline', { + viewModel: function(params) { + var self = this; + // Data: value is either null, 'like', or 'dislike' + this.fight = params.value.fight(); + this.actors = params.value.actors; + console.log("fight-timeline: Got ",params.value); + + // Behaviors + self.calculateDivStyle = function(timestamp, ability) { + var fight_length = self.fight.end_time - self.fight.start_time; + console.log("Fight was "+fight_length); + var cooldown = window.trackedCooldowns[ability.guid].cooldown; + console.log("Use was at "+timestamp+" and cd is "+cooldown); + var startpct = timestamp / fight_length * 100; + var widthpct = cooldown / fight_length * 100; + console.log("Cooldown started at "+startpct+"% and endured "+widthpct+"%"); + var res = {color: "teal", "margin-left": startpct+"%", width:widthpct+"%"}; + return res; + }; }, - init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { - var properties = ko.pureComputed(function () { - var obj = ko.utils.unwrapObservable(valueAccessor()); - return ko.bindingHandlers.foreachprop.transformObject(obj); - }); - ko.applyBindingsToNode(element, { foreach: properties }, bindingContext); - return { controlsDescendantBindings: true }; - } - }; + template: + '
\ + \ + \ + \ +
' + }); // Document is ready function IndexViewModel() { var self = this; @@ -71,8 +82,12 @@ $(() => { self.displayFightPicker(true); }; - self.formatTime = function(fight) { - let secs = (fight.end_time - fight.start_time)/1000; + self.formatFightTime = function(fight) { + return self.formatTime(fight.end_time - fight.start_time); + }; + + self.formatTime = function(time) { + let secs = time/1000; let mins = Math.floor(secs / 60); let rest = Math.floor(secs % 60); return mins+"m"+rest+"s"; @@ -106,9 +121,7 @@ $(() => { //FIXME: This is a hack, we should instead somehow update the trackedEvents observable so only this part is rerendered self.trackedActors([]); self.trackedActors(actors); - for(var actor of self.trackedActors()) { - console.log("tracked: ",actor.trackedEvents()); - } + console.log("trackedActors: ",self.trackedActors()); }; self.textColor = function(job) { @@ -167,6 +180,7 @@ async function filterEvents(fight, events) { actor.trackedEvents = ko.observableArray(); result.push(actor); } + event.timestamp = event.timestamp - fight.start_time; actor.trackedEvents.push(event); console.log(event); } diff --git a/index.html b/index.html index c3d132f..ea70022 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,7 @@ +
@@ -23,7 +24,7 @@