/**
* Public API bridge.
*
* Initializes the shared event emitter and internal helpers used by the
* documented runtime API before the editor lifecycle modules run.
*
* Exposes:
* SFE.PublicApi
* SFE.PublicApiBridge
*/
(function() {
'use strict';
window.MWP = window.MWP || {};
window.MWP.SFE = window.MWP.SFE || {};
const SFE = window.MWP.SFE;
const PublicApi = SFE.PublicApi || {};
const eventListeners = new Map();
const stagedBlockStates = new Map();
/**
* Create a plain-data clone for event payloads and snapshots.
*
* @param {*} value Source value.
* @returns {*} Cloned value when possible.
*/
function clonePlainData(value) {
if (value === null || typeof value === 'undefined') {
return value;
}
try {
return JSON.parse(JSON.stringify(value));
} catch (error) {
if (Array.isArray(value)) {
return value.slice();
}
if (typeof value === 'object') {
return Object.assign({}, value);
}
return value;
}
}
/**
* Resolve the current editor snapshot builder when available.
*
* @param {Object|null} editorState Active editor state.
* @returns {Object|null} Stable editor snapshot.
*/
function buildEditorSnapshot(editorState) {
if (typeof PublicApi._buildEditorSnapshot === 'function') {
return PublicApi._buildEditorSnapshot(editorState);
}
return null;
}
/**
* Invoke one event handler safely.
*
* @param {Function} handler Registered listener.
* @param {Object} payload Event payload.
* @returns {void}
*/
function callHandler(handler, payload) {
try {
handler(payload);
} catch (error) {
console.error('FrontEdit: PublicApi event handler failed', error);
}
}
/**
* Emit one public runtime event.
*
* @param {string} eventName Event name.
* @param {Object} payload Event payload.
* @returns {void}
*/
function emitEvent(eventName, payload) {
const listeners = eventListeners.get(eventName);
if (!listeners || !listeners.size) {
return;
}
const snapshot = clonePlainData(payload);
listeners.forEach(handler => callHandler(handler, snapshot));
}
/**
* Register one runtime event listener.
*
* @param {string} eventName Event name.
* @param {Function} handler Event handler.
* @returns {Function} Unsubscribe callback.
*/
function on(eventName, handler) {
const normalizedEventName = String(eventName || '').trim();
if (!normalizedEventName || typeof handler !== 'function') {
return function noop() {};
}
if (!eventListeners.has(normalizedEventName)) {
eventListeners.set(normalizedEventName, new Set());
}
eventListeners.get(normalizedEventName).add(handler);
return function unsubscribe() {
off(normalizedEventName, handler);
};
}
/**
* Remove one runtime event listener.
*
* @param {string} eventName Event name.
* @param {Function} handler Event handler.
* @returns {void}
*/
function off(eventName, handler) {
const normalizedEventName = String(eventName || '').trim();
if (!normalizedEventName || typeof handler !== 'function') {
return;
}
const listeners = eventListeners.get(normalizedEventName);
if (!listeners) {
return;
}
listeners.delete(handler);
if (!listeners.size) {
eventListeners.delete(normalizedEventName);
}
}
/**
* Emit one editor lifecycle event using the current snapshot builder.
*
* @param {string} eventName Event name.
* @param {Object|null} editorState Editor session state.
* @param {Object} metadata Additional event metadata.
* @returns {void}
*/
function emitEditorEvent(eventName, editorState, metadata = {}) {
const editor = buildEditorSnapshot(editorState);
if (!editor) {
return;
}
emitEvent(eventName, Object.assign({}, metadata, { editor }));
}
/**
* Emit one save lifecycle event using the current snapshot builder.
*
* @param {string} eventName Event name.
* @param {Object|null} editorState Editor session state.
* @param {Object} metadata Additional event metadata.
* @returns {void}
*/
function emitSaveEvent(eventName, editorState, metadata = {}) {
const editor = buildEditorSnapshot(editorState);
if (!editor) {
return;
}
emitEvent(eventName, Object.assign({}, metadata, { editor }));
}
PublicApi.on = on;
PublicApi.off = off;
SFE.PublicApi = PublicApi;
SFE.PublicApiBridge = {
clonePlainData,
emitEvent,
emitEditorEvent,
emitSaveEvent,
stagedBlockStates,
};
})();
Warning: Cannot modify header information - headers already sent by (output started at D:\website\kimsanggon.vn\wp-content\themes\astra\inc\addons\breadcrumbs\class-astra-breadcrumb-trail.php:1) in D:\website\kimsanggon.vn\wp-content\plugins\surerank\inc\frontend\feed.php on line 83
Warning: Cannot modify header information - headers already sent by (output started at D:\website\kimsanggon.vn\wp-content\themes\astra\inc\addons\breadcrumbs\class-astra-breadcrumb-trail.php:1) in D:\website\kimsanggon.vn\wp-includes\feed-rss2.php on line 8
Read more at Kim Sang Gon - Photographer
]]>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Read more at Kim Sang Gon - Photographer
]]>Read more at Kim Sang Gon - Photographer
]]>Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus
Read more at Kim Sang Gon - Photographer
]]>Neque libero viverra lorem, ac tristique orci augue eu metus. Aenean elementum nisi vitae justo adipiscing gravida sit amet et risus. Suspendisse dapibus elementum quam, vel semper mi tempus ac.
Read more at Kim Sang Gon - Photographer
]]>Nam at nisi risus. Proin pretium, dolor vel venenatis suscipit, dui nunc tincidunt lectus, ac placerat felis dui in justo. Aliquam orci velit, facilisis in facilisis non, scelerisque in massa. Integer scelerisque odio nec eros sodales laoreet. Sed sed odio tellus. In tristique felis ac facilisis tempor. Nunc non enim in dolor congue pulvinar sed sed nisi. Mauris viverra convallis feugiat. Nam at mauris laoreet, dictum leo at, tristique mi. Aenean pellentesque justo vel diam elementum iaculis. Nam lobortis cursus vestibulum. Nulla feugiat mauris felis, auctor pretium dui euismod in.
Vestibulum et enim vitae lectus malesuada aliquam vitae non mi. Suspendisse tellus eros, ultricies nec lorem feugiat, pharetra auctor dui. Suspendisse placerat neque leo, nec commodo eros ultrices vel. Fusce elit libero, aliquam quis libero non, consectetur accumsan est. Proin tempus mauris id cursus posuere. Sed et rutrum felis, vel aliquet ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque neque tellus, condimentum non eros non, consectetur auctor lacus. Curabitur malesuada odio eget elit egestas porttitor.
Read more at Kim Sang Gon - Photographer
]]>Nam at nisi risus. Proin pretium, dolor vel venenatis suscipit, dui nunc tincidunt lectus, ac placerat felis dui in justo. Aliquam orci velit, facilisis in facilisis non, scelerisque in massa. Integer scelerisque odio nec eros sodales laoreet. Sed sed odio tellus. In tristique felis ac facilisis tempor. Nunc non enim in dolor congue pulvinar sed sed nisi. Mauris viverra convallis feugiat. Nam at mauris laoreet, dictum leo at, tristique mi. Aenean pellentesque justo vel diam elementum iaculis. Nam lobortis cursus vestibulum. Nulla feugiat mauris felis, auctor pretium dui euismod in.
Vestibulum et enim vitae lectus malesuada aliquam vitae non mi. Suspendisse tellus eros, ultricies nec lorem feugiat, pharetra auctor dui. Suspendisse placerat neque leo, nec commodo eros ultrices vel. Fusce elit libero, aliquam quis libero non, consectetur accumsan est. Proin tempus mauris id cursus posuere. Sed et rutrum felis, vel aliquet ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque neque tellus, condimentum non eros non, consectetur auctor lacus. Curabitur malesuada odio eget elit egestas porttitor.
Read more at Kim Sang Gon - Photographer
]]>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
Read more at Kim Sang Gon - Photographer
]]>Ut eu imperdiet arcu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras interdum porttitor quam at tempus. Sed quis rutrum lorem.
Ut eu imperdiet arcu. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras interdum porttitor quam at tempus. Sed quis rutrum lorem. Mauris vitae dui ut neque pulvinar mattis. Mauris sed tincidunt nisi. Ut porta quis lorem at consectetur. Mauris elementum vulputate metus, ut cursus felis dictum non. Sed in nulla metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus at nunc eget ligula tristique scelerisque in et urna.
Pellentesque imperdiet, nunc id scelerisque scelerisque, nisi arcu hendrerit leo, vel volutpat arcu mi in risus. Vestibulum iaculis molestie venenatis. Donec faucibus elit quis enim porta, id fringilla lectus feugiat. Sed et diam fermentum, elementum elit et, placerat nisi. Sed vehicula nibh sed tellus elementum condimentum. Fusce laoreet lorem ipsum, vitae aliquam arcu gravida gravida. Nunc eget tristique sem, eu ornare ligula.
Pellentesque facilisis lobortis volutpat. Etiam non suscipit velit, vitae ornare eros. In hac habitasse platea dictumst. Phasellus eu auctor metus, et porta justo. Vivamus suscipit fermentum ante, eu dignissim orci. Proin faucibus quis orci a dictum. Nulla ac nibh neque. Curabitur eu justo massa.
Read more at Kim Sang Gon - Photographer
]]>