| 1 |
"use strict"; |
| 2 |
|
| 3 |
/** |
| 4 |
* WPBC BFB: Section Renderer (WP-template–driven, slim version) |
| 5 |
* --------------------------------------------------------------------------------- |
| 6 |
* - Delegates column-style logic to UI.WPBC_BFB_Column_Styles (separate module) |
| 7 |
* - Inspector glue is moved to: /_out/core/bfb-inspector-patches.js |
| 8 |
* |
| 9 |
* Contracts: |
| 10 |
* - Registry: Registry.register( 'section', WPBC_BFB_Section ); |
| 11 |
* - Class API: static get_defaults(), static render(el, data, ctx), static on_field_drop(data, el, ctx?) |
| 12 |
* |
| 13 |
* File: /includes/page-form-builder/field-packs/section/_out/section-wptpl.js |
| 14 |
* |
| 15 |
* @since 11.0.0 |
| 16 |
* @modified 2025-09-16 11:24 |
| 17 |
* @version 1.1.0 |
| 18 |
*/ |
| 19 |
(function (w) { |
| 20 |
'use strict'; |
| 21 |
|
| 22 |
var Core = w.WPBC_BFB_Core || {}; |
| 23 |
var Registry = Core.WPBC_BFB_Field_Renderer_Registry; |
| 24 |
var Base = Core.WPBC_BFB_Field_Base; |
| 25 |
var UI = Core.UI = Core.UI || {}; |
| 26 |
if (!Registry || typeof Registry.register !== 'function' || !Base) { |
| 27 |
w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('WPBC_BFB_Section', 'Core registry/base missing'); |
| 28 |
return; |
| 29 |
} |
| 30 |
|
| 31 |
// Shortcuts. |
| 32 |
var S = Core.WPBC_BFB_Sanitize; |
| 33 |
var ColStyles = UI.WPBC_BFB_Column_Styles || null; |
| 34 |
|
| 35 |
/** |
| 36 |
* Clamp number of columns to supported range. |
| 37 |
* |
| 38 |
* @param {number|string} n |
| 39 |
* @returns {number} |
| 40 |
*/ |
| 41 |
function clamp_cols(n) { |
| 42 |
return S.clamp(Number(n) || 1, 1, 4); |
| 43 |
} |
| 44 |
class WPBC_BFB_Section extends Base { |
| 45 |
static template_id = 'wpbc-bfb-section'; |
| 46 |
|
| 47 |
/** |
| 48 |
* Default data for a new Section. |
| 49 |
* NOTE: Keep in sync with PHP schema. |
| 50 |
*/ |
| 51 |
static get_defaults() { |
| 52 |
return { |
| 53 |
type: 'section', |
| 54 |
label: 'Section', |
| 55 |
columns: 1, |
| 56 |
id: '', |
| 57 |
html_id: '', |
| 58 |
cssclass: '', |
| 59 |
col_styles: '' // JSON string, empty by default to avoid activation |
| 60 |
}; |
| 61 |
} |
| 62 |
|
| 63 |
/** |
| 64 |
* Render section preview into element. |
| 65 |
* |
| 66 |
* @param {HTMLElement} el |
| 67 |
* @param {object} data |
| 68 |
* @param {object} ctx |
| 69 |
*/ |
| 70 |
static render(el, data, ctx) { |
| 71 |
if (!el) { |
| 72 |
return; |
| 73 |
} |
| 74 |
var d = this.normalize_data(data); |
| 75 |
var html_id = d.html_id ? S.sanitize_html_id(String(d.html_id)) : ''; |
| 76 |
var next_class = S.sanitize_css_classlist(String(d.cssclass || '')); |
| 77 |
var col_styles = d.col_styles != null ? String(d.col_styles) : ''; |
| 78 |
|
| 79 |
// Treat legacy "[]" as empty / inactive. |
| 80 |
if (col_styles.trim() === '[]') { |
| 81 |
col_styles = ''; |
| 82 |
} |
| 83 |
el.classList.add('wpbc_bfb__section'); |
| 84 |
el.dataset.type = 'section'; |
| 85 |
el.dataset.label = d.label != null ? String(d.label) : ''; |
| 86 |
el.dataset.columns = d.columns != null ? String(clamp_cols(d.columns)) : '1'; |
| 87 |
el.dataset.html_id = html_id; |
| 88 |
el.dataset.cssclass = next_class || ''; |
| 89 |
el.dataset.col_styles = col_styles; |
| 90 |
|
| 91 |
// Replace previous custom classes. |
| 92 |
var prev = el.__wpbc_prev_classes || ''; |
| 93 |
if (prev) { |
| 94 |
prev.split(/\s+/).filter(Boolean).forEach(function (cls) { |
| 95 |
el.classList.remove(cls); |
| 96 |
}); |
| 97 |
} |
| 98 |
if (next_class) { |
| 99 |
next_class.split(/\s+/).filter(Boolean).forEach(function (cls) { |
| 100 |
el.classList.add(cls); |
| 101 |
}); |
| 102 |
} |
| 103 |
el.__wpbc_prev_classes = next_class || ''; |
| 104 |
|
| 105 |
// Render wp.template. |
| 106 |
var tpl = this.get_template(this.template_id); |
| 107 |
if (typeof tpl !== 'function') { |
| 108 |
w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('section_wptpl.tpl.missing', 'Template not found: ' + this.template_id); |
| 109 |
el.innerHTML = '<div class="wpbc_bfb__error" role="alert">Template not found: wpbc-bfb-section.</div>'; |
| 110 |
return; |
| 111 |
} |
| 112 |
try { |
| 113 |
el.innerHTML = tpl({ |
| 114 |
type: 'section', |
| 115 |
label: el.dataset.label || 'Section', |
| 116 |
columns: Number(el.dataset.columns || 1), |
| 117 |
id: d.id || '', |
| 118 |
html_id: html_id, |
| 119 |
cssclass: next_class |
| 120 |
}); |
| 121 |
} catch (e) { |
| 122 |
w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('section_wptpl.tpl.render', e); |
| 123 |
el.innerHTML = '<div class="wpbc_bfb__error" role="alert">Error rendering section preview.</div>'; |
| 124 |
} |
| 125 |
|
| 126 |
// Apply per-column styles via shared UI service (no-op if missing). |
| 127 |
try { |
| 128 |
if (ColStyles && typeof ColStyles.apply === 'function') { |
| 129 |
var arr = ColStyles.parse_col_styles(col_styles); |
| 130 |
ColStyles.apply(el, arr); |
| 131 |
} |
| 132 |
} catch (e2) { |
| 133 |
w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('section_wptpl.apply_col_styles', e2); |
| 134 |
} |
| 135 |
|
| 136 |
// Overlay controls (selection/toolbar), if available. |
| 137 |
UI && UI.WPBC_BFB_Overlay && UI.WPBC_BFB_Overlay.ensure && UI.WPBC_BFB_Overlay.ensure(ctx && ctx.builder, el); |
| 138 |
} |
| 139 |
|
| 140 |
/** |
| 141 |
* After drop hook. |
| 142 |
* |
| 143 |
* @param {object} data |
| 144 |
* @param {HTMLElement} el |
| 145 |
* @param {object} ctx |
| 146 |
*/ |
| 147 |
static on_field_drop(data, el, ctx) { |
| 148 |
try { |
| 149 |
var cols = clamp_cols(data && (data.columns != null ? data.columns : data['data-columns']) || el && el.dataset && el.dataset.columns || 1); |
| 150 |
if (ctx && ctx.builder && typeof ctx.builder.set_section_columns === 'function') { |
| 151 |
ctx.builder.set_section_columns(el, cols); |
| 152 |
} |
| 153 |
el.dataset.columns = String(cols); |
| 154 |
|
| 155 |
// Re-apply styles (baseline + activation state). |
| 156 |
if (ColStyles && typeof ColStyles.apply === 'function') { |
| 157 |
var arr = ColStyles.parse_col_styles(el.dataset.col_styles || ''); |
| 158 |
ColStyles.apply(el, arr); |
| 159 |
} |
| 160 |
} catch (e) { |
| 161 |
w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('WPBC_BFB_Section.on_field_drop', e); |
| 162 |
} |
| 163 |
} |
| 164 |
} |
| 165 |
try { |
| 166 |
Registry.register('section', WPBC_BFB_Section); |
| 167 |
} catch (e) { |
| 168 |
w._wpbc && w._wpbc.dev && w._wpbc.dev.error && w._wpbc.dev.error('WPBC_BFB_Section.register_wptpl', e); |
| 169 |
} |
| 170 |
})(window); |
| 171 |
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZmllbGQtcGFja3Mvc2VjdGlvbi9fb3V0L3NlY3Rpb24td3B0cGwuanMiLCJuYW1lcyI6WyJ3IiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJSZWdpc3RyeSIsIldQQkNfQkZCX0ZpZWxkX1JlbmRlcmVyX1JlZ2lzdHJ5IiwiQmFzZSIsIldQQkNfQkZCX0ZpZWxkX0Jhc2UiLCJVSSIsInJlZ2lzdGVyIiwiX3dwYmMiLCJkZXYiLCJlcnJvciIsIlMiLCJXUEJDX0JGQl9TYW5pdGl6ZSIsIkNvbFN0eWxlcyIsIldQQkNfQkZCX0NvbHVtbl9TdHlsZXMiLCJjbGFtcF9jb2xzIiwibiIsImNsYW1wIiwiTnVtYmVyIiwiV1BCQ19CRkJfU2VjdGlvbiIsInRlbXBsYXRlX2lkIiwiZ2V0X2RlZmF1bHRzIiwidHlwZSIsImxhYmVsIiwiY29sdW1ucyIsImlkIiwiaHRtbF9pZCIsImNzc2NsYXNzIiwiY29sX3N0eWxlcyIsInJlbmRlciIsImVsIiwiZGF0YSIsImN0eCIsImQiLCJub3JtYWxpemVfZGF0YSIsInNhbml0aXplX2h0bWxfaWQiLCJTdHJpbmciLCJuZXh0X2NsYXNzIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRyaW0iLCJjbGFzc0xpc3QiLCJhZGQiLCJkYXRhc2V0IiwicHJldiIsIl9fd3BiY19wcmV2X2NsYXNzZXMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJmb3JFYWNoIiwiY2xzIiwicmVtb3ZlIiwidHBsIiwiZ2V0X3RlbXBsYXRlIiwiaW5uZXJIVE1MIiwiZSIsImFwcGx5IiwiYXJyIiwicGFyc2VfY29sX3N0eWxlcyIsImUyIiwiV1BCQ19CRkJfT3ZlcmxheSIsImVuc3VyZSIsImJ1aWxkZXIiLCJvbl9maWVsZF9kcm9wIiwiY29scyIsInNldF9zZWN0aW9uX2NvbHVtbnMiLCJ3aW5kb3ciXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9maWVsZC1wYWNrcy9zZWN0aW9uL19zcmMvc2VjdGlvbi13cHRwbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogV1BCQyBCRkI6IFNlY3Rpb24gUmVuZGVyZXIgKFdQLXRlbXBsYXRl4oCTZHJpdmVuLCBzbGltIHZlcnNpb24pXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKiAtIERlbGVnYXRlcyBjb2x1bW4tc3R5bGUgbG9naWMgdG8gVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcyAoc2VwYXJhdGUgbW9kdWxlKVxyXG4gKiAtIEluc3BlY3RvciBnbHVlIGlzIG1vdmVkIHRvOiAgL19vdXQvY29yZS9iZmItaW5zcGVjdG9yLXBhdGNoZXMuanNcclxuICpcclxuICogQ29udHJhY3RzOlxyXG4gKiAtIFJlZ2lzdHJ5OiAgUmVnaXN0cnkucmVnaXN0ZXIoICdzZWN0aW9uJywgV1BCQ19CRkJfU2VjdGlvbiApO1xyXG4gKiAtIENsYXNzIEFQSTogc3RhdGljIGdldF9kZWZhdWx0cygpLCBzdGF0aWMgcmVuZGVyKGVsLCBkYXRhLCBjdHgpLCBzdGF0aWMgb25fZmllbGRfZHJvcChkYXRhLCBlbCwgY3R4PylcclxuICpcclxuICogRmlsZTogL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL2ZpZWxkLXBhY2tzL3NlY3Rpb24vX291dC9zZWN0aW9uLXdwdHBsLmpzXHJcbiAqXHJcbiAqIEBzaW5jZSAgICAgMTEuMC4wXHJcbiAqIEBtb2RpZmllZCAgMjAyNS0wOS0xNiAxMToyNFxyXG4gKiBAdmVyc2lvbiAgIDEuMS4wXHJcbiAqL1xyXG4oZnVuY3Rpb24gKCB3ICkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0dmFyIENvcmUgICAgID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9O1xyXG5cdHZhciBSZWdpc3RyeSA9IENvcmUuV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnk7XHJcblx0dmFyIEJhc2UgICAgID0gQ29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlO1xyXG5cdHZhciBVSSAgICAgICA9ICggQ29yZS5VSSA9IENvcmUuVUkgfHwge30gKTtcclxuXHJcblx0aWYgKCAhIFJlZ2lzdHJ5IHx8IHR5cGVvZiBSZWdpc3RyeS5yZWdpc3RlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhIEJhc2UgKSB7XHJcblx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnV1BCQ19CRkJfU2VjdGlvbicsICdDb3JlIHJlZ2lzdHJ5L2Jhc2UgbWlzc2luZycgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8vIFNob3J0Y3V0cy5cclxuXHR2YXIgUyAgICAgICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHR2YXIgQ29sU3R5bGVzID0gVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcyB8fCBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBDbGFtcCBudW1iZXIgb2YgY29sdW1ucyB0byBzdXBwb3J0ZWQgcmFuZ2UuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG5cclxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGNsYW1wX2NvbHMoIG4gKSB7XHJcblx0XHRyZXR1cm4gUy5jbGFtcCggTnVtYmVyKCBuICkgfHwgMSwgMSwgNCApO1xyXG5cdH1cclxuXHJcblx0Y2xhc3MgV1BCQ19CRkJfU2VjdGlvbiBleHRlbmRzIEJhc2Uge1xyXG5cclxuXHRcdHN0YXRpYyB0ZW1wbGF0ZV9pZCA9ICd3cGJjLWJmYi1zZWN0aW9uJztcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlZmF1bHQgZGF0YSBmb3IgYSBuZXcgU2VjdGlvbi5cclxuXHRcdCAqIE5PVEU6IEtlZXAgaW4gc3luYyB3aXRoIFBIUCBzY2hlbWEuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZSAgICAgICA6ICdzZWN0aW9uJyxcclxuXHRcdFx0XHRsYWJlbCAgICAgIDogJ1NlY3Rpb24nLFxyXG5cdFx0XHRcdGNvbHVtbnMgICAgOiAxLFxyXG5cdFx0XHRcdGlkICAgICAgICAgOiAnJyxcclxuXHRcdFx0XHRodG1sX2lkICAgIDogJycsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICA6ICcnLFxyXG5cdFx0XHRcdGNvbF9zdHlsZXMgOiAnJyAgICAgICAgICAgLy8gSlNPTiBzdHJpbmcsIGVtcHR5IGJ5IGRlZmF1bHQgdG8gYXZvaWQgYWN0aXZhdGlvblxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVuZGVyIHNlY3Rpb24gcHJldmlldyBpbnRvIGVsZW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSAgICAgIGRhdGFcclxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSAgICAgIGN0eFxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVuZGVyKCBlbCwgZGF0YSwgY3R4ICkge1xyXG5cdFx0XHRpZiAoICEgZWwgKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdFx0dmFyIGQgICAgICAgICAgPSB0aGlzLm5vcm1hbGl6ZV9kYXRhKCBkYXRhICk7XHJcblx0XHRcdHZhciBodG1sX2lkICAgID0gZC5odG1sX2lkID8gUy5zYW5pdGl6ZV9odG1sX2lkKCBTdHJpbmcoIGQuaHRtbF9pZCApICkgOiAnJztcclxuXHRcdFx0dmFyIG5leHRfY2xhc3MgPSBTLnNhbml0aXplX2Nzc19jbGFzc2xpc3QoIFN0cmluZyggZC5jc3NjbGFzcyB8fCAnJyApICk7XHJcblx0XHRcdHZhciBjb2xfc3R5bGVzID0gKCBkLmNvbF9zdHlsZXMgIT0gbnVsbCApID8gU3RyaW5nKCBkLmNvbF9zdHlsZXMgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gVHJlYXQgbGVnYWN5IFwiW11cIiBhcyBlbXB0eSAvIGluYWN0aXZlLlxyXG5cdFx0XHRpZiAoIGNvbF9zdHlsZXMudHJpbSgpID09PSAnW10nICkgeyBjb2xfc3R5bGVzID0gJyc7IH1cclxuXHJcblx0XHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0ZWwuZGF0YXNldC50eXBlICAgICAgID0gJ3NlY3Rpb24nO1xyXG5cdFx0XHRlbC5kYXRhc2V0LmxhYmVsICAgICAgPSAoIGQubGFiZWwgIT0gbnVsbCA/IFN0cmluZyggZC5sYWJlbCApIDogJycgKTtcclxuXHRcdFx0ZWwuZGF0YXNldC5jb2x1bW5zICAgID0gKCBkLmNvbHVtbnMgIT0gbnVsbCA/IFN0cmluZyggY2xhbXBfY29scyggZC5jb2x1bW5zICkgKSA6ICcxJyApO1xyXG5cdFx0XHRlbC5kYXRhc2V0Lmh0bWxfaWQgICAgPSBodG1sX2lkO1xyXG5cdFx0XHRlbC5kYXRhc2V0LmNzc2NsYXNzICAgPSBuZXh0X2NsYXNzIHx8ICcnO1xyXG5cdFx0XHRlbC5kYXRhc2V0LmNvbF9zdHlsZXMgPSBjb2xfc3R5bGVzO1xyXG5cclxuXHRcdFx0Ly8gUmVwbGFjZSBwcmV2aW91cyBjdXN0b20gY2xhc3Nlcy5cclxuXHRcdFx0dmFyIHByZXYgPSAoIGVsLl9fd3BiY19wcmV2X2NsYXNzZXMgfHwgJycgKTtcclxuXHRcdFx0aWYgKCBwcmV2ICkge1xyXG5cdFx0XHRcdHByZXYuc3BsaXQoIC9cXHMrLyApLmZpbHRlciggQm9vbGVhbiApLmZvckVhY2goIGZ1bmN0aW9uICggY2xzICkgeyBlbC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTsgfSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggbmV4dF9jbGFzcyApIHtcclxuXHRcdFx0XHRuZXh0X2NsYXNzLnNwbGl0KCAvXFxzKy8gKS5maWx0ZXIoIEJvb2xlYW4gKS5mb3JFYWNoKCBmdW5jdGlvbiAoIGNscyApIHsgZWwuY2xhc3NMaXN0LmFkZCggY2xzICk7IH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbC5fX3dwYmNfcHJldl9jbGFzc2VzID0gbmV4dF9jbGFzcyB8fCAnJztcclxuXHJcblx0XHRcdC8vIFJlbmRlciB3cC50ZW1wbGF0ZS5cclxuXHRcdFx0dmFyIHRwbCA9IHRoaXMuZ2V0X3RlbXBsYXRlKCB0aGlzLnRlbXBsYXRlX2lkICk7XHJcblx0XHRcdGlmICggdHlwZW9mIHRwbCAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnc2VjdGlvbl93cHRwbC50cGwubWlzc2luZycsICdUZW1wbGF0ZSBub3QgZm91bmQ6ICcgKyB0aGlzLnRlbXBsYXRlX2lkICk7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9fZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5UZW1wbGF0ZSBub3QgZm91bmQ6IHdwYmMtYmZiLXNlY3Rpb24uPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRlbC5pbm5lckhUTUwgPSB0cGwoIHtcclxuXHRcdFx0XHRcdHR5cGUgICAgIDogJ3NlY3Rpb24nLFxyXG5cdFx0XHRcdFx0bGFiZWwgICAgOiBlbC5kYXRhc2V0LmxhYmVsIHx8ICdTZWN0aW9uJyxcclxuXHRcdFx0XHRcdGNvbHVtbnMgIDogTnVtYmVyKCBlbC5kYXRhc2V0LmNvbHVtbnMgfHwgMSApLFxyXG5cdFx0XHRcdFx0aWQgICAgICAgOiBkLmlkIHx8ICcnLFxyXG5cdFx0XHRcdFx0aHRtbF9pZCAgOiBodG1sX2lkLFxyXG5cdFx0XHRcdFx0Y3NzY2xhc3MgOiBuZXh0X2NsYXNzXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnc2VjdGlvbl93cHRwbC50cGwucmVuZGVyJywgZSApO1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+RXJyb3IgcmVuZGVyaW5nIHNlY3Rpb24gcHJldmlldy48L2Rpdj4nO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBcHBseSBwZXItY29sdW1uIHN0eWxlcyB2aWEgc2hhcmVkIFVJIHNlcnZpY2UgKG5vLW9wIGlmIG1pc3NpbmcpLlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGlmICggQ29sU3R5bGVzICYmIHR5cGVvZiBDb2xTdHlsZXMuYXBwbHkgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR2YXIgYXJyID0gQ29sU3R5bGVzLnBhcnNlX2NvbF9zdHlsZXMoIGNvbF9zdHlsZXMgKTtcclxuXHRcdFx0XHRcdENvbFN0eWxlcy5hcHBseSggZWwsIGFyciApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUyICkge1xyXG5cdFx0XHRcdHcuX3dwYmMgJiYgdy5fd3BiYy5kZXYgJiYgdy5fd3BiYy5kZXYuZXJyb3IgJiYgdy5fd3BiYy5kZXYuZXJyb3IoICdzZWN0aW9uX3dwdHBsLmFwcGx5X2NvbF9zdHlsZXMnLCBlMiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPdmVybGF5IGNvbnRyb2xzIChzZWxlY3Rpb24vdG9vbGJhciksIGlmIGF2YWlsYWJsZS5cclxuXHRcdFx0VUkgJiYgVUkuV1BCQ19CRkJfT3ZlcmxheSAmJiBVSS5XUEJDX0JGQl9PdmVybGF5LmVuc3VyZSAmJiBVSS5XUEJDX0JGQl9PdmVybGF5LmVuc3VyZSggY3R4ICYmIGN0eC5idWlsZGVyLCBlbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWZ0ZXIgZHJvcCBob29rLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSAgICAgIGRhdGFcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHQgKiBAcGFyYW0ge29iamVjdH0gICAgICBjdHhcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoIGRhdGEsIGVsLCBjdHggKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIGNvbHMgPSBjbGFtcF9jb2xzKFxyXG5cdFx0XHRcdFx0KCBkYXRhICYmICggZGF0YS5jb2x1bW5zICE9IG51bGwgPyBkYXRhLmNvbHVtbnMgOiBkYXRhWydkYXRhLWNvbHVtbnMnXSApIClcclxuXHRcdFx0XHRcdHx8ICggZWwgJiYgZWwuZGF0YXNldCAmJiBlbC5kYXRhc2V0LmNvbHVtbnMgKVxyXG5cdFx0XHRcdFx0fHwgMVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKCBjdHggJiYgY3R4LmJ1aWxkZXIgJiYgdHlwZW9mIGN0eC5idWlsZGVyLnNldF9zZWN0aW9uX2NvbHVtbnMgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRjdHguYnVpbGRlci5zZXRfc2VjdGlvbl9jb2x1bW5zKCBlbCwgY29scyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbC5kYXRhc2V0LmNvbHVtbnMgPSBTdHJpbmcoIGNvbHMgKTtcclxuXHJcblx0XHRcdFx0Ly8gUmUtYXBwbHkgc3R5bGVzIChiYXNlbGluZSArIGFjdGl2YXRpb24gc3RhdGUpLlxyXG5cdFx0XHRcdGlmICggQ29sU3R5bGVzICYmIHR5cGVvZiBDb2xTdHlsZXMuYXBwbHkgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHR2YXIgYXJyID0gQ29sU3R5bGVzLnBhcnNlX2NvbF9zdHlsZXMoIGVsLmRhdGFzZXQuY29sX3N0eWxlcyB8fCAnJyApO1xyXG5cdFx0XHRcdFx0Q29sU3R5bGVzLmFwcGx5KCBlbCwgYXJyICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjICYmIHcuX3dwYmMuZGV2ICYmIHcuX3dwYmMuZGV2LmVycm9yICYmIHcuX3dwYmMuZGV2LmVycm9yKCAnV1BCQ19CRkJfU2VjdGlvbi5vbl9maWVsZF9kcm9wJywgZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0cnkge1xyXG5cdFx0UmVnaXN0cnkucmVnaXN0ZXIoICdzZWN0aW9uJywgV1BCQ19CRkJfU2VjdGlvbiApO1xyXG5cdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0dy5fd3BiYyAmJiB3Ll93cGJjLmRldiAmJiB3Ll93cGJjLmRldi5lcnJvciAmJiB3Ll93cGJjLmRldi5lcnJvciggJ1dQQkNfQkZCX1NlY3Rpb24ucmVnaXN0ZXJfd3B0cGwnLCBlICk7XHJcblx0fVxyXG5cclxufSkoIHdpbmRvdyApO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFVBQVdBLENBQUMsRUFBRztFQUNmLFlBQVk7O0VBRVosSUFBSUMsSUFBSSxHQUFPRCxDQUFDLENBQUNFLGFBQWEsSUFBSSxDQUFDLENBQUM7RUFDcEMsSUFBSUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLGdDQUFnQztFQUNwRCxJQUFJQyxJQUFJLEdBQU9KLElBQUksQ0FBQ0ssbUJBQW1CO0VBQ3ZDLElBQUlDLEVBQUUsR0FBV04sSUFBSSxDQUFDTSxFQUFFLEdBQUdOLElBQUksQ0FBQ00sRUFBRSxJQUFJLENBQUMsQ0FBRztFQUUxQyxJQUFLLENBQUVKLFFBQVEsSUFBSSxPQUFPQSxRQUFRLENBQUNLLFFBQVEsS0FBSyxVQUFVLElBQUksQ0FBRUgsSUFBSSxFQUFHO0lBQ3RFTCxDQUFDLENBQUNTLEtBQUssSUFBSVQsQ0FBQyxDQUFDUyxLQUFLLENBQUNDLEdBQUcsSUFBSVYsQ0FBQyxDQUFDUyxLQUFLLENBQUNDLEdBQUcsQ0FBQ0MsS0FBSyxJ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 |
| 172 |
|