Skip to content

Commit d182028

Browse files
committed
wip
1 parent 871a950 commit d182028

30 files changed

+352
-496
lines changed

actionHandling/ActionHandlers.ts

Lines changed: 9 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ export function useActionHandlers($q: QVueGlobals | undefined) {
1414
if (folder && folder.type === TabsetType.RSS_FOLDER) {
1515
return new RssFolderHandler($q)
1616
}
17+
const metas = useContentStore().getCurrentTabMetas
1718
const content = useContentStore().getCurrentTabContent
1819
const handler = url
19-
? actionHandlerRepo.handlerFor(url, content || '', folder)
20+
? actionHandlerRepo.handlerFor(url, content || '', metas || {}, folder)
2021
: actionHandlerRepo.defaultAddUrlToTabsetHandler
21-
// console.log('getting url handler for ', url, handler)
2222
return handler
2323
}
2424

@@ -44,75 +44,18 @@ export function useActionHandlers($q: QVueGlobals | undefined) {
4444
const r = await args.actionContext.dialog.apply(null, [args.actionContext.$q!])
4545

4646
r.onOk((payload: any) => {
47-
console.log('payload', payload)
47+
console.log('-payload-', payload)
4848
const onOkHandler: (payload: any) => ClickedHandler = args.actionContext!.ok!
4949
const h = onOkHandler.apply(null, [payload])
50-
h.apply(null, [chromeTab, tabset, folder, { action: args.actionContext!, dialog: payload }])
50+
h.apply(null, [
51+
chromeTab,
52+
tabset,
53+
folder,
54+
{ action: args.actionContext!, data: { filename: payload }, dialog: payload },
55+
])
5156
})
5257
return
5358
}
54-
55-
//console.log('handleClick: ', tabset.id, handler, args.actionContext?.identifier)
56-
// switch (args.actionContext?.identifier) {
57-
// case ButtonActions.AddTab:
58-
// await handler.clicked(chromeTab, tabset, folder, { action: args.actionContext })
59-
// break
60-
// case ButtonActions.OpenTab:
61-
// await handler.clicked(chromeTab, tabset, folder, { action: args.actionContext })
62-
// break
63-
// case ButtonActions.AddTabWithDynamicFolder:
64-
// handler.withDialog(args.actionContext?.identifier)?.onOk((data: string[]) => {
65-
// console.log('data', data)
66-
// handler.clicked(chromeTab, tabset, undefined, {
67-
// data: { useForLinks: data.indexOf('useForLinks') >= 0 },
68-
// })
69-
// })
70-
// break
71-
// case ButtonActions.NewFile:
72-
// handler.withDialog(args.actionContext?.identifier)?.onOk((filename: string) => {
73-
// handler.clicked(chromeTab, tabset, undefined, { data: { filename } })
74-
// })
75-
// break
76-
// case ButtonActions.Save:
77-
// await handler.updateInTabset(chromeTab, tabset, args.additionalData)
78-
// break
79-
// case ButtonActions.SaveAs:
80-
// handler.withDialog(args.actionContext?.identifier)?.onOk((filename: string) => {
81-
// handler.clicked(chromeTab, tabset, undefined, { data: { filename } })
82-
// })
83-
// break
84-
// case ButtonActions.DynamicLoad:
85-
// console.log(`loading dynamic data for tabset/folder ${tabset.id}/${args['folder' as keyof object]} `)
86-
// await useCommandExecutor().execute(new LoadDynamicTabsCommand(tabset, args['folder' as keyof object]))
87-
// break
88-
// case ButtonActions.AddRssFeed:
89-
// console.log('===>', args.actionContext)
90-
// handler.withDialog(args.actionContext?.identifier)?.onOk((data: { b: boolean; s: string }) => {
91-
// console.log('in', data)
92-
// handler.clicked(chromeTab, tabset, undefined, { data: { more: data } })
93-
// })
94-
// break
95-
// case ButtonActions.LoadRssFeed:
96-
// await handler.clicked(chromeTab, tabset, folder)
97-
// break
98-
// case ButtonActions.ClearCanvas:
99-
// await handler.clicked(chromeTab, tabset, folder, {})
100-
// break;
101-
// case ButtonActions.ImportChromeBookmarks:
102-
// console.log('===>', args.actionContext)
103-
// handler.withDialog(args.actionContext?.identifier)?.onOk((input: string[]) => {
104-
// console.log('data', input)
105-
// handler.clicked(chromeTab, tabset, undefined, {
106-
// action: new ActionContext('Import', ButtonActions.ImportChromeBookmarks),
107-
// data: {
108-
// recursive: input.indexOf('recursive') >= 0,
109-
// },
110-
// })
111-
// })
112-
// break
113-
// default:
114-
// console.log('no action defined for ', args.actionContext?.identifier)
115-
// }
11659
}
11760

