Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
089b031
Add announcements page
polypixeldev Jul 2, 2025
97ca23d
Fix file name
polypixeldev Jul 2, 2025
0900261
Add create announcement modal
polypixeldev Jul 2, 2025
b83da5f
Add announcement model
polypixeldev Jul 2, 2025
2b6cd75
Update title
polypixeldev Jul 2, 2025
264593b
Add follow model
Luke-Oldenburg Jul 2, 2025
38e33d7
Rework announcements routing and fix modal submission with Trix
polypixeldev Jul 2, 2025
950ebe0
Remove trix and actiontext
polypixeldev Jul 3, 2025
ffdf86c
Add back frozen string literal
polypixeldev Jul 3, 2025
1f31f8a
Merge branch 'main' into organization-updates
polypixeldev Jul 3, 2025
4bd0b10
Add tiptap editor
polypixeldev Jul 3, 2025
8288afd
Add drafting option
polypixeldev Jul 3, 2025
d12e67d
Rework event policy
Luke-Oldenburg Jul 3, 2025
7ec7917
Fix event migration
polypixeldev Jul 3, 2025
bba3e37
Improve at placement
Luke-Oldenburg Jul 3, 2025
54e1b06
Render posts on show page
polypixeldev Jul 3, 2025
b177a5b
Add post editing
polypixeldev Jul 3, 2025
99a8969
Add following
Luke-Oldenburg Jul 3, 2025
6e0d592
Init feed
Luke-Oldenburg Jul 3, 2025
202d3be
Add manage button
Luke-Oldenburg Jul 3, 2025
25be375
Fix event nav
Luke-Oldenburg Jul 3, 2025
b69262e
Add autosaving
polypixeldev Jul 3, 2025
bf4cdc4
Change announcements tooltip
polypixeldev Jul 3, 2025
f5ac0c3
Fix in other nav
polypixeldev Jul 3, 2025
aa66b95
Remove logging
Luke-Oldenburg Jul 3, 2025
55e25c6
Add link to modal
Luke-Oldenburg Jul 3, 2025
a3ce457
Delete old event follow
Luke-Oldenburg Jul 3, 2025
5f30be1
Add check for autosave
polypixeldev Jul 3, 2025
6aab15f
Redirect to announcements
Luke-Oldenburg Jul 3, 2025
3140286
Merge branch 'main' into organization-updates
Luke-Oldenburg Jul 3, 2025
75b8031
Fix rounding
polypixeldev Jul 3, 2025
a9756cb
Change announcements icon
polypixeldev Jul 3, 2025
db7ff31
Fix autosave
polypixeldev Jul 3, 2025
b0bdd69
Add index posts
polypixeldev Jul 3, 2025
c485f0f
Change save to back
polypixeldev Jul 3, 2025
70ac180
Fix back btn
polypixeldev Jul 3, 2025
5ea854a
Add draft post order and style
polypixeldev Jul 3, 2025
c621999
Add tooltips
polypixeldev Jul 3, 2025
b504a8b
Add follow list
Luke-Oldenburg Jul 4, 2025
1ae7018
link title in announcement post
polypixeldev Jul 7, 2025
02e42df
Add date and user to announcement post on index
polypixeldev Jul 7, 2025
770a47f
Add user and date text to post show
polypixeldev Jul 7, 2025
7945939
Add publish buttons and action
polypixeldev Jul 7, 2025
eb9c7f6
Readd deleted line
polypixeldev Jul 7, 2025
2b6506b
Always create as draft
polypixeldev Jul 7, 2025
c821b3b
Move follow button to partial
Luke-Oldenburg Jul 7, 2025
90afee5
Check published at presence
Luke-Oldenburg Jul 7, 2025
53b3404
Hide actions for unauthorized users
polypixeldev Jul 7, 2025
2c9fa34
Fix unauthorized_callout partial reference
polypixeldev Jul 7, 2025
dacf88f
Add divider to post cards
polypixeldev Jul 7, 2025
84a6a2e
Fix light mode
polypixeldev Jul 7, 2025
bc9dab4
Extract announcement card into partial
polypixeldev Jul 7, 2025
de807be
List posts in feed
polypixeldev Jul 7, 2025
9adbfaf
Remove event
Luke-Oldenburg Jul 7, 2025
df63c78
Require title
Luke-Oldenburg Jul 7, 2025
d1de694
Add render_html method
polypixeldev Jul 7, 2025
19df625
Hide event name on event announcements page
polypixeldev Jul 7, 2025
9c3c288
Add announcement mailer
Luke-Oldenburg Jul 7, 2025
bc7b53b
Add proper sorting and pagination
polypixeldev Jul 7, 2025
92dbdfa
Check presence
Luke-Oldenburg Jul 7, 2025
2e2f957
Add mailer preview
Luke-Oldenburg Jul 7, 2025
8351bce
Prevent editing published announcements
polypixeldev Jul 7, 2025
f75ab09
Add unsubscribe text
Luke-Oldenburg Jul 7, 2025
467dc1c
Render post content on backend
polypixeldev Jul 7, 2025
7d924dd
Clarify org name more
Luke-Oldenburg Jul 7, 2025
9fde9a1
Fix typo
Luke-Oldenburg Jul 7, 2025
9383c04
Debounce autosave
polypixeldev Jul 7, 2025
0813ead
Fix email list
Luke-Oldenburg Jul 7, 2025
24e8d4f
Add announcement title to body
Luke-Oldenburg Jul 7, 2025
e7bf8bd
Install more tiptap extensions
polypixeldev Jul 7, 2025
11ff53b
Add functionality for more editor buttons
polypixeldev Jul 7, 2025
f1a4742
Don't send flash for autosave
polypixeldev Jul 7, 2025
05bd598
Remove bubble menu
polypixeldev Jul 7, 2025
2773932
Add blockquote
polypixeldev Jul 7, 2025
bc0ef2f
Add flipper logic
Luke-Oldenburg Jul 7, 2025
d0f048b
Add text when feed or announcements is empty
polypixeldev Jul 7, 2025
7cd0bb1
Hide manage button when no follows
polypixeldev Jul 7, 2025
ed12130
Add feature toggle
Luke-Oldenburg Jul 7, 2025
97dda73
Add markdown notice
polypixeldev Jul 7, 2025
a7b2ab6
Add back dropdown button
polypixeldev Jul 7, 2025
9e77f60
Fix ordering
polypixeldev Jul 7, 2025
53967d2
Use flipped in event policy
Luke-Oldenburg Jul 7, 2025
7d00f72
Add new line
Luke-Oldenburg Jul 7, 2025
2ca8c74
Fix publishing from form and adjust copy
polypixeldev Jul 7, 2025
57edb01
Add new line
Luke-Oldenburg Jul 7, 2025
399ec45
Add new lines
Luke-Oldenburg Jul 7, 2025
33f479f
Add redirect if not signed in
Luke-Oldenburg Jul 7, 2025
2931c81
add custom mission statement node
polypixeldev Jul 8, 2025
bc0beaf
Don't use global variables
polypixeldev Jul 8, 2025
5ebcfeb
Store HTML instead of JSON for announcement content
polypixeldev Jul 8, 2025
9f467a0
render_html -> content
Luke-Oldenburg Jul 8, 2025
3c1b4ba
Add donation goal node
polypixeldev Jul 8, 2025
27a014a
Revert "Add donation goal node"
polypixeldev Jul 8, 2025
1d921a4
Revert "render_html -> content"
polypixeldev Jul 8, 2025
3e4ff55
Revert "Store HTML instead of JSON for announcement content"
polypixeldev Jul 8, 2025
77bd65b
Revert "Don't use global variables"
polypixeldev Jul 8, 2025
d8e12c1
Revert "add custom mission statement node"
polypixeldev Jul 8, 2025
505afbb
Merge branch 'main' into organization-updates
garyhtou Jul 8, 2025
564b97d
Fix JS formatting
polypixeldev Jul 8, 2025
365f16d
Fix Rubocop lints
polypixeldev Jul 8, 2025
41c1e88
Ignore html_safe lints
polypixeldev Jul 8, 2025
2ed0563
Re-enable cop
polypixeldev Jul 8, 2025
aa132c8
comma
polypixeldev Jul 8, 2025
e83f6a5
fix capitalization
polypixeldev Jul 8, 2025
db90dd5
Fix saving editing posts
polypixeldev Jul 8, 2025
0b49dcf
Update app/views/announcements/_announcement_form.html.erb
Luke-Oldenburg Jul 8, 2025
49d0a79
Merge branch 'main' into organization-updates
Luke-Oldenburg Jul 8, 2025
80d5112
Update app/controllers/announcements_controller.rb
Luke-Oldenburg Jul 8, 2025
17de130
Merge branch 'main' into organization-updates
YodaLightsabr Jul 8, 2025
8987866
Add follow button to announcements
Luke-Oldenburg Jul 8, 2025
d2fc14a
Fix hover color in light mode for editor
polypixeldev Jul 8, 2025
1bfbc24
Fix light mode announcement form
polypixeldev Jul 8, 2025
b6ab2fc
Add selected
Luke-Oldenburg Jul 8, 2025
400370f
Lock down nav
Luke-Oldenburg Jul 8, 2025
b074113
Fix dropdown button styling
polypixeldev Jul 8, 2025
ad18833
Fix paragraph margin in editor
polypixeldev Jul 8, 2025
4a009c1
Fix margin/padding on post
YodaLightsabr Jul 8, 2025
c27a919
Fix paragraph margins
polypixeldev Jul 8, 2025
4fd5ad4
Improve pagination
Luke-Oldenburg Jul 8, 2025
7508cf0
Edit title size
Luke-Oldenburg Jul 8, 2025
b1c98b8
Update app/controllers/event/follows_controller.rb
Luke-Oldenburg Jul 8, 2025
f7802bb
Update app/controllers/event/follows_controller.rb
Luke-Oldenburg Jul 8, 2025
a6f2758
Use current user relation
Luke-Oldenburg Jul 8, 2025
9388e7e
Update app/controllers/event/follows_controller.rb
Luke-Oldenburg Jul 8, 2025
77009d7
Drop announcements helper
Luke-Oldenburg Jul 8, 2025
d6fc747
Improve pagination
Luke-Oldenburg Jul 8, 2025
938a61a
Update app/jobs/announcement_published_job.rb
Luke-Oldenburg Jul 8, 2025
c68a92f
Fix edit policy
Luke-Oldenburg Jul 8, 2025
542f573
Update app/jobs/announcement_published_job.rb
Luke-Oldenburg Jul 8, 2025
2935bbf
Show management buttons properly
Luke-Oldenburg Jul 8, 2025
79cde0b
Fix migrations with null checks
polypixeldev Jul 8, 2025
6a85482
Use author and not draft
polypixeldev Jul 8, 2025
2ecfdfa
Improve authorize
Luke-Oldenburg Jul 8, 2025
0c0d037
Add following text
Luke-Oldenburg Jul 8, 2025
958542f
Use announcement.persisted?
polypixeldev Jul 8, 2025
84ae048
Use publish!
polypixeldev Jul 8, 2025
2713e31
Delay job
Luke-Oldenburg Jul 8, 2025
3be9ce0
Remove draft
Luke-Oldenburg Jul 8, 2025
385404c
Use draft scope
Luke-Oldenburg Jul 8, 2025
4e3e2aa
Fix scope
Luke-Oldenburg Jul 8, 2025
d68b471
Check if still published to run job
Luke-Oldenburg Jul 8, 2025
a3bc66a
Improve margins/padding
YodaLightsabr Jul 8, 2025
2f26887
Fix draft?
Luke-Oldenburg Jul 8, 2025
6803388
DB changes, part 1 (checkout this commit, then rollback by 15)
YodaLightsabr Jul 8, 2025
a9964e1
DB changes, part 2 (checkout this commit, then migrate)
YodaLightsabr Jul 8, 2025
162a7a2
Update schema file
YodaLightsabr Jul 8, 2025
f4a2181
Merge pull request #10867 from hackclub/fix-migrations
YodaLightsabr Jul 8, 2025
33052ba
Merge pull request #10868 from hackclub/schema-fixes-for-organization…
YodaLightsabr Jul 8, 2025
90f4935
Fix job bug
Luke-Oldenburg Jul 9, 2025
6b7a0aa
nil safety
Luke-Oldenburg Jul 9, 2025
8e5deb5
Rename feed
Luke-Oldenburg Jul 9, 2025
dfba7b7
Add broken confetti
Luke-Oldenburg Jul 9, 2025
e046c85
Styling fix + partial fix
Luke-Oldenburg Jul 9, 2025
075f1a1
Fix follow button rendering improperly
Luke-Oldenburg Jul 9, 2025
3d1579e
Remove index
Luke-Oldenburg Jul 9, 2025
b0fe29b
Remove unnecessary validation
Luke-Oldenburg Jul 9, 2025
7f86a33
Add content validation
Luke-Oldenburg Jul 9, 2025
1f8485c
Editor styling fixes
Luke-Oldenburg Jul 9, 2025
6ff8ff7
Split set_announcement and set_dinner
Luke-Oldenburg Jul 9, 2025
bece34b
Add delete button to show
Luke-Oldenburg Jul 9, 2025
f857c1f
Move buttons in show
Luke-Oldenburg Jul 9, 2025
952100b
Allow editing published announcements
Luke-Oldenburg Jul 9, 2025
62821c5
Merge branch 'main' into organization-updates
Luke-Oldenburg Jul 9, 2025
6b23ece
Remove parentheses
Luke-Oldenburg Jul 9, 2025
0dc1d4d
Update app/models/announcement.rb
Luke-Oldenburg Jul 9, 2025
b2a0651
Use hashid
Luke-Oldenburg Jul 9, 2025
5f1f78d
Revert "Add broken confetti"
Luke-Oldenburg Jul 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -228,3 +228,5 @@ gem "rack-timeout", require: "rack/timeout/base"
gem "irb"

