diff --git a/src/js/src/tracker/app.js b/src/js/src/tracker/app.js index 2af77f5..d431596 100644 --- a/src/js/src/tracker/app.js +++ b/src/js/src/tracker/app.js @@ -2,10 +2,14 @@ function main(global) { const tracker = {}; - global.app = tracker; + const domain = createDomain({},q("#record .col-memo").textContent); + + const app = tracker; global.addEventListener("load", initialize); global.addEventListener("keydown", checkShortKeys); + return; + function q(element, selector) { // 引数一つはdocumentを起点に検索する if (arguments.length <= 1) @@ -26,6 +30,77 @@ return result; } + function createDomain(domain, firstmemo) { + domain.log = { + start: startLog, + end: endLog, + getLatest: getLatestLog, + private: { + latest: false, + initialize: initializeLog, + }, + }; + domain.latest= Date.now(); + domain.log.private.initialize(firstmemo); + q("#record .col-memo").textContent + return domain; + + /* + * 関数宣言 + */ + + // Log操作 + function initializeLog(memo) { + const log = domain.log; + if(log.private.latest) { + return; + } + + log.private.latest = { + memo: memo, + start: new Date(), + end: "", + interval: "", + } + } + + function getLatestLog() { + return domain.log.private.latest; + } + + // 新しい記録を始める。古い記録は終了される。 + function startLog(memo, start) { + const log = domain.log; + + const secondary = log.private.latest; + // 実質Logオブジェクトを生成している箇所 + const primary = { + memo: memo, + start: start, + end: "", + interval: "", + }; + + secondary.end = start; + // ここが開始-終了の引き算とラップタイムが合わない理由 + secondary.interval = Date.now() - domain.latest; + domain.latest = Date.now(); + + log.private.latest = primary; + + return new Promise((resolve, reject) => { + resolve([primary,secondary]); + }); + + //return primary; + + } + + function endLog(end) { + + } + } + function initialize() { /* * アプリケーションオブジェクトの設定 @@ -56,9 +131,7 @@ } const data = { - domain: { - latest: Date.now() - }, + domain: domain, control: { get accesskey() { @@ -80,6 +153,7 @@ command: {value: command}, key: {value: key}, data: {value: data}, + domain:{value: domain}, }); // 初期行の変更 @@ -100,46 +174,65 @@ } function addEvent(memo, datetime) { + //ISOString形式の例: 14:02:12T00:12:34.000Z" + const today = (new Date(Date.now())).toISOString().substr(0, 10); + let finishTime = "" + if(datetime) { + finishTime = new Date(today + "T" + datetime); + } else { + finishTime = new Date(); + } - const newTime = datetime || tracker.command.getNow(); const newMemo = memo.toString(); - const newEvent = q(tracker.ui.tmpl.eventRec.content.cloneNode(true), "tr"); - let tr = q(tracker.ui.eventLogs, "tbody tr "); + domain.log.start(newMemo, finishTime) + .then(value => { + const first = value[0]; + const second = value[1]; + __addEvent(first, second); + }) - q(newEvent, "td.col-position-start").textContent = newTime; - q(newEvent, "td.col-memo").textContent = newMemo; - if (tr instanceof Element) { // i.e. 行数1行 - insertNewEvent(newEvent, tr, newTime); - } else if (tr.length > 0) { // i.e. 行数2行以上 - insertNewEvent(newEvent, tr[0], newTime); - } else { // i.e. 行数0行 - q(tracker.ui.eventLogs, "tbody").appendChild(newEvent); - } + function __addEvent(firstLog, secondLog) { + const newTime = firstLog.start.toLocaleTimeString('ja-JP'); + const newMemo = firstLog.memo; - function insertNewEvent(first, second, endTime) { - // second行の開始は作成時に入っている。 - const startTime = q(second, "td.col-position-start").textContent; - q(second, "td.col-position-end").textContent = endTime; - q(second, "td.col-interval").textContent = getInterval(startTime, endTime); + const newEvent = q(tracker.ui.tmpl.eventRec.content.cloneNode(true), "tr"); + let tr = q(tracker.ui.eventLogs, "tbody tr "); - q(tracker.ui.eventLogs, "tbody").insertBefore(first, second); - } + q(newEvent, "td.col-position-start").textContent = newTime; + q(newEvent, "td.col-memo").textContent = newMemo; + if (tr instanceof Element) { // i.e. 行数1行 + insertNewEvent(newEvent, tr, newTime); + } else if (tr.length > 0) { // i.e. 行数2行以上 + insertNewEvent(newEvent, tr[0], newTime); + } else { // i.e. 行数0行 + q(tracker.ui.eventLogs, "tbody").appendChild(newEvent); + } + + function insertNewEvent(first, second, endTime) { + // second行の開始列は作成時に入っている。 + const startTime = q(second, "td.col-position-start").textContent; + q(second, "td.col-position-end").textContent = endTime; + q(second, "td.col-interval").textContent = getInterval(startTime, endTime); + + q(tracker.ui.eventLogs, "tbody").insertBefore(first, second); + } - function getInterval(start, end) { - const old = tracker.data.domain.latest - tracker.data.domain.latest = Date.now(); - let interval = tracker.data.domain.latest - old; - //秒単位にする。ミリ秒以下の数字を先に0にすることで割り切れるようにしてる。 - interval = ( interval - (interval % 1000) ) / 1000 - /* - const date = (new Date()).toLocaleDateString("ja-JP"); - const before = new Date(date.replaceAll('/', '-') + "T" + start); - const after = new Date(date.replaceAll('/', '-') + "T" + end); - // Dateの起算が1970/1/1/ 00:00:00 (UTC)のため、時刻として時間を求められる。 - const interval = before.getTime() - after.getTime(); - */ - return interval; + function getInterval(start, end) { + const old = tracker.data.domain.latest + tracker.data.domain.latest = Date.now(); + let interval = tracker.data.domain.latest - old; + //秒単位にする。ミリ秒以下の数字を先に0にすることで割り切れるようにしてる。 + interval = (interval - (interval % 1000)) / 1000 + /* + const date = (new Date()).toLocaleDateString("ja-JP"); + const before = new Date(date.replaceAll('/', '-') + "T" + start); + const after = new Date(date.replaceAll('/', '-') + "T" + end); + // Dateの起算が1970/1/1/ 00:00:00 (UTC)のため、時刻として時間を求められる。 + const interval = before.getTime() - after.getTime(); + */ + return interval; + } } }