-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbe-delible.js
95 lines (88 loc) · 2.65 KB
/
be-delible.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// @ts-check
import { resolved, rejected, propInfo} from 'be-enhanced/cc.js';
import { BE } from 'be-enhanced/BE.js';
import {dispatchEvent as de} from 'trans-render/positractions/dispatchEvent.js';
/** @import {BEConfig, IEnhancement, BEAllProps} from './ts-refs/be-enhanced/types.d.ts' */
/** @import {Actions, PAP, AllProps, AP, BAP} from './ts-refs/be-delible/types.d.ts' */;
/**
* @implements {Actions}
*/
class BeDelible extends BE{
/**
* @type {BEConfig<BAP, Actions & IEnhancement>}
*/
static config = {
propDefaults:{
byob: true,
triggerInsertPosition: 'beforeend',
buttonContent: '⌫'
},
propInfo: {
...propInfo,
trigger: {
ro: true
}
},
positractions: [resolved, rejected],
compacts: {
when_triggerInsertPosition_changes_invoke_addDeleteBtn: 0
},
actions: {
setBtnContent: {
ifAllOf: ['buttonContent'],
ifNoneOf: ['byob']
}
},
handlers: {
trigger_to_beDeleted_on: 'click'
}
}
de = de;
/**
*
* @param {BAP} self
* @returns
*/
async addDeleteBtn(self){
const {triggerInsertPosition, enhancedElement, buttonContent} = self;
const { findAdjacentElement } = await import('trans-render/lib/findAdjacentElement.js');
let trigger = /** @type {HTMLButtonElement | null} */ (findAdjacentElement(triggerInsertPosition, enhancedElement, 'button.be-clonable-trigger'));
let byob = true;
if(trigger === null){
byob = false;
trigger = document.createElement('button');
trigger.type = 'button';
trigger.classList.add('be-delible-trigger');
trigger.ariaLabel = 'Delete this.';
trigger.title = 'Delete this.';
enhancedElement.insertAdjacentElement(triggerInsertPosition, trigger);
}
return /** @type {PAP} */ ({
trigger: new WeakRef(trigger),
resolved: true,
byob,
});
}
/**
*
* @param {BAP} self
*/
setBtnContent(self) {
const {buttonContent, trigger} = self;
const triggerEl = trigger.deref();
if(triggerEl === undefined) return;
//TODO: use trusted types
triggerEl.textContent = buttonContent;
}
/**
*
* @param {BAP} self
*/
beDeleted(self){
const { enhancedElement, trigger } = self;
enhancedElement.remove();
trigger.deref()?.remove();
}
}
await BeDelible.bootUp();
export { BeDelible }