| 1 |
"use strict"; |
| 2 |
|
| 3 |
/* globals window, document */ |
| 4 |
(function (w, d) { |
| 5 |
'use strict'; |
| 6 |
|
| 7 |
var api = w.WPBC_BFB_Form_Details = w.WPBC_BFB_Form_Details || {}; |
| 8 |
var is_ready = false; |
| 9 |
function get_input_el(setting_key) { |
| 10 |
var id = 'wpbc_bfb_setting__' + setting_key; |
| 11 |
return d.getElementById(id); |
| 12 |
} |
| 13 |
function get_picture_url_el() { |
| 14 |
return get_input_el('bfb_form_details__picture_url'); |
| 15 |
} |
| 16 |
function get_preview_img_el() { |
| 17 |
var root = d.querySelector('[data-wpbc-bfb-form-details-media="1"]'); |
| 18 |
return root ? root.querySelector('.wpbc_bfb__form_details_media__img') : null; |
| 19 |
} |
| 20 |
function get_preview_placeholder_el() { |
| 21 |
var root = d.querySelector('[data-wpbc-bfb-form-details-media="1"]'); |
| 22 |
return root ? root.querySelector('.wpbc_bfb__form_details_media__placeholder') : null; |
| 23 |
} |
| 24 |
function get_preview_img_el__at_top_toolbar() { |
| 25 |
var el = d.querySelector('.wpbc_bfb__hint__top_bar .wpbc_bfb__form_details_media__img'); |
| 26 |
return el ? el : null; |
| 27 |
} |
| 28 |
function get_preview_placeholder_el__at_top_toolbar() { |
| 29 |
var el = d.querySelector('.wpbc_bfb__hint__top_bar .wpbc_bfb__form_details_media__placeholder'); |
| 30 |
return el ? el : null; |
| 31 |
} |
| 32 |
function show_hide_preview_image(url, img, ph) { |
| 33 |
if (!img || !ph) { |
| 34 |
return; |
| 35 |
} |
| 36 |
if (typeof url === 'string' && url.trim()) { |
| 37 |
img.src = url; |
| 38 |
img.style.display = 'block'; |
| 39 |
ph.style.display = 'none'; |
| 40 |
} else { |
| 41 |
img.src = ''; |
| 42 |
img.style.display = 'none'; |
| 43 |
ph.style.display = 'block'; |
| 44 |
} |
| 45 |
} |
| 46 |
function set_preview_image(url) { |
| 47 |
var img = get_preview_img_el(); |
| 48 |
var ph = get_preview_placeholder_el(); |
| 49 |
show_hide_preview_image(url, img, ph); |
| 50 |
img = get_preview_img_el__at_top_toolbar(); |
| 51 |
ph = get_preview_placeholder_el__at_top_toolbar(); |
| 52 |
show_hide_preview_image(url, img, ph); |
| 53 |
} |
| 54 |
function sanitize_form_name(raw_value) { |
| 55 |
var val = typeof raw_value === 'string' ? raw_value : ''; |
| 56 |
val = val.trim(); |
| 57 |
|
| 58 |
// Prefer core sanitize if available. |
| 59 |
if (w.WPBC_BFB_Core && w.WPBC_BFB_Core.Sanitize && typeof w.WPBC_BFB_Core.Sanitize.to_token === 'function') { |
| 60 |
return w.WPBC_BFB_Core.Sanitize.to_token(val); |
| 61 |
} |
| 62 |
|
| 63 |
// Fallback: allow a-z 0-9 _ only. |
| 64 |
val = val.toLowerCase(); |
| 65 |
val = val.replace(/[^a-z0-9_]+/g, '_'); |
| 66 |
val = val.replace(/^_+|_+$/g, ''); |
| 67 |
return val; |
| 68 |
} |
| 69 |
function apply_loaded_data(detail) { |
| 70 |
if (!w.jQuery) { |
| 71 |
return; |
| 72 |
} |
| 73 |
var loaded = detail && typeof detail.loaded_data === 'object' && detail.loaded_data ? detail.loaded_data : {}; |
| 74 |
var form_name_el = get_input_el('bfb_form_details__form_name'); |
| 75 |
var title_el = get_input_el('bfb_form_details__title'); |
| 76 |
var picture_url_el = get_picture_url_el(); |
| 77 |
var desc_el = get_input_el('bfb_form_details__description'); |
| 78 |
var form_name = loaded.form_name || detail.form_name || 'standard'; |
| 79 |
var title = typeof loaded.title === 'string' && loaded.title.trim() ? loaded.title.trim() : form_name; |
| 80 |
var picture_url = typeof loaded.picture_url === 'string' && loaded.picture_url.trim() ? loaded.picture_url.trim() : ''; |
| 81 |
var description = typeof loaded.description === 'string' && loaded.description.trim() ? loaded.description.trim() : ''; |
| 82 |
if (form_name_el) { |
| 83 |
form_name_el.value = form_name; |
| 84 |
} |
| 85 |
if (title_el) { |
| 86 |
title_el.value = title; |
| 87 |
} |
| 88 |
if (picture_url_el) { |
| 89 |
picture_url_el.value = picture_url; |
| 90 |
} |
| 91 |
if (desc_el) { |
| 92 |
desc_el.value = description; |
| 93 |
} |
| 94 |
set_preview_image(picture_url); |
| 95 |
|
| 96 |
// Optional: update the existing hint title, if present. |
| 97 |
var $hint_title = w.jQuery('.wpbc_bfb__hint__form_name .wpbc_bfb__hint__form_name__title a.value'); |
| 98 |
var $hint_pic = w.jQuery('.wpbc_bfb__hint__form_name .wpbc_bfb__form_details_media__img'); |
| 99 |
var $hint_slug = w.jQuery('.wpbc_bfb__hint__form_name .wpbc_bfb__hint__form_name__slug span.value'); |
| 100 |
var $hint_title_i = w.jQuery('.wpbc_bfb__hint__form_name .wpbc_bfb__hint__form_name__title i'); |
| 101 |
if ($hint_title.length) { |
| 102 |
$hint_title.text(title); |
| 103 |
} |
| 104 |
if ($hint_title.length) { |
| 105 |
$hint_title.attr("title", description); |
| 106 |
} |
| 107 |
if ($hint_pic.length) { |
| 108 |
$hint_pic.attr("src", picture_url); |
| 109 |
} |
| 110 |
if ($hint_slug.length) { |
| 111 |
$hint_slug.text(form_name); |
| 112 |
} |
| 113 |
w.jQuery('.wpbc_bfb__hint__form_name__label').css('display', 'flex'); |
| 114 |
if (picture_url) { |
| 115 |
w.jQuery('.wpbc_bfb__hint__top_bar.wpbc_bfb__hint__form_name .wpbc_bfb__form_details_media__preview img').css('display', 'block'); |
| 116 |
w.jQuery('.wpbc_bfb__hint__top_bar.wpbc_bfb__hint__form_name .wpbc_bfb__form_details_media__preview .wpbc_bfb__form_details_media__placeholder').css('display', 'none'); |
| 117 |
} |
| 118 |
} |
| 119 |
|
| 120 |
/** |
| 121 |
* Sync UI after picture URL change. |
| 122 |
* |
| 123 |
* @return void |
| 124 |
*/ |
| 125 |
function on_picture_url_changed() { |
| 126 |
var picture_url_el = get_picture_url_el(); |
| 127 |
var url = picture_url_el && typeof picture_url_el.value === 'string' ? picture_url_el.value : ''; |
| 128 |
set_preview_image(url); |
| 129 |
|
| 130 |
// Keep existing hint image in sync (if present). |
| 131 |
if (w.jQuery) { |
| 132 |
var $hint_pic = w.jQuery('.wpbc_bfb__hint__form_name .wpbc_bfb__form_details_media__img'); |
| 133 |
if ($hint_pic.length) { |
| 134 |
$hint_pic.attr('src', url); |
| 135 |
} |
| 136 |
} |
| 137 |
} |
| 138 |
function remove_selected_image() { |
| 139 |
var picture_url_el = get_picture_url_el(); |
| 140 |
if (picture_url_el) { |
| 141 |
picture_url_el.value = ''; |
| 142 |
} |
| 143 |
on_picture_url_changed(); |
| 144 |
} |
| 145 |
function bind_ui() { |
| 146 |
if (is_ready) { |
| 147 |
return; |
| 148 |
} |
| 149 |
is_ready = true; |
| 150 |
|
| 151 |
// Load values when current form is loaded/saved via AJAX. |
| 152 |
d.addEventListener('wpbc:bfb:form:ajax_loaded', function (e) { |
| 153 |
apply_loaded_data(e && e.detail ? e.detail : null); |
| 154 |
}, { |
| 155 |
passive: true |
| 156 |
}); |
| 157 |
d.addEventListener('wpbc:bfb:form:ajax_saved', function (e) { |
| 158 |
apply_loaded_data(e && e.detail ? e.detail : null); |
| 159 |
}, { |
| 160 |
passive: true |
| 161 |
}); |
| 162 |
|
| 163 |
// React to URL changes (manual edits + programmatic set from uploader). |
| 164 |
var picture_url_el = get_picture_url_el(); |
| 165 |
if (picture_url_el) { |
| 166 |
picture_url_el.addEventListener('input', on_picture_url_changed, { |
| 167 |
passive: true |
| 168 |
}); |
| 169 |
picture_url_el.addEventListener('change', on_picture_url_changed, { |
| 170 |
passive: true |
| 171 |
}); |
| 172 |
|
| 173 |
// Your custom uploader hook (jQuery event). |
| 174 |
if (w.jQuery) { |
| 175 |
w.jQuery(picture_url_el).on('wpbc_media_upload_url_set', function () { |
| 176 |
on_picture_url_changed(); |
| 177 |
}); |
| 178 |
} |
| 179 |
} |
| 180 |
|
| 181 |
// Remove button stays native. |
| 182 |
var btn_remove = d.getElementById('wpbc_bfb__form_details_remove_image'); |
| 183 |
if (btn_remove) { |
| 184 |
btn_remove.addEventListener('click', function (evt) { |
| 185 |
evt.preventDefault(); |
| 186 |
remove_selected_image(); |
| 187 |
}); |
| 188 |
} |
| 189 |
|
| 190 |
// Optional: keyboard support for clickable preview (if it’s a DIV). |
| 191 |
var btn_img = d.querySelector('.wpbc_bfb__form_details_media__preview'); |
| 192 |
if (btn_img) { |
| 193 |
btn_img.addEventListener('keydown', function (evt) { |
| 194 |
if ('Enter' === evt.key || ' ' === evt.key) { |
| 195 |
evt.preventDefault(); |
| 196 |
btn_img.click(); |
| 197 |
} |
| 198 |
}); |
| 199 |
} |
| 200 |
|
| 201 |
// Sanitize slug on blur (keep your existing code). |
| 202 |
var form_name_el = get_input_el('bfb_form_details__form_name'); |
| 203 |
if (form_name_el) { |
| 204 |
form_name_el.addEventListener('blur', function () { |
| 205 |
form_name_el.value = sanitize_form_name(form_name_el.value); |
| 206 |
}); |
| 207 |
} |
| 208 |
} |
| 209 |
function boot() { |
| 210 |
bind_ui(); |
| 211 |
bind_events(); |
| 212 |
} |
| 213 |
if (d.readyState === 'loading') { |
| 214 |
d.addEventListener('DOMContentLoaded', boot, { |
| 215 |
once: true |
| 216 |
}); |
| 217 |
} else { |
| 218 |
boot(); |
| 219 |
} |
| 220 |
|
| 221 |
// Public helpers. |
| 222 |
api.apply_loaded_data = apply_loaded_data; |
| 223 |
|
| 224 |
// == Top Toolbar Form Name and Picture tumb ====================================================================== |
| 225 |
function bind_events() { |
| 226 |
// On click on Booking form Title in top toolbar. |
| 227 |
d.addEventListener('click', function (ev) { |
| 228 |
var btn = ev.target && ev.target.closest('.wpbc_bfb__hint__top_bar .wpbc_bfb__hint__form_name__title .value'); |
| 229 |
if (!btn) { |
| 230 |
return; |
| 231 |
} |
| 232 |
ev.preventDefault(); |
| 233 |
// Open "From Details" inspector sidebar. |
| 234 |
d.querySelector('[role="tab"][aria-controls="wpbc_bfb__inspector_form_details"]').click(); |
| 235 |
}); |
| 236 |
} |
| 237 |
})(window, document); |
| 238 |
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1kZXRhaWxzL19vdXQvY3VycmVudC1mb3JtLWRldGFpbHMtdWkuanMiLCJuYW1lcyI6WyJ3IiwiZCIsImFwaSIsIldQQkNfQkZCX0Zvcm1fRGV0YWlscyIsImlzX3JlYWR5IiwiZ2V0X2lucHV0X2VsIiwic2V0dGluZ19rZXkiLCJpZCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0X3BpY3R1cmVfdXJsX2VsIiwiZ2V0X3ByZXZpZXdfaW1nX2VsIiwicm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRfcHJldmlld19wbGFjZWhvbGRlcl9lbCIsImdldF9wcmV2aWV3X2ltZ19lbF9fYXRfdG9wX3Rvb2xiYXIiLCJlbCIsImdldF9wcmV2aWV3X3BsYWNlaG9sZGVyX2VsX19hdF90b3BfdG9vbGJhciIsInNob3dfaGlkZV9wcmV2aWV3X2ltYWdlIiwidXJsIiwiaW1nIiwicGgiLCJ0cmltIiwic3JjIiwic3R5bGUiLCJkaXNwbGF5Iiwic2V0X3ByZXZpZXdfaW1hZ2UiLCJzYW5pdGl6ZV9mb3JtX25hbWUiLCJyYXdfdmFsdWUiLCJ2YWwiLCJXUEJDX0JGQl9Db3JlIiwiU2FuaXRpemUiLCJ0b190b2tlbiIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsImFwcGx5X2xvYWRlZF9kYXRhIiwiZGV0YWlsIiwialF1ZXJ5IiwibG9hZGVkIiwibG9hZGVkX2RhdGEiLCJmb3JtX25hbWVfZWwiLCJ0aXRsZV9lbCIsInBpY3R1cmVfdXJsX2VsIiwiZGVzY19lbCIsImZvcm1fbmFtZSIsInRpdGxlIiwicGljdHVyZV91cmwiLCJkZXNjcmlwdGlvbiIsInZhbHVlIiwiJGhpbnRfdGl0bGUiLCIkaGludF9waWMiLCIkaGludF9zbHVnIiwiJGhpbnRfdGl0bGVfaSIsImxlbmd0aCIsInRleHQiLCJhdHRyIiwiY3NzIiwib25fcGljdHVyZV91cmxfY2hhbmdlZCIsInJlbW92ZV9zZWxlY3RlZF9pbWFnZSIsImJpbmRfdWkiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInBhc3NpdmUiLCJvbiIsImJ0bl9yZW1vdmUiLCJldnQiLCJwcmV2ZW50RGVmYXVsdCIsImJ0bl9pbWciLCJrZXkiLCJjbGljayIsImJvb3QiLCJiaW5kX2V2ZW50cyIsInJlYWR5U3RhdGUiLCJvbmNlIiwiZXYiLCJidG4iLCJ0YXJnZXQiLCJjbG9zZXN0Iiwid2luZG93IiwiZG9jdW1lbnQiXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9mb3JtLWRldGFpbHMvX3NyYy9jdXJyZW50LWZvcm0tZGV0YWlscy11aS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQgKi9cclxuKGZ1bmN0aW9uICh3LCBkKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHR2YXIgYXBpID0gdy5XUEJDX0JGQl9Gb3JtX0RldGFpbHMgPSB3LldQQkNfQkZCX0Zvcm1fRGV0YWlscyB8fCB7fTtcclxuXHJcblx0dmFyIGlzX3JlYWR5ID0gZmFsc2U7XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9pbnB1dF9lbChzZXR0aW5nX2tleSkge1xyXG5cdFx0dmFyIGlkID0gJ3dwYmNfYmZiX3NldHRpbmdfXycgKyBzZXR0aW5nX2tleTtcclxuXHRcdHJldHVybiBkLmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9waWN0dXJlX3VybF9lbCgpIHtcclxuXHRcdHJldHVybiBnZXRfaW5wdXRfZWwoJ2JmYl9mb3JtX2RldGFpbHNfX3BpY3R1cmVfdXJsJyk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfcHJldmlld19pbWdfZWwoKSB7XHJcblx0XHR2YXIgcm9vdCA9IGQucXVlcnlTZWxlY3RvcignW2RhdGEtd3BiYy1iZmItZm9ybS1kZXRhaWxzLW1lZGlhPVwiMVwiXScpO1xyXG5cdFx0cmV0dXJuIHJvb3QgPyByb290LnF1ZXJ5U2VsZWN0b3IoJy53cGJjX2JmYl9fZm9ybV9kZXRhaWxzX21lZGlhX19pbWcnKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfcHJldmlld19wbGFjZWhvbGRlcl9lbCgpIHtcclxuXHRcdHZhciByb290ID0gZC5xdWVyeVNlbGVjdG9yKCdbZGF0YS13cGJjLWJmYi1mb3JtLWRldGFpbHMtbWVkaWE9XCIxXCJdJyk7XHJcblx0XHRyZXR1cm4gcm9vdCA/IHJvb3QucXVlcnlTZWxlY3RvcignLndwYmNfYmZiX19mb3JtX2RldGFpbHNfbWVkaWFfX3BsYWNlaG9sZGVyJykgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3ByZXZpZXdfaW1nX2VsX19hdF90b3BfdG9vbGJhcigpIHtcclxuXHRcdHZhciBlbCA9IGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faGludF9fdG9wX2JhciAud3BiY19iZmJfX2Zvcm1fZGV0YWlsc19tZWRpYV9faW1nJyApO1xyXG5cdFx0cmV0dXJuIGVsID8gZWwgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3ByZXZpZXdfcGxhY2Vob2xkZXJfZWxfX2F0X3RvcF90b29sYmFyKCkge1xyXG5cdFx0dmFyIGVsID0gZC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19oaW50X190b3BfYmFyIC53cGJjX2JmYl9fZm9ybV9kZXRhaWxzX21lZGlhX19wbGFjZWhvbGRlcicgKTtcclxuXHRcdHJldHVybiBlbCA/IGVsIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNob3dfaGlkZV9wcmV2aWV3X2ltYWdlKHVybCwgaW1nLCBwaCkge1xyXG5cclxuXHRcdGlmICggISBpbWcgfHwgISBwaCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgJiYgdXJsLnRyaW0oKSApIHtcclxuXHRcdFx0aW1nLnNyYyA9IHVybDtcclxuXHRcdFx0aW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdFx0XHRwaC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aW1nLnNyYyA9ICcnO1xyXG5cdFx0XHRpbWcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0cGguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRfcHJldmlld19pbWFnZSh1cmwpIHtcclxuXHJcblx0XHR2YXIgaW1nID0gZ2V0X3ByZXZpZXdfaW1nX2VsKCk7XHJcblx0XHR2YXIgcGggID0gZ2V0X3ByZXZpZXdfcGxhY2Vob2xkZXJfZWwoKTtcclxuXHRcdHNob3dfaGlkZV9wcmV2aWV3X2ltYWdlKCB1cmwsIGltZywgcGggKTtcclxuXHJcblx0XHRpbWcgPSBnZXRfcHJldmlld19pbWdfZWxfX2F0X3RvcF90b29sYmFyKCk7XHJcblx0XHRwaCAgPSBnZXRfcHJldmlld19wbGFjZWhvbGRlcl9lbF9fYXRfdG9wX3Rvb2xiYXIoKTtcclxuXHRcdHNob3dfaGlkZV9wcmV2aWV3X2ltYWdlKCB1cmwsIGltZywgcGggKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNhbml0aXplX2Zvcm1fbmFtZShyYXdfdmFsdWUpIHtcclxuXHRcdHZhciB2YWwgPSAodHlwZW9mIHJhd192YWx1ZSA9PT0gJ3N0cmluZycpID8gcmF3X3ZhbHVlIDogJyc7XHJcblx0XHR2YWwgPSB2YWwudHJpbSgpO1xyXG5cclxuXHRcdC8vIFByZWZlciBjb3JlIHNhbml0aXplIGlmIGF2YWlsYWJsZS5cclxuXHRcdGlmICggdy5XUEJDX0JGQl9Db3JlICYmIHcuV1BCQ19CRkJfQ29yZS5TYW5pdGl6ZSAmJiB0eXBlb2Ygdy5XUEJDX0JGQl9Db3JlLlNhbml0aXplLnRvX3Rva2VuID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRyZXR1cm4gdy5XUEJDX0JGQl9Db3JlLlNhbml0aXplLnRvX3Rva2VuKHZhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmFsbGJhY2s6IGFsbG93IGEteiAwLTkgXyBvbmx5LlxyXG5cdFx0dmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR2YWwgPSB2YWwucmVwbGFjZSgvW15hLXowLTlfXSsvZywgJ18nKTtcclxuXHRcdHZhbCA9IHZhbC5yZXBsYWNlKC9eXyt8XyskL2csICcnKTtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBhcHBseV9sb2FkZWRfZGF0YShkZXRhaWwpIHtcclxuXHRcdGlmICggISB3LmpRdWVyeSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBsb2FkZWQgPSAoZGV0YWlsICYmIHR5cGVvZiBkZXRhaWwubG9hZGVkX2RhdGEgPT09ICdvYmplY3QnICYmIGRldGFpbC5sb2FkZWRfZGF0YSkgPyBkZXRhaWwubG9hZGVkX2RhdGEgOiB7fTtcclxuXHJcblx0XHR2YXIgZm9ybV9uYW1lX2VsICAgPSBnZXRfaW5wdXRfZWwoJ2JmYl9mb3JtX2RldGFpbHNfX2Zvcm1fbmFtZScpO1xyXG5cdFx0dmFyIHRpdGxlX2VsICAgICAgID0gZ2V0X2lucHV0X2VsKCdiZmJfZm9ybV9kZXRhaWxzX190aXRsZScpO1xyXG5cdFx0dmFyIHBpY3R1cmVfdXJsX2VsID0gZ2V0X3BpY3R1cmVfdXJsX2VsKCk7XHJcblx0XHR2YXIgZGVzY19lbCAgICAgICAgPSBnZXRfaW5wdXRfZWwoJ2JmYl9mb3JtX2RldGFpbHNfX2Rlc2NyaXB0aW9uJyk7XHJcblxyXG5cdFx0dmFyIGZvcm1fbmFtZSAgID0gbG9hZGVkLmZvcm1fbmFtZSB8fCBkZXRhaWwuZm9ybV9uYW1lIHx8ICdzdGFuZGFyZCc7XHJcblx0XHR2YXIgdGl0bGUgICAgICAgPSAodHlwZW9mIGxvYWRlZC50aXRsZSA9PT0gJ3N0cmluZycgJiYgbG9hZGVkLnRpdGxlLnRyaW0oKSkgPyBsb2FkZWQudGl0bGUudHJpbSgpIDogZm9ybV9uYW1lO1xyXG5cdFx0dmFyIHBpY3R1cmVfdXJsID0gKHR5cGVvZiBsb2FkZWQucGljdHVyZV91cmwgPT09ICdzdHJpbmcnICYmIGxvYWRlZC5waWN0dXJlX3VybC50cmltKCkpID8gbG9hZGVkLnBpY3R1cmVfdXJsLnRyaW0oKSA6ICcnO1xyXG5cdFx0dmFyIGRlc2NyaXB0aW9uID0gKHR5cGVvZiBsb2FkZWQuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnICYmIGxvYWRlZC5kZXNjcmlwdGlvbi50cmltKCkpID8gbG9hZGVkLmRlc2NyaXB0aW9uLnRyaW0oKSA6ICcnO1xyXG5cclxuXHRcdGlmICggZm9ybV9uYW1lX2VsICkgeyBmb3JtX25hbWVfZWwudmFsdWUgPSBmb3JtX25hbWU7IH1cclxuXHRcdGlmICggdGl0bGVfZWwgKSB7IHRpdGxlX2VsLnZhbHVlID0gdGl0bGU7IH1cclxuXHRcdGlmICggcGljdHVyZV91cmxfZWwgKSB7IHBpY3R1cmVfdXJsX2VsLnZhbHVlID0gcGljdHVyZV91cmw7IH1cclxuXHRcdGlmICggZGVzY19lbCApIHsgZGVzY19lbC52YWx1ZSA9IGRlc2NyaXB0aW9uOyB9XHJcblxyXG5cdFx0c2V0X3ByZXZpZXdfaW1hZ2UocGljdHVyZV91cmwpO1xyXG5cclxuXHRcdC8vIE9wdGlvbmFsOiB1cGRhdGUgdGhlIGV4aXN0aW5nIGhpbnQgdGl0bGUsIGlmIHByZXNlbnQuXHJcblx0XHR2YXIgJGhpbnRfdGl0bGUgPSB3LmpRdWVyeSgnLndwYmNfYmZiX19oaW50X19mb3JtX25hbWUgLndwYmNfYmZiX19oaW50X19mb3JtX25hbWVfX3RpdGxlIGEudmFsdWUnKTtcclxuXHRcdHZhciAkaGludF9waWMgPSB3LmpRdWVyeSgnLndwYmNfYmZiX19oaW50X19mb3JtX25hbWUgLndwYmNfYmZiX19mb3JtX2RldGFpbHNfbWVkaWFfX2ltZycpO1xyXG5cdFx0dmFyICRoaW50X3NsdWcgPSB3LmpRdWVyeSgnLndwYmNfYmZiX19oaW50X19mb3JtX25hbWUgLndwYmNfYmZiX19oaW50X19mb3JtX25hbWVfX3NsdWcgc3Bhbi52YWx1ZScpO1xyXG5cdFx0dmFyICRoaW50X3RpdGxlX2kgPSB3LmpRdWVyeSgnLndwYmNfYmZiX19oaW50X19mb3JtX25hbWUgLndwYmNfYmZiX19oaW50X19mb3JtX25hbWVfX3RpdGxlIGknKTtcclxuXHRcdGlmICggJGhpbnRfdGl0bGUubGVuZ3RoICkgeyAkaGludF90aXRsZS50ZXh0KHRpdGxlKTsgfVxyXG5cdFx0aWYgKCAkaGludF90aXRsZS5sZW5ndGggKSB7ICRoaW50X3RpdGxlLmF0dHIoXCJ0aXRsZVwiLCBkZXNjcmlwdGlvbik7IH1cclxuXHRcdGlmICggJGhpbnRfcGljLmxlbmd0aCApIHsgJGhpbnRfcGljLmF0dHIoXCJzcmNcIiwgcGljdHVyZV91cmwpOyB9XHJcblx0XHRpZiAoICRoaW50X3NsdWcubGVuZ3RoICkgeyAkaGludF9zbHVnLnRleHQoIGZvcm1fbmFtZSApOyB9XHJcblx0XHR3LmpRdWVyeSggJy53cGJjX2JmYl9faGludF9fZm9ybV9uYW1lX19sYWJlbCcgKS5jc3MoICdkaXNwbGF5JywgJ2ZsZXgnICk7XHJcblx0XHRpZiAocGljdHVyZV91cmwpe1xyXG5cdFx0XHR3LmpRdWVyeSggJy53cGJjX2JmYl9faGludF9fdG9wX2Jhci53cGJjX2JmYl9faGludF9fZm9ybV9uYW1lIC53cGJjX2JmYl9fZm9ybV9kZXRhaWxzX21lZGlhX19wcmV2aWV3IGltZycgKS5jc3MoICdkaXNwbGF5JywgJ2Jsb2NrJyApO1xyXG5cdFx0XHR3LmpRdWVyeSggJy53cGJjX2JmYl9faGludF9fdG9wX2Jhci53cGJjX2JmYl9faGludF9fZm9ybV9uYW1lIC53cGJjX2JmYl9fZm9ybV9kZXRhaWxzX21lZGlhX19wcmV2aWV3IC53cGJjX2JmYl9fZm9ybV9kZXRhaWxzX21lZGlhX19wbGFjZWhvbGRlcicgKS5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU3luYyBVSSBhZnRlciBwaWN0dXJlIFVSTCBjaGFuZ2UuXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHZvaWRcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBvbl9waWN0dXJlX3VybF9jaGFuZ2VkKCkge1xyXG5cclxuXHRcdHZhciBwaWN0dXJlX3VybF9lbCA9IGdldF9waWN0dXJlX3VybF9lbCgpO1xyXG5cdFx0dmFyIHVybCA9ICggcGljdHVyZV91cmxfZWwgJiYgdHlwZW9mIHBpY3R1cmVfdXJsX2VsLnZhbHVlID09PSAnc3RyaW5nJyApID8gcGljdHVyZV91cmxfZWwudmFsdWUgOiAnJztcclxuXHJcblx0XHRzZXRfcHJldmlld19pbWFnZSggdXJsICk7XHJcblxyXG5cdFx0Ly8gS2VlcCBleGlzdGluZyBoaW50IGltYWdlIGluIHN5bmMgKGlmIHByZXNlbnQpLlxyXG5cdFx0aWYgKCB3LmpRdWVyeSApIHtcclxuXHRcdFx0dmFyICRoaW50X3BpYyA9IHcualF1ZXJ5KCAnLndwYmNfYmZiX19oaW50X19mb3JtX25hbWUgLndwYmNfYmZiX19mb3JtX2RldGFpbHNfbWVkaWFfX2ltZycgKTtcclxuXHRcdFx0aWYgKCAkaGludF9waWMubGVuZ3RoICkge1xyXG5cdFx0XHRcdCRoaW50X3BpYy5hdHRyKCAnc3JjJywgdXJsICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJlbW92ZV9zZWxlY3RlZF9pbWFnZSgpIHtcclxuXHJcblx0XHR2YXIgcGljdHVyZV91cmxfZWwgPSBnZXRfcGljdHVyZV91cmxfZWwoKTtcclxuXHJcblx0XHRpZiAoIHBpY3R1cmVfdXJsX2VsICkge1xyXG5cdFx0XHRwaWN0dXJlX3VybF9lbC52YWx1ZSA9ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdG9uX3BpY3R1cmVfdXJsX2NoYW5nZWQoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGJpbmRfdWkoKSB7XHJcblxyXG5cdFx0aWYgKCBpc19yZWFkeSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aXNfcmVhZHkgPSB0cnVlO1xyXG5cclxuXHRcdC8vIExvYWQgdmFsdWVzIHdoZW4gY3VycmVudCBmb3JtIGlzIGxvYWRlZC9zYXZlZCB2aWEgQUpBWC5cclxuXHRcdGQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmM6YmZiOmZvcm06YWpheF9sb2FkZWQnLCBmdW5jdGlvbiAoIGUgKSB7XHJcblx0XHRcdGFwcGx5X2xvYWRlZF9kYXRhKCBlICYmIGUuZGV0YWlsID8gZS5kZXRhaWwgOiBudWxsICk7XHJcblx0XHR9LCB7IHBhc3NpdmU6IHRydWUgfSApO1xyXG5cclxuXHRcdGQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmM6YmZiOmZvcm06YWpheF9zYXZlZCcsIGZ1bmN0aW9uICggZSApIHtcclxuXHRcdFx0YXBwbHlfbG9hZGVkX2RhdGEoIGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbCA6IG51bGwgKTtcclxuXHRcdH0sIHsgcGFzc2l2ZTogdHJ1ZSB9ICk7XHJcblxyXG5cdFx0Ly8gUmVhY3QgdG8gVVJMIGNoYW5nZXMgKG1hbnVhbCBlZGl0cyArIHByb2dyYW1tYXRpYyBzZXQgZnJvbSB1cGxvYWRlcikuXHJcblx0XHR2YXIgcGljdHVyZV91cmxfZWwgPSBnZXRfcGljdHVyZV91cmxfZWwoKTtcclxuXHRcdGlmICggcGljdHVyZV91cmxfZWwgKSB7XHJcblxyXG5cdFx0XHRwaWN0dXJlX3VybF9lbC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCBvbl9waWN0dXJlX3VybF9jaGFuZ2VkLCB7IHBhc3NpdmU6IHRydWUgfSApO1xyXG5cdFx0XHRwaWN0dXJlX3VybF9lbC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgb25fcGljdHVyZV91cmxfY2hhbmdlZCwgeyBwYXNzaXZlOiB0cnVlIH0gKTtcclxuXHJcblx0XHRcdC8vIFlvdXIgY3VzdG9tIHVwbG9hZGVyIGhvb2sgKGpRdWVyeSBldmVudCkuXHJcblx0XHRcdGlmICggdy5qUXVlcnkgKSB7XHJcblx0XHRcdFx0dy5qUXVlcnkoIHBpY3R1cmVfdXJsX2VsICkub24oICd3cGJjX21lZGlhX3VwbG9hZF91cmxfc2V0JywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0b25fcGljdHVyZV91cmxfY2hhbmdlZCgpO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbW92ZSBidXR0b24gc3RheXMgbmF0aXZlLlxyXG5cdFx0dmFyIGJ0bl9yZW1vdmUgPSBkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2Zvcm1fZGV0YWlsc19yZW1vdmVfaW1hZ2UnICk7XHJcblx0XHRpZiAoIGJ0bl9yZW1vdmUgKSB7XHJcblx0XHRcdGJ0bl9yZW1vdmUuYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgZnVuY3Rpb24gKCBldnQgKSB7XHJcblx0XHRcdFx0ZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0cmVtb3ZlX3NlbGVjdGVkX2ltYWdlKCk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBPcHRpb25hbDoga2V5Ym9hcmQgc3VwcG9ydCBmb3IgY2xpY2thYmxlIHByZXZpZXcgKGlmIGl04oCZcyBhIERJVikuXHJcblx0XHR2YXIgYnRuX2ltZyA9IGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9kZXRhaWxzX21lZGlhX19wcmV2aWV3JyApO1xyXG5cdFx0aWYgKCBidG5faW1nICkge1xyXG5cdFx0XHRidG5faW1nLmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgZnVuY3Rpb24gKCBldnQgKSB7XHJcblx0XHRcdFx0aWYgKCAnRW50ZXInID09PSBldnQua2V5IHx8ICcgJyA9PT0gZXZ0LmtleSApIHtcclxuXHRcdFx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0YnRuX2ltZy5jbGljaygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNhbml0aXplIHNsdWcgb24gYmx1ciAoa2VlcCB5b3VyIGV4aXN0aW5nIGNvZGUpLlxyXG5cdFx0dmFyIGZvcm1fbmFtZV9lbCA9IGdldF9pbnB1dF9lbCggJ2JmYl9mb3JtX2RldGFpbHNfX2Zvcm1fbmFtZScgKTtcclxuXHRcdGlmICggZm9ybV9uYW1lX2VsICkge1xyXG5cdFx0XHRmb3JtX25hbWVfZWwuYWRkRXZlbnRMaXN0ZW5lciggJ2JsdXInLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0Zm9ybV9uYW1lX2VsLnZhbHVlID0gc2FuaXRpemVfZm9ybV9uYW1lKCBmb3JtX25hbWVfZWwudmFsdWUgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYm9vdCgpIHtcclxuXHRcdGJpbmRfdWkoKTtcclxuXHRcdGJpbmRfZXZlbnRzKCk7XHJcblx0fVxyXG5cclxuXHRpZiAoIGQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnICkge1xyXG5cdFx0ZC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgYm9vdCwgeyBvbmNlOiB0cnVlIH0pO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRib290KCk7XHJcblx0fVxyXG5cclxuXHQvLyBQdWJsaWMgaGVscGVycy5cclxuXHRhcGkuYXBwbHlfbG9hZGVkX2RhdGEgPSBhcHBseV9sb2FkZWRfZGF0YTtcclxuXHJcblx0Ly8gPT0gVG9wIFRvb2xiYXIgRm9ybSBOYW1lICBhbmQgUGljdHVyZSB0dW1iID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHRmdW5jdGlvbiBiaW5kX2V2ZW50cygpIHtcclxuXHRcdC8vIE9uIGNsaWNrIG9uIEJvb2tpbmcgZm9ybSBUaXRsZSBpbiAgdG9wICB0b29sYmFyLlxyXG5cdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZXYpIHtcclxuXHRcdFx0dmFyIGJ0biA9IGV2LnRhcmdldCAmJiBldi50YXJnZXQuY2xvc2VzdCggJy53cGJjX2JmYl9faGludF9fdG9wX2JhciAud3BiY19iZmJfX2hpbnRfX2Zvcm1fbmFtZV9fdGl0bGUgLnZhbHVlJyApO1xyXG5cdFx0XHRpZiAoICEgYnRuICkgeyByZXR1cm47IH1cclxuXHRcdFx0ZXYucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0Ly8gT3BlbiBcIkZyb20gRGV0YWlsc1wiIGluc3BlY3RvciBzaWRlYmFyLlxyXG5cdFx0XHRkLnF1ZXJ5U2VsZWN0b3IoICdbcm9sZT1cInRhYlwiXVthcmlhLWNvbnRyb2xzPVwid3BiY19iZmJfX2luc3BlY3Rvcl9mb3JtX2RldGFpbHNcIl0nICkuY2xpY2soKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG59KSh3aW5kb3csIGRvY3VtZW50KTtcclxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsQ0FBQyxVQUFVQSxDQUFDLEVBQUVDLENBQUMsRUFBRTtFQUNoQixZQUFZOztFQUVaLElBQUlDLEdBQUcsR0FBR0YsQ0FBQyxDQUFDRyxxQkFBcUIsR0FBR0gsQ0FBQyxDQUFDRyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7RUFFakUsSUFBSUMsUUFBUSxHQUFHLEtBQUs7RUFFcEIsU0FBU0MsWUFBWUEsQ0FBQ0MsV0FBVyxFQUFFO0lBQ2xDLElBQUlDLEVBQUUsR0FBRyxvQkFBb0IsR0FBR0QsV0FBVztJQUMzQyxPQUFPTCxDQUFDLENBQUNPLGNBQWMsQ0FBQ0QsRUFBRSxDQUFDO0VBQzVCO0VBRUEsU0FBU0Usa0JBQWtCQSxDQUFBLEVBQUc7SUFDN0IsT0FBT0osWUFBWSxDQUFDLCtCQUErQixDQUFDO0VBQ3JEO0VBRUEsU0FBU0ssa0JBQWtCQSxDQUFBLEVBQUc7SUFDN0IsSUFBSUMsSUFBSSxHQUFHVixDQUFDLENBQUNXLGFBQWEsQ0FBQyx3Q0FBd0MsQ0FBQztJQUNwRSxPQUFPRCxJQUFJLEdBQUdBLElBQUksQ0FBQ0MsYUFBYSxDQUFDLG9DQUFvQyxDQUFDLEdBQUcsSUFBSTtFQUM5RTtFQUVBLFNBQVNDLDBCQUEwQkEsQ0FBQSxFQUFHO0lBQ3JDLElBQUlGLElBQUksR0FBR1YsQ0FB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 |
| 239 |
|