PluginProbe
Code Snippets / 3.10.0
Code Snippets v3.10.0
4.0.0-beta.2 3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 All 65 releases
code-snippets / js / services / manage / activation.ts

activation.ts in Code Snippets 3.10.0, at js/services/manage/activation.ts

80 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n'
2 import { updateSnippet } from './requests'
3 import type { Snippet } from '../../types/Snippet'
4
5 /**
6 * Update the snippet count of a specific view
7 * @param element
8 * @param increment
9 */
10 const updateViewCount = (element: HTMLElement | null, increment: boolean) => {
11 if (element?.textContent) {
12 let count = parseInt(element.textContent.replace(/\((?<count>\d+)\)/, '$1'), 10)
13 count += increment ? 1 : -1
14 element.textContent = `(${count})`
15 } else {
16 console.error('Could not update view count.', element)
17 }
18 }
19
20 /**
21 * Activate an inactive snippet, or deactivate an active snippet
22 * @param link
23 * @param event
24 */
25 export const toggleSnippetActive = (link: HTMLAnchorElement, event: Event) => {
26 const row = link.parentElement?.parentElement // Switch < cell < row
27 if (!row) {
28 console.error('Could not toggle snippet active status.', row)
29 return
30 }
31
32 const match = /\b(?:in)?active-snippet\b/.exec(row.className)
33 if (!match) {
34 return
35 }
36
37 event.preventDefault()
38
39 const activating = 'inactive-snippet' === match[0]
40 const snippet: Partial<Snippet> = { active: activating }
41
42 updateSnippet('active', row, snippet, response => {
43 const button: HTMLAnchorElement | null = row.querySelector('.snippet-activation-switch')
44
45 if (response.success) {
46 row.className = activating
47 ? row.className.replace(/\binactive-snippet\b/, 'active-snippet')
48 : row.className.replace(/\bactive-snippet\b/, 'inactive-snippet')
49
50 const views = document.querySelector('.subsubsub')
51 const activeCount = views?.querySelector<HTMLElement>('.active .count')
52 const inactiveCount = views?.querySelector<HTMLElement>('.inactive .count')
53
54 if (activeCount) {
55 updateViewCount(activeCount, activating)
56 }
57
58 if (inactiveCount) {
59 updateViewCount(inactiveCount, activating)
60 }
61
62 if (button) {
63 button.title = activating ? __('Deactivate', 'code-snippets') : __('Activate', 'code-snippets')
64 }
65 } else {
66 row.className += ' erroneous-snippet'
67
68 if (button) {
69 button.title = __('An error occurred when attempting to activate', 'code-snippets')
70 }
71 }
72 })
73 }
74
75 export const handleSnippetActivationSwitches = () => {
76 for (const link of document.getElementsByClassName('snippet-activation-switch')) {
77 link.addEventListener('click', event => toggleSnippetActive(<HTMLAnchorElement> link, event))
78 }
79 }
80