gem "pstore"

gem "prosemirror_to_html"
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,8 @@ GEM
net-smtp
premailer (~> 1.7, >= 1.7.9)
prism (1.4.0)
prosemirror_to_html (0.2.0)
nokogiri
pry (0.15.2)
coderay (~> 1.1)
method_source (~> 1.0)
Expand Down Expand Up @@ -953,6 +955,7 @@ DEPENDENCIES
plaid (~> 34.0)
poppler
premailer-rails
prosemirror_to_html
pry-byebug
pry-rails
pstore
Expand Down
1 change: 1 addition & 0 deletions app/assets/stylesheets/application.scss
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ summary {
@import 'components/event_settings';
@import 'components/reactions';
@import 'components/tags';
@import 'components/tiptap';
@import 'components/filter_tabs';
@import 'components/filter_menu';
@import 'components/home_page';
Expand Down
2 changes: 2 additions & 0 deletions app/assets/stylesheets/components/_forms.scss
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,8 @@ input:where([data-behavior='otp_input']) {
display: flex;
border-radius: 0.75rem;

width: fit-content;

transform: scale(1);
transition:
transform 0.125s ease-in-out,
Expand Down
15 changes: 15 additions & 0 deletions app/assets/stylesheets/components/_tiptap.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.tiptap p.is-editor-empty:first-child::before {
color: #adb5bd;
content: attr(data-placeholder);
float: left;
height: 0;
pointer-events: none;
}

.tiptap p:first-child {
margin-top: 0px;
}

.tiptap p:last-child {
margin-bottom: 0px;
}
107 changes: 107 additions & 0 deletions app/controllers/announcements_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# frozen_string_literal: true

class AnnouncementsController < ApplicationController
before_action :set_event
before_action :set_announcement, except: [:index, :new]
before_action :set_event_follow

def index
@announcement = Announcement.new
@announcement.event = @event

authorize @announcement

@all_announcements = Announcement.where(event: @event).order(published_at: :desc, created_at: :desc)
@announcements = @all_announcements.page(params[:page]).per(10)

raise ActionController::RoutingError.new("Not Found") if [email protected]_public && @all_announcements.empty? && !organizer_signed_in?
end

def new
@announcement = Announcement.new
@announcement.event = @event

authorize @announcement
end

def create
@announcement = @event.announcements.build(params.require(:announcement).permit(:title, :content).merge(author: current_user))

authorize @announcement

@announcement.save!

unless params[:announcement][:draft] == "true"
@announcement.publish!
end

flash[:success] = "Announcement successfully #{params[:announcement][:draft] == "true" ? "drafted" : "published"}!"

rescue => e
puts e.message
flash[:error] = "Something went wrong. #{e.message}"
Rails.error.report(e)
ensure
redirect_to event_announcement_path(@event, @announcement)
end

def show
authorize @announcement
end

def edit
authorize @announcement

render "announcements/show", locals: { editing: true }
end

def update
authorize @announcement

@announcement.update!(params.require(:announcement).permit(:title, :content))

if params[:announcement][:autosave] != "true"
flash[:success] = "Updated announcement"
redirect_to event_announcement_path(@event, @announcement)
end
end

def destroy
authorize @announcement

@announcement.destroy!

flash[:success] = "Deleted announcement"

redirect_to event_announcements_path(@event)
end

def publish
authorize @announcement

@announcement.publish!

flash[:success] = "Published announcement"

redirect_to event_announcement_path(@event, @announcement)
end

private

def set_announcement
if params[:id].present?
@announcement = @event.announcements.find(params[:id])
end
end

def set_event
if params[:event_id].present?
@event = Event.find_by!(slug: params[:event_id])
end
end

def set_event_follow
@event_follow = Event::Follow.where({ user_id: current_user.id, event_id: @event.id }).first if current_user
end

end
35 changes: 35 additions & 0 deletions app/controllers/event/follows_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# frozen_string_literal: true

class Event
class FollowsController < ApplicationController
include SetEvent
skip_before_action :signed_in_user, only: :create
before_action :set_event, only: :create

def create
unless signed_in?
skip_authorization
return redirect_to auth_users_path(return_to: event_url(@event), require_reload: true)
end

attrs = {
user_id: current_user.id,
event: @event
}
follow = Event::Follow.new(attrs)
authorize follow
follow.save!
redirect_to event_announcements_path(@event)
end

def destroy
@event_follow = Event::Follow.find(params[:id])
authorize @event_follow
slug = @event_follow.event.slug
@event_follow.destroy!
redirect_to event_path(slug)
end

end

end
5 changes: 5 additions & 0 deletions app/controllers/events_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class EventsController < ApplicationController
end
skip_before_action :signed_in_user
before_action :set_mock_data
before_action :set_event_follow, only: [:show, :transactions]

before_action :redirect_to_onboarding, unless: -> { @event&.is_public? }

Expand Down Expand Up @@ -1116,4 +1117,8 @@ def set_mock_data
end
end

def set_event_follow
@event_follow = Event::Follow.where({ user_id: current_user.id, event_id: @event.id }).first if current_user
end

end
8 changes: 7 additions & 1 deletion app/controllers/my_controller.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

class MyController < ApplicationController
skip_after_action :verify_authorized, only: [:activities, :toggle_admin_activities, :cards, :missing_receipts_list, :missing_receipts_icon, :inbox, :reimbursements, :reimbursements_icon, :tasks, :payroll, :toggle_three_teens_banner] # do not force pundit
skip_after_action :verify_authorized, only: [:activities, :toggle_admin_activities, :cards, :missing_receipts_list, :missing_receipts_icon, :inbox, :reimbursements, :reimbursements_icon, :tasks, :payroll, :toggle_three_teens_banner, :feed] # do not force pundit

def activities
@before = params[:before] || Time.now
Expand Down Expand Up @@ -146,4 +146,10 @@ def payroll
@payout_method = current_user.payout_method
end

def feed
@event_follows = current_user.event_follows
@all_announcements = Announcement.published.where(event: @event_follows.map(&:event)).order(published_at: :desc, created_at: :desc)
@announcements = @all_announcements.page(params[:page]).per(10)
end

end
8 changes: 4 additions & 4 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -392,18 +392,18 @@ def ugc_link_to(name, string, *options)
def dropdown_button(button_class: "bg-success", template: ->(value) { value }, **options)
return content_tag :div, class: "relative w-fit #{options[:class]}", data: { controller: "dropdown-button", "dropdown-button-target": "container" } do
(content_tag :div, class: "dropdown-button__container", **options[:button_container_options] do
(content_tag :button, class: "btn !transform-none rounded-l-xl rounded-r-none #{button_class}" do
(content_tag :button, class: "btn !transform-none rounded-l-xl rounded-r-none #{button_class}", **options[:button_options] do
(inline_icon options[:button_icon]) +
(content_tag :span, template.call(options[:options][0][1]), data: { "dropdown-button-target": "text", "template": template })
end) +
(content_tag :button, type: "button", class: "btn !transform-none rounded-r-xl rounded-l-none !w-12 ml-[2px] #{button_class}", data: { action: "click->dropdown-button#toggle" } do
inline_icon "down-caret", class: "!mr-0"
end)
end) +
(content_tag :div, class: "dropdown-button__menu fade-card-hide", data: { "dropdown-button-target": "menu" } do
(content_tag :div, class: "dropdown-button__menu fade-card-hide #{options[:menu_class]}", data: { "dropdown-button-target": "menu" } do
content_tag :div do
(options[:options].map do |option|
(options[:form].radio_button options[:name], option[1], { data: { action: "change->dropdown-button#change", "dropdown-button-target": "select", "label": template.call(option[1]) } }) +
(options[:options].map.with_index do |option, index|
(options[:form].radio_button options[:name], option[1], { checked: index == 0, data: { action: "change->dropdown-button#change", "dropdown-button-target": "select", "label": template.call(option[1]) } }) +
(options[:form].label options[:name], value: option[1] do
(tag.strong option[0]) + (tag.p option[2])
end)
Expand Down
136 changes: 136 additions & 0 deletions app/javascript/controllers/tiptap_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import { Controller } from '@hotwired/stimulus'
import { debounce } from 'lodash/function'
import { Editor } from '@tiptap/core'
import StarterKit from '@tiptap/starter-kit'
import Underline from '@tiptap/extension-underline'
import Placeholder from '@tiptap/extension-placeholder'
import Link from '@tiptap/extension-link'
import Image from '@tiptap/extension-image'

export default class extends Controller {
static targets = ['editor', 'form', 'contentInput', 'autosaveInput']
static values = { content: String }

editor = null

connect() {
const debouncedSubmit = debounce(this.submit.bind(this), 1000, {
leading: true,
})

this.editor = new Editor({
element: this.editorTarget,
extensions: [
StarterKit.configure({
heading: {
levels: [1, 2, 3],
},
}),
Underline,
Placeholder.configure({
placeholder: 'Write a message to your followers...',
}),
Link,
Image,
],
editorProps: {
attributes: {
class: 'outline-none',
},
},
content: this.hasContentValue ? JSON.parse(this.contentValue) : null,
onUpdate: () => {
if (this.hasContentValue) {
debouncedSubmit(true)
}
},
})
}

disconnect() {
this.editor.destroy()
}

submit(autosave) {
this.autosaveInputTarget.value = autosave === true ? 'true' : 'false'
this.contentInputTarget.value = JSON.stringify(this.editor.getJSON())
this.formTarget.requestSubmit()
}

bold() {
this.editor.chain().focus().toggleBold().run()
}

italic() {
this.editor.chain().focus().toggleItalic().run()
}

underline() {
this.editor.chain().focus().toggleUnderline().run()
}

h1() {
this.editor.chain().focus().toggleHeading({ level: 1 }).run()
}

h2() {
this.editor.chain().focus().toggleHeading({ level: 2 }).run()
}

h3() {
this.editor.chain().focus().toggleHeading({ level: 3 }).run()
}

strike() {
this.editor.chain().focus().toggleStrike().run()
}

link() {
const url = window.prompt('Link URL')

if (url === null) {
return
}

if (url === '') {
this.editor.chain().focus().extendMarkRange('link').unsetLink().run()
} else {
this.editor
.chain()
.focus()
.extendMarkRange('link')
.setLink({ href: url })
.run()
}
}

code() {
this.editor.chain().focus().toggleCode().run()
}

codeBlock() {
this.editor.chain().focus().toggleCodeBlock().run()
}

bulletList() {
this.editor.chain().focus().toggleBulletList().run()
}

orderedList() {
this.editor.chain().focus().toggleOrderedList().run()
}

blockQuote() {
this.editor.chain().focus().toggleBlockquote().run()
}

image() {
const url = window.prompt('Image URL')

if (url === null || url === '') {
return
}

this.editor.chain().focus().setImage({ src: url }).run()
}
}
Loading