PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / src / admin / common / toaster.js
advanced-ads / src / admin / common Last commit date
accordion.css 3 months ago button.css 4 weeks ago card.css 3 months ago common.css 3 months ago common.js 3 months ago deprecated.css 3 months ago form.css 3 months ago header.css 3 months ago modal-new.css 3 months ago modal.css 3 months ago modal.js 3 months ago screen-options.js 3 months ago tabs.js 3 months ago toast.css 3 months ago toaster.js 3 months ago toggles.js 3 months ago
toaster.js
130 lines
1 const TOAST_CONTAINER_ID = 'advads-toast-container';
2
3 /**
4 * Ensures a single container for toasts exists in the DOM.
5 *
6 * @param {boolean} inDialog Whether the toast is in a dialog.
7 *
8 * @return {HTMLElement} The toast container element.
9 */
10 function getToastContainer( inDialog = false ) {
11 let container = document.getElementById( TOAST_CONTAINER_ID );
12 if ( ! container ) {
13 container = document.createElement( 'div' );
14 container.id = TOAST_CONTAINER_ID;
15 container.setAttribute( 'aria-live', 'polite' );
16 }
17
18 let whereToAppend = document.body;
19
20 if ( inDialog ) {
21 const dialog = document.querySelector( '.advads-dialog[open]' );
22 if ( dialog ) {
23 whereToAppend = dialog.querySelector( '.advads-dialog-frame' );
24 }
25 }
26
27 whereToAppend.appendChild( container );
28
29 return container;
30 }
31
32 function createIconByType( type ) {
33 switch ( type ) {
34 case 'muted':
35 case 'info':
36 case 'warning':
37 return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" x2="12" y1="8" y2="12"/><line x1="12" x2="12.01" y1="16" y2="16"/></svg>';
38 case 'success':
39 return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.801 10A10 10 0 1 1 17 3.335"/><path d="m9 11 3 3L22 4"/></svg>';
40 case 'error':
41 return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m15 9-6 6"/><path d="m9 9 6 6"/></svg>';
42 }
43 }
44
45 /**
46 * Adds a notice (toast) to the page.
47 *
48 * @param {Object} options Options object.
49 * @param {string} options.type Notice type: 'success' | 'error' | 'warning' | 'info'.
50 * @param {string} options.iconType Notice icon type: 'success' | 'error' | 'warning' | 'info'.
51 * @param {string} options.title Notice title.
52 * @param {string} options.message Notice message body.
53 * @param {boolean} [options.isDismissible] Whether the notice can be dismissed. Default true.
54 * @param {string} [options.actions] Optional HTML string for action buttons/links.
55 * @param {boolean} [options.inDialog] Whether the toast is in a dialog. Default false.
56 * @param {boolean} [options.autoClose] Whether the toast should auto close. Default true.
57 * @param {number} [options.autoCloseTimeout] The timeout in milliseconds for auto close. Default 4000.
58 *
59 * @return {HTMLElement} The created toast element.
60 */
61 export function createToast( {
62 type = 'muted',
63 iconType,
64 title,
65 message,
66 autoClose = true,
67 autoCloseTimeout = 4000,
68 isDismissible = true,
69 actions = '',
70 inDialog = false,
71 } ) {
72 const container = getToastContainer( inDialog );
73 const toast = document.createElement( 'div' );
74 toast.className = `advads-toast advads-toast-${ type }`;
75 if ( isDismissible ) {
76 toast.classList.add( 'advads-toast-dismissible' );
77 }
78
79 const iconEl = document.createElement( 'div' );
80 iconEl.className = 'advads-toast-icon';
81 iconEl.innerHTML = createIconByType( iconType || type || 'info' );
82 toast.appendChild( iconEl );
83
84 const titleEl = document.createElement( 'div' );
85 titleEl.className = 'advads-toast-title';
86 titleEl.textContent = title;
87
88 const messageEl = document.createElement( 'div' );
89 messageEl.className = 'advads-toast-message';
90 messageEl.textContent = message;
91
92 const contentEl = document.createElement( 'div' );
93 contentEl.className = 'advads-toast-content';
94 contentEl.appendChild( titleEl );
95 contentEl.appendChild( messageEl );
96 toast.appendChild( contentEl );
97
98 if ( actions ) {
99 const actionsWrap = document.createElement( 'div' );
100 actionsWrap.className = 'advads-toast-actions';
101 actionsWrap.innerHTML = actions;
102 toast.appendChild( actionsWrap );
103 }
104
105 if ( isDismissible ) {
106 const closeBtn = document.createElement( 'a' );
107 closeBtn.href = '#';
108 closeBtn.className = 'advads-toast-dismiss';
109 closeBtn.setAttribute( 'aria-label', 'Dismiss' );
110 closeBtn.innerHTML = '&times;';
111 closeBtn.addEventListener( 'click', () => {
112 toast.remove();
113 } );
114 toast.appendChild( closeBtn );
115 }
116
117 container.appendChild( toast );
118
119 if ( autoClose ) {
120 setTimeout( () => {
121 toast.remove();
122 }, autoCloseTimeout );
123 }
124
125 return toast;
126 }
127
128 globalThis.advancedAds.utils = globalThis.advancedAds.utils || {};
129 globalThis.advancedAds.utils.createToast = createToast;
130