diff --git a/src/bookmarks.tsx b/src/bookmarks.tsx new file mode 100644 index 00000000..075df0a4 --- /dev/null +++ b/src/bookmarks.tsx @@ -0,0 +1,207 @@ +import * as React from "react"; +import * as mobxReact from "mobx-react"; +import * as mobx from "mobx"; +import {sprintf} from "sprintf-js"; +import {boundMethod} from "autobind-decorator"; +import {v4 as uuidv4} from "uuid"; +import dayjs from "dayjs"; +import {If, For, When, Otherwise, Choose} from "tsx-control-statements/components"; +import cn from "classnames"; +import type {BookmarkType} from "./types"; +import {GlobalModel, GlobalCommandRunner} from "./model"; +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' + +function LinkRenderer(props : any) : any { + let newUrl = "https://extern?" + encodeURIComponent(props.href); + return {props.children} +} + +function HeaderRenderer(props : any, hnum : number) : any { + return ( +
{props.children}
+ );
+}
+
+@mobxReact.observer
+class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> {
+ @boundMethod
+ handleDeleteClick() : void {
+ let {bookmark} = this.props;
+ let model = GlobalModel.bookmarksModel;
+ model.handleDeleteBookmark(bookmark.bookmarkid);
+ }
+
+ @boundMethod
+ handleEditClick() : void {
+ let {bookmark} = this.props;
+ let model = GlobalModel.bookmarksModel;
+ model.handleEditBookmark(bookmark.bookmarkid);
+ }
+
+ @boundMethod
+ handleEditCancel() : void {
+ let model = GlobalModel.bookmarksModel;
+ model.cancelEdit();
+ return;
+ }
+
+ @boundMethod
+ handleEditUpdate() : void {
+ let model = GlobalModel.bookmarksModel;
+ model.confirmEdit();
+ return;
+ }
+
+ @boundMethod
+ handleDescChange(e : any) : void {
+ let model = GlobalModel.bookmarksModel;
+ mobx.action(() => {
+ model.tempDesc.set(e.target.value);
+ })();
+ }
+
+ @boundMethod
+ handleCmdChange(e : any) : void {
+ let model = GlobalModel.bookmarksModel;
+ mobx.action(() => {
+ model.tempCmd.set(e.target.value);
+ })();
+ }
+
+ @boundMethod
+ handleClick() : void {
+ let {bookmark} = this.props;
+ let model = GlobalModel.bookmarksModel;
+ model.selectBookmark(bookmark.bookmarkid);
+ }
+
+ @boundMethod
+ handleUse() : void {
+ let {bookmark} = this.props;
+ let model = GlobalModel.bookmarksModel;
+ model.useBookmark(bookmark.bookmarkid);
+ }
+
+ render() {
+ let bm = this.props.bookmark;
+ let model = GlobalModel.bookmarksModel;
+ let isSelected = (model.activeBookmark.get() == bm.bookmarkid);
+ let markdown = bm.description ?? "";
+ let markdownComponents = {
+ a: LinkRenderer,
+ h1: (props) => HeaderRenderer(props, 1),
+ h2: (props) => HeaderRenderer(props, 2),
+ h3: (props) => HeaderRenderer(props, 3),
+ h4: (props) => HeaderRenderer(props, 4),
+ h5: (props) => HeaderRenderer(props, 5),
+ h6: (props) => HeaderRenderer(props, 6),
+ code: CodeRenderer,
+ };
+ let hasDesc = markdown != "";
+ let isEditing = (model.editingBookmark.get() == bm.bookmarkid);
+ if (isEditing) {
+ return (
+ {bm.cmdstr}
+ {props.children}
- );
-}
-
-@mobxReact.observer
-class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> {
- @boundMethod
- handleDeleteClick() : void {
- let {bookmark} = this.props;
- let model = GlobalModel.bookmarksModel;
- model.handleDeleteBookmark(bookmark.bookmarkid);
- }
-
- @boundMethod
- handleEditClick() : void {
- let {bookmark} = this.props;
- let model = GlobalModel.bookmarksModel;
- model.handleEditBookmark(bookmark.bookmarkid);
- }
-
- @boundMethod
- handleEditCancel() : void {
- let model = GlobalModel.bookmarksModel;
- model.cancelEdit();
- return;
- }
-
- @boundMethod
- handleEditUpdate() : void {
- let model = GlobalModel.bookmarksModel;
- model.confirmEdit();
- return;
- }
-
- @boundMethod
- handleDescChange(e : any) : void {
- let model = GlobalModel.bookmarksModel;
- mobx.action(() => {
- model.tempDesc.set(e.target.value);
- })();
- }
-
- @boundMethod
- handleCmdChange(e : any) : void {
- let model = GlobalModel.bookmarksModel;
- mobx.action(() => {
- model.tempCmd.set(e.target.value);
- })();
- }
-
- @boundMethod
- handleClick() : void {
- let {bookmark} = this.props;
- let model = GlobalModel.bookmarksModel;
- model.selectBookmark(bookmark.bookmarkid);
- }
-
- @boundMethod
- handleUse() : void {
- let {bookmark} = this.props;
- let model = GlobalModel.bookmarksModel;
- model.useBookmark(bookmark.bookmarkid);
- }
-
- render() {
- let bm = this.props.bookmark;
- let model = GlobalModel.bookmarksModel;
- let isSelected = (model.activeBookmark.get() == bm.bookmarkid);
- let markdown = bm.description ?? "";
- let markdownComponents = {
- a: LinkRenderer,
- h1: (props) => HeaderRenderer(props, 1),
- h2: (props) => HeaderRenderer(props, 2),
- h3: (props) => HeaderRenderer(props, 3),
- h4: (props) => HeaderRenderer(props, 4),
- h5: (props) => HeaderRenderer(props, 5),
- h6: (props) => HeaderRenderer(props, 6),
- code: CodeRenderer,
- };
- let hasDesc = markdown != "";
- let isEditing = (model.editingBookmark.get() == bm.bookmarkid);
- if (isEditing) {
- return (
- {bm.cmdstr}
-