PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-form-builder / admin-page-tpl / _out / modal_page_delete.js

modal_page_delete.js in Booking Calendar 11.9, at includes/page-form-builder/admin-page-tpl/_out/modal_page_delete.js

184 lines 22.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 /**
4 * Booking Calendar — Page Delete Confirm controller (BFB Admin)
5 *
6 * Depends on:
7 * - WPBC_BFB_Core (bfb-core.js)
8 * - UI.Templates (bfb-templates.js)
9 * - UI.Modals (modal show/hide helpers)
10 *
11 * @file: ../includes/page-form-builder/admin-page-tpl/_out/modal_page_delete.js
12 */
13
14 (function (w, d) {
15 'use strict';
16
17 const Core = w.WPBC_BFB_Core = w.WPBC_BFB_Core || {};
18 const UI = Core.UI = Core.UI || {};
19
20 // -------------------------------------------------------------------------
21 // Constants (keep selectors in one place)
22 // -------------------------------------------------------------------------
23
24 const ACTION_KEY = 'bfb_action__page_delete';
25 const MODAL_DOM_ID = 'wpbc_bfb_modal__page_delete';
26 const TPL_MODAL_ID = 'wpbc-bfb-tpl-modal-page-delete';
27 const SEL_TRIGGER = '[data-wpbc-bfb-action="' + ACTION_KEY + '"]';
28 const SEL_PAGE = '.wpbc_bfb__panel--preview';
29 const SEL_CONFIRM = '#' + MODAL_DOM_ID + ' [data-wpbc-bfb-confirm="1"][data-wpbc-bfb-action="' + ACTION_KEY + '"]';
30
31 // -------------------------------------------------------------------------
32 // Module: Page Delete Confirm
33 // -------------------------------------------------------------------------
34
35 UI.WPBC_BFB_Page_Delete_Confirm = class extends UI.WPBC_BFB_Module {
36 init() {
37 if (!this.builder || !this.builder.pages_container) {
38 return;
39 }
40 this._bind_events();
41 }
42 destroy() {
43 const b = this.builder;
44 try {
45 if (this._on_trigger_click && b && b.pages_container) {
46 b.pages_container.removeEventListener('click', this._on_trigger_click, true);
47 }
48 if (this._on_confirm_click) {
49 d.removeEventListener('click', this._on_confirm_click, true);
50 }
51 } catch (_e) {}
52 this._on_trigger_click = null;
53 this._on_confirm_click = null;
54 }
55
56 // -----------------------
57 // Event binding
58 // -----------------------
59
60 _bind_events() {
61 const b = this.builder;
62 this._on_trigger_click = e => {
63 const trigger = this._closest(e.target, SEL_TRIGGER);
64 if (!trigger) {
65 return;
66 }
67 const page_el = this._closest(trigger, SEL_PAGE);
68 if (!page_el) {
69 return;
70 }
71 e.preventDefault();
72 this._open_modal_for_page(page_el);
73 };
74 this._on_confirm_click = e => {
75 const btn = this._closest(e.target, SEL_CONFIRM);
76 if (!btn) {
77 return;
78 }
79 e.preventDefault();
80 this._confirm_delete();
81 };
82 b.pages_container.addEventListener('click', this._on_trigger_click, true);
83 d.addEventListener('click', this._on_confirm_click, true);
84 }
85 _closest(el, selector) {
86 return el && el.closest ? el.closest(selector) : null;
87 }
88
89 // -----------------------
90 // Modal open / confirm
91 // -----------------------
92
93 _open_modal_for_page(page_el) {
94 const page_number = page_el.getAttribute('data-page') || '';
95 const ref = UI.Templates.ensure_dom_ref_from_wp_template(TPL_MODAL_ID, MODAL_DOM_ID, {
96 page_number: page_number
97 });
98 if (!ref || !ref.el) {
99 // No template/modal available => remove directly.
100 this._remove_page_el(page_el);
101 return;
102 }
103 const modal_el = ref.el;
104
105 // Store the target page on the modal instance (one modal, one active target).
106 modal_el.__wpbc_bfb_page_el = page_el;
107
108 // Update page number in modal header (optional, template already renders it too).
109 const sup = modal_el.querySelector ? modal_el.querySelector('.wpbc_bfb__modal_page_number') : null;
110 if (sup) {
111 sup.textContent = String(page_number);
112 }
113 UI.Modals.show(ref.id);
114 }
115 _confirm_delete() {
116 const modal_el = d.getElementById(MODAL_DOM_ID);
117 if (!modal_el) {
118 return;
119 }
120 const page_el = modal_el.__wpbc_bfb_page_el || null;
121 modal_el.__wpbc_bfb_page_el = null;
122 if (page_el) {
123 this._remove_page_el(page_el);
124 }
125 UI.Modals.hide(modal_el);
126 }
127
128 // -----------------------
129 // Deletion implementation
130 // -----------------------
131
132 _remove_page_el(page_el) {
133 const b = this.builder;
134 const selected = b.get_selected_field ? b.get_selected_field() : null;
135 let neighbor = null;
136
137 // If selection is inside the deleted page, try to select something nearby after deletion.
138 if (selected && page_el.contains(selected)) {
139 const page_id = page_el.getAttribute('data-page') || '';
140 neighbor = b.pages_container.querySelector('.wpbc_bfb__panel--preview:not([data-page="' + page_id + '"]) .wpbc_bfb__field:not(.is-invalid)');
141 }
142 page_el.remove();
143 if (b.usage && b.usage.update_palette_ui) {
144 b.usage.update_palette_ui();
145 }
146
147 // Notify structure change.
148 try {
149 const EV = Core.WPBC_BFB_Events || {};
150 const structure = typeof b.get_structure === 'function' ? b.get_structure() : null;
151 if (b.bus && b.bus.emit) {
152 b.bus.emit(EV.STRUCTURE_CHANGE, {
153 source: 'page-remove',
154 structure: structure,
155 page_el: page_el
156 });
157 }
158 } catch (_e) {}
159 if (b.select_field) {
160 b.select_field(neighbor || null);
161 }
162 }
163 };
164
165 // -------------------------------------------------------------------------
166 // Auto attach
167 // -------------------------------------------------------------------------
168
169 function attach(builder) {
170 if (!builder || typeof builder.use_module !== 'function') {
171 return;
172 }
173 if (builder.__wpbc_bfb_has_page_delete_confirm) {
174 return;
175 }
176 builder.__wpbc_bfb_has_page_delete_confirm = true;
177 builder.use_module(UI.WPBC_BFB_Page_Delete_Confirm);
178 }
179 if (w.wpbc_bfb_api && w.wpbc_bfb_api.ready && typeof w.wpbc_bfb_api.ready.then === 'function') {
180 w.wpbc_bfb_api.ready.then(attach);
181 }
182 })(window, document);
183 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvYWRtaW4tcGFnZS10cGwvX291dC9tb2RhbF9wYWdlX2RlbGV0ZS5qcyIsIm5hbWVzIjpbInciLCJkIiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJVSSIsIkFDVElPTl9LRVkiLCJNT0RBTF9ET01fSUQiLCJUUExfTU9EQUxfSUQiLCJTRUxfVFJJR0dFUiIsIlNFTF9QQUdFIiwiU0VMX0NPTkZJUk0iLCJXUEJDX0JGQl9QYWdlX0RlbGV0ZV9Db25maXJtIiwiV1BCQ19CRkJfTW9kdWxlIiwiaW5pdCIsImJ1aWxkZXIiLCJwYWdlc19jb250YWluZXIiLCJfYmluZF9ldmVudHMiLCJkZXN0cm95IiwiYiIsIl9vbl90cmlnZ2VyX2NsaWNrIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9vbl9jb25maXJtX2NsaWNrIiwiX2UiLCJlIiwidHJpZ2dlciIsIl9jbG9zZXN0IiwidGFyZ2V0IiwicGFnZV9lbCIsInByZXZlbnREZWZhdWx0IiwiX29wZW5fbW9kYWxfZm9yX3BhZ2UiLCJidG4iLCJfY29uZmlybV9kZWxldGUiLCJhZGRFdmVudExpc3RlbmVyIiwiZWwiLCJzZWxlY3RvciIsImNsb3Nlc3QiLCJwYWdlX251bWJlciIsImdldEF0dHJpYnV0ZSIsInJlZiIsIlRlbXBsYXRlcyIsImVuc3VyZV9kb21fcmVmX2Zyb21fd3BfdGVtcGxhdGUiLCJfcmVtb3ZlX3BhZ2VfZWwiLCJtb2RhbF9lbCIsIl9fd3BiY19iZmJfcGFnZV9lbCIsInN1cCIsInF1ZXJ5U2VsZWN0b3IiLCJ0ZXh0Q29udGVudCIsIlN0cmluZyIsIk1vZGFscyIsInNob3ciLCJpZCIsImdldEVsZW1lbnRCeUlkIiwiaGlkZSIsInNlbGVjdGVkIiwiZ2V0X3NlbGVjdGVkX2ZpZWxkIiwibmVpZ2hib3IiLCJjb250YWlucyIsInBhZ2VfaWQiLCJyZW1vdmUiLCJ1c2FnZSIsInVwZGF0ZV9wYWxldHRlX3VpIiwiRVYiLCJXUEJDX0JGQl9FdmVudHMiLCJzdHJ1Y3R1cmUiLCJnZXRfc3RydWN0dXJlIiwiYnVzIiwiZW1pdCIsIlNUUlVDVFVSRV9DSEFOR0UiLCJzb3VyY2UiLCJzZWxlY3RfZmllbGQiLCJhdHRhY2giLCJ1c2VfbW9kdWxlIiwiX193cGJjX2JmYl9oYXNfcGFnZV9kZWxldGVfY29uZmlybSIsIndwYmNfYmZiX2FwaSIsInJlYWR5IiwidGhlbiIsIndpbmRvdyIsImRvY3VtZW50Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvYWRtaW4tcGFnZS10cGwvX3NyYy9tb2RhbF9wYWdlX2RlbGV0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQm9va2luZyBDYWxlbmRhciDigJQgUGFnZSBEZWxldGUgQ29uZmlybSBjb250cm9sbGVyIChCRkIgQWRtaW4pXHJcbiAqXHJcbiAqIERlcGVuZHMgb246XHJcbiAqIC0gV1BCQ19CRkJfQ29yZSAoYmZiLWNvcmUuanMpXHJcbiAqIC0gVUkuVGVtcGxhdGVzIChiZmItdGVtcGxhdGVzLmpzKVxyXG4gKiAtIFVJLk1vZGFscyAobW9kYWwgc2hvdy9oaWRlIGhlbHBlcnMpXHJcbiAqXHJcbiAqIEBmaWxlOiAuLi9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9hZG1pbi1wYWdlLXRwbC9fb3V0L21vZGFsX3BhZ2VfZGVsZXRlLmpzXHJcbiAqL1xyXG5cclxuKGZ1bmN0aW9uICh3LCBkKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHRjb25zdCBDb3JlID0gKHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSk7XHJcblx0Y29uc3QgVUkgICA9IChDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSk7XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBDb25zdGFudHMgKGtlZXAgc2VsZWN0b3JzIGluIG9uZSBwbGFjZSlcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdGNvbnN0IEFDVElPTl9LRVkgICA9ICdiZmJfYWN0aW9uX19wYWdlX2RlbGV0ZSc7XHJcblx0Y29uc3QgTU9EQUxfRE9NX0lEID0gJ3dwYmNfYmZiX21vZGFsX19wYWdlX2RlbGV0ZSc7XHJcblx0Y29uc3QgVFBMX01PREFMX0lEID0gJ3dwYmMtYmZiLXRwbC1tb2RhbC1wYWdlLWRlbGV0ZSc7XHJcblxyXG5cdGNvbnN0IFNFTF9UUklHR0VSID0gJ1tkYXRhLXdwYmMtYmZiLWFjdGlvbj1cIicgKyBBQ1RJT05fS0VZICsgJ1wiXSc7XHJcblx0Y29uc3QgU0VMX1BBR0UgICAgPSAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyc7XHJcblx0Y29uc3QgU0VMX0NPTkZJUk0gPSAnIycgKyBNT0RBTF9ET01fSUQgKyAnIFtkYXRhLXdwYmMtYmZiLWNvbmZpcm09XCIxXCJdW2RhdGEtd3BiYy1iZmItYWN0aW9uPVwiJyArIEFDVElPTl9LRVkgKyAnXCJdJztcclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIE1vZHVsZTogUGFnZSBEZWxldGUgQ29uZmlybVxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0VUkuV1BCQ19CRkJfUGFnZV9EZWxldGVfQ29uZmlybSA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHRpZiAoICF0aGlzLmJ1aWxkZXIgfHwgIXRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXIgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2JpbmRfZXZlbnRzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzLl9vbl90cmlnZ2VyX2NsaWNrICYmIGIgJiYgYi5wYWdlc19jb250YWluZXIgKSB7XHJcblx0XHRcdFx0XHRiLnBhZ2VzX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLl9vbl90cmlnZ2VyX2NsaWNrLCB0cnVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICggdGhpcy5fb25fY29uZmlybV9jbGljayApIHtcclxuXHRcdFx0XHRcdGQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdGhpcy5fb25fY29uZmlybV9jbGljaywgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLl9vbl90cmlnZ2VyX2NsaWNrID0gbnVsbDtcclxuXHRcdFx0dGhpcy5fb25fY29uZmlybV9jbGljayA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdC8vIEV2ZW50IGJpbmRpbmdcclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdFx0X2JpbmRfZXZlbnRzKCkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cclxuXHRcdFx0dGhpcy5fb25fdHJpZ2dlcl9jbGljayA9IChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdHJpZ2dlciA9IHRoaXMuX2Nsb3Nlc3QoIGUudGFyZ2V0LCBTRUxfVFJJR0dFUiApO1xyXG5cdFx0XHRcdGlmICggIXRyaWdnZXIgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBwYWdlX2VsID0gdGhpcy5fY2xvc2VzdCggdHJpZ2dlciwgU0VMX1BBR0UgKTtcclxuXHRcdFx0XHRpZiAoICFwYWdlX2VsICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdHRoaXMuX29wZW5fbW9kYWxfZm9yX3BhZ2UoIHBhZ2VfZWwgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHRoaXMuX29uX2NvbmZpcm1fY2xpY2sgPSAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGJ0biA9IHRoaXMuX2Nsb3Nlc3QoIGUudGFyZ2V0LCBTRUxfQ09ORklSTSApO1xyXG5cdFx0XHRcdGlmICggIWJ0biApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHR0aGlzLl9jb25maXJtX2RlbGV0ZSgpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgdGhpcy5fb25fdHJpZ2dlcl9jbGljaywgdHJ1ZSApO1xyXG5cdFx0XHRkLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuX29uX2NvbmZpcm1fY2xpY2ssIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHRfY2xvc2VzdChlbCwgc2VsZWN0b3IpIHtcclxuXHRcdFx0cmV0dXJuIChlbCAmJiBlbC5jbG9zZXN0KSA/IGVsLmNsb3Nlc3QoIHNlbGVjdG9yICkgOiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBNb2RhbCBvcGVuIC8gY29uZmlybVxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHRfb3Blbl9tb2RhbF9mb3JfcGFnZShwYWdlX2VsKSB7XHJcblx0XHRcdGNvbnN0IHBhZ2VfbnVtYmVyID0gcGFnZV9lbC5nZXRBdHRyaWJ1dGUoICdkYXRhLXBhZ2UnICkgfHwgJyc7XHJcblxyXG5cdFx0XHRjb25zdCByZWYgPSBVSS5UZW1wbGF0ZXMuZW5zdXJlX2RvbV9yZWZfZnJvbV93cF90ZW1wbGF0ZShcclxuXHRcdFx0XHRUUExfTU9EQUxfSUQsXHJcblx0XHRcdFx0TU9EQUxfRE9NX0lELFxyXG5cdFx0XHRcdHsgcGFnZV9udW1iZXI6IHBhZ2VfbnVtYmVyIH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmICggIXJlZiB8fCAhcmVmLmVsICkge1xyXG5cdFx0XHRcdC8vIE5vIHRlbXBsYXRlL21vZGFsIGF2YWlsYWJsZSA9PiByZW1vdmUgZGlyZWN0bHkuXHJcblx0XHRcdFx0dGhpcy5fcmVtb3ZlX3BhZ2VfZWwoIHBhZ2VfZWwgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG1vZGFsX2VsID0gcmVmLmVsO1xyXG5cclxuXHRcdFx0Ly8gU3RvcmUgdGhlIHRhcmdldCBwYWdlIG9uIHRoZSBtb2RhbCBpbnN0YW5jZSAob25lIG1vZGFsLCBvbmUgYWN0aXZlIHRhcmdldCkuXHJcblx0XHRcdG1vZGFsX2VsLl9fd3BiY19iZmJfcGFnZV9lbCA9IHBhZ2VfZWw7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgcGFnZSBudW1iZXIgaW4gbW9kYWwgaGVhZGVyIChvcHRpb25hbCwgdGVtcGxhdGUgYWxyZWFkeSByZW5kZXJzIGl0IHRvbykuXHJcblx0XHRcdGNvbnN0IHN1cCA9IG1vZGFsX2VsLnF1ZXJ5U2VsZWN0b3IgPyBtb2RhbF9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19tb2RhbF9wYWdlX251bWJlcicgKSA6IG51bGw7XHJcblx0XHRcdGlmICggc3VwICkge1xyXG5cdFx0XHRcdHN1cC50ZXh0Q29udGVudCA9IFN0cmluZyggcGFnZV9udW1iZXIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0VUkuTW9kYWxzLnNob3coIHJlZi5pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9jb25maXJtX2RlbGV0ZSgpIHtcclxuXHRcdFx0Y29uc3QgbW9kYWxfZWwgPSBkLmdldEVsZW1lbnRCeUlkKCBNT0RBTF9ET01fSUQgKTtcclxuXHRcdFx0aWYgKCAhbW9kYWxfZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBwYWdlX2VsICAgICAgICAgICAgICAgPSBtb2RhbF9lbC5fX3dwYmNfYmZiX3BhZ2VfZWwgfHwgbnVsbDtcclxuXHRcdFx0bW9kYWxfZWwuX193cGJjX2JmYl9wYWdlX2VsID0gbnVsbDtcclxuXHJcblx0XHRcdGlmICggcGFnZV9lbCApIHtcclxuXHRcdFx0XHR0aGlzLl9yZW1vdmVfcGFnZV9lbCggcGFnZV9lbCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRVSS5Nb2RhbHMuaGlkZSggbW9kYWxfZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0Ly8gRGVsZXRpb24gaW1wbGVtZW50YXRpb25cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdFx0X3JlbW92ZV9wYWdlX2VsKHBhZ2VfZWwpIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IHNlbGVjdGVkID0gKGIuZ2V0X3NlbGVjdGVkX2ZpZWxkKSA/IGIuZ2V0X3NlbGVjdGVkX2ZpZWxkKCkgOiBudWxsO1xyXG5cclxuXHRcdFx0bGV0IG5laWdoYm9yID0gbnVsbDtcclxuXHJcblx0XHRcdC8vIElmIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhlIGRlbGV0ZWQgcGFnZSwgdHJ5IHRvIHNlbGVjdCBzb21ldGhpbmcgbmVhcmJ5IGFmdGVyIGRlbGV0aW9uLlxyXG5cdFx0XHRpZiAoIHNlbGVjdGVkICYmIHBhZ2VfZWwuY29udGFpbnMoIHNlbGVjdGVkICkgKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFnZV9pZCA9IHBhZ2VfZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1wYWdlJyApIHx8ICcnO1xyXG5cdFx0XHRcdG5laWdoYm9yICAgICAgPSBiLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXc6bm90KFtkYXRhLXBhZ2U9XCInICsgcGFnZV9pZCArICdcIl0pIC53cGJjX2JmYl9fZmllbGQ6bm90KC5pcy1pbnZhbGlkKSdcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwYWdlX2VsLnJlbW92ZSgpO1xyXG5cclxuXHRcdFx0aWYgKCBiLnVzYWdlICYmIGIudXNhZ2UudXBkYXRlX3BhbGV0dGVfdWkgKSB7XHJcblx0XHRcdFx0Yi51c2FnZS51cGRhdGVfcGFsZXR0ZV91aSgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOb3RpZnkgc3RydWN0dXJlIGNoYW5nZS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBFViAgICAgICAgPSBDb3JlLldQQkNfQkZCX0V2ZW50cyB8fCB7fTtcclxuXHRcdFx0XHRjb25zdCBzdHJ1Y3R1cmUgPSAodHlwZW9mIGIuZ2V0X3N0cnVjdHVyZSA9PT0gJ2Z1bmN0aW9uJykgPyBiLmdldF9zdHJ1Y3R1cmUoKSA6IG51bGw7XHJcblxyXG5cdFx0XHRcdGlmICggYi5idXMgJiYgYi5idXMuZW1pdCApIHtcclxuXHRcdFx0XHRcdGIuYnVzLmVtaXQoIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHtcclxuXHRcdFx0XHRcdFx0c291cmNlICAgOiAncGFnZS1yZW1vdmUnLFxyXG5cdFx0XHRcdFx0XHRzdHJ1Y3R1cmU6IHN0cnVjdHVyZSxcclxuXHRcdFx0XHRcdFx0cGFnZV9lbCAgOiBwYWdlX2VsXHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggYi5zZWxlY3RfZmllbGQgKSB7XHJcblx0XHRcdFx0Yi5zZWxlY3RfZmllbGQoIG5laWdoYm9yIHx8IG51bGwgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBBdXRvIGF0dGFjaFxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0ZnVuY3Rpb24gYXR0YWNoKGJ1aWxkZXIpIHtcclxuXHRcdGlmICggIWJ1aWxkZXIgfHwgdHlwZW9mIGJ1aWxkZXIudXNlX21vZHVsZSAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggYnVpbGRlci5fX3dwYmNfYmZiX2hhc19wYWdlX2RlbGV0ZV9jb25maXJtICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0YnVpbGRlci5fX3dwYmNfYmZiX2hhc19wYWdlX2RlbGV0ZV9jb25maXJtID0gdHJ1ZTtcclxuXHRcdGJ1aWxkZXIudXNlX21vZHVsZSggVUkuV1BCQ19CRkJfUGFnZV9EZWxldGVfQ29uZmlybSApO1xyXG5cdH1cclxuXHJcblx0aWYgKCB3LndwYmNfYmZiX2FwaSAmJiB3LndwYmNfYmZiX2FwaS5yZWFkeSAmJiB0eXBlb2Ygdy53cGJjX2JmYl9hcGkucmVhZHkudGhlbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdHcud3BiY19iZmJfYXBpLnJlYWR5LnRoZW4oIGF0dGFjaCApO1xyXG5cdH1cclxuXHJcbn0oIHdpbmRvdywgZG9jdW1lbnQgKSk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QyxLQUFLLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDNUI7O01BRUE7TUFDQSxJQUFJO1FBQ0gsTUFBTUMsRUFBRSxHQUFVM0QsSUFBSSxDQUFDNEQsZUFBZSxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNQyxTQUFTLEdBQUksT0FBTzdDLENBQUMsQ0FBQzhDLGFBQWEsS0FBSyxVQUFVLEdBQUk5QyxDQUFDLENBQUM4QyxhQUFhLENBQUMsQ0FBQyxHQUFHLElBQUk7UUFFcEYsSUFBSzlDLENBQUMsQ0FBQytDLEdBQUcsSUFBSS9DLENBQUMsQ0FBQytDLEdBQUcsQ0FBQ0MsSUFBSSxFQUFHO1VBQzFCaEQsQ0FBQyxDQUFDK0MsR0FBRyxDQUFDQyxJQUFJLENBQUVMLEVBQUUsQ0FBQ00sZ0JBQWdCLEVBQUU7WUFDaENDLE1BQU0sRUFBSyxhQUFhO1lBQ3hCTCxTQUFTLEVBQUVBLFNBQVM7WUFDcEJwQyxPQUFPLEVBQUlBO1VBQ1osQ0FBRSxDQUFDO1FBQ0o7TUFDRCxDQUFDLENBQUMsT0FBUUwsRUFBRSxFQUFHLENBQ2Y7TUFFQSxJQUFLSixDQUFDLENBQUNtRCxZQUFZLEVBQUc7UUFDckJuRCxDQUFDLENBQUNtRCxZQUFZLENBQUVkLFFBQVEsSUFBSSxJQUFLLENBQUM7TUFDbkM7SUFDRDtFQUNELENBQUM7O0VBRUQ7RUFDQTtFQUNBOztFQUVBLFNBQVNlLE1BQU1BLENBQUN4RCxPQUFPLEVBQUU7SUFDeEIsSUFBSyxDQUFDQSxPQUFPLElBQUksT0FBT0EsT0FBTyxDQUFDeUQsVUFBVSxLQUFLLFVBQVUsRUFBRztNQUMzRDtJQUNEO0lBRUEsSUFBS3pELE9BQU8sQ0FBQzBELGtDQUFrQyxFQUFHO01BQ2pEO0lBQ0Q7SUFFQTFELE9BQU8sQ0FBQzBELGtDQUFrQyxHQUFHLElBQUk7SUFDakQxRCxPQUFPLENBQUN5RCxVQUFVLENBQUVuRSxFQUFFLENBQUNPLDRCQUE2QixDQUFDO0VBQ3REO0VBRUEsSUFBS1gsQ0FBQyxDQUFDeUUsWUFBWSxJQUFJekUsQ0FBQyxDQUFDeUUsWUFBWSxDQUFDQyxLQUFLLElBQUksT0FBTzFFLENBQUMsQ0FBQ3lFLFlBQVksQ0FBQ0MsS0FBSyxDQUFDQyxJQUFJLEtBQUssVUFBVSxFQUFHO0lBQ2hHM0UsQ0FBQyxDQUFDeUUsWUFBWSxDQUFDQyxLQUFLLENBQUNDLElBQUksQ0FBRUwsTUFBTyxDQUFDO0VBQ3BDO0FBRUQsQ0FBQyxFQUFFTSxNQUFNLEVBQUVDLFFBQVMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
184