Skip to content

Instantly share code, notes, and snippets.

View BrianHung's full-sized avatar
💻
agent + computer

Brian Hung BrianHung

💻
agent + computer
View GitHub Profile
@BrianHung
BrianHung / MathBlock.css
Last active February 19, 2025 09:20
MathBlock NodeView for TipTap
.ProseMirror .MathBlock pre {
background: var(--default-back);
color: rgb(var(--default-font));
font-size: 0.8em;
display: flex;
padding: 1em;
}
.ProseMirror .MathBlock {
display: flex;
@BrianHung
BrianHung / SyntaxHighlight.js
Last active April 25, 2021 08:53
ProseMirror Plugin for CodeBlock Decorations
import { Plugin, PluginKey, Extension } from 'tiptap'
import { Decoration, DecorationSet } from 'prosemirror-view'
import { findBlockNodes } from 'prosemirror-utils'
import CodeMirror from 'codemirror/addon/runmode/runmode.node.js';
import "codemirror/mode/meta";
/*
* Global set of CodeMirror languages to dynamically import.
*/
@BrianHung
BrianHung / sync-plugin.d.ts
Created June 29, 2020 03:58
generated typescript file from y-prosemirror sync plugin
export function isVisible(item: any, snapshot?: any): boolean;
/**
* Either a node if type is YXmlElement or an Array of text nodes if YXmlText
* @typedef {Map<Y.AbstractType, PModel.Node | Array<PModel.Node>>} ProsemirrorMapping
*/
/**
* The unique prosemirror plugin key for prosemirrorPlugin.
*
* @public
*/
import { VNode, CreateElement } from "vue"
import { Component, Vue, Prop } from 'vue-property-decorator';
import { Emoji } from "./utils"
import "./EmojiMart.css"
import * as Fuse from 'fuse.js';
@Component({})
export default class EmojiMart extends Vue {
@Prop({ required: true }) emojiData!: Record<string, Emoji[]>;
@BrianHung
BrianHung / InputTag.css
Created August 25, 2020 01:45
React Tag Input Component
.input-tags {
display: flex;
flex-wrap: wrap;
border: 1px solid #dae1e7;
border-radius: .25rem;
padding-top: .50rem;
padding-left: .50rem;
align-items: center;
}
@BrianHung
BrianHung / listInputRule.js
Last active September 5, 2020 03:29
ProseMirror InputRule to allow List Conversion within Lists
import { InputRule } from 'prosemirror-inputrules'
import {findWrapping, ReplaceAroundStep, canJoin} from "prosemirror-transform"
import {Slice, Fragment} from "prosemirror-model"
/**
* Stiches together liftListItem and wrappingInputRule.
* See: https://github.com/ProseMirror/prosemirror-schema-list/blob/master/src/schema-list.js
*/
export default function listInputRule(regex, listType, getAttrs, joinPredicate) {
return new InputRule(regex, (state, match, start, end) => {
@BrianHung
BrianHung / FocusMode.ts
Created September 16, 2020 02:00
ProseMirror FocusMode
import Extension from "./Extension";
import type { EditorState, Transaction } from 'prosemirror-state';
import { Plugin, PluginKey } from 'prosemirror-state'
/**
* Adds ability to toggle the class 'ProseMirror-focusmode' onto the parent ProseMirror DOM node.
* Note: This extension requires the Placeholder extension to be used in conjuction.
*/
export default class FocusMode extends Extension {
@BrianHung
BrianHung / debounce.ts
Last active September 30, 2020 11:42
Typescript Throttle & Debounce
export function debounce(func: Function, wait: number, immediate = false) {
var timeout;
return function(...args: any[]) {
var context = this;
clearTimeout(timeout);
timeout = setTimeout(function() {
timeout = null;
(!immediate) && func.apply(context, args);
}, wait);
(immediate && !timeout) && func.apply(context, args);
@BrianHung
BrianHung / codemirror-standalone.js
Created January 7, 2021 10:43
prosemirror + codemirror 5 syntax highlight
import 'codemirror/src/addon/runmode/codemirror-standalone';
if (typeof exports == "object" && typeof module == "object") // shim codemirror-standalone in cjs distributions to avoid loading full codemirror library
require.cache[require.resolve("codemirror/lib/codemirror")] = require.cache[require.resolve("codemirror/src/addon/runmode/codemirror-standalone")];
import 'codemirror/addon/runmode/runmode';
import 'codemirror/mode/meta'; // required to resolve languages
var root = typeof globalThis !== 'undefined' ? globalThis : window;
var CodeMirror = root.CodeMirror;
@BrianHung
BrianHung / codemirror-syntax-highlight.ts
Last active March 19, 2024 19:53
ProseMirror CodeBlock Syntax Highlighting using CM6
import {LanguageDescription, LanguageSupport} from "@codemirror/language"
import {languages} from "@codemirror/language-data"
import {highlightTree} from "@codemirror/highlight"
import {highlightStyle} from "./highlight-style"
export function syntaxHighlight(text: string, support: LanguageSupport, callback: (token: {text: string; style: string; from: number; to: number}) => void, options = {match: highlightStyle.match}) {
let pos = 0;
let tree = support.language.parseString(text);
highlightTree(tree, options.match, (from, to, classes) => {
from > pos && callback({text: text.slice(pos, from), style: null, from: pos, to: from});