| 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 |
|