Skip to content

Commit 4996008

Browse files
committed
wip
1 parent f4e36e7 commit 4996008

31 files changed

+467
-264
lines changed

actionHandling/ActionHandlers.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
import { QVueGlobals } from 'quasar'
22
import { useContentStore } from 'src/content/stores/contentStore'
3-
import { AddUrlToTabsetHandler, ClickedHandler } from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
4-
import { AddUrlToTabsetHandlers } from 'src/tabsets/actionHandling/AddUrlToTabsetHandlers'
5-
import { RssFolderHandler } from 'src/tabsets/actionHandling/handler/RssFolderHandler'
63
import { ActionHandlerButtonClickedHolder } from 'src/tabsets/actionHandling/model/ActionHandlerButtonClickedHolder'
7-
import { Tabset, TabsetType } from 'src/tabsets/models/Tabset'
4+
import { ClickedHandler, TabActionMatcher } from 'src/tabsets/actionHandling/TabActionMatcher'
5+
import { TabActionMatchers } from 'src/tabsets/actionHandling/TabActionMatchers'
6+
import { Tabset } from 'src/tabsets/models/Tabset'
87

98
export function useActionHandlers($q: QVueGlobals | undefined) {
10-
const actionHandlerRepo = new AddUrlToTabsetHandlers($q)
9+
const actionHandlerRepo = new TabActionMatchers($q)
1110

12-
function getHandler(url?: string, folder?: Tabset): AddUrlToTabsetHandler {
11+
function getHandler(url?: string, folder?: Tabset): TabActionMatcher {
1312
//console.log(`getHandler for '${url}', folderId=${folder?.id}, type=${folder?.type}`)
14-
if (folder && folder.type === TabsetType.RSS_FOLDER) {
15-
return new RssFolderHandler($q)
16-
}
13+
// if (folder && folder.type === TabsetType.RSS_FOLDER) {
14+
// return new RssFolderHandler($q)
15+
// }
1716
const metas = useContentStore().getCurrentTabMetas
1817
const content = useContentStore().getCurrentTabContent
1918
const handler = url

actionHandling/SidePanelToolbarFab2.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@
123123
import { useQuasar } from 'quasar'
124124
import { useSettingsStore } from 'src/core/stores/settingsStore'
125125
import { useActionHandlers } from 'src/tabsets/actionHandling/ActionHandlers'
126-
import { AddUrlToTabsetHandler, ComponentWithContext } from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
127126
import { NoopAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/NoopAddUrlToTabsetHandler'
127+
import { ComponentWithContext, TabActionMatcher } from 'src/tabsets/actionHandling/TabActionMatcher'
128128
import { useTabsetService } from 'src/tabsets/services/TabsetService2'
129129
import { useTabsetsStore } from 'src/tabsets/stores/tabsetsStore'
130130
import { useUiStore } from 'src/ui/stores/uiStore'
@@ -143,7 +143,7 @@ const $q = useQuasar()
143143
144144
const { getHandler } = useActionHandlers($q)
145145
146-
const handler = ref<AddUrlToTabsetHandler>(new NoopAddUrlToTabsetHandler())
146+
const handler = ref<TabActionMatcher>(new NoopAddUrlToTabsetHandler())
147147
// const defaultAction = ref<ActionContext | undefined>(undefined)
148148
const containedInTsCount = ref(0)
149149
const animateAddtabButton = ref(false)
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,24 @@ export type ClickedHandler = (
2727
export type ComponentContext = {
2828
label?: string
2929
chromeTab?: chrome.tabs.Tab
30+
currentTabset?: Tabset
3031
}
3132

3233
export type ComponentWithContext = {
3334
component: Component
3435
context: ComponentContext
3536
}
3637

37-
export interface AddUrlToTabsetHandler {
38+
/**
39+
* Implementors define if they want to provide specific actions for the current tab's url and/or content and/or meta information.
40+
* If the tabMatcher matches, the provided actions (a certain type of Component) are returned and can be used in context menues and the like.
41+
*/
42+
export interface TabActionMatcher {
3843
tabMatcher(url: string, content: string, metas: object): boolean
3944

40-
injectScript: () => Promise<void>
41-
42-
//defaultAction: () => ActionContext | undefined
43-
4445
actions: (currentTabsetId: string | undefined, actionProps: ActionProps) => ComponentWithContext[]
4546

46-
//clicked: ClickedHandler
47+
injectScript: () => Promise<void>
4748

4849
//updateInTabset: ClickedHandler
4950

Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import { QVueGlobals } from 'quasar'
2-
import { AddUrlToTabsetHandler } from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
3-
import { DefaultAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/DefaultAddUrlToTabsetHandler'
2+
import { DefaultTabActionMatcher } from 'src/tabsets/actionHandling/handler/DefaultTabActionMatcher'
43
import { ExcalidrawAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/ExcalidrawAddUrlToTabsetHandler'
54
import { FileProtocolUrlAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/FileProtocolUrlAddUrlToTabsetHandler'
65
import { ImportFromChromeBookmarksManagerAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/ImportFromChromeBookmarksManagerAddUrlToTabsetHandler'
76
import { MarkdownFileAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/MarkdownFileAddUrlToTabsetHandler'
87
import { ObsidianApiAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/ObsidianApiAddUrlToTabsetHandler'
8+
import { PublicTabsetsTabActionMatcher } from 'src/tabsets/actionHandling/handler/PublicTabsetsTabActionMatcher'
99
import { RapidApiAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/RapidApiAddUrlToTabsetHandler'
1010
import { RssUrlAddUrlToTabsetHandler } from 'src/tabsets/actionHandling/handler/RssUrlAddUrlToTabsetHandler'
11+
import { TabActionMatcher } from 'src/tabsets/actionHandling/TabActionMatcher'
1112
import { Tabset } from 'src/tabsets/models/Tabset'
1213

13-
export class AddUrlToTabsetHandlers {
14-
defaultAddUrlToTabsetHandler = new DefaultAddUrlToTabsetHandler(null as unknown as QVueGlobals)
14+
export class TabActionMatchers {
15+
defaultAddUrlToTabsetHandler = new DefaultTabActionMatcher(null as unknown as QVueGlobals)
1516

16-
handlers: AddUrlToTabsetHandler[] = []
17+
handlers: TabActionMatcher[] = []
1718

1819
constructor(public quasar: QVueGlobals | undefined) {
1920
// this.handlers.push(new DynamicUrlAddUrlToTabsetHandler(this.quasar))
@@ -23,17 +24,19 @@ export class AddUrlToTabsetHandlers {
2324
this.handlers.push(new MarkdownFileAddUrlToTabsetHandler(this.quasar!))
2425
this.handlers.push(new ImportFromChromeBookmarksManagerAddUrlToTabsetHandler(this.quasar!))
2526
this.handlers.push(new RssUrlAddUrlToTabsetHandler(this.quasar!))
27+
this.handlers.push(new PublicTabsetsTabActionMatcher(this.quasar!))
2628
// this.handlers.push(new TtlUrlAddUrlToTabsetHandler(this.quasar))
2729
this.handlers.push(new FileProtocolUrlAddUrlToTabsetHandler(this.quasar))
2830
}
2931

30-
handlerFor(url: string, content: string, metas: object = {}, folder?: Tabset): AddUrlToTabsetHandler {
32+
handlerFor(url: string, content: string, metas: object = {}, folder?: Tabset): TabActionMatcher {
3133
//console.log(`checking handler for ${url}`, metas, content.length)
3234
const handler = this.handlers.filter(
33-
// (h: AddUrlToTabsetHandler) => url.match(h.urlMatcher()) || h.contentMatcher(content) || h.metasMatcher(metas),
34-
(h: AddUrlToTabsetHandler) => h.tabMatcher(url, content, metas),
35+
// (h: ActionMatcher) => url.match(h.urlMatcher()) || h.contentMatcher(content) || h.metasMatcher(metas),
36+
(h: TabActionMatcher) => h.tabMatcher(url, content, metas),
3537
)
3638
if (handler && handler.length > 0) {
39+
//console.log('chosen', handler[0])
3740
//handler[0].setFolder(folder)
3841
//if (!this.injectedUrls.includes(url)) {
3942
//console.log('injecting to url', url)
@@ -42,6 +45,6 @@ export class AddUrlToTabsetHandlers {
4245
//}
4346
return handler[0]!
4447
}
45-
return new DefaultAddUrlToTabsetHandler(this.quasar!)
48+
return new DefaultTabActionMatcher(this.quasar!)
4649
}
4750
}

actionHandling/handler/DefaultActions.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,32 @@
11
import { LocalStorage } from 'quasar'
22
import { useContentStore } from 'src/content/stores/contentStore'
3-
import { ComponentWithContext } from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
3+
import { useSettingsStore } from 'src/core/stores/settingsStore'
4+
import { ComponentWithContext } from 'src/tabsets/actionHandling/TabActionMatcher'
45
import ConvertToCollectionAction from 'src/tabsets/actions/ConvertToCollectionAction.vue'
56
import DeleteFolderAction from 'src/tabsets/actions/DeleteFolderAction.vue'
7+
import EditFolderAction from 'src/tabsets/actions/EditFolderAction.vue'
8+
import ExportTabsetAction from 'src/tabsets/actions/ExportTabsetAction.vue'
69
import { ActionProps } from 'src/tabsets/actions/models/ActionProps'
710
import NewTabAction from 'src/tabsets/actions/NewTabAction.vue'
811
import OpenTabsetAction from 'src/tabsets/actions/OpenTabsetAction.vue'
12+
import LoadRssFeedAction from 'src/tabsets/actions/rss/LoadRssFeedAction.vue'
913
import { Tabset, TabsetType } from 'src/tabsets/models/Tabset'
1014
import { useTabsetService } from 'src/tabsets/services/TabsetService2'
1115

1216
export class DefaultActions {
1317
static getDefaultActions(currentTabset: Tabset | undefined, actionProps: ActionProps): ComponentWithContext[] {
1418
const actions: ComponentWithContext[] = []
15-
// if (actionProps.level === 'folder') {
16-
// actions.push(EditFolderAction)
17-
// }
19+
if (actionProps.level === 'folder') {
20+
actions.push({ component: EditFolderAction, context: {} })
21+
}
1822

1923
if (currentTabset && currentTabset.type === TabsetType.SESSION) {
2024
actions.push({ component: ConvertToCollectionAction, context: {} })
2125
}
2226

23-
// if (useSettingsStore().has('DEV_MODE')) {
24-
// actions.push(ExportTabsetAction)
25-
// }
27+
if (useSettingsStore().has('DEV_MODE')) {
28+
actions.push({ component: ExportTabsetAction, context: {} })
29+
}
2630

2731
if (LocalStorage.getItem('ui.newtab.installed') && actionProps.level === 'root') {
2832
actions.push({ component: NewTabAction, context: {} })
@@ -35,6 +39,9 @@ export class DefaultActions {
3539

3640
// actions.push(DeleteTabsetAction)
3741
if (actionProps.level === 'folder') {
42+
if (actionProps.folder && actionProps.folder.type === TabsetType.RSS_FOLDER) {
43+
actions.unshift({ component: LoadRssFeedAction, context: {} })
44+
}
3845
actions.push({ component: DeleteFolderAction, context: {} })
3946
}
4047
// console.log('action', actions)

actionHandling/handler/DefaultAddUrlToTabsetHandler.ts renamed to actionHandling/handler/DefaultTabActionMatcher.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import { QVueGlobals } from 'quasar'
22
import { FeatureIdent } from 'src/app/models/FeatureIdent'
33
import { useFeaturesStore } from 'src/features/stores/featuresStore'
4-
import { AddUrlToTabsetHandler, ComponentWithContext } from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
54
import { DefaultActions } from 'src/tabsets/actionHandling/handler/DefaultActions'
5+
import { ComponentWithContext, TabActionMatcher } from 'src/tabsets/actionHandling/TabActionMatcher'
66
import AddFolderAction from 'src/tabsets/actions/AddFolderAction.vue'
77
import AddTabAction from 'src/tabsets/actions/AddTabAction.vue'
88
import { ActionProps } from 'src/tabsets/actions/models/ActionProps'
9+
import { Tab } from 'src/tabsets/models/Tab'
910
import { useTabsetsStore } from 'src/tabsets/stores/tabsetsStore'
1011

11-
export class DefaultAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
12+
export class DefaultTabActionMatcher implements TabActionMatcher {
1213
constructor(public $q: QVueGlobals) {}
1314

1415
tabMatcher(url: string, content: string, metas: object): boolean {
15-
return true // 'default' matches always
16+
return true // 'default' matches always, last one in TabActionMatchers
1617
}
1718

1819
injectScript(): Promise<void> {
@@ -28,4 +29,6 @@ export class DefaultAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
2829
actions.unshift({ component: AddTabAction, context: {} }) // first action
2930
return actions
3031
}
32+
33+
handleOpenedTab(browserTab: chrome.tabs.Tab, tab: Tab): void {}
3134
}

actionHandling/handler/ExcalidrawAddUrlToTabsetHandler.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import { DialogChainObject, QVueGlobals, uid } from 'quasar'
22
import { useTabsStore } from 'src/bookmarks/stores/tabsStore'
33
import { ExecutionResult } from 'src/core/domain/ExecutionResult'
44
import { useCommandExecutor } from 'src/core/services/CommandExecutor'
5+
import { DefaultActions } from 'src/tabsets/actionHandling/handler/DefaultActions'
6+
import { ExcalidrawStorage } from 'src/tabsets/actionHandling/model/ExcalidrawStorage'
57
import {
6-
AddUrlToTabsetHandler,
78
AddUrlToTabsetHandlerAdditionalData,
89
ComponentWithContext,
9-
} from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
10-
import { DefaultActions } from 'src/tabsets/actionHandling/handler/DefaultActions'
11-
import { ExcalidrawStorage } from 'src/tabsets/actionHandling/model/ExcalidrawStorage'
10+
TabActionMatcher,
11+
} from 'src/tabsets/actionHandling/TabActionMatcher'
1212
import ExcalidrawSaveAsFileAction from 'src/tabsets/actions/excalidraw/ExcalidrawSaveAsFileAction.vue'
1313
import { ActionProps } from 'src/tabsets/actions/models/ActionProps'
1414
import { AddTabToTabsetCommand } from 'src/tabsets/commands/AddTabToTabsetCommand'
@@ -18,7 +18,7 @@ import { useTabsetsStore } from 'src/tabsets/stores/tabsetsStore'
1818

1919
const urlMatcher = /^https:\/\/excalidraw\.com\/$/
2020

21-
export class ExcalidrawAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
21+
export class ExcalidrawAddUrlToTabsetHandler implements TabActionMatcher {
2222
constructor(public $q: QVueGlobals | undefined) {}
2323

2424
tabMatcher(url: string, content: string, metas: object): boolean {

actionHandling/handler/FileProtocolUrlAddUrlToTabsetHandler.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import { QVueGlobals } from 'quasar'
22
import { ExecutionResult } from 'src/core/domain/ExecutionResult'
33
import {
4-
AddUrlToTabsetHandler,
54
AddUrlToTabsetHandlerAdditionalData,
65
ComponentWithContext,
7-
} from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
8-
import { ActionContext } from 'src/tabsets/actionHandling/model/ActionContext'
6+
TabActionMatcher,
7+
} from 'src/tabsets/actionHandling/TabActionMatcher'
98
import { Tab } from 'src/tabsets/models/Tab'
109
import { Tabset } from 'src/tabsets/models/Tabset'
1110

12-
export class FileProtocolUrlAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
11+
export class FileProtocolUrlAddUrlToTabsetHandler implements TabActionMatcher {
1312
constructor(public $q: QVueGlobals | undefined) {}
1413

1514
chromePattern = /addRow\("([^"]*)","([^"]*)",([^,]*),([^,]*),"([^"]*)",([^,]*),"([^"])*"\)/gm
@@ -23,10 +22,6 @@ export class FileProtocolUrlAddUrlToTabsetHandler implements AddUrlToTabsetHandl
2322
return Promise.resolve()
2423
}
2524

26-
defaultAction(): ActionContext {
27-
return null as unknown as ActionContext
28-
}
29-
3025
actions(): ComponentWithContext[] {
3126
// new ActionContext('Save Local Directory', ButtonActions.Save)
3227
return []

actionHandling/handler/ImportFromChromeBookmarksManagerAddUrlToTabsetHandler.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { FeatureIdent } from 'src/app/models/FeatureIdent'
33
import { ExecutionResult } from 'src/core/domain/ExecutionResult'
44
import { useCommandExecutor } from 'src/core/services/CommandExecutor'
55
import { useFeaturesStore } from 'src/features/stores/featuresStore'
6+
import { DefaultActions } from 'src/tabsets/actionHandling/handler/DefaultActions'
7+
import { ActionContext } from 'src/tabsets/actionHandling/model/ActionContext'
68
import {
7-
AddUrlToTabsetHandler,
89
AddUrlToTabsetHandlerAdditionalData,
910
ClickedHandler,
1011
ComponentWithContext,
11-
} from 'src/tabsets/actionHandling/AddUrlToTabsetHandler'
12-
import { DefaultActions } from 'src/tabsets/actionHandling/handler/DefaultActions'
13-
import { ActionContext } from 'src/tabsets/actionHandling/model/ActionContext'
12+
TabActionMatcher,
13+
} from 'src/tabsets/actionHandling/TabActionMatcher'
1414
import AddFolderAction from 'src/tabsets/actions/AddFolderAction.vue'
1515
import AddTabAction from 'src/tabsets/actions/AddTabAction.vue'
1616
import ImportChromeBookmarksAction from 'src/tabsets/actions/bookmarks/ImportChromeBookmarksAction.vue'
@@ -25,7 +25,7 @@ function getBmFolderId(chromeTab: chrome.tabs.Tab) {
2525
return chromeTab.url?.split('?')[1]?.split('=')[1] || undefined
2626
}
2727

28-
export class ImportFromChromeBookmarksManagerAddUrlToTabsetHandler implements AddUrlToTabsetHandler {
28+
export class ImportFromChromeBookmarksManagerAddUrlToTabsetHandler implements TabActionMatcher {
2929
constructor(public $q: QVueGlobals) {}
3030

3131
tabMatcher(url: string, content: string, metas: object): boolean {

0 commit comments

Comments
 (0)