Skip to content

Commit 6abc0f8

Browse files
committed
feat: full history
1 parent 546fb5a commit 6abc0f8

File tree

5 files changed

+90
-95
lines changed

5 files changed

+90
-95
lines changed

babel.config.json

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
22
"plugins": [
3+
"@babel/plugin-proposal-class-properties"
34
]
45
}

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "index.js",
66
"scripts": {
77
"dev": "run-p dev:webpack dev:ext",
8-
"dev:ext": "web-ext run --firefox-profile=dev-edition-default --start-url about:debugging#/runtime/this-firefox --start-url about:addons --verbose",
8+
"dev:ext": "web-ext run --firefox-profile=dev-edition-default --start-url about:debugging#/runtime/this-firefox --start-url about:addons",
99
"dev:webpack": "webpack --config webpack.config.dev.js --watch --node-env=development",
1010
"build": "run-s build:webpack build:ext",
1111
"build:ext": "web-ext build --overwrite-dest",
@@ -28,6 +28,7 @@
2828
"@babel/plugin-transform-react-jsx": "^7.12.17",
2929
"@babel/plugin-transform-runtime": "^7.13.10",
3030
"@babel/runtime": "^7.13.10",
31+
"@types/joi": "^17.2.3",
3132
"autoprefixer": "^10.2.5",
3233
"babel-loader": "^8.2.2",
3334
"clean-webpack-plugin": "^3.0.0",
@@ -62,6 +63,7 @@
6263
"dependencies": {
6364
"htm": "^3.0.4",
6465
"humanize-duration": "^3.25.1",
66+
"joi": "^17.4.0",
6567
"preact": "^10.5.13",
6668
"tailwindcss": "^2.0.4",
6769
"vue": "^2.6.12"

src/events.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,18 @@
77
export default {
88
ERR_0000: "Something went wrong.",
99

10-
FOCUS_0000: "Focus changed. No windows are focused.",
11-
FOCUS_0001: "Focus moved to another window.",
12-
FOCUS_0002: "Browser not focused.",
10+
RUNTIME_0000: "Extension welcome.",
11+
RUNTIME_0001: "Extension updated.",
12+
13+
SCHEMA_0000: "Datastore schema invalid.",
14+
SCHEMA_0001: "Updating datastore schema.",
15+
SCHEMA_0002: "Initializing datastore.",
16+
SCHEMA_0003: "Attaching runtime SchemaManager listeners",
17+
SCHEMA_0004: "Datastore validated",
18+
19+
STORE_0000: "Updating origin.",
20+
STORE_0001: "Updating index.",
21+
STORE_0002: "Logging error.",
1322

1423
TRACKING_0000: "Not tracking an origin.",
1524
TRACKING_0001: "Syncing.",
@@ -37,4 +46,10 @@ export default {
3746
TRACKING_0023: "totalTime invalid. Initializing.",
3847
TRACKING_0024: "totalTime valid. Incrementing.",
3948
TRACKING_0025: "Updating lastVisit.",
49+
TRACKING_0026: "Focus changed. No windows are focused.",
50+
TRACKING_0027: "Focus moved to another window.",
51+
TRACKING_0028: "Browser not focused.",
52+
TRACKING_0029: "Creating new session.",
53+
TRACKING_0030: "Session found.",
54+
TRACKING_0031: "Updating session.",
4055
};

src/options/App.vue

+21-91
Original file line numberDiff line numberDiff line change
@@ -8,48 +8,35 @@
88
v-model="search"
99
/>
1010
<span class="ml-4 text-xs xs:text-sm text-gray-900">
11-
Showing {{ sortedHistory.length }} Entries
11+
Showing {{ result.length }} Entries
1212
</span>
1313
<table class="min-w-full leading-normal mt-4">
1414
<thead>
1515
<tr>
1616
<th
17-
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider cursor-pointer"
18-
data-sortby="origin"
19-
v-on:click="sort"
20-
v-on:keyup.enter="sort"
21-
v-on:keyup.space="sort"
22-
tabindex="0"
23-
aria-label="sort by origin"
17+
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider w-1/3"
2418
>
2519
Origin
2620
</th>
2721
<th
28-
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider cursor-pointer"
29-
data-sortby="lastVisit"
30-
v-on:click="sort"
31-
v-on:keyup.enter="sort"
32-
v-on:keyup.space="sort"
33-
tabindex="0"
34-
aria-label="sort by last visit"
22+
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider"
23+
>
24+
First Visit
25+
</th>
26+
<th
27+
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider"
3528
>
3629
Last Visit
3730
</th>
3831
<th
39-
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider cursor-pointer"
40-
data-sortby="totalTime"
41-
v-on:click="sort"
42-
v-on:keyup.enter="sort"
43-
v-on:keyup.space="sort"
44-
tabindex="0"
45-
aria-label="sort by total time"
32+
class="px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-xs font-semibold text-gray-600 uppercase tracking-wider"
4633
>
4734
Total
4835
</th>
4936
</tr>
5037
</thead>
5138
<tbody>
52-
<tr v-for="entry in sortedHistory" v-bind:key="entry.origin">
39+
<tr v-for="entry in result" v-bind:key="entry.origin">
5340
<td class="px-5 py-5 border-b border-gray-200 bg-white text-sm">
5441
<div class="flex items-center">
5542
<p class="text-gray-900 whitespace-no-wrap">
@@ -59,12 +46,19 @@
5946
</td>
6047
<td class="px-5 py-5 border-b border-gray-200 bg-white text-sm">
6148
<p class="text-gray-900 whitespace-no-wrap">
62-
{{ entry.lastVisit }}
49+
{{ humanizeDate(entry.sessions[0].date) }}
50+
</p>
51+
</td>
52+
<td class="px-5 py-5 border-b border-gray-200 bg-white text-sm">
53+
<p class="text-gray-900 whitespace-no-wrap">
54+
{{
55+
humanizeDate(entry.sessions[entry.sessions.length - 1].date)
56+
}}
6357
</p>
6458
</td>
6559
<td class="px-5 py-5 border-b border-gray-200 bg-white text-sm">
6660
<p class="text-gray-900 whitespace-no-wrap">
67-
{{ entry.totalTime }}
61+
{{ humanizeDuration(entry.totalTime * 1000) }}
6862
</p>
6963
</td>
7064
</tr>
@@ -74,75 +68,11 @@
7468
class="px-5 py-5 bg-white border-t flex flex-col xs:flex-row items-center xs:justify-between"
7569
>
7670
<span class="text-xs xs:text-sm text-gray-900">
77-
Showing {{ sortedHistory.length }} Entries
71+
Showing {{ result.length }} Entries
7872
</span>
79-
<!--
80-
<div class="inline-flex mt-2 xs:mt-0">
81-
<button
82-
class="text-sm bg-gray-300 hover:bg-gray-400 text-gray-800 font-semibold py-2 px-4 rounded-l"
83-
>
84-
Prev
85-
</button>
86-
<button
87-
class="text-sm bg-gray-300 hover:bg-gray-400 text-gray-800 font-semibold py-2 px-4 rounded-r"
88-
>
89-
Next
90-
</button>
91-
</div>
92-
-->
9373
</div>
9474
</div>
9575
</div>
9676
</template>
9777

98-
<script>
99-
import { isValidDate, compare, humanizeEntry } from "../utils.js";
100-
101-
export default {
102-
name: "app",
103-
data: function () {
104-
return {
105-
history: [],
106-
sortby: "totalTime",
107-
ascending: false,
108-
search: "",
109-
};
110-
},
111-
mounted: async function () {
112-
const { data } = await browser.storage.local.get("data");
113-
114-
if (!data) return;
115-
116-
this.history = Object.keys(data).map((key) => {
117-
return {
118-
origin: key,
119-
...data[key],
120-
};
121-
});
122-
},
123-
computed: {
124-
sortedHistory: function () {
125-
return Array.from(this.history)
126-
.sort((a, b) => {
127-
const keyA = a[this.sortby];
128-
const keyB = b[this.sortby];
129-
130-
return compare(keyA, keyB, this.sortby, this.ascending);
131-
})
132-
.map(humanizeEntry)
133-
.filter(
134-
(entry) =>
135-
(this.search && entry.origin.includes(this.search)) || !this.search,
136-
);
137-
},
138-
},
139-
methods: {
140-
sort: function (event) {
141-
const sortby = event.currentTarget.dataset.sortby;
142-
143-
this.ascending = this.sortby === sortby && !this.ascending;
144-
this.sortby = sortby;
145-
},
146-
},
147-
};
148-
</script>
78+
<script src="./App.js"></script>

yarn.lock

+47
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,18 @@
306306
dependencies:
307307
purgecss "^3.1.3"
308308

309+
"@hapi/hoek@^9.0.0":
310+
version "9.1.1"
311+
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa"
312+
integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==
313+
314+
"@hapi/topo@^5.0.0":
315+
version "5.0.0"
316+
resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7"
317+
integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==
318+
dependencies:
319+
"@hapi/hoek" "^9.0.0"
320+
309321
310322
version "3.1.3"
311323
resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz#aed918e7d5916b2a5e2ec9678b3c74cafb20c7d6"
@@ -342,6 +354,23 @@
342354
mkdirp "^1.0.4"
343355
rimraf "^3.0.2"
344356

357+
"@sideway/address@^4.1.0":
358+
version "4.1.1"
359+
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.1.tgz#9e321e74310963fdf8eebfbee09c7bd69972de4d"
360+
integrity sha512-+I5aaQr3m0OAmMr7RQ3fR9zx55sejEYR2BFJaxL+zT3VM2611X0SHvPWIbAUBZVTn/YzYKbV8gJ2oT/QELknfQ==
361+
dependencies:
362+
"@hapi/hoek" "^9.0.0"
363+
364+
"@sideway/formula@^3.0.0":
365+
version "3.0.0"
366+
resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
367+
integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
368+
369+
"@sideway/pinpoint@^2.0.0":
370+
version "2.0.0"
371+
resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
372+
integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
373+
345374
"@sindresorhus/is@^0.14.0":
346375
version "0.14.0"
347376
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
@@ -393,6 +422,13 @@
393422
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50"
394423
integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==
395424

425+
"@types/joi@^17.2.3":
426+
version "17.2.3"
427+
resolved "https://registry.yarnpkg.com/@types/joi/-/joi-17.2.3.tgz#b7768ed9d84f1ebd393328b9f97c1cf3d2b94798"
428+
integrity sha512-dGjs/lhrWOa+eO0HwgxCSnDm5eMGCsXuvLglMghJq32F6q5LyyNuXb41DHzrg501CKNOSSAHmfB7FDGeUnDmzw==
429+
dependencies:
430+
joi "*"
431+
396432
"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
397433
version "7.0.7"
398434
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
@@ -3587,6 +3623,17 @@ jest-worker@^26.3.0, jest-worker@^26.6.2:
35873623
merge-stream "^2.0.0"
35883624
supports-color "^7.0.0"
35893625

3626+
joi@*, joi@^17.4.0:
3627+
version "17.4.0"
3628+
resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.0.tgz#b5c2277c8519e016316e49ababd41a1908d9ef20"
3629+
integrity sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==
3630+
dependencies:
3631+
"@hapi/hoek" "^9.0.0"
3632+
"@hapi/topo" "^5.0.0"
3633+
"@sideway/address" "^4.1.0"
3634+
"@sideway/formula" "^3.0.0"
3635+
"@sideway/pinpoint" "^2.0.0"
3636+
35903637
js-tokens@^4.0.0:
35913638
version "4.0.0"
35923639
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"

0 commit comments

Comments
 (0)