11861
return {

actionHandling/AddUrlToTabsetHandler.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export type ClickedHandler = (
2626

2727
export type ComponentContext = {
2828
label?: string
29+
chromeTab?: chrome.tabs.Tab
2930
}
3031

3132
export type ComponentWithContext = {
@@ -34,9 +35,9 @@ export type ComponentWithContext = {
3435
}
3536

3637
export interface AddUrlToTabsetHandler {
37-
urlMatcher: () => RegExp
38+
tabMatcher(url: string, content: string, metas: object): boolean
3839

39-
contentMatcher: (content: string) => boolean
40+
injectScript: () => Promise<void>
4041

4142
defaultAction: () => ActionContext | undefined
4243

actionHandling/AddUrlToTabsetHandlers.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,19 @@ export class AddUrlToTabsetHandlers {
2727
this.handlers.push(new FileProtocolUrlAddUrlToTabsetHandler(this.quasar))
2828
}
2929

30-
handlerFor(url: string, content: string, folder?: Tabset): AddUrlToTabsetHandler {
31-
//console.log(`checking handler for ${url}`)
30+
handlerFor(url: string, content: string, metas: object = {}, folder?: Tabset): AddUrlToTabsetHandler {
31+
//console.log(`checking handler for ${url}`, metas, content.length)
3232
const handler = this.handlers.filter(
33-
(h: AddUrlToTabsetHandler) => url.match(h.urlMatcher()) || h.contentMatcher(content),
33+
// (h: AddUrlToTabsetHandler) => url.match(h.urlMatcher()) || h.contentMatcher(content) || h.metasMatcher(metas),
34+
(h: AddUrlToTabsetHandler) => h.tabMatcher(url, content, metas),
3435
)
3536
if (handler && handler.length > 0) {
3637
//handler[0].setFolder(folder)
38+
//if (!this.injectedUrls.includes(url)) {
39+
//console.log('injecting to url', url)
40+
//await handler[0]!.injectScript()
41+
//this.injectedUrls.push(url)
42+
//}
3743
return handler[0]!
3844
}
3945
return new DefaultAddUrlToTabsetHandler(this.quasar!)

actionHandling/SidePanelToolbarFab.vue

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
<template>
22
<!-- SpecialUrlAddToTabsetComponent -->
3-
<!-- {{ handler.actions(currentTabsetId, { tabset: props.tabset, level: props.level }) }}-->
43
<template
5-
v-if="handler.actions(currentTabsetId, { tabset: props.tabset, level: 'root' }).length == 0 && defaultAction">
4+
v-if="
5+
handler.actions(currentTabsetId, {
6+
tabset: props.tabset,
7+
level: 'root',
8+
currentChromeTab: props.currentChromeTab,
9+
}).length == 0 && defaultAction
10+
">
611
<q-btn
712
padding="xs"
813
fab-mini
@@ -17,7 +22,7 @@
1722
<!-- <div>{{ defaultAction.label }}</div>-->
1823
<!-- <q-icon right class="q-ma-none q-pa-none" size="2em" name="o_south" />-->
1924
</q-btn>
20-
<q-tooltip class="tooltip-small" v-if="alreadyInTabset"> Already in current tabset</q-tooltip>
25+
<q-tooltip class="tooltip-small" v-if="alreadyInTabset">Already in current tabset</q-tooltip>
2126
<q-tooltip class="tooltip-small" v-else-if="containedInTsCount > 0">
2227
{{ tooltipAlreadyInOtherTabsets(props.tabset!.name) }}
2328
</q-tooltip>
@@ -28,21 +33,18 @@
2833

2934
<!-- SpecialUrlAddToTabsetComponent handlerDefaultAction -->
3035
<template v-else-if="showExtraMenuItems()">
31-
<!-- :disable="!handler.actions()[0]!.active(props.currentChromeTab)"-->
3236
<q-btn
33-
fab-mini
34-
glossy
3537
padding="xs"
36-
rounded
38+
fab-mini
39+
unelevated
3740
@click.stop="emits('buttonClicked', new ActionHandlerButtonClickedHolder(handler, defaultAction))"
38-
class="q-ma-none q-pa-none"
41+
class="q-ma-none q-px-sm q-py-none"
3942
:icon="defaultAction?.icon"
4043
:class="{ shakeWithColor: animateAddtabButton, 'cursor-pointer': !alreadyInTabset }"
4144
:color="alreadyInTabset ? 'grey-5' : containedInTsCount > 0 ? 'primary' : 'warning'"
45+
size="12px"
4246
data-testid="saveInTabsetBtn">
43-
<!-- <div>{{ defaultAction.label }}</div>-->
44-
<!-- <q-icon right class="q-ma-none q-pa-none" size="2em" name="o_south" />-->
45-
<q-tooltip class="tooltip-small" v-if="alreadyInTabset"> Already in current tabset</q-tooltip>
47+
<q-tooltip class="tooltip-small" v-if="alreadyInTabset">Already in current tabset {{ defaultAction }}</q-tooltip>
4648
<q-tooltip class="tooltip-small" v-else-if="containedInTsCount > 0">
4749
{{ tooltipAlreadyInOtherTabsets(props.tabset!.name) }}
4850
</q-tooltip>
@@ -56,13 +58,19 @@
5658
<q-btn flat icon="more_vert" text-color="primary" class="cursor-pointer q-ma-none q-pa-none" size="md" />
5759
<q-menu :offset="[0, 0]" @click.stop="">
5860
<q-list dense style="min-width: 200px">
59-
<template v-for="l in handler.actions(currentTabsetId, { tabset: props.tabset, level: 'root' })">
61+
<template
62+
v-for="l in handler.actions(currentTabsetId, {
63+
tabset: props.tabset,
64+
level: 'root',
65+
currentChromeTab: props.currentChromeTab,
66+
})">
6067
<template v-if="'context' in l">
6168
<component
6269
:key="l.component.name"
6370
:is="l.component"
6471
:tabset="props.tabset"
6572
:folder="props.folder"
73+
:currentChromeTab="props.currentChromeTab"
6674
:level="'root'"
6775
:context="'context' in l ? l.context : {}" />
6876
</template>
@@ -84,9 +92,7 @@ import { AddUrlToTabsetHandler } from 'src/tabsets/actionHandling/AddUrlToTabset
8492
import { NoopAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/NoopAddUrlToTabsetHandler'
8593
import { ActionContext } from 'src/tabsets/actionHandling/model/ActionContext'
8694
import { ActionHandlerButtonClickedHolder } from 'src/tabsets/actionHandling/model/ActionHandlerButtonClickedHolder'
87-
import { useTabsetService } from 'src/tabsets/services/TabsetService2'
8895
import { useTabsetsStore } from 'src/tabsets/stores/tabsetsStore'
89-
import { useUiStore } from 'src/ui/stores/uiStore'
9096
import { ref, watchEffect } from 'vue'
9197
import { Tabset } from '../models/Tabset'
9298
@@ -118,29 +124,33 @@ watchEffect(() => {
118124
119125
const showExtraMenuItems = () => {
120126
const res: boolean =
121-
handler.value.actions(currentTabsetId.value, { tabset: props.tabset, level: 'root' }).length > 0 &&
122-
defaultAction.value !== undefined
127+
handler.value.actions(currentTabsetId.value, {
128+
tabset: props.tabset,
129+
level: 'root',
130+
currentChromeTab: props.currentChromeTab,
131+
}).length > 0 && defaultAction.value !== undefined
123132
emits('extraSpaceNeeded', res)
124133
return res
125134
}
126135
127136
watchEffect(() => {
137+
//console.log('defaultAction!!', props.currentChromeTab.url, props.folder)
128138
handler.value = getHandler(props.currentChromeTab.url, props.folder)
129139
defaultAction.value = handler.value.defaultAction()
130140
showExtraMenuItems()
131141
})
132142
133-
watchEffect(() => {
134-
containedInTsCount.value = useTabsetService().tabsetsFor(props.currentChromeTab.url!).length
135-
})
136-
137-
watchEffect(() => {
138-
animateAddtabButton.value = useUiStore().animateAddtabButton
139-
})
140-
141-
watchEffect(() => {
142-
alreadyInTabset.value = useTabsetService().urlExistsInCurrentTabset(props.currentChromeTab.url)
143-
})
143+
// watchEffect(() => {
144+
// containedInTsCount.value = useTabsetService().tabsetsFor(props.currentChromeTab.url!).length
145+
// })
146+
//
147+
// watchEffect(() => {
148+
// animateAddtabButton.value = useUiStore().animateAddtabButton
149+
// })
150+
//
151+
// watchEffect(() => {
152+
// alreadyInTabset.value = useTabsetService().urlExistsInCurrentTabset(props.currentChromeTab.url)
153+
// })
144154
145155
const activeFolderNameFor = (ts: Tabset, activeFolder: string) => {
146156
const folder = useTabsetsStore().getActiveFolder(ts, activeFolder)

actionHandling/SpecialUrlAddToTabsetComponent.vue

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,6 @@
2525
</q-tooltip>
2626
</template>
2727

28-
<!-- <template v-else-if="handler.actions(currentTabsetId, { tabset: props.tabset, level: props.level }).length == 1">-->
29-
<!-- <q-btn-->
30-
<!-- outline-->
31-
<!-- @click.stop="emits('buttonClicked', new ActionHandlerButtonClickedHolder(handler, defaultAction))"-->
32-
<!-- class="q-ma-none q-px-sm q-py-none"-->
33-
<!-- :class="{ shakeWithColor: animateAddtabButton, 'cursor-pointer': !alreadyInTabset }"-->
34-
<!-- :color="alreadyInTabset ? 'grey-5' : containedInTsCount > 0 ? 'positive' : ''"-->
35-
<!-- :size="props.level === 'root' ? 'sm' : 'xs'"-->
36-
<!-- data-testid="saveInTabsetBtn">-->
37-
<!-- <div>***</div>-->
38-
<!-- &lt;!&ndash; <q-icon right class="q-ma-none q-pa-none" size="2em" name="o_south" />&ndash;&gt;-->
39-
<!-- </q-btn>-->
40-
<!-- <q-tooltip class="tooltip-small" v-if="alreadyInTabset">-->
41-
<!-- Tab is already contained in tabset '{{ props.tabset?.name }}'...-->
42-
<!-- </q-tooltip>-->
43-
<!-- <q-tooltip class="tooltip-small" v-else-if="containedInTsCount > 0">-->
44-
<!-- {{ tooltipAlreadyInOtherTabsets(props.tabset!.name) }}-->
45-
<!-- </q-tooltip>-->
46-
<!-- <q-tooltip class="tooltip-small" v-else>-->
47-
<!-- Add current Tab to '{{ tabsetNameOrChain(props.tabset as Tabset) }}'...-->
48-
<!-- </q-tooltip>-->
49-
<!-- </template>-->
50-
5128
<!-- SpecialUrlAddToTabsetComponent handlerDefaultAction -->
5229
<template
5330
v-else-if="
@@ -84,6 +61,7 @@
8461
:is="l.component"
8562
:tabset="props.tabset"
8663
:folder="props.folder"
64+
:currentChromeTab="props.currentChromeTab"
8765
:level="props.level"
8866
:context="'context' in l ? l.context : {}" />
8967
</template>
@@ -148,7 +126,7 @@ watchEffect(() => {
148126
watchEffect(() => {
149127
handler.value = getHandler(props.currentChromeTab.url, props.folder)
150128
defaultAction.value = handler.value.defaultAction()
151-
//console.log('***', handler.value.actions('currentTabsetId'))
129+
console.log('***') //, handler.value.actions('currentTabsetId'))
152130
// const currentTabsetId = await useTabsetsStore().getCurrentTabsetId()
153131
})
154132

actionHandling/handler/DefaultActions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class DefaultActions {
3737

3838
// actions.push(OpenAllInMenuAction)
3939

40-
// if (useFeaturesStore().hasFeature(FeatureIdent.DEV_MODE)) {
40+
// if (useSettingsStore().has('DEV_MODE')) {
4141
// actions.push(ExportTabsetAction)
4242
// }
4343

actionHandling/handler/DefaultAddUrlToTabsetHandler.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ import { Component } from 'vue'
2020
export class DefaultAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
2121
constructor(public $q: QVueGlobals) {}
2222

23-
urlMatcher(): RegExp {
24-
return /.*/
23+
tabMatcher(url: string, content: string, metas: object): boolean {
24+
return true
2525
}
2626

27-
contentMatcher(content: string) {
28-
return true
27+
injectScript(): Promise<void> {
28+
return Promise.resolve()
2929
}
3030

3131
defaultAction(): ActionContext {

actionHandling/handler/DynamicUrlAddUrlToTabsetHandler.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ export class DynamicUrlAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
1818
// private folder?: Tabset
1919
// ) {
2020
// }
21-
urlMatcher() {
22-
return /.*/
23-
}
2421

25-
contentMatcher(content: string) {
22+
tabMatcher(url: string, content: string, metas: object): boolean {
2623
return false
2724
}
2825

26+
injectScript(): Promise<void> {
27+
return Promise.resolve()
28+
}
29+
2930
defaultAction(): ActionContext {
3031
return null as unknown as ActionContext
3132
}

0 commit comments

Comments
 (0)