From 3a99b314ff6fcf8c769f321b64993887532443e2 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Wed, 14 Jan 2015 09:33:45 -0700 Subject: [PATCH 01/61] Fixing 'log' examples --- src/lib/F2.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index df3efa7e..0baec7c8 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -249,13 +249,13 @@ F2 = (function() { * @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). * @param {object} [obj2]* An object to be logged * @example - * Pass any value (string, int, array, object, bool). - * F2.log('foo'); - * F2.log([1, 2, 3]); + * // Pass any value (string, int, array, object, bool). + * F2.log('foo'); + * F2.log([1, 2, 3]); * @example - * Use a console method name as the first argument. - * F2.log('error', err); - * F2.log('info', 'The session ID is ' + sessionId); + * // Use a console method name as the first argument. + * F2.log('error', err); + * F2.log('info', 'The session ID is ' + sessionId); */ log: function() { if (!window.console) { From de3bf6f5be982709545fde940dbbf212957cb414 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 15 Jan 2015 08:37:55 -0700 Subject: [PATCH 02/61] Fixing 'on' param documentation --- src/lib/app_handlers.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index 6c3013e1..d689cf37 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -253,14 +253,16 @@ F2.extend('AppHandlers', (function() { * removal purposes. At this time it does not affect when an event is fired. * Complete list of event keys available in * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @param {Function} listener A function that will be triggered when a - * specific event occurs. For detailed argument definition refer to + * @param {Function|Element} listener A function that will be triggered + * when a specific event occurs. Optionally, a specific DOM element to + * which the app will be appended can be passed. For detailed argument + * definition refer to * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. * @example * var token = F2.AppHandlers.getToken(); * F2.AppHandlers.on( * token, - * 'appRenderBefore' + * 'appRenderBefore', * function() { * F2.log('before app rendered!'); * } From 15fea278c5b676c2d1ff9746c90205f86f547930 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 15 Jan 2015 08:38:11 -0700 Subject: [PATCH 03/61] Adding compiled files --- dist/f2.debug.js | 975 +++++++++++++++++-------------------- dist/f2.min.js | 6 +- dist/f2.min.js.map | 2 +- dist/f2.no-third-party.js | 977 +++++++++++++++++--------------------- 4 files changed, 883 insertions(+), 1077 deletions(-) diff --git a/dist/f2.debug.js b/dist/f2.debug.js index 4bfdd728..a68f85ea 100644 --- a/dist/f2.debug.js +++ b/dist/f2.debug.js @@ -1,5 +1,5 @@ /*! - * F2 v1.4.0 12-29-2014 + * F2 v1.4.0 01-15-2015 * Copyright (c) 2014 Markit On Demand, Inc. http://www.openf2.org * * "F2" is licensed under the Apache License, Version 2.0 (the "License"); @@ -14051,13 +14051,13 @@ F2 = (function() { * @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). * @param {object} [obj2]* An object to be logged * @example - * Pass any value (string, int, array, object, bool). - * F2.log('foo'); - * F2.log([1, 2, 3]); + * // Pass any value (string, int, array, object, bool). + * F2.log('foo'); + * F2.log([1, 2, 3]); * @example - * Use a console method name as the first argument. - * F2.log('error', err); - * F2.log('info', 'The session ID is ' + sessionId); + * // Use a console method name as the first argument. + * F2.log('error', err); + * F2.log('info', 'The session ID is ' + sessionId); */ log: function() { if (!window.console) { @@ -14126,7 +14126,7 @@ F2 = (function() { *

* * ### Order of Execution - * + * * **App Rendering** * * 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. @@ -14143,392 +14143,299 @@ F2 = (function() { * 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. * 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. * 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - * + * * **Error Handling** * 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - * + * * @class F2.AppHandlers */ F2.extend('AppHandlers', (function() { - // the hidden token that we will check against every time someone tries to add, remove, fire handler - var _ct = F2.guid(); - var _f2t = F2.guid(); - + // The hidden token that we will check against every time someone tries to add, remove, fire handler + var _containerToken = F2.guid(); + var _f2Token = F2.guid(); + var _handlerCollection = { appCreateRoot: [], - appRenderBefore: [], + appRenderBefore: [], appDestroyBefore: [], appRenderAfter: [], appDestroyAfter: [], appRender: [], appDestroy: [], - appScriptLoadFailed: [] + appScriptLoadFailed: [] }; - + var _defaultMethods = { - appRender: function(appConfig, appHtml) - { - var $root = null; - - // if no app root is defined use the app's outer most node - if(!F2.isNativeDOMNode(appConfig.root)) - { + appRender: function(appConfig, appHtml) { + // If no app root is defined use the app's outer most node + if (F2.isNativeDOMNode(appConfig.root)) { + jQuery(appConfig.root).append(appHtml); + } else { appConfig.root = jQuery(appHtml).get(0); - // get a handle on the root in jQuery - $root = jQuery(appConfig.root); } - else - { - // get a handle on the root in jQuery - $root = jQuery(appConfig.root); - - // append the app html to the root - $root.append(appHtml); - } - - // append the root to the body by default. - jQuery('body').append($root); + + document.body.appendChild(appConfig.root); }, - appDestroy: function(appInstance) - { - // call the apps destroy method, if it has one - if(appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') - { - appInstance.app.destroy(); - } - // warn the Container and App Developer that even though they have a destroy method it hasn't been - else if(appInstance && appInstance.app && appInstance.app.destroy) - { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + appDestroy: function(appInstance) { + if (appInstance.app && appInstance.app.destroy) { + if (typeof appInstance.app.destroy === 'function') { + appInstance.app.destroy(); + } else { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } } - - // fade out and remove the root + jQuery(appInstance.config.root).fadeOut(500, function() { jQuery(this).remove(); }); } }; - - var _createHandler = function(token, sNamespace, func_or_element, bDomNodeAppropriate) - { - // will throw an exception and stop execution if the token is invalid - _validateToken(token); - - // create handler structure. Not all arguments properties will be populated/used. + + function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { + _validateToken(token); + var handler = { - func: (typeof(func_or_element)) ? func_or_element : null, - namespace: sNamespace, - domNode: (F2.isNativeDOMNode(func_or_element)) ? func_or_element : null + domNode: null, + func: null, + namespace: namespace }; - - if(!handler.func && !handler.domNode) - { - throw ('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); + + if (F2.isNativeDOMNode(fnOrNode)) { + handler.domNode = fnOrNode; + } else if (typeof fnOrNode === 'function') { + handler.func = fnOrNode; } - if(handler.domNode && !bDomNodeAppropriate) - { - throw ('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + if (!handler.func && !handler.domNode) { + throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); } - + + if (handler.domNode && !domNodeAppropriate) { + throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + } + return handler; - }; - - var _validateToken = function(sToken) - { - // check token against F2 and container - if(_ct != sToken && _f2t != sToken) { throw ('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); } - }; - - var _removeHandler = function(sToken, eventKey, sNamespace) - { - // will throw an exception and stop execution if the token is invalid - _validateToken(sToken); - - if(!sNamespace && !eventKey) - { - return; + } + + // Token must match F2 or container + function _validateToken(token) { + if (_containerToken !== token && _f2Token !== token) { + throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); } - // remove by event key - else if(!sNamespace && eventKey) - { - _handlerCollection[eventKey] = []; + } + + // Token must match F2 + function _validateF2Token(token) { + if (token != _f2Token) { + throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); } - // remove by namespace only - else if(sNamespace && !eventKey) - { - sNamespace = sNamespace.toLowerCase(); - - for(var currentEventKey in _handlerCollection) - { - var eventCollection = _handlerCollection[currentEventKey]; - var newEvents = []; - - for(var i = 0, ec = eventCollection.length; i < ec; i++) - { - var currentEventHandler = eventCollection[i]; - if(currentEventHandler) - { - if(!currentEventHandler.namespace || currentEventHandler.namespace.toLowerCase() != sNamespace) - { - newEvents.push(currentEventHandler); - } - } - } + } + + function _filterHandlersByNamespace(handlers, namespace) { + var newHandlers = handlers.slice(); - eventCollection = newEvents; - } + for (var i = newHandlers.length; i >= 0; i--) { + if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { + newHandlers.splice(i, 1); + } } - else if(sNamespace && _handlerCollection[eventKey]) - { - sNamespace = sNamespace.toLowerCase(); - - var newHandlerCollection = []; - - for(var iCounter = 0, hc = _handlerCollection[eventKey].length; iCounter < hc; iCounter++) - { - var currentHandler = _handlerCollection[eventKey][iCounter]; - if(currentHandler) - { - if(!currentHandler.namespace || currentHandler.namespace.toLowerCase() != sNamespace) - { - newHandlerCollection.push(currentHandler); - } + + return newHandlers; + } + + function _removeHandler(token, eventKey, namespace) { + _validateToken(token); + + if (namespace) { + namespace = namespace.toLowerCase(); + + if (eventKey && eventKey in _handlerCollection) { + _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); + } else { + for (var key in _handlerCollection) { + _removeHandler(token, key, namespace); } } - - _handlerCollection[eventKey] = newHandlerCollection; + } else if (eventKey) { + _handlerCollection[eventKey] = []; } - }; - + } + + function _parseEventKey(eventKey) { + var namespace = ''; + + if (eventKey.indexOf('.') !== -1) { + var eventParts = eventKey.split('.'); + eventKey = eventParts[0]; + namespace = eventParts[1]; + } + + return { + key: eventKey, + namespace: namespace + }; + } + return { /** - * Allows Container Developer to retrieve a unique token which must be passed to - * all `on` and `off` methods. This function will self destruct and can only be called - * one time. Container Developers must store the return value inside of a closure. - * @method getToken - **/ - getToken: function() - { - // delete this method for security that way only the container has access to the token 1 time. - // kind of Ethan Hunt-ish, this message will self destruct immediately. + * Allows Container Developer to retrieve a unique token which must be + * passed to all `on` and `off` methods. This function will self destruct + * and can only be called one time. Container Developers must store the + * return value inside of a closure. + * @method getToken + */ + getToken: function() { + /** + * Delete this method for security that way only the container has + * access to the token 1 time. Kind of Ethan Hunt-ish, this message will + * self-destruct immediately. + */ delete this.getToken; - // return the token, which we validate against. - return _ct; + return _containerToken; }, /** - * Allows F2 to get a token internally. Token is required to call {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. - * This function will self destruct to eliminate other sources from using the {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} - * and additional internal methods. - * @method __f2GetToken - * @private - **/ - __f2GetToken: function() - { - // delete this method for security that way only the F2 internally has access to the token 1 time. - // kind of Ethan Hunt-ish, this message will self destruct immediately. + * Allows F2 to get a token internally. Token is required to call + * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This + * function will self destruct to eliminate other sources from using the + * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and + * additional internal methods. + * @method __f2GetToken + * @private + */ + __f2GetToken: function() { + /** + * Delete this method for security that way only the container has + * access to the token 1 time. Kind of Ethan Hunt-ish, this message will + * self-destruct immediately. + */ delete this.__f2GetToken; - // return the token, which we validate against. - return _f2t; + return _f2Token; }, /** - * Allows F2 to trigger specific events internally. - * @method __trigger - * @private - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. - * @param {String} eventKey The event to fire. The complete list of event keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - **/ - __trigger: function(token, eventKey) // additional arguments will likely be passed - { - // will throw an exception and stop execution if the token is invalid - if(token != _f2t) - { - throw ('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); + * Allows F2 to trigger specific events internally. + * @method __trigger + * @private + * @chainable + * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. + * @param {String} eventKey The event to fire. The complete list of event + * keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + */ + __trigger: function(token, eventKey) { + _validateF2Token(token); + + if (!_handlerCollection[eventKey]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); } - - if(_handlerCollection && _handlerCollection[eventKey]) - { - // create a collection of arguments that are safe to pass to the callback. - var passableArgs = []; - - // populate that collection with all arguments except token and eventKey - for(var i = 2, j = arguments.length; i < j; i++) - { - passableArgs.push(arguments[i]); - } - - if(_handlerCollection[eventKey].length === 0 && _defaultMethods[eventKey]) - { - _defaultMethods[eventKey].apply(F2, passableArgs); - return this; - } - else if(_handlerCollection[eventKey].length === 0 && !_handlerCollection[eventKey]) - { - return this; - } - - // fire all event listeners in the order that they were added. - for(var iCounter = 0, hcl = _handlerCollection[eventKey].length; iCounter < hcl; iCounter++) - { - var handler = _handlerCollection[eventKey][iCounter]; - - // appRender where root is already defined - if (handler.domNode && arguments[2] && arguments[2].root && arguments[3]) - { - var $appRoot = jQuery(arguments[2].root).append(arguments[3]); - jQuery(handler.domNode).append($appRoot); - } - else if (handler.domNode && arguments[2] && !arguments[2].root && arguments[3]) - { - // set the root to the actual HTML of the app - arguments[2].root = jQuery(arguments[3]).get(0); - // appends the root to the dom node specified - jQuery(handler.domNode).append(arguments[2].root); - } - else - { - handler.func.apply(F2, passableArgs); + + var callbackArgs = Array.prototype.slice.call(arguments, 2); + + if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { + _defaultMethods[eventKey].apply(F2, callbackArgs); + } else { + for (var i = 0; i < _handlerCollection[eventKey].length; i++) { + var handler = _handlerCollection[eventKey][i]; + + // Check for appRender + if (handler.domNode && arguments.length >= 4) { + var appConfig = arguments[2]; + var appHtml = arguments[3]; + + if (appConfig.root) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } + + jQuery(handler.domNode).append(appConfig.root); + } else { + handler.func.apply(F2, callbackArgs); } } } - else - { - throw ('Invalid EventKey passed. Check your inputs and try again.'); - } - + return this; }, /** - * Allows Container Developer to easily tell all apps to render in a specific location. Only valid for eventType `appRender`. - * @method on - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine which event to attach the listener to. The namespace is useful for removal - * purposes. At this time it does not affect when an event is fired. Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @params {HTMLElement} element Specific DOM element to which app gets appended. - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * 'appRender', - * document.getElementById('my_app') - * ); - * - * Or: - * @example - * F2.AppHandlers.on( - * _token, - * 'appRender.myNamespace', - * document.getElementById('my_app') - * ); - **/ - /** - * Allows Container Developer to add listener method that will be triggered when a specific event occurs. - * @method on - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine which event to attach the listener to. The namespace is useful for removal - * purposes. At this time it does not affect when an event is fired. Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @params {Function} listener A function that will be triggered when a specific event occurs. For detailed argument definition refer to {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * 'appRenderBefore' - * function() { F2.log('before app rendered!'); } - * ); - * - * Or: - * @example - * F2.AppHandlers.on( - * _token, - * 'appRenderBefore.myNamespace', - * function() { F2.log('before app rendered!'); } - * ); - **/ - on: function(token, eventKey, func_or_element) - { - var sNamespace = null; - - if(!eventKey) - { - throw ('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - // we need to check the key for a namespace - if(eventKey.indexOf('.') > -1) - { - var arData = eventKey.split('.'); - eventKey = arData[0]; - sNamespace = arData[1]; - } - - if(_handlerCollection && _handlerCollection[eventKey]) - { - _handlerCollection[eventKey].push( - _createHandler( - token, - sNamespace, - func_or_element, - (eventKey == 'appRender') - ) - ); + * Allows Container Developer to add listener method that will be triggered + * when a specific event occurs. + * @method on + * @chainable + * @param {String} token The token received from + * {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + * @param {String} eventKey{.namespace} The event key used to determine + * which event to attach the listener to. The namespace is useful for + * removal purposes. At this time it does not affect when an event is fired. + * Complete list of event keys available in + * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + * @param {Function|Element} listener A function that will be triggered + * when a specific event occurs. Optionally, a specific DOM element to + * which the app will be appended can be passed. For detailed argument + * definition refer to + * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * 'appRenderBefore', + * function() { + * F2.log('before app rendered!'); + * } + * ); + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * 'appRenderBefore.myNamespace', + * function() { + * F2.log('before app rendered!'); + * } + * ); + */ + on: function(token, eventKey, listener) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); } - else - { - throw ('Invalid EventKey passed. Check your inputs and try again.'); + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid eventKey passed. Check your inputs and try again.'); } - + + var isAppRender = (event.key === 'appRender'); + var handler = _createHandler(token, event.namespace, listener, isAppRender); + _handlerCollection[event.key].push(handler); + return this; }, /** - * Allows Container Developer to remove listener methods for specific events - * @method off - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine which event to attach the listener to. If no namespace is provided all - * listeners for the specified event type will be removed. - * Complete list available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.off(_token,'appRenderBefore'); - * - **/ - off: function(token, eventKey) - { - var sNamespace = null; - - if(!eventKey) - { - throw ('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - // we need to check the key for a namespace - if(eventKey.indexOf('.') > -1) - { - var arData = eventKey.split('.'); - eventKey = arData[0]; - sNamespace = arData[1]; - } - - if(_handlerCollection && _handlerCollection[eventKey]) - { - _removeHandler( - token, - eventKey, - sNamespace - ); + * Allows Container Developer to remove listener methods for specific events + * @method off + * @chainable + * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + * @param {String} eventKey{.namespace} The event key used to determine + * which event to attach the listener to. If no namespace is provided all + * listeners for the specified event type will be removed. Complete list + * available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.off(token, 'appRenderBefore'); + */ + off: function(token, eventKey) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); } - else - { - throw ('Invalid EventKey passed. Check your inputs and try again.'); + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); } - + + _removeHandler(token, event.key, event.namespace); + return this; } }; @@ -14536,209 +14443,205 @@ F2.extend('AppHandlers', (function() { F2.extend('Constants', { /** - * A convenient collection of all available appHandler events. - * @class F2.Constants.AppHandlers - **/ - AppHandlers: (function() - { - return { - /** - * Equivalent to `appCreateRoot`. Identifies the create root method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_CREATE_ROOT - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_CREATE_ROOT, - * function(appConfig) - * { - * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. - * // the app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER - * appConfig.root = jQuery('
').get(0); - * } - * ); - */ - APP_CREATE_ROOT: 'appCreateRoot', - /** - * Equivalent to `appRenderBefore`. Identifies the before app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_BEFORE - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_RENDER_BEFORE, - * function(appConfig) - * { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_BEFORE: 'appRenderBefore', - /** - * Equivalent to `appRender`. Identifies the app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, [appHtml](../../app-development.html#app-design) ) - * @property APP_RENDER - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_RENDER, - * function(appConfig, appHtml) - * { - * var $root = null; - * - * // if no app root is defined use the app's outer most node - * if(!F2.isNativeDOMNode(appConfig.root)) - * { - * appConfig.root = jQuery(appHtml).get(0); - * // get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * } - * else - * { - * // get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * - * // append the app html to the root - * $root.append(appHtml); - * } - * - * // append the root to the body by default. - * jQuery('body').append($root); - * } - * ); - */ - APP_RENDER: 'appRender', - /** - * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_AFTER - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_RENDER_AFTER, - * function(appConfig) - * { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_AFTER: 'appRenderAfter', - /** - * Equivalent to `appDestroyBefore`. Identifies the before app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY_BEFORE - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - * function(appInstance) - * { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_BEFORE: 'appDestroyBefore', - /** - * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_DESTROY, - * function(appInstance) - * { - * // call the apps destroy method, if it has one - * if(appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') - * { - * appInstance.app.destroy(); - * } - * else if(appInstance && appInstance.app && appInstance.app.destroy) - * { - * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - * } - * - * // fade out and remove the root - * jQuery(appInstance.config.root).fadeOut(500, function() { - * jQuery(this).remove(); - * }); - * } - * ); - */ - APP_DESTROY: 'appDestroy', - /** - * Equivalent to `appDestroyAfter`. Identifies the after app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY_AFTER - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_DESTROY_AFTER, - * function(appInstance) - * { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_AFTER: 'appDestroyAfter', - /** - * Equivalent to `appScriptLoadFailed`. Identifies the app script load failed method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo ) - * @property APP_SCRIPT_LOAD_FAILED - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - * function(appConfig, scriptInfo) - * { - * F2.log(appConfig.appId); - * } - * ); - */ - APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' - }; - })() + * A convenient collection of all available appHandler events. + * @class F2.Constants.AppHandlers + **/ + AppHandlers: { + /** + * Equivalent to `appCreateRoot`. Identifies the create root method for use + * in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + * @property APP_CREATE_ROOT + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_CREATE_ROOT, + * function(appConfig) { + * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. + * // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER + * appConfig.root = jQuery('
').get(0); + * } + * ); + */ + APP_CREATE_ROOT: 'appCreateRoot', + /** + * Equivalent to `appRenderBefore`. Identifies the before app render method + * for use in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + * @property APP_RENDER_BEFORE + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_RENDER_BEFORE, + * function(appConfig) { + * F2.log(appConfig); + * } + * ); + */ + APP_RENDER_BEFORE: 'appRenderBefore', + /** + * Equivalent to `appRender`. Identifies the app render method for use in + * AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, + * [appHtml](../../app-development.html#app-design)). + * @property APP_RENDER + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_RENDER, + * function(appConfig, appHtml) { + * var $root; + * + * // If no app root is defined use the app's outer most node + * if (!F2.isNativeDOMNode(appConfig.root)) { + * appConfig.root = jQuery(appHtml).get(0); + * // Get a handle on the root in jQuery + * $root = jQuery(appConfig.root); + * } else { + * // Get a handle on the root in jQuery + * $root = jQuery(appConfig.root); + * // Append the app html to the root + * $root.append(appHtml); + * } + * + * // Append the root to the body by default. + * jQuery('body').append($root); + * } + * ); + */ + APP_RENDER: 'appRender', + /** + * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. + * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the + * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) + * @property APP_RENDER_AFTER + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_RENDER_AFTER, + * function(appConfig) { + * F2.log(appConfig); + * } + * ); + */ + APP_RENDER_AFTER: 'appRenderAfter', + /** + * Equivalent to `appDestroyBefore`. Identifies the before app destroy + * method for use in AppHandlers.(on|off). When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * (appInstance). + * @property APP_DESTROY_BEFORE + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + * function(appInstance) { + * F2.log(appInstance); + * } + * ); + */ + APP_DESTROY_BEFORE: 'appDestroyBefore', + /** + * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. + * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the + * following argument(s): ( appInstance ) + * @property APP_DESTROY + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_DESTROY, + * function(appInstance) { + * // Call the apps destroy method, if it has one + * if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { + * appInstance.app.destroy(); + * } else if (appInstance && appInstance.app && appInstance.app.destroy) { + * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + * } + * + * // Fade out and remove the root + * jQuery(appInstance.config.root).fadeOut(500, function() { + * jQuery(this).remove(); + * }); + * } + * ); + */ + APP_DESTROY: 'appDestroy', + /** + * Equivalent to `appDestroyAfter`. Identifies the after app destroy method + * for use in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * (appInstance) + * @property APP_DESTROY_AFTER + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_DESTROY_AFTER, + * function(appInstance) { + * F2.log(appInstance); + * } + * ); + */ + APP_DESTROY_AFTER: 'appDestroyAfter', + /** + * Equivalent to `appScriptLoadFailed`. Identifies the app script load + * failed method for use in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + * the listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) + * @property APP_SCRIPT_LOAD_FAILED + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + * function(appConfig, scriptInfo) { + * F2.log(appConfig.appId); + * } + * ); + */ + APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + } }); + /** * Class stubs for documentation purposes * @main F2 diff --git a/dist/f2.min.js b/dist/f2.min.js index 815a4190..87ed3440 100644 --- a/dist/f2.min.js +++ b/dist/f2.min.js @@ -1,7 +1,7 @@ -/*! F2 - v1.4.0 - 12-29-2014 - See below for copyright and license */ +/*! F2 - v1.4.0 - 01-15-2015 - See below for copyright and license */ /*! - * F2 v1.4.0 12-29-2014 + * F2 v1.4.0 01-15-2015 * Copyright (c) 2014 Markit On Demand, Inc. http://www.openf2.org * * "F2" is licensed under the Apache License, Version 2.0 (the "License"); @@ -57,5 +57,5 @@ i&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||eb.removeEvent(a, * This file creates $ and jQuery variables within the F2 closure scope */ var $,jQuery=$=window.jQuery.noConflict(!0);+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('"].join("")};return{hideMask:function(a){F2.UI.hideMask(b.instanceId,a)},Modals:function(){var a=function(a){return e("Alert",a)},c=function(a){return e("Confirm",a,!0)};return{alert:function(c,d){return F2.isInit()?void(F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.alert",[].slice.call(arguments)):jQuery(a(c)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-primary").on("click",function(){jQuery(a).modal("hide").remove(),(d||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.alert()")},confirm:function(a,d,e){return F2.isInit()?void(F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.confirm",[].slice.call(arguments)):jQuery(c(a)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-ok").on("click",function(){jQuery(a).modal("hide").remove(),(d||jQuery.noop)()}),jQuery(a).find(".btn-cancel").on("click",function(){jQuery(a).modal("hide").remove(),(e||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.confirm()")}}}(),setTitle:function(a){F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"setTitle",[a]):jQuery(b.root).find("."+F2.Constants.Css.APP_TITLE).text(a)},showMask:function(a,c){F2.UI.showMask(b.instanceId,a,c)},updateHeight:d,Views:function(){var a=new EventEmitter2,e=/change/i;a.setMaxListeners(0);var f=function(a){return e.test(a)?!0:(F2.log('"'+a+'" is not a valid F2.UI.Views event name'),!1)};return{change:function(e){"function"==typeof e?this.on("change",e):"string"==typeof e&&(b.isSecure&&!F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Views.change",[].slice.call(arguments)):F2.inArray(e,b.views)&&(jQuery("."+F2.Constants.Css.APP_VIEW,c).addClass("hide").filter('[data-f2-view="'+e+'"]',c).removeClass("hide"),d(),a.emit("change",e)))},off:function(b,c){f(b)&&a.off(b,c)},on:function(b,c){f(b)&&a.on(b,c)}}}()}};return b.hideMask=function(a,b){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.hideMask()");if(F2.Rpc.isRemote(a)&&!jQuery(b).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.hideMask",[a,jQuery(b).selector]);else{var c=jQuery(b);c.find("> ."+F2.Constants.Css.MASK).remove(),c.removeClass(F2.Constants.Css.MASK_CONTAINER),c.data(F2.Constants.Css.MASK_CONTAINER)&&c.css({position:"static"})}},b.init=function(b){a=b,a.UI=jQuery.extend(!0,{},F2.ContainerConfig.UI,a.UI||{})},b.showMask=function(b,c,d){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.showMask()");if(F2.Rpc.isRemote(b)&&jQuery(c).is("."+F2.Constants.Css.APP))F2.Rpc.call(b,F2.Constants.Sockets.RPC,"F2.UI.showMask",[b,jQuery(c).selector,d]);else{d&&!a.UI.Mask.loadingIcon&&F2.log("Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();");var e=jQuery(c).addClass(F2.Constants.Css.MASK_CONTAINER),f=jQuery("
").height("100%").width("100%").addClass(F2.Constants.Css.MASK);a.UI.Mask.useClasses||f.css({"background-color":a.UI.Mask.backgroundColor,"background-image":a.UI.Mask.loadingIcon?"url("+a.UI.Mask.loadingIcon+")":"","background-position":"50% 50%","background-repeat":"no-repeat",display:"block",left:0,"min-height":30,padding:0,position:"absolute",top:0,"z-index":a.UI.Mask.zIndex,filter:"alpha(opacity="+100*a.UI.Mask.opacity+")",opacity:a.UI.Mask.opacity}),"static"===e.css("position")&&(e.css({position:"relative"}),e.data(F2.Constants.Css.MASK_CONTAINER,!0)),e.append(f)}},b}()),F2.extend("",function(){var _apps={},_config=!1,_bUsesAppHandlers=!1,_sAppHandlerToken=F2.AppHandlers.__f2GetToken(),_loadedScripts={},_loadedStyles={},_loadingScripts={},_afterAppRender=function(a,b){var c=_config.afterAppRender||function(a,b){return jQuery(b).appendTo("body")},d=c(a,b);return _config.afterAppRender&&!d?void F2.log("F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app"):(jQuery(d).addClass(F2.Constants.Css.APP),d.get(0))},_appRender=function(a,b){return b=_outerHtml(jQuery(b).addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId)),_config.appRender&&(b=_config.appRender(a,b)),_outerHtml(b)},_beforeAppRender=function(a){var b=_config.beforeAppRender||jQuery.noop;return b(a)},_appScriptLoadFailed=function(a,b){var c=_config.appScriptLoadFailed||jQuery.noop;return c(a,b)},_createAppConfig=function(a){return a=jQuery.extend(!0,{},a),a.instanceId=a.instanceId||F2.guid(),a.views=a.views||[],F2.inArray(F2.Constants.Views.HOME,a.views)||a.views.push(F2.Constants.Views.HOME),F2.ContainerConfig.locale&&(a.containerLocale=F2.ContainerConfig.locale),a},_getAppConfigFromElement=function(a){var b;if(a){var c=a.getAttribute("data-f2-appid"),d=a.getAttribute("data-f2-manifesturl");if(c&&d){b={appId:c,enableBatchRequests:a.hasAttribute("data-f2-enablebatchrequests"),isSecure:a.hasAttribute("data-f2-issecure"),manifestUrl:d,root:a};var e=a.getAttribute("data-f2-context");if(e)try{b.context=F2.parse(e)}catch(f){console.warn('F2: "data-f2-context" of node is not valid JSON','"'+f+'"')}}}return b},_hasNonTextChildNodes=function(a){var b=!1;if(a.hasChildNodes())for(var c=0,d=a.childNodes.length;d>c;c++)if(1===a.childNodes[c].nodeType){b=!0;break}return b},_hydrateContainerConfig=function(a){a.scriptErrorTimeout||(a.scriptErrorTimeout=F2.ContainerConfig.scriptErrorTimeout),a.debugMode!==!0&&(a.debugMode=F2.ContainerConfig.debugMode),a.locale&&"string"==typeof a.locale&&(F2.ContainerConfig.locale=a.locale)},_initAppEvents=function(a){jQuery(a.root).on("click","."+F2.Constants.Css.APP_VIEW_TRIGGER+"["+F2.Constants.Views.DATA_ATTRIBUTE+"]",function(b){b.preventDefault();var c=jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase();c==F2.Constants.Views.REMOVE?F2.removeApp(a.instanceId):a.ui.Views.change(c)})},_initContainerEvents=function(){var a,b=function(){F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE)};jQuery(window).on("resize",function(){clearTimeout(a),a=setTimeout(b,100)}),F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(a){a.locale&&"string"==typeof a.locale&&(F2.ContainerConfig.locale=a.locale)})},_isPlaceholderElement=function(a){return F2.isNativeDOMNode(a)&&!_hasNonTextChildNodes(a)&&!!a.getAttribute("data-f2-appid")&&!!a.getAttribute("data-f2-manifesturl")},_isInit=function(){return!!_config},_createAppInstance=function(a,b){a.ui=new F2.UI(a),void 0!==F2.Apps[a.appId]&&("function"==typeof F2.Apps[a.appId]?setTimeout(function(){_apps[a.instanceId].app=new F2.Apps[a.appId](a,b,a.root),void 0!==_apps[a.instanceId].app.init&&_apps[a.instanceId].app.init()},0):F2.log("app initialization class is defined but not a function. ("+a.appId+")"))},_loadApps=function(appConfigs,appManifest){if(appConfigs=[].concat(appConfigs),1==appConfigs.length&&appConfigs[0].isSecure&&!_config.isSecureAppPage)return void _loadSecureApp(appConfigs[0],appManifest);if(appConfigs.length!=appManifest.apps.length)return void F2.log("The number of apps defined in the AppManifest do not match the number requested.",appManifest);var _loadStyles=function(a,b){if(_config.loadStyles)return _config.loadStyles(a,b);var c=null,d=!!document.createStyleSheet;jQuery.each(a,function(a,b){var e=b,f=b.toLowerCase();_loadedStyles[f]||(d?document.createStyleSheet(e):(c=c||[],c.push('')),_loadedStyles[f]=!0)}),c&&jQuery("head").append(c.join("")),b()},_loadScripts=function(a,b){if(_config.loadScripts)return _config.loadScripts(a,b);if(!a.length)return b();var c=window.document,d=a.length,e=0,f=c&&(c.head||c.getElementsByTagName("head")[0]),g=f&&f.getElementsByTagName("base")[0]||null,h="addEventListener"in window?{}:{loaded:!0,complete:!0},i=function(a){setTimeout(function(){var b={src:a.target.src,appId:appConfigs[0].appId};F2.log("Script defined in '"+b.appId+"' failed to load '"+b.src+"'"),F2.Events.emit("RESOURCE_FAILED_TO_LOAD",b),_bUsesAppHandlers?F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED,appConfigs[0],b.src):_appScriptLoadFailed(appConfigs[0],b.src)},_config.scriptErrorTimeout)},j=function(){++e===d&&b()},k=function(a,b){var c,d=_loadingScripts[a];if(d){for(var e=0;ei;i++)try{eval(inlines[i])}catch(exception){F2.log("Error loading inline script: "+exception+"\n\n"+inlines[i]),F2.Events.emit("RESOURCE_FAILED_TO_LOAD",{appId:appConfigs[0].appId,src:inlines[i],err:exception}),_bUsesAppHandlers?F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED,appConfigs[0],exception):_appScriptLoadFailed(appConfigs[0],exception)}cb()}},elementInDocument=function(a){if(a)for(;a.parentNode;)if(a=a.parentNode,a===document)return!0;return!1},_loadHtml=function(a){jQuery.each(a,function(a,b){if(_isPlaceholderElement(appConfigs[a].root))jQuery(appConfigs[a].root).addClass(F2.Constants.Css.APP).append(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+appConfigs[a].appId));else if(_bUsesAppHandlers){F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER,appConfigs[a],_outerHtml(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+appConfigs[a].appId)));var c=appConfigs[a].appId,d=appConfigs[a].root;if(!d)throw"Root for "+c+" must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.";if(!elementInDocument(d))throw"App root for "+c+" was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.";if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_AFTER,appConfigs[a]),!F2.isNativeDOMNode(d))throw"App root for "+c+" must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element."}else appConfigs[a].root=_afterAppRender(appConfigs[a],_appRender(appConfigs[a],b.html));_initAppEvents(appConfigs[a])})},scripts=appManifest.scripts||[],styles=appManifest.styles||[],inlines=appManifest.inlineScripts||[],apps=appManifest.apps||[];_loadStyles(styles,function(){_loadHtml(apps),_loadScripts(scripts,function(){appConfigs[0]&&F2.Events.emit("APP_SCRIPTS_LOADED",{appId:appConfigs[0].appId,scripts:scripts}),_loadInlineScripts(inlines,function(){jQuery.each(appConfigs,function(a,b){_createAppInstance(b,appManifest.apps[a])})})})})},_loadSecureApp=function(a,b){if(_config.secureAppPagePath){if(_isPlaceholderElement(a.root))jQuery(a.root).addClass(F2.Constants.Css.APP).append(jQuery("
").addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId));else if(_bUsesAppHandlers){var c=jQuery(a.root);if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER,a,_outerHtml(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId))),0===c.parents("body:first").length)throw"App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.";if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_AFTER,a),!a.root)throw"App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.";if(!F2.isNativeDOMNode(a.root))throw"App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node."}else a.root=_afterAppRender(a,_appRender(a,"
"));a.ui=new F2.UI(a),_initAppEvents(a),F2.Rpc.register(a,b)}else F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.')},_outerHtml=function(a){return jQuery("
").append(a).html()},_validateApp=function(a){return a.appId?a.root||a.manifestUrl?!0:(F2.log('"manifestUrl" missing from app object'),!1):(F2.log('"appId" missing from app object'),!1)},_validateContainerConfig=function(){if(_config&&_config.xhr){if("function"!=typeof _config.xhr&&"object"!=typeof _config.xhr)throw"ContainerConfig.xhr should be a function or an object";if(_config.xhr.dataType&&"function"!=typeof _config.xhr.dataType)throw"ContainerConfig.xhr.dataType should be a function";if(_config.xhr.type&&"function"!=typeof _config.xhr.type)throw"ContainerConfig.xhr.type should be a function";if(_config.xhr.url&&"function"!=typeof _config.xhr.url)throw"ContainerConfig.xhr.url should be a function"}return!0};return{getContainerState:function(){return _isInit()?jQuery.map(_apps,function(a){return{appId:a.config.appId}}):void F2.log("F2.init() must be called before F2.getContainerState()")},getContainerLocale:function(){return _isInit()?F2.ContainerConfig.locale:void F2.log("F2.init() must be called before F2.getContainerLocale()")},init:function(a){_config=a||{},_validateContainerConfig(),_hydrateContainerConfig(_config),_bUsesAppHandlers=!(_config.beforeAppRender||_config.appRender||_config.afterAppRender||_config.appScriptLoadFailed),(_config.secureAppPagePath||_config.isSecureAppPage)&&F2.Rpc.init(_config.secureAppPagePath?_config.secureAppPagePath:!1),F2.UI.init(_config),_config.isSecureAppPage||_initContainerEvents()},isInit:_isInit,loadPlaceholders:function(a){var b=[],c=[],d=function(a){a&&b.push(a)},e=function(a){if(a)for(var b=0,c=a.length;c>b;b++)d(a[b])};if(a&&!F2.isNativeDOMNode(a))throw'"parentNode" must be null or a DOM node';a&&a.hasAttribute("data-f2-appid")?d(a):(a=a||document,a.querySelectorAll&&e(a.querySelectorAll("[data-f2-appid]")));for(var f=0,g=b.length;g>f;f++){var h=_getAppConfigFromElement(b[f]);c.push(h)}c.length&&F2.registerApps(c)},registerApps:function(a,b){if(!_isInit())return void F2.log("F2.init() must be called before F2.registerApps()");if(!a)return void F2.log("At least one AppConfig must be passed when calling F2.registerApps()");var c=[],d={},e={},f=!1;return a=[].concat(a),b=[].concat(b||[]),f=!!b.length,a.length?a.length&&f&&a.length!=b.length?void F2.log('The length of "apps" does not equal the length of "appManifests"'):(jQuery.each(a,function(a,e){if(e=_createAppConfig(e),e.root=e.root||null,_validateApp(e)){if(_apps[e.instanceId]={config:e},e.root&&!_isPlaceholderElement(e.root)){if(!e.root&&"string"!=typeof e.root&&!F2.isNativeDOMNode(e.root))throw F2.log("AppConfig invalid for pre-load, not a valid string and not dom node"),F2.log("AppConfig instance:",e),"Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.";if(1!=jQuery(e.root).length)throw F2.log("AppConfig invalid for pre-load, root not unique"),F2.log("AppConfig instance:",e),F2.log("Number of dom node instances:",jQuery(e.root).length),"Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.";return _createAppInstance(e),void _initAppEvents(e)}_isPlaceholderElement(e.root)||(_bUsesAppHandlers?(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_CREATE_ROOT,e),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_BEFORE,e)):e.root=_beforeAppRender(e)),f?_loadApps(e,b[a]):e.enableBatchRequests&&!e.isSecure?(d[e.manifestUrl.toLowerCase()]=d[e.manifestUrl.toLowerCase()]||[],d[e.manifestUrl.toLowerCase()].push(e)):c.push({apps:[e],url:e.manifestUrl})}}),void(f||(jQuery.each(d,function(a,b){c.push({url:a,apps:b})}),jQuery.each(c,function(a,b){var c=F2.Constants.JSONP_CALLBACK+b.apps[0].appId;e[c]=e[c]||[],e[c].push(b)}),jQuery.each(e,function(a,b){var c=function(d,e){if(e){var f=e.url,g="GET",h="jsonp",i=function(){c(a,b.pop())},j=function(){jQuery.each(e.apps,function(a,b){b.name=b.name||b.appId,F2.log("Removed failed "+b.name+" app",b),F2.removeApp(b.instanceId)})},k=function(a){_loadApps(e.apps,a)};if(_config.xhr&&_config.xhr.dataType&&(h=_config.xhr.dataType(e.url,e.apps),"string"!=typeof h))throw"ContainerConfig.xhr.dataType should return a string";if(_config.xhr&&_config.xhr.type&&(g=_config.xhr.type(e.url,e.apps),"string"!=typeof g))throw"ContainerConfig.xhr.type should return a string";if(_config.xhr&&_config.xhr.url&&(f=_config.xhr.url(e.url,e.apps),"string"!=typeof f))throw"ContainerConfig.xhr.url should return a string";var l=_config.xhr;"function"!=typeof l&&(l=function(a,b,c,f,i){jQuery.ajax({url:a,type:g,data:{params:F2.stringify(e.apps,F2.appConfigReplacer)},jsonp:!1,jsonpCallback:d,dataType:h,success:c,error:function(a,b,c){F2.log("Failed to load app(s)",c.toString(),e.apps),f()},complete:i})}),l(f,e.apps,k,j,i)}};c(a,b.pop())})))):void F2.log("At least one AppConfig must be passed when calling F2.registerApps()")},removeAllApps:function(){return _isInit()?void jQuery.each(_apps,function(a,b){F2.removeApp(b.config.instanceId)}):void F2.log("F2.init() must be called before F2.removeAllApps()")},removeApp:function(a){return _isInit()?void(_apps[a]&&(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY_BEFORE,_apps[a]),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY,_apps[a]),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY_AFTER,_apps[a]),delete _apps[a])):void F2.log("F2.init() must be called before F2.removeApp()")}}}()),jQuery(function(){var a=[],b=function(b){b&&a.push(b)},c=function(a){if(a)for(var c=0,d=a.length;d>c;c++)b(a[c])};if(b(document.getElementById("f2-autoload")),document.querySelectorAll&&(c(document.querySelectorAll("[data-f2-autoload]")),c(document.querySelectorAll(".f2-autoload"))),a.length){F2.init();for(var d=0,e=a.length;e>d;d++)F2.loadPlaceholders(a[d])}}),exports.F2=F2,"undefined"!=typeof define&&define.amd&&define(function(){return F2})}}("undefined"!=typeof exports?exports:window); +},version:function(){return"1.4.0"}}}(),F2.extend("AppHandlers",function(){function a(a,c,d,e){b(a);var f={domNode:null,func:null,namespace:c};if(F2.isNativeDOMNode(d)?f.domNode=d:"function"==typeof d&&(f.func=d),!f.func&&!f.domNode)throw new Error("Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.");if(f.domNode&&!e)throw new Error("Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.");return f}function b(a){if(g!==a&&h!==a)throw new Error("Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().")}function c(a){if(a!=h)throw new Error("Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().")}function d(a,b){for(var c=a.slice(),d=c.length;d>=0;d--)(!c[d]||c[d].namespace&&c[d].namespace.toLowerCase()===b)&&c.splice(d,1);return c}function e(a,c,f){if(b(a),f)if(f=f.toLowerCase(),c&&c in i)i[c]=d(i[c],f);else for(var g in i)e(a,g,f);else c&&(i[c]=[])}function f(a){var b="";if(-1!==a.indexOf(".")){var c=a.split(".");a=c[0],b=c[1]}return{key:a,namespace:b}}var g=F2.guid(),h=F2.guid(),i={appCreateRoot:[],appRenderBefore:[],appDestroyBefore:[],appRenderAfter:[],appDestroyAfter:[],appRender:[],appDestroy:[],appScriptLoadFailed:[]},j={appRender:function(a,b){F2.isNativeDOMNode(a.root)?jQuery(a.root).append(b):a.root=jQuery(b).get(0),document.body.appendChild(a.root)},appDestroy:function(a){a.app&&a.app.destroy&&("function"==typeof a.app.destroy?a.app.destroy():F2.log(a.config.appId+" has a destroy property, but destroy is not of type function and as such will not be executed.")),jQuery(a.config.root).fadeOut(500,function(){jQuery(this).remove()})}};return{getToken:function(){return delete this.getToken,g},__f2GetToken:function(){return delete this.__f2GetToken,h},__trigger:function(a,b){if(c(a),!i[b])throw new Error("Invalid EventKey passed. Check your inputs and try again.");var d=Array.prototype.slice.call(arguments,2);if(!i[b].length&&j[b])j[b].apply(F2,d);else for(var e=0;e=4){var g=arguments[2],h=arguments[3];g.root?jQuery(g.root).append(h):g.root=jQuery(h).get(0),jQuery(f.domNode).append(g.root)}else f.func.apply(F2,d)}return this},on:function(b,c,d){if(!c)throw new Error("eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.");var e=f(c);if(!i[e.key])throw new Error("Invalid eventKey passed. Check your inputs and try again.");var g="appRender"===e.key,h=a(b,e.namespace,d,g);return i[e.key].push(h),this},off:function(a,b){if(!b)throw new Error("eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.");var c=f(b);if(!i[c.key])throw new Error("Invalid EventKey passed. Check your inputs and try again.");return e(a,c.key,c.namespace),this}}}()),F2.extend("Constants",{AppHandlers:{APP_CREATE_ROOT:"appCreateRoot",APP_RENDER_BEFORE:"appRenderBefore",APP_RENDER:"appRender",APP_RENDER_AFTER:"appRenderAfter",APP_DESTROY_BEFORE:"appDestroyBefore",APP_DESTROY:"appDestroy",APP_DESTROY_AFTER:"appDestroyAfter",APP_SCRIPT_LOAD_FAILED:"appScriptLoadFailed"}}),F2.extend("",{App:function(){return{init:function(){}}},AppConfig:{appId:"",context:{},enableBatchRequests:!1,height:0,instanceId:"",isSecure:!1,containerLocale:null,localeSupport:[],manifestUrl:"",maxWidth:0,minGridSize:4,minWidth:300,name:"",root:void 0,ui:void 0,views:[]},AppManifest:{apps:[],inlineScripts:[],scripts:[],styles:[]},AppContent:{data:{},html:"",status:""},ContainerConfig:{afterAppRender:function(){},appRender:function(){},beforeAppRender:function(){},debugMode:!1,locale:null,scriptErrorTimeout:7e3,isSecureAppPage:!1,secureAppPagePath:"",supportedViews:[],UI:{Mask:{backgroundColor:"#FFF",loadingIcon:"",opacity:.6,useClasses:!1,zIndex:2}},xhr:{dataType:function(){},type:function(){},url:function(){}},loadScripts:function(){},loadStyles:function(){}}}),F2.extend("Constants",{Css:function(){var a="f2-";return{APP:a+"app",APP_CONTAINER:a+"app-container",APP_TITLE:a+"app-title",APP_VIEW:a+"app-view",APP_VIEW_TRIGGER:a+"app-view-trigger",MASK:a+"mask",MASK_CONTAINER:a+"mask-container"}}(),Events:function(){var a="App.",b="Container.";return{APP_SYMBOL_CHANGE:a+"symbolChange",APP_WIDTH_CHANGE:a+"widthChange.",CONTAINER_SYMBOL_CHANGE:b+"symbolChange",CONTAINER_WIDTH_CHANGE:b+"widthChange",CONTAINER_LOCALE_CHANGE:b+"localeChange"}}(),JSONP_CALLBACK:"F2_jsonpCallback_",Sockets:{EVENT:"__event__",LOAD:"__socketLoad__",RPC:"__rpc__",RPC_CALLBACK:"__rpcCallback__",UI_RPC:"__uiRpc__"},Views:{DATA_ATTRIBUTE:"data-f2-view",ABOUT:"about",HELP:"help",HOME:"home",REMOVE:"remove",SETTINGS:"settings"}}),F2.extend("Events",function(){var a=new EventEmitter2({wildcard:!0});return a.setMaxListeners(0),{_socketEmit:function(){return EventEmitter2.prototype.emit.apply(a,[].slice.call(arguments))},emit:function(){return F2.Rpc.broadcast(F2.Constants.Sockets.EVENT,[].slice.call(arguments)),EventEmitter2.prototype.emit.apply(a,[].slice.call(arguments))},many:function(b,c,d){return a.many(b,c,d)},off:function(b,c){return a.off(b,c)},on:function(b,c){return a.on(b,c)},once:function(b,c){return a.once(b,c)}}}()),F2.extend("Rpc",function(){var a={},b="",c={},d=new RegExp("^"+F2.Constants.Sockets.EVENT),e=new RegExp("^"+F2.Constants.Sockets.RPC),f=new RegExp("^"+F2.Constants.Sockets.RPC_CALLBACK),g=new RegExp("^"+F2.Constants.Sockets.LOAD),h=new RegExp("^"+F2.Constants.Sockets.UI_RPC),i=function(){var a,b=!1,d=[],e=new easyXDM.Socket({onMessage:function(f,h){if(!b&&g.test(f)){f=f.replace(g,"");var i=F2.parse(f);2==i.length&&(a=i[0],c[a.instanceId]={config:a,socket:e},F2.registerApps([a],[i[1]]),jQuery.each(d,function(){l(a,f,h)}),b=!0)}else b?l(a,f,h):d.push(f)}})},j=function(a,c){var d=jQuery(a.root);if(d.is("."+F2.Constants.Css.APP_CONTAINER)||d.find("."+F2.Constants.Css.APP_CONTAINER),!d.length)return void F2.log("Unable to locate app in order to establish secure connection.");var e={scrolling:"no",style:{width:"100%"}};a.height&&(e.style.height=a.height+"px");var f=new easyXDM.Socket({remote:b,container:d.get(0),props:e,onMessage:function(b,c){l(a,b,c)},onReady:function(){f.postMessage(F2.Constants.Sockets.LOAD+F2.stringify([a,c],F2.appConfigReplacer))}});return f},k=function(a,b){return function(){F2.Rpc.call(a,F2.Constants.Sockets.RPC_CALLBACK,b,[].slice.call(arguments).slice(2))}},l=function(b,c){function g(a,b){for(var c=String(b).split("."),d=0;d','","
"].join("")};return{hideMask:function(a){F2.UI.hideMask(b.instanceId,a)},Modals:function(){var a=function(a){return e("Alert",a)},c=function(a){return e("Confirm",a,!0)};return{alert:function(c,d){return F2.isInit()?void(F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.alert",[].slice.call(arguments)):jQuery(a(c)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-primary").on("click",function(){jQuery(a).modal("hide").remove(),(d||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.alert()")},confirm:function(a,d,e){return F2.isInit()?void(F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.confirm",[].slice.call(arguments)):jQuery(c(a)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-ok").on("click",function(){jQuery(a).modal("hide").remove(),(d||jQuery.noop)()}),jQuery(a).find(".btn-cancel").on("click",function(){jQuery(a).modal("hide").remove(),(e||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.confirm()")}}}(),setTitle:function(a){F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"setTitle",[a]):jQuery(b.root).find("."+F2.Constants.Css.APP_TITLE).text(a)},showMask:function(a,c){F2.UI.showMask(b.instanceId,a,c)},updateHeight:d,Views:function(){var a=new EventEmitter2,e=/change/i;a.setMaxListeners(0);var f=function(a){return e.test(a)?!0:(F2.log('"'+a+'" is not a valid F2.UI.Views event name'),!1)};return{change:function(e){"function"==typeof e?this.on("change",e):"string"==typeof e&&(b.isSecure&&!F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Views.change",[].slice.call(arguments)):F2.inArray(e,b.views)&&(jQuery("."+F2.Constants.Css.APP_VIEW,c).addClass("hide").filter('[data-f2-view="'+e+'"]',c).removeClass("hide"),d(),a.emit("change",e)))},off:function(b,c){f(b)&&a.off(b,c)},on:function(b,c){f(b)&&a.on(b,c)}}}()}};return b.hideMask=function(a,b){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.hideMask()");if(F2.Rpc.isRemote(a)&&!jQuery(b).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.hideMask",[a,jQuery(b).selector]);else{var c=jQuery(b);c.find("> ."+F2.Constants.Css.MASK).remove(),c.removeClass(F2.Constants.Css.MASK_CONTAINER),c.data(F2.Constants.Css.MASK_CONTAINER)&&c.css({position:"static"})}},b.init=function(b){a=b,a.UI=jQuery.extend(!0,{},F2.ContainerConfig.UI,a.UI||{})},b.showMask=function(b,c,d){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.showMask()");if(F2.Rpc.isRemote(b)&&jQuery(c).is("."+F2.Constants.Css.APP))F2.Rpc.call(b,F2.Constants.Sockets.RPC,"F2.UI.showMask",[b,jQuery(c).selector,d]);else{d&&!a.UI.Mask.loadingIcon&&F2.log("Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();");var e=jQuery(c).addClass(F2.Constants.Css.MASK_CONTAINER),f=jQuery("
").height("100%").width("100%").addClass(F2.Constants.Css.MASK);a.UI.Mask.useClasses||f.css({"background-color":a.UI.Mask.backgroundColor,"background-image":a.UI.Mask.loadingIcon?"url("+a.UI.Mask.loadingIcon+")":"","background-position":"50% 50%","background-repeat":"no-repeat",display:"block",left:0,"min-height":30,padding:0,position:"absolute",top:0,"z-index":a.UI.Mask.zIndex,filter:"alpha(opacity="+100*a.UI.Mask.opacity+")",opacity:a.UI.Mask.opacity}),"static"===e.css("position")&&(e.css({position:"relative"}),e.data(F2.Constants.Css.MASK_CONTAINER,!0)),e.append(f)}},b}()),F2.extend("",function(){var _apps={},_config=!1,_bUsesAppHandlers=!1,_sAppHandlerToken=F2.AppHandlers.__f2GetToken(),_loadedScripts={},_loadedStyles={},_loadingScripts={},_afterAppRender=function(a,b){var c=_config.afterAppRender||function(a,b){return jQuery(b).appendTo("body")},d=c(a,b);return _config.afterAppRender&&!d?void F2.log("F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app"):(jQuery(d).addClass(F2.Constants.Css.APP),d.get(0))},_appRender=function(a,b){return b=_outerHtml(jQuery(b).addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId)),_config.appRender&&(b=_config.appRender(a,b)),_outerHtml(b)},_beforeAppRender=function(a){var b=_config.beforeAppRender||jQuery.noop;return b(a)},_appScriptLoadFailed=function(a,b){var c=_config.appScriptLoadFailed||jQuery.noop;return c(a,b)},_createAppConfig=function(a){return a=jQuery.extend(!0,{},a),a.instanceId=a.instanceId||F2.guid(),a.views=a.views||[],F2.inArray(F2.Constants.Views.HOME,a.views)||a.views.push(F2.Constants.Views.HOME),F2.ContainerConfig.locale&&(a.containerLocale=F2.ContainerConfig.locale),a},_getAppConfigFromElement=function(a){var b;if(a){var c=a.getAttribute("data-f2-appid"),d=a.getAttribute("data-f2-manifesturl");if(c&&d){b={appId:c,enableBatchRequests:a.hasAttribute("data-f2-enablebatchrequests"),isSecure:a.hasAttribute("data-f2-issecure"),manifestUrl:d,root:a};var e=a.getAttribute("data-f2-context");if(e)try{b.context=F2.parse(e)}catch(f){console.warn('F2: "data-f2-context" of node is not valid JSON','"'+f+'"')}}}return b},_hasNonTextChildNodes=function(a){var b=!1;if(a.hasChildNodes())for(var c=0,d=a.childNodes.length;d>c;c++)if(1===a.childNodes[c].nodeType){b=!0;break}return b},_hydrateContainerConfig=function(a){a.scriptErrorTimeout||(a.scriptErrorTimeout=F2.ContainerConfig.scriptErrorTimeout),a.debugMode!==!0&&(a.debugMode=F2.ContainerConfig.debugMode),a.locale&&"string"==typeof a.locale&&(F2.ContainerConfig.locale=a.locale)},_initAppEvents=function(a){jQuery(a.root).on("click","."+F2.Constants.Css.APP_VIEW_TRIGGER+"["+F2.Constants.Views.DATA_ATTRIBUTE+"]",function(b){b.preventDefault();var c=jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase();c==F2.Constants.Views.REMOVE?F2.removeApp(a.instanceId):a.ui.Views.change(c)})},_initContainerEvents=function(){var a,b=function(){F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE)};jQuery(window).on("resize",function(){clearTimeout(a),a=setTimeout(b,100)}),F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(a){a.locale&&"string"==typeof a.locale&&(F2.ContainerConfig.locale=a.locale)})},_isPlaceholderElement=function(a){return F2.isNativeDOMNode(a)&&!_hasNonTextChildNodes(a)&&!!a.getAttribute("data-f2-appid")&&!!a.getAttribute("data-f2-manifesturl")},_isInit=function(){return!!_config},_createAppInstance=function(a,b){a.ui=new F2.UI(a),void 0!==F2.Apps[a.appId]&&("function"==typeof F2.Apps[a.appId]?setTimeout(function(){_apps[a.instanceId].app=new F2.Apps[a.appId](a,b,a.root),void 0!==_apps[a.instanceId].app.init&&_apps[a.instanceId].app.init()},0):F2.log("app initialization class is defined but not a function. ("+a.appId+")"))},_loadApps=function(appConfigs,appManifest){if(appConfigs=[].concat(appConfigs),1==appConfigs.length&&appConfigs[0].isSecure&&!_config.isSecureAppPage)return void _loadSecureApp(appConfigs[0],appManifest);if(appConfigs.length!=appManifest.apps.length)return void F2.log("The number of apps defined in the AppManifest do not match the number requested.",appManifest);var _loadStyles=function(a,b){if(_config.loadStyles)return _config.loadStyles(a,b);var c=null,d=!!document.createStyleSheet;jQuery.each(a,function(a,b){var e=b,f=b.toLowerCase();_loadedStyles[f]||(d?document.createStyleSheet(e):(c=c||[],c.push('')),_loadedStyles[f]=!0)}),c&&jQuery("head").append(c.join("")),b()},_loadScripts=function(a,b){if(_config.loadScripts)return _config.loadScripts(a,b);if(!a.length)return b();var c=window.document,d=a.length,e=0,f=c&&(c.head||c.getElementsByTagName("head")[0]),g=f&&f.getElementsByTagName("base")[0]||null,h="addEventListener"in window?{}:{loaded:!0,complete:!0},i=function(a){setTimeout(function(){var b={src:a.target.src,appId:appConfigs[0].appId};F2.log("Script defined in '"+b.appId+"' failed to load '"+b.src+"'"),F2.Events.emit("RESOURCE_FAILED_TO_LOAD",b),_bUsesAppHandlers?F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED,appConfigs[0],b.src):_appScriptLoadFailed(appConfigs[0],b.src)},_config.scriptErrorTimeout)},j=function(){++e===d&&b()},k=function(a,b){var c,d=_loadingScripts[a];if(d){for(var e=0;ei;i++)try{eval(inlines[i])}catch(exception){F2.log("Error loading inline script: "+exception+"\n\n"+inlines[i]),F2.Events.emit("RESOURCE_FAILED_TO_LOAD",{appId:appConfigs[0].appId,src:inlines[i],err:exception}),_bUsesAppHandlers?F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED,appConfigs[0],exception):_appScriptLoadFailed(appConfigs[0],exception)}cb()}},elementInDocument=function(a){if(a)for(;a.parentNode;)if(a=a.parentNode,a===document)return!0;return!1},_loadHtml=function(a){jQuery.each(a,function(a,b){if(_isPlaceholderElement(appConfigs[a].root))jQuery(appConfigs[a].root).addClass(F2.Constants.Css.APP).append(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+appConfigs[a].appId));else if(_bUsesAppHandlers){F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER,appConfigs[a],_outerHtml(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+appConfigs[a].appId)));var c=appConfigs[a].appId,d=appConfigs[a].root;if(!d)throw"Root for "+c+" must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.";if(!elementInDocument(d))throw"App root for "+c+" was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.";if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_AFTER,appConfigs[a]),!F2.isNativeDOMNode(d))throw"App root for "+c+" must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element."}else appConfigs[a].root=_afterAppRender(appConfigs[a],_appRender(appConfigs[a],b.html));_initAppEvents(appConfigs[a])})},scripts=appManifest.scripts||[],styles=appManifest.styles||[],inlines=appManifest.inlineScripts||[],apps=appManifest.apps||[];_loadStyles(styles,function(){_loadHtml(apps),_loadScripts(scripts,function(){appConfigs[0]&&F2.Events.emit("APP_SCRIPTS_LOADED",{appId:appConfigs[0].appId,scripts:scripts}),_loadInlineScripts(inlines,function(){jQuery.each(appConfigs,function(a,b){_createAppInstance(b,appManifest.apps[a])})})})})},_loadSecureApp=function(a,b){if(_config.secureAppPagePath){if(_isPlaceholderElement(a.root))jQuery(a.root).addClass(F2.Constants.Css.APP).append(jQuery("
").addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId));else if(_bUsesAppHandlers){var c=jQuery(a.root);if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER,a,_outerHtml(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId))),0===c.parents("body:first").length)throw"App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.";if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_AFTER,a),!a.root)throw"App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.";if(!F2.isNativeDOMNode(a.root))throw"App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node."}else a.root=_afterAppRender(a,_appRender(a,"
"));a.ui=new F2.UI(a),_initAppEvents(a),F2.Rpc.register(a,b)}else F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.')},_outerHtml=function(a){return jQuery("
").append(a).html()},_validateApp=function(a){return a.appId?a.root||a.manifestUrl?!0:(F2.log('"manifestUrl" missing from app object'),!1):(F2.log('"appId" missing from app object'),!1)},_validateContainerConfig=function(){if(_config&&_config.xhr){if("function"!=typeof _config.xhr&&"object"!=typeof _config.xhr)throw"ContainerConfig.xhr should be a function or an object";if(_config.xhr.dataType&&"function"!=typeof _config.xhr.dataType)throw"ContainerConfig.xhr.dataType should be a function";if(_config.xhr.type&&"function"!=typeof _config.xhr.type)throw"ContainerConfig.xhr.type should be a function";if(_config.xhr.url&&"function"!=typeof _config.xhr.url)throw"ContainerConfig.xhr.url should be a function"}return!0};return{getContainerState:function(){return _isInit()?jQuery.map(_apps,function(a){return{appId:a.config.appId}}):void F2.log("F2.init() must be called before F2.getContainerState()")},getContainerLocale:function(){return _isInit()?F2.ContainerConfig.locale:void F2.log("F2.init() must be called before F2.getContainerLocale()")},init:function(a){_config=a||{},_validateContainerConfig(),_hydrateContainerConfig(_config),_bUsesAppHandlers=!(_config.beforeAppRender||_config.appRender||_config.afterAppRender||_config.appScriptLoadFailed),(_config.secureAppPagePath||_config.isSecureAppPage)&&F2.Rpc.init(_config.secureAppPagePath?_config.secureAppPagePath:!1),F2.UI.init(_config),_config.isSecureAppPage||_initContainerEvents()},isInit:_isInit,loadPlaceholders:function(a){var b=[],c=[],d=function(a){a&&b.push(a)},e=function(a){if(a)for(var b=0,c=a.length;c>b;b++)d(a[b])};if(a&&!F2.isNativeDOMNode(a))throw'"parentNode" must be null or a DOM node';a&&a.hasAttribute("data-f2-appid")?d(a):(a=a||document,a.querySelectorAll&&e(a.querySelectorAll("[data-f2-appid]")));for(var f=0,g=b.length;g>f;f++){var h=_getAppConfigFromElement(b[f]);c.push(h)}c.length&&F2.registerApps(c)},registerApps:function(a,b){if(!_isInit())return void F2.log("F2.init() must be called before F2.registerApps()");if(!a)return void F2.log("At least one AppConfig must be passed when calling F2.registerApps()");var c=[],d={},e={},f=!1;return a=[].concat(a),b=[].concat(b||[]),f=!!b.length,a.length?a.length&&f&&a.length!=b.length?void F2.log('The length of "apps" does not equal the length of "appManifests"'):(jQuery.each(a,function(a,e){if(e=_createAppConfig(e),e.root=e.root||null,_validateApp(e)){if(_apps[e.instanceId]={config:e},e.root&&!_isPlaceholderElement(e.root)){if(!e.root&&"string"!=typeof e.root&&!F2.isNativeDOMNode(e.root))throw F2.log("AppConfig invalid for pre-load, not a valid string and not dom node"),F2.log("AppConfig instance:",e),"Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.";if(1!=jQuery(e.root).length)throw F2.log("AppConfig invalid for pre-load, root not unique"),F2.log("AppConfig instance:",e),F2.log("Number of dom node instances:",jQuery(e.root).length),"Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.";return _createAppInstance(e),void _initAppEvents(e)}_isPlaceholderElement(e.root)||(_bUsesAppHandlers?(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_CREATE_ROOT,e),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_BEFORE,e)):e.root=_beforeAppRender(e)),f?_loadApps(e,b[a]):e.enableBatchRequests&&!e.isSecure?(d[e.manifestUrl.toLowerCase()]=d[e.manifestUrl.toLowerCase()]||[],d[e.manifestUrl.toLowerCase()].push(e)):c.push({apps:[e],url:e.manifestUrl})}}),void(f||(jQuery.each(d,function(a,b){c.push({url:a,apps:b})}),jQuery.each(c,function(a,b){var c=F2.Constants.JSONP_CALLBACK+b.apps[0].appId;e[c]=e[c]||[],e[c].push(b)}),jQuery.each(e,function(a,b){var c=function(d,e){if(e){var f=e.url,g="GET",h="jsonp",i=function(){c(a,b.pop())},j=function(){jQuery.each(e.apps,function(a,b){b.name=b.name||b.appId,F2.log("Removed failed "+b.name+" app",b),F2.removeApp(b.instanceId)})},k=function(a){_loadApps(e.apps,a)};if(_config.xhr&&_config.xhr.dataType&&(h=_config.xhr.dataType(e.url,e.apps),"string"!=typeof h))throw"ContainerConfig.xhr.dataType should return a string";if(_config.xhr&&_config.xhr.type&&(g=_config.xhr.type(e.url,e.apps),"string"!=typeof g))throw"ContainerConfig.xhr.type should return a string";if(_config.xhr&&_config.xhr.url&&(f=_config.xhr.url(e.url,e.apps),"string"!=typeof f))throw"ContainerConfig.xhr.url should return a string";var l=_config.xhr;"function"!=typeof l&&(l=function(a,b,c,f,i){jQuery.ajax({url:a,type:g,data:{params:F2.stringify(e.apps,F2.appConfigReplacer)},jsonp:!1,jsonpCallback:d,dataType:h,success:c,error:function(a,b,c){F2.log("Failed to load app(s)",c.toString(),e.apps),f()},complete:i})}),l(f,e.apps,k,j,i)}};c(a,b.pop())})))):void F2.log("At least one AppConfig must be passed when calling F2.registerApps()")},removeAllApps:function(){return _isInit()?void jQuery.each(_apps,function(a,b){F2.removeApp(b.config.instanceId)}):void F2.log("F2.init() must be called before F2.removeAllApps()")},removeApp:function(a){return _isInit()?void(_apps[a]&&(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY_BEFORE,_apps[a]),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY,_apps[a]),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY_AFTER,_apps[a]),delete _apps[a])):void F2.log("F2.init() must be called before F2.removeApp()")}}}()),jQuery(function(){var a=[],b=function(b){b&&a.push(b)},c=function(a){if(a)for(var c=0,d=a.length;d>c;c++)b(a[c])};if(b(document.getElementById("f2-autoload")),document.querySelectorAll&&(c(document.querySelectorAll("[data-f2-autoload]")),c(document.querySelectorAll(".f2-autoload"))),a.length){F2.init();for(var d=0,e=a.length;e>d;d++)F2.loadPlaceholders(a[d])}}),exports.F2=F2,"undefined"!=typeof define&&define.amd&&define(function(){return F2})}}("undefined"!=typeof exports?exports:window); //# sourceMappingURL=f2.min.js.map \ No newline at end of file diff --git a/dist/f2.min.js.map b/dist/f2.min.js.map index 23d700a7..cc4e43ef 100644 --- a/dist/f2.min.js.map +++ b/dist/f2.min.js.map @@ -1 +1 @@ -{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","global","factory","module","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","Plugin","_relatedTarget","$this","Modal","DEFAULTS","element","$body","$element","$backdrop","isShown","scrollbarWidth","remote","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","that","checkScrollbar","setScrollbar","escape","transition","enforceFocus","emulateTransitionEnd","hideModal","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","measureScrollbar","bodyPad","clientWidth","innerWidth","scrollDiv","modal","Constructor","$target","showEvent","_events","_conf","configure","conf","delimiter","maxListeners","wildcard","newListener","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","property","isHostObject","o","hasFlash","undef","navigator","plugins","description","mimeTypes","enabledPlugin","flashVersion","flash","GetVariable","notSupportedException","major","minor","HAS_FLASH_THROTTLED_BUG","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","substring","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","q","useHash","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","frameBorder","allowTransparency","onLoad","usePost","action","checkAcl","acl","re","substr","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","userAgent","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","defaults","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","stringify","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","fragments","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","ex1","_absolutizeURI","removeDotSegments","output","_parseURI","authority","hostname","appConfigReplacer","Apps","overwrite","isFunc","S4","array","isLocalRequest","urlLower","isNativeDOMNode","testObject","bIsNode","Node","bIsElement","HTMLElement","log","replacer","space","_ct","_f2t","_handlerCollection","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","$root","appInstance","app","appId","_createHandler","sNamespace","func_or_element","bDomNodeAppropriate","_validateToken","domNode","sToken","_removeHandler","eventKey","currentEventKey","eventCollection","newEvents","ec","currentEventHandler","newHandlerCollection","iCounter","hc","currentHandler","getToken","__f2GetToken","__trigger","passableArgs","hcl","$appRoot","arData","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","containerLocale","localeSupport","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","locale","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","_PREFIX","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","_APP_EVENT_PREFIX","_CONTAINER_EVENT_PREFIX","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","CONTAINER_LOCALE_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_socketEmit","broadcast","Constants","timesToListen","_secureAppPagePath","_apps","_rEvents","_rRpc","_rRpcCallback","_rSocketLoad","_rUiCall","_createAppToContainerSocket","isLoaded","messagePlayback","socket","appParts","registerApps","_createContainerToAppSocket","appManifest","iframeProps","scrolling","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","callbacks","c","_registerCallback","messageType","cid","isRemote","register","_containerConfig","UI_Class","_appConfig","_updateHeight","outerHeight","_modalHtml","showCancel","hideMask","Modals","_renderAlert","_renderConfirm","alert","isInit","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_rValidEvents","_isValid","containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","_config","_bUsesAppHandlers","_sAppHandlerToken","_loadedScripts","_loadedStyles","_loadingScripts","_afterAppRender","appContainer","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_getAppConfigFromElement","hasAttribute","contextJson","warn","_hasNonTextChildNodes","hasNodes","hasChildNodes","_hydrateContainerConfig","_initAppEvents","view","removeApp","_initContainerEvents","resizeTimeout","resizeHandler","_isPlaceholderElement","_isInit","_createAppInstance","appContent","_loadApps","appConfigs","_loadSecureApp","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","resourceUrl","resourceKey","_loadScripts","scriptCount","scriptsLoaded","insertBeforeEl","readyStates","loaded","_error","evtData","_checkComplete","_emptyWaitlist","errorEvt","waitlist","getTime","onerror","_loadInlineScripts","inlines","loadInlineScripts","eval","exception","elementInDocument","_loadHtml","_validateApp","_validateContainerConfig","getContainerState","getContainerLocale","loadPlaceholders","addAll","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps","autoloadEls"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","global","factory","module","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","Plugin","_relatedTarget","$this","Modal","DEFAULTS","element","$body","$element","$backdrop","isShown","scrollbarWidth","remote","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","that","checkScrollbar","setScrollbar","escape","transition","enforceFocus","emulateTransitionEnd","hideModal","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","measureScrollbar","bodyPad","clientWidth","innerWidth","scrollDiv","modal","Constructor","$target","showEvent","_events","_conf","configure","conf","delimiter","maxListeners","wildcard","newListener","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","property","isHostObject","o","hasFlash","undef","navigator","plugins","description","mimeTypes","enabledPlugin","flashVersion","flash","GetVariable","notSupportedException","major","minor","HAS_FLASH_THROTTLED_BUG","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","substring","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","q","useHash","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","frameBorder","allowTransparency","onLoad","usePost","action","checkAcl","acl","re","substr","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","userAgent","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","defaults","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","stringify","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","fragments","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","ex1","_absolutizeURI","removeDotSegments","output","_parseURI","authority","hostname","appConfigReplacer","Apps","overwrite","isFunc","S4","array","isLocalRequest","urlLower","isNativeDOMNode","testObject","bIsNode","Node","bIsElement","HTMLElement","log","replacer","space","_createHandler","fnOrNode","domNodeAppropriate","_validateToken","domNode","_containerToken","_f2Token","_validateF2Token","_filterHandlersByNamespace","newHandlers","_removeHandler","eventKey","_handlerCollection","_parseEventKey","eventParts","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","appInstance","app","appId","getToken","__f2GetToken","__trigger","callbackArgs","isAppRender","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","containerLocale","localeSupport","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","locale","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","_PREFIX","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","_APP_EVENT_PREFIX","_CONTAINER_EVENT_PREFIX","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","CONTAINER_LOCALE_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_socketEmit","broadcast","Constants","timesToListen","_secureAppPagePath","_apps","_rEvents","_rRpc","_rRpcCallback","_rSocketLoad","_rUiCall","_createAppToContainerSocket","isLoaded","messagePlayback","socket","appParts","registerApps","_createContainerToAppSocket","appManifest","iframeProps","scrolling","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","callbacks","c","_registerCallback","messageType","cid","isRemote","register","_containerConfig","UI_Class","_appConfig","$root","_updateHeight","outerHeight","_modalHtml","showCancel","hideMask","Modals","_renderAlert","_renderConfirm","alert","isInit","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_rValidEvents","_isValid","containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","_config","_bUsesAppHandlers","_sAppHandlerToken","_loadedScripts","_loadedStyles","_loadingScripts","_afterAppRender","appContainer","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_getAppConfigFromElement","hasAttribute","contextJson","warn","_hasNonTextChildNodes","hasNodes","hasChildNodes","_hydrateContainerConfig","_initAppEvents","view","removeApp","_initContainerEvents","resizeTimeout","resizeHandler","_isPlaceholderElement","_isInit","_createAppInstance","appContent","_loadApps","appConfigs","_loadSecureApp","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","resourceUrl","resourceKey","_loadScripts","scriptCount","scriptsLoaded","insertBeforeEl","readyStates","loaded","_error","evtData","_checkComplete","_emptyWaitlist","errorEvt","waitlist","getTime","onerror","_loadInlineScripts","inlines","loadInlineScripts","eval","exception","elementInDocument","_loadHtml","_validateApp","_validateContainerConfig","getContainerState","getContainerLocale","loadPlaceholders","addAll","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps","autoloadEls"],"mappings":"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"} \ No newline at end of file diff --git a/dist/f2.no-third-party.js b/dist/f2.no-third-party.js index fd1d510a..a1ad6b5a 100644 --- a/dist/f2.no-third-party.js +++ b/dist/f2.no-third-party.js @@ -1,5 +1,5 @@ /*! - * F2 v1.4.0 12-29-2014 + * F2 v1.4.0 01-15-2015 * Copyright (c) 2014 Markit On Demand, Inc. http://www.openf2.org * * "F2" is licensed under the Apache License, Version 2.0 (the "License"); @@ -283,13 +283,13 @@ F2 = (function() { * @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). * @param {object} [obj2]* An object to be logged * @example - * Pass any value (string, int, array, object, bool). - * F2.log('foo'); - * F2.log([1, 2, 3]); + * // Pass any value (string, int, array, object, bool). + * F2.log('foo'); + * F2.log([1, 2, 3]); * @example - * Use a console method name as the first argument. - * F2.log('error', err); - * F2.log('info', 'The session ID is ' + sessionId); + * // Use a console method name as the first argument. + * F2.log('error', err); + * F2.log('info', 'The session ID is ' + sessionId); */ log: function() { if (!window.console) { @@ -358,7 +358,7 @@ F2 = (function() { *

* * ### Order of Execution - * + * * **App Rendering** * * 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. @@ -375,392 +375,299 @@ F2 = (function() { * 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. * 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. * 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - * + * * **Error Handling** * 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - * + * * @class F2.AppHandlers */ F2.extend('AppHandlers', (function() { - // the hidden token that we will check against every time someone tries to add, remove, fire handler - var _ct = F2.guid(); - var _f2t = F2.guid(); - + // The hidden token that we will check against every time someone tries to add, remove, fire handler + var _containerToken = F2.guid(); + var _f2Token = F2.guid(); + var _handlerCollection = { appCreateRoot: [], - appRenderBefore: [], + appRenderBefore: [], appDestroyBefore: [], appRenderAfter: [], appDestroyAfter: [], appRender: [], appDestroy: [], - appScriptLoadFailed: [] + appScriptLoadFailed: [] }; - + var _defaultMethods = { - appRender: function(appConfig, appHtml) - { - var $root = null; - - // if no app root is defined use the app's outer most node - if(!F2.isNativeDOMNode(appConfig.root)) - { + appRender: function(appConfig, appHtml) { + // If no app root is defined use the app's outer most node + if (F2.isNativeDOMNode(appConfig.root)) { + jQuery(appConfig.root).append(appHtml); + } else { appConfig.root = jQuery(appHtml).get(0); - // get a handle on the root in jQuery - $root = jQuery(appConfig.root); - } - else - { - // get a handle on the root in jQuery - $root = jQuery(appConfig.root); - - // append the app html to the root - $root.append(appHtml); - } - - // append the root to the body by default. - jQuery('body').append($root); + } + + document.body.appendChild(appConfig.root); }, - appDestroy: function(appInstance) - { - // call the apps destroy method, if it has one - if(appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') - { - appInstance.app.destroy(); - } - // warn the Container and App Developer that even though they have a destroy method it hasn't been - else if(appInstance && appInstance.app && appInstance.app.destroy) - { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + appDestroy: function(appInstance) { + if (appInstance.app && appInstance.app.destroy) { + if (typeof appInstance.app.destroy === 'function') { + appInstance.app.destroy(); + } else { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } } - - // fade out and remove the root + jQuery(appInstance.config.root).fadeOut(500, function() { jQuery(this).remove(); }); } }; - - var _createHandler = function(token, sNamespace, func_or_element, bDomNodeAppropriate) - { - // will throw an exception and stop execution if the token is invalid - _validateToken(token); - - // create handler structure. Not all arguments properties will be populated/used. + + function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { + _validateToken(token); + var handler = { - func: (typeof(func_or_element)) ? func_or_element : null, - namespace: sNamespace, - domNode: (F2.isNativeDOMNode(func_or_element)) ? func_or_element : null + domNode: null, + func: null, + namespace: namespace }; - - if(!handler.func && !handler.domNode) - { - throw ('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); + + if (F2.isNativeDOMNode(fnOrNode)) { + handler.domNode = fnOrNode; + } else if (typeof fnOrNode === 'function') { + handler.func = fnOrNode; } - if(handler.domNode && !bDomNodeAppropriate) - { - throw ('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + if (!handler.func && !handler.domNode) { + throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); } - + + if (handler.domNode && !domNodeAppropriate) { + throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + } + return handler; - }; - - var _validateToken = function(sToken) - { - // check token against F2 and container - if(_ct != sToken && _f2t != sToken) { throw ('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); } - }; - - var _removeHandler = function(sToken, eventKey, sNamespace) - { - // will throw an exception and stop execution if the token is invalid - _validateToken(sToken); - - if(!sNamespace && !eventKey) - { - return; + } + + // Token must match F2 or container + function _validateToken(token) { + if (_containerToken !== token && _f2Token !== token) { + throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); } - // remove by event key - else if(!sNamespace && eventKey) - { - _handlerCollection[eventKey] = []; + } + + // Token must match F2 + function _validateF2Token(token) { + if (token != _f2Token) { + throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); } - // remove by namespace only - else if(sNamespace && !eventKey) - { - sNamespace = sNamespace.toLowerCase(); - - for(var currentEventKey in _handlerCollection) - { - var eventCollection = _handlerCollection[currentEventKey]; - var newEvents = []; - - for(var i = 0, ec = eventCollection.length; i < ec; i++) - { - var currentEventHandler = eventCollection[i]; - if(currentEventHandler) - { - if(!currentEventHandler.namespace || currentEventHandler.namespace.toLowerCase() != sNamespace) - { - newEvents.push(currentEventHandler); - } - } - } + } + + function _filterHandlersByNamespace(handlers, namespace) { + var newHandlers = handlers.slice(); - eventCollection = newEvents; - } + for (var i = newHandlers.length; i >= 0; i--) { + if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { + newHandlers.splice(i, 1); + } } - else if(sNamespace && _handlerCollection[eventKey]) - { - sNamespace = sNamespace.toLowerCase(); - - var newHandlerCollection = []; - - for(var iCounter = 0, hc = _handlerCollection[eventKey].length; iCounter < hc; iCounter++) - { - var currentHandler = _handlerCollection[eventKey][iCounter]; - if(currentHandler) - { - if(!currentHandler.namespace || currentHandler.namespace.toLowerCase() != sNamespace) - { - newHandlerCollection.push(currentHandler); - } + + return newHandlers; + } + + function _removeHandler(token, eventKey, namespace) { + _validateToken(token); + + if (namespace) { + namespace = namespace.toLowerCase(); + + if (eventKey && eventKey in _handlerCollection) { + _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); + } else { + for (var key in _handlerCollection) { + _removeHandler(token, key, namespace); } } - - _handlerCollection[eventKey] = newHandlerCollection; + } else if (eventKey) { + _handlerCollection[eventKey] = []; } - }; - + } + + function _parseEventKey(eventKey) { + var namespace = ''; + + if (eventKey.indexOf('.') !== -1) { + var eventParts = eventKey.split('.'); + eventKey = eventParts[0]; + namespace = eventParts[1]; + } + + return { + key: eventKey, + namespace: namespace + }; + } + return { /** - * Allows Container Developer to retrieve a unique token which must be passed to - * all `on` and `off` methods. This function will self destruct and can only be called - * one time. Container Developers must store the return value inside of a closure. - * @method getToken - **/ - getToken: function() - { - // delete this method for security that way only the container has access to the token 1 time. - // kind of Ethan Hunt-ish, this message will self destruct immediately. + * Allows Container Developer to retrieve a unique token which must be + * passed to all `on` and `off` methods. This function will self destruct + * and can only be called one time. Container Developers must store the + * return value inside of a closure. + * @method getToken + */ + getToken: function() { + /** + * Delete this method for security that way only the container has + * access to the token 1 time. Kind of Ethan Hunt-ish, this message will + * self-destruct immediately. + */ delete this.getToken; - // return the token, which we validate against. - return _ct; + return _containerToken; }, /** - * Allows F2 to get a token internally. Token is required to call {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. - * This function will self destruct to eliminate other sources from using the {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} - * and additional internal methods. - * @method __f2GetToken - * @private - **/ - __f2GetToken: function() - { - // delete this method for security that way only the F2 internally has access to the token 1 time. - // kind of Ethan Hunt-ish, this message will self destruct immediately. + * Allows F2 to get a token internally. Token is required to call + * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This + * function will self destruct to eliminate other sources from using the + * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and + * additional internal methods. + * @method __f2GetToken + * @private + */ + __f2GetToken: function() { + /** + * Delete this method for security that way only the container has + * access to the token 1 time. Kind of Ethan Hunt-ish, this message will + * self-destruct immediately. + */ delete this.__f2GetToken; - // return the token, which we validate against. - return _f2t; + return _f2Token; }, /** - * Allows F2 to trigger specific events internally. - * @method __trigger - * @private - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. - * @param {String} eventKey The event to fire. The complete list of event keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - **/ - __trigger: function(token, eventKey) // additional arguments will likely be passed - { - // will throw an exception and stop execution if the token is invalid - if(token != _f2t) - { - throw ('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); + * Allows F2 to trigger specific events internally. + * @method __trigger + * @private + * @chainable + * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. + * @param {String} eventKey The event to fire. The complete list of event + * keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + */ + __trigger: function(token, eventKey) { + _validateF2Token(token); + + if (!_handlerCollection[eventKey]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); } - - if(_handlerCollection && _handlerCollection[eventKey]) - { - // create a collection of arguments that are safe to pass to the callback. - var passableArgs = []; - - // populate that collection with all arguments except token and eventKey - for(var i = 2, j = arguments.length; i < j; i++) - { - passableArgs.push(arguments[i]); - } - - if(_handlerCollection[eventKey].length === 0 && _defaultMethods[eventKey]) - { - _defaultMethods[eventKey].apply(F2, passableArgs); - return this; - } - else if(_handlerCollection[eventKey].length === 0 && !_handlerCollection[eventKey]) - { - return this; - } - - // fire all event listeners in the order that they were added. - for(var iCounter = 0, hcl = _handlerCollection[eventKey].length; iCounter < hcl; iCounter++) - { - var handler = _handlerCollection[eventKey][iCounter]; - - // appRender where root is already defined - if (handler.domNode && arguments[2] && arguments[2].root && arguments[3]) - { - var $appRoot = jQuery(arguments[2].root).append(arguments[3]); - jQuery(handler.domNode).append($appRoot); - } - else if (handler.domNode && arguments[2] && !arguments[2].root && arguments[3]) - { - // set the root to the actual HTML of the app - arguments[2].root = jQuery(arguments[3]).get(0); - // appends the root to the dom node specified - jQuery(handler.domNode).append(arguments[2].root); - } - else - { - handler.func.apply(F2, passableArgs); + + var callbackArgs = Array.prototype.slice.call(arguments, 2); + + if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { + _defaultMethods[eventKey].apply(F2, callbackArgs); + } else { + for (var i = 0; i < _handlerCollection[eventKey].length; i++) { + var handler = _handlerCollection[eventKey][i]; + + // Check for appRender + if (handler.domNode && arguments.length >= 4) { + var appConfig = arguments[2]; + var appHtml = arguments[3]; + + if (appConfig.root) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } + + jQuery(handler.domNode).append(appConfig.root); + } else { + handler.func.apply(F2, callbackArgs); } } } - else - { - throw ('Invalid EventKey passed. Check your inputs and try again.'); - } - + return this; }, /** - * Allows Container Developer to easily tell all apps to render in a specific location. Only valid for eventType `appRender`. - * @method on - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine which event to attach the listener to. The namespace is useful for removal - * purposes. At this time it does not affect when an event is fired. Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @params {HTMLElement} element Specific DOM element to which app gets appended. - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * 'appRender', - * document.getElementById('my_app') - * ); - * - * Or: - * @example - * F2.AppHandlers.on( - * _token, - * 'appRender.myNamespace', - * document.getElementById('my_app') - * ); - **/ - /** - * Allows Container Developer to add listener method that will be triggered when a specific event occurs. - * @method on - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine which event to attach the listener to. The namespace is useful for removal - * purposes. At this time it does not affect when an event is fired. Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @params {Function} listener A function that will be triggered when a specific event occurs. For detailed argument definition refer to {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * 'appRenderBefore' - * function() { F2.log('before app rendered!'); } - * ); - * - * Or: - * @example - * F2.AppHandlers.on( - * _token, - * 'appRenderBefore.myNamespace', - * function() { F2.log('before app rendered!'); } - * ); - **/ - on: function(token, eventKey, func_or_element) - { - var sNamespace = null; - - if(!eventKey) - { - throw ('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - // we need to check the key for a namespace - if(eventKey.indexOf('.') > -1) - { - var arData = eventKey.split('.'); - eventKey = arData[0]; - sNamespace = arData[1]; - } - - if(_handlerCollection && _handlerCollection[eventKey]) - { - _handlerCollection[eventKey].push( - _createHandler( - token, - sNamespace, - func_or_element, - (eventKey == 'appRender') - ) - ); + * Allows Container Developer to add listener method that will be triggered + * when a specific event occurs. + * @method on + * @chainable + * @param {String} token The token received from + * {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + * @param {String} eventKey{.namespace} The event key used to determine + * which event to attach the listener to. The namespace is useful for + * removal purposes. At this time it does not affect when an event is fired. + * Complete list of event keys available in + * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + * @param {Function|Element} listener A function that will be triggered + * when a specific event occurs. Optionally, a specific DOM element to + * which the app will be appended can be passed. For detailed argument + * definition refer to + * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * 'appRenderBefore', + * function() { + * F2.log('before app rendered!'); + * } + * ); + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * 'appRenderBefore.myNamespace', + * function() { + * F2.log('before app rendered!'); + * } + * ); + */ + on: function(token, eventKey, listener) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); } - else - { - throw ('Invalid EventKey passed. Check your inputs and try again.'); + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid eventKey passed. Check your inputs and try again.'); } - + + var isAppRender = (event.key === 'appRender'); + var handler = _createHandler(token, event.namespace, listener, isAppRender); + _handlerCollection[event.key].push(handler); + return this; }, /** - * Allows Container Developer to remove listener methods for specific events - * @method off - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine which event to attach the listener to. If no namespace is provided all - * listeners for the specified event type will be removed. - * Complete list available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.off(_token,'appRenderBefore'); - * - **/ - off: function(token, eventKey) - { - var sNamespace = null; - - if(!eventKey) - { - throw ('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - // we need to check the key for a namespace - if(eventKey.indexOf('.') > -1) - { - var arData = eventKey.split('.'); - eventKey = arData[0]; - sNamespace = arData[1]; - } - - if(_handlerCollection && _handlerCollection[eventKey]) - { - _removeHandler( - token, - eventKey, - sNamespace - ); + * Allows Container Developer to remove listener methods for specific events + * @method off + * @chainable + * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + * @param {String} eventKey{.namespace} The event key used to determine + * which event to attach the listener to. If no namespace is provided all + * listeners for the specified event type will be removed. Complete list + * available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.off(token, 'appRenderBefore'); + */ + off: function(token, eventKey) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); } - else - { - throw ('Invalid EventKey passed. Check your inputs and try again.'); + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); } - + + _removeHandler(token, event.key, event.namespace); + return this; } }; @@ -768,209 +675,205 @@ F2.extend('AppHandlers', (function() { F2.extend('Constants', { /** - * A convenient collection of all available appHandler events. - * @class F2.Constants.AppHandlers - **/ - AppHandlers: (function() - { - return { - /** - * Equivalent to `appCreateRoot`. Identifies the create root method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_CREATE_ROOT - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_CREATE_ROOT, - * function(appConfig) - * { - * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. - * // the app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER - * appConfig.root = jQuery('
').get(0); - * } - * ); - */ - APP_CREATE_ROOT: 'appCreateRoot', - /** - * Equivalent to `appRenderBefore`. Identifies the before app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_BEFORE - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_RENDER_BEFORE, - * function(appConfig) - * { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_BEFORE: 'appRenderBefore', - /** - * Equivalent to `appRender`. Identifies the app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, [appHtml](../../app-development.html#app-design) ) - * @property APP_RENDER - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_RENDER, - * function(appConfig, appHtml) - * { - * var $root = null; - * - * // if no app root is defined use the app's outer most node - * if(!F2.isNativeDOMNode(appConfig.root)) - * { - * appConfig.root = jQuery(appHtml).get(0); - * // get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * } - * else - * { - * // get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * - * // append the app html to the root - * $root.append(appHtml); - * } - * - * // append the root to the body by default. - * jQuery('body').append($root); - * } - * ); - */ - APP_RENDER: 'appRender', - /** - * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_AFTER - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_RENDER_AFTER, - * function(appConfig) - * { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_AFTER: 'appRenderAfter', - /** - * Equivalent to `appDestroyBefore`. Identifies the before app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY_BEFORE - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - * function(appInstance) - * { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_BEFORE: 'appDestroyBefore', - /** - * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_DESTROY, - * function(appInstance) - * { - * // call the apps destroy method, if it has one - * if(appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') - * { - * appInstance.app.destroy(); - * } - * else if(appInstance && appInstance.app && appInstance.app.destroy) - * { - * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - * } - * - * // fade out and remove the root - * jQuery(appInstance.config.root).fadeOut(500, function() { - * jQuery(this).remove(); - * }); - * } - * ); - */ - APP_DESTROY: 'appDestroy', - /** - * Equivalent to `appDestroyAfter`. Identifies the after app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY_AFTER - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_DESTROY_AFTER, - * function(appInstance) - * { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_AFTER: 'appDestroyAfter', - /** - * Equivalent to `appScriptLoadFailed`. Identifies the app script load failed method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo ) - * @property APP_SCRIPT_LOAD_FAILED - * @type string - * @static - * @final - * @example - * var _token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * _token, - * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - * function(appConfig, scriptInfo) - * { - * F2.log(appConfig.appId); - * } - * ); - */ - APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' - }; - })() + * A convenient collection of all available appHandler events. + * @class F2.Constants.AppHandlers + **/ + AppHandlers: { + /** + * Equivalent to `appCreateRoot`. Identifies the create root method for use + * in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + * @property APP_CREATE_ROOT + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_CREATE_ROOT, + * function(appConfig) { + * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. + * // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER + * appConfig.root = jQuery('
').get(0); + * } + * ); + */ + APP_CREATE_ROOT: 'appCreateRoot', + /** + * Equivalent to `appRenderBefore`. Identifies the before app render method + * for use in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + * @property APP_RENDER_BEFORE + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_RENDER_BEFORE, + * function(appConfig) { + * F2.log(appConfig); + * } + * ); + */ + APP_RENDER_BEFORE: 'appRenderBefore', + /** + * Equivalent to `appRender`. Identifies the app render method for use in + * AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, + * [appHtml](../../app-development.html#app-design)). + * @property APP_RENDER + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_RENDER, + * function(appConfig, appHtml) { + * var $root; + * + * // If no app root is defined use the app's outer most node + * if (!F2.isNativeDOMNode(appConfig.root)) { + * appConfig.root = jQuery(appHtml).get(0); + * // Get a handle on the root in jQuery + * $root = jQuery(appConfig.root); + * } else { + * // Get a handle on the root in jQuery + * $root = jQuery(appConfig.root); + * // Append the app html to the root + * $root.append(appHtml); + * } + * + * // Append the root to the body by default. + * jQuery('body').append($root); + * } + * ); + */ + APP_RENDER: 'appRender', + /** + * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. + * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the + * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) + * @property APP_RENDER_AFTER + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_RENDER_AFTER, + * function(appConfig) { + * F2.log(appConfig); + * } + * ); + */ + APP_RENDER_AFTER: 'appRenderAfter', + /** + * Equivalent to `appDestroyBefore`. Identifies the before app destroy + * method for use in AppHandlers.(on|off). When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * (appInstance). + * @property APP_DESTROY_BEFORE + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + * function(appInstance) { + * F2.log(appInstance); + * } + * ); + */ + APP_DESTROY_BEFORE: 'appDestroyBefore', + /** + * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. + * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the + * following argument(s): ( appInstance ) + * @property APP_DESTROY + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_DESTROY, + * function(appInstance) { + * // Call the apps destroy method, if it has one + * if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { + * appInstance.app.destroy(); + * } else if (appInstance && appInstance.app && appInstance.app.destroy) { + * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + * } + * + * // Fade out and remove the root + * jQuery(appInstance.config.root).fadeOut(500, function() { + * jQuery(this).remove(); + * }); + * } + * ); + */ + APP_DESTROY: 'appDestroy', + /** + * Equivalent to `appDestroyAfter`. Identifies the after app destroy method + * for use in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + * listener function passed will receive the following argument(s): + * (appInstance) + * @property APP_DESTROY_AFTER + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_DESTROY_AFTER, + * function(appInstance) { + * F2.log(appInstance); + * } + * ); + */ + APP_DESTROY_AFTER: 'appDestroyAfter', + /** + * Equivalent to `appScriptLoadFailed`. Identifies the app script load + * failed method for use in AppHandlers.on/off. When bound using + * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + * the listener function passed will receive the following argument(s): + * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) + * @property APP_SCRIPT_LOAD_FAILED + * @type string + * @static + * @final + * @example + * var token = F2.AppHandlers.getToken(); + * F2.AppHandlers.on( + * token, + * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + * function(appConfig, scriptInfo) { + * F2.log(appConfig.appId); + * } + * ); + */ + APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + } }); + /** * Class stubs for documentation purposes * @main F2 From 7571c41feb7b754b5860a8447bcccc0e1e15a4b4 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 2 Jan 2015 16:59:17 -0500 Subject: [PATCH 04/61] Setting the necessary values until we add modules --- .jshintrc | 53 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/.jshintrc b/.jshintrc index 1da5e27a..a5fa8161 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,22 +1,33 @@ { - "browser": true, - "curly": true, - "evil": true, - "globals": { - "console": true, - "define": true, "exports": true, "require": true, "module": true, - "describe": true, "xdescribe": true, "it": true, "xit": true, "expect": true, "runs": true, "waits": true, "waitsFor": true, "itConditionally": true, - "easyXDM": true, - "EventEmitter2": true, - "F2": true, - "jQuery": true, - "$": true - }, - "latedef": true, - "noarg": true, - "quotmark": "single", - "shadow": false, - "sub": true, - "undef": true, - "unused": "vars" -} \ No newline at end of file + "browser": true, + "curly": true, + "evil": true, + "globals": { + "console": true, + "define": true, + "exports": true, + "require": true, + "module": true, + "describe": true, + "xdescribe": true, + "it": true, + "xit": true, + "expect": true, + "runs": true, + "waits": true, + "waitsFor": true, + "itConditionally": true, + "easyXDM": true, + "EventEmitter2": true, + "F2": true, + "jQuery": true, + "$": true + }, + "latedef": true, + "noarg": true, + "quotmark": "single", + "shadow": false, + "sub": true, + "undef": true, + "unused": false +} From 68375ca7957cef4782f45591cdd4bfe1de628f4a Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 2 Jan 2015 16:59:37 -0500 Subject: [PATCH 05/61] Fixing formatting and minor refactor --- src/lib/F2.js | 611 ++++++++++++++++++++++++++------------------------ 1 file changed, 317 insertions(+), 294 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index 0baec7c8..3b77215e 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -1,313 +1,336 @@ -var F2; - /** - * Open F2 - * @module f2 - * @main f2 - */ -F2 = (function() { + Open F2 + @module f2 + @main f2 +*/ +var F2 = (function() { + /** + Test whether a value is a native Node + @method _isNode + @private + @param {Value to test} test + @returns {boolean} True if Node + */ + function _isNode(test) { + if (typeof Node === 'object') { + return test instanceof Node; + } + + return typeof test === 'object' && typeof test.nodeType === 'number' && typeof test.nodeName === 'string'; + } + + /** + Test whether a value is a native Element + @method _isElement + @private + @param {Value to test} test + @returns {boolean} True if Element + */ + function _isElement(test) { + if (typeof HTMLElement === 'object') { + return test instanceof HTMLElement; + } + + return typeof test === 'object' && test.nodeType === 1 && typeof test.nodeName === 'string'; + } + + /** + Abosolutizes a relative URL + @method _absolutizeURI + @private + @param {e.g., location.href} base + @param {URL to absolutize} href + @returns {string} URL + Source: https://gist.github.com/Yaffle/1088850 + Tests: http://skew.org/uri/uri_tests.html + */ + function _absolutizeURI(base, href) { // RFC 3986 + function removeDotSegments(input) { + var output = []; + input.replace(/^(\.\.?(\/|$))+/, '') + .replace(/\/(\.(\/|$))+/g, '/') + .replace(/\/\.\.$/, '/../') + .replace(/\/?[^\/]*/g, function(p) { + if (p === '/..') { + output.pop(); + } else { + output.push(p); + } + }); + return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); + } + + href = _parseURI(href || ''); + base = _parseURI(base || ''); + + return !href || !base ? null : (href.protocol || base.protocol) + + (href.protocol || href.authority ? href.authority : base.authority) + + removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + + (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + + href.hash; + } + + /** + Parses URI + @method _parseURI + @private + @param {The URL to parse} url + @returns {Parsed URL} string + Source: https://gist.github.com/Yaffle/1088850 + Tests: http://skew.org/uri/uri_tests.html + */ + function _parseURI(url) { + var whitespacePattern = /^\s+|\s+$/g; + var uriPattern = /^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/; + var match = String(url).replace(whitespacePattern, '').match(uriPattern); - /** - * Abosolutizes a relative URL - * @method _absolutizeURI - * @private - * @param {e.g., location.href} base - * @param {URL to absolutize} href - * @returns {string} URL - * Source: https://gist.github.com/Yaffle/1088850 - * Tests: http://skew.org/uri/uri_tests.html - */ - var _absolutizeURI = function(base, href) {// RFC 3986 + if (match) { + return { + href: match[0] || '', + protocol: match[1] || '', + authority: match[2] || '', + host: match[3] || '', + hostname: match[4] || '', + port: match[5] || '', + pathname: match[6] || '', + search: match[7] || '', + hash: match[8] || '' + }; + } + } - function removeDotSegments(input) { - var output = []; - input.replace(/^(\.\.?(\/|$))+/, '') - .replace(/\/(\.(\/|$))+/g, '/') - .replace(/\/\.\.$/, '/../') - .replace(/\/?[^\/]*/g, function (p) { - if (p === '/..') { - output.pop(); - } else { - output.push(p); - } - }); - return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); - } + return { + /** + A function to pass into F2.stringify which will prevent circular + reference errors when serializing objects + @method appConfigReplacer + */ + appConfigReplacer: function(key, value) { + if (key == 'root' || key == 'ui' || key == 'height') { + return undefined; + } else { + return value; + } + }, + /** + The apps namespace is a place for app developers to put the javascript + class that is used to initialize their app. The javascript classes should + be namepaced with the {{#crossLink "F2.AppConfig"}}{{/crossLink}}.appId. + It is recommended that the code be placed in a closure to help keep the + global namespace clean. + If the class has an 'init' function, that function will be called + automatically by F2. + @property Apps + @type object + @for F2 + @example + F2.Apps['com_example_helloworld'] = (function() { + var App_Class = function(appConfig, appContent, root) { + this._app = appConfig; // the F2.AppConfig object + this._appContent = appContent // the F2.AppManifest.AppContent object + this.$root = $(root); // the root DOM Element that contains this app + } - href = _parseURI(href || ''); - base = _parseURI(base || ''); + App_Class.prototype.init = function() { + // perform init actions + } - return !href || !base ? null : (href.protocol || base.protocol) + - (href.protocol || href.authority ? href.authority : base.authority) + - removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + - (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + - href.hash; - }; + return App_Class; + })(); + @example + F2.Apps['com_example_helloworld'] = function(appConfig, appContent, root) { + return { + init: function() { + // Perform init actions + } + }; + }; + */ + Apps: {}, + /** + Creates a namespace on F2 and copies the contents of an object into that + namespace optionally overwriting existing properties. + @method extend + @param {string} ns The namespace to create. Pass a falsy value to + add properties to the F2 namespace directly. + @param {object} obj The object to copy into the namespace. + @param {bool} overwrite True if object properties should be overwritten + @return {object} The created object + */ + extend: function(ns, obj, overwrite) { + var isFunc = typeof obj === 'function'; + var parts = ns ? ns.split('.') : []; + var parent = this; + obj = obj || {}; - /** - * Parses URI - * @method _parseURI - * @private - * @param {The URL to parse} url - * @returns {Parsed URL} string - * Source: https://gist.github.com/Yaffle/1088850 - * Tests: http://skew.org/uri/uri_tests.html - */ - var _parseURI = function(url) { - var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); - // authority = '//' + user + ':' + pass '@' + hostname + ':' port - return (m ? { - href : m[0] || '', - protocol : m[1] || '', - authority: m[2] || '', - host : m[3] || '', - hostname : m[4] || '', - port : m[5] || '', - pathname : m[6] || '', - search : m[7] || '', - hash : m[8] || '' - } : null); - }; + // Ignore leading global + if (parts[0] === 'F2') { + parts = parts.slice(1); + } - return { - /** - * A function to pass into F2.stringify which will prevent circular - * reference errors when serializing objects - * @method appConfigReplacer - */ - appConfigReplacer: function(key, value) { - if (key == 'root' || key == 'ui' || key == 'height') { - return undefined; - } else { - return value; - } - }, - /** - * The apps namespace is a place for app developers to put the javascript - * class that is used to initialize their app. The javascript classes should - * be namepaced with the {{#crossLink "F2.AppConfig"}}{{/crossLink}}.appId. - * It is recommended that the code be placed in a closure to help keep the - * global namespace clean. - * - * If the class has an 'init' function, that function will be called - * automatically by F2. - * @property Apps - * @type object - * @example - * F2.Apps["com_example_helloworld"] = (function() { - * var App_Class = function(appConfig, appContent, root) { - * this._app = appConfig; // the F2.AppConfig object - * this._appContent = appContent // the F2.AppManifest.AppContent object - * this.$root = $(root); // the root DOM Element that contains this app - * } - * - * App_Class.prototype.init = function() { - * // perform init actions - * } - * - * return App_Class; - * })(); - * @example - * F2.Apps["com_example_helloworld"] = function(appConfig, appContent, root) { - * return { - * init:function() { - * // perform init actions - * } - * }; - * }; - * @for F2 - */ - Apps: {}, - /** - * Creates a namespace on F2 and copies the contents of an object into - * that namespace optionally overwriting existing properties. - * @method extend - * @param {string} ns The namespace to create. Pass a falsy value to - * add properties to the F2 namespace directly. - * @param {object} obj The object to copy into the namespace. - * @param {bool} overwrite True if object properties should be overwritten - * @return {object} The created object - */ - extend: function (ns, obj, overwrite) { - var isFunc = typeof obj === 'function'; - var parts = ns ? ns.split('.') : []; - var parent = this; - obj = obj || {}; - - // ignore leading global - if (parts[0] === 'F2') { - parts = parts.slice(1); - } + // Create namespaces + for (var i = 0, len = parts.length; i < len; i++) { + if (!parent[parts[i]]) { + parent[parts[i]] = isFunc && (i + 1 === len) ? obj : {}; + } + parent = parent[parts[i]]; + } - // create namespaces - for (var i = 0, len = parts.length; i < len; i++) { - if (!parent[parts[i]]) { - parent[parts[i]] = isFunc && i + 1 == len ? obj : {}; - } - parent = parent[parts[i]]; - } + // Copy object into namespace + if (!isFunc) { + for (var prop in obj) { + if (parent[prop] === undefined || overwrite) { + parent[prop] = obj[prop]; + } + } + } - // copy object into namespace - if (!isFunc) { - for (var prop in obj) { - if (typeof parent[prop] === 'undefined' || overwrite) { - parent[prop] = obj[prop]; - } - } - } + return parent; + }, + /** + Generates a somewhat random id + @method guid + @return {string} A random id + @for F2 + */ + guid: function() { + function s4() { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + } + return (s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4()); + }, + /** + Search for a value within an array. + @method inArray + @param {object} value The value to search for + @param {Array} array The array to search + @return {bool} True if the item is in the array + */ + inArray: function(value, array) { + return jQuery.inArray(value, array) > -1; + }, + /** + Tests a URL to see if it's on the same domain (local) or not + @method isLocalRequest + @param {URL to test} url + @returns {bool} Whether the URL is local or not + Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js + */ + isLocalRequest: function(url) { + var urlLower = url.toLowerCase(); + var relUrlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var parts = relUrlPattern.execute(urlLower); + var ajaxLocation; + var ajaxLocParts; - return parent; - }, - /** - * Generates a somewhat random id - * @method guid - * @return {string} A random id - * @for F2 - */ - guid: function() { - var S4 = function() { - return (((1+Math.random())*0x10000)|0).toString(16).substring(1); - }; - return (S4()+S4()+'-'+S4()+'-'+S4()+'-'+S4()+'-'+S4()+S4()+S4()); - }, - /** - * Search for a value within an array. - * @method inArray - * @param {object} value The value to search for - * @param {Array} array The array to search - * @return {bool} True if the item is in the array - */ - inArray: function(value, array) { - return jQuery.inArray(value, array) > -1; - }, - /** - * Tests a URL to see if it's on the same domain (local) or not - * @method isLocalRequest - * @param {URL to test} url - * @returns {bool} Whether the URL is local or not - * Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js - */ - isLocalRequest: function(url){ - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - urlLower = url.toLowerCase(), - parts = rurl.exec( urlLower ), - ajaxLocation, - ajaxLocParts; + try { + ajaxLocation = location.href; + } catch ( e ) { + // Use the href of an anchor since IE account for document.location + ajaxLocation = document.createElement('a'); + ajaxLocation.href = ''; + ajaxLocation = ajaxLocation.href; + } - try { - ajaxLocation = location.href; - } catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement('a'); - ajaxLocation.href = ''; - ajaxLocation = ajaxLocation.href; - } + ajaxLocation = ajaxLocation.toLowerCase(); - ajaxLocation = ajaxLocation.toLowerCase(); + // The url is relative, so we'll fully qualify it and re-regex + if (!parts) { + urlLower = _absolutizeURI(ajaxLocation, urlLower).toLowerCase(); + parts = relUrlPattern.exec(urlLower); + } - // uh oh, the url must be relative - // make it fully qualified and re-regex url - if (!parts){ - urlLower = _absolutizeURI(ajaxLocation,urlLower).toLowerCase(); - parts = rurl.exec( urlLower ); - } + // Segment location into parts + ajaxLocParts = relUrlPattern.exec(ajaxLocation) || []; - // Segment location into parts - ajaxLocParts = rurl.exec( ajaxLocation ) || []; + // Do hostname and protocol and port of manifest URL match location.href? + var matched = !(parts && + (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || + (parts[3] || (parts[1] === 'http:' ? '80' : '443')) !== + (ajaxLocParts[3] || (ajaxLocParts[1] === 'http:' ? '80' : '443')))); - // do hostname and protocol and port of manifest URL match location.href? (a "local" request on the same domain) - var matched = !(parts && - (parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - (parts[ 3 ] || (parts[ 1 ] === 'http:' ? '80' : '443')) !== - (ajaxLocParts[ 3 ] || (ajaxLocParts[ 1 ] === 'http:' ? '80' : '443')))); - - return matched; - }, - /** - * Utility method to determine whether or not the argument passed in is or is not a native dom node. - * @method isNativeDOMNode - * @param {object} testObject The object you want to check as native dom node. - * @return {bool} Returns true if the object passed is a native dom node. - */ - isNativeDOMNode: function(testObject) { - var bIsNode = ( - typeof Node === 'object' ? testObject instanceof Node : - testObject && typeof testObject === 'object' && typeof testObject.nodeType === 'number' && typeof testObject.nodeName === 'string' - ); - - var bIsElement = ( - typeof HTMLElement === 'object' ? testObject instanceof HTMLElement : //DOM2 - testObject && typeof testObject === 'object' && testObject.nodeType === 1 && typeof testObject.nodeName === 'string' - ); - - return (bIsNode || bIsElement); - }, - /** - * A utility logging function to write messages or objects to the browser console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). - * @method log - * @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). - * @param {object} [obj2]* An object to be logged - * @example - * // Pass any value (string, int, array, object, bool). - * F2.log('foo'); - * F2.log([1, 2, 3]); - * @example - * // Use a console method name as the first argument. - * F2.log('error', err); - * F2.log('info', 'The session ID is ' + sessionId); - */ - log: function() { - if (!window.console) { - return; - } + return matched; + }, + /** + Utility method to determine whether or not the argument passed in is or + is not a native DOM node. + @method isNativeDOMNode + @param {object} testObject The object you want to check as native DOM + node. + @return {bool} Returns true if the object passed is a native DOM node. + */ + isNativeDOMNode: function(testObject) { + return _isNode(testObject) || _isElement(testObject); + }, + /** + A utility logging function to write messages or objects to the browser + console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). + @method log + @param {object|string} Object/Method An object to be logged _or_ a + `console` API method name, such as `warn` or `error`. All of the console + method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). + @param {object} [obj2]* An object to be logged + @example + Pass any value (string, int, array, object, bool). + F2.log('foo'); + F2.log([1, 2, 3]); + @example + Use a console method name as the first argument. + F2.log('error', err); + F2.log('info', 'The session ID is ' + sessionId); + */ + log: function() { + if (!window.console) { + return; + } - var method = 'log'; - var args = Array.prototype.slice.apply(arguments); + var method = 'log'; + var args = Array.prototype.slice.apply(arguments); - if (args.length > 1 && args[0] in window.console) { - method = args.shift(); - } + if (args.length > 1 && args[0] in window.console) { + method = args.shift(); + } - if (window.console[method]) { - window.console[method].apply(window.console, args); - } - }, - /** - * Wrapper to convert a JSON string to an object - * @method parse - * @param {string} str The JSON string to convert - * @return {object} The parsed object - */ - parse: function(str) { - return JSON.parse(str); - }, - /** - * Wrapper to convert an object to JSON - * - * **Note: When using F2.stringify on an F2.AppConfig object, it is - * recommended to pass F2.appConfigReplacer as the replacer function in - * order to prevent circular serialization errors.** - * @method stringify - * @param {object} value The object to convert - * @param {function|Array} replacer An optional parameter that determines - * how object values are stringified for objects. It can be a function or an - * array of strings. - * @param {int|string} space An optional parameter that specifies the - * indentation of nested structures. If it is omitted, the text will be - * packed without extra whitespace. If it is a number, it will specify the - * number of spaces to indent at each level. If it is a string (such as '\t' - * or ' '), it contains the characters used to indent at each level. - * @return {string} The JSON string - */ - stringify: function(value, replacer, space) { - return JSON.stringify(value, replacer, space); - }, - /** - * Function to get the F2 version number - * @method version - * @return {string} F2 version number - */ - version: function() { return '<%= version%>'; } - }; + if (window.console[method]) { + window.console[method].apply(window.console, args); + } + }, + /** + Wrapper to convert a JSON string to an object + @method parse + @param {string} str The JSON string to convert + @return {object} The parsed object + */ + parse: function(str) { + return JSON.parse(str); + }, + /** + Wrapper to convert an object to JSON + **Note: When using F2.stringify on an F2.AppConfig object, it is + recommended to pass F2.appConfigReplacer as the replacer function in + order to prevent circular serialization errors.** + @method stringify + @param {object} value The object to convert + @param {function|Array} replacer An optional parameter that determines + how object values are stringified for objects. It can be a function or an + array of strings. + @param {int|string} space An optional parameter that specifies the + indentation of nested structures. If it is omitted, the text will be + packed without extra whitespace. If it is a number, it will specify the + number of spaces to indent at each level. If it is a string (such as '\t' + or ' '), it contains the characters used to indent at each level. + @return {string} The JSON string + */ + stringify: function(value, replacer, space) { + return JSON.stringify(value, replacer, space); + }, + /** + Function to get the F2 version number + @method version + @return {string} F2 version number + */ + version: function() { + return '<%= version%>'; + } + }; })(); From 694e5f0c46b196827aae0deaf1c339d0eabfa919 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 09:40:40 -0700 Subject: [PATCH 06/61] Fixing app handlers styling --- src/lib/app_handlers.js | 1041 ++++++++++++++++++++------------------- 1 file changed, 521 insertions(+), 520 deletions(-) diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index d689cf37..7c072aad 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -1,527 +1,528 @@ /** - * The new `AppHandlers` functionality provides Container Developers a higher level of control over configuring app rendering and interaction. - * - *

- *The addition of `F2.AppHandlers` replaces the previous {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} properties `beforeAppRender`, `appRender`, and `afterAppRender`. These methods were deprecated—but not removed—in version 1.2. They will be permanently removed in a future version of F2. - *

- * - *

- *Starting with F2 version 1.2, `AppHandlers` is the preferred method for Container Developers to manage app layout. - *

- * - * ### Order of Execution - * - * **App Rendering** - * - * 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. - * 1. **'appCreateRoot'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_CREATE\_ROOT*) handlers are fired in the order they were attached. - * 2. **'appRenderBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_BEFORE*) handlers are fired in the order they were attached. - * 3. Each app's `manifestUrl` is requested asynchronously; on success the following methods are fired. - * 3. **'appRender'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER*) handlers are fired in the order they were attached. - * 4. **'appRenderAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_AFTER*) handlers are fired in the order they were attached. - * - * - * **App Removal** - - * 0. {{#crossLink "F2/removeApp"}}F2.removeApp(){{/crossLink}} with a specific {{#crossLink "F2.AppConfig/instanceId "}}{{/crossLink}} or {{#crossLink "F2/removeAllApps"}}F2.removeAllApps(){{/crossLink}} method is called by the Container Developer and the following methods are run. - * 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. - * 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. - * 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - * - * **Error Handling** - - * 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - * - * @class F2.AppHandlers - */ + The new `AppHandlers` functionality provides Container Developers a higher + level of control over configuring app rendering and interaction. + +

+ The addition of `F2.AppHandlers` replaces the previous {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} properties `beforeAppRender`, `appRender`, and `afterAppRender`. These methods were deprecated—but not removed—in version 1.2. They will be permanently removed in a future version of F2. +

+ +

+ Starting with F2 version 1.2, `AppHandlers` is the preferred method for + Container Developers to manage app layout. +

+ + ### Order of Execution + + **App Rendering** + + 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. + 1. **'appCreateRoot'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_CREATE\_ROOT*) handlers are fired in the order they were attached. + 2. **'appRenderBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_BEFORE*) handlers are fired in the order they were attached. + 3. Each app's `manifestUrl` is requested asynchronously; on success the following methods are fired. + 3. **'appRender'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER*) handlers are fired in the order they were attached. + 4. **'appRenderAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_AFTER*) handlers are fired in the order they were attached. + + **App Removal** + + 0. {{#crossLink "F2/removeApp"}}F2.removeApp(){{/crossLink}} with a specific {{#crossLink "F2.AppConfig/instanceId "}}{{/crossLink}} or {{#crossLink "F2/removeAllApps"}}F2.removeAllApps(){{/crossLink}} method is called by the Container Developer and the following methods are run. + 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. + 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. + 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. + + **Error Handling** + + 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. + + @class F2.AppHandlers +*/ F2.extend('AppHandlers', (function() { - // The hidden token that we will check against every time someone tries to add, remove, fire handler - var _containerToken = F2.guid(); - var _f2Token = F2.guid(); - - var _handlerCollection = { - appCreateRoot: [], - appRenderBefore: [], - appDestroyBefore: [], - appRenderAfter: [], - appDestroyAfter: [], - appRender: [], - appDestroy: [], - appScriptLoadFailed: [] - }; - - var _defaultMethods = { - appRender: function(appConfig, appHtml) { - // If no app root is defined use the app's outer most node - if (F2.isNativeDOMNode(appConfig.root)) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } - - document.body.appendChild(appConfig.root); - }, - appDestroy: function(appInstance) { - if (appInstance.app && appInstance.app.destroy) { - if (typeof appInstance.app.destroy === 'function') { - appInstance.app.destroy(); - } else { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - } - } - - jQuery(appInstance.config.root).fadeOut(500, function() { - jQuery(this).remove(); - }); - } - }; - - function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { - _validateToken(token); - - var handler = { - domNode: null, - func: null, - namespace: namespace - }; - - if (F2.isNativeDOMNode(fnOrNode)) { - handler.domNode = fnOrNode; - } else if (typeof fnOrNode === 'function') { - handler.func = fnOrNode; - } - - if (!handler.func && !handler.domNode) { - throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); - } - - if (handler.domNode && !domNodeAppropriate) { - throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); - } - - return handler; - } - - // Token must match F2 or container - function _validateToken(token) { - if (_containerToken !== token && _f2Token !== token) { - throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); - } - } - - // Token must match F2 - function _validateF2Token(token) { - if (token != _f2Token) { - throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); - } - } - - function _filterHandlersByNamespace(handlers, namespace) { - var newHandlers = handlers.slice(); - - for (var i = newHandlers.length; i >= 0; i--) { - if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { - newHandlers.splice(i, 1); - } - } - - return newHandlers; - } - - function _removeHandler(token, eventKey, namespace) { - _validateToken(token); - - if (namespace) { - namespace = namespace.toLowerCase(); - - if (eventKey && eventKey in _handlerCollection) { - _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); - } else { - for (var key in _handlerCollection) { - _removeHandler(token, key, namespace); - } - } - } else if (eventKey) { - _handlerCollection[eventKey] = []; - } - } - - function _parseEventKey(eventKey) { - var namespace = ''; - - if (eventKey.indexOf('.') !== -1) { - var eventParts = eventKey.split('.'); - eventKey = eventParts[0]; - namespace = eventParts[1]; - } - - return { - key: eventKey, - namespace: namespace - }; - } - - return { - /** - * Allows Container Developer to retrieve a unique token which must be - * passed to all `on` and `off` methods. This function will self destruct - * and can only be called one time. Container Developers must store the - * return value inside of a closure. - * @method getToken - */ - getToken: function() { - /** - * Delete this method for security that way only the container has - * access to the token 1 time. Kind of Ethan Hunt-ish, this message will - * self-destruct immediately. - */ - delete this.getToken; - return _containerToken; - }, - /** - * Allows F2 to get a token internally. Token is required to call - * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This - * function will self destruct to eliminate other sources from using the - * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and - * additional internal methods. - * @method __f2GetToken - * @private - */ - __f2GetToken: function() { - /** - * Delete this method for security that way only the container has - * access to the token 1 time. Kind of Ethan Hunt-ish, this message will - * self-destruct immediately. - */ - delete this.__f2GetToken; - return _f2Token; - }, - /** - * Allows F2 to trigger specific events internally. - * @method __trigger - * @private - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. - * @param {String} eventKey The event to fire. The complete list of event - * keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - */ - __trigger: function(token, eventKey) { - _validateF2Token(token); - - if (!_handlerCollection[eventKey]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } - - var callbackArgs = Array.prototype.slice.call(arguments, 2); - - if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { - _defaultMethods[eventKey].apply(F2, callbackArgs); - } else { - for (var i = 0; i < _handlerCollection[eventKey].length; i++) { - var handler = _handlerCollection[eventKey][i]; - - // Check for appRender - if (handler.domNode && arguments.length >= 4) { - var appConfig = arguments[2]; - var appHtml = arguments[3]; - - if (appConfig.root) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } - - jQuery(handler.domNode).append(appConfig.root); - } else { - handler.func.apply(F2, callbackArgs); - } - } - } - - return this; - }, - /** - * Allows Container Developer to add listener method that will be triggered - * when a specific event occurs. - * @method on - * @chainable - * @param {String} token The token received from - * {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine - * which event to attach the listener to. The namespace is useful for - * removal purposes. At this time it does not affect when an event is fired. - * Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @param {Function|Element} listener A function that will be triggered - * when a specific event occurs. Optionally, a specific DOM element to - * which the app will be appended can be passed. For detailed argument - * definition refer to - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * 'appRenderBefore', - * function() { - * F2.log('before app rendered!'); - * } - * ); - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * 'appRenderBefore.myNamespace', - * function() { - * F2.log('before app rendered!'); - * } - * ); - */ - on: function(token, eventKey, listener) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - var event = _parseEventKey(eventKey); - - if (!_handlerCollection[event.key]) { - throw new Error('Invalid eventKey passed. Check your inputs and try again.'); - } - - var isAppRender = (event.key === 'appRender'); - var handler = _createHandler(token, event.namespace, listener, isAppRender); - _handlerCollection[event.key].push(handler); - - return this; - }, - /** - * Allows Container Developer to remove listener methods for specific events - * @method off - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine - * which event to attach the listener to. If no namespace is provided all - * listeners for the specified event type will be removed. Complete list - * available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.off(token, 'appRenderBefore'); - */ - off: function(token, eventKey) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - var event = _parseEventKey(eventKey); - - if (!_handlerCollection[event.key]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } - - _removeHandler(token, event.key, event.namespace); - - return this; - } - }; + // Token used when adding, removing, or triggering handlers + var _containerToken = F2.guid(); + var _f2Token = F2.guid(); + + var _handlerCollection = { + appCreateRoot: [], + appRenderBefore: [], + appDestroyBefore: [], + appRenderAfter: [], + appDestroyAfter: [], + appRender: [], + appDestroy: [], + appScriptLoadFailed: [] + }; + + var _defaultMethods = { + appRender: function(appConfig, appHtml) { + // If no app root is defined use the app's outer most node + if (F2.isNativeDOMNode(appConfig.root)) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } + + document.body.appendChild(appConfig.root); + }, + appDestroy: function(appInstance) { + if (appInstance.app && appInstance.app.destroy) { + if (typeof appInstance.app.destroy === 'function') { + appInstance.app.destroy(); + } else { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } + } + + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + }; + + function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { + _validateToken(token); + + var handler = { + domNode: null, + func: null, + namespace: namespace + }; + + if (F2.isNativeDOMNode(fnOrNode)) { + handler.domNode = fnOrNode; + } else if (typeof fnOrNode === 'function') { + handler.func = fnOrNode; + } + + if (!handler.func && !handler.domNode) { + throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); + } + + if (handler.domNode && !domNodeAppropriate) { + throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + } + + return handler; + } + + // Token must match F2 or container + function _validateToken(token) { + if (_containerToken !== token && _f2Token !== token) { + throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); + } + } + + // Token must match F2 + function _validateF2Token(token) { + if (token != _f2Token) { + throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); + } + } + + function _filterHandlersByNamespace(handlers, namespace) { + var newHandlers = handlers.slice(); + + for (var i = newHandlers.length; i >= 0; i--) { + if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { + newHandlers.splice(i, 1); + } + } + + return newHandlers; + } + + function _removeHandler(token, eventKey, namespace) { + _validateToken(token); + + if (namespace) { + namespace = namespace.toLowerCase(); + + if (eventKey && eventKey in _handlerCollection) { + _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); + } else { + for (var key in _handlerCollection) { + _removeHandler(token, key, namespace); + } + } + } else if (eventKey) { + _handlerCollection[eventKey] = []; + } + } + + function _parseEventKey(eventKey) { + var namespace = ''; + + if (eventKey.indexOf('.') !== -1) { + var eventParts = eventKey.split('.'); + eventKey = eventParts[0]; + namespace = eventParts[1]; + } + + return { + key: eventKey, + namespace: namespace + }; + } + + return { + /** + Allows Container Developer to retrieve a unique token which must be + passed to all `on` and `off` methods. This function will self destruct + and can only be called one time. Container Developers must store the + return value inside of a closure. + @method getToken + */ + getToken: function() { + /** + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.getToken; + return _containerToken; + }, + /** + Allows F2 to get a token internally. Token is required to call + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This + function will self destruct to eliminate other sources from using the + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and + additional internal methods. + @method __f2GetToken + @private + */ + __f2GetToken: function() { + /** + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.__f2GetToken; + return _f2Token; + }, + /** + Allows F2 to trigger specific events internally. + @method __trigger + @private + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. + @param {String} eventKey The event to fire. The complete list of event + keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + */ + __trigger: function(token, eventKey) { + _validateF2Token(token); + + if (!_handlerCollection[eventKey]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } + + var callbackArgs = Array.prototype.slice.call(arguments, 2); + + if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { + _defaultMethods[eventKey].apply(F2, callbackArgs); + } else { + for (var i = 0; i < _handlerCollection[eventKey].length; i++) { + var handler = _handlerCollection[eventKey][i]; + + // Check for appRender + if (handler.domNode && arguments.length >= 4) { + var appConfig = arguments[2]; + var appHtml = arguments[3]; + + if (appConfig.root) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } + + jQuery(handler.domNode).append(appConfig.root); + } else { + handler.func.apply(F2, callbackArgs); + } + } + } + + return this; + }, + /** + Allows Container Developer to add listener method that will be triggered + when a specific event occurs. + @method on + @chainable + @param {String} token The token received from + {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. The namespace is useful for + removal purposes. At this time it does not affect when an event is fired. + Complete list of event keys available in + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @param {Function} listener A function that will be triggered when a + specific event occurs. For detailed argument definition refer to + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + 'appRenderBefore' + function() { + F2.log('before app rendered!'); + } + ); + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + 'appRenderBefore.myNamespace', + function() { + F2.log('before app rendered!'); + } + ); + */ + on: function(token, eventKey, listener) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid eventKey passed. Check your inputs and try again.'); + } + + var isAppRender = (event.key === 'appRender'); + var handler = _createHandler(token, event.namespace, listener, isAppRender); + _handlerCollection[event.key].push(handler); + + return this; + }, + /** + Allows Container Developer to remove listener methods for specific events + @method off + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. If no namespace is provided all + listeners for the specified event type will be removed. Complete list + available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.off(token, 'appRenderBefore'); + */ + off: function(token, eventKey) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } + + _removeHandler(token, event.key, event.namespace); + + return this; + } + }; })()); F2.extend('Constants', { - /** - * A convenient collection of all available appHandler events. - * @class F2.Constants.AppHandlers - **/ - AppHandlers: { - /** - * Equivalent to `appCreateRoot`. Identifies the create root method for use - * in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - * @property APP_CREATE_ROOT - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_CREATE_ROOT, - * function(appConfig) { - * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. - * // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER - * appConfig.root = jQuery('
').get(0); - * } - * ); - */ - APP_CREATE_ROOT: 'appCreateRoot', - /** - * Equivalent to `appRenderBefore`. Identifies the before app render method - * for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - * @property APP_RENDER_BEFORE - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER_BEFORE, - * function(appConfig) { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_BEFORE: 'appRenderBefore', - /** - * Equivalent to `appRender`. Identifies the app render method for use in - * AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, - * [appHtml](../../app-development.html#app-design)). - * @property APP_RENDER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER, - * function(appConfig, appHtml) { - * var $root; - * - * // If no app root is defined use the app's outer most node - * if (!F2.isNativeDOMNode(appConfig.root)) { - * appConfig.root = jQuery(appHtml).get(0); - * // Get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * } else { - * // Get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * // Append the app html to the root - * $root.append(appHtml); - * } - * - * // Append the root to the body by default. - * jQuery('body').append($root); - * } - * ); - */ - APP_RENDER: 'appRender', - /** - * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_AFTER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER_AFTER, - * function(appConfig) { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_AFTER: 'appRenderAfter', - /** - * Equivalent to `appDestroyBefore`. Identifies the before app destroy - * method for use in AppHandlers.(on|off). When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * (appInstance). - * @property APP_DESTROY_BEFORE - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - * function(appInstance) { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_BEFORE: 'appDestroyBefore', - /** - * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY, - * function(appInstance) { - * // Call the apps destroy method, if it has one - * if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { - * appInstance.app.destroy(); - * } else if (appInstance && appInstance.app && appInstance.app.destroy) { - * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - * } - * - * // Fade out and remove the root - * jQuery(appInstance.config.root).fadeOut(500, function() { - * jQuery(this).remove(); - * }); - * } - * ); - */ - APP_DESTROY: 'appDestroy', - /** - * Equivalent to `appDestroyAfter`. Identifies the after app destroy method - * for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * (appInstance) - * @property APP_DESTROY_AFTER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY_AFTER, - * function(appInstance) { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_AFTER: 'appDestroyAfter', - /** - * Equivalent to `appScriptLoadFailed`. Identifies the app script load - * failed method for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} - * the listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) - * @property APP_SCRIPT_LOAD_FAILED - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - * function(appConfig, scriptInfo) { - * F2.log(appConfig.appId); - * } - * ); - */ - APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' - } + /** + A convenient collection of all available appHandler events. + @class F2.Constants.AppHandlers + */ + AppHandlers: { + /** + Equivalent to `appCreateRoot`. Identifies the create root method for use + in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_CREATE_ROOT + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_CREATE_ROOT, + function(appConfig) { + // If you want to create a custom root. By default F2 uses the app's outermost HTML element. + // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER + appConfig.root = jQuery('
').get(0); + } + ); + */ + APP_CREATE_ROOT: 'appCreateRoot', + /** + Equivalent to `appRenderBefore`. Identifies the before app render method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_RENDER_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_BEFORE: 'appRenderBefore', + /** + Equivalent to `appRender`. Identifies the app render method for use in + AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, + [appHtml](../../app-development.html#app-design)). + @property APP_RENDER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER, + function(appConfig, appHtml) { + var $root; + + // If no app root is defined use the app's outer most node + if (!F2.isNativeDOMNode(appConfig.root)) { + appConfig.root = jQuery(appHtml).get(0); + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + } else { + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + // Append the app html to the root + $root.append(appHtml); + } + + // Append the root to the body by default. + jQuery('body').append($root); + } + ); + */ + APP_RENDER: 'appRender', + /** + Equivalent to `appRenderAfter`. Identifies the after app render method + for use in AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}) + @property APP_RENDER_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_AFTER: 'appRenderAfter', + /** + Equivalent to `appDestroyBefore`. Identifies the before app destroy + method for use in AppHandlers.(on|off). When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance). + @property APP_DESTROY_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_BEFORE: 'appDestroyBefore', + /** + Equivalent to `appDestroy`. Identifies the app destroy method for use in + AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY, + function(appInstance) { + // Call the apps destroy method, if it has one + if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { + appInstance.app.destroy(); + } else if (appInstance && appInstance.app && appInstance.app.destroy) { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } + + // Fade out and remove the root + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + ); + */ + APP_DESTROY: 'appDestroy', + /** + Equivalent to `appDestroyAfter`. Identifies the after app destroy method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_AFTER: 'appDestroyAfter', + /** + Equivalent to `appScriptLoadFailed`. Identifies the app script load + failed method for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) + @property APP_SCRIPT_LOAD_FAILED + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + function(appConfig, scriptInfo) { + F2.log(appConfig.appId); + } + ); + */ + APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + } }); From 12b5c4981d939fee2d192bfb774ebf9a2b792cc4 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 09:41:10 -0700 Subject: [PATCH 07/61] Fixing 'classes' styling --- src/lib/classes.js | 1023 +++++++++++++++++++++----------------------- 1 file changed, 477 insertions(+), 546 deletions(-) diff --git a/src/lib/classes.js b/src/lib/classes.js index 7ca91a86..e2286cab 100644 --- a/src/lib/classes.js +++ b/src/lib/classes.js @@ -1,548 +1,479 @@ /** - * Class stubs for documentation purposes - * @main F2 - */ + Class stubs for documentation purposes + @main F2 +*/ F2.extend('', { - /** - * The App Class is an optional class that can be namespaced onto the - * {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The - * [F2 Docs](../../app-development.html#app-class) - * has more information on the usage of the App Class. - * @class F2.App - * @constructor - * @param {F2.AppConfig} appConfig The F2.AppConfig object for the app - * @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent - * object - * @param {Element} root The root DOM Element for the app - */ - App: function(appConfig, appContent, root) { - return { - /** - * An optional init function that will automatically be called when - * F2.{{#crossLink "F2\registerApps"}}{{/crossLink}} is called. - * @method init - * @optional - */ - init:function() {} - }; - }, - /** - * The AppConfig object represents an app's meta data - * @class F2.AppConfig - */ - AppConfig: { - /** - * The unique ID of the app. More information can be found - * [here](../../app-development.html#f2-appid) - * @property appId - * @type string - * @required - */ - appId: '', - /** - * An object that represents the context of an app - * @property context - * @type object - */ - context: {}, - /** - * True if the app should be requested in a single request with other apps. - * @property enableBatchRequests - * @type bool - * @default false - */ - enableBatchRequests: false, - /** - * The height of the app. The initial height will be pulled from - * the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object, but later - * modified by calling - * F2.UI.{{#crossLink "F2.UI/updateHeight"}}{{/crossLink}}. This is used - * for secure apps to be able to set the initial height of the iframe. - * @property height - * @type int - */ - height: 0, - /** - * The unique runtime ID of the app. - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property instanceId - * @type string - */ - instanceId: '', - /** - * True if the app will be loaded in an iframe. This property - * will be true if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object - * sets isSecure = true. It will also be true if the - * [container](../../container-development.html) has made the decision to - * run apps in iframes. - * @property isSecure - * @type bool - * @default false - */ - isSecure: false, - /** - * The language and region specification for this container - * represented as an IETF-defined standard language tag, - * e.g. `"en-us"` or `"de-de"`. This is passed during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process. - * - * @property containerLocale - * @type string - * @default null - * @since 1.4.0 - */ - containerLocale: null, - /** - * The languages and regions supported by this app represented - * as an array of IETF-defined standard language tags, - * e.g. `["en-us","de-de"]`. - * - * @property localeSupport - * @type array - * @default [] - * @since 1.4.0 - */ - localeSupport: [], - /** - * The url to retrieve the {{#crossLink "F2.AppManifest"}}{{/crossLink}} - * object. - * @property manifestUrl - * @type string - * @required - */ - manifestUrl: '', - /** - * The recommended maximum width in pixels that this app should be run. - * **It is up to the [container](../../container-development.html) to - * implement the logic to prevent an app from being run when the maxWidth - * requirements are not met.** - * @property maxWidth - * @type int - */ - maxWidth: 0, - /** - * The recommended minimum grid size that this app should be run. This - * value corresponds to the 12-grid system that is used by the - * [container](../../container-development.html). This property should be - * set by apps that require a certain number of columns in their layout. - * @property minGridSize - * @type int - * @default 4 - */ - minGridSize: 4, - /** - * The recommended minimum width in pixels that this app should be run. **It - * is up to the [container](../../container-development.html) to implement - * the logic to prevent an app from being run when the minWidth requirements - * are not met. - * @property minWidth - * @type int - * @default 300 - */ - minWidth: 300, - /** - * The name of the app - * @property name - * @type string - * @required - */ - name: '', - /** - * The root DOM element that contains the app - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property root - * @type Element - */ - root: undefined, - /** - * The instance of F2.UI providing easy access to F2.UI methods - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property ui - * @type F2.UI - */ - ui: undefined, - /** - * The views that this app supports. Available views - * are defined in {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The - * presence of a view can be checked via - * F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: - * - * F2.inArray(F2.Constants.Views.SETTINGS, app.views) - * - * @property views - * @type Array - */ - views: [] - }, - /** - * The assets needed to render an app on the page - * @class F2.AppManifest - */ - AppManifest: { - /** - * The array of {{#crossLink "F2.AppManifest.AppContent"}}{{/crossLink}} - * objects - * @property apps - * @type Array - * @required - */ - apps: [], - /** - * Any inline javascript tha should initially be run - * @property inlineScripts - * @type Array - * @optional - */ - inlineScripts: [], - /** - * Urls to javascript files required by the app - * @property scripts - * @type Array - * @optional - */ - scripts: [], - /** - * Urls to CSS files required by the app - * @property styles - * @type Array - * @optional - */ - styles: [] - }, - /** - * The AppContent object - * @class F2.AppManifest.AppContent - **/ - AppContent: { - /** - * Arbitrary data to be passed along with the app - * @property data - * @type object - * @optional - */ - data: {}, - /** - * The string of HTML representing the app - * @property html - * @type string - * @required - */ - html: '', - /** - * A status message - * @property status - * @type string - * @optional - */ - status: '' - }, - /** - * An object containing configuration information for the - * [container](../../container-development.html) - * @class F2.ContainerConfig - */ - ContainerConfig: { - /** - * Allows the [container](../../container-development.html) to override how - * an app's html is inserted into the page. The function should accept an - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of - * html - * @method afterAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html representing the app - * @return {Element} The DOM Element surrounding the app - */ - afterAppRender: function(appConfig, html) {}, - /** - * Allows the [container](../../container-development.html) to wrap an app - * in extra html. The function should accept an - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of - * html. The extra html can provide links to edit app settings and remove an - * app from the container. See - * {{#crossLink "F2.Constants.Css"}}{{/crossLink}} for CSS classes that - * should be applied to elements. - * @method appRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html representing the app - */ - appRender: function(appConfig, html) {}, - /** - * Allows the container to render html for an app before the AppManifest for - * an app has loaded. This can be useful if the design calls for loading - * icons to appear for each app before each app is loaded and rendered to - * the page. - * @method beforeAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {Element} The DOM Element surrounding the app - */ - beforeAppRender: function(appConfig) {}, - /** - * True to enable debug mode in F2.js. Adds additional logging, resource cache busting, etc. - * @property debugMode - * @type bool - * @default false - */ - debugMode: false, - /** - * The default language and region specification for this container - * represented as an IETF-defined standard language tag, - * e.g. `"en-us"` or `"de-de"`. This value is passed to each app - * registered as `containerLocale`. - * - * @property locale - * @type string - * @default null - * @since 1.4.0 - */ - locale: null, - /** - * Milliseconds before F2 fires callback on script resource load errors. Due to issue with the way Internet Explorer attaches load events to script elements, the error event doesn't fire. - * @property scriptErrorTimeout - * @type milliseconds - * @default 7000 (7 seconds) - */ - scriptErrorTimeout: 7000, - /** - * Tells the container that it is currently running within - * a secure app page - * @property isSecureAppPage - * @type bool - */ - isSecureAppPage: false, - /** - * Allows the container to specify which page is used when - * loading a secure app. The page must reside on a different domain than the - * container - * @property secureAppPagePath - * @type string - * @for F2.ContainerConfig - */ - secureAppPagePath: '', - /** - * Specifies what views a container will provide buttons - * or links to. Generally, the views will be switched via buttons or links - * in the app's header. - * @property supportedViews - * @type Array - * @required - */ - supportedViews: [], - /** - * An object containing configuration defaults for F2.UI - * @class F2.ContainerConfig.UI - */ - UI: { - /** - * An object containing configuration defaults for the - * F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} and - * F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. - * @class F2.ContainerConfig.UI.Mask - */ - Mask: { - /** - * The backround color of the overlay - * @property backgroundColor - * @type string - * @default #FFF - */ - backgroundColor: '#FFF', - /** - * The path to the loading icon - * @property loadingIcon - * @type string - */ - loadingIcon: '', - /** - * The opacity of the background overlay - * @property opacity - * @type int - * @default 0.6 - */ - opacity: 0.6, - /** - * Do not use inline styles for mask functinality. Instead classes will - * be applied to the elements and it is up to the container provider to - * implement the class definitions. - * @property useClasses - * @type bool - * @default false - */ - useClasses: false, - /** - * The z-index to use for the overlay - * @property zIndex - * @type int - * @default 2 - */ - zIndex: 2 - } - }, - /** - * Allows the container to fully override how the AppManifest request is - * made inside of F2. - * - * @method xhr - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @param {function} success The function to be called if the request - * succeeds - * @param {function} error The function to be called if the request fails - * @param {function} complete The function to be called when the request - * finishes (after success and error callbacks have been executed) - * @return {XMLHttpRequest} The XMLHttpRequest object (or an object that has - * an `abort` function (such as the jqXHR object in jQuery) to abort the - * request) - * - * @example - * F2.init({ - * xhr: function(url, appConfigs, success, error, complete) { - * $.ajax({ - * url: url, - * type: 'POST', - * data: { - * params: F2.stringify(appConfigs, F2.appConfigReplacer) - * }, - * jsonp: false, // do not put 'callback=' in the query string - * jsonpCallback: F2.Constants.JSONP_CALLBACK + appConfigs[0].appId, // Unique function name - * dataType: 'json', - * success: function(appManifest) { - * // custom success logic - * success(appManifest); // fire success callback - * }, - * error: function() { - * // custom error logic - * error(); // fire error callback - * }, - * complete: function() { - * // custom complete logic - * complete(); // fire complete callback - * } - * }); - * } - * }); - * - * @for F2.ContainerConfig - */ - //xhr: function(url, appConfigs, success, error, complete) {}, - /** - * Allows the container to override individual parts of the AppManifest - * request. See properties and methods with the `xhr.` prefix. - * @property xhr - * @type Object - * - * @example - * F2.init({ - * xhr: { - * url: function(url, appConfigs) { - * return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); - * } - * } - * }); - */ - xhr: { - /** - * Allows the container to override the request data type (JSON or JSONP) - * that is used for the request - * @method xhr.dataType - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The request data type that should be used - * - * @example - * F2.init({ - * xhr: { - * dataType: function(url) { - * return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - * }, - * type: function(url) { - * return F2.isLocalRequest(url) ? 'POST' : 'GET'; - * } - * } - * }); - */ - dataType: function(url, appConfigs) {}, - /** - * Allows the container to override the request method that is used (just - * like the `type` parameter to `jQuery.ajax()`. - * @method xhr.type - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The request method that should be used - * - * @example - * F2.init({ - * xhr: { - * dataType: function(url) { - * return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - * }, - * type: function(url) { - * return F2.isLocalRequest(url) ? 'POST' : 'GET'; - * } - * } - * }); - */ - type: function(url, appConfigs) {}, - /** - * Allows the container to override the url that is used to request an - * app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}} - * @method xhr.url - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The url that should be used for the request - * - * @example - * F2.init({ - * xhr: { - * url: function(url, appConfigs) { - * return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); - * } - * } - * }); - */ - url: function(url, appConfigs) {} - }, - /** - * Allows the container to override the script loader which requests - * dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - * @property loadScripts - * @type function - * - * @example - * F2.init({ - * loadScripts: function(scripts,inlines,callback){ - * //load scripts using $.load() for each script or require(scripts) - * callback(); - * } - * }); - */ - loadScripts: function(scripts,inlines,callback){}, - /** - * Allows the container to override the stylesheet loader which requests - * dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - * @property loadStyles - * @type function - * - * @example - * F2.init({ - * loadStyles: function(styles,callback){ - * //load styles using $.load() for each stylesheet or another method - * callback(); - * } - * }); - */ - loadStyles: function(styles,callback){} - } -}); \ No newline at end of file + /** + The App Class is an optional class that can be namespaced onto the + {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The [F2 Docs](../../app-development.html#app-class) + has more information on the usage of the App Class. + @class F2.App + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object for the app + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object + @param {Element} root The root DOM Element for the app + */ + App: function(appConfig, appContent, root) { + return { + /** + An optional init function that will automatically be called when + F2.{{#crossLink "F2\registerApps"}}{{/crossLink}} is called. + @method init + @optional + */ + init: function() {} + }; + }, + /** + The AppConfig object represents an app's meta data + @class F2.AppConfig + */ + AppConfig: { + /** + The unique ID of the app. More information can be found [here](../../app-development.html#f2-appid). + @property appId + @type string + @required + */ + appId: '', + /** + An object that represents the context of an app. + @property context + @type object + */ + context: {}, + /** + True if the app should be requested in a single request with other apps. + @property enableBatchRequests + @type bool + @default false + */ + enableBatchRequests: false, + /** + The height of the app. The initial height will be pulled from the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object, but later modified by + calling F2.UI.{{#crossLink "F2.UI/updateHeight"}}{{/crossLink}}. This is + used for secure apps to be able to set the initial height of the iframe. + @property height + @type int + */ + height: 0, + /** + The unique runtime ID of the app. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** + @property instanceId + @type string + */ + instanceId: '', + /** + True if the app will be loaded in an iframe. This property will be true + if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object sets + `isSecure = true`. It will also be true if the [container](../../container-development.html) + has made the decision to run apps in iframes. + @property isSecure + @type bool + @default false + */ + isSecure: false, + /** + The language and region specification for this container represented as + an IETF-defined standard language tag, e.g. `"en-us"` or `"de-de"`. This + is passed during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} + process. + @property containerLocale + @type string + @default null + @since 1.4.0 + */ + containerLocale: null, + /** + The languages and regions supported by this app represented as an array + of IETF-defined standard language tags, e.g. `["en-us","de-de"]`. + @property localeSupport + @type array + @default [] + @since 1.4.0 + */ + localeSupport: [], + /** + The url to retrieve the {{#crossLink "F2.AppManifest"}}{{/crossLink}} + object. + @property manifestUrl + @type string + @required + */ + manifestUrl: '', + /** + The recommended maximum width in pixels that this app should be run. **It + is up to the [container](../../container-development.html) to implement + the logic to prevent an app from being run when the maxWidth requirements + are not met.** + @property maxWidth + @type int + */ + maxWidth: 0, + /** + The recommended minimum grid size that this app should be run. This value + corresponds to the 12-grid system that is used by the [container](../../container-development.html). + This property should be set by apps that require a certain number of + columns in their layout. + @property minGridSize + @type int + @default 4 + */ + minGridSize: 4, + /** + The recommended minimum width in pixels that this app should be run. + **It is up to the [container](../../container-development.html) to + implement the logic to prevent an app from being run when the minWidth + requirements are not met. + @property minWidth + @type int + @default 300 + */ + minWidth: 300, + /** + The name of the app. + @property name + @type string + @required + */ + name: '', + /** + The root DOM element that contains the app. + **This property is populated during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} + process.** + @property root + @type Element + */ + root: undefined, + /** + The instance of F2.UI providing easy access to F2.UI methods. + **This property is populated during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} + process.** + @property ui + @type F2.UI + */ + ui: undefined, + /** + The views that this app supports. Available views are defined in + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The presence of a view + can be checked via F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: F2.inArray(F2.Constants.Views.SETTINGS, app.views). + @property views + @type Array + */ + views: [] + }, + /** + The assets needed to render an app on the page. + @class F2.AppManifest + */ + AppManifest: { + /** + The array of {{#crossLink "F2.AppManifest.AppContent"}}{{/crossLink}} + objects. + @property apps + @type Array + @required + */ + apps: [], + /** + Any inline javascript tha should initially be run. + @property inlineScripts + @type Array + @optional + */ + inlineScripts: [], + /** + Urls to javascript files required by the app. + @property scripts + @type Array + @optional + */ + scripts: [], + /** + Urls to CSS files required by the app. + @property styles + @type Array + @optional + */ + styles: [] + }, + /** + The AppContent object. + @class F2.AppManifest.AppContent + */ + AppContent: { + /** + Arbitrary data to be passed along with the app. + @property data + @type object + @optional + */ + data: {}, + /** + The string of HTML representing the app. + @property html + @type string + @required + */ + html: '', + /** + A status message. + @property status + @type string + @optional + */ + status: '' + }, + /** + An object containing configuration information for the [container](../../container-development.html). + @class F2.ContainerConfig + */ + ContainerConfig: { + /** + Allows the [container](../../container-development.html) to override how + an app's html is inserted into the page. The function should accept an + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of + html. + @method afterAppRender + @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} + and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html representing the app + @return {Element} The DOM Element surrounding the app + */ + afterAppRender: function(appConfig, html) {}, + /** + Allows the [container](../../container-development.html) to wrap an app + in extra html. The function should accept an {{#crossLink "F2.AppConfig"}}{{/crossLink}} + object and also a string of html. The extra html can provide links to + edit app settings and remove an app from the container. See {{#crossLink "F2.Constants.Css"}}{{/crossLink}} + for CSS classes that should be applied to elements. + @method appRender + @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} + and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html representing the app + */ + appRender: function(appConfig, html) {}, + /** + Allows the container to render html for an app before the AppManifest for + an app has loaded. This can be useful if the design calls for loading + icons to appear for each app before each app is loaded and rendered to + the page. + @method beforeAppRender + @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} + and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app + */ + beforeAppRender: function(appConfig) {}, + /** + True to enable debug mode in F2.js. Adds additional logging, resource + cache busting, etc. + @property debugMode + @type bool + @default false + */ + debugMode: false, + /** + The default language and region specification for this container + represented as an IETF-defined standard language tag, e.g. `"en-us"` or + `"de-de"`. This value is passed to each app registered as + `containerLocale`. + @property locale + @type string + @default null + @since 1.4.0 + */ + locale: null, + /** + Milliseconds before F2 fires callback on script resource load errors. Due + to issue with the way Internet Explorer attaches load events to script + elements, the error event doesn't fire. + @property scriptErrorTimeout + @type milliseconds + @default 7000 (7 seconds) + */ + scriptErrorTimeout: 7000, + /** + Tells the container that it is currently running within a secure app page. + @property isSecureAppPage + @type bool + */ + isSecureAppPage: false, + /** + Allows the container to specify which page is used when loading a secure + app. The page must reside on a different domain than the container. + @property secureAppPagePath + @type string + @for F2.ContainerConfig + */ + secureAppPagePath: '', + /** + Specifies what views a container will provide buttons or links to. + Generally, the views will be switched via buttons or links in the app's + header. + @property supportedViews + @type Array + @required + */ + supportedViews: [], + /** + An object containing configuration defaults for F2.UI. + @class F2.ContainerConfig.UI + */ + UI: { + /** + An object containing configuration defaults for the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} + and F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. + @class F2.ContainerConfig.UI.Mask + */ + Mask: { + /** + The backround color of the overlay. + @property backgroundColor + @type string + @default #FFF + */ + backgroundColor: '#FFF', + /** + The path to the loading icon. + @property loadingIcon + @type string + */ + loadingIcon: '', + /** + The opacity of the background overlay. + @property opacity + @type int + @default 0.6 + */ + opacity: 0.6, + /** + Do not use inline styles for mask functinality. Instead classes will + be applied to the elements and it is up to the container provider to + implement the class definitions. + @property useClasses + @type bool + @default false + */ + useClasses: false, + /** + The z-index to use for the overlay + @property zIndex + @type int + @default 2 + */ + zIndex: 2 + } + }, + /** + Allows the container to override individual parts of the AppManifest + request. See properties and methods with the `xhr.` prefix. + @property xhr + @type Object + @example + F2.init({ + xhr: { + url: function(url, appConfigs) { + return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); + } + } + }); + */ + xhr: { + /** + Allows the container to override the request data type (JSON or JSONP) + that is used for the request. + @method xhr.dataType + @param {string} url The manifest url + @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} + objects + @return {string} The request data type that should be used + @example + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + */ + dataType: function(url, appConfigs) {}, + /** + Allows the container to override the request method that is used (just + like the `type` parameter to `jQuery.ajax()`. + @method xhr.type + @param {string} url The manifest url + @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} + objects + @return {string} The request method that should be used + @example + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + */ + type: function(url, appConfigs) {}, + /** + Allows the container to override the url that is used to request an + app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method xhr.url + @param {string} url The manifest url + @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} + objects + @return {string} The url that should be used for the request + @example + F2.init({ + xhr: { + url: function(url, appConfigs) { + return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); + } + } + }); + */ + url: function(url, appConfigs) {} + }, + /** + Allows the container to override the script loader which requests + dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @property loadScripts + @type function + @example + F2.init({ + loadScripts: function(scripts, inlines, callback) { + // Load scripts using $.load() for each script or require(scripts) + callback(); + } + }); + */ + loadScripts: function(scripts, inlines, callback) {}, + /** + Allows the container to override the stylesheet loader which requests + dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @property loadStyles + @type function + @example + F2.init({ + loadStyles: function(styles, callback) { + // Load styles using $.load() for each stylesheet or another method + callback(); + } + }); + */ + loadStyles: function(styles, callback) {} + } +}); From 13e6e0ff35f842b910876ede9b2090cf05c34c57 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 09:41:44 -0700 Subject: [PATCH 08/61] Fixing 'constants' styling --- src/lib/constants.js | 550 ++++++++++++++++++++----------------------- 1 file changed, 260 insertions(+), 290 deletions(-) diff --git a/src/lib/constants.js b/src/lib/constants.js index 62cf277c..cae522d6 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.js @@ -1,292 +1,262 @@ /** - * Constants used throughout the Open Financial Framework - * @class F2.Constants - * @static - */ + Constants used throughout the Open Financial Framework. + @class F2.Constants + @static +*/ F2.extend('Constants', { - /** - * CSS class constants - * @class F2.Constants.Css - */ - Css: (function() { - - /** @private */ - var _PREFIX = 'f2-'; - - return { - /** - * The APP class should be applied to the DOM Element that surrounds the - * entire app, including any extra html that surrounds the APP\_CONTAINER - * that is inserted by the container. See the - * {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} object. - * @property APP - * @type string - * @static - * @final - */ - APP: _PREFIX + 'app', - /** - * The APP\_CONTAINER class should be applied to the outermost DOM Element - * of the app. - * @property APP_CONTAINER - * @type string - * @static - * @final - */ - APP_CONTAINER: _PREFIX + 'app-container', - /** - * The APP\_TITLE class should be applied to the DOM Element that contains - * the title for an app. If this class is not present, then - * F2.UI.{{#crossLink "F2.UI/setTitle"}}{{/crossLink}} will not function. - * @property APP_TITLE - * @type string - * @static - * @final - */ - APP_TITLE: _PREFIX + 'app-title', - /** - * The APP\_VIEW class should be applied to the DOM Element that contains - * a view for an app. The DOM Element should also have a - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE - * attribute that specifies which - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it is. - * @property APP_VIEW - * @type string - * @static - * @final - */ - APP_VIEW: _PREFIX + 'app-view', - /** - * APP\_VIEW\_TRIGGER class should be applied to the DOM Elements that - * trigger an - * {{#crossLink "F2.Constants.Events"}}{{/crossLink}}.APP\_VIEW\_CHANGE - * event. The DOM Element should also have a - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE - * attribute that specifies which - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it will trigger. - * @property APP_VIEW_TRIGGER - * @type string - * @static - * @final - */ - APP_VIEW_TRIGGER: _PREFIX + 'app-view-trigger', - /** - * The MASK class is applied to the overlay element that is created - * when the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method is - * fired. - * @property MASK - * @type string - * @static - * @final - */ - MASK: _PREFIX + 'mask', - /** - * The MASK_CONTAINER class is applied to the Element that is passed into - * the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method. - * @property MASK_CONTAINER - * @type string - * @static - * @final - */ - MASK_CONTAINER: _PREFIX + 'mask-container' - }; - })(), - - /** - * Events constants - * @class F2.Constants.Events - */ - Events: (function() { - /** @private */ - var _APP_EVENT_PREFIX = 'App.'; - /** @private */ - var _CONTAINER_EVENT_PREFIX = 'Container.'; - - return { - /** - * The APP\_SYMBOL\_CHANGE event is fired when the symbol is changed in an - * app. It is up to the app developer to fire this event. - * Returns an object with the symbol and company name: - * - * { symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' } - * - * @property APP_SYMBOL_CHANGE - * @type string - * @static - * @final - */ - APP_SYMBOL_CHANGE: _APP_EVENT_PREFIX + 'symbolChange', - /** - * The APP\_WIDTH\_CHANGE event will be fired by the container when the - * width of an app is changed. The app's instanceId should be concatenated - * to this constant. - * Returns an object with the gridSize and width in pixels: - * - * { gridSize:8, width:620 } - * - * @property APP_WIDTH_CHANGE - * @type string - * @static - * @final - */ - APP_WIDTH_CHANGE: _APP_EVENT_PREFIX + 'widthChange.', - /** - * The CONTAINER\_SYMBOL\_CHANGE event is fired when the symbol is changed - * at the container level. This event should only be fired by the - * container or container provider. - * Returns an object with the symbol and company name: - * - * { symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' } - * - * @property CONTAINER_SYMBOL_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_SYMBOL_CHANGE: _CONTAINER_EVENT_PREFIX + 'symbolChange', - /** - * The CONTAINER\_WIDTH\_CHANGE event will be fired by the container when - * the width of the container has changed. - * @property CONTAINER_WIDTH_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_WIDTH_CHANGE: _CONTAINER_EVENT_PREFIX + 'widthChange', - /** - * The CONTAINER\_LOCALE\_CHANGE event will be fired by the container when - * the locale of the container has changed. This event should only be fired by the - * container or container provider. - * Returns an object with the updated locale (IETF-defined standard language tag): - * - * { locale: 'en-us' } - * - * @property CONTAINER_LOCALE_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_LOCALE_CHANGE: _CONTAINER_EVENT_PREFIX + 'localeChange' - }; - })(), - - JSONP_CALLBACK: 'F2_jsonpCallback_', - - /** - * Constants for use with cross-domain sockets - * @class F2.Constants.Sockets - * @protected - */ - Sockets: { - /** - * The EVENT message is sent whenever - * F2.Events.{{#crossLink "F2.Events/emit"}}{{/crossLink}} is fired - * @property EVENT - * @type string - * @static - * @final - */ - EVENT: '__event__', - /** - * The LOAD message is sent when an iframe socket initially loads. - * Returns a JSON string that represents: - * - * [ App, AppManifest] - * - * @property LOAD - * @type string - * @static - * @final - */ - LOAD: '__socketLoad__', - /** - * The RPC message is sent when a method is passed up from within a secure - * app page. - * @property RPC - * @type string - * @static - * @final - */ - RPC: '__rpc__', - /** - * The RPC\_CALLBACK message is sent when a call back from an RPC method is - * fired. - * @property RPC_CALLBACK - * @type string - * @static - * @final - */ - RPC_CALLBACK: '__rpcCallback__', - /** - * The UI\_RPC message is sent when a UI method called. - * @property UI_RPC - * @type string - * @static - * @final - */ - UI_RPC: '__uiRpc__' - }, - - /** - * The available view types to apps. The view should be specified by applying - * the {{#crossLink "F2.Constants.Css"}}{{/crossLink}}.APP\_VIEW class to the - * containing DOM Element. A DATA\_ATTRIBUTE attribute should be added to the - * Element as well which defines what view type is represented. - * The `hide` class can be applied to views that should be hidden by default. - * @class F2.Constants.Views - */ - Views: { - /** - * The DATA_ATTRIBUTE should be placed on the DOM Element that contains the - * view. - * @property DATA_ATTRIBUTE - * @type string - * @static - * @final - */ - DATA_ATTRIBUTE: 'data-f2-view', - /** - * The ABOUT view gives details about the app. - * @property ABOUT - * @type string - * @static - * @final - */ - ABOUT: 'about', - /** - * The HELP view provides users with help information for using an app. - * @property HELP - * @type string - * @static - * @final - */ - HELP: 'help', - /** - * The HOME view is the main view for an app. This view should always - * be provided by an app. - * @property HOME - * @type string - * @static - * @final - */ - HOME: 'home', - /** - * The REMOVE view is a special view that handles the removal of an app - * from the container. - * @property REMOVE - * @type string - * @static - * @final - */ - REMOVE: 'remove', - /** - * The SETTINGS view provides users the ability to modify advanced settings - * for an app. - * @property SETTINGS - * @type string - * @static - * @final - */ - SETTINGS: 'settings' - } -}); \ No newline at end of file + /** + CSS class constants + @class F2.Constants.Css + */ + Css: { + /** + The APP class should be applied to the DOM Element that surrounds the + entire app, including any extra html that surrounds the APP\_CONTAINER + that is inserted by the container. See the + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} object. + @property APP + @type string + @static + @final + */ + APP: 'f2-app', + /** + The APP\_CONTAINER class should be applied to the outermost DOM Element + of the app. + @property APP_CONTAINER + @type string + @static + @final + */ + APP_CONTAINER: 'f2-app-container', + /** + The APP\_TITLE class should be applied to the DOM Element that contains + the title for an app. If this class is not present, then + F2.UI.{{#crossLink "F2.UI/setTitle"}}{{/crossLink}} will not function. + @property APP_TITLE + @type string + @static + @final + */ + APP_TITLE: 'f2-app-title', + /** + The APP\_VIEW class should be applied to the DOM Element that contains + a view for an app. The DOM Element should also have a + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE + attribute that specifies which + {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it is. + @property APP_VIEW + @type string + @static + @final + */ + APP_VIEW: 'f2-app-view', + /** + APP\_VIEW\_TRIGGER class should be applied to the DOM Elements that + trigger an + {{#crossLink "F2.Constants.Events"}}{{/crossLink}}.APP\_VIEW\_CHANGE + event. The DOM Element should also have a + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE + attribute that specifies which + {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it will trigger. + @property APP_VIEW_TRIGGER + @type string + @static + @final + */ + APP_VIEW_TRIGGER: 'f2-app-view-trigger', + /** + The MASK class is applied to the overlay element that is created + when the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method is + fired. + @property MASK + @type string + @static + @final + */ + MASK: 'f2-mask', + /** + The MASK_CONTAINER class is applied to the Element that is passed into + the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method. + @property MASK_CONTAINER + @type string + @static + @final + */ + MASK_CONTAINER: 'f2-mask-container' + }, + /** + Events constants + @class F2.Constants.Events + */ + Events: { + /** + The APP\_SYMBOL\_CHANGE event is fired when the symbol is changed in an + app. It is up to the app developer to fire this event. Returns an object + with the symbol and company name: + `{ symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' }` + @property APP_SYMBOL_CHANGE + @type string + @static + @final + */ + APP_SYMBOL_CHANGE: 'App.symbolChange', + /** + The APP\_WIDTH\_CHANGE event will be fired by the container when the + width of an app is changed. The app's instanceId should be concatenated + to this constant. Returns an object with the gridSize and width in pixels: + `{ gridSize: 8, width: 620 }` + @property APP_WIDTH_CHANGE + @type string + @static + @final + */ + APP_WIDTH_CHANGE: 'App.widthChange.', + /** + The CONTAINER\_SYMBOL\_CHANGE event is fired when the symbol is changed + at the container level. This event should only be fired by the container + or container provider. Returns an object with the symbol and company name: + `{ symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' }` + @property CONTAINER_SYMBOL_CHANGE + @type string + @static + @final + */ + CONTAINER_SYMBOL_CHANGE: 'Container.symbolChange', + /** + The CONTAINER\_WIDTH\_CHANGE event will be fired by the container when + the width of the container has changed. + @property CONTAINER_WIDTH_CHANGE + @type string + @static + @final + */ + CONTAINER_WIDTH_CHANGE: 'Container.widthChange', + /** + The CONTAINER\_LOCALE\_CHANGE event will be fired by the container when + the locale of the container has changed. This event should only be fired + by the container or container provider. Returns an object with the + updated locale (IETF-defined standard language tag): + `{ locale: 'en-us' }` + @property CONTAINER_LOCALE_CHANGE + @type string + @static + @final + */ + CONTAINER_LOCALE_CHANGE: 'Container.localeChange' + }, + JSONP_CALLBACK: 'F2_jsonpCallback_', + /** + Constants for use with cross-domain sockets. + @class F2.Constants.Sockets + @protected + */ + Sockets: { + /** + The EVENT message is sent whenever + F2.Events.{{#crossLink "F2.Events/emit"}}{{/crossLink}} is fired. + @property EVENT + @type string + @static + @final + */ + EVENT: '__event__', + /** + The LOAD message is sent when an iframe socket initially loads. Returns + a JSON string that represents: `[ App, AppManifest]` + @property LOAD + @type string + @static + @final + */ + LOAD: '__socketLoad__', + /** + The RPC message is sent when a method is passed up from within a secure + app page. + @property RPC + @type string + @static + @final + */ + RPC: '__rpc__', + /** + The RPC\_CALLBACK message is sent when a call back from an RPC method is + fired. + @property RPC_CALLBACK + @type string + @static + @final + */ + RPC_CALLBACK: '__rpcCallback__', + /** + The UI\_RPC message is sent when a UI method called. + @property UI_RPC + @type string + @static + @final + */ + UI_RPC: '__uiRpc__' + }, + /** + The available view types to apps. The view should be specified by applying + the {{#crossLink "F2.Constants.Css"}}{{/crossLink}}.APP\_VIEW class to the + containing DOM Element. A DATA\_ATTRIBUTE attribute should be added to the + Element as well which defines what view type is represented. The `hide` + class can be applied to views that should be hidden by default. + @class F2.Constants.Views + */ + Views: { + /** + The DATA_ATTRIBUTE should be placed on the DOM Element that contains the + view. + @property DATA_ATTRIBUTE + @type string + @static + @final + */ + DATA_ATTRIBUTE: 'data-f2-view', + /** + The ABOUT view gives details about the app. + @property ABOUT + @type string + @static + @final + */ + ABOUT: 'about', + /** + The HELP view provides users with help information for using an app. + @property HELP + @type string + @static + @final + */ + HELP: 'help', + /** + The HOME view is the main view for an app. This view should always be + provided by an app. + @property HOME + @type string + @static + @final + */ + HOME: 'home', + /** + The REMOVE view is a special view that handles the removal of an app from + the container. + @property REMOVE + @type string + @static + @final + */ + REMOVE: 'remove', + /** + The SETTINGS view provides users the ability to modify advanced settings + for an app. + @property SETTINGS + @type string + @static + @final + */ + SETTINGS: 'settings' + } +}); From 511cede0ba8d830b0716647dfb58572ce9f82e71 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 09:42:24 -0700 Subject: [PATCH 09/61] Fixing 'events' styling --- src/lib/events.js | 158 +++++++++++++++++++++++----------------------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/src/lib/events.js b/src/lib/events.js index 6853e3a4..68ec5716 100644 --- a/src/lib/events.js +++ b/src/lib/events.js @@ -1,83 +1,83 @@ /** - * Handles [Context](../../app-development.html#context) passing from - * containers to apps and apps to apps. - * @class F2.Events - */ + Handles [Context](../../app-development.html#context) passing from containers + to apps and apps to apps. + @class F2.Events +*/ F2.extend('Events', (function() { - // init EventEmitter - var _events = new EventEmitter2({ - wildcard:true - }); + var _events = new EventEmitter2({ + wildcard: true + }); - // unlimited listeners, set to > 0 for debugging - _events.setMaxListeners(0); + // Unlimited listeners, set to > 0 for debugging + _events.setMaxListeners(0); + + return { + /** + Same as F2.Events.emit except that it will not send the event to all + sockets. + @method _socketEmit + @private + @param {string} event The event name + @param {object} [arg]* The arguments to be passed + */ + _socketEmit: function() { + return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); + }, + /** + Execute each of the listeners that may be listening for the specified + event name in order with the list of arguments. + @method emit + @param {string} event The event name + @param {object} [arg]* The arguments to be passed + */ + emit: function() { + F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); + return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); + }, + /** + Adds a listener that will execute n times for the event before being + removed. The listener is invoked only the first time the event is + fired, after which it is removed. + @method many + @param {string} event The event name + @param {int} timesToListen The number of times to execute the event + before being removed + @param {function} listener The function to be fired when the event is + emitted + */ + many: function(event, timesToListen, listener) { + return _events.many(event, timesToListen, listener); + }, + /** + * Remove a listener for the specified event. + * @method off + * @param {string} event The event name + * @param {function} listener The function that will be removed + */ + off: function(event, listener) { + return _events.off(event, listener); + }, + /** + * Adds a listener for the specified event + * @method on + * @param {string} event The event name + * @param {function} listener The function to be fired when the event is + * emitted + */ + on: function(event, listener) { + return _events.on(event, listener); + }, + /** + * Adds a one time listener for the event. The listener is invoked only + * the first time the event is fired, after which it is removed. + * @method once + * @param {string} event The event name + * @param {function} listener The function to be fired when the event is + * emitted + */ + once: function(event, listener) { + return _events.once(event, listener); + } + }; +})()); - return { - /** - * Same as F2.Events.emit except that it will not send the event - * to all sockets. - * @method _socketEmit - * @private - * @param {string} event The event name - * @param {object} [arg]* The arguments to be passed - */ - _socketEmit: function() { - return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); - }, - /** - * Execute each of the listeners that may be listening for the specified - * event name in order with the list of arguments. - * @method emit - * @param {string} event The event name - * @param {object} [arg]* The arguments to be passed - */ - emit: function() { - F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); - return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); - }, - /** - * Adds a listener that will execute n times for the event before being - * removed. The listener is invoked only the first time the event is - * fired, after which it is removed. - * @method many - * @param {string} event The event name - * @param {int} timesToListen The number of times to execute the event - * before being removed - * @param {function} listener The function to be fired when the event is - * emitted - */ - many: function(event, timesToListen, listener) { - return _events.many(event, timesToListen, listener); - }, - /** - * Remove a listener for the specified event. - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - */ - off: function(event, listener) { - return _events.off(event, listener); - }, - /** - * Adds a listener for the specified event - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ - on: function(event, listener){ - return _events.on(event, listener); - }, - /** - * Adds a one time listener for the event. The listener is invoked only - * the first time the event is fired, after which it is removed. - * @method once - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ - once: function(event, listener) { - return _events.once(event, listener); - } - }; -})()); \ No newline at end of file From acd042821f04802e9a4dbe0e9a87e7efc84f93b3 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 09:42:40 -0700 Subject: [PATCH 10/61] Fixing 'ui' styling --- src/lib/ui.js | 846 +++++++++++++++++++++++++------------------------- 1 file changed, 426 insertions(+), 420 deletions(-) diff --git a/src/lib/ui.js b/src/lib/ui.js index d4f7ddbc..ba5b3072 100644 --- a/src/lib/ui.js +++ b/src/lib/ui.js @@ -1,420 +1,426 @@ -F2.extend('UI', (function(){ - - var _containerConfig; - - /** - * UI helper methods - * @class F2.UI - * @constructor - * @param {F2.AppConfig} appConfig The F2.AppConfig object - */ - var UI_Class = function(appConfig) { - - var _appConfig = appConfig; - var $root = jQuery(appConfig.root); - - var _updateHeight = function(height) { - height = height || jQuery(_appConfig.root).outerHeight(); - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'updateHeight', - [ - height - ] - ); - } else { - _appConfig.height = height; - $root.find('iframe').height(_appConfig.height); - } - }; - - //http://getbootstrap.com/javascript/#modals - var _modalHtml = function(type,message,showCancel){ - return [ - '' - ].join(''); - }; - - return { - /** - * Removes a overlay from an Element on the page - * @method hideMask - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - */ - hideMask: function(selector) { - F2.UI.hideMask(_appConfig.instanceId, selector); - }, - /** - * Helper methods for creating and using Modals - * @class F2.UI.Modals - * @for F2.UI - */ - Modals: (function(){ - - var _renderAlert = function(message) { - return _modalHtml('Alert',message); - }; - - var _renderConfirm = function(message) { - return _modalHtml('Confirm',message,true); - }; - - return { - /** - * Display an alert message on the page - * @method alert - * @param {string} message The message to be displayed - * @param {function} [callback] The callback to be fired when the user - * closes the dialog - * @for F2.UI.Modals - */ - alert: function(message, callback) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.Modals.alert()'); - return; - } - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Modals.alert', - [].slice.call(arguments) - ); - } else { - // display the alert - jQuery(_renderAlert(message)) - .on('show.bs.modal', function() { - var modal = this; - jQuery(modal).find('.btn-primary').on('click', function() { - jQuery(modal).modal('hide').remove(); - (callback || jQuery.noop)(); - }); - }) - .modal({backdrop:true}); - } - }, - /** - * Display a confirm message on the page - * @method confirm - * @param {string} message The message to be displayed - * @param {function} okCallback The function that will be called when the OK - * button is pressed - * @param {function} cancelCallback The function that will be called when - * the Cancel button is pressed - * @for F2.UI.Modals - */ - confirm: function(message, okCallback, cancelCallback) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); - return; - } - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Modals.confirm', - [].slice.call(arguments) - ); - } else { - // display the alert - jQuery(_renderConfirm(message)) - .on('show.bs.modal', function() { - var modal = this; - - jQuery(modal).find('.btn-ok').on('click', function() { - jQuery(modal).modal('hide').remove(); - (okCallback || jQuery.noop)(); - }); - - jQuery(modal).find('.btn-cancel').on('click', function() { - jQuery(modal).modal('hide').remove(); - (cancelCallback || jQuery.noop)(); - }); - }) - .modal({backdrop:true}); - } - } - }; - })(), - /** - * Sets the title of the app as shown in the browser. Depending on the - * container HTML, this method may do nothing if the container has not been - * configured properly or else the container provider does not allow Title's - * to be set. - * @method setTitle - * @params {string} title The title of the app - * @for F2.UI - */ - setTitle: function(title) { - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'setTitle', - [ - title - ] - ); - } else { - jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); - } - }, - /** - * Display an ovarlay over an Element on the page - * @method showMask - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ - showMask: function(selector, showLoader) { - F2.UI.showMask(_appConfig.instanceId, selector, showLoader); - }, - /** - * For secure apps, this method updates the size of the iframe that - * contains the app. **Note: It is recommended that app developers call - * this method anytime Elements are added or removed from the DOM** - * @method updateHeight - * @params {int} height The height of the app - */ - updateHeight: _updateHeight, - /** - * Helper methods for creating and using Views - * @class F2.UI.Views - * @for F2.UI - */ - Views: (function(){ - - var _events = new EventEmitter2(); - var _rValidEvents = /change/i; - - // unlimited listeners, set to > 0 for debugging - _events.setMaxListeners(0); - - var _isValid = function(eventName) { - if (_rValidEvents.test(eventName)) { - return true; - } else { - F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); - return false; - } - }; - - return { - /** - * Change the current view for the app or add an event listener - * @method change - * @param {string|function} [input] If a string is passed in, the view - * will be changed for the app. If a function is passed in, a change - * event listener will be added. - * @for F2.UI.Views - */ - change: function(input) { - - if (typeof input === 'function') { - this.on('change', input); - } else if (typeof input === 'string') { - - if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Views.change', - [].slice.call(arguments) - ); - } else if (F2.inArray(input, _appConfig.views)) { - jQuery('.' + F2.Constants.Css.APP_VIEW, $root) - .addClass('hide') - .filter('[data-f2-view="' + input + '"]', $root) - .removeClass('hide'); - - _updateHeight(); - _events.emit('change', input); - } - } - }, - /** - * Removes a view event listener - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - * @for F2.UI.Views - */ - off: function(event, listener) { - if (_isValid(event)) { - _events.off(event, listener); - } - }, - /** - * Adds a view event listener - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - * @for F2.UI.Views - */ - on: function(event, listener) { - if (_isValid(event)) { - _events.on(event, listener); - } - } - }; - })() - }; - }; - - /** - * Removes a overlay from an Element on the page - * @method hideMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - * @for F2.UI - */ - UI_Class.hideMask = function(instanceId, selector) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.hideMask()'); - return; - } - - if (F2.Rpc.isRemote(instanceId) && !jQuery(selector).is('.' + F2.Constants.Css.APP)) { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC, - 'F2.UI.hideMask', - [ - instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors - jQuery(selector).selector - ] - ); - } else { - - var container = jQuery(selector); - container.find('> .' + F2.Constants.Css.MASK).remove(); - container.removeClass(F2.Constants.Css.MASK_CONTAINER); - - // if the element contains this data property, we need to reset static - // position - if (container.data(F2.Constants.Css.MASK_CONTAINER)) { - container.css({'position':'static'}); - } - } - }; - - /** - * - * @method init - * @static - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - UI_Class.init = function(containerConfig) { - _containerConfig = containerConfig; - - // set defaults - _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); - }; - - /** - * Display an ovarlay over an Element on the page - * @method showMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ - UI_Class.showMask = function(instanceId, selector, showLoading) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.showMask()'); - return; - } - - if (F2.Rpc.isRemote(instanceId) && jQuery(selector).is('.' + F2.Constants.Css.APP)) { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC, - 'F2.UI.showMask', - [ - instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors - jQuery(selector).selector, - showLoading - ] - ); - } else { - - if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { - F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); - } - - var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); - var mask = jQuery('
') - .height('100%' /*container.outerHeight()*/) - .width('100%' /*container.outerWidth()*/) - .addClass(F2.Constants.Css.MASK); - - // set inline styles if useClasses is false - if (!_containerConfig.UI.Mask.useClasses) { - mask.css({ - 'background-color':_containerConfig.UI.Mask.backgroundColor, - 'background-image': !!_containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', - 'background-position':'50% 50%', - 'background-repeat':'no-repeat', - 'display':'block', - 'left':0, - 'min-height':30, - 'padding':0, - 'position':'absolute', - 'top':0, - 'z-index':_containerConfig.UI.Mask.zIndex, - - 'filter':'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', - 'opacity':_containerConfig.UI.Mask.opacity - }); - } - - // only set the position if the container is currently static - if (container.css('position') === 'static') { - container.css({'position':'relative'}); - // setting this data property tells hideMask to set the position - // back to static - container.data(F2.Constants.Css.MASK_CONTAINER, true); - } - - // add the mask to the container - container.append(mask); - } - }; - - return UI_Class; -})()); \ No newline at end of file +F2.extend('UI', (function() { + + var _containerConfig; + + /** + UI helper methods + @class F2.UI + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object + */ + var UIClass = function(appConfig) { + + var _appConfig = appConfig; + var $root = jQuery(appConfig.root); + + function _updateHeight(height) { + height = height || jQuery(_appConfig.root).outerHeight(); + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'updateHeight', + [ + height + ] + ); + } else { + _appConfig.height = height; + $root.find('iframe').height(_appConfig.height); + } + } + + // http://getbootstrap.com/javascript/#modals + function _modalHtml(type, message, showCancel) { + return [ + '' + ].join(''); + } + + return { + /** + Removes a overlay from an Element on the page + @method hideMask + @param {string|Element} selector The Element or selector to an Element + that currently contains the loader + */ + hideMask: function(selector) { + F2.UI.hideMask(_appConfig.instanceId, selector); + }, + /** + * Helper methods for creating and using Modals + * @class F2.UI.Modals + * @for F2.UI + */ + Modals: (function() { + + var _renderAlert = function(message) { + return _modalHtml('Alert', message); + }; + + var _renderConfirm = function(message) { + return _modalHtml('Confirm', message, true); + }; + + return { + /** + * Display an alert message on the page + * @method alert + * @param {string} message The message to be displayed + * @param {function} [callback] The callback to be fired when the user + * closes the dialog + * @for F2.UI.Modals + */ + alert: function(message, callback) { + + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.Modals.alert()'); + return; + } + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Modals.alert', + [].slice.call(arguments) + ); + } else { + // display the alert + jQuery(_renderAlert(message)) + .on('show.bs.modal', function() { + var modal = this; + jQuery(modal).find('.btn-primary').on('click', function() { + jQuery(modal).modal('hide').remove(); + (callback || jQuery.noop)(); + }); + }) + .modal({ + backdrop: true + }); + } + }, + /** + * Display a confirm message on the page + * @method confirm + * @param {string} message The message to be displayed + * @param {function} okCallback The function that will be called when the OK + * button is pressed + * @param {function} cancelCallback The function that will be called when + * the Cancel button is pressed + * @for F2.UI.Modals + */ + confirm: function(message, okCallback, cancelCallback) { + + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); + return; + } + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Modals.confirm', + [].slice.call(arguments) + ); + } else { + // display the alert + jQuery(_renderConfirm(message)) + .on('show.bs.modal', function() { + var modal = this; + + jQuery(modal).find('.btn-ok').on('click', function() { + jQuery(modal).modal('hide').remove(); + (okCallback || jQuery.noop)(); + }); + + jQuery(modal).find('.btn-cancel').on('click', function() { + jQuery(modal).modal('hide').remove(); + (cancelCallback || jQuery.noop)(); + }); + }) + .modal({ + backdrop: true + }); + } + } + }; + })(), + /** + * Sets the title of the app as shown in the browser. Depending on the + * container HTML, this method may do nothing if the container has not been + * configured properly or else the container provider does not allow Title's + * to be set. + * @method setTitle + * @params {string} title The title of the app + * @for F2.UI + */ + setTitle: function(title) { + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'setTitle', + [ + title + ] + ); + } else { + jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); + } + }, + /** + * Display an ovarlay over an Element on the page + * @method showMask + * @param {string|Element} selector The Element or selector to an Element + * over which to display the loader + * @param {bool} showLoading Display a loading icon + */ + showMask: function(selector, showLoader) { + F2.UI.showMask(_appConfig.instanceId, selector, showLoader); + }, + /** + * For secure apps, this method updates the size of the iframe that + * contains the app. **Note: It is recommended that app developers call + * this method anytime Elements are added or removed from the DOM** + * @method updateHeight + * @params {int} height The height of the app + */ + updateHeight: _updateHeight, + /** + * Helper methods for creating and using Views + * @class F2.UI.Views + * @for F2.UI + */ + Views: (function() { + + var _events = new EventEmitter2(); + var _rValidEvents = /change/i; + + // unlimited listeners, set to > 0 for debugging + _events.setMaxListeners(0); + + var _isValid = function(eventName) { + if (_rValidEvents.test(eventName)) { + return true; + } else { + F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); + return false; + } + }; + + return { + /** + * Change the current view for the app or add an event listener + * @method change + * @param {string|function} [input] If a string is passed in, the view + * will be changed for the app. If a function is passed in, a change + * event listener will be added. + * @for F2.UI.Views + */ + change: function(input) { + + if (typeof input === 'function') { + this.on('change', input); + } else if (typeof input === 'string') { + + if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Views.change', + [].slice.call(arguments) + ); + } else if (F2.inArray(input, _appConfig.views)) { + jQuery('.' + F2.Constants.Css.APP_VIEW, $root) + .addClass('hide') + .filter('[data-f2-view="' + input + '"]', $root) + .removeClass('hide'); + + _updateHeight(); + _events.emit('change', input); + } + } + }, + /** + * Removes a view event listener + * @method off + * @param {string} event The event name + * @param {function} listener The function that will be removed + * @for F2.UI.Views + */ + off: function(event, listener) { + if (_isValid(event)) { + _events.off(event, listener); + } + }, + /** + * Adds a view event listener + * @method on + * @param {string} event The event name + * @param {function} listener The function to be fired when the event is + * emitted + * @for F2.UI.Views + */ + on: function(event, listener) { + if (_isValid(event)) { + _events.on(event, listener); + } + } + }; + })() + }; + }; + + /** + * Removes a overlay from an Element on the page + * @method hideMask + * @static + * @param {string} instanceId The Instance ID of the app + * @param {string|Element} selector The Element or selector to an Element + * that currently contains the loader + * @for F2.UI + */ + UIClass.hideMask = function(instanceId, selector) { + + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.hideMask()'); + return; + } + + if (F2.Rpc.isRemote(instanceId) && !jQuery(selector).is('.' + F2.Constants.Css.APP)) { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC, + 'F2.UI.hideMask', + [ + instanceId, + // must only pass the selector argument. if we pass an Element there + // will be F2.stringify() errors + jQuery(selector).selector + ] + ); + } else { + + var container = jQuery(selector); + container.find('> .' + F2.Constants.Css.MASK).remove(); + container.removeClass(F2.Constants.Css.MASK_CONTAINER); + + // if the element contains this data property, we need to reset static + // position + if (container.data(F2.Constants.Css.MASK_CONTAINER)) { + container.css({ + 'position': 'static' + }); + } + } + }; + + /** + * + * @method init + * @static + * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ + UIClass.init = function(containerConfig) { + _containerConfig = containerConfig; + + // set defaults + _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); + }; + + /** + * Display an ovarlay over an Element on the page + * @method showMask + * @static + * @param {string} instanceId The Instance ID of the app + * @param {string|Element} selector The Element or selector to an Element + * over which to display the loader + * @param {bool} showLoading Display a loading icon + */ + UIClass.showMask = function(instanceId, selector, showLoading) { + + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.showMask()'); + return; + } + + if (F2.Rpc.isRemote(instanceId) && jQuery(selector).is('.' + F2.Constants.Css.APP)) { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC, + 'F2.UI.showMask', + [ + instanceId, + // must only pass the selector argument. if we pass an Element there + // will be F2.stringify() errors + jQuery(selector).selector, + showLoading + ] + ); + } else { + + if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { + F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); + } + + var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); + var mask = jQuery('
') + .height('100%' /*container.outerHeight()*/ ) + .width('100%' /*container.outerWidth()*/ ) + .addClass(F2.Constants.Css.MASK); + + // set inline styles if useClasses is false + if (!_containerConfig.UI.Mask.useClasses) { + mask.css({ + 'background-color': _containerConfig.UI.Mask.backgroundColor, + 'background-image': !!_containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', + 'background-position': '50% 50%', + 'background-repeat': 'no-repeat', + 'display': 'block', + 'left': 0, + 'min-height': 30, + 'padding': 0, + 'position': 'absolute', + 'top': 0, + 'z-index': _containerConfig.UI.Mask.zIndex, + + 'filter': 'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', + 'opacity': _containerConfig.UI.Mask.opacity + }); + } + + // only set the position if the container is currently static + if (container.css('position') === 'static') { + container.css({ + 'position': 'relative' + }); + // setting this data property tells hideMask to set the position + // back to static + container.data(F2.Constants.Css.MASK_CONTAINER, true); + } + + // add the mask to the container + container.append(mask); + } + }; + + return UIClass; +})()); From 659a54636dd5cece0ce6957a50f186308672184a Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 11:20:58 -0700 Subject: [PATCH 11/61] Switching to eslint for additional rules --- .eslintrc | 45 +++ Gruntfile.js | 841 ++++++++++++++++++++++++++------------------------- package.json | 102 ++++--- 3 files changed, 520 insertions(+), 468 deletions(-) create mode 100644 .eslintrc diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..7d4a1838 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,45 @@ +{ + "env": { + "browser": true, + "amd": true, + "jasmine": true + }, + "globals": { + "console": true, + "F2": true, + // Vendor + "$": true, + "jQuery": true, + "EventEmitter2": true, + "easyXDM": true, + // Testing + "runs": true, + "itConditionally": true + }, + "rules": { + "no-comma-dangle": true, + "no-cond-assign": true, + "no-console": false, + "quotes": [1, "single"], + "strict": false, + "no-underscore-dangle": false, + "valid-jsdoc": [2, { + "requireReturn": false + }], + // Stylistic + "block-scoped-var": true, + "no-else-return": true, + "no-eq-null": true, + "func-style": [2, "declaration"], + "spaced-line-comment": ["always"], + "space-in-parens": ["never"], + "space-in-brackets": ["never"], + "space-before-blocks": "always", + "space-after-keywords": "always", + "space-after-function-name": "never", + "operator-assignment": [2, "always"], + // TODO: reverse when issues are fixed + "no-use-before-define": false, + "no-unused-vars": false + } +} diff --git a/Gruntfile.js b/Gruntfile.js index f5667641..1d04f923 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,441 +1,446 @@ module.exports = function(grunt) { + var exec = require('child_process').exec; + var handlebars = require('handlebars'); + var moment = require('moment'); + var pkg = grunt.file.readJSON('package.json'); + var semver = require('semver'); + var path = require('path'); - var exec = require('child_process').exec, - handlebars = require('handlebars'), - moment = require('moment'), - pkg = grunt.file.readJSON('package.json'), - semver = require('semver'), - path = require('path'); + // TODO: Remove Handlebars dependency and use the built-in grunt templating + handlebars.registerHelper('if', function(conditional, options) { + if (options.hash.desired === options.hash.test) { + return options.fn(this); + } + }); - // TODO: Remove Handlebars dependency and use the built-in grunt templating - // Handlebars helpers - handlebars.registerHelper('if', function(conditional, options) { - if (options.hash.desired === options.hash.test) { - return options.fn(this); - } - }); + grunt.initConfig({ + pkg: pkg, + clean: { + 'github-pages': { + options: { + force: true + }, + src: ['../gh-pages/src'] + }, + 'F2-examples': { + options: { + force: true + }, + src: ['./F2-examples.zip'] + } + }, + copy: { + 'github-pages': { + files: [{ + expand: true, + cwd: 'docs/', + src: ['**'], + dest: '../gh-pages' + }, { + expand: true, + cwd: 'dist/', + src: ['f2.latest.js'], + rename: function(dest, src) { + return '../gh-pages/js/f2.min.js'; //See #35 + } + }] + }, + 'F2-examples': { + files: [{ + expand: true, + cwd: './', + src: ['F2-examples.zip'], + dest: '../gh-pages' + }] + } + }, + compress: { + main: { + options: { + archive: 'F2-examples.zip', + pretty: true + }, + files: [{ + expand: true, + cwd: 'examples/', + src: ['**'], + dest: 'examples/' + }, { + expand: true, + cwd: 'dist/', + src: ['f2.debug.js'], + dest: 'dist/' + }, { + expand: true, + src: ['tests/require.min.js'], + dest: 'dist/' + }] + } + }, + concat: { + options: { + process: { + data: pkg + }, + separator: '\n', + stripBanners: false + }, + dist: { + src: [ + 'src/lib/template/header.js.tmpl', + 'src/vendor/jquery.js', + 'src/vendor/jquery.noconflict.js', + 'src/vendor/bootstrap-modal.js', + 'src/vendor/eventemitter2.js', + 'src/vendor/easyXDM/easyXDM.js', + '<%= eslint.files %>', + 'src/lib/template/footer.js.tmpl' + ], + dest: 'dist/f2.debug.js' + }, + 'no-third-party': { + src: [ + 'src/lib/template/header.js.tmpl', + '<%= eslint.files %>', + 'src/lib/template/footer.js.tmpl' + ], + dest: 'dist/f2.no-third-party.js' + }, + 'no-jquery-or-bootstrap': { + src: [ + 'src/lib/template/header.js.tmpl', + 'src/vendor/eventemitter2.js', + 'src/vendor/easyXDM/easyXDM.js', + '<%= eslint.files %>', + 'src/lib/template/footer.js.tmpl' + ], + dest: 'dist/packages/f2.no-jquery-or-bootstrap.js' + }, + 'no-bootstrap': { + src: [ + 'src/lib/template/header.js.tmpl', + 'src/vendor/jquery.js', + 'src/vendor/jquery.noconflict.js', + 'src/vendor/eventemitter2.js', + 'src/vendor/easyXDM/easyXDM.js', + '<%= eslint.files %>', + 'src/lib/template/footer.js.tmpl' + ], + dest: 'dist/packages/f2.no-bootstrap.js' + }, + 'no-easyXDM': { + src: [ + 'src/lib/template/header.js.tmpl', + 'src/vendor/jquery.js', + 'src/vendor/bootstrap-modal.js', + 'src/vendor/jquery.noconflict.js', + 'src/vendor/eventemitter2.js', + '<%= eslint.files %>', + 'src/lib/template/footer.js.tmpl' + ], + dest: 'dist/packages/f2.no-easyXDM.js' + }, + // Reminiscent of F2 1.0, no secure apps and Container Provide must have jQuery & Bootstrap on page before F2. + 'basic': { + src: [ + 'src/lib/template/header.js.tmpl', + 'src/vendor/eventemitter2.js', + '<%= eslint.files %>', + 'src/lib/template/footer.js.tmpl' + ], + dest: 'dist/packages/f2.basic.js' + } + }, + /** + * Need to downgrade forever-monitor to v1.1 because of: + * https://github.com/blai/grunt-express/issues/12 + * cd node_modules/grunt-express; npm uninstall forever-monitor; npm install forever-monitor@1.1; + */ + express: { + server: { + options: { + bases: './', + port: 8080, + server: (require('path')).resolve('./tests/server') + } + } + }, + jasmine: { + 'non-amd': { + options: { + host: 'http://localhost:8080/tests/', + outfile: 'index.html' + } + }, + 'amd': { + options: { + host: 'http://localhost:8080/tests/', + outfile: 'index-amd.html' + } + } + }, + eslint: { + options: { + config: '.eslintrc' + }, + target: [ + './src/lib/*.js', + './tests/spec/*.js' + ] + }, + uglify: { + options: { + preserveComments: 'some', + banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("mm-dd-yyyy") %> - See below for copyright and license */\n' + }, + dist: { + files: { + 'dist/f2.min.js': ['dist/f2.debug.js'] + }, + options: { + report: 'gzip' + } + }, + sourcemap: { + files: '<%= uglify.dist.files %>', + options: { + sourceMap: function(fileName) { + return fileName.replace(/\.js$/, '.js.map'); + }, + sourceMapPrefix: 1, + sourceMappingURL: function(path) { + return path.replace(grunt.config('sourcemap.options.prefix'), '').replace(/\.js$/, '.js.map'); + } + } + }, + 'package-no-jquery-or-bootstrap': { + files: { + 'dist/packages/f2.no-jquery-or-bootstrap.min.js': ['dist/packages/f2.no-jquery-or-bootstrap.js'] + }, + options: { + report: 'gzip' + } + }, + 'package-no-bootstrap': { + files: { + 'dist/packages/f2.no-bootstrap.min.js': ['dist/packages/f2.no-bootstrap.js'] + }, + options: { + report: 'gzip' + } + }, + 'package-no-easyXDM': { + files: { + 'dist/packages/f2.no-easyXDM.min.js': ['dist/packages/f2.no-easyXDM.js'] + }, + options: { + report: 'gzip' + } + }, + 'package-basic': { + files: { + 'dist/packages/f2.basic.min.js': ['dist/packages/f2.basic.js'] + }, + options: { + report: 'gzip' + } + } + }, + sourcemap: { + options: { + src: 'dist/f2.min.js', + prefix: './dist/' + } + }, + watch: { + docs: { + files: ['docs/src/**/*.*', 'package.json', 'docs/bin/gen-docs.js'], + tasks: ['docs'], + options: { + spawn: false + } + }, + scripts: { + files: ['./src/lib/**/*.js'], + tasks: ['js'], + options: { + spawn: false + } + } + }, + http: { + getDocsLayout: { + options: { + url: 'http://www.openf2.org/api/layout/docs', + json: true, + strictSSL: false, + callback: function(err, res, response) { + var log = grunt.log.write('Retrieved doc layout...') + grunt.config.set('docs-layout', response); + log.ok(); + log = grunt.log.write('Saving templates as HTML...'); + // Save as HTML for gen-docs step + grunt.file.write('./docs/src/template/head.html', response.head); + grunt.file.write('./docs/src/template/nav.html', response.nav); + grunt.file.write('./docs/src/template/footer.html', response.footer); + log.ok(); + } + } + } + } + }); - // Project config - grunt.initConfig({ - pkg: pkg, - clean: { - 'github-pages': { - options: { force: true }, - src: ['../gh-pages/src'] - }, - 'F2-examples': { - options: { force: true }, - src: ['./F2-examples.zip'] - } - }, - copy: { - 'github-pages': { - files: [ - { - expand: true, - cwd: 'docs/', - src: ['**'], - dest: '../gh-pages' - }, - { - expand: true, - cwd: 'dist/', - src: ['f2.latest.js'], - rename: function(dest, src){ - return '../gh-pages/js/f2.min.js';//See #35 - } - } - ] - }, - 'F2-examples': { - files: [ - { - expand: true, - cwd: './', - src: ['F2-examples.zip'], - dest: '../gh-pages' - } - ] - } - }, - compress: { - main: { - options: { - archive: 'F2-examples.zip', - pretty: true - }, - files: [ - { - expand: true, - cwd: 'examples/', - src: ['**'], - dest: 'examples/' - }, - { - expand: true, - cwd: 'dist/', - src: ['f2.debug.js'], - dest: 'dist/' - }, - { - expand: true, - src: ['tests/require.min.js'], - dest: 'dist/' - } - ] - } - }, - concat: { - options: { - process: { data: pkg }, - separator: '\n', - stripBanners: false - }, - dist: { - src: [ - 'src/lib/template/header.js.tmpl', - 'src/vendor/jquery.js', - 'src/vendor/jquery.noconflict.js', - 'src/vendor/bootstrap-modal.js', - 'src/vendor/eventemitter2.js', - 'src/vendor/easyXDM/easyXDM.js', - '<%= jshint.files %>', - 'src/lib/template/footer.js.tmpl' - ], - dest: 'dist/f2.debug.js' - }, - 'no-third-party': { - src: [ - 'src/lib/template/header.js.tmpl', - '<%= jshint.files %>', - 'src/lib/template/footer.js.tmpl' - ], - dest: 'dist/f2.no-third-party.js' - }, - 'no-jquery-or-bootstrap': { - src: [ - 'src/lib/template/header.js.tmpl', - 'src/vendor/eventemitter2.js', - 'src/vendor/easyXDM/easyXDM.js', - '<%= jshint.files %>', - 'src/lib/template/footer.js.tmpl' - ], - dest: 'dist/packages/f2.no-jquery-or-bootstrap.js' - }, - 'no-bootstrap': { - src: [ - 'src/lib/template/header.js.tmpl', - 'src/vendor/jquery.js', - 'src/vendor/jquery.noconflict.js', - 'src/vendor/eventemitter2.js', - 'src/vendor/easyXDM/easyXDM.js', - '<%= jshint.files %>', - 'src/lib/template/footer.js.tmpl' - ], - dest: 'dist/packages/f2.no-bootstrap.js' - }, - 'no-easyXDM': { - src: [ - 'src/lib/template/header.js.tmpl', - 'src/vendor/jquery.js', - 'src/vendor/bootstrap-modal.js', - 'src/vendor/jquery.noconflict.js', - 'src/vendor/eventemitter2.js', - '<%= jshint.files %>', - 'src/lib/template/footer.js.tmpl' - ], - dest: 'dist/packages/f2.no-easyXDM.js' - }, - 'basic': { //reminiscent of F2 1.0, no secure apps and Container Provide must have jQuery & Bootstrap on page before F2. - src: [ - 'src/lib/template/header.js.tmpl', - 'src/vendor/eventemitter2.js', - '<%= jshint.files %>', - 'src/lib/template/footer.js.tmpl' - ], - dest: 'dist/packages/f2.basic.js' - }, - }, - /** - * Need to downgrade forever-monitor to v1.1 because of: - * https://github.com/blai/grunt-express/issues/12 - * cd node_modules/grunt-express; npm uninstall forever-monitor; npm install forever-monitor@1.1; - */ - express: { - server: { - options: { - bases: './', - port: 8080, - server: (require('path')).resolve('./tests/server') - } - } - }, - jasmine: { - 'non-amd': { - options: { - host: 'http://localhost:8080/tests/', - outfile: 'index.html' - } - }, - 'amd': { - options: { - host: 'http://localhost:8080/tests/', - outfile: 'index-amd.html' - } - } - }, - jshint: { - options: { - jshintrc: '.jshintrc' - }, - files: [ - 'src/lib/F2.js', - 'src/lib/app_handlers.js', - 'src/lib/classes.js', - 'src/lib/constants.js', - 'src/lib/events.js', - 'src/lib/rpc.js', - 'src/lib/ui.js', - 'src/lib/container.js' - ] - }, - uglify: { - options: { - preserveComments: 'some', - banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("mm-dd-yyyy") %> - See below for copyright and license */\n' - }, - dist: { - files: {'dist/f2.min.js': ['dist/f2.debug.js']}, - options: { - report: 'gzip' - } - }, - sourcemap: { - files: '<%= uglify.dist.files %>', - options: { - sourceMap: function(fileName) { - return fileName.replace(/\.js$/, '.js.map'); - }, - sourceMapPrefix: 1, - sourceMappingURL: function(path) { - return path.replace(grunt.config('sourcemap.options.prefix'), '').replace(/\.js$/, '.js.map'); - } - } - }, - 'package-no-jquery-or-bootstrap': { - files: { 'dist/packages/f2.no-jquery-or-bootstrap.min.js' : ['dist/packages/f2.no-jquery-or-bootstrap.js'] }, - options: { report: 'gzip' } - }, - 'package-no-bootstrap': { - files: { 'dist/packages/f2.no-bootstrap.min.js' : ['dist/packages/f2.no-bootstrap.js'] }, - options: { report: 'gzip' } - }, - 'package-no-easyXDM': { - files: { 'dist/packages/f2.no-easyXDM.min.js' : ['dist/packages/f2.no-easyXDM.js'] }, - options: { report: 'gzip' } - }, - 'package-basic': { - files: { 'dist/packages/f2.basic.min.js' : ['dist/packages/f2.basic.js'] }, - options: { report: 'gzip' } - } - }, - sourcemap: { - options: { - src: 'dist/f2.min.js', - prefix: './dist/' - } - }, - watch: { - docs: { - files: ['docs/src/**/*.*', 'package.json', 'docs/bin/gen-docs.js'], - tasks: ['docs'], - options: { - spawn: false, - } - }, - scripts: { - files: ['./src/lib/**/*.js'], - tasks: ['js'], - options: { - spawn: false, - } - } - }, - http: { - getDocsLayout: { - options: { - url: 'http://www.openf2.org/api/layout/docs', - json: true, - strictSSL: false, - callback: function(err, res, response){ - var log = grunt.log.write('Retrieved doc layout...') - grunt.config.set('docs-layout',response); - log.ok(); - log = grunt.log.write('Saving templates as HTML...'); - //save as HTML for gen-docs step - grunt.file.write('./docs/src/template/head.html', response.head); - grunt.file.write('./docs/src/template/nav.html', response.nav); - grunt.file.write('./docs/src/template/footer.html', response.footer); - log.ok(); - } - } - } - } - }); + // Register tasks + grunt.registerTask('fix-sourcemap', 'Fixes the source map file', function() { + var uglifyOptions = grunt.config('uglify.sourcemap.options'); + var options = grunt.config('sourcemap.options'); + var dest = uglifyOptions.sourceMap(options.src); + var rawMap = grunt.file.read(dest); - // Register tasks - grunt.registerTask('fix-sourcemap', 'Fixes the source map file', function() { - var uglifyOptions = grunt.config('uglify.sourcemap.options'); - var options = grunt.config('sourcemap.options'); - var dest = uglifyOptions.sourceMap(options.src); - var rawMap = grunt.file.read(dest); + rawMap = rawMap.replace(options.prefix, ''); + grunt.file.write(dest, rawMap); + }); - rawMap = rawMap.replace(options.prefix, ''); - grunt.file.write(dest, rawMap); - }); + grunt.registerTask('generate-docs', 'Generate docs', function() { + var done = this.async(); + var log = grunt.log.write('Generating docs...'); - grunt.registerTask('generate-docs', 'Generate docs', function() { - var done = this.async(), - log = grunt.log.write('Generating docs...'); + exec('node ' + path.join(__dirname, 'docs/bin/gen-docs'), function(err, stdout, stderr) { + if (err) { + grunt.log.error(err.message); + grunt.fail.fatal('Docs generation aborted.'); + return; + } + grunt.log.write(stdout); + log.ok(); + done(); + }); + }); - exec('node ' + path.join(__dirname, 'docs/bin/gen-docs'), function(err, stdout, stderr) { - if (err) { - grunt.log.error(err.message); - grunt.fail.fatal('Docs generation aborted.'); - return; - } - grunt.log.write(stdout); - log.ok(); - done(); - }); - }); + grunt.registerTask('yuidoc', 'Builds the reference docs with YUIDocJS', function() { + var builder; + var docOptions = { + quiet: true, + norecurse: true, + paths: ['./src/lib'], + outdir: './docs/dist/sdk/', + themedir: './docs/src/sdk-template', + helpers: ['./docs/src/sdk-template/helpers/helpers.js'] + }; + var done = this.async(); + var json; + var log = grunt.log.write('Generating reference docs...'); + var Y = require('yuidocjs'); - grunt.registerTask('yuidoc', 'Builds the reference docs with YUIDocJS', function() { + json = (new Y.YUIDoc(docOptions)).run(); + // Massage in some meta information from F2.json + json.project = { + docsAssets: '../', + version: pkg.version, + releaseDateFormatted: pkg._releaseDateFormatted + }; + docOptions = Y.Project.mix(json, docOptions); - var builder, - docOptions = { - quiet: true, - norecurse: true, - paths: ['./src/lib'], - outdir: './docs/dist/sdk/', - themedir: './docs/src/sdk-template', - helpers: ['./docs/src/sdk-template/helpers/helpers.js'] - }, - done = this.async(), - json, - log = grunt.log.write('Generating reference docs...'), - Y = require('yuidocjs'); + // Ensures that the class has members and isn't just an empty namespace + // Used in sidebar.handlebars + Y.Handlebars.registerHelper('hasClassMembers', function() { + for (var i = 0, len = json.classitems.length; i < len; i++) { + if (json.classitems[i].class === this.name) { + return ''; + } + } - json = (new Y.YUIDoc(docOptions)).run(); - // massage in some meta information from F2.json - json.project = { - docsAssets: '../', - version: pkg.version, - releaseDateFormatted: pkg._releaseDateFormatted - }; - docOptions = Y.Project.mix(json, docOptions); + return 'hidden'; + }); - // ensures that the class has members and isn't just an empty namespace - // used in sidebar.handlebars - Y.Handlebars.registerHelper('hasClassMembers', function() { - for (var i = 0, len = json.classitems.length; i < len; i++) { - //console.log(json.classitems[i].class, this.name); - if (json.classitems[i].class === this.name) { - return ''; - } - } - return 'hidden'; - }); + builder = new Y.DocBuilder(docOptions, json); + builder.compile(function() { + log.ok(); + done(); + }); + }); - builder = new Y.DocBuilder(docOptions, json); - builder.compile(function() { - log.ok(); - done(); - }); - }); + grunt.registerTask('nuget', 'Builds the NuGet package for distribution on NuGet.org', function() { + var done = this.async(); + var log = grunt.log.write('Creating NuSpec file...'); + var nuspec = grunt.file.read('./dist/f2.nuspec.tmpl'); - grunt.registerTask('nuget', 'Builds the NuGet package for distribution on NuGet.org', function() { - var done = this.async(), - log = grunt.log.write('Creating NuSpec file...'), - nuspec = grunt.file.read('./dist/f2.nuspec.tmpl'); + nuspec = grunt.template.process(nuspec, { data: pkg }); + grunt.file.write('./dist/f2.nuspec', nuspec); + log.ok(); - nuspec = grunt.template.process(nuspec, { data: pkg }); - grunt.file.write('./dist/f2.nuspec', nuspec); - log.ok(); + log = grunt.log.write('Creating NuGet package...'); + grunt.util.spawn({ + cmd: 'nuget', + args: ['pack', 'f2.nuspec'], + opts: { + cwd: './dist' + } + }, function(error, result, code) { + if (error) { + grunt.fail.fatal(error); + } else { + grunt.file.delete('./dist/f2.nuspec'); + log.ok(); + done(); + } + }); + }); - log = grunt.log.write('Creating NuGet package...'); - grunt.util.spawn( - { - cmd: 'nuget', - args: ['pack', 'f2.nuspec'], - opts: { - cwd: './dist' - } - }, - function(error, result, code){ - if (error){ - grunt.fail.fatal(error); - } else { - grunt.file.delete('./dist/f2.nuspec'); - log.ok(); - done(); - } - } - ); - }); + grunt.registerTask('release', 'Prepares the code for release (merge into master)', function(releaseType) { + if (!/^major|minor|patch$/i.test(releaseType) && !semver.valid(releaseType)) { + grunt.log.error('"' + releaseType + '" is not a valid release type (major, minor, or patch) or SemVer version'); + return; + } - grunt.registerTask('release', 'Prepares the code for release (merge into master)', function(releaseType) { - if (!/^major|minor|patch$/i.test(releaseType) && !semver.valid(releaseType)) { - grunt.log.error('"' + releaseType + '" is not a valid release type (major, minor, or patch) or SemVer version'); - return; - } + pkg.version = semver.valid(releaseType) ? releaseType : String(semver.inc(pkg.version, releaseType)).replace(/\-\w+$/, ''); + pkg._releaseDate = new Date().toJSON(); + pkg._releaseDateFormatted = moment(pkg._releaseDate).format('D MMMM YYYY'); - pkg.version = semver.valid(releaseType) ? releaseType : String(semver.inc(pkg.version, releaseType)).replace(/\-\w+$/, ''); - pkg._releaseDate = new Date().toJSON(); - pkg._releaseDateFormatted = moment(pkg._releaseDate).format('D MMMM YYYY'); + grunt.file.write('./package.json', JSON.stringify(pkg, null, '\t')); + grunt.config.set('pkg', pkg); - grunt.file.write('./package.json', JSON.stringify(pkg, null, '\t')); - grunt.config.set('pkg', pkg); + grunt.task.run('version'); + }); - grunt.task.run('version'); - }); + grunt.registerTask('version', 'Displays version information for F2', function() { + grunt.log.writeln(grunt.template.process( + 'This copy of F2 is at version <%= version %> with a release date of <%= _releaseDateFormatted %>', + { data: pkg } + )); + }); - grunt.registerTask('version', 'Displays version information for F2', function() { - grunt.log.writeln(grunt.template.process( - 'This copy of F2 is at version <%= version %> with a release date of <%= _releaseDateFormatted %>', - { data: pkg } - )); - }); + // Load plugins + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-compress'); + grunt.loadNpmTasks('grunt-contrib-jasmine'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-express'); + grunt.loadNpmTasks('grunt-http'); + grunt.loadNpmTasks('grunt-eslint'); - // Load plugins - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-compress'); - grunt.loadNpmTasks('grunt-contrib-jasmine'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-express'); - grunt.loadNpmTasks('grunt-http'); - - grunt.registerTask('docs', ['http','generate-docs', 'yuidoc']); - grunt.registerTask('github-pages', ['copy:github-pages', 'clean:github-pages']); - grunt.registerTask('zip', ['compress', 'copy:F2-examples', 'clean:F2-examples']); - grunt.registerTask('js', ['concat:dist', 'concat:no-third-party', 'uglify:dist', 'sourcemap']); - grunt.registerTask('sourcemap', ['uglify:sourcemap', 'fix-sourcemap']); - grunt.registerTask('packages', [ - 'concat:no-jquery-or-bootstrap', - 'concat:no-bootstrap', - 'concat:no-easyXDM', - 'concat:basic', - 'uglify:package-no-jquery-or-bootstrap', - 'uglify:package-no-bootstrap', - 'uglify:package-no-easyXDM', - 'uglify:package-basic' - ]); - grunt.registerTask('test', ['jshint', 'express', 'jasmine']); - grunt.registerTask('test-live', ['jshint', 'express', 'express-keepalive']); - grunt.registerTask('travis', ['test']); - grunt.registerTask('default', ['test', 'js', 'docs', 'zip']); + grunt.registerTask('docs', ['http', 'generate-docs', 'yuidoc']); + grunt.registerTask('github-pages', ['copy:github-pages', 'clean:github-pages']); + grunt.registerTask('zip', ['compress', 'copy:F2-examples', 'clean:F2-examples']); + grunt.registerTask('lint', ['eslint']); + grunt.registerTask('js', ['lint', 'concat:dist', 'concat:no-third-party', 'uglify:dist', 'sourcemap']); + grunt.registerTask('sourcemap', ['uglify:sourcemap', 'fix-sourcemap']); + grunt.registerTask('packages', [ + 'concat:no-jquery-or-bootstrap', + 'concat:no-bootstrap', + 'concat:no-easyXDM', + 'concat:basic', + 'uglify:package-no-jquery-or-bootstrap', + 'uglify:package-no-bootstrap', + 'uglify:package-no-easyXDM', + 'uglify:package-basic' + ]); + grunt.registerTask('test', ['express', 'jasmine']); + grunt.registerTask('test-live', ['express', 'express-keepalive']); + grunt.registerTask('travis', ['test']); + grunt.registerTask('default', ['test', 'js', 'docs', 'zip']); }; diff --git a/package.json b/package.json index 36ef55cd..c40c4850 100644 --- a/package.json +++ b/package.json @@ -1,51 +1,53 @@ { - "name": "F2", - "description": "An open framework for the financial services industry.", - "version": "1.4.0", - "keywords": [ - "openf2" - ], - "homepage": "https://github.com/OpenF2/F2", - "author": "Markit On Demand, Inc", - "repository": { - "type": "git", - "url": "https://github.com/OpenF2/F2.git" - }, - "bugs": { - "url": "https://github.com/OpenF2/F2/issues", - "email": "OpenF2@googlegroups.com" - }, - "licenses": [ - { - "type": "Apache-2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0" - } - ], - "devDependencies": { - "express": "^4.10.4", - "grunt": "^0.4.5", - "grunt-cli": "^0.1.13", - "grunt-contrib-clean": "^0.6.0", - "grunt-contrib-concat": "^0.5.0", - "grunt-contrib-compress": "^0.12.0", - "grunt-contrib-copy": "^0.7.0", - "grunt-contrib-jasmine": "~0.4.2", - "grunt-contrib-jshint": "^0.10.0", - "grunt-contrib-uglify": "^0.6.0", - "grunt-contrib-watch": "^0.6.1", - "grunt-express": "~0.3.3", - "grunt-http": "^1.5.0", - "handlebars": "^2.0.0", - "moment": "^2.8.4", - "semver": "^4.1.0", - "yuidocjs": "~0.3.44", - "highlight.js": "^8.4.0", - "marked": "^0.3.2", - "underscore": "^1.7.0" - }, - "engines": { - "node": ">=0.10" - }, - "_releaseDate": "2014-12-17T17:59:22.636Z", - "_releaseDateFormatted": "17 December 2014" -} \ No newline at end of file + "name": "F2", + "description": "An open framework for the financial services industry.", + "version": "1.4.0", + "keywords": [ + "openf2" + ], + "homepage": "https://github.com/OpenF2/F2", + "author": "Markit On Demand, Inc", + "repository": { + "type": "git", + "url": "https://github.com/OpenF2/F2.git" + }, + "bugs": { + "url": "https://github.com/OpenF2/F2/issues", + "email": "OpenF2@googlegroups.com" + }, + "licenses": [ + { + "type": "Apache-2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + } + ], + "devDependencies": { + "express": "^4.10.4", + "grunt": "^0.4.5", + "grunt-cli": "^0.1.13", + "grunt-contrib-clean": "^0.6.0", + "grunt-contrib-compress": "^0.12.0", + "grunt-contrib-concat": "^0.5.0", + "grunt-contrib-copy": "^0.7.0", + "grunt-contrib-jasmine": "~0.4.2", + "grunt-contrib-jshint": "^0.10.0", + "grunt-contrib-uglify": "^0.6.0", + "grunt-contrib-watch": "^0.6.1", + "grunt-eslint": "^3.0.0", + "grunt-express": "~0.3.3", + "grunt-http": "^1.5.0", + "grunt-jscs": "^1.1.0", + "handlebars": "^2.0.0", + "highlight.js": "^8.4.0", + "marked": "^0.3.2", + "moment": "^2.8.4", + "semver": "^4.1.0", + "underscore": "^1.7.0", + "yuidocjs": "~0.3.44" + }, + "engines": { + "node": ">=0.10" + }, + "_releaseDate": "2014-12-17T17:59:22.636Z", + "_releaseDateFormatted": "17 December 2014" +} From 0726efd337f482bd0fa70a7b7da1f626d7f9ed03 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 5 Jan 2015 11:37:22 -0700 Subject: [PATCH 12/61] Fixing styling and lint errors in 'ui.js' --- src/lib/ui.js | 250 ++++++++++++++++++++++---------------------------- 1 file changed, 112 insertions(+), 138 deletions(-) diff --git a/src/lib/ui.js b/src/lib/ui.js index ba5b3072..05c90dad 100644 --- a/src/lib/ui.js +++ b/src/lib/ui.js @@ -8,8 +8,7 @@ F2.extend('UI', (function() { @constructor @param {F2.AppConfig} appConfig The F2.AppConfig object */ - var UIClass = function(appConfig) { - + function UIClass(appConfig) { var _appConfig = appConfig; var $root = jQuery(appConfig.root); @@ -63,31 +62,29 @@ F2.extend('UI', (function() { F2.UI.hideMask(_appConfig.instanceId, selector); }, /** - * Helper methods for creating and using Modals - * @class F2.UI.Modals - * @for F2.UI - */ + Helper methods for creating and using Modals + @class F2.UI.Modals + @for F2.UI + */ Modals: (function() { - - var _renderAlert = function(message) { + function _renderAlert(message) { return _modalHtml('Alert', message); - }; + } - var _renderConfirm = function(message) { + function _renderConfirm(message) { return _modalHtml('Confirm', message, true); - }; + } return { /** - * Display an alert message on the page - * @method alert - * @param {string} message The message to be displayed - * @param {function} [callback] The callback to be fired when the user - * closes the dialog - * @for F2.UI.Modals - */ + Display an alert message on the page + @method alert + @param {string} message The message to be displayed + @param {function} [callback] The callback to be fired when the user + closes the dialog + @for F2.UI.Modals + */ alert: function(message, callback) { - if (!F2.isInit()) { F2.log('F2.init() must be called before F2.UI.Modals.alert()'); return; @@ -101,7 +98,7 @@ F2.extend('UI', (function() { [].slice.call(arguments) ); } else { - // display the alert + // Display the alert jQuery(_renderAlert(message)) .on('show.bs.modal', function() { var modal = this; @@ -116,17 +113,16 @@ F2.extend('UI', (function() { } }, /** - * Display a confirm message on the page - * @method confirm - * @param {string} message The message to be displayed - * @param {function} okCallback The function that will be called when the OK - * button is pressed - * @param {function} cancelCallback The function that will be called when - * the Cancel button is pressed - * @for F2.UI.Modals - */ + Display a confirm message on the page + @method confirm + @param {string} message The message to be displayed + @param {function} okCallback The function that will be called when + the OK button is pressed + @param {function} cancelCallback The function that will be called + when the Cancel button is pressed + @for F2.UI.Modals + */ confirm: function(message, okCallback, cancelCallback) { - if (!F2.isInit()) { F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); return; @@ -140,7 +136,7 @@ F2.extend('UI', (function() { [].slice.call(arguments) ); } else { - // display the alert + // Display the alert jQuery(_renderConfirm(message)) .on('show.bs.modal', function() { var modal = this; @@ -163,84 +159,78 @@ F2.extend('UI', (function() { }; })(), /** - * Sets the title of the app as shown in the browser. Depending on the - * container HTML, this method may do nothing if the container has not been - * configured properly or else the container provider does not allow Title's - * to be set. - * @method setTitle - * @params {string} title The title of the app - * @for F2.UI - */ + Sets the title of the app as shown in the browser. Depending on the + container HTML, this method may do nothing if the container has not been + configured properly or else the container provider does not allow Title's + to be set. + @method setTitle + @param {string} title The title of the app + @for F2.UI + */ setTitle: function(title) { - if (F2.Rpc.isRemote(_appConfig.instanceId)) { F2.Rpc.call( _appConfig.instanceId, F2.Constants.Sockets.UI_RPC, 'setTitle', - [ - title - ] + [title] ); } else { jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); } }, /** - * Display an ovarlay over an Element on the page - * @method showMask - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ + Display an ovarlay over an Element on the page + @method showMask + @param {string|Element} selector The Element or selector to an Element + over which to display the loader + @param {bool} showLoader Display a loading icon + */ showMask: function(selector, showLoader) { F2.UI.showMask(_appConfig.instanceId, selector, showLoader); }, /** - * For secure apps, this method updates the size of the iframe that - * contains the app. **Note: It is recommended that app developers call - * this method anytime Elements are added or removed from the DOM** - * @method updateHeight - * @params {int} height The height of the app - */ + For secure apps, this method updates the size of the iframe that + contains the app. **Note: It is recommended that app developers call + this method anytime Elements are added or removed from the DOM** + @method updateHeight + @param {int} height The height of the app + */ updateHeight: _updateHeight, /** - * Helper methods for creating and using Views - * @class F2.UI.Views - * @for F2.UI - */ + Helper methods for creating and using Views + @class F2.UI.Views + @for F2.UI + */ Views: (function() { - var _events = new EventEmitter2(); - var _rValidEvents = /change/i; + var eventsPattern = /change/i; - // unlimited listeners, set to > 0 for debugging + // Unlimited listeners, set to > 0 for debugging _events.setMaxListeners(0); - var _isValid = function(eventName) { - if (_rValidEvents.test(eventName)) { - return true; - } else { + function _isValid(eventName) { + if (!eventsPattern.test(eventName)) { F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); return false; } - }; + + return true; + } return { /** - * Change the current view for the app or add an event listener - * @method change - * @param {string|function} [input] If a string is passed in, the view - * will be changed for the app. If a function is passed in, a change - * event listener will be added. - * @for F2.UI.Views - */ + Change the current view for the app or add an event listener + @method change + @param {string|function} [input] If a string is passed in, the view + will be changed for the app. If a function is passed in, a change + event listener will be added. + @for F2.UI.Views + */ change: function(input) { - if (typeof input === 'function') { this.on('change', input); } else if (typeof input === 'string') { - if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { F2.Rpc.call( _appConfig.instanceId, @@ -260,25 +250,25 @@ F2.extend('UI', (function() { } }, /** - * Removes a view event listener - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - * @for F2.UI.Views - */ + Removes a view event listener + @method off + @param {string} event The event name + @param {function} listener The function that will be removed + @for F2.UI.Views + */ off: function(event, listener) { if (_isValid(event)) { _events.off(event, listener); } }, /** - * Adds a view event listener - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - * @for F2.UI.Views - */ + Adds a view event listener + @method on + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @for F2.UI.Views + */ on: function(event, listener) { if (_isValid(event)) { _events.on(event, listener); @@ -287,19 +277,18 @@ F2.extend('UI', (function() { }; })() }; - }; + } /** - * Removes a overlay from an Element on the page - * @method hideMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - * @for F2.UI - */ + Removes a overlay from an Element on the page + @method hideMask + @static + @param {string} instanceId The Instance ID of the app + @param {string|Element} selector The Element or selector to an Element + that currently contains the loader + @for F2.UI + */ UIClass.hideMask = function(instanceId, selector) { - if (!F2.isInit()) { F2.log('F2.init() must be called before F2.UI.hideMask()'); return; @@ -312,51 +301,43 @@ F2.extend('UI', (function() { 'F2.UI.hideMask', [ instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors + // Have to pass selector or else there will be stringify errors jQuery(selector).selector ] ); } else { - var container = jQuery(selector); container.find('> .' + F2.Constants.Css.MASK).remove(); container.removeClass(F2.Constants.Css.MASK_CONTAINER); - // if the element contains this data property, we need to reset static - // position + // If the element contains this property, reset to static position if (container.data(F2.Constants.Css.MASK_CONTAINER)) { - container.css({ - 'position': 'static' - }); + container.css({ 'position': 'static' }); } } }; /** - * - * @method init - * @static - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ + Runs initialization code for the UI class + @method init + @static + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ UIClass.init = function(containerConfig) { _containerConfig = containerConfig; - - // set defaults _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); }; /** - * Display an ovarlay over an Element on the page - * @method showMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ + Display an ovarlay over an Element on the page + @method showMask + @static + @param {string} instanceId The Instance ID of the app + @param {string|Element} selector The Element or selector to an Element over + which to display the loader + @param {bool} showLoading Display a loading icon + */ UIClass.showMask = function(instanceId, selector, showLoading) { - if (!F2.isInit()) { F2.log('F2.init() must be called before F2.UI.showMask()'); return; @@ -369,29 +350,27 @@ F2.extend('UI', (function() { 'F2.UI.showMask', [ instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors + // Have to pass selector or else there will be stringify errors jQuery(selector).selector, showLoading ] ); } else { - if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); } var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); var mask = jQuery('
') - .height('100%' /*container.outerHeight()*/ ) - .width('100%' /*container.outerWidth()*/ ) + .height('100%') + .width('100%') .addClass(F2.Constants.Css.MASK); - // set inline styles if useClasses is false + // Set inline styles if useClasses is false if (!_containerConfig.UI.Mask.useClasses) { mask.css({ 'background-color': _containerConfig.UI.Mask.backgroundColor, - 'background-image': !!_containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', + 'background-image': _containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', 'background-position': '50% 50%', 'background-repeat': 'no-repeat', 'display': 'block', @@ -401,23 +380,18 @@ F2.extend('UI', (function() { 'position': 'absolute', 'top': 0, 'z-index': _containerConfig.UI.Mask.zIndex, - 'filter': 'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', 'opacity': _containerConfig.UI.Mask.opacity }); } - // only set the position if the container is currently static if (container.css('position') === 'static') { - container.css({ - 'position': 'relative' - }); - // setting this data property tells hideMask to set the position - // back to static + container.css({ 'position': 'relative' }); + + // Setting this property tells hideMask to set the position to static container.data(F2.Constants.Css.MASK_CONTAINER, true); } - // add the mask to the container container.append(mask); } }; From de7c65ae43a26ed9e7ff12ae2ffc109fac680bc5 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:36:02 -0700 Subject: [PATCH 13/61] Tweaking rules for eval and return --- .eslintrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.eslintrc b/.eslintrc index 7d4a1838..32127646 100644 --- a/.eslintrc +++ b/.eslintrc @@ -17,6 +17,7 @@ "itConditionally": true }, "rules": { + "no-eval": false, "no-comma-dangle": true, "no-cond-assign": true, "no-console": false, @@ -39,6 +40,7 @@ "space-after-function-name": "never", "operator-assignment": [2, "always"], // TODO: reverse when issues are fixed + "consistent-return": false, "no-use-before-define": false, "no-unused-vars": false } From e267a2e35e9fa783730adfca39012cc9fb2930d0 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:36:18 -0700 Subject: [PATCH 14/61] Removing commented code --- Gruntfile.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 1d04f923..f9132ae4 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -183,10 +183,7 @@ module.exports = function(grunt) { options: { config: '.eslintrc' }, - target: [ - './src/lib/*.js', - './tests/spec/*.js' - ] + target: ['./src/lib/*.js'] }, uglify: { options: { From 94a7f97557ace10d2b36031df927f8f7cb750ae4 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:36:32 -0700 Subject: [PATCH 15/61] Fixing styling and lint errors --- src/lib/F2.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index 3b77215e..1e97e641 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -8,7 +8,7 @@ var F2 = (function() { Test whether a value is a native Node @method _isNode @private - @param {Value to test} test + @param {object} test Any value to test @returns {boolean} True if Node */ function _isNode(test) { @@ -23,7 +23,7 @@ var F2 = (function() { Test whether a value is a native Element @method _isElement @private - @param {Value to test} test + @param {object} test Any value to test @returns {boolean} True if Element */ function _isElement(test) { @@ -38,8 +38,8 @@ var F2 = (function() { Abosolutizes a relative URL @method _absolutizeURI @private - @param {e.g., location.href} base - @param {URL to absolutize} href + @param {string} base The base domain + @param {strong} href The relative url to make absolute @returns {string} URL Source: https://gist.github.com/Yaffle/1088850 Tests: http://skew.org/uri/uri_tests.html @@ -71,11 +71,11 @@ var F2 = (function() { } /** - Parses URI - @method _parseURI + Parses URI into its component parts @private - @param {The URL to parse} url - @returns {Parsed URL} string + @method _parseURI + @param {string} url The url to be parsed + @returns {object} The parts of the url Source: https://gist.github.com/Yaffle/1088850 Tests: http://skew.org/uri/uri_tests.html */ @@ -104,9 +104,12 @@ var F2 = (function() { A function to pass into F2.stringify which will prevent circular reference errors when serializing objects @method appConfigReplacer + @param {string} key The key being examined + @param {*} value The value being examined + @returns {*} Returns the original allowed value or undefined */ appConfigReplacer: function(key, value) { - if (key == 'root' || key == 'ui' || key == 'height') { + if (key === 'root' || key === 'ui' || key === 'height') { return undefined; } else { return value; @@ -212,7 +215,7 @@ var F2 = (function() { /** Tests a URL to see if it's on the same domain (local) or not @method isLocalRequest - @param {URL to test} url + @param {string} url The url to test @returns {bool} Whether the URL is local or not Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js */ From 93eb76140c47ee8a381ed7304794c179920cca8a Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:36:43 -0700 Subject: [PATCH 16/61] Fixing styling and lint errors --- src/lib/app_handlers.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index 7c072aad..48d342bd 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -113,7 +113,7 @@ F2.extend('AppHandlers', (function() { // Token must match F2 function _validateF2Token(token) { - if (token != _f2Token) { + if (token !== _f2Token) { throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); } } @@ -170,6 +170,7 @@ F2.extend('AppHandlers', (function() { and can only be called one time. Container Developers must store the return value inside of a closure. @method getToken + @returns {string} A one-time container token */ getToken: function() { /** @@ -188,6 +189,7 @@ F2.extend('AppHandlers', (function() { additional internal methods. @method __f2GetToken @private + @returns {string} A one-time container token */ __f2GetToken: function() { /** @@ -206,6 +208,7 @@ F2.extend('AppHandlers', (function() { @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. @param {String} eventKey The event to fire. The complete list of event keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes */ __trigger: function(token, eventKey) { _validateF2Token(token); @@ -257,6 +260,7 @@ F2.extend('AppHandlers', (function() { @param {Function} listener A function that will be triggered when a specific event occurs. For detailed argument definition refer to {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes @example var token = F2.AppHandlers.getToken(); F2.AppHandlers.on( @@ -302,6 +306,7 @@ F2.extend('AppHandlers', (function() { which event to attach the listener to. If no namespace is provided all listeners for the specified event type will be removed. Complete list available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes @example var token = F2.AppHandlers.getToken(); F2.AppHandlers.off(token, 'appRenderBefore'); From 3c1a3214558170f10ca75c80f90e38733c2e2e3d Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:37:02 -0700 Subject: [PATCH 17/61] Fixing styling and lint errors for 'classes' --- src/lib/classes.js | 95 ++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/src/lib/classes.js b/src/lib/classes.js index e2286cab..d3428af0 100644 --- a/src/lib/classes.js +++ b/src/lib/classes.js @@ -5,8 +5,9 @@ F2.extend('', { /** The App Class is an optional class that can be namespaced onto the - {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The [F2 Docs](../../app-development.html#app-class) - has more information on the usage of the App Class. + {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The + [F2 Docs](../../app-development.html#app-class) has more information on the + usage of the App Class. @class F2.App @constructor @param {F2.AppConfig} appConfig The F2.AppConfig object for the app @@ -31,7 +32,8 @@ F2.extend('', { */ AppConfig: { /** - The unique ID of the app. More information can be found [here](../../app-development.html#f2-appid). + The unique ID of the app. More information can be found + [here](../../app-development.html#f2-appid). @property appId @type string @required @@ -70,8 +72,9 @@ F2.extend('', { /** True if the app will be loaded in an iframe. This property will be true if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object sets - `isSecure = true`. It will also be true if the [container](../../container-development.html) - has made the decision to run apps in iframes. + `isSecure = true`. It will also be true if the + [container](../../container-development.html) has made the decision to + run apps in iframes. @property isSecure @type bool @default false @@ -116,9 +119,9 @@ F2.extend('', { maxWidth: 0, /** The recommended minimum grid size that this app should be run. This value - corresponds to the 12-grid system that is used by the [container](../../container-development.html). - This property should be set by apps that require a certain number of - columns in their layout. + corresponds to the 12-grid system that is used by the + [container](../../container-development.html). This property should be + set by apps that require a certain number of columns in their layout. @property minGridSize @type int @default 4 @@ -143,16 +146,16 @@ F2.extend('', { name: '', /** The root DOM element that contains the app. - **This property is populated during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} - process.** + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process.** @property root @type Element */ root: undefined, /** The instance of F2.UI providing easy access to F2.UI methods. - **This property is populated during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} - process.** + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process.** @property ui @type F2.UI */ @@ -160,7 +163,8 @@ F2.extend('', { /** The views that this app supports. Available views are defined in {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The presence of a view - can be checked via F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: F2.inArray(F2.Constants.Views.SETTINGS, app.views). + can be checked via F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: + F2.inArray(F2.Constants.Views.SETTINGS, app.views). @property views @type Array */ @@ -229,7 +233,8 @@ F2.extend('', { status: '' }, /** - An object containing configuration information for the [container](../../container-development.html). + An object containing configuration information for the + [container](../../container-development.html). @class F2.ContainerConfig */ ContainerConfig: { @@ -239,38 +244,40 @@ F2.extend('', { {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of html. @method afterAppRender - @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} - and will be removed in v2.0 + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 @param {F2.AppConfig} appConfig The F2.AppConfig object @param {string} html The string of html representing the app @return {Element} The DOM Element surrounding the app */ - afterAppRender: function(appConfig, html) {}, + afterAppRender: null, /** Allows the [container](../../container-development.html) to wrap an app - in extra html. The function should accept an {{#crossLink "F2.AppConfig"}}{{/crossLink}} - object and also a string of html. The extra html can provide links to - edit app settings and remove an app from the container. See {{#crossLink "F2.Constants.Css"}}{{/crossLink}} - for CSS classes that should be applied to elements. + in extra html. The function should accept an + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of + html. The extra html can provide links to edit app settings and remove an + app from the container. See + {{#crossLink "F2.Constants.Css"}}{{/crossLink}} for CSS classes that + should be applied to elements. @method appRender - @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} - and will be removed in v2.0 + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 @param {F2.AppConfig} appConfig The F2.AppConfig object @param {string} html The string of html representing the app */ - appRender: function(appConfig, html) {}, + appRender: null, /** Allows the container to render html for an app before the AppManifest for an app has loaded. This can be useful if the design calls for loading icons to appear for each app before each app is loaded and rendered to the page. @method beforeAppRender - @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} - and will be removed in v2.0 + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 @param {F2.AppConfig} appConfig The F2.AppConfig object @return {Element} The DOM Element surrounding the app */ - beforeAppRender: function(appConfig) {}, + beforeAppRender: null, /** True to enable debug mode in F2.js. Adds additional logging, resource cache busting, etc. @@ -328,8 +335,9 @@ F2.extend('', { */ UI: { /** - An object containing configuration defaults for the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} - and F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. + An object containing configuration defaults for the + F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} and + F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. @class F2.ContainerConfig.UI.Mask */ Mask: { @@ -391,8 +399,8 @@ F2.extend('', { that is used for the request. @method xhr.dataType @param {string} url The manifest url - @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - objects + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects @return {string} The request data type that should be used @example F2.init({ @@ -406,14 +414,14 @@ F2.extend('', { } }); */ - dataType: function(url, appConfigs) {}, + dataType: null, /** Allows the container to override the request method that is used (just like the `type` parameter to `jQuery.ajax()`. @method xhr.type @param {string} url The manifest url - @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - objects + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects @return {string} The request method that should be used @example F2.init({ @@ -427,14 +435,14 @@ F2.extend('', { } }); */ - type: function(url, appConfigs) {}, + type: null, /** Allows the container to override the url that is used to request an app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}}. @method xhr.url @param {string} url The manifest url - @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - objects + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects @return {string} The url that should be used for the request @example F2.init({ @@ -445,13 +453,15 @@ F2.extend('', { } }); */ - url: function(url, appConfigs) {} + url: null }, /** Allows the container to override the script loader which requests dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - @property loadScripts - @type function + @method loadScripts + @param {Array} scripts Script file urls to be loaded + @param {Array} inlines Inline JavaScript to be run + @param {Function} callback Should be called when loading is complete @example F2.init({ loadScripts: function(scripts, inlines, callback) { @@ -464,8 +474,9 @@ F2.extend('', { /** Allows the container to override the stylesheet loader which requests dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - @property loadStyles - @type function + @method loadStyles + @param {Array} styles CSS file urls to be loaded + @param {Function} callback Should be called when loading is complete @example F2.init({ loadStyles: function(styles, callback) { From 71a6cda8cc08de29c112a657f66961f3495c3cd4 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:37:16 -0700 Subject: [PATCH 18/61] Fixing styling and lint errors for 'container' --- src/lib/container.js | 2427 +++++++++++++++++++++--------------------- 1 file changed, 1188 insertions(+), 1239 deletions(-) diff --git a/src/lib/container.js b/src/lib/container.js index ebee0c2a..858b705e 100644 --- a/src/lib/container.js +++ b/src/lib/container.js @@ -1,1243 +1,1192 @@ /** - * Root namespace of the F2 SDK - * @module f2 - * @class F2 - */ + Root namespace of the F2 SDK + @module f2 + @class F2 +*/ F2.extend('', (function() { - var _apps = {}; - var _config = false; - var _bUsesAppHandlers = false; - var _sAppHandlerToken = F2.AppHandlers.__f2GetToken(); - var _loadedScripts = {}; - var _loadedStyles = {}; - var _loadingScripts = {}; - - /** - * Appends the app's html to the DOM - * @method _afterAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html - * @return {Element} The DOM Element that contains the app - */ - var _afterAppRender = function(appConfig, html) { - - var handler = _config.afterAppRender || function(appConfig, html) { - return jQuery(html).appendTo('body'); - }; - var appContainer = handler(appConfig, html); - - if ( !! _config.afterAppRender && !appContainer) { - F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); - return; - } - else { - // apply APP class - jQuery(appContainer).addClass(F2.Constants.Css.APP); - return appContainer.get(0); - } - }; - - /** - * Renders the html for an app. - * @method _appRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html - */ - var _appRender = function(appConfig, html) { - - // apply APP_CONTAINER class and AppID - html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - - // optionally apply wrapper html - if (_config.appRender) { - html = _config.appRender(appConfig, html); - } - - return _outerHtml(html); - }; - - /** - * Rendering hook to allow containers to render some html prior to an app - * loading - * @method _beforeAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {Element} The DOM Element surrounding the app - */ - var _beforeAppRender = function(appConfig) { - var handler = _config.beforeAppRender || jQuery.noop; - return handler(appConfig); - }; - - /** - * Handler to inform the container that a script failed to load - * @method _onScriptLoadFailure - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param scriptInfo The path of the script that failed to load or the exception info - * for the inline script that failed to execute - */ - var _appScriptLoadFailed = function(appConfig, scriptInfo) { - var handler = _config.appScriptLoadFailed || jQuery.noop; - return handler(appConfig, scriptInfo); - }; - - /** - * Adds properties to the AppConfig object - * @method _createAppConfig - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with - * necessary properties - */ - var _createAppConfig = function(appConfig) { - - // make a copy of the app config to ensure that the original is not modified - appConfig = jQuery.extend(true, {}, appConfig); - - // create the instanceId for the app - appConfig.instanceId = appConfig.instanceId || F2.guid(); - - // default the views if not provided - appConfig.views = appConfig.views || []; - if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { - appConfig.views.push(F2.Constants.Views.HOME); - } - - //pass container-defined locale to each app - if (F2.ContainerConfig.locale){ - appConfig.containerLocale = F2.ContainerConfig.locale; - } - - return appConfig; - }; - - /** - * Generate an AppConfig from the element's attributes - * @method _getAppConfigFromElement - * @private - * @param {Element} node The DOM node from which to generate the F2.AppConfig object - * @return {F2.AppConfig} The new F2.AppConfig object - */ - var _getAppConfigFromElement = function(node) { - var appConfig; - - if (node) { - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; - - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); - - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } - catch (e) { - console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } - } - } - } - - return appConfig; - }; - - /** - * Returns true if the DOM node has children that are not text nodes - * @method _hasNonTextChildNodes - * @private - * @param {Element} node The DOM node - * @return {bool} True if there are non-text children - */ - var _hasNonTextChildNodes = function(node) { - var hasNodes = false; - - if (node.hasChildNodes()) { - for (var i = 0, len = node.childNodes.length; i < len; i++) { - if (node.childNodes[i].nodeType === 1) { - hasNodes = true; - break; - } - } - } - - return hasNodes; - }; - - /** - * Adds properties to the ContainerConfig object to take advantage of defaults - * @method _hydrateContainerConfig - * @private - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - var _hydrateContainerConfig = function(containerConfig) { - - if (!containerConfig.scriptErrorTimeout) { - containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; - } - - if (containerConfig.debugMode !== true) { - containerConfig.debugMode = F2.ContainerConfig.debugMode; - } - - if (containerConfig.locale && typeof containerConfig.locale == 'string'){ - F2.ContainerConfig.locale = containerConfig.locale; - } - }; - - /** - * Attach app events - * @method _initAppEvents - * @private - */ - var _initAppEvents = function(appConfig) { - - jQuery(appConfig.root).on('click', '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']', function(event) { - - event.preventDefault(); - - var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); - - // handle the special REMOVE view - if (view == F2.Constants.Views.REMOVE) { - F2.removeApp(appConfig.instanceId); - } - else { - appConfig.ui.Views.change(view); - } - }); - }; - - /** - * Attach container Events - * @method _initContainerEvents - * @private - */ - var _initContainerEvents = function() { - - var resizeTimeout; - var resizeHandler = function() { - F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); - }; - - jQuery(window).on('resize', function() { - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(resizeHandler, 100); - }); - - //listen for container-broadcasted locale changes - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(data){ - if (data.locale && typeof data.locale == 'string'){ - F2.ContainerConfig.locale = data.locale; - } - }); - }; - - /** - * Checks if an element is a placeholder element - * @method _isPlaceholderElement - * @private - * @param {Element} node The DOM element to check - * @return {bool} True if the element is a placeholder - */ - var _isPlaceholderElement = function(node) { - return ( - F2.isNativeDOMNode(node) && - !_hasNonTextChildNodes(node) && - !!node.getAttribute('data-f2-appid') && - !!node.getAttribute('data-f2-manifesturl') - ); - }; - - /** - * Has the container been init? - * @method _isInit - * @private - * @return {bool} True if the container has been init - */ - var _isInit = function() { - return !!_config; - }; - - /** - * Instantiates each app from it's appConfig and stores that in a local private collection - * @method _createAppInstance - * @private - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - */ - var _createAppInstance = function(appConfig, appContent) { - // instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - - // instantiate F2.App - if (F2.Apps[appConfig.appId] !== undefined) { - if (typeof F2.Apps[appConfig.appId] === 'function') { - - // IE - setTimeout(function() { - _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); - if (_apps[appConfig.instanceId].app['init'] !== undefined) { - _apps[appConfig.instanceId].app.init(); - } - }, 0); - - } - else { - F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); - } - } - }; - - /** - * Loads the app's html/css/javascript - * @method loadApp - * @private - * @param {Array} appConfigs An array of - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - * @param {F2.AppManifest} [appManifest] The AppManifest object - */ - var _loadApps = function(appConfigs, appManifest) { - appConfigs = [].concat(appConfigs); - - // check for secure app - if (appConfigs.length == 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { - _loadSecureApp(appConfigs[0], appManifest); - return; - } - - // check that the number of apps in manifest matches the number requested - if (appConfigs.length != appManifest.apps.length) { - F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); - return; - } - - // Fn for loading manifest Styles - var _loadStyles = function(styles, cb) { - // Attempt to use the user provided method - if (_config.loadStyles) { - return _config.loadStyles(styles, cb); - } - - // load styles, see #101 - var stylesFragment = null, - useCreateStyleSheet = !! document.createStyleSheet; - - jQuery.each(styles, function(i, e) { - var resourceUrl = e, - resourceKey = e.toLowerCase(); - - if (_loadedStyles[resourceKey]) { - return; - } - - if (useCreateStyleSheet) { - document.createStyleSheet(resourceUrl); - } - else { - stylesFragment = stylesFragment || []; - stylesFragment.push(''); - } - - _loadedStyles[resourceKey] = true; - }); - - if (stylesFragment) { - jQuery('head').append(stylesFragment.join('')); - } - - cb(); - }; - - // For loading AppManifest.scripts - // Parts derived from curljs, headjs, requirejs, dojo - var _loadScripts = function(scripts, cb) { - // Attempt to use the user provided method - if (_config.loadScripts) { - return _config.loadScripts(scripts, cb); - } - - if (!scripts.length) { - return cb(); - } - - var doc = window.document; - var scriptCount = scripts.length; - var scriptsLoaded = 0; - //http://caniuse.com/#feat=script-async - // var supportsAsync = 'async' in doc.createElement('script') || 'MozAppearance' in doc.documentElement.style || window.opera; - var head = doc && (doc['head'] || doc.getElementsByTagName('head')[0]); - // to keep IE from crying, we need to put scripts before any - // elements, but after any . this should do it: - var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; - // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 - var readyStates = 'addEventListener' in window ? {} : { 'loaded': true, 'complete': true }; - - // Log and emit event for the failed (400,500) scripts - var _error = function(e) { - setTimeout(function() { - var evtData = { - src: e.target.src, - appId: appConfigs[0].appId - }; - - // Send error to console - F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); - - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); - - if (!_bUsesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], evtData.src); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - evtData.src - ); - } - }, _config.scriptErrorTimeout); // Defaults to 7000 - }; - - var _checkComplete = function() { - // Are we done loading all scripts for this app? - if (++scriptsLoaded === scriptCount) { - // success - cb(); - } - }; - - var _emptyWaitlist = function(resourceKey, errorEvt) { - var waiting, - waitlist = _loadingScripts[resourceKey]; - - if (!waitlist) { - return; - } - - for (var i=0; i really is the best - head.insertBefore(script, insertBeforeEl); - }); - }; - - var _loadInlineScripts = function(inlines, cb) { - // Attempt to use the user provided method - if (_config.loadInlineScripts) { - _config.loadInlineScripts(inlines, cb); - } - else { - for (var i = 0, len = inlines.length; i < len; i++) { - try { - eval(inlines[i]); - } - catch (exception) { - F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); - - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { appId:appConfigs[0].appId, src: inlines[i], err: exception }); - - if (!_bUsesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], exception); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - exception - ); - } - } - } - cb(); - } - }; - - // Determine whether an element has been added to the page - var elementInDocument = function(element) { - if (element) { - while (element.parentNode) { - element = element.parentNode; - - if (element === document) { - return true; - } - } - } - - return false; - }; - - // Fn for loading manifest app html - var _loadHtml = function(apps) { - jQuery.each(apps, function(i, a) { - if (_isPlaceholderElement(appConfigs[i].root)) { - jQuery(appConfigs[i].root) - .addClass(F2.Constants.Css.APP) - .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); - } - else if (!_bUsesAppHandlers) { - // load html and save the root node - appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfigs[i], // the app config - _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) - ); - - var appId = appConfigs[i].appId, - root = appConfigs[i].root; - - if (!root) { - throw ('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); - } - - if (!elementInDocument(root)) { - throw ('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfigs[i] // the app config - ); - - if (!F2.isNativeDOMNode(root)) { - throw ('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); - } - } - - // init events - _initAppEvents(appConfigs[i]); - }); - }; - - // Pull out the manifest data - var scripts = appManifest.scripts || []; - var styles = appManifest.styles || []; - var inlines = appManifest.inlineScripts || []; - var apps = appManifest.apps || []; - - // Finally, load the styles, html, and scripts - _loadStyles(styles, function() { - // Put the html on the page - _loadHtml(apps); - // Add the script content to the page - _loadScripts(scripts, function() { - // emit event we're done with scripts - if (appConfigs[0]){ F2.Events.emit('APP_SCRIPTS_LOADED', { appId:appConfigs[0].appId, scripts:scripts }); } - // Load any inline scripts - _loadInlineScripts(inlines, function() { - // Create the apps - jQuery.each(appConfigs, function(i, a) { - _createAppInstance(a, appManifest.apps[i]); - }); - }); - }); - }); - }; - - /** - * Loads the app's html/css/javascript into an iframe - * @method loadSecureApp - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into the - * page. - */ - var _loadSecureApp = function(appConfig, appManifest) { - - // make sure the container is configured for secure apps - if (_config.secureAppPagePath) { - if (_isPlaceholderElement(appConfig.root)) { - jQuery(appConfig.root) - .addClass(F2.Constants.Css.APP) - .append(jQuery('
').addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - } - else if (!_bUsesAppHandlers) { - // create the html container for the iframe - appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); - } - else { - var $root = jQuery(appConfig.root); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfig, // the app config - _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) - ); - - if ($root.parents('body:first').length === 0) { - throw ('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfig // the app config - ); - - if (!appConfig.root) { - throw ('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } - - if (!F2.isNativeDOMNode(appConfig.root)) { - throw ('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } - } - - // instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - // init events - _initAppEvents(appConfig); - // create RPC socket - F2.Rpc.register(appConfig, appManifest); - } - else { - F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); - } - }; - - var _outerHtml = function(html) { - return jQuery('
').append(html).html(); - }; - - /** - * Checks if the app is valid - * @method _validateApp - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @returns {bool} True if the app is valid - */ - var _validateApp = function(appConfig) { - - // check for valid app configurations - if (!appConfig.appId) { - F2.log('"appId" missing from app object'); - return false; - } - else if (!appConfig.root && !appConfig.manifestUrl) { - F2.log('"manifestUrl" missing from app object'); - return false; - } - - return true; - }; - - /** - * Checks if the ContainerConfig is valid - * @method _validateContainerConfig - * @private - * @returns {bool} True if the config is valid - */ - var _validateContainerConfig = function() { - - if (_config) { - if (_config.xhr) { - if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { - throw ('ContainerConfig.xhr should be a function or an object'); - } - if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { - throw ('ContainerConfig.xhr.dataType should be a function'); - } - if (_config.xhr.type && typeof _config.xhr.type !== 'function') { - throw ('ContainerConfig.xhr.type should be a function'); - } - if (_config.xhr.url && typeof _config.xhr.url !== 'function') { - throw ('ContainerConfig.xhr.url should be a function'); - } - } - } - - return true; - }; - - return { - /** - * Gets the current list of apps in the container - * @method getContainerState - * @returns {Array} An array of objects containing the appId - */ - getContainerState: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerState()'); - return; - } - - return jQuery.map(_apps, function(app) { - return { - appId: app.config.appId - }; - }); - }, - /** - * Gets the current locale defined by the container - * @method getContainerLocale - * @returns {String} IETF-defined standard language tag - */ - getContainerLocale: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerLocale()'); - return; - } - - return F2.ContainerConfig.locale; - }, - /** - * Initializes the container. This method must be called before performing - * any other actions in the container. - * @method init - * @param {F2.ContainerConfig} config The configuration object - */ - init: function(config) { - _config = config || {}; - - _validateContainerConfig(); - - _hydrateContainerConfig(_config); - - // dictates whether we use the old logic or the new logic. - // TODO: Remove in v2.0 - _bUsesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); - - // only establish RPC connection if the container supports the secure app page - if ( !! _config.secureAppPagePath || _config.isSecureAppPage) { - F2.Rpc.init( !! _config.secureAppPagePath ? _config.secureAppPagePath : false); - } - - F2.UI.init(_config); - - if (!_config.isSecureAppPage) { - _initContainerEvents(); - } - }, - /** - * Has the container been init? - * @method isInit - * @return {bool} True if the container has been init - */ - isInit: _isInit, - /** - * Automatically load apps that are already defined in the DOM. Elements will - * be rendered into the location of the placeholder DOM element. Any AppHandlers - * that are defined will be bypassed. - * @method loadPlaceholders - * @param {Element} parentNode The element to search for placeholder apps - */ - loadPlaceholders: function(parentNode) { - - var elements = [], - appConfigs = [], - add = function(e) { - if (!e) { return; } - elements.push(e); - }, - addAll = function(els) { - if (!els) { return; } - for (var i = 0, len = els.length; i < len; i++) { - add(els[i]); - } - }; - - if (!!parentNode && !F2.isNativeDOMNode(parentNode)) { - throw ('"parentNode" must be null or a DOM node'); - } - - // if the passed in element has a data-f2-appid attribute add - // it to the list of elements but to not search within that - // element for other placeholders - if (parentNode && parentNode.hasAttribute('data-f2-appid')) { - add(parentNode); - } else { - - // find placeholders within the parentNode only if - // querySelectorAll exists - parentNode = parentNode || document; - if (parentNode.querySelectorAll) { - addAll(parentNode.querySelectorAll('[data-f2-appid]')); - } - } - - for (var i = 0, len = elements.length; i < len; i++) { - var appConfig = _getAppConfigFromElement(elements[i]); - appConfigs.push(appConfig); - } - - if (appConfigs.length) { - F2.registerApps(appConfigs); - } - }, - /** - * Begins the loading process for all apps and/or initialization process for pre-loaded apps. - * The app will be passed the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will - * contain the app's unique instanceId within the container. If the - * {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated the app is considered - * to be a pre-loaded app and will be handled accordingly. Optionally, the - * {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those - * assets will be used instead of making a request. - * @method registerApps - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @param {Array} [appManifests] An array of - * {{#crossLink "F2.AppManifest"}}{{/crossLink}} - * objects. This array must be the same length as the apps array that is - * objects. This array must be the same length as the apps array that is - * passed in. This can be useful if apps are loaded on the server-side and - * passed down to the client. - * @example - * Traditional App requests. - * - * // Traditional f2 app configs - * var arConfigs = [ - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * }, - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * }, - * { - * appId: 'com_externaldomain_example_app2', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs); - * - * @example - * Pre-loaded and tradition apps mixed. - * - * // Pre-loaded apps and traditional f2 app configs - * // you can preload the same app multiple times as long as you have a unique root for each - * var arConfigs = [ - * { - * appId: 'com_mydomain_example_app', - * context: {}, - * root: 'div#example-app-1', - * manifestUrl: '' - * }, - * { - * appId: 'com_mydomain_example_app', - * context: {}, - * root: 'div#example-app-2', - * manifestUrl: '' - * }, - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs); - * - * @example - * Apps with predefined manifests. - * - * // Traditional f2 app configs - * var arConfigs = [ - * {appId: 'com_externaldomain_example_app', context: {}}, - * {appId: 'com_externaldomain_example_app', context: {}}, - * {appId: 'com_externaldomain_example_app2', context: {}} - * ]; - * - * // Pre requested manifest responses - * var arManifests = [ - * { - * apps: ['
Example App!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/AppClass.js'], - * styles: ['http://www.domain.com/css/AppStyles.css'] - * }, - * { - * apps: ['
Example App!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/AppClass.js'], - * styles: ['http://www.domain.com/css/AppStyles.css'] - * }, - * { - * apps: ['
Example App 2!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/App2Class.js'], - * styles: ['http://www.domain.com/css/App2Styles.css'] - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs, arManifests); - */ - registerApps: function(appConfigs, appManifests) { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.registerApps()'); - return; - } - else if (!appConfigs) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - } - - var appStack = []; - var batches = {}; - var callbackStack = {}; - var haveManifests = false; - appConfigs = [].concat(appConfigs); - appManifests = [].concat(appManifests || []); - haveManifests = !! appManifests.length; - - // appConfigs must have a length - if (!appConfigs.length) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - // ensure that the array of apps and manifests are qual - } - else if (appConfigs.length && haveManifests && appConfigs.length != appManifests.length) { - F2.log('The length of "apps" does not equal the length of "appManifests"'); - return; - } - - // validate each app and assign it an instanceId - // then determine which apps can be batched together - jQuery.each(appConfigs, function(i, a) { - // add properties and methods - a = _createAppConfig(a); - - // Will set to itself, for preloaded apps, or set to null for apps that aren't already - // on the page. - a.root = a.root || null; - - // we validate the app after setting the root property because pre-load apps do no require - // manifest url - if (!_validateApp(a)) { - return; // move to the next app - } - - // save app - _apps[a.instanceId] = { - config: a - }; - - // If the root property is defined then this app is considered to be preloaded and we will - // run it through that logic. - if (a.root && !_isPlaceholderElement(a.root)) { - if ((!a.root && typeof(a.root) != 'string') && !F2.isNativeDOMNode(a.root)) { - F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); - F2.log('AppConfig instance:', a); - throw ('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); - } - else if (jQuery(a.root).length != 1) { - F2.log('AppConfig invalid for pre-load, root not unique'); - F2.log('AppConfig instance:', a); - F2.log('Number of dom node instances:', jQuery(a.root).length); - throw ('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); - } - - // instantiate F2.App - _createAppInstance(a); - - // init events - _initAppEvents(a); - - // Continue on in the .each loop, no need to continue because the app is on the page - // the js in initialized, and it is ready to role. - return; // equivalent to continue in .each - } - - if (!_isPlaceholderElement(a.root)) { - if (!_bUsesAppHandlers) { - // fire beforeAppRender - a.root = _beforeAppRender(a); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - a // the app config - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - a // the app config - ); - } - } - - // if we have the manifest, go ahead and load the app - if (haveManifests) { - _loadApps(a, appManifests[i]); - } - else { - // check if this app can be batched - if (a.enableBatchRequests && !a.isSecure) { - batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; - batches[a.manifestUrl.toLowerCase()].push(a); - } - else { - appStack.push({ - apps: [a], - url: a.manifestUrl - }); - } - } - }); - - // we don't have the manifests, go ahead and load them - if (!haveManifests) { - // add the batches to the appStack - jQuery.each(batches, function(i, b) { - appStack.push({ - url: i, - apps: b - }); - }); - - // if an app is being loaded more than once on the page, there is the - // potential that the jsonp callback will be clobbered if the request - // for the AppManifest for the app comes back at the same time as - // another request for the same app. We'll create a callbackStack - // that will ensure that requests for the same app are loaded in order - // rather than at the same time - jQuery.each(appStack, function(i, req) { - // define the callback function based on the first app's App ID - var jsonpCallback = F2.Constants.JSONP_CALLBACK + req.apps[0].appId; - - // push the request onto the callback stack - callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; - callbackStack[jsonpCallback].push(req); - }); - - // loop through each item in the callback stack and make the request - // for the AppManifest. When the request is complete, pop the next - // request off the stack and make the request. - jQuery.each(callbackStack, function(i, requests) { - - var manifestRequest = function(jsonpCallback, req) { - if (!req) { - return; - } - - // setup defaults and callbacks - var url = req.url, - type = 'GET', - dataType = 'jsonp', - completeFunc = function() { - manifestRequest(i, requests.pop()); - }, - errorFunc = function() { - jQuery.each(req.apps, function(idx, item) { - item.name = item.name || item.appId; - F2.log('Removed failed ' + item.name + ' app', item); - F2.removeApp(item.instanceId); - }); - }, - successFunc = function(appManifest) { - _loadApps(req.apps, appManifest); - }; - - // optionally fire xhr overrides - if (_config.xhr && _config.xhr.dataType) { - dataType = _config.xhr.dataType(req.url, req.apps); - if (typeof dataType !== 'string') { - throw ('ContainerConfig.xhr.dataType should return a string'); - } - } - if (_config.xhr && _config.xhr.type) { - type = _config.xhr.type(req.url, req.apps); - if (typeof type !== 'string') { - throw ('ContainerConfig.xhr.type should return a string'); - } - } - if (_config.xhr && _config.xhr.url) { - url = _config.xhr.url(req.url, req.apps); - if (typeof url !== 'string') { - throw ('ContainerConfig.xhr.url should return a string'); - } - } - - // setup the default request function if an override is not present - var requestFunc = _config.xhr; - if (typeof requestFunc !== 'function') { - requestFunc = function(url, appConfigs, successCallback, errorCallback, completeCallback) { - jQuery.ajax({ - url: url, - type: type, - data: { - params: F2.stringify(req.apps, F2.appConfigReplacer) - }, - jsonp: false, // do not put 'callback=' in the query string - jsonpCallback: jsonpCallback, // Unique function name - dataType: dataType, - success: successCallback, - error: function(jqxhr, settings, exception) { - F2.log('Failed to load app(s)', exception.toString(), req.apps); - errorCallback(); - }, - complete: completeCallback - }); - }; - } - - requestFunc(url, req.apps, successFunc, errorFunc, completeFunc); - }; - - manifestRequest(i, requests.pop()); - }); - } - }, - /** - * Removes all apps from the container - * @method removeAllApps - */ - removeAllApps: function() { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeAllApps()'); - return; - } - - jQuery.each(_apps, function(i, a) { - F2.removeApp(a.config.instanceId); - }); - }, - /** - * Removes an app from the container - * @method removeApp - * @param {string} instanceId The app's instanceId - */ - removeApp: function(instanceId) { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeApp()'); - return; - } - - if (_apps[instanceId]) { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - _apps[instanceId] // the app instance - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY, - _apps[instanceId] // the app instance - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - _apps[instanceId] // the app instance - ); - - delete _apps[instanceId]; - } - } - }; + var _apps = {}; + var _config = false; + var _usesAppHandlers = false; + var _appHandlerToken = F2.AppHandlers.__f2GetToken(); + var _loadedScripts = {}; + var _loadedStyles = {}; + var _loadingScripts = {}; + + /** + Appends the app's html to the DOM. + @method _afterAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @return {Element} The DOM Element that contains the app + */ + function _afterAppRender(appConfig, html) { + var handler = _config.afterAppRender || function(_appConfig, _html) { + return jQuery(_html).appendTo('body'); + }; + var $appContainer = handler(appConfig, html); + + if (_config.afterAppRender && !$appContainer) { + F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); + return; + } + + jQuery($appContainer).addClass(F2.Constants.Css.APP); + + return $appContainer.get(0); + } + + /** + Renders the html for an app. + @method _appRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @returns {string} HTML for the app + */ + function _appRender(appConfig, html) { + // Apply APP_CONTAINER class and AppID + html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + + // Optionally apply wrapper html + if (_config.appRender) { + html = _config.appRender(appConfig, html); + } + + return _outerHtml(html); + } + + /** + Rendering hook to allow containers to render some html prior to an app + loading. + @method _beforeAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app + */ + function _beforeAppRender(appConfig) { + var handler = _config.beforeAppRender || jQuery.noop; + return handler(appConfig); + } + + /** + Handler to inform the container that a script failed to load. + @method _onScriptLoadFailure + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} scriptInfo The path of the script that failed to load or + the exception info for the inline script that failed to execute. + */ + function _appScriptLoadFailed(appConfig, scriptInfo) { + if (_config.appScriptLoadFailed) { + _config.appScriptLoadFailed(appConfig, scriptInfo); + } + } + + /** + Adds properties to the AppConfig object. + @method _createAppConfig + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with + necessary properties. + */ + function _createAppConfig(appConfig) { + // Make a copy of the app config to ensure that the original is not modified + appConfig = jQuery.extend(true, {}, appConfig); + + // Create the instanceId for the app + appConfig.instanceId = appConfig.instanceId || F2.guid(); + + // Default the views if not provided + appConfig.views = appConfig.views || []; + if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { + appConfig.views.push(F2.Constants.Views.HOME); + } + + // Pass container-defined locale to each app + if (F2.ContainerConfig.locale) { + appConfig.containerLocale = F2.ContainerConfig.locale; + } + + return appConfig; + } + + /** + Generate an AppConfig from the element's attributes. + @method _getAppConfigFromElement + @private + @param {Element} node The DOM node from which to generate the F2.AppConfig + object + @return {F2.AppConfig} The new F2.AppConfig object + */ + function _getAppConfigFromElement(node) { + var appConfig; + + if (node) { + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; + + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); + + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); + } + } + } + } + + return appConfig; + } + + /** + Returns true if the DOM node has children that are not text nodes + @method _hasNonTextChildNodes + @private + @param {Element} node The DOM node + @return {bool} True if there are non-text children + */ + function _hasNonTextChildNodes(node) { + var hasNodes = false; + + if (node.hasChildNodes()) { + for (var i = 0, len = node.childNodes.length; i < len; i++) { + if (node.childNodes[i].nodeType === 1) { + hasNodes = true; + break; + } + } + } + + return hasNodes; + } + + /** + Adds properties to the ContainerConfig object to take advantage of defaults. + @method _hydrateContainerConfig + @private + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ + function _hydrateContainerConfig(containerConfig) { + if (!containerConfig.scriptErrorTimeout) { + containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; + } + + if (containerConfig.debugMode !== true) { + containerConfig.debugMode = F2.ContainerConfig.debugMode; + } + + if (containerConfig.locale && typeof containerConfig.locale === 'string') { + F2.ContainerConfig.locale = containerConfig.locale; + } + } + + /** + Attach app events. + @method _initAppEvents + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + */ + function _initAppEvents(appConfig) { + var elementFilter = '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']'; + + jQuery(appConfig.root).on('click', elementFilter, function(e) { + e.preventDefault(); + + var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); + + // Handle the special REMOVE view + if (view === F2.Constants.Views.REMOVE) { + F2.removeApp(appConfig.instanceId); + } else { + appConfig.ui.Views.change(view); + } + }); + } + + /** + Attach container Events + @method _initContainerEvents + @private + */ + function _initContainerEvents() { + function resizeHandler() { + F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); + } + + var resizeTimeout; + + jQuery(window).on('resize', function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(resizeHandler, 100); + }); + + // Listen for container-broadcasted locale changes + F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { + if (data.locale && typeof data.locale === 'string') { + F2.ContainerConfig.locale = data.locale; + } + }); + } + + /** + Checks if an element is a placeholder element. + @method _isPlaceholderElement + @private + @param {Element} node The DOM element to check + @return {bool} True if the element is a placeholder + */ + function _isPlaceholderElement(node) { + return ( + F2.isNativeDOMNode(node) && + !_hasNonTextChildNodes(node) && + !!node.getAttribute('data-f2-appid') && + !!node.getAttribute('data-f2-manifesturl') + ); + } + + /** + Has the container been init? + @method _isInit + @private + @return {bool} True if the container has been init + */ + function _isInit() { + return !!_config; + } + + /** + Instantiates app from its appConfig and stores that in a private collection. + @method _createAppInstance + @private + @param {object} appConfig An {{#crossLink "F2.AppConfig"}}{{/crossLink}} + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object. + */ + function _createAppInstance(appConfig, appContent) { + appConfig.ui = new F2.UI(appConfig); + + // instantiate F2.App + if (F2.Apps[appConfig.appId] !== undefined) { + if (typeof F2.Apps[appConfig.appId] === 'function') { + // IE + setTimeout(function() { + _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); + + if (_apps[appConfig.instanceId].app.init !== undefined) { + _apps[appConfig.instanceId].app.init(); + } + }, 0); + } else { + F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); + } + } + } + + /** + Loads the app's html/css/javascript. + @method loadApp + @private + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects. + @param {F2.AppManifest} [appManifest] The AppManifest object + */ + function _loadApps(appConfigs, appManifest) { + appConfigs = [].concat(appConfigs); + + // Check for secure app + if (appConfigs.length === 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { + _loadSecureApp(appConfigs[0], appManifest); + return; + } + + // Check that the number of apps in manifest matches the number requested + if (appConfigs.length !== appManifest.apps.length) { + F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); + return; + } + + function _loadStyles(styles, cb) { + if (_config.loadStyles) { + return _config.loadStyles(styles, cb); + } + + // Load styles, see #101 + var stylesFragment; + var useCreateStyleSheet = !!document.createStyleSheet; + + jQuery.each(styles, function(i, e) { + var resourceUrl = e; + var resourceKey = e.toLowerCase(); + + if (_loadedStyles[resourceKey]) { + return; + } + + if (useCreateStyleSheet) { + document.createStyleSheet(resourceUrl); + } else { + stylesFragment = stylesFragment || []; + stylesFragment.push(''); + } + + _loadedStyles[resourceKey] = true; + }); + + if (stylesFragment) { + jQuery('head').append(stylesFragment.join('')); + } + + cb(); + } + + function _loadScripts(scripts, cb) { + if (_config.loadScripts) { + return _config.loadScripts(scripts, cb); + } + + if (!scripts.length) { + return cb(); + } + + var doc = window.document; + var scriptCount = scripts.length; + var scriptsLoaded = 0; + // http://caniuse.com/#feat=script-async + var head = doc && (doc.head || doc.getElementsByTagName('head')[0]); + // For IE, put scripts before any elements, but after any + var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; + // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 + var readyStates = (window.addEventListener) ? {} : { + 'loaded': true, + 'complete': true + }; + + // Log and emit event for the failed (400,500) scripts + function _error(e) { + setTimeout(function() { + var evtData = { + src: e.target.src, + appId: appConfigs[0].appId + }; + + // Send error to console + F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); + + // Emit events + F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); + + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], evtData.src); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + evtData.src + ); + } + }, _config.scriptErrorTimeout); // Defaults to 7000 + } + + function _checkComplete() { + // Are we done loading all scripts for this app? + if (++scriptsLoaded === scriptCount) { + // success + cb(); + } + } + + function _emptyWaitlist(resourceKey, errorEvt) { + var waiting; + var waitlist = _loadingScripts[resourceKey]; + + if (!waitlist) { + return; + } + + for (var i = 0; i < waitlist.length; i++) { + waiting = waitlist [i]; + + if (errorEvt) { + waiting.error(errorEvt); + } else { + waiting.success(); + } + } + + _loadingScripts[resourceKey] = null; + } + + // Load scripts and eval inlines once complete + jQuery.each(scripts, function(i, url) { + var script = doc.createElement('script'); + var resourceUrl = url; + var resourceKey = resourceUrl.toLowerCase(); + + // Already finished loading, trigger callback + if (_loadedScripts[resourceKey]) { + return _checkComplete(); + } + + // This script is actively loading, add this app to the wait list + if (_loadingScripts[resourceKey]) { + _loadingScripts[resourceKey].push({ + success: _checkComplete, + error: _error + }); + + return; + } + + // Create the waitlist + _loadingScripts[resourceKey] = []; + + // If in debugMode, add cache buster to each script URL + if (_config.debugMode) { + resourceUrl += '?cachebuster=' + new Date().getTime(); + } + + // Scripts are loaded asynchronously and executed in order + // in supported browsers: http://caniuse.com/#feat=script-async + script.async = false; + script.type = 'text/javascript'; + script.charset = 'utf-8'; + + script.onerror = function(e) { + _error(e); + _emptyWaitlist(resourceKey, e); + }; + + // Use a closure for the load event so that we can dereference the original script + script.onload = script.onreadystatechange = function(e) { + e = e || window.event; // For older IE + + // Detect when it's done loading + // ev.type == 'load' is for all browsers except IE6-9 + // IE6-9 need to use onreadystatechange and look for + // el.readyState in {loaded, complete} (yes, we need both) + if (e.type === 'load' || readyStates[script.readyState]) { + // Done, cleanup + script.onload = script.onreadystatechange = script.onerror = ''; + // Loaded + _loadedScripts[resourceKey] = true; + // Increment and check if scripts are done + _checkComplete(); + // Empty wait list + _emptyWaitlist(resourceKey); + // Dereference script + script = null; + } + }; + + // Set the src, start loading + script.src = resourceUrl; + + // really is the best + head.insertBefore(script, insertBeforeEl); + }); + } + + function _loadInlineScripts(inlines, cb) { + // Attempt to use the user provided method + if (_config.loadInlineScripts) { + _config.loadInlineScripts(inlines, cb); + } else { + for (var i = 0, len = inlines.length; i < len; i++) { + try { + eval(inlines[i]); + } catch ( exception ) { + F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); + + // Emit events + F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { + appId: appConfigs[0].appId, + src: inlines[i], + err: exception + }); + + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], exception); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + exception + ); + } + } + } + cb(); + } + } + + // Determine whether an element has been added to the page + function elementInDocument(element) { + if (element) { + while (element.parentNode) { + element = element.parentNode; + + if (element === document) { + return true; + } + } + } + + return false; + } + + function _loadHtml(apps) { + jQuery.each(apps, function(i, a) { + if (_isPlaceholderElement(appConfigs[i].root)) { + jQuery(appConfigs[i].root) + .addClass(F2.Constants.Css.APP) + .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); + } else if (!_usesAppHandlers) { + // Load html and save the root node + appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER, + appConfigs[i], // the app config + _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) + ); + + var appId = appConfigs[i].appId; + var root = appConfigs[i].root; + + if (!root) { + throw new Error('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); + } + + if (!elementInDocument(root)) { + throw new Error('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + appConfigs[i] // the app config + ); + + if (!F2.isNativeDOMNode(root)) { + throw new Error('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); + } + } + + // init events + _initAppEvents(appConfigs[i]); + }); + } + + // Pull out the manifest data + var manifestScripts = appManifest.scripts || []; + var manifestStyles = appManifest.styles || []; + var manifestInlines = appManifest.inlineScripts || []; + var manifestApps = appManifest.apps || []; + + // Finally, load the styles, html, and scripts + _loadStyles(manifestStyles, function() { + _loadHtml(manifestApps); + _loadScripts(manifestScripts, function() { + // Emit event we're done with scripts + if (appConfigs[0]) { + F2.Events.emit('APP_SCRIPTS_LOADED', { + appId: appConfigs[0].appId, + scripts: manifestScripts + }); + } + + _loadInlineScripts(manifestInlines, function() { + // Create the apps + jQuery.each(appConfigs, function(i, a) { + _createAppInstance(a, manifestApps[i]); + }); + }); + }); + }); + } + + /** + Loads the app's html/css/javascript into an iframe. + @method loadSecureApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into + the page. + */ + function _loadSecureApp(appConfig, appManifest) { + // Make sure the container is configured for secure apps + if (_config.secureAppPagePath) { + if (_isPlaceholderElement(appConfig.root)) { + jQuery(appConfig.root) + .addClass(F2.Constants.Css.APP) + .append(jQuery('
') + .addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + } else if (!_usesAppHandlers) { + // Create the html container for the iframe + appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); + } else { + var $root = jQuery(appConfig.root); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER, + appConfig, + _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) + ); + + if ($root.parents('body:first').length === 0) { + throw new Error('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + appConfig // the app config + ); + + if (!appConfig.root) { + throw new Error('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } + + if (!F2.isNativeDOMNode(appConfig.root)) { + throw new Error('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } + } + + // Instantiate F2.UI + appConfig.ui = new F2.UI(appConfig); + // Init events + _initAppEvents(appConfig); + // Create RPC socket + F2.Rpc.register(appConfig, appManifest); + } else { + F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); + } + } + + function _outerHtml(html) { + return jQuery('
').append(html).html(); + } + + /** + Checks if the app is valid. + @method _validateApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @returns {bool} True if the app is valid + */ + function _validateApp(appConfig) { + // Check for valid app configurations + if (!appConfig.appId) { + F2.log('"appId" missing from app object'); + return false; + } else if (!appConfig.root && !appConfig.manifestUrl) { + F2.log('"manifestUrl" missing from app object'); + return false; + } + + return true; + } + + /** + Checks if the ContainerConfig is valid. + @method _validateContainerConfig + @private + @returns {bool} True if the config is valid + */ + function _validateContainerConfig() { + if (_config) { + if (_config.xhr) { + if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { + throw new Error('ContainerConfig.xhr should be a function or an object'); + } + if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { + throw new Error('ContainerConfig.xhr.dataType should be a function'); + } + if (_config.xhr.type && typeof _config.xhr.type !== 'function') { + throw new Error('ContainerConfig.xhr.type should be a function'); + } + if (_config.xhr.url && typeof _config.xhr.url !== 'function') { + throw new Error('ContainerConfig.xhr.url should be a function'); + } + } + } + + return true; + } + + return { + /** + Gets the current list of apps in the container. + @method getContainerState + @returns {Array} An array of objects containing the appId + */ + getContainerState: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerState()'); + return; + } + + return jQuery.map(_apps, function(app) { + return { + appId: app.config.appId + }; + }); + }, + /** + Gets the current locale defined by the container. + @method getContainerLocale + @returns {String} IETF-defined standard language tag + */ + getContainerLocale: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerLocale()'); + return; + } + + return F2.ContainerConfig.locale; + }, + /** + Initializes the container. This method must be called before performing + any other actions in the container. + @method init + @param {F2.ContainerConfig} config The configuration object + */ + init: function(config) { + _config = config || {}; + _validateContainerConfig(); + _hydrateContainerConfig(_config); + + // Dictates whether we use the old logic or the new logic. + // TODO: Remove in v2.0 + _usesAppHandlers = (_config.beforeAppRender || _config.appRender || _config.afterAppRender || _config.appScriptLoadFailed); + + // Only establish RPC connection if the container supports the secure app page + if (!!_config.secureAppPagePath || _config.isSecureAppPage) { + F2.Rpc.init(_config.secureAppPagePath ? _config.secureAppPagePath : false); + } + + F2.UI.init(_config); + + if (!_config.isSecureAppPage) { + _initContainerEvents(); + } + }, + /** + Has the container been init? + @method isInit + @return {bool} True if the container has been init + */ + isInit: _isInit, + /** + Automatically load apps that are already defined in the DOM. Elements will + be rendered into the location of the placeholder DOM element. Any + AppHandlers that are defined will be bypassed. + @method loadPlaceholders + @param {Element} parentNode The element to search for placeholder apps + */ + loadPlaceholders: function(parentNode) { + if (parentNode && !F2.isNativeDOMNode(parentNode)) { + throw new Error('"parentNode" must be null or a DOM node'); + } + + var elements = []; + var appConfigs = []; + + /** + If the passed in element has a data-f2-appid attribute add it to the + list of elements but to not search within that element for other + placeholders + */ + if (parentNode) { + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); + } + } else if (document.querySelectorAll) { + elements = elements.concat(document.querySelectorAll('[data-f2-appid]')); + } + + for (var i = 0, len = elements.length; i < len; i++) { + var appConfig = _getAppConfigFromElement(elements[i]); + appConfigs.push(appConfig); + } + + if (appConfigs.length) { + F2.registerApps(appConfigs); + } + }, + /** + Begins the loading process for all apps and/or initialization process for + pre-loaded apps. The app will be passed the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will contain the + app's unique instanceId within the container. If the + {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated + the app is considered to be a pre-loaded app and will be handled + accordingly. Optionally, the + {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those + assets will be used instead of making a request. + @method registerApps + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @param {Array} [appManifests] An array of + {{#crossLink "F2.AppManifest"}}{{/crossLink}} + objects. This array must be the same length as the apps array that is + passed in. This can be useful if apps are loaded on the server-side and + passed down to the client. + @example + // Traditional App requests. + var configs = [{ + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app2', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Pre-loaded and tradition apps mixed. + // You can preload the same app multiple times as long as you have a unique root for each + var configs = [{ + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-1', + manifestUrl: '' + }, { + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-2', + manifestUrl: '' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Apps with predefined manifests. + var configs = [ + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app2', context: {} } + ]; + + // Pre requested manifest responses + var manifests = [{ + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App 2!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/App2Class.js'], + styles: ['http://www.domain.com/css/App2Styles.css'] + }]; + + F2.init(); + F2.registerApps(configs, manifests); + */ + registerApps: function(appConfigs, appManifests) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.registerApps()'); + return; + } else if (!appConfigs) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } + + var appStack = []; + var batches = {}; + var callbackStack = {}; + var haveManifests = false; + appConfigs = [].concat(appConfigs); + appManifests = [].concat(appManifests || []); + haveManifests = !!appManifests.length; + + // AppConfigs must have a length + if (!appConfigs.length) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } else if (appConfigs.length && haveManifests && appConfigs.length !== appManifests.length) { + // Ensure that the array of apps and manifests are equal + F2.log('The length of "apps" does not equal the length of "appManifests"'); + return; + } + + // Validate apps, assign instanceId, then determine which apps can be batched together + jQuery.each(appConfigs, function(i, a) { + // Add properties and methods + a = _createAppConfig(a); + + // Set to itself for preloaded apps + a.root = a.root || null; + + // Validate the app after setting the root because preloaded apps do not require manifest url + if (!_validateApp(a)) { + return; + } + + _apps[a.instanceId] = { + config: a + }; + + // If the root property is defined then this app is considered to be preloaded and we will run it through that logic. + if (a.root && !_isPlaceholderElement(a.root)) { + if ((!a.root && typeof a.root !== 'string') && !F2.isNativeDOMNode(a.root)) { + F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); + F2.log('AppConfig instance:', a); + throw new Error('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); + } else if (jQuery(a.root).length !== 1) { + F2.log('AppConfig invalid for pre-load, root not unique'); + F2.log('AppConfig instance:', a); + F2.log('Number of dom node instances:', jQuery(a.root).length); + throw new Error('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); + } + + // Instantiate F2.App + _createAppInstance(a); + _initAppEvents(a); + + return; + } + + if (!_isPlaceholderElement(a.root)) { + if (!_usesAppHandlers) { + a.root = _beforeAppRender(a); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, + a + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + a + ); + } + } + + // Load the page if we have the manifest + if (haveManifests) { + _loadApps(a, appManifests[i]); + } else { + // Check if this app can be batched + if (a.enableBatchRequests && !a.isSecure) { + batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; + batches[a.manifestUrl.toLowerCase()].push(a); + } else { + appStack.push({ + apps: [a], + url: a.manifestUrl + }); + } + } + }); + + if (!haveManifests) { + // Add the batches to the appStack + jQuery.each(batches, function(i, b) { + appStack.push({ + url: i, + apps: b + }); + }); + + /* + If an app is being loaded more than once on the page, there is the + potential that the jsonp callback will be clobbered if the request + for the AppManifest for the app comes back at the same time as + another request for the same app. We'll create a callbackStack + that will ensure that requests for the same app are loaded in order + rather than at the same time + */ + jQuery.each(appStack, function(i, req) { + // Define the callback function based on the first app's App ID + var jsonpCallback = F2.Constants.JSONP_CALLBACK + req.apps[0].appId; + + // Push the request onto the callback stack + callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; + callbackStack[jsonpCallback].push(req); + }); + + /* + Loop through each item in the callback stack and make the request + for the AppManifest. When the request is complete, pop the next + request off the stack and make the request. + */ + jQuery.each(callbackStack, function(i, requests) { + function manifestRequest(jsonpCallback, req) { + if (!req) { + return; + } + + // Setup defaults and callbacks + var type = 'GET'; + var dataType = 'jsonp'; + + function completeFunc() { + manifestRequest(i, requests.pop()); + } + + function errorFunc() { + jQuery.each(req.apps, function(idx, item) { + item.name = item.name || item.appId; + F2.log('Removed failed ' + item.name + ' app', item); + F2.removeApp(item.instanceId); + }); + } + + function successFunc(appManifest) { + _loadApps(req.apps, appManifest); + } + + // Optionally fire xhr overrides + if (_config.xhr) { + if (_config.xhr.dataType) { + dataType = _config.xhr.dataType(req.url, req.apps); + + if (typeof dataType !== 'string') { + throw new Error('ContainerConfig.xhr.dataType should return a string'); + } + } + + if (_config.xhr.type) { + type = _config.xhr.type(req.url, req.apps); + + if (typeof type !== 'string') { + throw new Error('ContainerConfig.xhr.type should return a string'); + } + } + + if (_config.xhr.url) { + req.url = _config.xhr.url(req.url, req.apps); + + if (typeof req.url !== 'string') { + throw new Error('ContainerConfig.xhr.url should return a string'); + } + } + } + + // Setup the default request function if an override is not present + var requestFunc = _config.xhr; + + if (typeof requestFunc !== 'function') { + requestFunc = function(url, apps, successCallback, errorCallback, completeCallback) { + jQuery.ajax({ + url: url, + type: type, + data: { + params: F2.stringify(req.apps, F2.appConfigReplacer) + }, + jsonp: false, // do not put 'callback=' in the query string + jsonpCallback: jsonpCallback, // Unique function name + dataType: dataType, + success: successCallback, + error: function(jqxhr, settings, exception) { + F2.log('Failed to load app(s)', exception.toString(), req.apps); + errorCallback(); + }, + complete: completeCallback + }); + }; + } + + requestFunc(req.url, req.apps, successFunc, errorFunc, completeFunc); + } + + manifestRequest(i, requests.pop()); + }); + } + }, + /** + Removes all apps from the container + @method removeAllApps + */ + removeAllApps: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeAllApps()'); + return; + } + + jQuery.each(_apps, function(i, a) { + F2.removeApp(a.config.instanceId); + }); + }, + /** + Removes an app from the container. + @method removeApp + @param {string} instanceId The app's instanceId + */ + removeApp: function(instanceId) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeApp()'); + return; + } + + if (_apps[instanceId]) { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + _apps[instanceId] + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY, + _apps[instanceId] + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + _apps[instanceId] + ); + + delete _apps[instanceId]; + } + } + }; })()); From cada63b0884a2562cd8ef2b2d771f152b8572eb6 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:37:26 -0700 Subject: [PATCH 19/61] Fixing styling and lint errors for 'events' --- src/lib/events.js | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/lib/events.js b/src/lib/events.js index 68ec5716..3a4cc860 100644 --- a/src/lib/events.js +++ b/src/lib/events.js @@ -19,6 +19,7 @@ F2.extend('Events', (function() { @private @param {string} event The event name @param {object} [arg]* The arguments to be passed + @returns {object} EventEmitter2 instance */ _socketEmit: function() { return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); @@ -29,6 +30,7 @@ F2.extend('Events', (function() { @method emit @param {string} event The event name @param {object} [arg]* The arguments to be passed + @returns {object} EventEmitter2 instance */ emit: function() { F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); @@ -36,48 +38,51 @@ F2.extend('Events', (function() { }, /** Adds a listener that will execute n times for the event before being - removed. The listener is invoked only the first time the event is - fired, after which it is removed. + removed. The listener is invoked only the first time the event is fired, + after which it is removed. @method many @param {string} event The event name @param {int} timesToListen The number of times to execute the event before being removed @param {function} listener The function to be fired when the event is emitted + @returns {object} EventEmitter2 instance */ many: function(event, timesToListen, listener) { return _events.many(event, timesToListen, listener); }, /** - * Remove a listener for the specified event. - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - */ + Remove a listener for the specified event. + @method off + @param {string} event The event name + @param {function} listener The function that will be removed + @returns {object} EventEmitter2 instance + */ off: function(event, listener) { return _events.off(event, listener); }, /** - * Adds a listener for the specified event - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ + Adds a listener for the specified event + @method on + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ on: function(event, listener) { return _events.on(event, listener); }, /** - * Adds a one time listener for the event. The listener is invoked only - * the first time the event is fired, after which it is removed. - * @method once - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ + Adds a one time listener for the event. The listener is invoked only + the first time the event is fired, after which it is removed. + @method once + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ once: function(event, listener) { return _events.once(event, listener); } }; })()); - From 79fa138e7bd32f82982e33eaade73b70728e38e0 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 8 Jan 2015 15:37:48 -0700 Subject: [PATCH 20/61] Fixing styling and lint errors for 'rpc' --- src/lib/rpc.js | 636 ++++++++++++++++++++++++------------------------- 1 file changed, 312 insertions(+), 324 deletions(-) diff --git a/src/lib/rpc.js b/src/lib/rpc.js index d7210387..73899161 100644 --- a/src/lib/rpc.js +++ b/src/lib/rpc.js @@ -1,325 +1,313 @@ /** - * Handles socket communication between the container and secure apps - * @class F2.Rpc - */ -F2.extend('Rpc', (function(){ - var _callbacks = {}; - var _secureAppPagePath = ''; - var _apps = {}; - var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); - var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); - var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); - var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); - var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); - - /** - * Creates a socket connection from the app to the container using - * easyXDM. - * @method _createAppToContainerSocket - * @private - */ - var _createAppToContainerSocket = function() { - - var appConfig; // socket closure - var isLoaded = false; - // its possible for messages to be received before the socket load event has - // happened. We'll save off these messages and replay them once the socket - // is ready - var messagePlayback = []; - - var socket = new easyXDM.Socket({ - onMessage: function(message, origin){ - - // handle Socket Load - if (!isLoaded && _rSocketLoad.test(message)) { - message = message.replace(_rSocketLoad, ''); - var appParts = F2.parse(message); - - // make sure we have the AppConfig and AppManifest - if (appParts.length == 2) { - appConfig = appParts[0]; - - // save socket - _apps[appConfig.instanceId] = { - config:appConfig, - socket:socket - }; - - // register app - F2.registerApps([appConfig], [appParts[1]]); - - // socket message playback - jQuery.each(messagePlayback, function(i, e) { - _onMessage(appConfig, message, origin); - }); - - isLoaded = true; - } - } else if (isLoaded) { - // pass everyting else to _onMessage - _onMessage(appConfig, message, origin); - } else { - //F2.log('socket not ready, queuing message', message); - messagePlayback.push(message); - } - } - }); - }; - - /** - * Creates a socket connection from the container to the app using - * easyXDM. - * @method _createContainerToAppSocket - * @private - * @param {appConfig} appConfig The F2.AppConfig object - * @param {F2.AppManifest} appManifest The F2.AppManifest object - */ - var _createContainerToAppSocket = function(appConfig, appManifest) { - - var container = jQuery(appConfig.root); - - if (!container.is('.' + F2.Constants.Css.APP_CONTAINER)) { - container.find('.' + F2.Constants.Css.APP_CONTAINER); - } - - if (!container.length) { - F2.log('Unable to locate app in order to establish secure connection.'); - return; - } - - var iframeProps = { - scrolling:'no', - style:{ - width:'100%' - } - }; - - if (appConfig.height) { - iframeProps.style.height = appConfig.height + 'px'; - } - - var socket = new easyXDM.Socket({ - remote: _secureAppPagePath, - container: container.get(0), - props:iframeProps, - onMessage: function(message, origin) { - // pass everything to _onMessage - _onMessage(appConfig, message, origin); - }, - onReady: function() { - socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); - } - }); - - return socket; - }; - - /** - * @method _createRpcCallback - * @private - * @param {string} instanceId The app's Instance ID - * @param {function} callbackId The callback ID - * @return {function} A function to make the RPC call - */ - var _createRpcCallback = function(instanceId, callbackId) { - return function() { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC_CALLBACK, - callbackId, - [].slice.call(arguments).slice(2) - ); - }; - }; - - /** - * Handles messages that come across the sockets - * @method _onMessage - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} message The socket message - * @param {string} origin The originator - */ - var _onMessage = function(appConfig, message, origin) { - - var obj, func; - - function parseFunction(parent, functionName) { - var path = String(functionName).split('.'); - for (var i = 0; i < path.length; i++) { - if (parent[path[i]] === undefined) { - parent = undefined; - break; - } - parent = parent[path[i]]; - } - return parent; - } - - function parseMessage(regEx, message, instanceId) { - var o = F2.parse(message.replace(regEx, '')); - - // if obj.callbacks - // for each callback - // for each params - // if callback matches param - // replace param with _createRpcCallback(app.instanceId, callback) - if (o.params && o.params.length && o.callbacks && o.callbacks.length) { - jQuery.each(o.callbacks, function(i, c) { - jQuery.each(o.params, function(i, p) { - if (c == p) { - o.params[i] = _createRpcCallback(instanceId, c); - } - }); - }); - } - - return o; - } - - // handle UI Call - if (_rUiCall.test(message)) { - obj = parseMessage(_rUiCall, message, appConfig.instanceId); - func = parseFunction(appConfig.ui, obj.functionName); - // if we found the function, call it - if (func !== undefined) { - func.apply(appConfig.ui, obj.params); - } else { - F2.log('Unable to locate UI RPC function: ' + obj.functionName); - } - - // handle RPC - } else if (_rRpc.test(message)) { - obj = parseMessage(_rRpc, message, appConfig.instanceId); - func = parseFunction(window, obj.functionName); - if (func !== undefined) { - func.apply(func, obj.params); - } else { - F2.log('Unable to locate RPC function: ' + obj.functionName); - } - - // handle RPC Callback - } else if (_rRpcCallback.test(message)) { - obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); - if (_callbacks[obj.functionName] !== undefined) { - _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); - delete _callbacks[obj.functionName]; - } - - // handle Events - } else if (_rEvents.test(message)) { - obj = parseMessage(_rEvents, message, appConfig.instanceId); - F2.Events._socketEmit.apply(F2.Events, obj); - } - }; - - /** - * Registers a callback function - * @method _registerCallback - * @private - * @param {function} callback The callback function - * @return {string} The callback ID - */ - var _registerCallback = function(callback) { - var callbackId = F2.guid(); - _callbacks[callbackId] = callback; - return callbackId; - }; - - return { - /** - * Broadcast an RPC function to all sockets - * @method broadcast - * @param {string} messageType The message type - * @param {Array} params The parameters to broadcast - */ - broadcast: function(messageType, params) { - // check valid messageType - var message = messageType + F2.stringify(params); - jQuery.each(_apps, function(i, a) { - a.socket.postMessage(message); - }); - }, - /** - * Calls a remote function - * @method call - * @param {string} instanceId The app's Instance ID - * @param {string} messageType The message type - * @param {string} functionName The name of the remote function - * @param {Array} params An array of parameters to pass to the remote - * function. Any functions found within the params will be treated as a - * callback function. - */ - call: function(instanceId, messageType, functionName, params) { - // loop through params and find functions and convert them to callbacks - var callbacks = []; - jQuery.each(params, function(i, e) { - if (typeof e === 'function') { - var cid = _registerCallback(e); - params[i] = cid; - callbacks.push(cid); - } - }); - // check valid messageType - _apps[instanceId].socket.postMessage( - messageType + F2.stringify({ - functionName:functionName, - params:params, - callbacks:callbacks - }) - ); - }, - - /** - * Init function which tells F2.Rpc whether it is running at the container- - * level or the app-level. This method is generally called by - * F2.{{#crossLink "F2/init"}}{{/crossLink}} - * @method init - * @param {string} [secureAppPagePath] The - * {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath - * property - */ - init: function(secureAppPagePath) { - _secureAppPagePath = secureAppPagePath; - if (!_secureAppPagePath) { - _createAppToContainerSocket(); - } - }, - - /** - * Determines whether the Instance ID is considered to be 'remote'. This is - * determined by checking if 1) the app has an open socket and 2) whether - * F2.Rpc is running inside of an iframe - * @method isRemote - * @param {string} instanceId The Instance ID - * @return {bool} True if there is an open socket - */ - isRemote: function(instanceId) { - return ( - // we have an app - _apps[instanceId] !== undefined && - // the app is secure - _apps[instanceId].config.isSecure && - // we can't access the iframe - jQuery(_apps[instanceId].config.root).find('iframe').length === 0 - ); - }, - - /** - * Creates a container-to-app or app-to-container socket for communication - * @method register - * @param {F2.AppConfig} [appConfig] The F2.AppConfig object - * @param {F2.AppManifest} [appManifest] The F2.AppManifest object - */ - register: function(appConfig, appManifest) { - if (!!appConfig && !!appManifest) { - _apps[appConfig.instanceId] = { - config:appConfig, - socket:_createContainerToAppSocket(appConfig, appManifest) - }; - } else { - F2.log('Unable to register socket connection. Please check container configuration.'); - } - } - }; -})()); \ No newline at end of file + Handles socket communication between the container and secure apps + @class F2.Rpc +*/ +F2.extend('Rpc', (function() { + var _callbacks = {}; + var _secureAppPagePath = ''; + var _apps = {}; + var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); + var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); + var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); + var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); + var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); + + /** + Creates a socket connection from the app to the container using + easyXDM. + @method _createAppToContainerSocket + @private + */ + function _createAppToContainerSocket() { + var appConfig; + var isLoaded = false; + /** + It's possible for messages to be received before the socket load event has + happened. We'll save off these messages and replay them once the socket is + ready. + */ + var messagePlayback = []; + + var socket = new easyXDM.Socket({ + onMessage: function(message, origin) { + // Handle Socket Load + if (!isLoaded && _rSocketLoad.test(message)) { + message = message.replace(_rSocketLoad, ''); + var appParts = F2.parse(message); + + // Make sure we have the AppConfig and AppManifest + if (appParts.length === 2) { + appConfig = appParts[0]; + + // Save socket + _apps[appConfig.instanceId] = { + config: appConfig, + socket: socket + }; + + F2.registerApps([appConfig], [appParts[1]]); + + // Socket message playback + jQuery.each(messagePlayback, function() { + _onMessage(appConfig, message, origin); + }); + + isLoaded = true; + } + } else if (isLoaded) { + // Pass everyting else to _onMessage + _onMessage(appConfig, message, origin); + } else { + messagePlayback.push(message); + } + } + }); + } + + /** + Creates a socket connection from the container to the app using + easyXDM. + @method _createContainerToAppSocket + @private + @param {appConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The F2.AppManifest object + @return {object} The new socket + */ + function _createContainerToAppSocket(appConfig, appManifest) { + var container = jQuery(appConfig.root); + + if (!container.length) { + F2.log('Unable to locate app in order to establish secure connection.'); + return; + } + + var iframeProps = { + scrolling: 'no', + style: { + width: '100%' + } + }; + + if (appConfig.height) { + iframeProps.style.height = appConfig.height + 'px'; + } + + var socket = new easyXDM.Socket({ + remote: _secureAppPagePath, + container: container.get(0), + props: iframeProps, + onMessage: function(message, origin) { + _onMessage(appConfig, message, origin); + }, + onReady: function() { + socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); + } + }); + + return socket; + } + + /** + @method _createRpcCallback + @private + @param {string} instanceId The app's Instance ID + @param {function} callbackId The callback ID + @return {function} A function to make the RPC call + */ + function _createRpcCallback(instanceId, callbackId) { + return function() { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC_CALLBACK, + callbackId, + [].slice.call(arguments).slice(2) + ); + }; + } + + /** + Handles messages that come across the sockets + @method _onMessage + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} message The socket message + @param {string} origin The originator + */ + function _onMessage(appConfig, message, origin) { + var obj; + var func; + + function parseFunction(parent, functionName) { + var path = String(functionName).split('.'); + for (var i = 0; i < path.length; i++) { + if (parent[path[i]] === undefined) { + parent = undefined; + break; + } + parent = parent[path[i]]; + } + return parent; + } + + function parseMessage(regEx, rawMessage, instanceId) { + var o = F2.parse(rawMessage.replace(regEx, '')); + + // if obj.callbacks + // for each callback + // for each params + // if callback matches param + // replace param with _createRpcCallback(app.instanceId, callback) + if (o.params && o.params.length && o.callbacks && o.callbacks.length) { + jQuery.each(o.callbacks, function(i, c) { + jQuery.each(o.params, function(j, p) { + if (c === p) { + o.params[j] = _createRpcCallback(instanceId, c); + } + }); + }); + } + + return o; + } + + // Handle UI Call + if (_rUiCall.test(message)) { + obj = parseMessage(_rUiCall, message, appConfig.instanceId); + func = parseFunction(appConfig.ui, obj.functionName); + + if (func !== undefined) { + func.apply(appConfig.ui, obj.params); + } else { + F2.log('Unable to locate UI RPC function: ' + obj.functionName); + } + } else if (_rRpc.test(message)) { + obj = parseMessage(_rRpc, message, appConfig.instanceId); + func = parseFunction(window, obj.functionName); + + if (func !== undefined) { + func.apply(func, obj.params); + } else { + F2.log('Unable to locate RPC function: ' + obj.functionName); + } + } else if (_rRpcCallback.test(message)) { + obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); + + if (_callbacks[obj.functionName] !== undefined) { + _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); + delete _callbacks[obj.functionName]; + } + } else if (_rEvents.test(message)) { + obj = parseMessage(_rEvents, message, appConfig.instanceId); + F2.Events._socketEmit.apply(F2.Events, obj); + } + } + + /** + Registers a callback function + @method _registerCallback + @private + @param {function} callback The callback function + @return {string} The callback ID + */ + function _registerCallback(callback) { + var callbackId = F2.guid(); + _callbacks[callbackId] = callback; + return callbackId; + } + + return { + /** + Broadcast an RPC function to all sockets + @method broadcast + @param {string} messageType The message type + @param {Array} params The parameters to broadcast + */ + broadcast: function(messageType, params) { + var message = messageType + F2.stringify(params); + + jQuery.each(_apps, function(i, a) { + a.socket.postMessage(message); + }); + }, + /** + Calls a remote function + @method call + @param {string} instanceId The app's Instance ID + @param {string} messageType The message type + @param {string} functionName The name of the remote function + @param {Array} params An array of parameters to pass to the remote + function. Any functions found within the params will be treated as a + callback function. + */ + call: function(instanceId, messageType, functionName, params) { + // Loop through params and find functions and convert them to callbacks + var callbacks = []; + + jQuery.each(params, function(i, e) { + if (typeof e === 'function') { + var cid = _registerCallback(e); + params[i] = cid; + callbacks.push(cid); + } + }); + + _apps[instanceId].socket.postMessage( + messageType + F2.stringify({ + functionName: functionName, + params: params, + callbacks: callbacks + }) + ); + }, + + /** + Init function which tells F2.Rpc whether it is running at the container- + level or the app-level. This method is generally called by + F2.{{#crossLink "F2/init"}}{{/crossLink}} + @method init + @param {string} [secureAppPagePath] The + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath + property + */ + init: function(secureAppPagePath) { + _secureAppPagePath = secureAppPagePath; + + if (!_secureAppPagePath) { + _createAppToContainerSocket(); + } + }, + + /** + Determines whether the Instance ID is considered to be 'remote'. This is + determined by checking if 1) the app has an open socket and 2) whether + F2.Rpc is running inside of an iframe + @method isRemote + @param {string} instanceId The Instance ID + @return {bool} True if there is an open socket + */ + isRemote: function(instanceId) { + var appExists = _apps[instanceId] !== undefined; + var appIsSecure = _apps[instanceId].config.isSecure; + var noFrameAccess = !jQuery(_apps[instanceId].config.root).find('iframe').length; + + return appExists && appIsSecure && noFrameAccess; + }, + + /** + Creates a container-to-app or app-to-container socket for communication + @method register + @param {F2.AppConfig} [appConfig] The F2.AppConfig object + @param {F2.AppManifest} [appManifest] The F2.AppManifest object + */ + register: function(appConfig, appManifest) { + if (appConfig && appManifest) { + _apps[appConfig.instanceId] = { + config: appConfig, + socket: _createContainerToAppSocket(appConfig, appManifest) + }; + } else { + F2.log('Unable to register socket connection. Please check container configuration.'); + } + } + }; +})()); From 2ecd770d889fdbf8e4d8381572abb9fad6a4b28a Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 10:15:43 -0700 Subject: [PATCH 21/61] Fixing inclusion of eslint files --- Gruntfile.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index f9132ae4..e3438d36 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -93,7 +93,7 @@ module.exports = function(grunt) { 'src/vendor/bootstrap-modal.js', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - '<%= eslint.files %>', + '<%= eslint.target %>', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/f2.debug.js' @@ -101,7 +101,7 @@ module.exports = function(grunt) { 'no-third-party': { src: [ 'src/lib/template/header.js.tmpl', - '<%= eslint.files %>', + '<%= eslint.target %>', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/f2.no-third-party.js' @@ -111,7 +111,7 @@ module.exports = function(grunt) { 'src/lib/template/header.js.tmpl', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - '<%= eslint.files %>', + '<%= eslint.target %>', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-jquery-or-bootstrap.js' @@ -123,7 +123,7 @@ module.exports = function(grunt) { 'src/vendor/jquery.noconflict.js', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - '<%= eslint.files %>', + '<%= eslint.target %>', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-bootstrap.js' @@ -135,7 +135,7 @@ module.exports = function(grunt) { 'src/vendor/bootstrap-modal.js', 'src/vendor/jquery.noconflict.js', 'src/vendor/eventemitter2.js', - '<%= eslint.files %>', + '<%= eslint.target %>', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-easyXDM.js' @@ -145,7 +145,7 @@ module.exports = function(grunt) { src: [ 'src/lib/template/header.js.tmpl', 'src/vendor/eventemitter2.js', - '<%= eslint.files %>', + '<%= eslint.target %>', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.basic.js' From 52a1a86f12e35de9c47fcea253325500f37b4a15 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 10:16:49 -0700 Subject: [PATCH 22/61] Fixing check for node and element --- src/lib/F2.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index 1e97e641..c53f52ff 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -16,7 +16,7 @@ var F2 = (function() { return test instanceof Node; } - return typeof test === 'object' && typeof test.nodeType === 'number' && typeof test.nodeName === 'string'; + return test && typeof test === 'object' && typeof test.nodeType === 'number' && typeof test.nodeName === 'string'; } /** @@ -31,7 +31,7 @@ var F2 = (function() { return test instanceof HTMLElement; } - return typeof test === 'object' && test.nodeType === 1 && typeof test.nodeName === 'string'; + return test && typeof test === 'object' && test.nodeType === 1 && typeof test.nodeName === 'string'; } /** From aed09811291b5febb4b5cd11e16926178186e7f8 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 10:17:11 -0700 Subject: [PATCH 23/61] Adding compiled files --- dist/f2.debug.js | 6901 +++++++++++++++++----------------- dist/f2.min.js | 4 +- dist/f2.min.js.map | 2 +- dist/f2.no-third-party.js | 7307 ++++++++++++++++++------------------- tests/f2.min.map | 1 - 5 files changed, 6978 insertions(+), 7237 deletions(-) delete mode 100644 tests/f2.min.map diff --git a/dist/f2.debug.js b/dist/f2.debug.js index a68f85ea..e8bf8f76 100644 --- a/dist/f2.debug.js +++ b/dist/f2.debug.js @@ -13800,3758 +13800,3629 @@ easyXDM.stack.RpcBehavior = function(proxy, config){ global.easyXDM = easyXDM; })(window, document, location, window.setTimeout, decodeURIComponent, encodeURIComponent); -var F2; - /** - * Open F2 - * @module f2 - * @main f2 - */ -F2 = (function() { - - /** - * Abosolutizes a relative URL - * @method _absolutizeURI - * @private - * @param {e.g., location.href} base - * @param {URL to absolutize} href - * @returns {string} URL - * Source: https://gist.github.com/Yaffle/1088850 - * Tests: http://skew.org/uri/uri_tests.html - */ - var _absolutizeURI = function(base, href) {// RFC 3986 - - function removeDotSegments(input) { - var output = []; - input.replace(/^(\.\.?(\/|$))+/, '') - .replace(/\/(\.(\/|$))+/g, '/') - .replace(/\/\.\.$/, '/../') - .replace(/\/?[^\/]*/g, function (p) { - if (p === '/..') { - output.pop(); - } else { - output.push(p); - } - }); - return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); - } + Open F2 + @module f2 + @main f2 +*/ +var F2 = (function() { + /** + Test whether a value is a native Node + @method _isNode + @private + @param {object} test Any value to test + @returns {boolean} True if Node + */ + function _isNode(test) { + if (typeof Node === 'object') { + return test instanceof Node; + } - href = _parseURI(href || ''); - base = _parseURI(base || ''); + return test && typeof test === 'object' && typeof test.nodeType === 'number' && typeof test.nodeName === 'string'; + } - return !href || !base ? null : (href.protocol || base.protocol) + - (href.protocol || href.authority ? href.authority : base.authority) + - removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + - (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + - href.hash; - }; + /** + Test whether a value is a native Element + @method _isElement + @private + @param {object} test Any value to test + @returns {boolean} True if Element + */ + function _isElement(test) { + if (typeof HTMLElement === 'object') { + return test instanceof HTMLElement; + } - /** - * Parses URI - * @method _parseURI - * @private - * @param {The URL to parse} url - * @returns {Parsed URL} string - * Source: https://gist.github.com/Yaffle/1088850 - * Tests: http://skew.org/uri/uri_tests.html - */ - var _parseURI = function(url) { - var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); - // authority = '//' + user + ':' + pass '@' + hostname + ':' port - return (m ? { - href : m[0] || '', - protocol : m[1] || '', - authority: m[2] || '', - host : m[3] || '', - hostname : m[4] || '', - port : m[5] || '', - pathname : m[6] || '', - search : m[7] || '', - hash : m[8] || '' - } : null); - }; + return test && typeof test === 'object' && test.nodeType === 1 && typeof test.nodeName === 'string'; + } - return { - /** - * A function to pass into F2.stringify which will prevent circular - * reference errors when serializing objects - * @method appConfigReplacer - */ - appConfigReplacer: function(key, value) { - if (key == 'root' || key == 'ui' || key == 'height') { - return undefined; - } else { - return value; - } - }, - /** - * The apps namespace is a place for app developers to put the javascript - * class that is used to initialize their app. The javascript classes should - * be namepaced with the {{#crossLink "F2.AppConfig"}}{{/crossLink}}.appId. - * It is recommended that the code be placed in a closure to help keep the - * global namespace clean. - * - * If the class has an 'init' function, that function will be called - * automatically by F2. - * @property Apps - * @type object - * @example - * F2.Apps["com_example_helloworld"] = (function() { - * var App_Class = function(appConfig, appContent, root) { - * this._app = appConfig; // the F2.AppConfig object - * this._appContent = appContent // the F2.AppManifest.AppContent object - * this.$root = $(root); // the root DOM Element that contains this app - * } - * - * App_Class.prototype.init = function() { - * // perform init actions - * } - * - * return App_Class; - * })(); - * @example - * F2.Apps["com_example_helloworld"] = function(appConfig, appContent, root) { - * return { - * init:function() { - * // perform init actions - * } - * }; - * }; - * @for F2 - */ - Apps: {}, - /** - * Creates a namespace on F2 and copies the contents of an object into - * that namespace optionally overwriting existing properties. - * @method extend - * @param {string} ns The namespace to create. Pass a falsy value to - * add properties to the F2 namespace directly. - * @param {object} obj The object to copy into the namespace. - * @param {bool} overwrite True if object properties should be overwritten - * @return {object} The created object - */ - extend: function (ns, obj, overwrite) { - var isFunc = typeof obj === 'function'; - var parts = ns ? ns.split('.') : []; - var parent = this; - obj = obj || {}; - - // ignore leading global - if (parts[0] === 'F2') { - parts = parts.slice(1); - } + /** + Abosolutizes a relative URL + @method _absolutizeURI + @private + @param {string} base The base domain + @param {strong} href The relative url to make absolute + @returns {string} URL + Source: https://gist.github.com/Yaffle/1088850 + Tests: http://skew.org/uri/uri_tests.html + */ + function _absolutizeURI(base, href) { // RFC 3986 + function removeDotSegments(input) { + var output = []; + input.replace(/^(\.\.?(\/|$))+/, '') + .replace(/\/(\.(\/|$))+/g, '/') + .replace(/\/\.\.$/, '/../') + .replace(/\/?[^\/]*/g, function(p) { + if (p === '/..') { + output.pop(); + } else { + output.push(p); + } + }); + return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); + } - // create namespaces - for (var i = 0, len = parts.length; i < len; i++) { - if (!parent[parts[i]]) { - parent[parts[i]] = isFunc && i + 1 == len ? obj : {}; - } - parent = parent[parts[i]]; - } + href = _parseURI(href || ''); + base = _parseURI(base || ''); - // copy object into namespace - if (!isFunc) { - for (var prop in obj) { - if (typeof parent[prop] === 'undefined' || overwrite) { - parent[prop] = obj[prop]; - } - } - } + return !href || !base ? null : (href.protocol || base.protocol) + + (href.protocol || href.authority ? href.authority : base.authority) + + removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + + (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + + href.hash; + } - return parent; - }, - /** - * Generates a somewhat random id - * @method guid - * @return {string} A random id - * @for F2 - */ - guid: function() { - var S4 = function() { - return (((1+Math.random())*0x10000)|0).toString(16).substring(1); - }; - return (S4()+S4()+'-'+S4()+'-'+S4()+'-'+S4()+'-'+S4()+S4()+S4()); - }, - /** - * Search for a value within an array. - * @method inArray - * @param {object} value The value to search for - * @param {Array} array The array to search - * @return {bool} True if the item is in the array - */ - inArray: function(value, array) { - return jQuery.inArray(value, array) > -1; - }, - /** - * Tests a URL to see if it's on the same domain (local) or not - * @method isLocalRequest - * @param {URL to test} url - * @returns {bool} Whether the URL is local or not - * Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js - */ - isLocalRequest: function(url){ - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - urlLower = url.toLowerCase(), - parts = rurl.exec( urlLower ), - ajaxLocation, - ajaxLocParts; + /** + Parses URI into its component parts + @private + @method _parseURI + @param {string} url The url to be parsed + @returns {object} The parts of the url + Source: https://gist.github.com/Yaffle/1088850 + Tests: http://skew.org/uri/uri_tests.html + */ + function _parseURI(url) { + var whitespacePattern = /^\s+|\s+$/g; + var uriPattern = /^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/; + var match = String(url).replace(whitespacePattern, '').match(uriPattern); + + if (match) { + return { + href: match[0] || '', + protocol: match[1] || '', + authority: match[2] || '', + host: match[3] || '', + hostname: match[4] || '', + port: match[5] || '', + pathname: match[6] || '', + search: match[7] || '', + hash: match[8] || '' + }; + } + } - try { - ajaxLocation = location.href; - } catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement('a'); - ajaxLocation.href = ''; - ajaxLocation = ajaxLocation.href; - } + return { + /** + A function to pass into F2.stringify which will prevent circular + reference errors when serializing objects + @method appConfigReplacer + @param {string} key The key being examined + @param {*} value The value being examined + @returns {*} Returns the original allowed value or undefined + */ + appConfigReplacer: function(key, value) { + if (key === 'root' || key === 'ui' || key === 'height') { + return undefined; + } else { + return value; + } + }, + /** + The apps namespace is a place for app developers to put the javascript + class that is used to initialize their app. The javascript classes should + be namepaced with the {{#crossLink "F2.AppConfig"}}{{/crossLink}}.appId. + It is recommended that the code be placed in a closure to help keep the + global namespace clean. + If the class has an 'init' function, that function will be called + automatically by F2. + @property Apps + @type object + @for F2 + @example + F2.Apps['com_example_helloworld'] = (function() { + var App_Class = function(appConfig, appContent, root) { + this._app = appConfig; // the F2.AppConfig object + this._appContent = appContent // the F2.AppManifest.AppContent object + this.$root = $(root); // the root DOM Element that contains this app + } - ajaxLocation = ajaxLocation.toLowerCase(); + App_Class.prototype.init = function() { + // perform init actions + } - // uh oh, the url must be relative - // make it fully qualified and re-regex url - if (!parts){ - urlLower = _absolutizeURI(ajaxLocation,urlLower).toLowerCase(); - parts = rurl.exec( urlLower ); - } + return App_Class; + })(); + @example + F2.Apps['com_example_helloworld'] = function(appConfig, appContent, root) { + return { + init: function() { + // Perform init actions + } + }; + }; + */ + Apps: {}, + /** + Creates a namespace on F2 and copies the contents of an object into that + namespace optionally overwriting existing properties. + @method extend + @param {string} ns The namespace to create. Pass a falsy value to + add properties to the F2 namespace directly. + @param {object} obj The object to copy into the namespace. + @param {bool} overwrite True if object properties should be overwritten + @return {object} The created object + */ + extend: function(ns, obj, overwrite) { + var isFunc = typeof obj === 'function'; + var parts = ns ? ns.split('.') : []; + var parent = this; + obj = obj || {}; + + // Ignore leading global + if (parts[0] === 'F2') { + parts = parts.slice(1); + } - // Segment location into parts - ajaxLocParts = rurl.exec( ajaxLocation ) || []; + // Create namespaces + for (var i = 0, len = parts.length; i < len; i++) { + if (!parent[parts[i]]) { + parent[parts[i]] = isFunc && (i + 1 === len) ? obj : {}; + } + parent = parent[parts[i]]; + } - // do hostname and protocol and port of manifest URL match location.href? (a "local" request on the same domain) - var matched = !(parts && - (parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - (parts[ 3 ] || (parts[ 1 ] === 'http:' ? '80' : '443')) !== - (ajaxLocParts[ 3 ] || (ajaxLocParts[ 1 ] === 'http:' ? '80' : '443')))); - - return matched; - }, - /** - * Utility method to determine whether or not the argument passed in is or is not a native dom node. - * @method isNativeDOMNode - * @param {object} testObject The object you want to check as native dom node. - * @return {bool} Returns true if the object passed is a native dom node. - */ - isNativeDOMNode: function(testObject) { - var bIsNode = ( - typeof Node === 'object' ? testObject instanceof Node : - testObject && typeof testObject === 'object' && typeof testObject.nodeType === 'number' && typeof testObject.nodeName === 'string' - ); - - var bIsElement = ( - typeof HTMLElement === 'object' ? testObject instanceof HTMLElement : //DOM2 - testObject && typeof testObject === 'object' && testObject.nodeType === 1 && typeof testObject.nodeName === 'string' - ); - - return (bIsNode || bIsElement); - }, - /** - * A utility logging function to write messages or objects to the browser console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). - * @method log - * @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). - * @param {object} [obj2]* An object to be logged - * @example - * // Pass any value (string, int, array, object, bool). - * F2.log('foo'); - * F2.log([1, 2, 3]); - * @example - * // Use a console method name as the first argument. - * F2.log('error', err); - * F2.log('info', 'The session ID is ' + sessionId); - */ - log: function() { - if (!window.console) { - return; - } + // Copy object into namespace + if (!isFunc) { + for (var prop in obj) { + if (parent[prop] === undefined || overwrite) { + parent[prop] = obj[prop]; + } + } + } - var method = 'log'; - var args = Array.prototype.slice.apply(arguments); + return parent; + }, + /** + Generates a somewhat random id + @method guid + @return {string} A random id + @for F2 + */ + guid: function() { + function s4() { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + } + return (s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4()); + }, + /** + Search for a value within an array. + @method inArray + @param {object} value The value to search for + @param {Array} array The array to search + @return {bool} True if the item is in the array + */ + inArray: function(value, array) { + return jQuery.inArray(value, array) > -1; + }, + /** + Tests a URL to see if it's on the same domain (local) or not + @method isLocalRequest + @param {string} url The url to test + @returns {bool} Whether the URL is local or not + Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js + */ + isLocalRequest: function(url) { + var urlLower = url.toLowerCase(); + var relUrlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var parts = relUrlPattern.execute(urlLower); + var ajaxLocation; + var ajaxLocParts; + + try { + ajaxLocation = location.href; + } catch ( e ) { + // Use the href of an anchor since IE account for document.location + ajaxLocation = document.createElement('a'); + ajaxLocation.href = ''; + ajaxLocation = ajaxLocation.href; + } - if (args.length > 1 && args[0] in window.console) { - method = args.shift(); - } + ajaxLocation = ajaxLocation.toLowerCase(); - if (window.console[method]) { - window.console[method].apply(window.console, args); - } - }, - /** - * Wrapper to convert a JSON string to an object - * @method parse - * @param {string} str The JSON string to convert - * @return {object} The parsed object - */ - parse: function(str) { - return JSON.parse(str); - }, - /** - * Wrapper to convert an object to JSON - * - * **Note: When using F2.stringify on an F2.AppConfig object, it is - * recommended to pass F2.appConfigReplacer as the replacer function in - * order to prevent circular serialization errors.** - * @method stringify - * @param {object} value The object to convert - * @param {function|Array} replacer An optional parameter that determines - * how object values are stringified for objects. It can be a function or an - * array of strings. - * @param {int|string} space An optional parameter that specifies the - * indentation of nested structures. If it is omitted, the text will be - * packed without extra whitespace. If it is a number, it will specify the - * number of spaces to indent at each level. If it is a string (such as '\t' - * or ' '), it contains the characters used to indent at each level. - * @return {string} The JSON string - */ - stringify: function(value, replacer, space) { - return JSON.stringify(value, replacer, space); - }, - /** - * Function to get the F2 version number - * @method version - * @return {string} F2 version number - */ - version: function() { return '1.4.0'; } - }; + // The url is relative, so we'll fully qualify it and re-regex + if (!parts) { + urlLower = _absolutizeURI(ajaxLocation, urlLower).toLowerCase(); + parts = relUrlPattern.exec(urlLower); + } + + // Segment location into parts + ajaxLocParts = relUrlPattern.exec(ajaxLocation) || []; + + // Do hostname and protocol and port of manifest URL match location.href? + var matched = !(parts && + (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || + (parts[3] || (parts[1] === 'http:' ? '80' : '443')) !== + (ajaxLocParts[3] || (ajaxLocParts[1] === 'http:' ? '80' : '443')))); + + return matched; + }, + /** + Utility method to determine whether or not the argument passed in is or + is not a native DOM node. + @method isNativeDOMNode + @param {object} testObject The object you want to check as native DOM + node. + @return {bool} Returns true if the object passed is a native DOM node. + */ + isNativeDOMNode: function(testObject) { + return _isNode(testObject) || _isElement(testObject); + }, + /** + A utility logging function to write messages or objects to the browser + console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). + @method log + @param {object|string} Object/Method An object to be logged _or_ a + `console` API method name, such as `warn` or `error`. All of the console + method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). + @param {object} [obj2]* An object to be logged + @example + Pass any value (string, int, array, object, bool). + F2.log('foo'); + F2.log([1, 2, 3]); + @example + Use a console method name as the first argument. + F2.log('error', err); + F2.log('info', 'The session ID is ' + sessionId); + */ + log: function() { + if (!window.console) { + return; + } + + var method = 'log'; + var args = Array.prototype.slice.apply(arguments); + + if (args.length > 1 && args[0] in window.console) { + method = args.shift(); + } + + if (window.console[method]) { + window.console[method].apply(window.console, args); + } + }, + /** + Wrapper to convert a JSON string to an object + @method parse + @param {string} str The JSON string to convert + @return {object} The parsed object + */ + parse: function(str) { + return JSON.parse(str); + }, + /** + Wrapper to convert an object to JSON + **Note: When using F2.stringify on an F2.AppConfig object, it is + recommended to pass F2.appConfigReplacer as the replacer function in + order to prevent circular serialization errors.** + @method stringify + @param {object} value The object to convert + @param {function|Array} replacer An optional parameter that determines + how object values are stringified for objects. It can be a function or an + array of strings. + @param {int|string} space An optional parameter that specifies the + indentation of nested structures. If it is omitted, the text will be + packed without extra whitespace. If it is a number, it will specify the + number of spaces to indent at each level. If it is a string (such as '\t' + or ' '), it contains the characters used to indent at each level. + @return {string} The JSON string + */ + stringify: function(value, replacer, space) { + return JSON.stringify(value, replacer, space); + }, + /** + Function to get the F2 version number + @method version + @return {string} F2 version number + */ + version: function() { + return '1.4.0'; + } + }; })(); /** - * The new `AppHandlers` functionality provides Container Developers a higher level of control over configuring app rendering and interaction. - * - *

- *The addition of `F2.AppHandlers` replaces the previous {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} properties `beforeAppRender`, `appRender`, and `afterAppRender`. These methods were deprecated—but not removed—in version 1.2. They will be permanently removed in a future version of F2. - *

- * - *

- *Starting with F2 version 1.2, `AppHandlers` is the preferred method for Container Developers to manage app layout. - *

- * - * ### Order of Execution - * - * **App Rendering** - * - * 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. - * 1. **'appCreateRoot'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_CREATE\_ROOT*) handlers are fired in the order they were attached. - * 2. **'appRenderBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_BEFORE*) handlers are fired in the order they were attached. - * 3. Each app's `manifestUrl` is requested asynchronously; on success the following methods are fired. - * 3. **'appRender'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER*) handlers are fired in the order they were attached. - * 4. **'appRenderAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_AFTER*) handlers are fired in the order they were attached. - * - * - * **App Removal** + The new `AppHandlers` functionality provides Container Developers a higher + level of control over configuring app rendering and interaction. - * 0. {{#crossLink "F2/removeApp"}}F2.removeApp(){{/crossLink}} with a specific {{#crossLink "F2.AppConfig/instanceId "}}{{/crossLink}} or {{#crossLink "F2/removeAllApps"}}F2.removeAllApps(){{/crossLink}} method is called by the Container Developer and the following methods are run. - * 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. - * 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. - * 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - * - * **Error Handling** +

+ The addition of `F2.AppHandlers` replaces the previous {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} properties `beforeAppRender`, `appRender`, and `afterAppRender`. These methods were deprecated—but not removed—in version 1.2. They will be permanently removed in a future version of F2. +

- * 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - * - * @class F2.AppHandlers - */ -F2.extend('AppHandlers', (function() { +

+ Starting with F2 version 1.2, `AppHandlers` is the preferred method for + Container Developers to manage app layout. +

- // The hidden token that we will check against every time someone tries to add, remove, fire handler - var _containerToken = F2.guid(); - var _f2Token = F2.guid(); - - var _handlerCollection = { - appCreateRoot: [], - appRenderBefore: [], - appDestroyBefore: [], - appRenderAfter: [], - appDestroyAfter: [], - appRender: [], - appDestroy: [], - appScriptLoadFailed: [] - }; + ### Order of Execution - var _defaultMethods = { - appRender: function(appConfig, appHtml) { - // If no app root is defined use the app's outer most node - if (F2.isNativeDOMNode(appConfig.root)) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } + **App Rendering** - document.body.appendChild(appConfig.root); - }, - appDestroy: function(appInstance) { - if (appInstance.app && appInstance.app.destroy) { - if (typeof appInstance.app.destroy === 'function') { - appInstance.app.destroy(); - } else { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - } - } + 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. + 1. **'appCreateRoot'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_CREATE\_ROOT*) handlers are fired in the order they were attached. + 2. **'appRenderBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_BEFORE*) handlers are fired in the order they were attached. + 3. Each app's `manifestUrl` is requested asynchronously; on success the following methods are fired. + 3. **'appRender'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER*) handlers are fired in the order they were attached. + 4. **'appRenderAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_AFTER*) handlers are fired in the order they were attached. - jQuery(appInstance.config.root).fadeOut(500, function() { - jQuery(this).remove(); - }); - } - }; + **App Removal** - function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { - _validateToken(token); + 0. {{#crossLink "F2/removeApp"}}F2.removeApp(){{/crossLink}} with a specific {{#crossLink "F2.AppConfig/instanceId "}}{{/crossLink}} or {{#crossLink "F2/removeAllApps"}}F2.removeAllApps(){{/crossLink}} method is called by the Container Developer and the following methods are run. + 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. + 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. + 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - var handler = { - domNode: null, - func: null, - namespace: namespace - }; + **Error Handling** - if (F2.isNativeDOMNode(fnOrNode)) { - handler.domNode = fnOrNode; - } else if (typeof fnOrNode === 'function') { - handler.func = fnOrNode; - } + 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - if (!handler.func && !handler.domNode) { - throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); - } + @class F2.AppHandlers +*/ +F2.extend('AppHandlers', (function() { - if (handler.domNode && !domNodeAppropriate) { - throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); - } + // Token used when adding, removing, or triggering handlers + var _containerToken = F2.guid(); + var _f2Token = F2.guid(); + + var _handlerCollection = { + appCreateRoot: [], + appRenderBefore: [], + appDestroyBefore: [], + appRenderAfter: [], + appDestroyAfter: [], + appRender: [], + appDestroy: [], + appScriptLoadFailed: [] + }; - return handler; - } + var _defaultMethods = { + appRender: function(appConfig, appHtml) { + // If no app root is defined use the app's outer most node + if (F2.isNativeDOMNode(appConfig.root)) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } - // Token must match F2 or container - function _validateToken(token) { - if (_containerToken !== token && _f2Token !== token) { - throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); - } - } + document.body.appendChild(appConfig.root); + }, + appDestroy: function(appInstance) { + if (appInstance.app && appInstance.app.destroy) { + if (typeof appInstance.app.destroy === 'function') { + appInstance.app.destroy(); + } else { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } + } - // Token must match F2 - function _validateF2Token(token) { - if (token != _f2Token) { - throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); - } - } + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + }; - function _filterHandlersByNamespace(handlers, namespace) { - var newHandlers = handlers.slice(); + function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { + _validateToken(token); - for (var i = newHandlers.length; i >= 0; i--) { - if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { - newHandlers.splice(i, 1); - } - } + var handler = { + domNode: null, + func: null, + namespace: namespace + }; - return newHandlers; - } + if (F2.isNativeDOMNode(fnOrNode)) { + handler.domNode = fnOrNode; + } else if (typeof fnOrNode === 'function') { + handler.func = fnOrNode; + } - function _removeHandler(token, eventKey, namespace) { - _validateToken(token); + if (!handler.func && !handler.domNode) { + throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); + } - if (namespace) { - namespace = namespace.toLowerCase(); + if (handler.domNode && !domNodeAppropriate) { + throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + } - if (eventKey && eventKey in _handlerCollection) { - _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); - } else { - for (var key in _handlerCollection) { - _removeHandler(token, key, namespace); - } - } - } else if (eventKey) { - _handlerCollection[eventKey] = []; - } - } + return handler; + } - function _parseEventKey(eventKey) { - var namespace = ''; + // Token must match F2 or container + function _validateToken(token) { + if (_containerToken !== token && _f2Token !== token) { + throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); + } + } - if (eventKey.indexOf('.') !== -1) { - var eventParts = eventKey.split('.'); - eventKey = eventParts[0]; - namespace = eventParts[1]; - } + // Token must match F2 + function _validateF2Token(token) { + if (token !== _f2Token) { + throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); + } + } - return { - key: eventKey, - namespace: namespace - }; - } + function _filterHandlersByNamespace(handlers, namespace) { + var newHandlers = handlers.slice(); - return { - /** - * Allows Container Developer to retrieve a unique token which must be - * passed to all `on` and `off` methods. This function will self destruct - * and can only be called one time. Container Developers must store the - * return value inside of a closure. - * @method getToken - */ - getToken: function() { - /** - * Delete this method for security that way only the container has - * access to the token 1 time. Kind of Ethan Hunt-ish, this message will - * self-destruct immediately. - */ - delete this.getToken; - return _containerToken; - }, - /** - * Allows F2 to get a token internally. Token is required to call - * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This - * function will self destruct to eliminate other sources from using the - * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and - * additional internal methods. - * @method __f2GetToken - * @private - */ - __f2GetToken: function() { - /** - * Delete this method for security that way only the container has - * access to the token 1 time. Kind of Ethan Hunt-ish, this message will - * self-destruct immediately. - */ - delete this.__f2GetToken; - return _f2Token; - }, - /** - * Allows F2 to trigger specific events internally. - * @method __trigger - * @private - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. - * @param {String} eventKey The event to fire. The complete list of event - * keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - */ - __trigger: function(token, eventKey) { - _validateF2Token(token); - - if (!_handlerCollection[eventKey]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } + for (var i = newHandlers.length; i >= 0; i--) { + if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { + newHandlers.splice(i, 1); + } + } - var callbackArgs = Array.prototype.slice.call(arguments, 2); + return newHandlers; + } - if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { - _defaultMethods[eventKey].apply(F2, callbackArgs); - } else { - for (var i = 0; i < _handlerCollection[eventKey].length; i++) { - var handler = _handlerCollection[eventKey][i]; + function _removeHandler(token, eventKey, namespace) { + _validateToken(token); - // Check for appRender - if (handler.domNode && arguments.length >= 4) { - var appConfig = arguments[2]; - var appHtml = arguments[3]; + if (namespace) { + namespace = namespace.toLowerCase(); - if (appConfig.root) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } + if (eventKey && eventKey in _handlerCollection) { + _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); + } else { + for (var key in _handlerCollection) { + _removeHandler(token, key, namespace); + } + } + } else if (eventKey) { + _handlerCollection[eventKey] = []; + } + } - jQuery(handler.domNode).append(appConfig.root); - } else { - handler.func.apply(F2, callbackArgs); - } - } - } + function _parseEventKey(eventKey) { + var namespace = ''; - return this; - }, - /** - * Allows Container Developer to add listener method that will be triggered - * when a specific event occurs. - * @method on - * @chainable - * @param {String} token The token received from - * {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine - * which event to attach the listener to. The namespace is useful for - * removal purposes. At this time it does not affect when an event is fired. - * Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @param {Function|Element} listener A function that will be triggered - * when a specific event occurs. Optionally, a specific DOM element to - * which the app will be appended can be passed. For detailed argument - * definition refer to - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * 'appRenderBefore', - * function() { - * F2.log('before app rendered!'); - * } - * ); - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * 'appRenderBefore.myNamespace', - * function() { - * F2.log('before app rendered!'); - * } - * ); - */ - on: function(token, eventKey, listener) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } + if (eventKey.indexOf('.') !== -1) { + var eventParts = eventKey.split('.'); + eventKey = eventParts[0]; + namespace = eventParts[1]; + } - var event = _parseEventKey(eventKey); + return { + key: eventKey, + namespace: namespace + }; + } - if (!_handlerCollection[event.key]) { - throw new Error('Invalid eventKey passed. Check your inputs and try again.'); - } + return { + /** + Allows Container Developer to retrieve a unique token which must be + passed to all `on` and `off` methods. This function will self destruct + and can only be called one time. Container Developers must store the + return value inside of a closure. + @method getToken + @returns {string} A one-time container token + */ + getToken: function() { + /** + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.getToken; + return _containerToken; + }, + /** + Allows F2 to get a token internally. Token is required to call + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This + function will self destruct to eliminate other sources from using the + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and + additional internal methods. + @method __f2GetToken + @private + @returns {string} A one-time container token + */ + __f2GetToken: function() { + /** + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.__f2GetToken; + return _f2Token; + }, + /** + Allows F2 to trigger specific events internally. + @method __trigger + @private + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. + @param {String} eventKey The event to fire. The complete list of event + keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + */ + __trigger: function(token, eventKey) { + _validateF2Token(token); + + if (!_handlerCollection[eventKey]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } - var isAppRender = (event.key === 'appRender'); - var handler = _createHandler(token, event.namespace, listener, isAppRender); - _handlerCollection[event.key].push(handler); + var callbackArgs = Array.prototype.slice.call(arguments, 2); - return this; - }, - /** - * Allows Container Developer to remove listener methods for specific events - * @method off - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine - * which event to attach the listener to. If no namespace is provided all - * listeners for the specified event type will be removed. Complete list - * available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.off(token, 'appRenderBefore'); - */ - off: function(token, eventKey) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } + if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { + _defaultMethods[eventKey].apply(F2, callbackArgs); + } else { + for (var i = 0; i < _handlerCollection[eventKey].length; i++) { + var handler = _handlerCollection[eventKey][i]; - var event = _parseEventKey(eventKey); + // Check for appRender + if (handler.domNode && arguments.length >= 4) { + var appConfig = arguments[2]; + var appHtml = arguments[3]; - if (!_handlerCollection[event.key]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } + if (appConfig.root) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } - _removeHandler(token, event.key, event.namespace); + jQuery(handler.domNode).append(appConfig.root); + } else { + handler.func.apply(F2, callbackArgs); + } + } + } - return this; - } - }; -})()); + return this; + }, + /** + Allows Container Developer to add listener method that will be triggered + when a specific event occurs. + @method on + @chainable + @param {String} token The token received from + {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. The namespace is useful for + removal purposes. At this time it does not affect when an event is fired. + Complete list of event keys available in + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @param {Function} listener A function that will be triggered when a + specific event occurs. For detailed argument definition refer to + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + 'appRenderBefore' + function() { + F2.log('before app rendered!'); + } + ); + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + 'appRenderBefore.myNamespace', + function() { + F2.log('before app rendered!'); + } + ); + */ + on: function(token, eventKey, listener) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } -F2.extend('Constants', { - /** - * A convenient collection of all available appHandler events. - * @class F2.Constants.AppHandlers - **/ - AppHandlers: { - /** - * Equivalent to `appCreateRoot`. Identifies the create root method for use - * in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - * @property APP_CREATE_ROOT - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_CREATE_ROOT, - * function(appConfig) { - * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. - * // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER - * appConfig.root = jQuery('
').get(0); - * } - * ); - */ - APP_CREATE_ROOT: 'appCreateRoot', - /** - * Equivalent to `appRenderBefore`. Identifies the before app render method - * for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - * @property APP_RENDER_BEFORE - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER_BEFORE, - * function(appConfig) { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_BEFORE: 'appRenderBefore', - /** - * Equivalent to `appRender`. Identifies the app render method for use in - * AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, - * [appHtml](../../app-development.html#app-design)). - * @property APP_RENDER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER, - * function(appConfig, appHtml) { - * var $root; - * - * // If no app root is defined use the app's outer most node - * if (!F2.isNativeDOMNode(appConfig.root)) { - * appConfig.root = jQuery(appHtml).get(0); - * // Get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * } else { - * // Get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * // Append the app html to the root - * $root.append(appHtml); - * } - * - * // Append the root to the body by default. - * jQuery('body').append($root); - * } - * ); - */ - APP_RENDER: 'appRender', - /** - * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_AFTER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER_AFTER, - * function(appConfig) { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_AFTER: 'appRenderAfter', - /** - * Equivalent to `appDestroyBefore`. Identifies the before app destroy - * method for use in AppHandlers.(on|off). When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * (appInstance). - * @property APP_DESTROY_BEFORE - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - * function(appInstance) { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_BEFORE: 'appDestroyBefore', - /** - * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY, - * function(appInstance) { - * // Call the apps destroy method, if it has one - * if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { - * appInstance.app.destroy(); - * } else if (appInstance && appInstance.app && appInstance.app.destroy) { - * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - * } - * - * // Fade out and remove the root - * jQuery(appInstance.config.root).fadeOut(500, function() { - * jQuery(this).remove(); - * }); - * } - * ); - */ - APP_DESTROY: 'appDestroy', - /** - * Equivalent to `appDestroyAfter`. Identifies the after app destroy method - * for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * (appInstance) - * @property APP_DESTROY_AFTER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY_AFTER, - * function(appInstance) { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_AFTER: 'appDestroyAfter', - /** - * Equivalent to `appScriptLoadFailed`. Identifies the app script load - * failed method for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} - * the listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) - * @property APP_SCRIPT_LOAD_FAILED - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - * function(appConfig, scriptInfo) { - * F2.log(appConfig.appId); - * } - * ); - */ - APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' - } -}); + var event = _parseEventKey(eventKey); -/** - * Class stubs for documentation purposes - * @main F2 - */ -F2.extend('', { - /** - * The App Class is an optional class that can be namespaced onto the - * {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The - * [F2 Docs](../../app-development.html#app-class) - * has more information on the usage of the App Class. - * @class F2.App - * @constructor - * @param {F2.AppConfig} appConfig The F2.AppConfig object for the app - * @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent - * object - * @param {Element} root The root DOM Element for the app - */ - App: function(appConfig, appContent, root) { - return { - /** - * An optional init function that will automatically be called when - * F2.{{#crossLink "F2\registerApps"}}{{/crossLink}} is called. - * @method init - * @optional - */ - init:function() {} - }; - }, - /** - * The AppConfig object represents an app's meta data - * @class F2.AppConfig - */ - AppConfig: { - /** - * The unique ID of the app. More information can be found - * [here](../../app-development.html#f2-appid) - * @property appId - * @type string - * @required - */ - appId: '', - /** - * An object that represents the context of an app - * @property context - * @type object - */ - context: {}, - /** - * True if the app should be requested in a single request with other apps. - * @property enableBatchRequests - * @type bool - * @default false - */ - enableBatchRequests: false, - /** - * The height of the app. The initial height will be pulled from - * the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object, but later - * modified by calling - * F2.UI.{{#crossLink "F2.UI/updateHeight"}}{{/crossLink}}. This is used - * for secure apps to be able to set the initial height of the iframe. - * @property height - * @type int - */ - height: 0, - /** - * The unique runtime ID of the app. - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property instanceId - * @type string - */ - instanceId: '', - /** - * True if the app will be loaded in an iframe. This property - * will be true if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object - * sets isSecure = true. It will also be true if the - * [container](../../container-development.html) has made the decision to - * run apps in iframes. - * @property isSecure - * @type bool - * @default false - */ - isSecure: false, - /** - * The language and region specification for this container - * represented as an IETF-defined standard language tag, - * e.g. `"en-us"` or `"de-de"`. This is passed during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process. - * - * @property containerLocale - * @type string - * @default null - * @since 1.4.0 - */ - containerLocale: null, - /** - * The languages and regions supported by this app represented - * as an array of IETF-defined standard language tags, - * e.g. `["en-us","de-de"]`. - * - * @property localeSupport - * @type array - * @default [] - * @since 1.4.0 - */ - localeSupport: [], - /** - * The url to retrieve the {{#crossLink "F2.AppManifest"}}{{/crossLink}} - * object. - * @property manifestUrl - * @type string - * @required - */ - manifestUrl: '', - /** - * The recommended maximum width in pixels that this app should be run. - * **It is up to the [container](../../container-development.html) to - * implement the logic to prevent an app from being run when the maxWidth - * requirements are not met.** - * @property maxWidth - * @type int - */ - maxWidth: 0, - /** - * The recommended minimum grid size that this app should be run. This - * value corresponds to the 12-grid system that is used by the - * [container](../../container-development.html). This property should be - * set by apps that require a certain number of columns in their layout. - * @property minGridSize - * @type int - * @default 4 - */ - minGridSize: 4, - /** - * The recommended minimum width in pixels that this app should be run. **It - * is up to the [container](../../container-development.html) to implement - * the logic to prevent an app from being run when the minWidth requirements - * are not met. - * @property minWidth - * @type int - * @default 300 - */ - minWidth: 300, - /** - * The name of the app - * @property name - * @type string - * @required - */ - name: '', - /** - * The root DOM element that contains the app - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property root - * @type Element - */ - root: undefined, - /** - * The instance of F2.UI providing easy access to F2.UI methods - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property ui - * @type F2.UI - */ - ui: undefined, - /** - * The views that this app supports. Available views - * are defined in {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The - * presence of a view can be checked via - * F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: - * - * F2.inArray(F2.Constants.Views.SETTINGS, app.views) - * - * @property views - * @type Array - */ - views: [] - }, - /** - * The assets needed to render an app on the page - * @class F2.AppManifest - */ - AppManifest: { - /** - * The array of {{#crossLink "F2.AppManifest.AppContent"}}{{/crossLink}} - * objects - * @property apps - * @type Array - * @required - */ - apps: [], - /** - * Any inline javascript tha should initially be run - * @property inlineScripts - * @type Array - * @optional - */ - inlineScripts: [], - /** - * Urls to javascript files required by the app - * @property scripts - * @type Array - * @optional - */ - scripts: [], - /** - * Urls to CSS files required by the app - * @property styles - * @type Array - * @optional - */ - styles: [] - }, - /** - * The AppContent object - * @class F2.AppManifest.AppContent - **/ - AppContent: { - /** - * Arbitrary data to be passed along with the app - * @property data - * @type object - * @optional - */ - data: {}, - /** - * The string of HTML representing the app - * @property html - * @type string - * @required - */ - html: '', - /** - * A status message - * @property status - * @type string - * @optional - */ - status: '' - }, - /** - * An object containing configuration information for the - * [container](../../container-development.html) - * @class F2.ContainerConfig - */ - ContainerConfig: { - /** - * Allows the [container](../../container-development.html) to override how - * an app's html is inserted into the page. The function should accept an - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of - * html - * @method afterAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html representing the app - * @return {Element} The DOM Element surrounding the app - */ - afterAppRender: function(appConfig, html) {}, - /** - * Allows the [container](../../container-development.html) to wrap an app - * in extra html. The function should accept an - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of - * html. The extra html can provide links to edit app settings and remove an - * app from the container. See - * {{#crossLink "F2.Constants.Css"}}{{/crossLink}} for CSS classes that - * should be applied to elements. - * @method appRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html representing the app - */ - appRender: function(appConfig, html) {}, - /** - * Allows the container to render html for an app before the AppManifest for - * an app has loaded. This can be useful if the design calls for loading - * icons to appear for each app before each app is loaded and rendered to - * the page. - * @method beforeAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {Element} The DOM Element surrounding the app - */ - beforeAppRender: function(appConfig) {}, - /** - * True to enable debug mode in F2.js. Adds additional logging, resource cache busting, etc. - * @property debugMode - * @type bool - * @default false - */ - debugMode: false, - /** - * The default language and region specification for this container - * represented as an IETF-defined standard language tag, - * e.g. `"en-us"` or `"de-de"`. This value is passed to each app - * registered as `containerLocale`. - * - * @property locale - * @type string - * @default null - * @since 1.4.0 - */ - locale: null, - /** - * Milliseconds before F2 fires callback on script resource load errors. Due to issue with the way Internet Explorer attaches load events to script elements, the error event doesn't fire. - * @property scriptErrorTimeout - * @type milliseconds - * @default 7000 (7 seconds) - */ - scriptErrorTimeout: 7000, - /** - * Tells the container that it is currently running within - * a secure app page - * @property isSecureAppPage - * @type bool - */ - isSecureAppPage: false, - /** - * Allows the container to specify which page is used when - * loading a secure app. The page must reside on a different domain than the - * container - * @property secureAppPagePath - * @type string - * @for F2.ContainerConfig - */ - secureAppPagePath: '', - /** - * Specifies what views a container will provide buttons - * or links to. Generally, the views will be switched via buttons or links - * in the app's header. - * @property supportedViews - * @type Array - * @required - */ - supportedViews: [], - /** - * An object containing configuration defaults for F2.UI - * @class F2.ContainerConfig.UI - */ - UI: { - /** - * An object containing configuration defaults for the - * F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} and - * F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. - * @class F2.ContainerConfig.UI.Mask - */ - Mask: { - /** - * The backround color of the overlay - * @property backgroundColor - * @type string - * @default #FFF - */ - backgroundColor: '#FFF', - /** - * The path to the loading icon - * @property loadingIcon - * @type string - */ - loadingIcon: '', - /** - * The opacity of the background overlay - * @property opacity - * @type int - * @default 0.6 - */ - opacity: 0.6, - /** - * Do not use inline styles for mask functinality. Instead classes will - * be applied to the elements and it is up to the container provider to - * implement the class definitions. - * @property useClasses - * @type bool - * @default false - */ - useClasses: false, - /** - * The z-index to use for the overlay - * @property zIndex - * @type int - * @default 2 - */ - zIndex: 2 - } - }, - /** - * Allows the container to fully override how the AppManifest request is - * made inside of F2. - * - * @method xhr - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @param {function} success The function to be called if the request - * succeeds - * @param {function} error The function to be called if the request fails - * @param {function} complete The function to be called when the request - * finishes (after success and error callbacks have been executed) - * @return {XMLHttpRequest} The XMLHttpRequest object (or an object that has - * an `abort` function (such as the jqXHR object in jQuery) to abort the - * request) - * - * @example - * F2.init({ - * xhr: function(url, appConfigs, success, error, complete) { - * $.ajax({ - * url: url, - * type: 'POST', - * data: { - * params: F2.stringify(appConfigs, F2.appConfigReplacer) - * }, - * jsonp: false, // do not put 'callback=' in the query string - * jsonpCallback: F2.Constants.JSONP_CALLBACK + appConfigs[0].appId, // Unique function name - * dataType: 'json', - * success: function(appManifest) { - * // custom success logic - * success(appManifest); // fire success callback - * }, - * error: function() { - * // custom error logic - * error(); // fire error callback - * }, - * complete: function() { - * // custom complete logic - * complete(); // fire complete callback - * } - * }); - * } - * }); - * - * @for F2.ContainerConfig - */ - //xhr: function(url, appConfigs, success, error, complete) {}, - /** - * Allows the container to override individual parts of the AppManifest - * request. See properties and methods with the `xhr.` prefix. - * @property xhr - * @type Object - * - * @example - * F2.init({ - * xhr: { - * url: function(url, appConfigs) { - * return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); - * } - * } - * }); - */ - xhr: { - /** - * Allows the container to override the request data type (JSON or JSONP) - * that is used for the request - * @method xhr.dataType - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The request data type that should be used - * - * @example - * F2.init({ - * xhr: { - * dataType: function(url) { - * return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - * }, - * type: function(url) { - * return F2.isLocalRequest(url) ? 'POST' : 'GET'; - * } - * } - * }); - */ - dataType: function(url, appConfigs) {}, - /** - * Allows the container to override the request method that is used (just - * like the `type` parameter to `jQuery.ajax()`. - * @method xhr.type - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The request method that should be used - * - * @example - * F2.init({ - * xhr: { - * dataType: function(url) { - * return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - * }, - * type: function(url) { - * return F2.isLocalRequest(url) ? 'POST' : 'GET'; - * } - * } - * }); - */ - type: function(url, appConfigs) {}, - /** - * Allows the container to override the url that is used to request an - * app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}} - * @method xhr.url - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The url that should be used for the request - * - * @example - * F2.init({ - * xhr: { - * url: function(url, appConfigs) { - * return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); - * } - * } - * }); - */ - url: function(url, appConfigs) {} - }, - /** - * Allows the container to override the script loader which requests - * dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - * @property loadScripts - * @type function - * - * @example - * F2.init({ - * loadScripts: function(scripts,inlines,callback){ - * //load scripts using $.load() for each script or require(scripts) - * callback(); - * } - * }); - */ - loadScripts: function(scripts,inlines,callback){}, - /** - * Allows the container to override the stylesheet loader which requests - * dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - * @property loadStyles - * @type function - * - * @example - * F2.init({ - * loadStyles: function(styles,callback){ - * //load styles using $.load() for each stylesheet or another method - * callback(); - * } - * }); - */ - loadStyles: function(styles,callback){} - } -}); -/** - * Constants used throughout the Open Financial Framework - * @class F2.Constants - * @static - */ -F2.extend('Constants', { - /** - * CSS class constants - * @class F2.Constants.Css - */ - Css: (function() { + if (!_handlerCollection[event.key]) { + throw new Error('Invalid eventKey passed. Check your inputs and try again.'); + } - /** @private */ - var _PREFIX = 'f2-'; + var isAppRender = (event.key === 'appRender'); + var handler = _createHandler(token, event.namespace, listener, isAppRender); + _handlerCollection[event.key].push(handler); - return { - /** - * The APP class should be applied to the DOM Element that surrounds the - * entire app, including any extra html that surrounds the APP\_CONTAINER - * that is inserted by the container. See the - * {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} object. - * @property APP - * @type string - * @static - * @final - */ - APP: _PREFIX + 'app', - /** - * The APP\_CONTAINER class should be applied to the outermost DOM Element - * of the app. - * @property APP_CONTAINER - * @type string - * @static - * @final - */ - APP_CONTAINER: _PREFIX + 'app-container', - /** - * The APP\_TITLE class should be applied to the DOM Element that contains - * the title for an app. If this class is not present, then - * F2.UI.{{#crossLink "F2.UI/setTitle"}}{{/crossLink}} will not function. - * @property APP_TITLE - * @type string - * @static - * @final - */ - APP_TITLE: _PREFIX + 'app-title', - /** - * The APP\_VIEW class should be applied to the DOM Element that contains - * a view for an app. The DOM Element should also have a - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE - * attribute that specifies which - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it is. - * @property APP_VIEW - * @type string - * @static - * @final - */ - APP_VIEW: _PREFIX + 'app-view', - /** - * APP\_VIEW\_TRIGGER class should be applied to the DOM Elements that - * trigger an - * {{#crossLink "F2.Constants.Events"}}{{/crossLink}}.APP\_VIEW\_CHANGE - * event. The DOM Element should also have a - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE - * attribute that specifies which - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it will trigger. - * @property APP_VIEW_TRIGGER - * @type string - * @static - * @final - */ - APP_VIEW_TRIGGER: _PREFIX + 'app-view-trigger', - /** - * The MASK class is applied to the overlay element that is created - * when the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method is - * fired. - * @property MASK - * @type string - * @static - * @final - */ - MASK: _PREFIX + 'mask', - /** - * The MASK_CONTAINER class is applied to the Element that is passed into - * the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method. - * @property MASK_CONTAINER - * @type string - * @static - * @final - */ - MASK_CONTAINER: _PREFIX + 'mask-container' - }; - })(), - - /** - * Events constants - * @class F2.Constants.Events - */ - Events: (function() { - /** @private */ - var _APP_EVENT_PREFIX = 'App.'; - /** @private */ - var _CONTAINER_EVENT_PREFIX = 'Container.'; + return this; + }, + /** + Allows Container Developer to remove listener methods for specific events + @method off + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. If no namespace is provided all + listeners for the specified event type will be removed. Complete list + available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.off(token, 'appRenderBefore'); + */ + off: function(token, eventKey) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } - return { - /** - * The APP\_SYMBOL\_CHANGE event is fired when the symbol is changed in an - * app. It is up to the app developer to fire this event. - * Returns an object with the symbol and company name: - * - * { symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' } - * - * @property APP_SYMBOL_CHANGE - * @type string - * @static - * @final - */ - APP_SYMBOL_CHANGE: _APP_EVENT_PREFIX + 'symbolChange', - /** - * The APP\_WIDTH\_CHANGE event will be fired by the container when the - * width of an app is changed. The app's instanceId should be concatenated - * to this constant. - * Returns an object with the gridSize and width in pixels: - * - * { gridSize:8, width:620 } - * - * @property APP_WIDTH_CHANGE - * @type string - * @static - * @final - */ - APP_WIDTH_CHANGE: _APP_EVENT_PREFIX + 'widthChange.', - /** - * The CONTAINER\_SYMBOL\_CHANGE event is fired when the symbol is changed - * at the container level. This event should only be fired by the - * container or container provider. - * Returns an object with the symbol and company name: - * - * { symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' } - * - * @property CONTAINER_SYMBOL_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_SYMBOL_CHANGE: _CONTAINER_EVENT_PREFIX + 'symbolChange', - /** - * The CONTAINER\_WIDTH\_CHANGE event will be fired by the container when - * the width of the container has changed. - * @property CONTAINER_WIDTH_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_WIDTH_CHANGE: _CONTAINER_EVENT_PREFIX + 'widthChange', - /** - * The CONTAINER\_LOCALE\_CHANGE event will be fired by the container when - * the locale of the container has changed. This event should only be fired by the - * container or container provider. - * Returns an object with the updated locale (IETF-defined standard language tag): - * - * { locale: 'en-us' } - * - * @property CONTAINER_LOCALE_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_LOCALE_CHANGE: _CONTAINER_EVENT_PREFIX + 'localeChange' - }; - })(), + var event = _parseEventKey(eventKey); - JSONP_CALLBACK: 'F2_jsonpCallback_', + if (!_handlerCollection[event.key]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } - /** - * Constants for use with cross-domain sockets - * @class F2.Constants.Sockets - * @protected - */ - Sockets: { - /** - * The EVENT message is sent whenever - * F2.Events.{{#crossLink "F2.Events/emit"}}{{/crossLink}} is fired - * @property EVENT - * @type string - * @static - * @final - */ - EVENT: '__event__', - /** - * The LOAD message is sent when an iframe socket initially loads. - * Returns a JSON string that represents: - * - * [ App, AppManifest] - * - * @property LOAD - * @type string - * @static - * @final - */ - LOAD: '__socketLoad__', - /** - * The RPC message is sent when a method is passed up from within a secure - * app page. - * @property RPC - * @type string - * @static - * @final - */ - RPC: '__rpc__', - /** - * The RPC\_CALLBACK message is sent when a call back from an RPC method is - * fired. - * @property RPC_CALLBACK - * @type string - * @static - * @final - */ - RPC_CALLBACK: '__rpcCallback__', - /** - * The UI\_RPC message is sent when a UI method called. - * @property UI_RPC - * @type string - * @static - * @final - */ - UI_RPC: '__uiRpc__' - }, + _removeHandler(token, event.key, event.namespace); - /** - * The available view types to apps. The view should be specified by applying - * the {{#crossLink "F2.Constants.Css"}}{{/crossLink}}.APP\_VIEW class to the - * containing DOM Element. A DATA\_ATTRIBUTE attribute should be added to the - * Element as well which defines what view type is represented. - * The `hide` class can be applied to views that should be hidden by default. - * @class F2.Constants.Views - */ - Views: { - /** - * The DATA_ATTRIBUTE should be placed on the DOM Element that contains the - * view. - * @property DATA_ATTRIBUTE - * @type string - * @static - * @final - */ - DATA_ATTRIBUTE: 'data-f2-view', - /** - * The ABOUT view gives details about the app. - * @property ABOUT - * @type string - * @static - * @final - */ - ABOUT: 'about', - /** - * The HELP view provides users with help information for using an app. - * @property HELP - * @type string - * @static - * @final - */ - HELP: 'help', - /** - * The HOME view is the main view for an app. This view should always - * be provided by an app. - * @property HOME - * @type string - * @static - * @final - */ - HOME: 'home', - /** - * The REMOVE view is a special view that handles the removal of an app - * from the container. - * @property REMOVE - * @type string - * @static - * @final - */ - REMOVE: 'remove', - /** - * The SETTINGS view provides users the ability to modify advanced settings - * for an app. - * @property SETTINGS - * @type string - * @static - * @final - */ - SETTINGS: 'settings' - } -}); -/** - * Handles [Context](../../app-development.html#context) passing from - * containers to apps and apps to apps. - * @class F2.Events - */ -F2.extend('Events', (function() { - // init EventEmitter - var _events = new EventEmitter2({ - wildcard:true - }); + return this; + } + }; +})()); - // unlimited listeners, set to > 0 for debugging - _events.setMaxListeners(0); +F2.extend('Constants', { + /** + A convenient collection of all available appHandler events. + @class F2.Constants.AppHandlers + */ + AppHandlers: { + /** + Equivalent to `appCreateRoot`. Identifies the create root method for use + in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_CREATE_ROOT + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_CREATE_ROOT, + function(appConfig) { + // If you want to create a custom root. By default F2 uses the app's outermost HTML element. + // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER + appConfig.root = jQuery('
').get(0); + } + ); + */ + APP_CREATE_ROOT: 'appCreateRoot', + /** + Equivalent to `appRenderBefore`. Identifies the before app render method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_RENDER_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_BEFORE: 'appRenderBefore', + /** + Equivalent to `appRender`. Identifies the app render method for use in + AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, + [appHtml](../../app-development.html#app-design)). + @property APP_RENDER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER, + function(appConfig, appHtml) { + var $root; + + // If no app root is defined use the app's outer most node + if (!F2.isNativeDOMNode(appConfig.root)) { + appConfig.root = jQuery(appHtml).get(0); + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + } else { + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + // Append the app html to the root + $root.append(appHtml); + } - return { - /** - * Same as F2.Events.emit except that it will not send the event - * to all sockets. - * @method _socketEmit - * @private - * @param {string} event The event name - * @param {object} [arg]* The arguments to be passed - */ - _socketEmit: function() { - return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); - }, - /** - * Execute each of the listeners that may be listening for the specified - * event name in order with the list of arguments. - * @method emit - * @param {string} event The event name - * @param {object} [arg]* The arguments to be passed - */ - emit: function() { - F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); - return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); - }, - /** - * Adds a listener that will execute n times for the event before being - * removed. The listener is invoked only the first time the event is - * fired, after which it is removed. - * @method many - * @param {string} event The event name - * @param {int} timesToListen The number of times to execute the event - * before being removed - * @param {function} listener The function to be fired when the event is - * emitted - */ - many: function(event, timesToListen, listener) { - return _events.many(event, timesToListen, listener); - }, - /** - * Remove a listener for the specified event. - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - */ - off: function(event, listener) { - return _events.off(event, listener); - }, - /** - * Adds a listener for the specified event - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ - on: function(event, listener){ - return _events.on(event, listener); - }, - /** - * Adds a one time listener for the event. The listener is invoked only - * the first time the event is fired, after which it is removed. - * @method once - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ - once: function(event, listener) { - return _events.once(event, listener); - } - }; -})()); -/** - * Handles socket communication between the container and secure apps - * @class F2.Rpc - */ -F2.extend('Rpc', (function(){ - var _callbacks = {}; - var _secureAppPagePath = ''; - var _apps = {}; - var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); - var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); - var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); - var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); - var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); - - /** - * Creates a socket connection from the app to the container using - * easyXDM. - * @method _createAppToContainerSocket - * @private - */ - var _createAppToContainerSocket = function() { - - var appConfig; // socket closure - var isLoaded = false; - // its possible for messages to be received before the socket load event has - // happened. We'll save off these messages and replay them once the socket - // is ready - var messagePlayback = []; - - var socket = new easyXDM.Socket({ - onMessage: function(message, origin){ - - // handle Socket Load - if (!isLoaded && _rSocketLoad.test(message)) { - message = message.replace(_rSocketLoad, ''); - var appParts = F2.parse(message); - - // make sure we have the AppConfig and AppManifest - if (appParts.length == 2) { - appConfig = appParts[0]; - - // save socket - _apps[appConfig.instanceId] = { - config:appConfig, - socket:socket - }; - - // register app - F2.registerApps([appConfig], [appParts[1]]); - - // socket message playback - jQuery.each(messagePlayback, function(i, e) { - _onMessage(appConfig, message, origin); - }); - - isLoaded = true; - } - } else if (isLoaded) { - // pass everyting else to _onMessage - _onMessage(appConfig, message, origin); - } else { - //F2.log('socket not ready, queuing message', message); - messagePlayback.push(message); - } - } - }); - }; - - /** - * Creates a socket connection from the container to the app using - * easyXDM. - * @method _createContainerToAppSocket - * @private - * @param {appConfig} appConfig The F2.AppConfig object - * @param {F2.AppManifest} appManifest The F2.AppManifest object - */ - var _createContainerToAppSocket = function(appConfig, appManifest) { - - var container = jQuery(appConfig.root); - - if (!container.is('.' + F2.Constants.Css.APP_CONTAINER)) { - container.find('.' + F2.Constants.Css.APP_CONTAINER); - } - - if (!container.length) { - F2.log('Unable to locate app in order to establish secure connection.'); - return; - } + // Append the root to the body by default. + jQuery('body').append($root); + } + ); + */ + APP_RENDER: 'appRender', + /** + Equivalent to `appRenderAfter`. Identifies the after app render method + for use in AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}) + @property APP_RENDER_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_AFTER: 'appRenderAfter', + /** + Equivalent to `appDestroyBefore`. Identifies the before app destroy + method for use in AppHandlers.(on|off). When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance). + @property APP_DESTROY_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_BEFORE: 'appDestroyBefore', + /** + Equivalent to `appDestroy`. Identifies the app destroy method for use in + AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY, + function(appInstance) { + // Call the apps destroy method, if it has one + if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { + appInstance.app.destroy(); + } else if (appInstance && appInstance.app && appInstance.app.destroy) { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } - var iframeProps = { - scrolling:'no', - style:{ - width:'100%' - } - }; + // Fade out and remove the root + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + ); + */ + APP_DESTROY: 'appDestroy', + /** + Equivalent to `appDestroyAfter`. Identifies the after app destroy method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_AFTER: 'appDestroyAfter', + /** + Equivalent to `appScriptLoadFailed`. Identifies the app script load + failed method for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) + @property APP_SCRIPT_LOAD_FAILED + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + function(appConfig, scriptInfo) { + F2.log(appConfig.appId); + } + ); + */ + APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + } +}); - if (appConfig.height) { - iframeProps.style.height = appConfig.height + 'px'; - } +/** + Class stubs for documentation purposes + @main F2 +*/ +F2.extend('', { + /** + The App Class is an optional class that can be namespaced onto the + {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The + [F2 Docs](../../app-development.html#app-class) has more information on the + usage of the App Class. + @class F2.App + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object for the app + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object + @param {Element} root The root DOM Element for the app + */ + App: function(appConfig, appContent, root) { + return { + /** + An optional init function that will automatically be called when + F2.{{#crossLink "F2\registerApps"}}{{/crossLink}} is called. + @method init + @optional + */ + init: function() {} + }; + }, + /** + The AppConfig object represents an app's meta data + @class F2.AppConfig + */ + AppConfig: { + /** + The unique ID of the app. More information can be found + [here](../../app-development.html#f2-appid). + @property appId + @type string + @required + */ + appId: '', + /** + An object that represents the context of an app. + @property context + @type object + */ + context: {}, + /** + True if the app should be requested in a single request with other apps. + @property enableBatchRequests + @type bool + @default false + */ + enableBatchRequests: false, + /** + The height of the app. The initial height will be pulled from the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object, but later modified by + calling F2.UI.{{#crossLink "F2.UI/updateHeight"}}{{/crossLink}}. This is + used for secure apps to be able to set the initial height of the iframe. + @property height + @type int + */ + height: 0, + /** + The unique runtime ID of the app. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** + @property instanceId + @type string + */ + instanceId: '', + /** + True if the app will be loaded in an iframe. This property will be true + if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object sets + `isSecure = true`. It will also be true if the + [container](../../container-development.html) has made the decision to + run apps in iframes. + @property isSecure + @type bool + @default false + */ + isSecure: false, + /** + The language and region specification for this container represented as + an IETF-defined standard language tag, e.g. `"en-us"` or `"de-de"`. This + is passed during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} + process. + @property containerLocale + @type string + @default null + @since 1.4.0 + */ + containerLocale: null, + /** + The languages and regions supported by this app represented as an array + of IETF-defined standard language tags, e.g. `["en-us","de-de"]`. + @property localeSupport + @type array + @default [] + @since 1.4.0 + */ + localeSupport: [], + /** + The url to retrieve the {{#crossLink "F2.AppManifest"}}{{/crossLink}} + object. + @property manifestUrl + @type string + @required + */ + manifestUrl: '', + /** + The recommended maximum width in pixels that this app should be run. **It + is up to the [container](../../container-development.html) to implement + the logic to prevent an app from being run when the maxWidth requirements + are not met.** + @property maxWidth + @type int + */ + maxWidth: 0, + /** + The recommended minimum grid size that this app should be run. This value + corresponds to the 12-grid system that is used by the + [container](../../container-development.html). This property should be + set by apps that require a certain number of columns in their layout. + @property minGridSize + @type int + @default 4 + */ + minGridSize: 4, + /** + The recommended minimum width in pixels that this app should be run. + **It is up to the [container](../../container-development.html) to + implement the logic to prevent an app from being run when the minWidth + requirements are not met. + @property minWidth + @type int + @default 300 + */ + minWidth: 300, + /** + The name of the app. + @property name + @type string + @required + */ + name: '', + /** + The root DOM element that contains the app. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process.** + @property root + @type Element + */ + root: undefined, + /** + The instance of F2.UI providing easy access to F2.UI methods. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process.** + @property ui + @type F2.UI + */ + ui: undefined, + /** + The views that this app supports. Available views are defined in + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The presence of a view + can be checked via F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: + F2.inArray(F2.Constants.Views.SETTINGS, app.views). + @property views + @type Array + */ + views: [] + }, + /** + The assets needed to render an app on the page. + @class F2.AppManifest + */ + AppManifest: { + /** + The array of {{#crossLink "F2.AppManifest.AppContent"}}{{/crossLink}} + objects. + @property apps + @type Array + @required + */ + apps: [], + /** + Any inline javascript tha should initially be run. + @property inlineScripts + @type Array + @optional + */ + inlineScripts: [], + /** + Urls to javascript files required by the app. + @property scripts + @type Array + @optional + */ + scripts: [], + /** + Urls to CSS files required by the app. + @property styles + @type Array + @optional + */ + styles: [] + }, + /** + The AppContent object. + @class F2.AppManifest.AppContent + */ + AppContent: { + /** + Arbitrary data to be passed along with the app. + @property data + @type object + @optional + */ + data: {}, + /** + The string of HTML representing the app. + @property html + @type string + @required + */ + html: '', + /** + A status message. + @property status + @type string + @optional + */ + status: '' + }, + /** + An object containing configuration information for the + [container](../../container-development.html). + @class F2.ContainerConfig + */ + ContainerConfig: { + /** + Allows the [container](../../container-development.html) to override how + an app's html is inserted into the page. The function should accept an + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of + html. + @method afterAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html representing the app + @return {Element} The DOM Element surrounding the app + */ + afterAppRender: null, + /** + Allows the [container](../../container-development.html) to wrap an app + in extra html. The function should accept an + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of + html. The extra html can provide links to edit app settings and remove an + app from the container. See + {{#crossLink "F2.Constants.Css"}}{{/crossLink}} for CSS classes that + should be applied to elements. + @method appRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html representing the app + */ + appRender: null, + /** + Allows the container to render html for an app before the AppManifest for + an app has loaded. This can be useful if the design calls for loading + icons to appear for each app before each app is loaded and rendered to + the page. + @method beforeAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app + */ + beforeAppRender: null, + /** + True to enable debug mode in F2.js. Adds additional logging, resource + cache busting, etc. + @property debugMode + @type bool + @default false + */ + debugMode: false, + /** + The default language and region specification for this container + represented as an IETF-defined standard language tag, e.g. `"en-us"` or + `"de-de"`. This value is passed to each app registered as + `containerLocale`. + @property locale + @type string + @default null + @since 1.4.0 + */ + locale: null, + /** + Milliseconds before F2 fires callback on script resource load errors. Due + to issue with the way Internet Explorer attaches load events to script + elements, the error event doesn't fire. + @property scriptErrorTimeout + @type milliseconds + @default 7000 (7 seconds) + */ + scriptErrorTimeout: 7000, + /** + Tells the container that it is currently running within a secure app page. + @property isSecureAppPage + @type bool + */ + isSecureAppPage: false, + /** + Allows the container to specify which page is used when loading a secure + app. The page must reside on a different domain than the container. + @property secureAppPagePath + @type string + @for F2.ContainerConfig + */ + secureAppPagePath: '', + /** + Specifies what views a container will provide buttons or links to. + Generally, the views will be switched via buttons or links in the app's + header. + @property supportedViews + @type Array + @required + */ + supportedViews: [], + /** + An object containing configuration defaults for F2.UI. + @class F2.ContainerConfig.UI + */ + UI: { + /** + An object containing configuration defaults for the + F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} and + F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. + @class F2.ContainerConfig.UI.Mask + */ + Mask: { + /** + The backround color of the overlay. + @property backgroundColor + @type string + @default #FFF + */ + backgroundColor: '#FFF', + /** + The path to the loading icon. + @property loadingIcon + @type string + */ + loadingIcon: '', + /** + The opacity of the background overlay. + @property opacity + @type int + @default 0.6 + */ + opacity: 0.6, + /** + Do not use inline styles for mask functinality. Instead classes will + be applied to the elements and it is up to the container provider to + implement the class definitions. + @property useClasses + @type bool + @default false + */ + useClasses: false, + /** + The z-index to use for the overlay + @property zIndex + @type int + @default 2 + */ + zIndex: 2 + } + }, + /** + Allows the container to override individual parts of the AppManifest + request. See properties and methods with the `xhr.` prefix. + @property xhr + @type Object + @example + F2.init({ + xhr: { + url: function(url, appConfigs) { + return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); + } + } + }); + */ + xhr: { + /** + Allows the container to override the request data type (JSON or JSONP) + that is used for the request. + @method xhr.dataType + @param {string} url The manifest url + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @return {string} The request data type that should be used + @example + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + */ + dataType: null, + /** + Allows the container to override the request method that is used (just + like the `type` parameter to `jQuery.ajax()`. + @method xhr.type + @param {string} url The manifest url + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @return {string} The request method that should be used + @example + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + */ + type: null, + /** + Allows the container to override the url that is used to request an + app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method xhr.url + @param {string} url The manifest url + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @return {string} The url that should be used for the request + @example + F2.init({ + xhr: { + url: function(url, appConfigs) { + return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); + } + } + }); + */ + url: null + }, + /** + Allows the container to override the script loader which requests + dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method loadScripts + @param {Array} scripts Script file urls to be loaded + @param {Array} inlines Inline JavaScript to be run + @param {Function} callback Should be called when loading is complete + @example + F2.init({ + loadScripts: function(scripts, inlines, callback) { + // Load scripts using $.load() for each script or require(scripts) + callback(); + } + }); + */ + loadScripts: function(scripts, inlines, callback) {}, + /** + Allows the container to override the stylesheet loader which requests + dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method loadStyles + @param {Array} styles CSS file urls to be loaded + @param {Function} callback Should be called when loading is complete + @example + F2.init({ + loadStyles: function(styles, callback) { + // Load styles using $.load() for each stylesheet or another method + callback(); + } + }); + */ + loadStyles: function(styles, callback) {} + } +}); - var socket = new easyXDM.Socket({ - remote: _secureAppPagePath, - container: container.get(0), - props:iframeProps, - onMessage: function(message, origin) { - // pass everything to _onMessage - _onMessage(appConfig, message, origin); - }, - onReady: function() { - socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); - } - }); +/** + Constants used throughout the Open Financial Framework. + @class F2.Constants + @static +*/ +F2.extend('Constants', { + /** + CSS class constants + @class F2.Constants.Css + */ + Css: { + /** + The APP class should be applied to the DOM Element that surrounds the + entire app, including any extra html that surrounds the APP\_CONTAINER + that is inserted by the container. See the + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} object. + @property APP + @type string + @static + @final + */ + APP: 'f2-app', + /** + The APP\_CONTAINER class should be applied to the outermost DOM Element + of the app. + @property APP_CONTAINER + @type string + @static + @final + */ + APP_CONTAINER: 'f2-app-container', + /** + The APP\_TITLE class should be applied to the DOM Element that contains + the title for an app. If this class is not present, then + F2.UI.{{#crossLink "F2.UI/setTitle"}}{{/crossLink}} will not function. + @property APP_TITLE + @type string + @static + @final + */ + APP_TITLE: 'f2-app-title', + /** + The APP\_VIEW class should be applied to the DOM Element that contains + a view for an app. The DOM Element should also have a + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE + attribute that specifies which + {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it is. + @property APP_VIEW + @type string + @static + @final + */ + APP_VIEW: 'f2-app-view', + /** + APP\_VIEW\_TRIGGER class should be applied to the DOM Elements that + trigger an + {{#crossLink "F2.Constants.Events"}}{{/crossLink}}.APP\_VIEW\_CHANGE + event. The DOM Element should also have a + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE + attribute that specifies which + {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it will trigger. + @property APP_VIEW_TRIGGER + @type string + @static + @final + */ + APP_VIEW_TRIGGER: 'f2-app-view-trigger', + /** + The MASK class is applied to the overlay element that is created + when the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method is + fired. + @property MASK + @type string + @static + @final + */ + MASK: 'f2-mask', + /** + The MASK_CONTAINER class is applied to the Element that is passed into + the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method. + @property MASK_CONTAINER + @type string + @static + @final + */ + MASK_CONTAINER: 'f2-mask-container' + }, + /** + Events constants + @class F2.Constants.Events + */ + Events: { + /** + The APP\_SYMBOL\_CHANGE event is fired when the symbol is changed in an + app. It is up to the app developer to fire this event. Returns an object + with the symbol and company name: + `{ symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' }` + @property APP_SYMBOL_CHANGE + @type string + @static + @final + */ + APP_SYMBOL_CHANGE: 'App.symbolChange', + /** + The APP\_WIDTH\_CHANGE event will be fired by the container when the + width of an app is changed. The app's instanceId should be concatenated + to this constant. Returns an object with the gridSize and width in pixels: + `{ gridSize: 8, width: 620 }` + @property APP_WIDTH_CHANGE + @type string + @static + @final + */ + APP_WIDTH_CHANGE: 'App.widthChange.', + /** + The CONTAINER\_SYMBOL\_CHANGE event is fired when the symbol is changed + at the container level. This event should only be fired by the container + or container provider. Returns an object with the symbol and company name: + `{ symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' }` + @property CONTAINER_SYMBOL_CHANGE + @type string + @static + @final + */ + CONTAINER_SYMBOL_CHANGE: 'Container.symbolChange', + /** + The CONTAINER\_WIDTH\_CHANGE event will be fired by the container when + the width of the container has changed. + @property CONTAINER_WIDTH_CHANGE + @type string + @static + @final + */ + CONTAINER_WIDTH_CHANGE: 'Container.widthChange', + /** + The CONTAINER\_LOCALE\_CHANGE event will be fired by the container when + the locale of the container has changed. This event should only be fired + by the container or container provider. Returns an object with the + updated locale (IETF-defined standard language tag): + `{ locale: 'en-us' }` + @property CONTAINER_LOCALE_CHANGE + @type string + @static + @final + */ + CONTAINER_LOCALE_CHANGE: 'Container.localeChange' + }, + JSONP_CALLBACK: 'F2_jsonpCallback_', + /** + Constants for use with cross-domain sockets. + @class F2.Constants.Sockets + @protected + */ + Sockets: { + /** + The EVENT message is sent whenever + F2.Events.{{#crossLink "F2.Events/emit"}}{{/crossLink}} is fired. + @property EVENT + @type string + @static + @final + */ + EVENT: '__event__', + /** + The LOAD message is sent when an iframe socket initially loads. Returns + a JSON string that represents: `[ App, AppManifest]` + @property LOAD + @type string + @static + @final + */ + LOAD: '__socketLoad__', + /** + The RPC message is sent when a method is passed up from within a secure + app page. + @property RPC + @type string + @static + @final + */ + RPC: '__rpc__', + /** + The RPC\_CALLBACK message is sent when a call back from an RPC method is + fired. + @property RPC_CALLBACK + @type string + @static + @final + */ + RPC_CALLBACK: '__rpcCallback__', + /** + The UI\_RPC message is sent when a UI method called. + @property UI_RPC + @type string + @static + @final + */ + UI_RPC: '__uiRpc__' + }, + /** + The available view types to apps. The view should be specified by applying + the {{#crossLink "F2.Constants.Css"}}{{/crossLink}}.APP\_VIEW class to the + containing DOM Element. A DATA\_ATTRIBUTE attribute should be added to the + Element as well which defines what view type is represented. The `hide` + class can be applied to views that should be hidden by default. + @class F2.Constants.Views + */ + Views: { + /** + The DATA_ATTRIBUTE should be placed on the DOM Element that contains the + view. + @property DATA_ATTRIBUTE + @type string + @static + @final + */ + DATA_ATTRIBUTE: 'data-f2-view', + /** + The ABOUT view gives details about the app. + @property ABOUT + @type string + @static + @final + */ + ABOUT: 'about', + /** + The HELP view provides users with help information for using an app. + @property HELP + @type string + @static + @final + */ + HELP: 'help', + /** + The HOME view is the main view for an app. This view should always be + provided by an app. + @property HOME + @type string + @static + @final + */ + HOME: 'home', + /** + The REMOVE view is a special view that handles the removal of an app from + the container. + @property REMOVE + @type string + @static + @final + */ + REMOVE: 'remove', + /** + The SETTINGS view provides users the ability to modify advanced settings + for an app. + @property SETTINGS + @type string + @static + @final + */ + SETTINGS: 'settings' + } +}); - return socket; - }; +/** + Root namespace of the F2 SDK + @module f2 + @class F2 +*/ +F2.extend('', (function() { - /** - * @method _createRpcCallback - * @private - * @param {string} instanceId The app's Instance ID - * @param {function} callbackId The callback ID - * @return {function} A function to make the RPC call - */ - var _createRpcCallback = function(instanceId, callbackId) { - return function() { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC_CALLBACK, - callbackId, - [].slice.call(arguments).slice(2) - ); - }; - }; + var _apps = {}; + var _config = false; + var _usesAppHandlers = false; + var _appHandlerToken = F2.AppHandlers.__f2GetToken(); + var _loadedScripts = {}; + var _loadedStyles = {}; + var _loadingScripts = {}; + + /** + Appends the app's html to the DOM. + @method _afterAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @return {Element} The DOM Element that contains the app + */ + function _afterAppRender(appConfig, html) { + var handler = _config.afterAppRender || function(_appConfig, _html) { + return jQuery(_html).appendTo('body'); + }; + var $appContainer = handler(appConfig, html); - /** - * Handles messages that come across the sockets - * @method _onMessage - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} message The socket message - * @param {string} origin The originator - */ - var _onMessage = function(appConfig, message, origin) { + if (_config.afterAppRender && !$appContainer) { + F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); + return; + } - var obj, func; + jQuery($appContainer).addClass(F2.Constants.Css.APP); - function parseFunction(parent, functionName) { - var path = String(functionName).split('.'); - for (var i = 0; i < path.length; i++) { - if (parent[path[i]] === undefined) { - parent = undefined; - break; - } - parent = parent[path[i]]; - } - return parent; - } - - function parseMessage(regEx, message, instanceId) { - var o = F2.parse(message.replace(regEx, '')); - - // if obj.callbacks - // for each callback - // for each params - // if callback matches param - // replace param with _createRpcCallback(app.instanceId, callback) - if (o.params && o.params.length && o.callbacks && o.callbacks.length) { - jQuery.each(o.callbacks, function(i, c) { - jQuery.each(o.params, function(i, p) { - if (c == p) { - o.params[i] = _createRpcCallback(instanceId, c); - } - }); - }); - } + return $appContainer.get(0); + } - return o; - } + /** + Renders the html for an app. + @method _appRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @returns {string} HTML for the app + */ + function _appRender(appConfig, html) { + // Apply APP_CONTAINER class and AppID + html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + + // Optionally apply wrapper html + if (_config.appRender) { + html = _config.appRender(appConfig, html); + } - // handle UI Call - if (_rUiCall.test(message)) { - obj = parseMessage(_rUiCall, message, appConfig.instanceId); - func = parseFunction(appConfig.ui, obj.functionName); - // if we found the function, call it - if (func !== undefined) { - func.apply(appConfig.ui, obj.params); - } else { - F2.log('Unable to locate UI RPC function: ' + obj.functionName); - } + return _outerHtml(html); + } - // handle RPC - } else if (_rRpc.test(message)) { - obj = parseMessage(_rRpc, message, appConfig.instanceId); - func = parseFunction(window, obj.functionName); - if (func !== undefined) { - func.apply(func, obj.params); - } else { - F2.log('Unable to locate RPC function: ' + obj.functionName); - } + /** + Rendering hook to allow containers to render some html prior to an app + loading. + @method _beforeAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app + */ + function _beforeAppRender(appConfig) { + var handler = _config.beforeAppRender || jQuery.noop; + return handler(appConfig); + } - // handle RPC Callback - } else if (_rRpcCallback.test(message)) { - obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); - if (_callbacks[obj.functionName] !== undefined) { - _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); - delete _callbacks[obj.functionName]; - } + /** + Handler to inform the container that a script failed to load. + @method _onScriptLoadFailure + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} scriptInfo The path of the script that failed to load or + the exception info for the inline script that failed to execute. + */ + function _appScriptLoadFailed(appConfig, scriptInfo) { + if (_config.appScriptLoadFailed) { + _config.appScriptLoadFailed(appConfig, scriptInfo); + } + } - // handle Events - } else if (_rEvents.test(message)) { - obj = parseMessage(_rEvents, message, appConfig.instanceId); - F2.Events._socketEmit.apply(F2.Events, obj); - } - }; + /** + Adds properties to the AppConfig object. + @method _createAppConfig + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with + necessary properties. + */ + function _createAppConfig(appConfig) { + // Make a copy of the app config to ensure that the original is not modified + appConfig = jQuery.extend(true, {}, appConfig); + + // Create the instanceId for the app + appConfig.instanceId = appConfig.instanceId || F2.guid(); + + // Default the views if not provided + appConfig.views = appConfig.views || []; + if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { + appConfig.views.push(F2.Constants.Views.HOME); + } - /** - * Registers a callback function - * @method _registerCallback - * @private - * @param {function} callback The callback function - * @return {string} The callback ID - */ - var _registerCallback = function(callback) { - var callbackId = F2.guid(); - _callbacks[callbackId] = callback; - return callbackId; - }; + // Pass container-defined locale to each app + if (F2.ContainerConfig.locale) { + appConfig.containerLocale = F2.ContainerConfig.locale; + } - return { - /** - * Broadcast an RPC function to all sockets - * @method broadcast - * @param {string} messageType The message type - * @param {Array} params The parameters to broadcast - */ - broadcast: function(messageType, params) { - // check valid messageType - var message = messageType + F2.stringify(params); - jQuery.each(_apps, function(i, a) { - a.socket.postMessage(message); - }); - }, - /** - * Calls a remote function - * @method call - * @param {string} instanceId The app's Instance ID - * @param {string} messageType The message type - * @param {string} functionName The name of the remote function - * @param {Array} params An array of parameters to pass to the remote - * function. Any functions found within the params will be treated as a - * callback function. - */ - call: function(instanceId, messageType, functionName, params) { - // loop through params and find functions and convert them to callbacks - var callbacks = []; - jQuery.each(params, function(i, e) { - if (typeof e === 'function') { - var cid = _registerCallback(e); - params[i] = cid; - callbacks.push(cid); - } - }); - // check valid messageType - _apps[instanceId].socket.postMessage( - messageType + F2.stringify({ - functionName:functionName, - params:params, - callbacks:callbacks - }) - ); - }, + return appConfig; + } - /** - * Init function which tells F2.Rpc whether it is running at the container- - * level or the app-level. This method is generally called by - * F2.{{#crossLink "F2/init"}}{{/crossLink}} - * @method init - * @param {string} [secureAppPagePath] The - * {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath - * property - */ - init: function(secureAppPagePath) { - _secureAppPagePath = secureAppPagePath; - if (!_secureAppPagePath) { - _createAppToContainerSocket(); - } - }, + /** + Generate an AppConfig from the element's attributes. + @method _getAppConfigFromElement + @private + @param {Element} node The DOM node from which to generate the F2.AppConfig + object + @return {F2.AppConfig} The new F2.AppConfig object + */ + function _getAppConfigFromElement(node) { + var appConfig; + + if (node) { + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; - /** - * Determines whether the Instance ID is considered to be 'remote'. This is - * determined by checking if 1) the app has an open socket and 2) whether - * F2.Rpc is running inside of an iframe - * @method isRemote - * @param {string} instanceId The Instance ID - * @return {bool} True if there is an open socket - */ - isRemote: function(instanceId) { - return ( - // we have an app - _apps[instanceId] !== undefined && - // the app is secure - _apps[instanceId].config.isSecure && - // we can't access the iframe - jQuery(_apps[instanceId].config.root).find('iframe').length === 0 - ); - }, + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); - /** - * Creates a container-to-app or app-to-container socket for communication - * @method register - * @param {F2.AppConfig} [appConfig] The F2.AppConfig object - * @param {F2.AppManifest} [appManifest] The F2.AppManifest object - */ - register: function(appConfig, appManifest) { - if (!!appConfig && !!appManifest) { - _apps[appConfig.instanceId] = { - config:appConfig, - socket:_createContainerToAppSocket(appConfig, appManifest) - }; - } else { - F2.log('Unable to register socket connection. Please check container configuration.'); - } - } - }; -})()); -F2.extend('UI', (function(){ + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); + } + } + } + } - var _containerConfig; + return appConfig; + } - /** - * UI helper methods - * @class F2.UI - * @constructor - * @param {F2.AppConfig} appConfig The F2.AppConfig object - */ - var UI_Class = function(appConfig) { - - var _appConfig = appConfig; - var $root = jQuery(appConfig.root); - - var _updateHeight = function(height) { - height = height || jQuery(_appConfig.root).outerHeight(); - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'updateHeight', - [ - height - ] - ); - } else { - _appConfig.height = height; - $root.find('iframe').height(_appConfig.height); - } - }; + /** + Returns true if the DOM node has children that are not text nodes + @method _hasNonTextChildNodes + @private + @param {Element} node The DOM node + @return {bool} True if there are non-text children + */ + function _hasNonTextChildNodes(node) { + var hasNodes = false; + + if (node.hasChildNodes()) { + for (var i = 0, len = node.childNodes.length; i < len; i++) { + if (node.childNodes[i].nodeType === 1) { + hasNodes = true; + break; + } + } + } - //http://getbootstrap.com/javascript/#modals - var _modalHtml = function(type,message,showCancel){ - return [ - '' - ].join(''); - }; + return hasNodes; + } - return { - /** - * Removes a overlay from an Element on the page - * @method hideMask - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - */ - hideMask: function(selector) { - F2.UI.hideMask(_appConfig.instanceId, selector); - }, - /** - * Helper methods for creating and using Modals - * @class F2.UI.Modals - * @for F2.UI - */ - Modals: (function(){ - - var _renderAlert = function(message) { - return _modalHtml('Alert',message); - }; + /** + Adds properties to the ContainerConfig object to take advantage of defaults. + @method _hydrateContainerConfig + @private + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ + function _hydrateContainerConfig(containerConfig) { + if (!containerConfig.scriptErrorTimeout) { + containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; + } - var _renderConfirm = function(message) { - return _modalHtml('Confirm',message,true); - }; + if (containerConfig.debugMode !== true) { + containerConfig.debugMode = F2.ContainerConfig.debugMode; + } - return { - /** - * Display an alert message on the page - * @method alert - * @param {string} message The message to be displayed - * @param {function} [callback] The callback to be fired when the user - * closes the dialog - * @for F2.UI.Modals - */ - alert: function(message, callback) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.Modals.alert()'); - return; - } + if (containerConfig.locale && typeof containerConfig.locale === 'string') { + F2.ContainerConfig.locale = containerConfig.locale; + } + } - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Modals.alert', - [].slice.call(arguments) - ); - } else { - // display the alert - jQuery(_renderAlert(message)) - .on('show.bs.modal', function() { - var modal = this; - jQuery(modal).find('.btn-primary').on('click', function() { - jQuery(modal).modal('hide').remove(); - (callback || jQuery.noop)(); - }); - }) - .modal({backdrop:true}); - } - }, - /** - * Display a confirm message on the page - * @method confirm - * @param {string} message The message to be displayed - * @param {function} okCallback The function that will be called when the OK - * button is pressed - * @param {function} cancelCallback The function that will be called when - * the Cancel button is pressed - * @for F2.UI.Modals - */ - confirm: function(message, okCallback, cancelCallback) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); - return; - } + /** + Attach app events. + @method _initAppEvents + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + */ + function _initAppEvents(appConfig) { + var elementFilter = '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']'; - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Modals.confirm', - [].slice.call(arguments) - ); - } else { - // display the alert - jQuery(_renderConfirm(message)) - .on('show.bs.modal', function() { - var modal = this; - - jQuery(modal).find('.btn-ok').on('click', function() { - jQuery(modal).modal('hide').remove(); - (okCallback || jQuery.noop)(); - }); - - jQuery(modal).find('.btn-cancel').on('click', function() { - jQuery(modal).modal('hide').remove(); - (cancelCallback || jQuery.noop)(); - }); - }) - .modal({backdrop:true}); - } - } - }; - })(), - /** - * Sets the title of the app as shown in the browser. Depending on the - * container HTML, this method may do nothing if the container has not been - * configured properly or else the container provider does not allow Title's - * to be set. - * @method setTitle - * @params {string} title The title of the app - * @for F2.UI - */ - setTitle: function(title) { - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'setTitle', - [ - title - ] - ); - } else { - jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); - } - }, - /** - * Display an ovarlay over an Element on the page - * @method showMask - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ - showMask: function(selector, showLoader) { - F2.UI.showMask(_appConfig.instanceId, selector, showLoader); - }, - /** - * For secure apps, this method updates the size of the iframe that - * contains the app. **Note: It is recommended that app developers call - * this method anytime Elements are added or removed from the DOM** - * @method updateHeight - * @params {int} height The height of the app - */ - updateHeight: _updateHeight, - /** - * Helper methods for creating and using Views - * @class F2.UI.Views - * @for F2.UI - */ - Views: (function(){ - - var _events = new EventEmitter2(); - var _rValidEvents = /change/i; - - // unlimited listeners, set to > 0 for debugging - _events.setMaxListeners(0); - - var _isValid = function(eventName) { - if (_rValidEvents.test(eventName)) { - return true; - } else { - F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); - return false; - } - }; + jQuery(appConfig.root).on('click', elementFilter, function(e) { + e.preventDefault(); - return { - /** - * Change the current view for the app or add an event listener - * @method change - * @param {string|function} [input] If a string is passed in, the view - * will be changed for the app. If a function is passed in, a change - * event listener will be added. - * @for F2.UI.Views - */ - change: function(input) { - - if (typeof input === 'function') { - this.on('change', input); - } else if (typeof input === 'string') { - - if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Views.change', - [].slice.call(arguments) - ); - } else if (F2.inArray(input, _appConfig.views)) { - jQuery('.' + F2.Constants.Css.APP_VIEW, $root) - .addClass('hide') - .filter('[data-f2-view="' + input + '"]', $root) - .removeClass('hide'); - - _updateHeight(); - _events.emit('change', input); - } - } - }, - /** - * Removes a view event listener - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - * @for F2.UI.Views - */ - off: function(event, listener) { - if (_isValid(event)) { - _events.off(event, listener); - } - }, - /** - * Adds a view event listener - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - * @for F2.UI.Views - */ - on: function(event, listener) { - if (_isValid(event)) { - _events.on(event, listener); - } - } - }; - })() - }; - }; + var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); - /** - * Removes a overlay from an Element on the page - * @method hideMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - * @for F2.UI - */ - UI_Class.hideMask = function(instanceId, selector) { + // Handle the special REMOVE view + if (view === F2.Constants.Views.REMOVE) { + F2.removeApp(appConfig.instanceId); + } else { + appConfig.ui.Views.change(view); + } + }); + } - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.hideMask()'); - return; - } + /** + Attach container Events + @method _initContainerEvents + @private + */ + function _initContainerEvents() { + function resizeHandler() { + F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); + } - if (F2.Rpc.isRemote(instanceId) && !jQuery(selector).is('.' + F2.Constants.Css.APP)) { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC, - 'F2.UI.hideMask', - [ - instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors - jQuery(selector).selector - ] - ); - } else { - - var container = jQuery(selector); - container.find('> .' + F2.Constants.Css.MASK).remove(); - container.removeClass(F2.Constants.Css.MASK_CONTAINER); - - // if the element contains this data property, we need to reset static - // position - if (container.data(F2.Constants.Css.MASK_CONTAINER)) { - container.css({'position':'static'}); - } - } - }; + var resizeTimeout; - /** - * - * @method init - * @static - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - UI_Class.init = function(containerConfig) { - _containerConfig = containerConfig; + jQuery(window).on('resize', function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(resizeHandler, 100); + }); - // set defaults - _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); - }; + // Listen for container-broadcasted locale changes + F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { + if (data.locale && typeof data.locale === 'string') { + F2.ContainerConfig.locale = data.locale; + } + }); + } - /** - * Display an ovarlay over an Element on the page - * @method showMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ - UI_Class.showMask = function(instanceId, selector, showLoading) { + /** + Checks if an element is a placeholder element. + @method _isPlaceholderElement + @private + @param {Element} node The DOM element to check + @return {bool} True if the element is a placeholder + */ + function _isPlaceholderElement(node) { + return ( + F2.isNativeDOMNode(node) && + !_hasNonTextChildNodes(node) && + !!node.getAttribute('data-f2-appid') && + !!node.getAttribute('data-f2-manifesturl') + ); + } - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.showMask()'); - return; - } + /** + Has the container been init? + @method _isInit + @private + @return {bool} True if the container has been init + */ + function _isInit() { + return !!_config; + } - if (F2.Rpc.isRemote(instanceId) && jQuery(selector).is('.' + F2.Constants.Css.APP)) { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC, - 'F2.UI.showMask', - [ - instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors - jQuery(selector).selector, - showLoading - ] - ); - } else { + /** + Instantiates app from its appConfig and stores that in a private collection. + @method _createAppInstance + @private + @param {object} appConfig An {{#crossLink "F2.AppConfig"}}{{/crossLink}} + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object. + */ + function _createAppInstance(appConfig, appContent) { + appConfig.ui = new F2.UI(appConfig); + + // instantiate F2.App + if (F2.Apps[appConfig.appId] !== undefined) { + if (typeof F2.Apps[appConfig.appId] === 'function') { + // IE + setTimeout(function() { + _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); + + if (_apps[appConfig.instanceId].app.init !== undefined) { + _apps[appConfig.instanceId].app.init(); + } + }, 0); + } else { + F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); + } + } + } - if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { - F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); - } + /** + Loads the app's html/css/javascript. + @method loadApp + @private + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects. + @param {F2.AppManifest} [appManifest] The AppManifest object + */ + function _loadApps(appConfigs, appManifest) { + appConfigs = [].concat(appConfigs); + + // Check for secure app + if (appConfigs.length === 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { + _loadSecureApp(appConfigs[0], appManifest); + return; + } - var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); - var mask = jQuery('
') - .height('100%' /*container.outerHeight()*/) - .width('100%' /*container.outerWidth()*/) - .addClass(F2.Constants.Css.MASK); - - // set inline styles if useClasses is false - if (!_containerConfig.UI.Mask.useClasses) { - mask.css({ - 'background-color':_containerConfig.UI.Mask.backgroundColor, - 'background-image': !!_containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', - 'background-position':'50% 50%', - 'background-repeat':'no-repeat', - 'display':'block', - 'left':0, - 'min-height':30, - 'padding':0, - 'position':'absolute', - 'top':0, - 'z-index':_containerConfig.UI.Mask.zIndex, - - 'filter':'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', - 'opacity':_containerConfig.UI.Mask.opacity - }); - } + // Check that the number of apps in manifest matches the number requested + if (appConfigs.length !== appManifest.apps.length) { + F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); + return; + } - // only set the position if the container is currently static - if (container.css('position') === 'static') { - container.css({'position':'relative'}); - // setting this data property tells hideMask to set the position - // back to static - container.data(F2.Constants.Css.MASK_CONTAINER, true); - } + function _loadStyles(styles, cb) { + if (_config.loadStyles) { + return _config.loadStyles(styles, cb); + } - // add the mask to the container - container.append(mask); - } - }; + // Load styles, see #101 + var stylesFragment; + var useCreateStyleSheet = !!document.createStyleSheet; - return UI_Class; -})()); -/** - * Root namespace of the F2 SDK - * @module f2 - * @class F2 - */ -F2.extend('', (function() { + jQuery.each(styles, function(i, e) { + var resourceUrl = e; + var resourceKey = e.toLowerCase(); - var _apps = {}; - var _config = false; - var _bUsesAppHandlers = false; - var _sAppHandlerToken = F2.AppHandlers.__f2GetToken(); - var _loadedScripts = {}; - var _loadedStyles = {}; - var _loadingScripts = {}; - - /** - * Appends the app's html to the DOM - * @method _afterAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html - * @return {Element} The DOM Element that contains the app - */ - var _afterAppRender = function(appConfig, html) { + if (_loadedStyles[resourceKey]) { + return; + } - var handler = _config.afterAppRender || function(appConfig, html) { - return jQuery(html).appendTo('body'); - }; - var appContainer = handler(appConfig, html); + if (useCreateStyleSheet) { + document.createStyleSheet(resourceUrl); + } else { + stylesFragment = stylesFragment || []; + stylesFragment.push(''); + } - if ( !! _config.afterAppRender && !appContainer) { - F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); - return; - } - else { - // apply APP class - jQuery(appContainer).addClass(F2.Constants.Css.APP); - return appContainer.get(0); - } - }; + _loadedStyles[resourceKey] = true; + }); - /** - * Renders the html for an app. - * @method _appRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html - */ - var _appRender = function(appConfig, html) { + if (stylesFragment) { + jQuery('head').append(stylesFragment.join('')); + } - // apply APP_CONTAINER class and AppID - html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + cb(); + } - // optionally apply wrapper html - if (_config.appRender) { - html = _config.appRender(appConfig, html); - } + function _loadScripts(scripts, cb) { + if (_config.loadScripts) { + return _config.loadScripts(scripts, cb); + } - return _outerHtml(html); - }; + if (!scripts.length) { + return cb(); + } - /** - * Rendering hook to allow containers to render some html prior to an app - * loading - * @method _beforeAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {Element} The DOM Element surrounding the app - */ - var _beforeAppRender = function(appConfig) { - var handler = _config.beforeAppRender || jQuery.noop; - return handler(appConfig); - }; + var doc = window.document; + var scriptCount = scripts.length; + var scriptsLoaded = 0; + // http://caniuse.com/#feat=script-async + var head = doc && (doc.head || doc.getElementsByTagName('head')[0]); + // For IE, put scripts before any elements, but after any + var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; + // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 + var readyStates = (window.addEventListener) ? {} : { + 'loaded': true, + 'complete': true + }; + + // Log and emit event for the failed (400,500) scripts + function _error(e) { + setTimeout(function() { + var evtData = { + src: e.target.src, + appId: appConfigs[0].appId + }; + + // Send error to console + F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); + + // Emit events + F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); + + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], evtData.src); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + evtData.src + ); + } + }, _config.scriptErrorTimeout); // Defaults to 7000 + } - /** - * Handler to inform the container that a script failed to load - * @method _onScriptLoadFailure - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param scriptInfo The path of the script that failed to load or the exception info - * for the inline script that failed to execute - */ - var _appScriptLoadFailed = function(appConfig, scriptInfo) { - var handler = _config.appScriptLoadFailed || jQuery.noop; - return handler(appConfig, scriptInfo); - }; + function _checkComplete() { + // Are we done loading all scripts for this app? + if (++scriptsLoaded === scriptCount) { + // success + cb(); + } + } - /** - * Adds properties to the AppConfig object - * @method _createAppConfig - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with - * necessary properties - */ - var _createAppConfig = function(appConfig) { + function _emptyWaitlist(resourceKey, errorEvt) { + var waiting; + var waitlist = _loadingScripts[resourceKey]; - // make a copy of the app config to ensure that the original is not modified - appConfig = jQuery.extend(true, {}, appConfig); + if (!waitlist) { + return; + } - // create the instanceId for the app - appConfig.instanceId = appConfig.instanceId || F2.guid(); + for (var i = 0; i < waitlist.length; i++) { + waiting = waitlist [i]; - // default the views if not provided - appConfig.views = appConfig.views || []; - if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { - appConfig.views.push(F2.Constants.Views.HOME); - } + if (errorEvt) { + waiting.error(errorEvt); + } else { + waiting.success(); + } + } - //pass container-defined locale to each app - if (F2.ContainerConfig.locale){ - appConfig.containerLocale = F2.ContainerConfig.locale; - } + _loadingScripts[resourceKey] = null; + } - return appConfig; - }; + // Load scripts and eval inlines once complete + jQuery.each(scripts, function(i, url) { + var script = doc.createElement('script'); + var resourceUrl = url; + var resourceKey = resourceUrl.toLowerCase(); - /** - * Generate an AppConfig from the element's attributes - * @method _getAppConfigFromElement - * @private - * @param {Element} node The DOM node from which to generate the F2.AppConfig object - * @return {F2.AppConfig} The new F2.AppConfig object - */ - var _getAppConfigFromElement = function(node) { - var appConfig; - - if (node) { - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; + // Already finished loading, trigger callback + if (_loadedScripts[resourceKey]) { + return _checkComplete(); + } - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); + // This script is actively loading, add this app to the wait list + if (_loadingScripts[resourceKey]) { + _loadingScripts[resourceKey].push({ + success: _checkComplete, + error: _error + }); - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } - catch (e) { - console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } - } - } - } + return; + } - return appConfig; - }; + // Create the waitlist + _loadingScripts[resourceKey] = []; - /** - * Returns true if the DOM node has children that are not text nodes - * @method _hasNonTextChildNodes - * @private - * @param {Element} node The DOM node - * @return {bool} True if there are non-text children - */ - var _hasNonTextChildNodes = function(node) { - var hasNodes = false; + // If in debugMode, add cache buster to each script URL + if (_config.debugMode) { + resourceUrl += '?cachebuster=' + new Date().getTime(); + } - if (node.hasChildNodes()) { - for (var i = 0, len = node.childNodes.length; i < len; i++) { - if (node.childNodes[i].nodeType === 1) { - hasNodes = true; - break; - } - } - } + // Scripts are loaded asynchronously and executed in order + // in supported browsers: http://caniuse.com/#feat=script-async + script.async = false; + script.type = 'text/javascript'; + script.charset = 'utf-8'; - return hasNodes; - }; + script.onerror = function(e) { + _error(e); + _emptyWaitlist(resourceKey, e); + }; - /** - * Adds properties to the ContainerConfig object to take advantage of defaults - * @method _hydrateContainerConfig - * @private - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - var _hydrateContainerConfig = function(containerConfig) { + // Use a closure for the load event so that we can dereference the original script + script.onload = script.onreadystatechange = function(e) { + e = e || window.event; // For older IE + + // Detect when it's done loading + // ev.type == 'load' is for all browsers except IE6-9 + // IE6-9 need to use onreadystatechange and look for + // el.readyState in {loaded, complete} (yes, we need both) + if (e.type === 'load' || readyStates[script.readyState]) { + // Done, cleanup + script.onload = script.onreadystatechange = script.onerror = ''; + // Loaded + _loadedScripts[resourceKey] = true; + // Increment and check if scripts are done + _checkComplete(); + // Empty wait list + _emptyWaitlist(resourceKey); + // Dereference script + script = null; + } + }; - if (!containerConfig.scriptErrorTimeout) { - containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; - } + // Set the src, start loading + script.src = resourceUrl; - if (containerConfig.debugMode !== true) { - containerConfig.debugMode = F2.ContainerConfig.debugMode; - } + // really is the best + head.insertBefore(script, insertBeforeEl); + }); + } - if (containerConfig.locale && typeof containerConfig.locale == 'string'){ - F2.ContainerConfig.locale = containerConfig.locale; - } - }; + function _loadInlineScripts(inlines, cb) { + // Attempt to use the user provided method + if (_config.loadInlineScripts) { + _config.loadInlineScripts(inlines, cb); + } else { + for (var i = 0, len = inlines.length; i < len; i++) { + try { + eval(inlines[i]); + } catch ( exception ) { + F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); + + // Emit events + F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { + appId: appConfigs[0].appId, + src: inlines[i], + err: exception + }); - /** - * Attach app events - * @method _initAppEvents - * @private - */ - var _initAppEvents = function(appConfig) { + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], exception); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + exception + ); + } + } + } + cb(); + } + } - jQuery(appConfig.root).on('click', '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']', function(event) { + // Determine whether an element has been added to the page + function elementInDocument(element) { + if (element) { + while (element.parentNode) { + element = element.parentNode; - event.preventDefault(); + if (element === document) { + return true; + } + } + } - var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); + return false; + } - // handle the special REMOVE view - if (view == F2.Constants.Views.REMOVE) { - F2.removeApp(appConfig.instanceId); - } - else { - appConfig.ui.Views.change(view); - } - }); - }; + function _loadHtml(apps) { + jQuery.each(apps, function(i, a) { + if (_isPlaceholderElement(appConfigs[i].root)) { + jQuery(appConfigs[i].root) + .addClass(F2.Constants.Css.APP) + .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); + } else if (!_usesAppHandlers) { + // Load html and save the root node + appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER, + appConfigs[i], // the app config + _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) + ); + + var appId = appConfigs[i].appId; + var root = appConfigs[i].root; + + if (!root) { + throw new Error('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); + } - /** - * Attach container Events - * @method _initContainerEvents - * @private - */ - var _initContainerEvents = function() { + if (!elementInDocument(root)) { + throw new Error('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } - var resizeTimeout; - var resizeHandler = function() { - F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); - }; + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + appConfigs[i] // the app config + ); - jQuery(window).on('resize', function() { - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(resizeHandler, 100); - }); + if (!F2.isNativeDOMNode(root)) { + throw new Error('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); + } + } - //listen for container-broadcasted locale changes - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(data){ - if (data.locale && typeof data.locale == 'string'){ - F2.ContainerConfig.locale = data.locale; - } - }); - }; + // init events + _initAppEvents(appConfigs[i]); + }); + } - /** - * Checks if an element is a placeholder element - * @method _isPlaceholderElement - * @private - * @param {Element} node The DOM element to check - * @return {bool} True if the element is a placeholder - */ - var _isPlaceholderElement = function(node) { - return ( - F2.isNativeDOMNode(node) && - !_hasNonTextChildNodes(node) && - !!node.getAttribute('data-f2-appid') && - !!node.getAttribute('data-f2-manifesturl') - ); - }; + // Pull out the manifest data + var manifestScripts = appManifest.scripts || []; + var manifestStyles = appManifest.styles || []; + var manifestInlines = appManifest.inlineScripts || []; + var manifestApps = appManifest.apps || []; + + // Finally, load the styles, html, and scripts + _loadStyles(manifestStyles, function() { + _loadHtml(manifestApps); + _loadScripts(manifestScripts, function() { + // Emit event we're done with scripts + if (appConfigs[0]) { + F2.Events.emit('APP_SCRIPTS_LOADED', { + appId: appConfigs[0].appId, + scripts: manifestScripts + }); + } - /** - * Has the container been init? - * @method _isInit - * @private - * @return {bool} True if the container has been init - */ - var _isInit = function() { - return !!_config; - }; + _loadInlineScripts(manifestInlines, function() { + // Create the apps + jQuery.each(appConfigs, function(i, a) { + _createAppInstance(a, manifestApps[i]); + }); + }); + }); + }); + } - /** - * Instantiates each app from it's appConfig and stores that in a local private collection - * @method _createAppInstance - * @private - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - */ - var _createAppInstance = function(appConfig, appContent) { - // instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - - // instantiate F2.App - if (F2.Apps[appConfig.appId] !== undefined) { - if (typeof F2.Apps[appConfig.appId] === 'function') { - - // IE - setTimeout(function() { - _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); - if (_apps[appConfig.instanceId].app['init'] !== undefined) { - _apps[appConfig.instanceId].app.init(); - } - }, 0); + /** + Loads the app's html/css/javascript into an iframe. + @method loadSecureApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into + the page. + */ + function _loadSecureApp(appConfig, appManifest) { + // Make sure the container is configured for secure apps + if (_config.secureAppPagePath) { + if (_isPlaceholderElement(appConfig.root)) { + jQuery(appConfig.root) + .addClass(F2.Constants.Css.APP) + .append(jQuery('
') + .addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + } else if (!_usesAppHandlers) { + // Create the html container for the iframe + appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); + } else { + var $root = jQuery(appConfig.root); - } - else { - F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); - } - } - }; + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER, + appConfig, + _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) + ); - /** - * Loads the app's html/css/javascript - * @method loadApp - * @private - * @param {Array} appConfigs An array of - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - * @param {F2.AppManifest} [appManifest] The AppManifest object - */ - var _loadApps = function(appConfigs, appManifest) { - appConfigs = [].concat(appConfigs); + if ($root.parents('body:first').length === 0) { + throw new Error('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } - // check for secure app - if (appConfigs.length == 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { - _loadSecureApp(appConfigs[0], appManifest); - return; - } + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + appConfig // the app config + ); - // check that the number of apps in manifest matches the number requested - if (appConfigs.length != appManifest.apps.length) { - F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); - return; - } + if (!appConfig.root) { + throw new Error('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } - // Fn for loading manifest Styles - var _loadStyles = function(styles, cb) { - // Attempt to use the user provided method - if (_config.loadStyles) { - return _config.loadStyles(styles, cb); - } + if (!F2.isNativeDOMNode(appConfig.root)) { + throw new Error('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } + } - // load styles, see #101 - var stylesFragment = null, - useCreateStyleSheet = !! document.createStyleSheet; + // Instantiate F2.UI + appConfig.ui = new F2.UI(appConfig); + // Init events + _initAppEvents(appConfig); + // Create RPC socket + F2.Rpc.register(appConfig, appManifest); + } else { + F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); + } + } - jQuery.each(styles, function(i, e) { - var resourceUrl = e, - resourceKey = e.toLowerCase(); + function _outerHtml(html) { + return jQuery('
').append(html).html(); + } - if (_loadedStyles[resourceKey]) { - return; - } + /** + Checks if the app is valid. + @method _validateApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @returns {bool} True if the app is valid + */ + function _validateApp(appConfig) { + // Check for valid app configurations + if (!appConfig.appId) { + F2.log('"appId" missing from app object'); + return false; + } else if (!appConfig.root && !appConfig.manifestUrl) { + F2.log('"manifestUrl" missing from app object'); + return false; + } - if (useCreateStyleSheet) { - document.createStyleSheet(resourceUrl); - } - else { - stylesFragment = stylesFragment || []; - stylesFragment.push(''); - } + return true; + } - _loadedStyles[resourceKey] = true; - }); + /** + Checks if the ContainerConfig is valid. + @method _validateContainerConfig + @private + @returns {bool} True if the config is valid + */ + function _validateContainerConfig() { + if (_config) { + if (_config.xhr) { + if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { + throw new Error('ContainerConfig.xhr should be a function or an object'); + } + if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { + throw new Error('ContainerConfig.xhr.dataType should be a function'); + } + if (_config.xhr.type && typeof _config.xhr.type !== 'function') { + throw new Error('ContainerConfig.xhr.type should be a function'); + } + if (_config.xhr.url && typeof _config.xhr.url !== 'function') { + throw new Error('ContainerConfig.xhr.url should be a function'); + } + } + } - if (stylesFragment) { - jQuery('head').append(stylesFragment.join('')); - } + return true; + } - cb(); - }; + return { + /** + Gets the current list of apps in the container. + @method getContainerState + @returns {Array} An array of objects containing the appId + */ + getContainerState: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerState()'); + return; + } - // For loading AppManifest.scripts - // Parts derived from curljs, headjs, requirejs, dojo - var _loadScripts = function(scripts, cb) { - // Attempt to use the user provided method - if (_config.loadScripts) { - return _config.loadScripts(scripts, cb); - } + return jQuery.map(_apps, function(app) { + return { + appId: app.config.appId + }; + }); + }, + /** + Gets the current locale defined by the container. + @method getContainerLocale + @returns {String} IETF-defined standard language tag + */ + getContainerLocale: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerLocale()'); + return; + } - if (!scripts.length) { - return cb(); - } + return F2.ContainerConfig.locale; + }, + /** + Initializes the container. This method must be called before performing + any other actions in the container. + @method init + @param {F2.ContainerConfig} config The configuration object + */ + init: function(config) { + _config = config || {}; + _validateContainerConfig(); + _hydrateContainerConfig(_config); + + // Dictates whether we use the old logic or the new logic. + // TODO: Remove in v2.0 + _usesAppHandlers = (_config.beforeAppRender || _config.appRender || _config.afterAppRender || _config.appScriptLoadFailed); + + // Only establish RPC connection if the container supports the secure app page + if (!!_config.secureAppPagePath || _config.isSecureAppPage) { + F2.Rpc.init(_config.secureAppPagePath ? _config.secureAppPagePath : false); + } - var doc = window.document; - var scriptCount = scripts.length; - var scriptsLoaded = 0; - //http://caniuse.com/#feat=script-async - // var supportsAsync = 'async' in doc.createElement('script') || 'MozAppearance' in doc.documentElement.style || window.opera; - var head = doc && (doc['head'] || doc.getElementsByTagName('head')[0]); - // to keep IE from crying, we need to put scripts before any - // elements, but after any . this should do it: - var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; - // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 - var readyStates = 'addEventListener' in window ? {} : { 'loaded': true, 'complete': true }; - - // Log and emit event for the failed (400,500) scripts - var _error = function(e) { - setTimeout(function() { - var evtData = { - src: e.target.src, - appId: appConfigs[0].appId - }; + F2.UI.init(_config); - // Send error to console - F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); + if (!_config.isSecureAppPage) { + _initContainerEvents(); + } + }, + /** + Has the container been init? + @method isInit + @return {bool} True if the container has been init + */ + isInit: _isInit, + /** + Automatically load apps that are already defined in the DOM. Elements will + be rendered into the location of the placeholder DOM element. Any + AppHandlers that are defined will be bypassed. + @method loadPlaceholders + @param {Element} parentNode The element to search for placeholder apps + */ + loadPlaceholders: function(parentNode) { + if (parentNode && !F2.isNativeDOMNode(parentNode)) { + throw new Error('"parentNode" must be null or a DOM node'); + } - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); + var elements = []; + var appConfigs = []; + + /** + If the passed in element has a data-f2-appid attribute add it to the + list of elements but to not search within that element for other + placeholders + */ + if (parentNode) { + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); + } + } else if (document.querySelectorAll) { + elements = elements.concat(document.querySelectorAll('[data-f2-appid]')); + } - if (!_bUsesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], evtData.src); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - evtData.src - ); - } - }, _config.scriptErrorTimeout); // Defaults to 7000 - }; + for (var i = 0, len = elements.length; i < len; i++) { + var appConfig = _getAppConfigFromElement(elements[i]); + appConfigs.push(appConfig); + } - var _checkComplete = function() { - // Are we done loading all scripts for this app? - if (++scriptsLoaded === scriptCount) { - // success - cb(); - } - }; + if (appConfigs.length) { + F2.registerApps(appConfigs); + } + }, + /** + Begins the loading process for all apps and/or initialization process for + pre-loaded apps. The app will be passed the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will contain the + app's unique instanceId within the container. If the + {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated + the app is considered to be a pre-loaded app and will be handled + accordingly. Optionally, the + {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those + assets will be used instead of making a request. + @method registerApps + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @param {Array} [appManifests] An array of + {{#crossLink "F2.AppManifest"}}{{/crossLink}} + objects. This array must be the same length as the apps array that is + passed in. This can be useful if apps are loaded on the server-side and + passed down to the client. + @example + // Traditional App requests. + var configs = [{ + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app2', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Pre-loaded and tradition apps mixed. + // You can preload the same app multiple times as long as you have a unique root for each + var configs = [{ + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-1', + manifestUrl: '' + }, { + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-2', + manifestUrl: '' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Apps with predefined manifests. + var configs = [ + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app2', context: {} } + ]; + + // Pre requested manifest responses + var manifests = [{ + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App 2!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/App2Class.js'], + styles: ['http://www.domain.com/css/App2Styles.css'] + }]; + + F2.init(); + F2.registerApps(configs, manifests); + */ + registerApps: function(appConfigs, appManifests) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.registerApps()'); + return; + } else if (!appConfigs) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } - var _emptyWaitlist = function(resourceKey, errorEvt) { - var waiting, - waitlist = _loadingScripts[resourceKey]; + var appStack = []; + var batches = {}; + var callbackStack = {}; + var haveManifests = false; + appConfigs = [].concat(appConfigs); + appManifests = [].concat(appManifests || []); + haveManifests = !!appManifests.length; + + // AppConfigs must have a length + if (!appConfigs.length) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } else if (appConfigs.length && haveManifests && appConfigs.length !== appManifests.length) { + // Ensure that the array of apps and manifests are equal + F2.log('The length of "apps" does not equal the length of "appManifests"'); + return; + } - if (!waitlist) { - return; - } + // Validate apps, assign instanceId, then determine which apps can be batched together + jQuery.each(appConfigs, function(i, a) { + // Add properties and methods + a = _createAppConfig(a); - for (var i=0; i really is the best - head.insertBefore(script, insertBeforeEl); - }); - }; + function errorFunc() { + jQuery.each(req.apps, function(idx, item) { + item.name = item.name || item.appId; + F2.log('Removed failed ' + item.name + ' app', item); + F2.removeApp(item.instanceId); + }); + } - var _loadInlineScripts = function(inlines, cb) { - // Attempt to use the user provided method - if (_config.loadInlineScripts) { - _config.loadInlineScripts(inlines, cb); - } - else { - for (var i = 0, len = inlines.length; i < len; i++) { - try { - eval(inlines[i]); - } - catch (exception) { - F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); - - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { appId:appConfigs[0].appId, src: inlines[i], err: exception }); - - if (!_bUsesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], exception); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - exception - ); - } - } - } - cb(); - } - }; + function successFunc(appManifest) { + _loadApps(req.apps, appManifest); + } - // Determine whether an element has been added to the page - var elementInDocument = function(element) { - if (element) { - while (element.parentNode) { - element = element.parentNode; + // Optionally fire xhr overrides + if (_config.xhr) { + if (_config.xhr.dataType) { + dataType = _config.xhr.dataType(req.url, req.apps); - if (element === document) { - return true; - } - } - } + if (typeof dataType !== 'string') { + throw new Error('ContainerConfig.xhr.dataType should return a string'); + } + } - return false; - }; + if (_config.xhr.type) { + type = _config.xhr.type(req.url, req.apps); - // Fn for loading manifest app html - var _loadHtml = function(apps) { - jQuery.each(apps, function(i, a) { - if (_isPlaceholderElement(appConfigs[i].root)) { - jQuery(appConfigs[i].root) - .addClass(F2.Constants.Css.APP) - .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); - } - else if (!_bUsesAppHandlers) { - // load html and save the root node - appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfigs[i], // the app config - _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) - ); + if (typeof type !== 'string') { + throw new Error('ContainerConfig.xhr.type should return a string'); + } + } - var appId = appConfigs[i].appId, - root = appConfigs[i].root; + if (_config.xhr.url) { + req.url = _config.xhr.url(req.url, req.apps); - if (!root) { - throw ('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); - } + if (typeof req.url !== 'string') { + throw new Error('ContainerConfig.xhr.url should return a string'); + } + } + } - if (!elementInDocument(root)) { - throw ('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } + // Setup the default request function if an override is not present + var requestFunc = _config.xhr; + + if (typeof requestFunc !== 'function') { + requestFunc = function(url, apps, successCallback, errorCallback, completeCallback) { + jQuery.ajax({ + url: url, + type: type, + data: { + params: F2.stringify(req.apps, F2.appConfigReplacer) + }, + jsonp: false, // do not put 'callback=' in the query string + jsonpCallback: jsonpCallback, // Unique function name + dataType: dataType, + success: successCallback, + error: function(jqxhr, settings, exception) { + F2.log('Failed to load app(s)', exception.toString(), req.apps); + errorCallback(); + }, + complete: completeCallback + }); + }; + } - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfigs[i] // the app config - ); + requestFunc(req.url, req.apps, successFunc, errorFunc, completeFunc); + } - if (!F2.isNativeDOMNode(root)) { - throw ('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); - } - } + manifestRequest(i, requests.pop()); + }); + } + }, + /** + Removes all apps from the container + @method removeAllApps + */ + removeAllApps: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeAllApps()'); + return; + } - // init events - _initAppEvents(appConfigs[i]); - }); - }; + jQuery.each(_apps, function(i, a) { + F2.removeApp(a.config.instanceId); + }); + }, + /** + Removes an app from the container. + @method removeApp + @param {string} instanceId The app's instanceId + */ + removeApp: function(instanceId) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeApp()'); + return; + } - // Pull out the manifest data - var scripts = appManifest.scripts || []; - var styles = appManifest.styles || []; - var inlines = appManifest.inlineScripts || []; - var apps = appManifest.apps || []; - - // Finally, load the styles, html, and scripts - _loadStyles(styles, function() { - // Put the html on the page - _loadHtml(apps); - // Add the script content to the page - _loadScripts(scripts, function() { - // emit event we're done with scripts - if (appConfigs[0]){ F2.Events.emit('APP_SCRIPTS_LOADED', { appId:appConfigs[0].appId, scripts:scripts }); } - // Load any inline scripts - _loadInlineScripts(inlines, function() { - // Create the apps - jQuery.each(appConfigs, function(i, a) { - _createAppInstance(a, appManifest.apps[i]); - }); - }); - }); - }); - }; + if (_apps[instanceId]) { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + _apps[instanceId] + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY, + _apps[instanceId] + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + _apps[instanceId] + ); + + delete _apps[instanceId]; + } + } + }; +})()); - /** - * Loads the app's html/css/javascript into an iframe - * @method loadSecureApp - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into the - * page. - */ - var _loadSecureApp = function(appConfig, appManifest) { - - // make sure the container is configured for secure apps - if (_config.secureAppPagePath) { - if (_isPlaceholderElement(appConfig.root)) { - jQuery(appConfig.root) - .addClass(F2.Constants.Css.APP) - .append(jQuery('
').addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - } - else if (!_bUsesAppHandlers) { - // create the html container for the iframe - appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); - } - else { - var $root = jQuery(appConfig.root); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfig, // the app config - _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) - ); +/** + Handles [Context](../../app-development.html#context) passing from containers + to apps and apps to apps. + @class F2.Events +*/ +F2.extend('Events', (function() { + var _events = new EventEmitter2({ + wildcard: true + }); - if ($root.parents('body:first').length === 0) { - throw ('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } + // Unlimited listeners, set to > 0 for debugging + _events.setMaxListeners(0); - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfig // the app config - ); + return { + /** + Same as F2.Events.emit except that it will not send the event to all + sockets. + @method _socketEmit + @private + @param {string} event The event name + @param {object} [arg]* The arguments to be passed + @returns {object} EventEmitter2 instance + */ + _socketEmit: function() { + return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); + }, + /** + Execute each of the listeners that may be listening for the specified + event name in order with the list of arguments. + @method emit + @param {string} event The event name + @param {object} [arg]* The arguments to be passed + @returns {object} EventEmitter2 instance + */ + emit: function() { + F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); + return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); + }, + /** + Adds a listener that will execute n times for the event before being + removed. The listener is invoked only the first time the event is fired, + after which it is removed. + @method many + @param {string} event The event name + @param {int} timesToListen The number of times to execute the event + before being removed + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ + many: function(event, timesToListen, listener) { + return _events.many(event, timesToListen, listener); + }, + /** + Remove a listener for the specified event. + @method off + @param {string} event The event name + @param {function} listener The function that will be removed + @returns {object} EventEmitter2 instance + */ + off: function(event, listener) { + return _events.off(event, listener); + }, + /** + Adds a listener for the specified event + @method on + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ + on: function(event, listener) { + return _events.on(event, listener); + }, + /** + Adds a one time listener for the event. The listener is invoked only + the first time the event is fired, after which it is removed. + @method once + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ + once: function(event, listener) { + return _events.once(event, listener); + } + }; +})()); - if (!appConfig.root) { - throw ('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } +/** + Handles socket communication between the container and secure apps + @class F2.Rpc +*/ +F2.extend('Rpc', (function() { + var _callbacks = {}; + var _secureAppPagePath = ''; + var _apps = {}; + var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); + var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); + var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); + var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); + var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); + + /** + Creates a socket connection from the app to the container using + easyXDM. + @method _createAppToContainerSocket + @private + */ + function _createAppToContainerSocket() { + var appConfig; + var isLoaded = false; + /** + It's possible for messages to be received before the socket load event has + happened. We'll save off these messages and replay them once the socket is + ready. + */ + var messagePlayback = []; + + var socket = new easyXDM.Socket({ + onMessage: function(message, origin) { + // Handle Socket Load + if (!isLoaded && _rSocketLoad.test(message)) { + message = message.replace(_rSocketLoad, ''); + var appParts = F2.parse(message); + + // Make sure we have the AppConfig and AppManifest + if (appParts.length === 2) { + appConfig = appParts[0]; + + // Save socket + _apps[appConfig.instanceId] = { + config: appConfig, + socket: socket + }; - if (!F2.isNativeDOMNode(appConfig.root)) { - throw ('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } - } + F2.registerApps([appConfig], [appParts[1]]); - // instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - // init events - _initAppEvents(appConfig); - // create RPC socket - F2.Rpc.register(appConfig, appManifest); - } - else { - F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); - } - }; + // Socket message playback + jQuery.each(messagePlayback, function() { + _onMessage(appConfig, message, origin); + }); - var _outerHtml = function(html) { - return jQuery('
').append(html).html(); - }; + isLoaded = true; + } + } else if (isLoaded) { + // Pass everyting else to _onMessage + _onMessage(appConfig, message, origin); + } else { + messagePlayback.push(message); + } + } + }); + } - /** - * Checks if the app is valid - * @method _validateApp - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @returns {bool} True if the app is valid - */ - var _validateApp = function(appConfig) { + /** + Creates a socket connection from the container to the app using + easyXDM. + @method _createContainerToAppSocket + @private + @param {appConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The F2.AppManifest object + @return {object} The new socket + */ + function _createContainerToAppSocket(appConfig, appManifest) { + var container = jQuery(appConfig.root); + + if (!container.length) { + F2.log('Unable to locate app in order to establish secure connection.'); + return; + } - // check for valid app configurations - if (!appConfig.appId) { - F2.log('"appId" missing from app object'); - return false; - } - else if (!appConfig.root && !appConfig.manifestUrl) { - F2.log('"manifestUrl" missing from app object'); - return false; - } + var iframeProps = { + scrolling: 'no', + style: { + width: '100%' + } + }; - return true; - }; + if (appConfig.height) { + iframeProps.style.height = appConfig.height + 'px'; + } - /** - * Checks if the ContainerConfig is valid - * @method _validateContainerConfig - * @private - * @returns {bool} True if the config is valid - */ - var _validateContainerConfig = function() { + var socket = new easyXDM.Socket({ + remote: _secureAppPagePath, + container: container.get(0), + props: iframeProps, + onMessage: function(message, origin) { + _onMessage(appConfig, message, origin); + }, + onReady: function() { + socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); + } + }); - if (_config) { - if (_config.xhr) { - if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { - throw ('ContainerConfig.xhr should be a function or an object'); - } - if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { - throw ('ContainerConfig.xhr.dataType should be a function'); - } - if (_config.xhr.type && typeof _config.xhr.type !== 'function') { - throw ('ContainerConfig.xhr.type should be a function'); - } - if (_config.xhr.url && typeof _config.xhr.url !== 'function') { - throw ('ContainerConfig.xhr.url should be a function'); - } - } - } + return socket; + } - return true; - }; + /** + @method _createRpcCallback + @private + @param {string} instanceId The app's Instance ID + @param {function} callbackId The callback ID + @return {function} A function to make the RPC call + */ + function _createRpcCallback(instanceId, callbackId) { + return function() { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC_CALLBACK, + callbackId, + [].slice.call(arguments).slice(2) + ); + }; + } - return { - /** - * Gets the current list of apps in the container - * @method getContainerState - * @returns {Array} An array of objects containing the appId - */ - getContainerState: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerState()'); - return; - } + /** + Handles messages that come across the sockets + @method _onMessage + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} message The socket message + @param {string} origin The originator + */ + function _onMessage(appConfig, message, origin) { + var obj; + var func; + + function parseFunction(parent, functionName) { + var path = String(functionName).split('.'); + for (var i = 0; i < path.length; i++) { + if (parent[path[i]] === undefined) { + parent = undefined; + break; + } + parent = parent[path[i]]; + } + return parent; + } - return jQuery.map(_apps, function(app) { - return { - appId: app.config.appId - }; - }); - }, - /** - * Gets the current locale defined by the container - * @method getContainerLocale - * @returns {String} IETF-defined standard language tag - */ - getContainerLocale: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerLocale()'); - return; - } + function parseMessage(regEx, rawMessage, instanceId) { + var o = F2.parse(rawMessage.replace(regEx, '')); + + // if obj.callbacks + // for each callback + // for each params + // if callback matches param + // replace param with _createRpcCallback(app.instanceId, callback) + if (o.params && o.params.length && o.callbacks && o.callbacks.length) { + jQuery.each(o.callbacks, function(i, c) { + jQuery.each(o.params, function(j, p) { + if (c === p) { + o.params[j] = _createRpcCallback(instanceId, c); + } + }); + }); + } - return F2.ContainerConfig.locale; - }, - /** - * Initializes the container. This method must be called before performing - * any other actions in the container. - * @method init - * @param {F2.ContainerConfig} config The configuration object - */ - init: function(config) { - _config = config || {}; - - _validateContainerConfig(); - - _hydrateContainerConfig(_config); - - // dictates whether we use the old logic or the new logic. - // TODO: Remove in v2.0 - _bUsesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); - - // only establish RPC connection if the container supports the secure app page - if ( !! _config.secureAppPagePath || _config.isSecureAppPage) { - F2.Rpc.init( !! _config.secureAppPagePath ? _config.secureAppPagePath : false); - } + return o; + } - F2.UI.init(_config); + // Handle UI Call + if (_rUiCall.test(message)) { + obj = parseMessage(_rUiCall, message, appConfig.instanceId); + func = parseFunction(appConfig.ui, obj.functionName); - if (!_config.isSecureAppPage) { - _initContainerEvents(); - } - }, - /** - * Has the container been init? - * @method isInit - * @return {bool} True if the container has been init - */ - isInit: _isInit, - /** - * Automatically load apps that are already defined in the DOM. Elements will - * be rendered into the location of the placeholder DOM element. Any AppHandlers - * that are defined will be bypassed. - * @method loadPlaceholders - * @param {Element} parentNode The element to search for placeholder apps - */ - loadPlaceholders: function(parentNode) { - - var elements = [], - appConfigs = [], - add = function(e) { - if (!e) { return; } - elements.push(e); - }, - addAll = function(els) { - if (!els) { return; } - for (var i = 0, len = els.length; i < len; i++) { - add(els[i]); - } - }; + if (func !== undefined) { + func.apply(appConfig.ui, obj.params); + } else { + F2.log('Unable to locate UI RPC function: ' + obj.functionName); + } + } else if (_rRpc.test(message)) { + obj = parseMessage(_rRpc, message, appConfig.instanceId); + func = parseFunction(window, obj.functionName); - if (!!parentNode && !F2.isNativeDOMNode(parentNode)) { - throw ('"parentNode" must be null or a DOM node'); - } + if (func !== undefined) { + func.apply(func, obj.params); + } else { + F2.log('Unable to locate RPC function: ' + obj.functionName); + } + } else if (_rRpcCallback.test(message)) { + obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); - // if the passed in element has a data-f2-appid attribute add - // it to the list of elements but to not search within that - // element for other placeholders - if (parentNode && parentNode.hasAttribute('data-f2-appid')) { - add(parentNode); - } else { + if (_callbacks[obj.functionName] !== undefined) { + _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); + delete _callbacks[obj.functionName]; + } + } else if (_rEvents.test(message)) { + obj = parseMessage(_rEvents, message, appConfig.instanceId); + F2.Events._socketEmit.apply(F2.Events, obj); + } + } - // find placeholders within the parentNode only if - // querySelectorAll exists - parentNode = parentNode || document; - if (parentNode.querySelectorAll) { - addAll(parentNode.querySelectorAll('[data-f2-appid]')); - } - } + /** + Registers a callback function + @method _registerCallback + @private + @param {function} callback The callback function + @return {string} The callback ID + */ + function _registerCallback(callback) { + var callbackId = F2.guid(); + _callbacks[callbackId] = callback; + return callbackId; + } - for (var i = 0, len = elements.length; i < len; i++) { - var appConfig = _getAppConfigFromElement(elements[i]); - appConfigs.push(appConfig); - } + return { + /** + Broadcast an RPC function to all sockets + @method broadcast + @param {string} messageType The message type + @param {Array} params The parameters to broadcast + */ + broadcast: function(messageType, params) { + var message = messageType + F2.stringify(params); + + jQuery.each(_apps, function(i, a) { + a.socket.postMessage(message); + }); + }, + /** + Calls a remote function + @method call + @param {string} instanceId The app's Instance ID + @param {string} messageType The message type + @param {string} functionName The name of the remote function + @param {Array} params An array of parameters to pass to the remote + function. Any functions found within the params will be treated as a + callback function. + */ + call: function(instanceId, messageType, functionName, params) { + // Loop through params and find functions and convert them to callbacks + var callbacks = []; + + jQuery.each(params, function(i, e) { + if (typeof e === 'function') { + var cid = _registerCallback(e); + params[i] = cid; + callbacks.push(cid); + } + }); - if (appConfigs.length) { - F2.registerApps(appConfigs); - } - }, - /** - * Begins the loading process for all apps and/or initialization process for pre-loaded apps. - * The app will be passed the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will - * contain the app's unique instanceId within the container. If the - * {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated the app is considered - * to be a pre-loaded app and will be handled accordingly. Optionally, the - * {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those - * assets will be used instead of making a request. - * @method registerApps - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @param {Array} [appManifests] An array of - * {{#crossLink "F2.AppManifest"}}{{/crossLink}} - * objects. This array must be the same length as the apps array that is - * objects. This array must be the same length as the apps array that is - * passed in. This can be useful if apps are loaded on the server-side and - * passed down to the client. - * @example - * Traditional App requests. - * - * // Traditional f2 app configs - * var arConfigs = [ - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * }, - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * }, - * { - * appId: 'com_externaldomain_example_app2', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs); - * - * @example - * Pre-loaded and tradition apps mixed. - * - * // Pre-loaded apps and traditional f2 app configs - * // you can preload the same app multiple times as long as you have a unique root for each - * var arConfigs = [ - * { - * appId: 'com_mydomain_example_app', - * context: {}, - * root: 'div#example-app-1', - * manifestUrl: '' - * }, - * { - * appId: 'com_mydomain_example_app', - * context: {}, - * root: 'div#example-app-2', - * manifestUrl: '' - * }, - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs); - * - * @example - * Apps with predefined manifests. - * - * // Traditional f2 app configs - * var arConfigs = [ - * {appId: 'com_externaldomain_example_app', context: {}}, - * {appId: 'com_externaldomain_example_app', context: {}}, - * {appId: 'com_externaldomain_example_app2', context: {}} - * ]; - * - * // Pre requested manifest responses - * var arManifests = [ - * { - * apps: ['
Example App!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/AppClass.js'], - * styles: ['http://www.domain.com/css/AppStyles.css'] - * }, - * { - * apps: ['
Example App!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/AppClass.js'], - * styles: ['http://www.domain.com/css/AppStyles.css'] - * }, - * { - * apps: ['
Example App 2!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/App2Class.js'], - * styles: ['http://www.domain.com/css/App2Styles.css'] - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs, arManifests); - */ - registerApps: function(appConfigs, appManifests) { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.registerApps()'); - return; - } - else if (!appConfigs) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - } + _apps[instanceId].socket.postMessage( + messageType + F2.stringify({ + functionName: functionName, + params: params, + callbacks: callbacks + }) + ); + }, - var appStack = []; - var batches = {}; - var callbackStack = {}; - var haveManifests = false; - appConfigs = [].concat(appConfigs); - appManifests = [].concat(appManifests || []); - haveManifests = !! appManifests.length; - - // appConfigs must have a length - if (!appConfigs.length) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - // ensure that the array of apps and manifests are qual - } - else if (appConfigs.length && haveManifests && appConfigs.length != appManifests.length) { - F2.log('The length of "apps" does not equal the length of "appManifests"'); - return; - } + /** + Init function which tells F2.Rpc whether it is running at the container- + level or the app-level. This method is generally called by + F2.{{#crossLink "F2/init"}}{{/crossLink}} + @method init + @param {string} [secureAppPagePath] The + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath + property + */ + init: function(secureAppPagePath) { + _secureAppPagePath = secureAppPagePath; + + if (!_secureAppPagePath) { + _createAppToContainerSocket(); + } + }, - // validate each app and assign it an instanceId - // then determine which apps can be batched together - jQuery.each(appConfigs, function(i, a) { - // add properties and methods - a = _createAppConfig(a); + /** + Determines whether the Instance ID is considered to be 'remote'. This is + determined by checking if 1) the app has an open socket and 2) whether + F2.Rpc is running inside of an iframe + @method isRemote + @param {string} instanceId The Instance ID + @return {bool} True if there is an open socket + */ + isRemote: function(instanceId) { + var appExists = _apps[instanceId] !== undefined; + var appIsSecure = _apps[instanceId].config.isSecure; + var noFrameAccess = !jQuery(_apps[instanceId].config.root).find('iframe').length; + + return appExists && appIsSecure && noFrameAccess; + }, - // Will set to itself, for preloaded apps, or set to null for apps that aren't already - // on the page. - a.root = a.root || null; + /** + Creates a container-to-app or app-to-container socket for communication + @method register + @param {F2.AppConfig} [appConfig] The F2.AppConfig object + @param {F2.AppManifest} [appManifest] The F2.AppManifest object + */ + register: function(appConfig, appManifest) { + if (appConfig && appManifest) { + _apps[appConfig.instanceId] = { + config: appConfig, + socket: _createContainerToAppSocket(appConfig, appManifest) + }; + } else { + F2.log('Unable to register socket connection. Please check container configuration.'); + } + } + }; +})()); - // we validate the app after setting the root property because pre-load apps do no require - // manifest url - if (!_validateApp(a)) { - return; // move to the next app - } +F2.extend('UI', (function() { + + var _containerConfig; + + /** + UI helper methods + @class F2.UI + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object + */ + function UIClass(appConfig) { + var _appConfig = appConfig; + var $root = jQuery(appConfig.root); + + function _updateHeight(height) { + height = height || jQuery(_appConfig.root).outerHeight(); + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'updateHeight', + [ + height + ] + ); + } else { + _appConfig.height = height; + $root.find('iframe').height(_appConfig.height); + } + } - // save app - _apps[a.instanceId] = { - config: a - }; + // http://getbootstrap.com/javascript/#modals + function _modalHtml(type, message, showCancel) { + return [ + '' + ].join(''); + } - // If the root property is defined then this app is considered to be preloaded and we will - // run it through that logic. - if (a.root && !_isPlaceholderElement(a.root)) { - if ((!a.root && typeof(a.root) != 'string') && !F2.isNativeDOMNode(a.root)) { - F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); - F2.log('AppConfig instance:', a); - throw ('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); - } - else if (jQuery(a.root).length != 1) { - F2.log('AppConfig invalid for pre-load, root not unique'); - F2.log('AppConfig instance:', a); - F2.log('Number of dom node instances:', jQuery(a.root).length); - throw ('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); - } - - // instantiate F2.App - _createAppInstance(a); + return { + /** + Removes a overlay from an Element on the page + @method hideMask + @param {string|Element} selector The Element or selector to an Element + that currently contains the loader + */ + hideMask: function(selector) { + F2.UI.hideMask(_appConfig.instanceId, selector); + }, + /** + Helper methods for creating and using Modals + @class F2.UI.Modals + @for F2.UI + */ + Modals: (function() { + function _renderAlert(message) { + return _modalHtml('Alert', message); + } - // init events - _initAppEvents(a); + function _renderConfirm(message) { + return _modalHtml('Confirm', message, true); + } - // Continue on in the .each loop, no need to continue because the app is on the page - // the js in initialized, and it is ready to role. - return; // equivalent to continue in .each - } + return { + /** + Display an alert message on the page + @method alert + @param {string} message The message to be displayed + @param {function} [callback] The callback to be fired when the user + closes the dialog + @for F2.UI.Modals + */ + alert: function(message, callback) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.Modals.alert()'); + return; + } - if (!_isPlaceholderElement(a.root)) { - if (!_bUsesAppHandlers) { - // fire beforeAppRender - a.root = _beforeAppRender(a); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - a // the app config - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - a // the app config - ); - } - } + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Modals.alert', + [].slice.call(arguments) + ); + } else { + // Display the alert + jQuery(_renderAlert(message)) + .on('show.bs.modal', function() { + var modal = this; + jQuery(modal).find('.btn-primary').on('click', function() { + jQuery(modal).modal('hide').remove(); + (callback || jQuery.noop)(); + }); + }) + .modal({ + backdrop: true + }); + } + }, + /** + Display a confirm message on the page + @method confirm + @param {string} message The message to be displayed + @param {function} okCallback The function that will be called when + the OK button is pressed + @param {function} cancelCallback The function that will be called + when the Cancel button is pressed + @for F2.UI.Modals + */ + confirm: function(message, okCallback, cancelCallback) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); + return; + } - // if we have the manifest, go ahead and load the app - if (haveManifests) { - _loadApps(a, appManifests[i]); - } - else { - // check if this app can be batched - if (a.enableBatchRequests && !a.isSecure) { - batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; - batches[a.manifestUrl.toLowerCase()].push(a); - } - else { - appStack.push({ - apps: [a], - url: a.manifestUrl - }); - } - } - }); + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Modals.confirm', + [].slice.call(arguments) + ); + } else { + // Display the alert + jQuery(_renderConfirm(message)) + .on('show.bs.modal', function() { + var modal = this; + + jQuery(modal).find('.btn-ok').on('click', function() { + jQuery(modal).modal('hide').remove(); + (okCallback || jQuery.noop)(); + }); + + jQuery(modal).find('.btn-cancel').on('click', function() { + jQuery(modal).modal('hide').remove(); + (cancelCallback || jQuery.noop)(); + }); + }) + .modal({ + backdrop: true + }); + } + } + }; + })(), + /** + Sets the title of the app as shown in the browser. Depending on the + container HTML, this method may do nothing if the container has not been + configured properly or else the container provider does not allow Title's + to be set. + @method setTitle + @param {string} title The title of the app + @for F2.UI + */ + setTitle: function(title) { + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'setTitle', + [title] + ); + } else { + jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); + } + }, + /** + Display an ovarlay over an Element on the page + @method showMask + @param {string|Element} selector The Element or selector to an Element + over which to display the loader + @param {bool} showLoader Display a loading icon + */ + showMask: function(selector, showLoader) { + F2.UI.showMask(_appConfig.instanceId, selector, showLoader); + }, + /** + For secure apps, this method updates the size of the iframe that + contains the app. **Note: It is recommended that app developers call + this method anytime Elements are added or removed from the DOM** + @method updateHeight + @param {int} height The height of the app + */ + updateHeight: _updateHeight, + /** + Helper methods for creating and using Views + @class F2.UI.Views + @for F2.UI + */ + Views: (function() { + var _events = new EventEmitter2(); + var eventsPattern = /change/i; + + // Unlimited listeners, set to > 0 for debugging + _events.setMaxListeners(0); + + function _isValid(eventName) { + if (!eventsPattern.test(eventName)) { + F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); + return false; + } - // we don't have the manifests, go ahead and load them - if (!haveManifests) { - // add the batches to the appStack - jQuery.each(batches, function(i, b) { - appStack.push({ - url: i, - apps: b - }); - }); + return true; + } - // if an app is being loaded more than once on the page, there is the - // potential that the jsonp callback will be clobbered if the request - // for the AppManifest for the app comes back at the same time as - // another request for the same app. We'll create a callbackStack - // that will ensure that requests for the same app are loaded in order - // rather than at the same time - jQuery.each(appStack, function(i, req) { - // define the callback function based on the first app's App ID - var jsonpCallback = F2.Constants.JSONP_CALLBACK + req.apps[0].appId; - - // push the request onto the callback stack - callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; - callbackStack[jsonpCallback].push(req); - }); + return { + /** + Change the current view for the app or add an event listener + @method change + @param {string|function} [input] If a string is passed in, the view + will be changed for the app. If a function is passed in, a change + event listener will be added. + @for F2.UI.Views + */ + change: function(input) { + if (typeof input === 'function') { + this.on('change', input); + } else if (typeof input === 'string') { + if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Views.change', + [].slice.call(arguments) + ); + } else if (F2.inArray(input, _appConfig.views)) { + jQuery('.' + F2.Constants.Css.APP_VIEW, $root) + .addClass('hide') + .filter('[data-f2-view="' + input + '"]', $root) + .removeClass('hide'); + + _updateHeight(); + _events.emit('change', input); + } + } + }, + /** + Removes a view event listener + @method off + @param {string} event The event name + @param {function} listener The function that will be removed + @for F2.UI.Views + */ + off: function(event, listener) { + if (_isValid(event)) { + _events.off(event, listener); + } + }, + /** + Adds a view event listener + @method on + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @for F2.UI.Views + */ + on: function(event, listener) { + if (_isValid(event)) { + _events.on(event, listener); + } + } + }; + })() + }; + } - // loop through each item in the callback stack and make the request - // for the AppManifest. When the request is complete, pop the next - // request off the stack and make the request. - jQuery.each(callbackStack, function(i, requests) { + /** + Removes a overlay from an Element on the page + @method hideMask + @static + @param {string} instanceId The Instance ID of the app + @param {string|Element} selector The Element or selector to an Element + that currently contains the loader + @for F2.UI + */ + UIClass.hideMask = function(instanceId, selector) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.hideMask()'); + return; + } - var manifestRequest = function(jsonpCallback, req) { - if (!req) { - return; - } + if (F2.Rpc.isRemote(instanceId) && !jQuery(selector).is('.' + F2.Constants.Css.APP)) { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC, + 'F2.UI.hideMask', + [ + instanceId, + // Have to pass selector or else there will be stringify errors + jQuery(selector).selector + ] + ); + } else { + var container = jQuery(selector); + container.find('> .' + F2.Constants.Css.MASK).remove(); + container.removeClass(F2.Constants.Css.MASK_CONTAINER); - // setup defaults and callbacks - var url = req.url, - type = 'GET', - dataType = 'jsonp', - completeFunc = function() { - manifestRequest(i, requests.pop()); - }, - errorFunc = function() { - jQuery.each(req.apps, function(idx, item) { - item.name = item.name || item.appId; - F2.log('Removed failed ' + item.name + ' app', item); - F2.removeApp(item.instanceId); - }); - }, - successFunc = function(appManifest) { - _loadApps(req.apps, appManifest); - }; - - // optionally fire xhr overrides - if (_config.xhr && _config.xhr.dataType) { - dataType = _config.xhr.dataType(req.url, req.apps); - if (typeof dataType !== 'string') { - throw ('ContainerConfig.xhr.dataType should return a string'); - } - } - if (_config.xhr && _config.xhr.type) { - type = _config.xhr.type(req.url, req.apps); - if (typeof type !== 'string') { - throw ('ContainerConfig.xhr.type should return a string'); - } - } - if (_config.xhr && _config.xhr.url) { - url = _config.xhr.url(req.url, req.apps); - if (typeof url !== 'string') { - throw ('ContainerConfig.xhr.url should return a string'); - } - } + // If the element contains this property, reset to static position + if (container.data(F2.Constants.Css.MASK_CONTAINER)) { + container.css({ 'position': 'static' }); + } + } + }; - // setup the default request function if an override is not present - var requestFunc = _config.xhr; - if (typeof requestFunc !== 'function') { - requestFunc = function(url, appConfigs, successCallback, errorCallback, completeCallback) { - jQuery.ajax({ - url: url, - type: type, - data: { - params: F2.stringify(req.apps, F2.appConfigReplacer) - }, - jsonp: false, // do not put 'callback=' in the query string - jsonpCallback: jsonpCallback, // Unique function name - dataType: dataType, - success: successCallback, - error: function(jqxhr, settings, exception) { - F2.log('Failed to load app(s)', exception.toString(), req.apps); - errorCallback(); - }, - complete: completeCallback - }); - }; - } + /** + Runs initialization code for the UI class + @method init + @static + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ + UIClass.init = function(containerConfig) { + _containerConfig = containerConfig; + _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); + }; - requestFunc(url, req.apps, successFunc, errorFunc, completeFunc); - }; + /** + Display an ovarlay over an Element on the page + @method showMask + @static + @param {string} instanceId The Instance ID of the app + @param {string|Element} selector The Element or selector to an Element over + which to display the loader + @param {bool} showLoading Display a loading icon + */ + UIClass.showMask = function(instanceId, selector, showLoading) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.showMask()'); + return; + } - manifestRequest(i, requests.pop()); - }); - } - }, - /** - * Removes all apps from the container - * @method removeAllApps - */ - removeAllApps: function() { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeAllApps()'); - return; - } + if (F2.Rpc.isRemote(instanceId) && jQuery(selector).is('.' + F2.Constants.Css.APP)) { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC, + 'F2.UI.showMask', + [ + instanceId, + // Have to pass selector or else there will be stringify errors + jQuery(selector).selector, + showLoading + ] + ); + } else { + if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { + F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); + } - jQuery.each(_apps, function(i, a) { - F2.removeApp(a.config.instanceId); - }); - }, - /** - * Removes an app from the container - * @method removeApp - * @param {string} instanceId The app's instanceId - */ - removeApp: function(instanceId) { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeApp()'); - return; - } + var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); + var mask = jQuery('
') + .height('100%') + .width('100%') + .addClass(F2.Constants.Css.MASK); + + // Set inline styles if useClasses is false + if (!_containerConfig.UI.Mask.useClasses) { + mask.css({ + 'background-color': _containerConfig.UI.Mask.backgroundColor, + 'background-image': _containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', + 'background-position': '50% 50%', + 'background-repeat': 'no-repeat', + 'display': 'block', + 'left': 0, + 'min-height': 30, + 'padding': 0, + 'position': 'absolute', + 'top': 0, + 'z-index': _containerConfig.UI.Mask.zIndex, + 'filter': 'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', + 'opacity': _containerConfig.UI.Mask.opacity + }); + } - if (_apps[instanceId]) { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - _apps[instanceId] // the app instance - ); + if (container.css('position') === 'static') { + container.css({ 'position': 'relative' }); - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY, - _apps[instanceId] // the app instance - ); + // Setting this property tells hideMask to set the position to static + container.data(F2.Constants.Css.MASK_CONTAINER, true); + } - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - _apps[instanceId] // the app instance - ); + container.append(mask); + } + }; - delete _apps[instanceId]; - } - } - }; + return UIClass; })()); jQuery(function() { diff --git a/dist/f2.min.js b/dist/f2.min.js index 87ed3440..ab58a487 100644 --- a/dist/f2.min.js +++ b/dist/f2.min.js @@ -56,6 +56,6 @@ i&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||eb.removeEvent(a, }}}),cb.optSelected||(eb.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),eb.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){eb.propFix[this.toLowerCase()]=this}),cb.enctype||(eb.propFix.enctype="encoding");var Dc=/[\t\r\n\f]/g;eb.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(eb.isFunction(a))return this.each(function(b){eb(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(tb)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(Dc," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=eb.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(eb.isFunction(a))return this.each(function(b){eb(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(tb)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(Dc," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?eb.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(eb.isFunction(a)?function(c){eb(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c)for(var b,d=0,e=eb(this),f=a.match(tb)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===xb||"boolean"===c)&&(this.className&&eb._data(this,"__className__",this.className),this.className=this.className||a===!1?"":eb._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(Dc," ").indexOf(b)>=0)return!0;return!1}}),eb.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){eb.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),eb.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var Ec=eb.now(),Fc=/\?/,Gc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;eb.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=eb.trim(b+"");return e&&!eb.trim(e.replace(Gc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():eb.error("Invalid JSON: "+b)},eb.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||eb.error("Invalid XML: "+b),c};var Hc,Ic,Jc=/#.*$/,Kc=/([?&])_=[^&]*/,Lc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Mc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nc=/^(?:GET|HEAD)$/,Oc=/^\/\//,Pc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Qc={},Rc={},Sc="*/".concat("*");try{Ic=location.href}catch(Tc){Ic=ob.createElement("a"),Ic.href="",Ic=Ic.href}Hc=Pc.exec(Ic.toLowerCase())||[],eb.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ic,type:"GET",isLocal:Mc.test(Hc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Sc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":eb.parseJSON,"text xml":eb.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?P(P(a,eb.ajaxSettings),b):P(eb.ajaxSettings,a)},ajaxPrefilter:N(Qc),ajaxTransport:N(Rc),ajax:function(a,b){function c(a,b,c,d){var e,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),j=void 0,g=d||"",v.readyState=a>0?4:0,e=a>=200&&300>a||304===a,c&&(s=Q(l,v,c)),s=R(l,s,v,e),e?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(eb.lastModified[f]=u),u=v.getResponseHeader("etag"),u&&(eb.etag[f]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,e=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",e?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,i&&n.trigger(e?"ajaxSuccess":"ajaxError",[v,l,e?k:r]),p.fireWith(m,[v,w]),i&&(n.trigger("ajaxComplete",[v,l]),--eb.active||eb.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=eb.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?eb(m):eb.event,o=eb.Deferred(),p=eb.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!k)for(k={};b=Lc.exec(g);)k[b[1].toLowerCase()]=b[2];b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return j&&j.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||Ic)+"").replace(Jc,"").replace(Oc,Hc[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=eb.trim(l.dataType||"*").toLowerCase().match(tb)||[""],null==l.crossDomain&&(d=Pc.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Hc[1]&&d[2]===Hc[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Hc[3]||("http:"===Hc[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=eb.param(l.data,l.traditional)),O(Qc,l,b,v),2===t)return v;i=l.global,i&&0===eb.active++&&eb.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Nc.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fc.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Kc.test(f)?f.replace(Kc,"$1_="+Ec++):f+(Fc.test(f)?"&":"?")+"_="+Ec++)),l.ifModified&&(eb.lastModified[f]&&v.setRequestHeader("If-Modified-Since",eb.lastModified[f]),eb.etag[f]&&v.setRequestHeader("If-None-Match",eb.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Sc+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)v.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(e in{success:1,error:1,complete:1})v[e](l[e]);if(j=O(Rc,l,b,v)){v.readyState=1,i&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,j.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return eb.get(a,b,c,"json")},getScript:function(a,b){return eb.get(a,void 0,b,"script")}}),eb.each(["get","post"],function(a,b){eb[b]=function(a,c,d,e){return eb.isFunction(c)&&(e=e||d,d=c,c=void 0),eb.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),eb.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){eb.fn[b]=function(a){return this.on(b,a)}}),eb._evalUrl=function(a){return eb.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},eb.fn.extend({wrapAll:function(a){if(eb.isFunction(a))return this.each(function(b){eb(this).wrapAll(a.call(this,b))});if(this[0]){var b=eb(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(eb.isFunction(a)?function(b){eb(this).wrapInner(a.call(this,b))}:function(){var b=eb(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=eb.isFunction(a);return this.each(function(c){eb(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){eb.nodeName(this,"body")||eb(this).replaceWith(this.childNodes)}).end()}}),eb.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!cb.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||eb.css(a,"display"))},eb.expr.filters.visible=function(a){return!eb.expr.filters.hidden(a)};var Uc=/%20/g,Vc=/\[\]$/,Wc=/\r?\n/g,Xc=/^(?:submit|button|image|reset|file)$/i,Yc=/^(?:input|select|textarea|keygen)/i;eb.param=function(a,b){var c,d=[],e=function(a,b){b=eb.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=eb.ajaxSettings&&eb.ajaxSettings.traditional),eb.isArray(a)||a.jquery&&!eb.isPlainObject(a))eb.each(a,function(){e(this.name,this.value)});else for(c in a)S(c,a[c],b,e);return d.join("&").replace(Uc,"+")},eb.fn.extend({serialize:function(){return eb.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=eb.prop(this,"elements");return a?eb.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!eb(this).is(":disabled")&&Yc.test(this.nodeName)&&!Xc.test(a)&&(this.checked||!Eb.test(a))}).map(function(a,b){var c=eb(this).val();return null==c?null:eb.isArray(c)?eb.map(c,function(a){return{name:b.name,value:a.replace(Wc,"\r\n")}}):{name:b.name,value:c.replace(Wc,"\r\n")}}).get()}}),eb.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&T()||U()}:T;var Zc=0,$c={},_c=eb.ajaxSettings.xhr();a.ActiveXObject&&eb(a).on("unload",function(){for(var a in $c)$c[a](void 0,!0)}),cb.cors=!!_c&&"withCredentials"in _c,_c=cb.ajax=!!_c,_c&&eb.ajaxTransport(function(a){if(!a.crossDomain||cb.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Zc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete $c[g],b=void 0,f.onreadystatechange=eb.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=$c[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}}),eb.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return eb.globalEval(a),a}}}),eb.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),eb.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=ob.head||eb("head")[0]||ob.documentElement;return{send:function(d,e){b=ob.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;eb.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||eb.expando+"_"+Ec++;return this[a]=!0,a}}),eb.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=eb.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(Fc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||eb.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&eb.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),eb.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||ob;var d=lb.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=eb.buildFragment([a],b,e),e&&e.length&&eb(e).remove(),eb.merge([],d.childNodes))};var cd=eb.fn.load;eb.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=eb.trim(a.slice(h,a.length)),a=a.slice(0,h)),eb.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&eb.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?eb("
").append(eb.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},eb.expr.filters.animated=function(a){return eb.grep(eb.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;eb.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=eb.css(a,"position"),l=eb(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=eb.css(a,"top"),i=eb.css(a,"left"),j=("absolute"===k||"fixed"===k)&&eb.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),eb.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},eb.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){eb.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,eb.contains(b,e)?(typeof e.getBoundingClientRect!==xb&&(d=e.getBoundingClientRect()),c=V(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===eb.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),eb.nodeName(a[0],"html")||(c=a.offset()),c.top+=eb.css(a[0],"borderTopWidth",!0),c.left+=eb.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-eb.css(d,"marginTop",!0),left:b.left-c.left-eb.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||dd;a&&!eb.nodeName(a,"html")&&"static"===eb.css(a,"position");)a=a.offsetParent;return a||dd})}}),eb.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);eb.fn[a]=function(d){return Db(this,function(a,d,e){var f=V(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?eb(f).scrollLeft():e,c?e:eb(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),eb.each(["top","left"],function(a,b){eb.cssHooks[b]=A(cb.pixelPosition,function(a,c){return c?(c=bc(a,b),dc.test(c)?eb(a).position()[b]+"px":c):void 0})}),eb.each({Height:"height",Width:"width"},function(a,b){eb.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){eb.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Db(this,function(b,c,d){var e;return eb.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?eb.css(b,c,g):eb.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),eb.fn.size=function(){return this.length},eb.fn.andSelf=eb.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return eb});var ed=a.jQuery,fd=a.$;return eb.noConflict=function(b){return a.$===eb&&(a.$=fd),b&&a.jQuery===eb&&(a.jQuery=ed),eb},typeof b===xb&&(a.jQuery=a.$=eb),eb});/*! * This file creates $ and jQuery variables within the F2 closure scope */ -var $,jQuery=$=window.jQuery.noConflict(!0);+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('"].join("")};return{hideMask:function(a){F2.UI.hideMask(b.instanceId,a)},Modals:function(){var a=function(a){return e("Alert",a)},c=function(a){return e("Confirm",a,!0)};return{alert:function(c,d){return F2.isInit()?void(F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.alert",[].slice.call(arguments)):jQuery(a(c)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-primary").on("click",function(){jQuery(a).modal("hide").remove(),(d||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.alert()")},confirm:function(a,d,e){return F2.isInit()?void(F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.confirm",[].slice.call(arguments)):jQuery(c(a)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-ok").on("click",function(){jQuery(a).modal("hide").remove(),(d||jQuery.noop)()}),jQuery(a).find(".btn-cancel").on("click",function(){jQuery(a).modal("hide").remove(),(e||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.confirm()")}}}(),setTitle:function(a){F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"setTitle",[a]):jQuery(b.root).find("."+F2.Constants.Css.APP_TITLE).text(a)},showMask:function(a,c){F2.UI.showMask(b.instanceId,a,c)},updateHeight:d,Views:function(){var a=new EventEmitter2,e=/change/i;a.setMaxListeners(0);var f=function(a){return e.test(a)?!0:(F2.log('"'+a+'" is not a valid F2.UI.Views event name'),!1)};return{change:function(e){"function"==typeof e?this.on("change",e):"string"==typeof e&&(b.isSecure&&!F2.Rpc.isRemote(b.instanceId)?F2.Rpc.call(b.instanceId,F2.Constants.Sockets.UI_RPC,"Views.change",[].slice.call(arguments)):F2.inArray(e,b.views)&&(jQuery("."+F2.Constants.Css.APP_VIEW,c).addClass("hide").filter('[data-f2-view="'+e+'"]',c).removeClass("hide"),d(),a.emit("change",e)))},off:function(b,c){f(b)&&a.off(b,c)},on:function(b,c){f(b)&&a.on(b,c)}}}()}};return b.hideMask=function(a,b){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.hideMask()");if(F2.Rpc.isRemote(a)&&!jQuery(b).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.hideMask",[a,jQuery(b).selector]);else{var c=jQuery(b);c.find("> ."+F2.Constants.Css.MASK).remove(),c.removeClass(F2.Constants.Css.MASK_CONTAINER),c.data(F2.Constants.Css.MASK_CONTAINER)&&c.css({position:"static"})}},b.init=function(b){a=b,a.UI=jQuery.extend(!0,{},F2.ContainerConfig.UI,a.UI||{})},b.showMask=function(b,c,d){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.showMask()");if(F2.Rpc.isRemote(b)&&jQuery(c).is("."+F2.Constants.Css.APP))F2.Rpc.call(b,F2.Constants.Sockets.RPC,"F2.UI.showMask",[b,jQuery(c).selector,d]);else{d&&!a.UI.Mask.loadingIcon&&F2.log("Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();");var e=jQuery(c).addClass(F2.Constants.Css.MASK_CONTAINER),f=jQuery("
").height("100%").width("100%").addClass(F2.Constants.Css.MASK);a.UI.Mask.useClasses||f.css({"background-color":a.UI.Mask.backgroundColor,"background-image":a.UI.Mask.loadingIcon?"url("+a.UI.Mask.loadingIcon+")":"","background-position":"50% 50%","background-repeat":"no-repeat",display:"block",left:0,"min-height":30,padding:0,position:"absolute",top:0,"z-index":a.UI.Mask.zIndex,filter:"alpha(opacity="+100*a.UI.Mask.opacity+")",opacity:a.UI.Mask.opacity}),"static"===e.css("position")&&(e.css({position:"relative"}),e.data(F2.Constants.Css.MASK_CONTAINER,!0)),e.append(f)}},b}()),F2.extend("",function(){var _apps={},_config=!1,_bUsesAppHandlers=!1,_sAppHandlerToken=F2.AppHandlers.__f2GetToken(),_loadedScripts={},_loadedStyles={},_loadingScripts={},_afterAppRender=function(a,b){var c=_config.afterAppRender||function(a,b){return jQuery(b).appendTo("body")},d=c(a,b);return _config.afterAppRender&&!d?void F2.log("F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app"):(jQuery(d).addClass(F2.Constants.Css.APP),d.get(0))},_appRender=function(a,b){return b=_outerHtml(jQuery(b).addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId)),_config.appRender&&(b=_config.appRender(a,b)),_outerHtml(b)},_beforeAppRender=function(a){var b=_config.beforeAppRender||jQuery.noop;return b(a)},_appScriptLoadFailed=function(a,b){var c=_config.appScriptLoadFailed||jQuery.noop;return c(a,b)},_createAppConfig=function(a){return a=jQuery.extend(!0,{},a),a.instanceId=a.instanceId||F2.guid(),a.views=a.views||[],F2.inArray(F2.Constants.Views.HOME,a.views)||a.views.push(F2.Constants.Views.HOME),F2.ContainerConfig.locale&&(a.containerLocale=F2.ContainerConfig.locale),a},_getAppConfigFromElement=function(a){var b;if(a){var c=a.getAttribute("data-f2-appid"),d=a.getAttribute("data-f2-manifesturl");if(c&&d){b={appId:c,enableBatchRequests:a.hasAttribute("data-f2-enablebatchrequests"),isSecure:a.hasAttribute("data-f2-issecure"),manifestUrl:d,root:a};var e=a.getAttribute("data-f2-context");if(e)try{b.context=F2.parse(e)}catch(f){console.warn('F2: "data-f2-context" of node is not valid JSON','"'+f+'"')}}}return b},_hasNonTextChildNodes=function(a){var b=!1;if(a.hasChildNodes())for(var c=0,d=a.childNodes.length;d>c;c++)if(1===a.childNodes[c].nodeType){b=!0;break}return b},_hydrateContainerConfig=function(a){a.scriptErrorTimeout||(a.scriptErrorTimeout=F2.ContainerConfig.scriptErrorTimeout),a.debugMode!==!0&&(a.debugMode=F2.ContainerConfig.debugMode),a.locale&&"string"==typeof a.locale&&(F2.ContainerConfig.locale=a.locale)},_initAppEvents=function(a){jQuery(a.root).on("click","."+F2.Constants.Css.APP_VIEW_TRIGGER+"["+F2.Constants.Views.DATA_ATTRIBUTE+"]",function(b){b.preventDefault();var c=jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase();c==F2.Constants.Views.REMOVE?F2.removeApp(a.instanceId):a.ui.Views.change(c)})},_initContainerEvents=function(){var a,b=function(){F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE)};jQuery(window).on("resize",function(){clearTimeout(a),a=setTimeout(b,100)}),F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(a){a.locale&&"string"==typeof a.locale&&(F2.ContainerConfig.locale=a.locale)})},_isPlaceholderElement=function(a){return F2.isNativeDOMNode(a)&&!_hasNonTextChildNodes(a)&&!!a.getAttribute("data-f2-appid")&&!!a.getAttribute("data-f2-manifesturl")},_isInit=function(){return!!_config},_createAppInstance=function(a,b){a.ui=new F2.UI(a),void 0!==F2.Apps[a.appId]&&("function"==typeof F2.Apps[a.appId]?setTimeout(function(){_apps[a.instanceId].app=new F2.Apps[a.appId](a,b,a.root),void 0!==_apps[a.instanceId].app.init&&_apps[a.instanceId].app.init()},0):F2.log("app initialization class is defined but not a function. ("+a.appId+")"))},_loadApps=function(appConfigs,appManifest){if(appConfigs=[].concat(appConfigs),1==appConfigs.length&&appConfigs[0].isSecure&&!_config.isSecureAppPage)return void _loadSecureApp(appConfigs[0],appManifest);if(appConfigs.length!=appManifest.apps.length)return void F2.log("The number of apps defined in the AppManifest do not match the number requested.",appManifest);var _loadStyles=function(a,b){if(_config.loadStyles)return _config.loadStyles(a,b);var c=null,d=!!document.createStyleSheet;jQuery.each(a,function(a,b){var e=b,f=b.toLowerCase();_loadedStyles[f]||(d?document.createStyleSheet(e):(c=c||[],c.push('')),_loadedStyles[f]=!0)}),c&&jQuery("head").append(c.join("")),b()},_loadScripts=function(a,b){if(_config.loadScripts)return _config.loadScripts(a,b);if(!a.length)return b();var c=window.document,d=a.length,e=0,f=c&&(c.head||c.getElementsByTagName("head")[0]),g=f&&f.getElementsByTagName("base")[0]||null,h="addEventListener"in window?{}:{loaded:!0,complete:!0},i=function(a){setTimeout(function(){var b={src:a.target.src,appId:appConfigs[0].appId};F2.log("Script defined in '"+b.appId+"' failed to load '"+b.src+"'"),F2.Events.emit("RESOURCE_FAILED_TO_LOAD",b),_bUsesAppHandlers?F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED,appConfigs[0],b.src):_appScriptLoadFailed(appConfigs[0],b.src)},_config.scriptErrorTimeout)},j=function(){++e===d&&b()},k=function(a,b){var c,d=_loadingScripts[a];if(d){for(var e=0;ei;i++)try{eval(inlines[i])}catch(exception){F2.log("Error loading inline script: "+exception+"\n\n"+inlines[i]),F2.Events.emit("RESOURCE_FAILED_TO_LOAD",{appId:appConfigs[0].appId,src:inlines[i],err:exception}),_bUsesAppHandlers?F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED,appConfigs[0],exception):_appScriptLoadFailed(appConfigs[0],exception)}cb()}},elementInDocument=function(a){if(a)for(;a.parentNode;)if(a=a.parentNode,a===document)return!0;return!1},_loadHtml=function(a){jQuery.each(a,function(a,b){if(_isPlaceholderElement(appConfigs[a].root))jQuery(appConfigs[a].root).addClass(F2.Constants.Css.APP).append(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+appConfigs[a].appId));else if(_bUsesAppHandlers){F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER,appConfigs[a],_outerHtml(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+appConfigs[a].appId)));var c=appConfigs[a].appId,d=appConfigs[a].root;if(!d)throw"Root for "+c+" must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.";if(!elementInDocument(d))throw"App root for "+c+" was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.";if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_AFTER,appConfigs[a]),!F2.isNativeDOMNode(d))throw"App root for "+c+" must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element."}else appConfigs[a].root=_afterAppRender(appConfigs[a],_appRender(appConfigs[a],b.html));_initAppEvents(appConfigs[a])})},scripts=appManifest.scripts||[],styles=appManifest.styles||[],inlines=appManifest.inlineScripts||[],apps=appManifest.apps||[];_loadStyles(styles,function(){_loadHtml(apps),_loadScripts(scripts,function(){appConfigs[0]&&F2.Events.emit("APP_SCRIPTS_LOADED",{appId:appConfigs[0].appId,scripts:scripts}),_loadInlineScripts(inlines,function(){jQuery.each(appConfigs,function(a,b){_createAppInstance(b,appManifest.apps[a])})})})})},_loadSecureApp=function(a,b){if(_config.secureAppPagePath){if(_isPlaceholderElement(a.root))jQuery(a.root).addClass(F2.Constants.Css.APP).append(jQuery("
").addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId));else if(_bUsesAppHandlers){var c=jQuery(a.root);if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER,a,_outerHtml(jQuery(b.html).addClass(F2.Constants.Css.APP_CONTAINER+" "+a.appId))),0===c.parents("body:first").length)throw"App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.";if(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_AFTER,a),!a.root)throw"App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.";if(!F2.isNativeDOMNode(a.root))throw"App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node."}else a.root=_afterAppRender(a,_appRender(a,"
"));a.ui=new F2.UI(a),_initAppEvents(a),F2.Rpc.register(a,b)}else F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.')},_outerHtml=function(a){return jQuery("
").append(a).html()},_validateApp=function(a){return a.appId?a.root||a.manifestUrl?!0:(F2.log('"manifestUrl" missing from app object'),!1):(F2.log('"appId" missing from app object'),!1)},_validateContainerConfig=function(){if(_config&&_config.xhr){if("function"!=typeof _config.xhr&&"object"!=typeof _config.xhr)throw"ContainerConfig.xhr should be a function or an object";if(_config.xhr.dataType&&"function"!=typeof _config.xhr.dataType)throw"ContainerConfig.xhr.dataType should be a function";if(_config.xhr.type&&"function"!=typeof _config.xhr.type)throw"ContainerConfig.xhr.type should be a function";if(_config.xhr.url&&"function"!=typeof _config.xhr.url)throw"ContainerConfig.xhr.url should be a function"}return!0};return{getContainerState:function(){return _isInit()?jQuery.map(_apps,function(a){return{appId:a.config.appId}}):void F2.log("F2.init() must be called before F2.getContainerState()")},getContainerLocale:function(){return _isInit()?F2.ContainerConfig.locale:void F2.log("F2.init() must be called before F2.getContainerLocale()")},init:function(a){_config=a||{},_validateContainerConfig(),_hydrateContainerConfig(_config),_bUsesAppHandlers=!(_config.beforeAppRender||_config.appRender||_config.afterAppRender||_config.appScriptLoadFailed),(_config.secureAppPagePath||_config.isSecureAppPage)&&F2.Rpc.init(_config.secureAppPagePath?_config.secureAppPagePath:!1),F2.UI.init(_config),_config.isSecureAppPage||_initContainerEvents()},isInit:_isInit,loadPlaceholders:function(a){var b=[],c=[],d=function(a){a&&b.push(a)},e=function(a){if(a)for(var b=0,c=a.length;c>b;b++)d(a[b])};if(a&&!F2.isNativeDOMNode(a))throw'"parentNode" must be null or a DOM node';a&&a.hasAttribute("data-f2-appid")?d(a):(a=a||document,a.querySelectorAll&&e(a.querySelectorAll("[data-f2-appid]")));for(var f=0,g=b.length;g>f;f++){var h=_getAppConfigFromElement(b[f]);c.push(h)}c.length&&F2.registerApps(c)},registerApps:function(a,b){if(!_isInit())return void F2.log("F2.init() must be called before F2.registerApps()");if(!a)return void F2.log("At least one AppConfig must be passed when calling F2.registerApps()");var c=[],d={},e={},f=!1;return a=[].concat(a),b=[].concat(b||[]),f=!!b.length,a.length?a.length&&f&&a.length!=b.length?void F2.log('The length of "apps" does not equal the length of "appManifests"'):(jQuery.each(a,function(a,e){if(e=_createAppConfig(e),e.root=e.root||null,_validateApp(e)){if(_apps[e.instanceId]={config:e},e.root&&!_isPlaceholderElement(e.root)){if(!e.root&&"string"!=typeof e.root&&!F2.isNativeDOMNode(e.root))throw F2.log("AppConfig invalid for pre-load, not a valid string and not dom node"),F2.log("AppConfig instance:",e),"Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.";if(1!=jQuery(e.root).length)throw F2.log("AppConfig invalid for pre-load, root not unique"),F2.log("AppConfig instance:",e),F2.log("Number of dom node instances:",jQuery(e.root).length),"Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.";return _createAppInstance(e),void _initAppEvents(e)}_isPlaceholderElement(e.root)||(_bUsesAppHandlers?(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_CREATE_ROOT,e),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_RENDER_BEFORE,e)):e.root=_beforeAppRender(e)),f?_loadApps(e,b[a]):e.enableBatchRequests&&!e.isSecure?(d[e.manifestUrl.toLowerCase()]=d[e.manifestUrl.toLowerCase()]||[],d[e.manifestUrl.toLowerCase()].push(e)):c.push({apps:[e],url:e.manifestUrl})}}),void(f||(jQuery.each(d,function(a,b){c.push({url:a,apps:b})}),jQuery.each(c,function(a,b){var c=F2.Constants.JSONP_CALLBACK+b.apps[0].appId;e[c]=e[c]||[],e[c].push(b)}),jQuery.each(e,function(a,b){var c=function(d,e){if(e){var f=e.url,g="GET",h="jsonp",i=function(){c(a,b.pop())},j=function(){jQuery.each(e.apps,function(a,b){b.name=b.name||b.appId,F2.log("Removed failed "+b.name+" app",b),F2.removeApp(b.instanceId)})},k=function(a){_loadApps(e.apps,a)};if(_config.xhr&&_config.xhr.dataType&&(h=_config.xhr.dataType(e.url,e.apps),"string"!=typeof h))throw"ContainerConfig.xhr.dataType should return a string";if(_config.xhr&&_config.xhr.type&&(g=_config.xhr.type(e.url,e.apps),"string"!=typeof g))throw"ContainerConfig.xhr.type should return a string";if(_config.xhr&&_config.xhr.url&&(f=_config.xhr.url(e.url,e.apps),"string"!=typeof f))throw"ContainerConfig.xhr.url should return a string";var l=_config.xhr;"function"!=typeof l&&(l=function(a,b,c,f,i){jQuery.ajax({url:a,type:g,data:{params:F2.stringify(e.apps,F2.appConfigReplacer)},jsonp:!1,jsonpCallback:d,dataType:h,success:c,error:function(a,b,c){F2.log("Failed to load app(s)",c.toString(),e.apps),f()},complete:i})}),l(f,e.apps,k,j,i)}};c(a,b.pop())})))):void F2.log("At least one AppConfig must be passed when calling F2.registerApps()")},removeAllApps:function(){return _isInit()?void jQuery.each(_apps,function(a,b){F2.removeApp(b.config.instanceId)}):void F2.log("F2.init() must be called before F2.removeAllApps()")},removeApp:function(a){return _isInit()?void(_apps[a]&&(F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY_BEFORE,_apps[a]),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY,_apps[a]),F2.AppHandlers.__trigger(_sAppHandlerToken,F2.Constants.AppHandlers.APP_DESTROY_AFTER,_apps[a]),delete _apps[a])):void F2.log("F2.init() must be called before F2.removeApp()")}}}()),jQuery(function(){var a=[],b=function(b){b&&a.push(b)},c=function(a){if(a)for(var c=0,d=a.length;d>c;c++)b(a[c])};if(b(document.getElementById("f2-autoload")),document.querySelectorAll&&(c(document.querySelectorAll("[data-f2-autoload]")),c(document.querySelectorAll(".f2-autoload"))),a.length){F2.init();for(var d=0,e=a.length;e>d;d++)F2.loadPlaceholders(a[d])}}),exports.F2=F2,"undefined"!=typeof define&&define.amd&&define(function(){return F2})}}("undefined"!=typeof exports?exports:window); +var $,jQuery=$=window.jQuery.noConflict(!0);+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('"].join("")}var d=a,e=jQuery(a.root);return{hideMask:function(a){F2.UI.hideMask(d.instanceId,a)},Modals:function(){function a(a){return c("Alert",a)}function b(a){return c("Confirm",a,!0)}return{alert:function(b,c){return F2.isInit()?void(F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.alert",[].slice.call(arguments)):jQuery(a(b)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-primary").on("click",function(){jQuery(a).modal("hide").remove(),(c||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.alert()")},confirm:function(a,c,e){return F2.isInit()?void(F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.confirm",[].slice.call(arguments)):jQuery(b(a)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-ok").on("click",function(){jQuery(a).modal("hide").remove(),(c||jQuery.noop)()}),jQuery(a).find(".btn-cancel").on("click",function(){jQuery(a).modal("hide").remove(),(e||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.confirm()")}}}(),setTitle:function(a){F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"setTitle",[a]):jQuery(d.root).find("."+F2.Constants.Css.APP_TITLE).text(a)},showMask:function(a,b){F2.UI.showMask(d.instanceId,a,b)},updateHeight:b,Views:function(){function a(a){return f.test(a)?!0:(F2.log('"'+a+'" is not a valid F2.UI.Views event name'),!1)}var c=new EventEmitter2,f=/change/i;return c.setMaxListeners(0),{change:function(a){"function"==typeof a?this.on("change",a):"string"==typeof a&&(d.isSecure&&!F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Views.change",[].slice.call(arguments)):F2.inArray(a,d.views)&&(jQuery("."+F2.Constants.Css.APP_VIEW,e).addClass("hide").filter('[data-f2-view="'+a+'"]',e).removeClass("hide"),b(),c.emit("change",a)))},off:function(b,d){a(b)&&c.off(b,d)},on:function(b,d){a(b)&&c.on(b,d)}}}()}}var b;return a.hideMask=function(a,b){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.hideMask()");if(F2.Rpc.isRemote(a)&&!jQuery(b).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.hideMask",[a,jQuery(b).selector]);else{var c=jQuery(b);c.find("> ."+F2.Constants.Css.MASK).remove(),c.removeClass(F2.Constants.Css.MASK_CONTAINER),c.data(F2.Constants.Css.MASK_CONTAINER)&&c.css({position:"static"})}},a.init=function(a){b=a,b.UI=jQuery.extend(!0,{},F2.ContainerConfig.UI,b.UI||{})},a.showMask=function(a,c,d){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.showMask()");if(F2.Rpc.isRemote(a)&&jQuery(c).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.showMask",[a,jQuery(c).selector,d]);else{d&&!b.UI.Mask.loadingIcon&&F2.log("Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();");var e=jQuery(c).addClass(F2.Constants.Css.MASK_CONTAINER),f=jQuery("
").height("100%").width("100%").addClass(F2.Constants.Css.MASK);b.UI.Mask.useClasses||f.css({"background-color":b.UI.Mask.backgroundColor,"background-image":b.UI.Mask.loadingIcon?"url("+b.UI.Mask.loadingIcon+")":"","background-position":"50% 50%","background-repeat":"no-repeat",display:"block",left:0,"min-height":30,padding:0,position:"absolute",top:0,"z-index":b.UI.Mask.zIndex,filter:"alpha(opacity="+100*b.UI.Mask.opacity+")",opacity:b.UI.Mask.opacity}),"static"===e.css("position")&&(e.css({position:"relative"}),e.data(F2.Constants.Css.MASK_CONTAINER,!0)),e.append(f)}},a}()),jQuery(function(){var a=[],b=function(b){b&&a.push(b)},c=function(a){if(a)for(var c=0,d=a.length;d>c;c++)b(a[c])};if(b(document.getElementById("f2-autoload")),document.querySelectorAll&&(c(document.querySelectorAll("[data-f2-autoload]")),c(document.querySelectorAll(".f2-autoload"))),a.length){F2.init();for(var d=0,e=a.length;e>d;d++)F2.loadPlaceholders(a[d])}}),exports.F2=F2,"undefined"!=typeof define&&define.amd&&define(function(){return F2})}}("undefined"!=typeof exports?exports:window); //# sourceMappingURL=f2.min.js.map \ No newline at end of file diff --git a/dist/f2.min.js.map b/dist/f2.min.js.map index cc4e43ef..18b48749 100644 --- a/dist/f2.min.js.map +++ b/dist/f2.min.js.map @@ -1 +1 @@ -{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","global","factory","module","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","Plugin","_relatedTarget","$this","Modal","DEFAULTS","element","$body","$element","$backdrop","isShown","scrollbarWidth","remote","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","that","checkScrollbar","setScrollbar","escape","transition","enforceFocus","emulateTransitionEnd","hideModal","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","measureScrollbar","bodyPad","clientWidth","innerWidth","scrollDiv","modal","Constructor","$target","showEvent","_events","_conf","configure","conf","delimiter","maxListeners","wildcard","newListener","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","property","isHostObject","o","hasFlash","undef","navigator","plugins","description","mimeTypes","enabledPlugin","flashVersion","flash","GetVariable","notSupportedException","major","minor","HAS_FLASH_THROTTLED_BUG","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","substring","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","q","useHash","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","frameBorder","allowTransparency","onLoad","usePost","action","checkAcl","acl","re","substr","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","userAgent","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","defaults","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","stringify","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","fragments","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","ex1","_absolutizeURI","removeDotSegments","output","_parseURI","authority","hostname","appConfigReplacer","Apps","overwrite","isFunc","S4","array","isLocalRequest","urlLower","isNativeDOMNode","testObject","bIsNode","Node","bIsElement","HTMLElement","log","replacer","space","_createHandler","fnOrNode","domNodeAppropriate","_validateToken","domNode","_containerToken","_f2Token","_validateF2Token","_filterHandlersByNamespace","newHandlers","_removeHandler","eventKey","_handlerCollection","_parseEventKey","eventParts","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","appInstance","app","appId","getToken","__f2GetToken","__trigger","callbackArgs","isAppRender","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","containerLocale","localeSupport","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","locale","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","_PREFIX","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","_APP_EVENT_PREFIX","_CONTAINER_EVENT_PREFIX","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","CONTAINER_LOCALE_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_socketEmit","broadcast","Constants","timesToListen","_secureAppPagePath","_apps","_rEvents","_rRpc","_rRpcCallback","_rSocketLoad","_rUiCall","_createAppToContainerSocket","isLoaded","messagePlayback","socket","appParts","registerApps","_createContainerToAppSocket","appManifest","iframeProps","scrolling","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","callbacks","c","_registerCallback","messageType","cid","isRemote","register","_containerConfig","UI_Class","_appConfig","$root","_updateHeight","outerHeight","_modalHtml","showCancel","hideMask","Modals","_renderAlert","_renderConfirm","alert","isInit","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_rValidEvents","_isValid","containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","_config","_bUsesAppHandlers","_sAppHandlerToken","_loadedScripts","_loadedStyles","_loadingScripts","_afterAppRender","appContainer","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_getAppConfigFromElement","hasAttribute","contextJson","warn","_hasNonTextChildNodes","hasNodes","hasChildNodes","_hydrateContainerConfig","_initAppEvents","view","removeApp","_initContainerEvents","resizeTimeout","resizeHandler","_isPlaceholderElement","_isInit","_createAppInstance","appContent","_loadApps","appConfigs","_loadSecureApp","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","resourceUrl","resourceKey","_loadScripts","scriptCount","scriptsLoaded","insertBeforeEl","readyStates","loaded","_error","evtData","_checkComplete","_emptyWaitlist","errorEvt","waitlist","getTime","onerror","_loadInlineScripts","inlines","loadInlineScripts","eval","exception","elementInDocument","_loadHtml","_validateApp","_validateContainerConfig","getContainerState","getContainerLocale","loadPlaceholders","addAll","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps","autoloadEls"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","global","factory","module","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","Plugin","_relatedTarget","$this","Modal","DEFAULTS","element","$body","$element","$backdrop","isShown","scrollbarWidth","remote","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","that","checkScrollbar","setScrollbar","escape","transition","enforceFocus","emulateTransitionEnd","hideModal","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","measureScrollbar","bodyPad","clientWidth","innerWidth","scrollDiv","modal","Constructor","$target","showEvent","_events","_conf","configure","conf","delimiter","maxListeners","wildcard","newListener","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","property","isHostObject","o","hasFlash","undef","navigator","plugins","description","mimeTypes","enabledPlugin","flashVersion","flash","GetVariable","notSupportedException","major","minor","HAS_FLASH_THROTTLED_BUG","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","substring","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","q","useHash","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","frameBorder","allowTransparency","onLoad","usePost","action","checkAcl","acl","re","substr","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","userAgent","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","defaults","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","stringify","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","fragments","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","ex1","_isNode","Node","_isElement","HTMLElement","_absolutizeURI","removeDotSegments","output","_parseURI","authority","whitespacePattern","uriPattern","hostname","appConfigReplacer","Apps","overwrite","isFunc","s4","array","isLocalRequest","urlLower","relUrlPattern","execute","isNativeDOMNode","testObject","log","replacer","space","_createHandler","fnOrNode","domNodeAppropriate","_validateToken","domNode","_containerToken","_f2Token","_validateF2Token","_filterHandlersByNamespace","newHandlers","_removeHandler","eventKey","_handlerCollection","_parseEventKey","eventParts","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","appInstance","app","appId","getToken","__f2GetToken","__trigger","callbackArgs","isAppRender","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","containerLocale","localeSupport","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","locale","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","CONTAINER_LOCALE_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_afterAppRender","_config","_appConfig","_html","$appContainer","Constants","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_getAppConfigFromElement","hasAttribute","contextJson","warn","_hasNonTextChildNodes","hasNodes","hasChildNodes","_hydrateContainerConfig","containerConfig","_initAppEvents","elementFilter","view","removeApp","_initContainerEvents","resizeHandler","resizeTimeout","_isPlaceholderElement","_isInit","_createAppInstance","appContent","_apps","_loadApps","appConfigs","appManifest","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","resourceUrl","resourceKey","_loadedStyles","_loadScripts","_error","evtData","_usesAppHandlers","_appHandlerToken","_checkComplete","scriptsLoaded","scriptCount","_emptyWaitlist","errorEvt","waitlist","_loadingScripts","insertBeforeEl","readyStates","loaded","_loadedScripts","getTime","onerror","_loadInlineScripts","inlines","loadInlineScripts","eval","exception","elementInDocument","_loadHtml","_loadSecureApp","manifestScripts","manifestStyles","manifestInlines","manifestApps","$root","register","_validateApp","_validateContainerConfig","getContainerState","getContainerLocale","isInit","loadPlaceholders","registerApps","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps","_socketEmit","broadcast","timesToListen","_createAppToContainerSocket","isLoaded","messagePlayback","socket","_rSocketLoad","appParts","_createContainerToAppSocket","iframeProps","scrolling","_secureAppPagePath","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","rawMessage","callbacks","c","_rUiCall","_rRpc","_rRpcCallback","_rEvents","_registerCallback","messageType","cid","isRemote","appExists","appIsSecure","noFrameAccess","UIClass","_updateHeight","outerHeight","_modalHtml","showCancel","hideMask","Modals","_renderAlert","_renderConfirm","alert","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_isValid","eventsPattern","_containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","autoloadEls","addAll"],"mappings":"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"} \ No newline at end of file diff --git a/dist/f2.no-third-party.js b/dist/f2.no-third-party.js index a1ad6b5a..3561f506 100644 --- a/dist/f2.no-third-party.js +++ b/dist/f2.no-third-party.js @@ -32,3758 +32,3629 @@ return; } -var F2; - /** - * Open F2 - * @module f2 - * @main f2 - */ -F2 = (function() { - - /** - * Abosolutizes a relative URL - * @method _absolutizeURI - * @private - * @param {e.g., location.href} base - * @param {URL to absolutize} href - * @returns {string} URL - * Source: https://gist.github.com/Yaffle/1088850 - * Tests: http://skew.org/uri/uri_tests.html - */ - var _absolutizeURI = function(base, href) {// RFC 3986 - - function removeDotSegments(input) { - var output = []; - input.replace(/^(\.\.?(\/|$))+/, '') - .replace(/\/(\.(\/|$))+/g, '/') - .replace(/\/\.\.$/, '/../') - .replace(/\/?[^\/]*/g, function (p) { - if (p === '/..') { - output.pop(); - } else { - output.push(p); - } - }); - return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); - } - - href = _parseURI(href || ''); - base = _parseURI(base || ''); - - return !href || !base ? null : (href.protocol || base.protocol) + - (href.protocol || href.authority ? href.authority : base.authority) + - removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + - (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + - href.hash; - }; - - /** - * Parses URI - * @method _parseURI - * @private - * @param {The URL to parse} url - * @returns {Parsed URL} string - * Source: https://gist.github.com/Yaffle/1088850 - * Tests: http://skew.org/uri/uri_tests.html - */ - var _parseURI = function(url) { - var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); - // authority = '//' + user + ':' + pass '@' + hostname + ':' port - return (m ? { - href : m[0] || '', - protocol : m[1] || '', - authority: m[2] || '', - host : m[3] || '', - hostname : m[4] || '', - port : m[5] || '', - pathname : m[6] || '', - search : m[7] || '', - hash : m[8] || '' - } : null); - }; - - return { - /** - * A function to pass into F2.stringify which will prevent circular - * reference errors when serializing objects - * @method appConfigReplacer - */ - appConfigReplacer: function(key, value) { - if (key == 'root' || key == 'ui' || key == 'height') { - return undefined; - } else { - return value; - } - }, - /** - * The apps namespace is a place for app developers to put the javascript - * class that is used to initialize their app. The javascript classes should - * be namepaced with the {{#crossLink "F2.AppConfig"}}{{/crossLink}}.appId. - * It is recommended that the code be placed in a closure to help keep the - * global namespace clean. - * - * If the class has an 'init' function, that function will be called - * automatically by F2. - * @property Apps - * @type object - * @example - * F2.Apps["com_example_helloworld"] = (function() { - * var App_Class = function(appConfig, appContent, root) { - * this._app = appConfig; // the F2.AppConfig object - * this._appContent = appContent // the F2.AppManifest.AppContent object - * this.$root = $(root); // the root DOM Element that contains this app - * } - * - * App_Class.prototype.init = function() { - * // perform init actions - * } - * - * return App_Class; - * })(); - * @example - * F2.Apps["com_example_helloworld"] = function(appConfig, appContent, root) { - * return { - * init:function() { - * // perform init actions - * } - * }; - * }; - * @for F2 - */ - Apps: {}, - /** - * Creates a namespace on F2 and copies the contents of an object into - * that namespace optionally overwriting existing properties. - * @method extend - * @param {string} ns The namespace to create. Pass a falsy value to - * add properties to the F2 namespace directly. - * @param {object} obj The object to copy into the namespace. - * @param {bool} overwrite True if object properties should be overwritten - * @return {object} The created object - */ - extend: function (ns, obj, overwrite) { - var isFunc = typeof obj === 'function'; - var parts = ns ? ns.split('.') : []; - var parent = this; - obj = obj || {}; - - // ignore leading global - if (parts[0] === 'F2') { - parts = parts.slice(1); - } - - // create namespaces - for (var i = 0, len = parts.length; i < len; i++) { - if (!parent[parts[i]]) { - parent[parts[i]] = isFunc && i + 1 == len ? obj : {}; - } - parent = parent[parts[i]]; - } - - // copy object into namespace - if (!isFunc) { - for (var prop in obj) { - if (typeof parent[prop] === 'undefined' || overwrite) { - parent[prop] = obj[prop]; - } - } - } - - return parent; - }, - /** - * Generates a somewhat random id - * @method guid - * @return {string} A random id - * @for F2 - */ - guid: function() { - var S4 = function() { - return (((1+Math.random())*0x10000)|0).toString(16).substring(1); - }; - return (S4()+S4()+'-'+S4()+'-'+S4()+'-'+S4()+'-'+S4()+S4()+S4()); - }, - /** - * Search for a value within an array. - * @method inArray - * @param {object} value The value to search for - * @param {Array} array The array to search - * @return {bool} True if the item is in the array - */ - inArray: function(value, array) { - return jQuery.inArray(value, array) > -1; - }, - /** - * Tests a URL to see if it's on the same domain (local) or not - * @method isLocalRequest - * @param {URL to test} url - * @returns {bool} Whether the URL is local or not - * Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js - */ - isLocalRequest: function(url){ - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - urlLower = url.toLowerCase(), - parts = rurl.exec( urlLower ), - ajaxLocation, - ajaxLocParts; - - try { - ajaxLocation = location.href; - } catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement('a'); - ajaxLocation.href = ''; - ajaxLocation = ajaxLocation.href; - } - - ajaxLocation = ajaxLocation.toLowerCase(); - - // uh oh, the url must be relative - // make it fully qualified and re-regex url - if (!parts){ - urlLower = _absolutizeURI(ajaxLocation,urlLower).toLowerCase(); - parts = rurl.exec( urlLower ); - } - - // Segment location into parts - ajaxLocParts = rurl.exec( ajaxLocation ) || []; - - // do hostname and protocol and port of manifest URL match location.href? (a "local" request on the same domain) - var matched = !(parts && - (parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - (parts[ 3 ] || (parts[ 1 ] === 'http:' ? '80' : '443')) !== - (ajaxLocParts[ 3 ] || (ajaxLocParts[ 1 ] === 'http:' ? '80' : '443')))); - - return matched; - }, - /** - * Utility method to determine whether or not the argument passed in is or is not a native dom node. - * @method isNativeDOMNode - * @param {object} testObject The object you want to check as native dom node. - * @return {bool} Returns true if the object passed is a native dom node. - */ - isNativeDOMNode: function(testObject) { - var bIsNode = ( - typeof Node === 'object' ? testObject instanceof Node : - testObject && typeof testObject === 'object' && typeof testObject.nodeType === 'number' && typeof testObject.nodeName === 'string' - ); - - var bIsElement = ( - typeof HTMLElement === 'object' ? testObject instanceof HTMLElement : //DOM2 - testObject && typeof testObject === 'object' && testObject.nodeType === 1 && typeof testObject.nodeName === 'string' - ); - - return (bIsNode || bIsElement); - }, - /** - * A utility logging function to write messages or objects to the browser console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). - * @method log - * @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). - * @param {object} [obj2]* An object to be logged - * @example - * // Pass any value (string, int, array, object, bool). - * F2.log('foo'); - * F2.log([1, 2, 3]); - * @example - * // Use a console method name as the first argument. - * F2.log('error', err); - * F2.log('info', 'The session ID is ' + sessionId); - */ - log: function() { - if (!window.console) { - return; - } - - var method = 'log'; - var args = Array.prototype.slice.apply(arguments); - - if (args.length > 1 && args[0] in window.console) { - method = args.shift(); - } - - if (window.console[method]) { - window.console[method].apply(window.console, args); - } - }, - /** - * Wrapper to convert a JSON string to an object - * @method parse - * @param {string} str The JSON string to convert - * @return {object} The parsed object - */ - parse: function(str) { - return JSON.parse(str); - }, - /** - * Wrapper to convert an object to JSON - * - * **Note: When using F2.stringify on an F2.AppConfig object, it is - * recommended to pass F2.appConfigReplacer as the replacer function in - * order to prevent circular serialization errors.** - * @method stringify - * @param {object} value The object to convert - * @param {function|Array} replacer An optional parameter that determines - * how object values are stringified for objects. It can be a function or an - * array of strings. - * @param {int|string} space An optional parameter that specifies the - * indentation of nested structures. If it is omitted, the text will be - * packed without extra whitespace. If it is a number, it will specify the - * number of spaces to indent at each level. If it is a string (such as '\t' - * or ' '), it contains the characters used to indent at each level. - * @return {string} The JSON string - */ - stringify: function(value, replacer, space) { - return JSON.stringify(value, replacer, space); - }, - /** - * Function to get the F2 version number - * @method version - * @return {string} F2 version number - */ - version: function() { return '1.4.0'; } - }; + Open F2 + @module f2 + @main f2 +*/ +var F2 = (function() { + /** + Test whether a value is a native Node + @method _isNode + @private + @param {object} test Any value to test + @returns {boolean} True if Node + */ + function _isNode(test) { + if (typeof Node === 'object') { + return test instanceof Node; + } + + return test && typeof test === 'object' && typeof test.nodeType === 'number' && typeof test.nodeName === 'string'; + } + + /** + Test whether a value is a native Element + @method _isElement + @private + @param {object} test Any value to test + @returns {boolean} True if Element + */ + function _isElement(test) { + if (typeof HTMLElement === 'object') { + return test instanceof HTMLElement; + } + + return test && typeof test === 'object' && test.nodeType === 1 && typeof test.nodeName === 'string'; + } + + /** + Abosolutizes a relative URL + @method _absolutizeURI + @private + @param {string} base The base domain + @param {strong} href The relative url to make absolute + @returns {string} URL + Source: https://gist.github.com/Yaffle/1088850 + Tests: http://skew.org/uri/uri_tests.html + */ + function _absolutizeURI(base, href) { // RFC 3986 + function removeDotSegments(input) { + var output = []; + input.replace(/^(\.\.?(\/|$))+/, '') + .replace(/\/(\.(\/|$))+/g, '/') + .replace(/\/\.\.$/, '/../') + .replace(/\/?[^\/]*/g, function(p) { + if (p === '/..') { + output.pop(); + } else { + output.push(p); + } + }); + return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); + } + + href = _parseURI(href || ''); + base = _parseURI(base || ''); + + return !href || !base ? null : (href.protocol || base.protocol) + + (href.protocol || href.authority ? href.authority : base.authority) + + removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + + (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + + href.hash; + } + + /** + Parses URI into its component parts + @private + @method _parseURI + @param {string} url The url to be parsed + @returns {object} The parts of the url + Source: https://gist.github.com/Yaffle/1088850 + Tests: http://skew.org/uri/uri_tests.html + */ + function _parseURI(url) { + var whitespacePattern = /^\s+|\s+$/g; + var uriPattern = /^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/; + var match = String(url).replace(whitespacePattern, '').match(uriPattern); + + if (match) { + return { + href: match[0] || '', + protocol: match[1] || '', + authority: match[2] || '', + host: match[3] || '', + hostname: match[4] || '', + port: match[5] || '', + pathname: match[6] || '', + search: match[7] || '', + hash: match[8] || '' + }; + } + } + + return { + /** + A function to pass into F2.stringify which will prevent circular + reference errors when serializing objects + @method appConfigReplacer + @param {string} key The key being examined + @param {*} value The value being examined + @returns {*} Returns the original allowed value or undefined + */ + appConfigReplacer: function(key, value) { + if (key === 'root' || key === 'ui' || key === 'height') { + return undefined; + } else { + return value; + } + }, + /** + The apps namespace is a place for app developers to put the javascript + class that is used to initialize their app. The javascript classes should + be namepaced with the {{#crossLink "F2.AppConfig"}}{{/crossLink}}.appId. + It is recommended that the code be placed in a closure to help keep the + global namespace clean. + If the class has an 'init' function, that function will be called + automatically by F2. + @property Apps + @type object + @for F2 + @example + F2.Apps['com_example_helloworld'] = (function() { + var App_Class = function(appConfig, appContent, root) { + this._app = appConfig; // the F2.AppConfig object + this._appContent = appContent // the F2.AppManifest.AppContent object + this.$root = $(root); // the root DOM Element that contains this app + } + + App_Class.prototype.init = function() { + // perform init actions + } + + return App_Class; + })(); + @example + F2.Apps['com_example_helloworld'] = function(appConfig, appContent, root) { + return { + init: function() { + // Perform init actions + } + }; + }; + */ + Apps: {}, + /** + Creates a namespace on F2 and copies the contents of an object into that + namespace optionally overwriting existing properties. + @method extend + @param {string} ns The namespace to create. Pass a falsy value to + add properties to the F2 namespace directly. + @param {object} obj The object to copy into the namespace. + @param {bool} overwrite True if object properties should be overwritten + @return {object} The created object + */ + extend: function(ns, obj, overwrite) { + var isFunc = typeof obj === 'function'; + var parts = ns ? ns.split('.') : []; + var parent = this; + obj = obj || {}; + + // Ignore leading global + if (parts[0] === 'F2') { + parts = parts.slice(1); + } + + // Create namespaces + for (var i = 0, len = parts.length; i < len; i++) { + if (!parent[parts[i]]) { + parent[parts[i]] = isFunc && (i + 1 === len) ? obj : {}; + } + parent = parent[parts[i]]; + } + + // Copy object into namespace + if (!isFunc) { + for (var prop in obj) { + if (parent[prop] === undefined || overwrite) { + parent[prop] = obj[prop]; + } + } + } + + return parent; + }, + /** + Generates a somewhat random id + @method guid + @return {string} A random id + @for F2 + */ + guid: function() { + function s4() { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + } + return (s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4()); + }, + /** + Search for a value within an array. + @method inArray + @param {object} value The value to search for + @param {Array} array The array to search + @return {bool} True if the item is in the array + */ + inArray: function(value, array) { + return jQuery.inArray(value, array) > -1; + }, + /** + Tests a URL to see if it's on the same domain (local) or not + @method isLocalRequest + @param {string} url The url to test + @returns {bool} Whether the URL is local or not + Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js + */ + isLocalRequest: function(url) { + var urlLower = url.toLowerCase(); + var relUrlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var parts = relUrlPattern.execute(urlLower); + var ajaxLocation; + var ajaxLocParts; + + try { + ajaxLocation = location.href; + } catch ( e ) { + // Use the href of an anchor since IE account for document.location + ajaxLocation = document.createElement('a'); + ajaxLocation.href = ''; + ajaxLocation = ajaxLocation.href; + } + + ajaxLocation = ajaxLocation.toLowerCase(); + + // The url is relative, so we'll fully qualify it and re-regex + if (!parts) { + urlLower = _absolutizeURI(ajaxLocation, urlLower).toLowerCase(); + parts = relUrlPattern.exec(urlLower); + } + + // Segment location into parts + ajaxLocParts = relUrlPattern.exec(ajaxLocation) || []; + + // Do hostname and protocol and port of manifest URL match location.href? + var matched = !(parts && + (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || + (parts[3] || (parts[1] === 'http:' ? '80' : '443')) !== + (ajaxLocParts[3] || (ajaxLocParts[1] === 'http:' ? '80' : '443')))); + + return matched; + }, + /** + Utility method to determine whether or not the argument passed in is or + is not a native DOM node. + @method isNativeDOMNode + @param {object} testObject The object you want to check as native DOM + node. + @return {bool} Returns true if the object passed is a native DOM node. + */ + isNativeDOMNode: function(testObject) { + return _isNode(testObject) || _isElement(testObject); + }, + /** + A utility logging function to write messages or objects to the browser + console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). + @method log + @param {object|string} Object/Method An object to be logged _or_ a + `console` API method name, such as `warn` or `error`. All of the console + method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). + @param {object} [obj2]* An object to be logged + @example + Pass any value (string, int, array, object, bool). + F2.log('foo'); + F2.log([1, 2, 3]); + @example + Use a console method name as the first argument. + F2.log('error', err); + F2.log('info', 'The session ID is ' + sessionId); + */ + log: function() { + if (!window.console) { + return; + } + + var method = 'log'; + var args = Array.prototype.slice.apply(arguments); + + if (args.length > 1 && args[0] in window.console) { + method = args.shift(); + } + + if (window.console[method]) { + window.console[method].apply(window.console, args); + } + }, + /** + Wrapper to convert a JSON string to an object + @method parse + @param {string} str The JSON string to convert + @return {object} The parsed object + */ + parse: function(str) { + return JSON.parse(str); + }, + /** + Wrapper to convert an object to JSON + **Note: When using F2.stringify on an F2.AppConfig object, it is + recommended to pass F2.appConfigReplacer as the replacer function in + order to prevent circular serialization errors.** + @method stringify + @param {object} value The object to convert + @param {function|Array} replacer An optional parameter that determines + how object values are stringified for objects. It can be a function or an + array of strings. + @param {int|string} space An optional parameter that specifies the + indentation of nested structures. If it is omitted, the text will be + packed without extra whitespace. If it is a number, it will specify the + number of spaces to indent at each level. If it is a string (such as '\t' + or ' '), it contains the characters used to indent at each level. + @return {string} The JSON string + */ + stringify: function(value, replacer, space) { + return JSON.stringify(value, replacer, space); + }, + /** + Function to get the F2 version number + @method version + @return {string} F2 version number + */ + version: function() { + return '1.4.0'; + } + }; })(); /** - * The new `AppHandlers` functionality provides Container Developers a higher level of control over configuring app rendering and interaction. - * - *

- *The addition of `F2.AppHandlers` replaces the previous {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} properties `beforeAppRender`, `appRender`, and `afterAppRender`. These methods were deprecated—but not removed—in version 1.2. They will be permanently removed in a future version of F2. - *

- * - *

- *Starting with F2 version 1.2, `AppHandlers` is the preferred method for Container Developers to manage app layout. - *

- * - * ### Order of Execution - * - * **App Rendering** - * - * 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. - * 1. **'appCreateRoot'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_CREATE\_ROOT*) handlers are fired in the order they were attached. - * 2. **'appRenderBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_BEFORE*) handlers are fired in the order they were attached. - * 3. Each app's `manifestUrl` is requested asynchronously; on success the following methods are fired. - * 3. **'appRender'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER*) handlers are fired in the order they were attached. - * 4. **'appRenderAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_AFTER*) handlers are fired in the order they were attached. - * - * - * **App Removal** + The new `AppHandlers` functionality provides Container Developers a higher + level of control over configuring app rendering and interaction. - * 0. {{#crossLink "F2/removeApp"}}F2.removeApp(){{/crossLink}} with a specific {{#crossLink "F2.AppConfig/instanceId "}}{{/crossLink}} or {{#crossLink "F2/removeAllApps"}}F2.removeAllApps(){{/crossLink}} method is called by the Container Developer and the following methods are run. - * 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. - * 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. - * 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - * - * **Error Handling** +

+ The addition of `F2.AppHandlers` replaces the previous {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} properties `beforeAppRender`, `appRender`, and `afterAppRender`. These methods were deprecated—but not removed—in version 1.2. They will be permanently removed in a future version of F2. +

- * 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - * - * @class F2.AppHandlers - */ -F2.extend('AppHandlers', (function() { +

+ Starting with F2 version 1.2, `AppHandlers` is the preferred method for + Container Developers to manage app layout. +

- // The hidden token that we will check against every time someone tries to add, remove, fire handler - var _containerToken = F2.guid(); - var _f2Token = F2.guid(); - - var _handlerCollection = { - appCreateRoot: [], - appRenderBefore: [], - appDestroyBefore: [], - appRenderAfter: [], - appDestroyAfter: [], - appRender: [], - appDestroy: [], - appScriptLoadFailed: [] - }; - - var _defaultMethods = { - appRender: function(appConfig, appHtml) { - // If no app root is defined use the app's outer most node - if (F2.isNativeDOMNode(appConfig.root)) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } + ### Order of Execution - document.body.appendChild(appConfig.root); - }, - appDestroy: function(appInstance) { - if (appInstance.app && appInstance.app.destroy) { - if (typeof appInstance.app.destroy === 'function') { - appInstance.app.destroy(); - } else { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - } - } + **App Rendering** - jQuery(appInstance.config.root).fadeOut(500, function() { - jQuery(this).remove(); - }); - } - }; + 0. {{#crossLink "F2/registerApps"}}F2.registerApps(){{/crossLink}} method is called by the Container Developer and the following methods are run for *each* {{#crossLink "F2.AppConfig"}}{{/crossLink}} passed. + 1. **'appCreateRoot'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_CREATE\_ROOT*) handlers are fired in the order they were attached. + 2. **'appRenderBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_BEFORE*) handlers are fired in the order they were attached. + 3. Each app's `manifestUrl` is requested asynchronously; on success the following methods are fired. + 3. **'appRender'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER*) handlers are fired in the order they were attached. + 4. **'appRenderAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_RENDER\_AFTER*) handlers are fired in the order they were attached. - function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { - _validateToken(token); + **App Removal** - var handler = { - domNode: null, - func: null, - namespace: namespace - }; + 0. {{#crossLink "F2/removeApp"}}F2.removeApp(){{/crossLink}} with a specific {{#crossLink "F2.AppConfig/instanceId "}}{{/crossLink}} or {{#crossLink "F2/removeAllApps"}}F2.removeAllApps(){{/crossLink}} method is called by the Container Developer and the following methods are run. + 1. **'appDestroyBefore'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_BEFORE*) handlers are fired in the order they were attached. + 2. **'appDestroy'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY*) handlers are fired in the order they were attached. + 3. **'appDestroyAfter'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_DESTROY\_AFTER*) handlers are fired in the order they were attached. - if (F2.isNativeDOMNode(fnOrNode)) { - handler.domNode = fnOrNode; - } else if (typeof fnOrNode === 'function') { - handler.func = fnOrNode; - } + **Error Handling** - if (!handler.func && !handler.domNode) { - throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); - } - - if (handler.domNode && !domNodeAppropriate) { - throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); - } - - return handler; - } - - // Token must match F2 or container - function _validateToken(token) { - if (_containerToken !== token && _f2Token !== token) { - throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); - } - } - - // Token must match F2 - function _validateF2Token(token) { - if (token != _f2Token) { - throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); - } - } - - function _filterHandlersByNamespace(handlers, namespace) { - var newHandlers = handlers.slice(); - - for (var i = newHandlers.length; i >= 0; i--) { - if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { - newHandlers.splice(i, 1); - } - } - - return newHandlers; - } - - function _removeHandler(token, eventKey, namespace) { - _validateToken(token); - - if (namespace) { - namespace = namespace.toLowerCase(); - - if (eventKey && eventKey in _handlerCollection) { - _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); - } else { - for (var key in _handlerCollection) { - _removeHandler(token, key, namespace); - } - } - } else if (eventKey) { - _handlerCollection[eventKey] = []; - } - } - - function _parseEventKey(eventKey) { - var namespace = ''; - - if (eventKey.indexOf('.') !== -1) { - var eventParts = eventKey.split('.'); - eventKey = eventParts[0]; - namespace = eventParts[1]; - } - - return { - key: eventKey, - namespace: namespace - }; - } - - return { - /** - * Allows Container Developer to retrieve a unique token which must be - * passed to all `on` and `off` methods. This function will self destruct - * and can only be called one time. Container Developers must store the - * return value inside of a closure. - * @method getToken - */ - getToken: function() { - /** - * Delete this method for security that way only the container has - * access to the token 1 time. Kind of Ethan Hunt-ish, this message will - * self-destruct immediately. - */ - delete this.getToken; - return _containerToken; - }, - /** - * Allows F2 to get a token internally. Token is required to call - * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This - * function will self destruct to eliminate other sources from using the - * {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and - * additional internal methods. - * @method __f2GetToken - * @private - */ - __f2GetToken: function() { - /** - * Delete this method for security that way only the container has - * access to the token 1 time. Kind of Ethan Hunt-ish, this message will - * self-destruct immediately. - */ - delete this.__f2GetToken; - return _f2Token; - }, - /** - * Allows F2 to trigger specific events internally. - * @method __trigger - * @private - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. - * @param {String} eventKey The event to fire. The complete list of event - * keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - */ - __trigger: function(token, eventKey) { - _validateF2Token(token); - - if (!_handlerCollection[eventKey]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } - - var callbackArgs = Array.prototype.slice.call(arguments, 2); - - if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { - _defaultMethods[eventKey].apply(F2, callbackArgs); - } else { - for (var i = 0; i < _handlerCollection[eventKey].length; i++) { - var handler = _handlerCollection[eventKey][i]; - - // Check for appRender - if (handler.domNode && arguments.length >= 4) { - var appConfig = arguments[2]; - var appHtml = arguments[3]; - - if (appConfig.root) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } - - jQuery(handler.domNode).append(appConfig.root); - } else { - handler.func.apply(F2, callbackArgs); - } - } - } - - return this; - }, - /** - * Allows Container Developer to add listener method that will be triggered - * when a specific event occurs. - * @method on - * @chainable - * @param {String} token The token received from - * {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine - * which event to attach the listener to. The namespace is useful for - * removal purposes. At this time it does not affect when an event is fired. - * Complete list of event keys available in - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @param {Function|Element} listener A function that will be triggered - * when a specific event occurs. Optionally, a specific DOM element to - * which the app will be appended can be passed. For detailed argument - * definition refer to - * {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * 'appRenderBefore', - * function() { - * F2.log('before app rendered!'); - * } - * ); - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * 'appRenderBefore.myNamespace', - * function() { - * F2.log('before app rendered!'); - * } - * ); - */ - on: function(token, eventKey, listener) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - var event = _parseEventKey(eventKey); + 0. **'appScriptLoadFailed'** (*{{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}.APP\_SCRIPT\_LOAD\_FAILED*) handlers are fired in the order they were attached. - if (!_handlerCollection[event.key]) { - throw new Error('Invalid eventKey passed. Check your inputs and try again.'); - } - - var isAppRender = (event.key === 'appRender'); - var handler = _createHandler(token, event.namespace, listener, isAppRender); - _handlerCollection[event.key].push(handler); - - return this; - }, - /** - * Allows Container Developer to remove listener methods for specific events - * @method off - * @chainable - * @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - * @param {String} eventKey{.namespace} The event key used to determine - * which event to attach the listener to. If no namespace is provided all - * listeners for the specified event type will be removed. Complete list - * available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.off(token, 'appRenderBefore'); - */ - off: function(token, eventKey) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } - - var event = _parseEventKey(eventKey); - - if (!_handlerCollection[event.key]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } - - _removeHandler(token, event.key, event.namespace); + @class F2.AppHandlers +*/ +F2.extend('AppHandlers', (function() { - return this; - } - }; + // Token used when adding, removing, or triggering handlers + var _containerToken = F2.guid(); + var _f2Token = F2.guid(); + + var _handlerCollection = { + appCreateRoot: [], + appRenderBefore: [], + appDestroyBefore: [], + appRenderAfter: [], + appDestroyAfter: [], + appRender: [], + appDestroy: [], + appScriptLoadFailed: [] + }; + + var _defaultMethods = { + appRender: function(appConfig, appHtml) { + // If no app root is defined use the app's outer most node + if (F2.isNativeDOMNode(appConfig.root)) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } + + document.body.appendChild(appConfig.root); + }, + appDestroy: function(appInstance) { + if (appInstance.app && appInstance.app.destroy) { + if (typeof appInstance.app.destroy === 'function') { + appInstance.app.destroy(); + } else { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } + } + + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + }; + + function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { + _validateToken(token); + + var handler = { + domNode: null, + func: null, + namespace: namespace + }; + + if (F2.isNativeDOMNode(fnOrNode)) { + handler.domNode = fnOrNode; + } else if (typeof fnOrNode === 'function') { + handler.func = fnOrNode; + } + + if (!handler.func && !handler.domNode) { + throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); + } + + if (handler.domNode && !domNodeAppropriate) { + throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); + } + + return handler; + } + + // Token must match F2 or container + function _validateToken(token) { + if (_containerToken !== token && _f2Token !== token) { + throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); + } + } + + // Token must match F2 + function _validateF2Token(token) { + if (token !== _f2Token) { + throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); + } + } + + function _filterHandlersByNamespace(handlers, namespace) { + var newHandlers = handlers.slice(); + + for (var i = newHandlers.length; i >= 0; i--) { + if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { + newHandlers.splice(i, 1); + } + } + + return newHandlers; + } + + function _removeHandler(token, eventKey, namespace) { + _validateToken(token); + + if (namespace) { + namespace = namespace.toLowerCase(); + + if (eventKey && eventKey in _handlerCollection) { + _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); + } else { + for (var key in _handlerCollection) { + _removeHandler(token, key, namespace); + } + } + } else if (eventKey) { + _handlerCollection[eventKey] = []; + } + } + + function _parseEventKey(eventKey) { + var namespace = ''; + + if (eventKey.indexOf('.') !== -1) { + var eventParts = eventKey.split('.'); + eventKey = eventParts[0]; + namespace = eventParts[1]; + } + + return { + key: eventKey, + namespace: namespace + }; + } + + return { + /** + Allows Container Developer to retrieve a unique token which must be + passed to all `on` and `off` methods. This function will self destruct + and can only be called one time. Container Developers must store the + return value inside of a closure. + @method getToken + @returns {string} A one-time container token + */ + getToken: function() { + /** + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.getToken; + return _containerToken; + }, + /** + Allows F2 to get a token internally. Token is required to call + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This + function will self destruct to eliminate other sources from using the + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and + additional internal methods. + @method __f2GetToken + @private + @returns {string} A one-time container token + */ + __f2GetToken: function() { + /** + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.__f2GetToken; + return _f2Token; + }, + /** + Allows F2 to trigger specific events internally. + @method __trigger + @private + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. + @param {String} eventKey The event to fire. The complete list of event + keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + */ + __trigger: function(token, eventKey) { + _validateF2Token(token); + + if (!_handlerCollection[eventKey]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } + + var callbackArgs = Array.prototype.slice.call(arguments, 2); + + if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { + _defaultMethods[eventKey].apply(F2, callbackArgs); + } else { + for (var i = 0; i < _handlerCollection[eventKey].length; i++) { + var handler = _handlerCollection[eventKey][i]; + + // Check for appRender + if (handler.domNode && arguments.length >= 4) { + var appConfig = arguments[2]; + var appHtml = arguments[3]; + + if (appConfig.root) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } + + jQuery(handler.domNode).append(appConfig.root); + } else { + handler.func.apply(F2, callbackArgs); + } + } + } + + return this; + }, + /** + Allows Container Developer to add listener method that will be triggered + when a specific event occurs. + @method on + @chainable + @param {String} token The token received from + {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. The namespace is useful for + removal purposes. At this time it does not affect when an event is fired. + Complete list of event keys available in + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @param {Function} listener A function that will be triggered when a + specific event occurs. For detailed argument definition refer to + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + 'appRenderBefore' + function() { + F2.log('before app rendered!'); + } + ); + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + 'appRenderBefore.myNamespace', + function() { + F2.log('before app rendered!'); + } + ); + */ + on: function(token, eventKey, listener) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid eventKey passed. Check your inputs and try again.'); + } + + var isAppRender = (event.key === 'appRender'); + var handler = _createHandler(token, event.namespace, listener, isAppRender); + _handlerCollection[event.key].push(handler); + + return this; + }, + /** + Allows Container Developer to remove listener methods for specific events + @method off + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. If no namespace is provided all + listeners for the specified event type will be removed. Complete list + available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.off(token, 'appRenderBefore'); + */ + off: function(token, eventKey) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } + + var event = _parseEventKey(eventKey); + + if (!_handlerCollection[event.key]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } + + _removeHandler(token, event.key, event.namespace); + + return this; + } + }; })()); F2.extend('Constants', { - /** - * A convenient collection of all available appHandler events. - * @class F2.Constants.AppHandlers - **/ - AppHandlers: { - /** - * Equivalent to `appCreateRoot`. Identifies the create root method for use - * in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - * @property APP_CREATE_ROOT - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_CREATE_ROOT, - * function(appConfig) { - * // If you want to create a custom root. By default F2 uses the app's outermost HTML element. - * // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER - * appConfig.root = jQuery('
').get(0); - * } - * ); - */ - APP_CREATE_ROOT: 'appCreateRoot', - /** - * Equivalent to `appRenderBefore`. Identifies the before app render method - * for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - * @property APP_RENDER_BEFORE - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER_BEFORE, - * function(appConfig) { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_BEFORE: 'appRenderBefore', - /** - * Equivalent to `appRender`. Identifies the app render method for use in - * AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, - * [appHtml](../../app-development.html#app-design)). - * @property APP_RENDER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER, - * function(appConfig, appHtml) { - * var $root; - * - * // If no app root is defined use the app's outer most node - * if (!F2.isNativeDOMNode(appConfig.root)) { - * appConfig.root = jQuery(appHtml).get(0); - * // Get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * } else { - * // Get a handle on the root in jQuery - * $root = jQuery(appConfig.root); - * // Append the app html to the root - * $root.append(appHtml); - * } - * - * // Append the root to the body by default. - * jQuery('body').append($root); - * } - * ); - */ - APP_RENDER: 'appRender', - /** - * Equivalent to `appRenderAfter`. Identifies the after app render method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( {{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}} ) - * @property APP_RENDER_AFTER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_RENDER_AFTER, - * function(appConfig) { - * F2.log(appConfig); - * } - * ); - */ - APP_RENDER_AFTER: 'appRenderAfter', - /** - * Equivalent to `appDestroyBefore`. Identifies the before app destroy - * method for use in AppHandlers.(on|off). When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * (appInstance). - * @property APP_DESTROY_BEFORE - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - * function(appInstance) { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_BEFORE: 'appDestroyBefore', - /** - * Equivalent to `appDestroy`. Identifies the app destroy method for use in AppHandlers.on/off. - * When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the listener function passed will receive the - * following argument(s): ( appInstance ) - * @property APP_DESTROY - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY, - * function(appInstance) { - * // Call the apps destroy method, if it has one - * if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { - * appInstance.app.destroy(); - * } else if (appInstance && appInstance.app && appInstance.app.destroy) { - * F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - * } - * - * // Fade out and remove the root - * jQuery(appInstance.config.root).fadeOut(500, function() { - * jQuery(this).remove(); - * }); - * } - * ); - */ - APP_DESTROY: 'appDestroy', - /** - * Equivalent to `appDestroyAfter`. Identifies the after app destroy method - * for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - * listener function passed will receive the following argument(s): - * (appInstance) - * @property APP_DESTROY_AFTER - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_DESTROY_AFTER, - * function(appInstance) { - * F2.log(appInstance); - * } - * ); - */ - APP_DESTROY_AFTER: 'appDestroyAfter', - /** - * Equivalent to `appScriptLoadFailed`. Identifies the app script load - * failed method for use in AppHandlers.on/off. When bound using - * {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} - * the listener function passed will receive the following argument(s): - * ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) - * @property APP_SCRIPT_LOAD_FAILED - * @type string - * @static - * @final - * @example - * var token = F2.AppHandlers.getToken(); - * F2.AppHandlers.on( - * token, - * F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - * function(appConfig, scriptInfo) { - * F2.log(appConfig.appId); - * } - * ); - */ - APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' - } + /** + A convenient collection of all available appHandler events. + @class F2.Constants.AppHandlers + */ + AppHandlers: { + /** + Equivalent to `appCreateRoot`. Identifies the create root method for use + in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_CREATE_ROOT + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_CREATE_ROOT, + function(appConfig) { + // If you want to create a custom root. By default F2 uses the app's outermost HTML element. + // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER + appConfig.root = jQuery('
').get(0); + } + ); + */ + APP_CREATE_ROOT: 'appCreateRoot', + /** + Equivalent to `appRenderBefore`. Identifies the before app render method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_RENDER_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_BEFORE: 'appRenderBefore', + /** + Equivalent to `appRender`. Identifies the app render method for use in + AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, + [appHtml](../../app-development.html#app-design)). + @property APP_RENDER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER, + function(appConfig, appHtml) { + var $root; + + // If no app root is defined use the app's outer most node + if (!F2.isNativeDOMNode(appConfig.root)) { + appConfig.root = jQuery(appHtml).get(0); + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + } else { + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + // Append the app html to the root + $root.append(appHtml); + } + + // Append the root to the body by default. + jQuery('body').append($root); + } + ); + */ + APP_RENDER: 'appRender', + /** + Equivalent to `appRenderAfter`. Identifies the after app render method + for use in AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}) + @property APP_RENDER_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_AFTER: 'appRenderAfter', + /** + Equivalent to `appDestroyBefore`. Identifies the before app destroy + method for use in AppHandlers.(on|off). When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance). + @property APP_DESTROY_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_BEFORE: 'appDestroyBefore', + /** + Equivalent to `appDestroy`. Identifies the app destroy method for use in + AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY, + function(appInstance) { + // Call the apps destroy method, if it has one + if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { + appInstance.app.destroy(); + } else if (appInstance && appInstance.app && appInstance.app.destroy) { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } + + // Fade out and remove the root + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + ); + */ + APP_DESTROY: 'appDestroy', + /** + Equivalent to `appDestroyAfter`. Identifies the after app destroy method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_AFTER: 'appDestroyAfter', + /** + Equivalent to `appScriptLoadFailed`. Identifies the app script load + failed method for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) + @property APP_SCRIPT_LOAD_FAILED + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + function(appConfig, scriptInfo) { + F2.log(appConfig.appId); + } + ); + */ + APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + } }); /** - * Class stubs for documentation purposes - * @main F2 - */ + Class stubs for documentation purposes + @main F2 +*/ F2.extend('', { - /** - * The App Class is an optional class that can be namespaced onto the - * {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The - * [F2 Docs](../../app-development.html#app-class) - * has more information on the usage of the App Class. - * @class F2.App - * @constructor - * @param {F2.AppConfig} appConfig The F2.AppConfig object for the app - * @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent - * object - * @param {Element} root The root DOM Element for the app - */ - App: function(appConfig, appContent, root) { - return { - /** - * An optional init function that will automatically be called when - * F2.{{#crossLink "F2\registerApps"}}{{/crossLink}} is called. - * @method init - * @optional - */ - init:function() {} - }; - }, - /** - * The AppConfig object represents an app's meta data - * @class F2.AppConfig - */ - AppConfig: { - /** - * The unique ID of the app. More information can be found - * [here](../../app-development.html#f2-appid) - * @property appId - * @type string - * @required - */ - appId: '', - /** - * An object that represents the context of an app - * @property context - * @type object - */ - context: {}, - /** - * True if the app should be requested in a single request with other apps. - * @property enableBatchRequests - * @type bool - * @default false - */ - enableBatchRequests: false, - /** - * The height of the app. The initial height will be pulled from - * the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object, but later - * modified by calling - * F2.UI.{{#crossLink "F2.UI/updateHeight"}}{{/crossLink}}. This is used - * for secure apps to be able to set the initial height of the iframe. - * @property height - * @type int - */ - height: 0, - /** - * The unique runtime ID of the app. - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property instanceId - * @type string - */ - instanceId: '', - /** - * True if the app will be loaded in an iframe. This property - * will be true if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object - * sets isSecure = true. It will also be true if the - * [container](../../container-development.html) has made the decision to - * run apps in iframes. - * @property isSecure - * @type bool - * @default false - */ - isSecure: false, - /** - * The language and region specification for this container - * represented as an IETF-defined standard language tag, - * e.g. `"en-us"` or `"de-de"`. This is passed during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process. - * - * @property containerLocale - * @type string - * @default null - * @since 1.4.0 - */ - containerLocale: null, - /** - * The languages and regions supported by this app represented - * as an array of IETF-defined standard language tags, - * e.g. `["en-us","de-de"]`. - * - * @property localeSupport - * @type array - * @default [] - * @since 1.4.0 - */ - localeSupport: [], - /** - * The url to retrieve the {{#crossLink "F2.AppManifest"}}{{/crossLink}} - * object. - * @property manifestUrl - * @type string - * @required - */ - manifestUrl: '', - /** - * The recommended maximum width in pixels that this app should be run. - * **It is up to the [container](../../container-development.html) to - * implement the logic to prevent an app from being run when the maxWidth - * requirements are not met.** - * @property maxWidth - * @type int - */ - maxWidth: 0, - /** - * The recommended minimum grid size that this app should be run. This - * value corresponds to the 12-grid system that is used by the - * [container](../../container-development.html). This property should be - * set by apps that require a certain number of columns in their layout. - * @property minGridSize - * @type int - * @default 4 - */ - minGridSize: 4, - /** - * The recommended minimum width in pixels that this app should be run. **It - * is up to the [container](../../container-development.html) to implement - * the logic to prevent an app from being run when the minWidth requirements - * are not met. - * @property minWidth - * @type int - * @default 300 - */ - minWidth: 300, - /** - * The name of the app - * @property name - * @type string - * @required - */ - name: '', - /** - * The root DOM element that contains the app - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property root - * @type Element - */ - root: undefined, - /** - * The instance of F2.UI providing easy access to F2.UI methods - * - * **This property is populated during the - * F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** - * @property ui - * @type F2.UI - */ - ui: undefined, - /** - * The views that this app supports. Available views - * are defined in {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The - * presence of a view can be checked via - * F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: - * - * F2.inArray(F2.Constants.Views.SETTINGS, app.views) - * - * @property views - * @type Array - */ - views: [] - }, - /** - * The assets needed to render an app on the page - * @class F2.AppManifest - */ - AppManifest: { - /** - * The array of {{#crossLink "F2.AppManifest.AppContent"}}{{/crossLink}} - * objects - * @property apps - * @type Array - * @required - */ - apps: [], - /** - * Any inline javascript tha should initially be run - * @property inlineScripts - * @type Array - * @optional - */ - inlineScripts: [], - /** - * Urls to javascript files required by the app - * @property scripts - * @type Array - * @optional - */ - scripts: [], - /** - * Urls to CSS files required by the app - * @property styles - * @type Array - * @optional - */ - styles: [] - }, - /** - * The AppContent object - * @class F2.AppManifest.AppContent - **/ - AppContent: { - /** - * Arbitrary data to be passed along with the app - * @property data - * @type object - * @optional - */ - data: {}, - /** - * The string of HTML representing the app - * @property html - * @type string - * @required - */ - html: '', - /** - * A status message - * @property status - * @type string - * @optional - */ - status: '' - }, - /** - * An object containing configuration information for the - * [container](../../container-development.html) - * @class F2.ContainerConfig - */ - ContainerConfig: { - /** - * Allows the [container](../../container-development.html) to override how - * an app's html is inserted into the page. The function should accept an - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of - * html - * @method afterAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html representing the app - * @return {Element} The DOM Element surrounding the app - */ - afterAppRender: function(appConfig, html) {}, - /** - * Allows the [container](../../container-development.html) to wrap an app - * in extra html. The function should accept an - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of - * html. The extra html can provide links to edit app settings and remove an - * app from the container. See - * {{#crossLink "F2.Constants.Css"}}{{/crossLink}} for CSS classes that - * should be applied to elements. - * @method appRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html representing the app - */ - appRender: function(appConfig, html) {}, - /** - * Allows the container to render html for an app before the AppManifest for - * an app has loaded. This can be useful if the design calls for loading - * icons to appear for each app before each app is loaded and rendered to - * the page. - * @method beforeAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {Element} The DOM Element surrounding the app - */ - beforeAppRender: function(appConfig) {}, - /** - * True to enable debug mode in F2.js. Adds additional logging, resource cache busting, etc. - * @property debugMode - * @type bool - * @default false - */ - debugMode: false, - /** - * The default language and region specification for this container - * represented as an IETF-defined standard language tag, - * e.g. `"en-us"` or `"de-de"`. This value is passed to each app - * registered as `containerLocale`. - * - * @property locale - * @type string - * @default null - * @since 1.4.0 - */ - locale: null, - /** - * Milliseconds before F2 fires callback on script resource load errors. Due to issue with the way Internet Explorer attaches load events to script elements, the error event doesn't fire. - * @property scriptErrorTimeout - * @type milliseconds - * @default 7000 (7 seconds) - */ - scriptErrorTimeout: 7000, - /** - * Tells the container that it is currently running within - * a secure app page - * @property isSecureAppPage - * @type bool - */ - isSecureAppPage: false, - /** - * Allows the container to specify which page is used when - * loading a secure app. The page must reside on a different domain than the - * container - * @property secureAppPagePath - * @type string - * @for F2.ContainerConfig - */ - secureAppPagePath: '', - /** - * Specifies what views a container will provide buttons - * or links to. Generally, the views will be switched via buttons or links - * in the app's header. - * @property supportedViews - * @type Array - * @required - */ - supportedViews: [], - /** - * An object containing configuration defaults for F2.UI - * @class F2.ContainerConfig.UI - */ - UI: { - /** - * An object containing configuration defaults for the - * F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} and - * F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. - * @class F2.ContainerConfig.UI.Mask - */ - Mask: { - /** - * The backround color of the overlay - * @property backgroundColor - * @type string - * @default #FFF - */ - backgroundColor: '#FFF', - /** - * The path to the loading icon - * @property loadingIcon - * @type string - */ - loadingIcon: '', - /** - * The opacity of the background overlay - * @property opacity - * @type int - * @default 0.6 - */ - opacity: 0.6, - /** - * Do not use inline styles for mask functinality. Instead classes will - * be applied to the elements and it is up to the container provider to - * implement the class definitions. - * @property useClasses - * @type bool - * @default false - */ - useClasses: false, - /** - * The z-index to use for the overlay - * @property zIndex - * @type int - * @default 2 - */ - zIndex: 2 - } - }, - /** - * Allows the container to fully override how the AppManifest request is - * made inside of F2. - * - * @method xhr - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @param {function} success The function to be called if the request - * succeeds - * @param {function} error The function to be called if the request fails - * @param {function} complete The function to be called when the request - * finishes (after success and error callbacks have been executed) - * @return {XMLHttpRequest} The XMLHttpRequest object (or an object that has - * an `abort` function (such as the jqXHR object in jQuery) to abort the - * request) - * - * @example - * F2.init({ - * xhr: function(url, appConfigs, success, error, complete) { - * $.ajax({ - * url: url, - * type: 'POST', - * data: { - * params: F2.stringify(appConfigs, F2.appConfigReplacer) - * }, - * jsonp: false, // do not put 'callback=' in the query string - * jsonpCallback: F2.Constants.JSONP_CALLBACK + appConfigs[0].appId, // Unique function name - * dataType: 'json', - * success: function(appManifest) { - * // custom success logic - * success(appManifest); // fire success callback - * }, - * error: function() { - * // custom error logic - * error(); // fire error callback - * }, - * complete: function() { - * // custom complete logic - * complete(); // fire complete callback - * } - * }); - * } - * }); - * - * @for F2.ContainerConfig - */ - //xhr: function(url, appConfigs, success, error, complete) {}, - /** - * Allows the container to override individual parts of the AppManifest - * request. See properties and methods with the `xhr.` prefix. - * @property xhr - * @type Object - * - * @example - * F2.init({ - * xhr: { - * url: function(url, appConfigs) { - * return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); - * } - * } - * }); - */ - xhr: { - /** - * Allows the container to override the request data type (JSON or JSONP) - * that is used for the request - * @method xhr.dataType - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The request data type that should be used - * - * @example - * F2.init({ - * xhr: { - * dataType: function(url) { - * return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - * }, - * type: function(url) { - * return F2.isLocalRequest(url) ? 'POST' : 'GET'; - * } - * } - * }); - */ - dataType: function(url, appConfigs) {}, - /** - * Allows the container to override the request method that is used (just - * like the `type` parameter to `jQuery.ajax()`. - * @method xhr.type - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The request method that should be used - * - * @example - * F2.init({ - * xhr: { - * dataType: function(url) { - * return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - * }, - * type: function(url) { - * return F2.isLocalRequest(url) ? 'POST' : 'GET'; - * } - * } - * }); - */ - type: function(url, appConfigs) {}, - /** - * Allows the container to override the url that is used to request an - * app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}} - * @method xhr.url - * @param {string} url The manifest url - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @return {string} The url that should be used for the request - * - * @example - * F2.init({ - * xhr: { - * url: function(url, appConfigs) { - * return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); - * } - * } - * }); - */ - url: function(url, appConfigs) {} - }, - /** - * Allows the container to override the script loader which requests - * dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - * @property loadScripts - * @type function - * - * @example - * F2.init({ - * loadScripts: function(scripts,inlines,callback){ - * //load scripts using $.load() for each script or require(scripts) - * callback(); - * } - * }); - */ - loadScripts: function(scripts,inlines,callback){}, - /** - * Allows the container to override the stylesheet loader which requests - * dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. - * @property loadStyles - * @type function - * - * @example - * F2.init({ - * loadStyles: function(styles,callback){ - * //load styles using $.load() for each stylesheet or another method - * callback(); - * } - * }); - */ - loadStyles: function(styles,callback){} - } + /** + The App Class is an optional class that can be namespaced onto the + {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The + [F2 Docs](../../app-development.html#app-class) has more information on the + usage of the App Class. + @class F2.App + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object for the app + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object + @param {Element} root The root DOM Element for the app + */ + App: function(appConfig, appContent, root) { + return { + /** + An optional init function that will automatically be called when + F2.{{#crossLink "F2\registerApps"}}{{/crossLink}} is called. + @method init + @optional + */ + init: function() {} + }; + }, + /** + The AppConfig object represents an app's meta data + @class F2.AppConfig + */ + AppConfig: { + /** + The unique ID of the app. More information can be found + [here](../../app-development.html#f2-appid). + @property appId + @type string + @required + */ + appId: '', + /** + An object that represents the context of an app. + @property context + @type object + */ + context: {}, + /** + True if the app should be requested in a single request with other apps. + @property enableBatchRequests + @type bool + @default false + */ + enableBatchRequests: false, + /** + The height of the app. The initial height will be pulled from the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object, but later modified by + calling F2.UI.{{#crossLink "F2.UI/updateHeight"}}{{/crossLink}}. This is + used for secure apps to be able to set the initial height of the iframe. + @property height + @type int + */ + height: 0, + /** + The unique runtime ID of the app. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process** + @property instanceId + @type string + */ + instanceId: '', + /** + True if the app will be loaded in an iframe. This property will be true + if the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object sets + `isSecure = true`. It will also be true if the + [container](../../container-development.html) has made the decision to + run apps in iframes. + @property isSecure + @type bool + @default false + */ + isSecure: false, + /** + The language and region specification for this container represented as + an IETF-defined standard language tag, e.g. `"en-us"` or `"de-de"`. This + is passed during the F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} + process. + @property containerLocale + @type string + @default null + @since 1.4.0 + */ + containerLocale: null, + /** + The languages and regions supported by this app represented as an array + of IETF-defined standard language tags, e.g. `["en-us","de-de"]`. + @property localeSupport + @type array + @default [] + @since 1.4.0 + */ + localeSupport: [], + /** + The url to retrieve the {{#crossLink "F2.AppManifest"}}{{/crossLink}} + object. + @property manifestUrl + @type string + @required + */ + manifestUrl: '', + /** + The recommended maximum width in pixels that this app should be run. **It + is up to the [container](../../container-development.html) to implement + the logic to prevent an app from being run when the maxWidth requirements + are not met.** + @property maxWidth + @type int + */ + maxWidth: 0, + /** + The recommended minimum grid size that this app should be run. This value + corresponds to the 12-grid system that is used by the + [container](../../container-development.html). This property should be + set by apps that require a certain number of columns in their layout. + @property minGridSize + @type int + @default 4 + */ + minGridSize: 4, + /** + The recommended minimum width in pixels that this app should be run. + **It is up to the [container](../../container-development.html) to + implement the logic to prevent an app from being run when the minWidth + requirements are not met. + @property minWidth + @type int + @default 300 + */ + minWidth: 300, + /** + The name of the app. + @property name + @type string + @required + */ + name: '', + /** + The root DOM element that contains the app. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process.** + @property root + @type Element + */ + root: undefined, + /** + The instance of F2.UI providing easy access to F2.UI methods. + **This property is populated during the + F2.{{#crossLink "F2/registerApps"}}{{/crossLink}} process.** + @property ui + @type F2.UI + */ + ui: undefined, + /** + The views that this app supports. Available views are defined in + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}. The presence of a view + can be checked via F2.{{#crossLink "F2/inArray"}}{{/crossLink}}: + F2.inArray(F2.Constants.Views.SETTINGS, app.views). + @property views + @type Array + */ + views: [] + }, + /** + The assets needed to render an app on the page. + @class F2.AppManifest + */ + AppManifest: { + /** + The array of {{#crossLink "F2.AppManifest.AppContent"}}{{/crossLink}} + objects. + @property apps + @type Array + @required + */ + apps: [], + /** + Any inline javascript tha should initially be run. + @property inlineScripts + @type Array + @optional + */ + inlineScripts: [], + /** + Urls to javascript files required by the app. + @property scripts + @type Array + @optional + */ + scripts: [], + /** + Urls to CSS files required by the app. + @property styles + @type Array + @optional + */ + styles: [] + }, + /** + The AppContent object. + @class F2.AppManifest.AppContent + */ + AppContent: { + /** + Arbitrary data to be passed along with the app. + @property data + @type object + @optional + */ + data: {}, + /** + The string of HTML representing the app. + @property html + @type string + @required + */ + html: '', + /** + A status message. + @property status + @type string + @optional + */ + status: '' + }, + /** + An object containing configuration information for the + [container](../../container-development.html). + @class F2.ContainerConfig + */ + ContainerConfig: { + /** + Allows the [container](../../container-development.html) to override how + an app's html is inserted into the page. The function should accept an + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of + html. + @method afterAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html representing the app + @return {Element} The DOM Element surrounding the app + */ + afterAppRender: null, + /** + Allows the [container](../../container-development.html) to wrap an app + in extra html. The function should accept an + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object and also a string of + html. The extra html can provide links to edit app settings and remove an + app from the container. See + {{#crossLink "F2.Constants.Css"}}{{/crossLink}} for CSS classes that + should be applied to elements. + @method appRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html representing the app + */ + appRender: null, + /** + Allows the container to render html for an app before the AppManifest for + an app has loaded. This can be useful if the design calls for loading + icons to appear for each app before each app is loaded and rendered to + the page. + @method beforeAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app + */ + beforeAppRender: null, + /** + True to enable debug mode in F2.js. Adds additional logging, resource + cache busting, etc. + @property debugMode + @type bool + @default false + */ + debugMode: false, + /** + The default language and region specification for this container + represented as an IETF-defined standard language tag, e.g. `"en-us"` or + `"de-de"`. This value is passed to each app registered as + `containerLocale`. + @property locale + @type string + @default null + @since 1.4.0 + */ + locale: null, + /** + Milliseconds before F2 fires callback on script resource load errors. Due + to issue with the way Internet Explorer attaches load events to script + elements, the error event doesn't fire. + @property scriptErrorTimeout + @type milliseconds + @default 7000 (7 seconds) + */ + scriptErrorTimeout: 7000, + /** + Tells the container that it is currently running within a secure app page. + @property isSecureAppPage + @type bool + */ + isSecureAppPage: false, + /** + Allows the container to specify which page is used when loading a secure + app. The page must reside on a different domain than the container. + @property secureAppPagePath + @type string + @for F2.ContainerConfig + */ + secureAppPagePath: '', + /** + Specifies what views a container will provide buttons or links to. + Generally, the views will be switched via buttons or links in the app's + header. + @property supportedViews + @type Array + @required + */ + supportedViews: [], + /** + An object containing configuration defaults for F2.UI. + @class F2.ContainerConfig.UI + */ + UI: { + /** + An object containing configuration defaults for the + F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} and + F2.UI.{{#crossLink "F2.UI/hideMask"}}{{/crossLink}} methods. + @class F2.ContainerConfig.UI.Mask + */ + Mask: { + /** + The backround color of the overlay. + @property backgroundColor + @type string + @default #FFF + */ + backgroundColor: '#FFF', + /** + The path to the loading icon. + @property loadingIcon + @type string + */ + loadingIcon: '', + /** + The opacity of the background overlay. + @property opacity + @type int + @default 0.6 + */ + opacity: 0.6, + /** + Do not use inline styles for mask functinality. Instead classes will + be applied to the elements and it is up to the container provider to + implement the class definitions. + @property useClasses + @type bool + @default false + */ + useClasses: false, + /** + The z-index to use for the overlay + @property zIndex + @type int + @default 2 + */ + zIndex: 2 + } + }, + /** + Allows the container to override individual parts of the AppManifest + request. See properties and methods with the `xhr.` prefix. + @property xhr + @type Object + @example + F2.init({ + xhr: { + url: function(url, appConfigs) { + return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); + } + } + }); + */ + xhr: { + /** + Allows the container to override the request data type (JSON or JSONP) + that is used for the request. + @method xhr.dataType + @param {string} url The manifest url + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @return {string} The request data type that should be used + @example + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + */ + dataType: null, + /** + Allows the container to override the request method that is used (just + like the `type` parameter to `jQuery.ajax()`. + @method xhr.type + @param {string} url The manifest url + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @return {string} The request method that should be used + @example + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + */ + type: null, + /** + Allows the container to override the url that is used to request an + app's F2.{{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method xhr.url + @param {string} url The manifest url + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @return {string} The url that should be used for the request + @example + F2.init({ + xhr: { + url: function(url, appConfigs) { + return 'http://example.com/proxy.php?url=' + encocdeURIComponent(url); + } + } + }); + */ + url: null + }, + /** + Allows the container to override the script loader which requests + dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method loadScripts + @param {Array} scripts Script file urls to be loaded + @param {Array} inlines Inline JavaScript to be run + @param {Function} callback Should be called when loading is complete + @example + F2.init({ + loadScripts: function(scripts, inlines, callback) { + // Load scripts using $.load() for each script or require(scripts) + callback(); + } + }); + */ + loadScripts: function(scripts, inlines, callback) {}, + /** + Allows the container to override the stylesheet loader which requests + dependencies defined in the {{#crossLink "F2.AppManifest"}}{{/crossLink}}. + @method loadStyles + @param {Array} styles CSS file urls to be loaded + @param {Function} callback Should be called when loading is complete + @example + F2.init({ + loadStyles: function(styles, callback) { + // Load styles using $.load() for each stylesheet or another method + callback(); + } + }); + */ + loadStyles: function(styles, callback) {} + } }); + /** - * Constants used throughout the Open Financial Framework - * @class F2.Constants - * @static - */ + Constants used throughout the Open Financial Framework. + @class F2.Constants + @static +*/ F2.extend('Constants', { - /** - * CSS class constants - * @class F2.Constants.Css - */ - Css: (function() { - - /** @private */ - var _PREFIX = 'f2-'; - - return { - /** - * The APP class should be applied to the DOM Element that surrounds the - * entire app, including any extra html that surrounds the APP\_CONTAINER - * that is inserted by the container. See the - * {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} object. - * @property APP - * @type string - * @static - * @final - */ - APP: _PREFIX + 'app', - /** - * The APP\_CONTAINER class should be applied to the outermost DOM Element - * of the app. - * @property APP_CONTAINER - * @type string - * @static - * @final - */ - APP_CONTAINER: _PREFIX + 'app-container', - /** - * The APP\_TITLE class should be applied to the DOM Element that contains - * the title for an app. If this class is not present, then - * F2.UI.{{#crossLink "F2.UI/setTitle"}}{{/crossLink}} will not function. - * @property APP_TITLE - * @type string - * @static - * @final - */ - APP_TITLE: _PREFIX + 'app-title', - /** - * The APP\_VIEW class should be applied to the DOM Element that contains - * a view for an app. The DOM Element should also have a - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE - * attribute that specifies which - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it is. - * @property APP_VIEW - * @type string - * @static - * @final - */ - APP_VIEW: _PREFIX + 'app-view', - /** - * APP\_VIEW\_TRIGGER class should be applied to the DOM Elements that - * trigger an - * {{#crossLink "F2.Constants.Events"}}{{/crossLink}}.APP\_VIEW\_CHANGE - * event. The DOM Element should also have a - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE - * attribute that specifies which - * {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it will trigger. - * @property APP_VIEW_TRIGGER - * @type string - * @static - * @final - */ - APP_VIEW_TRIGGER: _PREFIX + 'app-view-trigger', - /** - * The MASK class is applied to the overlay element that is created - * when the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method is - * fired. - * @property MASK - * @type string - * @static - * @final - */ - MASK: _PREFIX + 'mask', - /** - * The MASK_CONTAINER class is applied to the Element that is passed into - * the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method. - * @property MASK_CONTAINER - * @type string - * @static - * @final - */ - MASK_CONTAINER: _PREFIX + 'mask-container' - }; - })(), - - /** - * Events constants - * @class F2.Constants.Events - */ - Events: (function() { - /** @private */ - var _APP_EVENT_PREFIX = 'App.'; - /** @private */ - var _CONTAINER_EVENT_PREFIX = 'Container.'; - - return { - /** - * The APP\_SYMBOL\_CHANGE event is fired when the symbol is changed in an - * app. It is up to the app developer to fire this event. - * Returns an object with the symbol and company name: - * - * { symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' } - * - * @property APP_SYMBOL_CHANGE - * @type string - * @static - * @final - */ - APP_SYMBOL_CHANGE: _APP_EVENT_PREFIX + 'symbolChange', - /** - * The APP\_WIDTH\_CHANGE event will be fired by the container when the - * width of an app is changed. The app's instanceId should be concatenated - * to this constant. - * Returns an object with the gridSize and width in pixels: - * - * { gridSize:8, width:620 } - * - * @property APP_WIDTH_CHANGE - * @type string - * @static - * @final - */ - APP_WIDTH_CHANGE: _APP_EVENT_PREFIX + 'widthChange.', - /** - * The CONTAINER\_SYMBOL\_CHANGE event is fired when the symbol is changed - * at the container level. This event should only be fired by the - * container or container provider. - * Returns an object with the symbol and company name: - * - * { symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' } - * - * @property CONTAINER_SYMBOL_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_SYMBOL_CHANGE: _CONTAINER_EVENT_PREFIX + 'symbolChange', - /** - * The CONTAINER\_WIDTH\_CHANGE event will be fired by the container when - * the width of the container has changed. - * @property CONTAINER_WIDTH_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_WIDTH_CHANGE: _CONTAINER_EVENT_PREFIX + 'widthChange', - /** - * The CONTAINER\_LOCALE\_CHANGE event will be fired by the container when - * the locale of the container has changed. This event should only be fired by the - * container or container provider. - * Returns an object with the updated locale (IETF-defined standard language tag): - * - * { locale: 'en-us' } - * - * @property CONTAINER_LOCALE_CHANGE - * @type string - * @static - * @final - */ - CONTAINER_LOCALE_CHANGE: _CONTAINER_EVENT_PREFIX + 'localeChange' - }; - })(), - - JSONP_CALLBACK: 'F2_jsonpCallback_', - - /** - * Constants for use with cross-domain sockets - * @class F2.Constants.Sockets - * @protected - */ - Sockets: { - /** - * The EVENT message is sent whenever - * F2.Events.{{#crossLink "F2.Events/emit"}}{{/crossLink}} is fired - * @property EVENT - * @type string - * @static - * @final - */ - EVENT: '__event__', - /** - * The LOAD message is sent when an iframe socket initially loads. - * Returns a JSON string that represents: - * - * [ App, AppManifest] - * - * @property LOAD - * @type string - * @static - * @final - */ - LOAD: '__socketLoad__', - /** - * The RPC message is sent when a method is passed up from within a secure - * app page. - * @property RPC - * @type string - * @static - * @final - */ - RPC: '__rpc__', - /** - * The RPC\_CALLBACK message is sent when a call back from an RPC method is - * fired. - * @property RPC_CALLBACK - * @type string - * @static - * @final - */ - RPC_CALLBACK: '__rpcCallback__', - /** - * The UI\_RPC message is sent when a UI method called. - * @property UI_RPC - * @type string - * @static - * @final - */ - UI_RPC: '__uiRpc__' - }, - - /** - * The available view types to apps. The view should be specified by applying - * the {{#crossLink "F2.Constants.Css"}}{{/crossLink}}.APP\_VIEW class to the - * containing DOM Element. A DATA\_ATTRIBUTE attribute should be added to the - * Element as well which defines what view type is represented. - * The `hide` class can be applied to views that should be hidden by default. - * @class F2.Constants.Views - */ - Views: { - /** - * The DATA_ATTRIBUTE should be placed on the DOM Element that contains the - * view. - * @property DATA_ATTRIBUTE - * @type string - * @static - * @final - */ - DATA_ATTRIBUTE: 'data-f2-view', - /** - * The ABOUT view gives details about the app. - * @property ABOUT - * @type string - * @static - * @final - */ - ABOUT: 'about', - /** - * The HELP view provides users with help information for using an app. - * @property HELP - * @type string - * @static - * @final - */ - HELP: 'help', - /** - * The HOME view is the main view for an app. This view should always - * be provided by an app. - * @property HOME - * @type string - * @static - * @final - */ - HOME: 'home', - /** - * The REMOVE view is a special view that handles the removal of an app - * from the container. - * @property REMOVE - * @type string - * @static - * @final - */ - REMOVE: 'remove', - /** - * The SETTINGS view provides users the ability to modify advanced settings - * for an app. - * @property SETTINGS - * @type string - * @static - * @final - */ - SETTINGS: 'settings' - } + /** + CSS class constants + @class F2.Constants.Css + */ + Css: { + /** + The APP class should be applied to the DOM Element that surrounds the + entire app, including any extra html that surrounds the APP\_CONTAINER + that is inserted by the container. See the + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}} object. + @property APP + @type string + @static + @final + */ + APP: 'f2-app', + /** + The APP\_CONTAINER class should be applied to the outermost DOM Element + of the app. + @property APP_CONTAINER + @type string + @static + @final + */ + APP_CONTAINER: 'f2-app-container', + /** + The APP\_TITLE class should be applied to the DOM Element that contains + the title for an app. If this class is not present, then + F2.UI.{{#crossLink "F2.UI/setTitle"}}{{/crossLink}} will not function. + @property APP_TITLE + @type string + @static + @final + */ + APP_TITLE: 'f2-app-title', + /** + The APP\_VIEW class should be applied to the DOM Element that contains + a view for an app. The DOM Element should also have a + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE + attribute that specifies which + {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it is. + @property APP_VIEW + @type string + @static + @final + */ + APP_VIEW: 'f2-app-view', + /** + APP\_VIEW\_TRIGGER class should be applied to the DOM Elements that + trigger an + {{#crossLink "F2.Constants.Events"}}{{/crossLink}}.APP\_VIEW\_CHANGE + event. The DOM Element should also have a + {{#crossLink "F2.Constants.Views"}}{{/crossLink}}.DATA_ATTRIBUTE + attribute that specifies which + {{#crossLink "F2.Constants.Views"}}{{/crossLink}} it will trigger. + @property APP_VIEW_TRIGGER + @type string + @static + @final + */ + APP_VIEW_TRIGGER: 'f2-app-view-trigger', + /** + The MASK class is applied to the overlay element that is created + when the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method is + fired. + @property MASK + @type string + @static + @final + */ + MASK: 'f2-mask', + /** + The MASK_CONTAINER class is applied to the Element that is passed into + the F2.UI.{{#crossLink "F2.UI/showMask"}}{{/crossLink}} method. + @property MASK_CONTAINER + @type string + @static + @final + */ + MASK_CONTAINER: 'f2-mask-container' + }, + /** + Events constants + @class F2.Constants.Events + */ + Events: { + /** + The APP\_SYMBOL\_CHANGE event is fired when the symbol is changed in an + app. It is up to the app developer to fire this event. Returns an object + with the symbol and company name: + `{ symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' }` + @property APP_SYMBOL_CHANGE + @type string + @static + @final + */ + APP_SYMBOL_CHANGE: 'App.symbolChange', + /** + The APP\_WIDTH\_CHANGE event will be fired by the container when the + width of an app is changed. The app's instanceId should be concatenated + to this constant. Returns an object with the gridSize and width in pixels: + `{ gridSize: 8, width: 620 }` + @property APP_WIDTH_CHANGE + @type string + @static + @final + */ + APP_WIDTH_CHANGE: 'App.widthChange.', + /** + The CONTAINER\_SYMBOL\_CHANGE event is fired when the symbol is changed + at the container level. This event should only be fired by the container + or container provider. Returns an object with the symbol and company name: + `{ symbol: 'MSFT', name: 'Microsoft Corp (NASDAQ)' }` + @property CONTAINER_SYMBOL_CHANGE + @type string + @static + @final + */ + CONTAINER_SYMBOL_CHANGE: 'Container.symbolChange', + /** + The CONTAINER\_WIDTH\_CHANGE event will be fired by the container when + the width of the container has changed. + @property CONTAINER_WIDTH_CHANGE + @type string + @static + @final + */ + CONTAINER_WIDTH_CHANGE: 'Container.widthChange', + /** + The CONTAINER\_LOCALE\_CHANGE event will be fired by the container when + the locale of the container has changed. This event should only be fired + by the container or container provider. Returns an object with the + updated locale (IETF-defined standard language tag): + `{ locale: 'en-us' }` + @property CONTAINER_LOCALE_CHANGE + @type string + @static + @final + */ + CONTAINER_LOCALE_CHANGE: 'Container.localeChange' + }, + JSONP_CALLBACK: 'F2_jsonpCallback_', + /** + Constants for use with cross-domain sockets. + @class F2.Constants.Sockets + @protected + */ + Sockets: { + /** + The EVENT message is sent whenever + F2.Events.{{#crossLink "F2.Events/emit"}}{{/crossLink}} is fired. + @property EVENT + @type string + @static + @final + */ + EVENT: '__event__', + /** + The LOAD message is sent when an iframe socket initially loads. Returns + a JSON string that represents: `[ App, AppManifest]` + @property LOAD + @type string + @static + @final + */ + LOAD: '__socketLoad__', + /** + The RPC message is sent when a method is passed up from within a secure + app page. + @property RPC + @type string + @static + @final + */ + RPC: '__rpc__', + /** + The RPC\_CALLBACK message is sent when a call back from an RPC method is + fired. + @property RPC_CALLBACK + @type string + @static + @final + */ + RPC_CALLBACK: '__rpcCallback__', + /** + The UI\_RPC message is sent when a UI method called. + @property UI_RPC + @type string + @static + @final + */ + UI_RPC: '__uiRpc__' + }, + /** + The available view types to apps. The view should be specified by applying + the {{#crossLink "F2.Constants.Css"}}{{/crossLink}}.APP\_VIEW class to the + containing DOM Element. A DATA\_ATTRIBUTE attribute should be added to the + Element as well which defines what view type is represented. The `hide` + class can be applied to views that should be hidden by default. + @class F2.Constants.Views + */ + Views: { + /** + The DATA_ATTRIBUTE should be placed on the DOM Element that contains the + view. + @property DATA_ATTRIBUTE + @type string + @static + @final + */ + DATA_ATTRIBUTE: 'data-f2-view', + /** + The ABOUT view gives details about the app. + @property ABOUT + @type string + @static + @final + */ + ABOUT: 'about', + /** + The HELP view provides users with help information for using an app. + @property HELP + @type string + @static + @final + */ + HELP: 'help', + /** + The HOME view is the main view for an app. This view should always be + provided by an app. + @property HOME + @type string + @static + @final + */ + HOME: 'home', + /** + The REMOVE view is a special view that handles the removal of an app from + the container. + @property REMOVE + @type string + @static + @final + */ + REMOVE: 'remove', + /** + The SETTINGS view provides users the ability to modify advanced settings + for an app. + @property SETTINGS + @type string + @static + @final + */ + SETTINGS: 'settings' + } }); -/** - * Handles [Context](../../app-development.html#context) passing from - * containers to apps and apps to apps. - * @class F2.Events - */ -F2.extend('Events', (function() { - // init EventEmitter - var _events = new EventEmitter2({ - wildcard:true - }); - // unlimited listeners, set to > 0 for debugging - _events.setMaxListeners(0); - - return { - /** - * Same as F2.Events.emit except that it will not send the event - * to all sockets. - * @method _socketEmit - * @private - * @param {string} event The event name - * @param {object} [arg]* The arguments to be passed - */ - _socketEmit: function() { - return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); - }, - /** - * Execute each of the listeners that may be listening for the specified - * event name in order with the list of arguments. - * @method emit - * @param {string} event The event name - * @param {object} [arg]* The arguments to be passed - */ - emit: function() { - F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); - return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); - }, - /** - * Adds a listener that will execute n times for the event before being - * removed. The listener is invoked only the first time the event is - * fired, after which it is removed. - * @method many - * @param {string} event The event name - * @param {int} timesToListen The number of times to execute the event - * before being removed - * @param {function} listener The function to be fired when the event is - * emitted - */ - many: function(event, timesToListen, listener) { - return _events.many(event, timesToListen, listener); - }, - /** - * Remove a listener for the specified event. - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - */ - off: function(event, listener) { - return _events.off(event, listener); - }, - /** - * Adds a listener for the specified event - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ - on: function(event, listener){ - return _events.on(event, listener); - }, - /** - * Adds a one time listener for the event. The listener is invoked only - * the first time the event is fired, after which it is removed. - * @method once - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - */ - once: function(event, listener) { - return _events.once(event, listener); - } - }; -})()); /** - * Handles socket communication between the container and secure apps - * @class F2.Rpc - */ -F2.extend('Rpc', (function(){ - var _callbacks = {}; - var _secureAppPagePath = ''; - var _apps = {}; - var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); - var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); - var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); - var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); - var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); - - /** - * Creates a socket connection from the app to the container using - * easyXDM. - * @method _createAppToContainerSocket - * @private - */ - var _createAppToContainerSocket = function() { - - var appConfig; // socket closure - var isLoaded = false; - // its possible for messages to be received before the socket load event has - // happened. We'll save off these messages and replay them once the socket - // is ready - var messagePlayback = []; - - var socket = new easyXDM.Socket({ - onMessage: function(message, origin){ - - // handle Socket Load - if (!isLoaded && _rSocketLoad.test(message)) { - message = message.replace(_rSocketLoad, ''); - var appParts = F2.parse(message); - - // make sure we have the AppConfig and AppManifest - if (appParts.length == 2) { - appConfig = appParts[0]; - - // save socket - _apps[appConfig.instanceId] = { - config:appConfig, - socket:socket - }; - - // register app - F2.registerApps([appConfig], [appParts[1]]); - - // socket message playback - jQuery.each(messagePlayback, function(i, e) { - _onMessage(appConfig, message, origin); - }); - - isLoaded = true; - } - } else if (isLoaded) { - // pass everyting else to _onMessage - _onMessage(appConfig, message, origin); - } else { - //F2.log('socket not ready, queuing message', message); - messagePlayback.push(message); - } - } - }); - }; - - /** - * Creates a socket connection from the container to the app using - * easyXDM. - * @method _createContainerToAppSocket - * @private - * @param {appConfig} appConfig The F2.AppConfig object - * @param {F2.AppManifest} appManifest The F2.AppManifest object - */ - var _createContainerToAppSocket = function(appConfig, appManifest) { - - var container = jQuery(appConfig.root); - - if (!container.is('.' + F2.Constants.Css.APP_CONTAINER)) { - container.find('.' + F2.Constants.Css.APP_CONTAINER); - } - - if (!container.length) { - F2.log('Unable to locate app in order to establish secure connection.'); - return; - } - - var iframeProps = { - scrolling:'no', - style:{ - width:'100%' - } - }; - - if (appConfig.height) { - iframeProps.style.height = appConfig.height + 'px'; - } - - var socket = new easyXDM.Socket({ - remote: _secureAppPagePath, - container: container.get(0), - props:iframeProps, - onMessage: function(message, origin) { - // pass everything to _onMessage - _onMessage(appConfig, message, origin); - }, - onReady: function() { - socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); - } - }); - - return socket; - }; - - /** - * @method _createRpcCallback - * @private - * @param {string} instanceId The app's Instance ID - * @param {function} callbackId The callback ID - * @return {function} A function to make the RPC call - */ - var _createRpcCallback = function(instanceId, callbackId) { - return function() { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC_CALLBACK, - callbackId, - [].slice.call(arguments).slice(2) - ); - }; - }; - - /** - * Handles messages that come across the sockets - * @method _onMessage - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} message The socket message - * @param {string} origin The originator - */ - var _onMessage = function(appConfig, message, origin) { - - var obj, func; - - function parseFunction(parent, functionName) { - var path = String(functionName).split('.'); - for (var i = 0; i < path.length; i++) { - if (parent[path[i]] === undefined) { - parent = undefined; - break; - } - parent = parent[path[i]]; - } - return parent; - } - - function parseMessage(regEx, message, instanceId) { - var o = F2.parse(message.replace(regEx, '')); - - // if obj.callbacks - // for each callback - // for each params - // if callback matches param - // replace param with _createRpcCallback(app.instanceId, callback) - if (o.params && o.params.length && o.callbacks && o.callbacks.length) { - jQuery.each(o.callbacks, function(i, c) { - jQuery.each(o.params, function(i, p) { - if (c == p) { - o.params[i] = _createRpcCallback(instanceId, c); - } - }); - }); - } - - return o; - } - - // handle UI Call - if (_rUiCall.test(message)) { - obj = parseMessage(_rUiCall, message, appConfig.instanceId); - func = parseFunction(appConfig.ui, obj.functionName); - // if we found the function, call it - if (func !== undefined) { - func.apply(appConfig.ui, obj.params); - } else { - F2.log('Unable to locate UI RPC function: ' + obj.functionName); - } - - // handle RPC - } else if (_rRpc.test(message)) { - obj = parseMessage(_rRpc, message, appConfig.instanceId); - func = parseFunction(window, obj.functionName); - if (func !== undefined) { - func.apply(func, obj.params); - } else { - F2.log('Unable to locate RPC function: ' + obj.functionName); - } - - // handle RPC Callback - } else if (_rRpcCallback.test(message)) { - obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); - if (_callbacks[obj.functionName] !== undefined) { - _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); - delete _callbacks[obj.functionName]; - } + Root namespace of the F2 SDK + @module f2 + @class F2 +*/ +F2.extend('', (function() { - // handle Events - } else if (_rEvents.test(message)) { - obj = parseMessage(_rEvents, message, appConfig.instanceId); - F2.Events._socketEmit.apply(F2.Events, obj); - } - }; - - /** - * Registers a callback function - * @method _registerCallback - * @private - * @param {function} callback The callback function - * @return {string} The callback ID - */ - var _registerCallback = function(callback) { - var callbackId = F2.guid(); - _callbacks[callbackId] = callback; - return callbackId; - }; - - return { - /** - * Broadcast an RPC function to all sockets - * @method broadcast - * @param {string} messageType The message type - * @param {Array} params The parameters to broadcast - */ - broadcast: function(messageType, params) { - // check valid messageType - var message = messageType + F2.stringify(params); - jQuery.each(_apps, function(i, a) { - a.socket.postMessage(message); - }); - }, - /** - * Calls a remote function - * @method call - * @param {string} instanceId The app's Instance ID - * @param {string} messageType The message type - * @param {string} functionName The name of the remote function - * @param {Array} params An array of parameters to pass to the remote - * function. Any functions found within the params will be treated as a - * callback function. - */ - call: function(instanceId, messageType, functionName, params) { - // loop through params and find functions and convert them to callbacks - var callbacks = []; - jQuery.each(params, function(i, e) { - if (typeof e === 'function') { - var cid = _registerCallback(e); - params[i] = cid; - callbacks.push(cid); - } - }); - // check valid messageType - _apps[instanceId].socket.postMessage( - messageType + F2.stringify({ - functionName:functionName, - params:params, - callbacks:callbacks - }) - ); - }, - - /** - * Init function which tells F2.Rpc whether it is running at the container- - * level or the app-level. This method is generally called by - * F2.{{#crossLink "F2/init"}}{{/crossLink}} - * @method init - * @param {string} [secureAppPagePath] The - * {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath - * property - */ - init: function(secureAppPagePath) { - _secureAppPagePath = secureAppPagePath; - if (!_secureAppPagePath) { - _createAppToContainerSocket(); - } - }, - - /** - * Determines whether the Instance ID is considered to be 'remote'. This is - * determined by checking if 1) the app has an open socket and 2) whether - * F2.Rpc is running inside of an iframe - * @method isRemote - * @param {string} instanceId The Instance ID - * @return {bool} True if there is an open socket - */ - isRemote: function(instanceId) { - return ( - // we have an app - _apps[instanceId] !== undefined && - // the app is secure - _apps[instanceId].config.isSecure && - // we can't access the iframe - jQuery(_apps[instanceId].config.root).find('iframe').length === 0 - ); - }, - - /** - * Creates a container-to-app or app-to-container socket for communication - * @method register - * @param {F2.AppConfig} [appConfig] The F2.AppConfig object - * @param {F2.AppManifest} [appManifest] The F2.AppManifest object - */ - register: function(appConfig, appManifest) { - if (!!appConfig && !!appManifest) { - _apps[appConfig.instanceId] = { - config:appConfig, - socket:_createContainerToAppSocket(appConfig, appManifest) - }; - } else { - F2.log('Unable to register socket connection. Please check container configuration.'); - } - } - }; + var _apps = {}; + var _config = false; + var _usesAppHandlers = false; + var _appHandlerToken = F2.AppHandlers.__f2GetToken(); + var _loadedScripts = {}; + var _loadedStyles = {}; + var _loadingScripts = {}; + + /** + Appends the app's html to the DOM. + @method _afterAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @return {Element} The DOM Element that contains the app + */ + function _afterAppRender(appConfig, html) { + var handler = _config.afterAppRender || function(_appConfig, _html) { + return jQuery(_html).appendTo('body'); + }; + var $appContainer = handler(appConfig, html); + + if (_config.afterAppRender && !$appContainer) { + F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); + return; + } + + jQuery($appContainer).addClass(F2.Constants.Css.APP); + + return $appContainer.get(0); + } + + /** + Renders the html for an app. + @method _appRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @returns {string} HTML for the app + */ + function _appRender(appConfig, html) { + // Apply APP_CONTAINER class and AppID + html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + + // Optionally apply wrapper html + if (_config.appRender) { + html = _config.appRender(appConfig, html); + } + + return _outerHtml(html); + } + + /** + Rendering hook to allow containers to render some html prior to an app + loading. + @method _beforeAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app + */ + function _beforeAppRender(appConfig) { + var handler = _config.beforeAppRender || jQuery.noop; + return handler(appConfig); + } + + /** + Handler to inform the container that a script failed to load. + @method _onScriptLoadFailure + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} scriptInfo The path of the script that failed to load or + the exception info for the inline script that failed to execute. + */ + function _appScriptLoadFailed(appConfig, scriptInfo) { + if (_config.appScriptLoadFailed) { + _config.appScriptLoadFailed(appConfig, scriptInfo); + } + } + + /** + Adds properties to the AppConfig object. + @method _createAppConfig + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with + necessary properties. + */ + function _createAppConfig(appConfig) { + // Make a copy of the app config to ensure that the original is not modified + appConfig = jQuery.extend(true, {}, appConfig); + + // Create the instanceId for the app + appConfig.instanceId = appConfig.instanceId || F2.guid(); + + // Default the views if not provided + appConfig.views = appConfig.views || []; + if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { + appConfig.views.push(F2.Constants.Views.HOME); + } + + // Pass container-defined locale to each app + if (F2.ContainerConfig.locale) { + appConfig.containerLocale = F2.ContainerConfig.locale; + } + + return appConfig; + } + + /** + Generate an AppConfig from the element's attributes. + @method _getAppConfigFromElement + @private + @param {Element} node The DOM node from which to generate the F2.AppConfig + object + @return {F2.AppConfig} The new F2.AppConfig object + */ + function _getAppConfigFromElement(node) { + var appConfig; + + if (node) { + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; + + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); + + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); + } + } + } + } + + return appConfig; + } + + /** + Returns true if the DOM node has children that are not text nodes + @method _hasNonTextChildNodes + @private + @param {Element} node The DOM node + @return {bool} True if there are non-text children + */ + function _hasNonTextChildNodes(node) { + var hasNodes = false; + + if (node.hasChildNodes()) { + for (var i = 0, len = node.childNodes.length; i < len; i++) { + if (node.childNodes[i].nodeType === 1) { + hasNodes = true; + break; + } + } + } + + return hasNodes; + } + + /** + Adds properties to the ContainerConfig object to take advantage of defaults. + @method _hydrateContainerConfig + @private + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ + function _hydrateContainerConfig(containerConfig) { + if (!containerConfig.scriptErrorTimeout) { + containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; + } + + if (containerConfig.debugMode !== true) { + containerConfig.debugMode = F2.ContainerConfig.debugMode; + } + + if (containerConfig.locale && typeof containerConfig.locale === 'string') { + F2.ContainerConfig.locale = containerConfig.locale; + } + } + + /** + Attach app events. + @method _initAppEvents + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + */ + function _initAppEvents(appConfig) { + var elementFilter = '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']'; + + jQuery(appConfig.root).on('click', elementFilter, function(e) { + e.preventDefault(); + + var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); + + // Handle the special REMOVE view + if (view === F2.Constants.Views.REMOVE) { + F2.removeApp(appConfig.instanceId); + } else { + appConfig.ui.Views.change(view); + } + }); + } + + /** + Attach container Events + @method _initContainerEvents + @private + */ + function _initContainerEvents() { + function resizeHandler() { + F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); + } + + var resizeTimeout; + + jQuery(window).on('resize', function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(resizeHandler, 100); + }); + + // Listen for container-broadcasted locale changes + F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { + if (data.locale && typeof data.locale === 'string') { + F2.ContainerConfig.locale = data.locale; + } + }); + } + + /** + Checks if an element is a placeholder element. + @method _isPlaceholderElement + @private + @param {Element} node The DOM element to check + @return {bool} True if the element is a placeholder + */ + function _isPlaceholderElement(node) { + return ( + F2.isNativeDOMNode(node) && + !_hasNonTextChildNodes(node) && + !!node.getAttribute('data-f2-appid') && + !!node.getAttribute('data-f2-manifesturl') + ); + } + + /** + Has the container been init? + @method _isInit + @private + @return {bool} True if the container has been init + */ + function _isInit() { + return !!_config; + } + + /** + Instantiates app from its appConfig and stores that in a private collection. + @method _createAppInstance + @private + @param {object} appConfig An {{#crossLink "F2.AppConfig"}}{{/crossLink}} + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object. + */ + function _createAppInstance(appConfig, appContent) { + appConfig.ui = new F2.UI(appConfig); + + // instantiate F2.App + if (F2.Apps[appConfig.appId] !== undefined) { + if (typeof F2.Apps[appConfig.appId] === 'function') { + // IE + setTimeout(function() { + _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); + + if (_apps[appConfig.instanceId].app.init !== undefined) { + _apps[appConfig.instanceId].app.init(); + } + }, 0); + } else { + F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); + } + } + } + + /** + Loads the app's html/css/javascript. + @method loadApp + @private + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects. + @param {F2.AppManifest} [appManifest] The AppManifest object + */ + function _loadApps(appConfigs, appManifest) { + appConfigs = [].concat(appConfigs); + + // Check for secure app + if (appConfigs.length === 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { + _loadSecureApp(appConfigs[0], appManifest); + return; + } + + // Check that the number of apps in manifest matches the number requested + if (appConfigs.length !== appManifest.apps.length) { + F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); + return; + } + + function _loadStyles(styles, cb) { + if (_config.loadStyles) { + return _config.loadStyles(styles, cb); + } + + // Load styles, see #101 + var stylesFragment; + var useCreateStyleSheet = !!document.createStyleSheet; + + jQuery.each(styles, function(i, e) { + var resourceUrl = e; + var resourceKey = e.toLowerCase(); + + if (_loadedStyles[resourceKey]) { + return; + } + + if (useCreateStyleSheet) { + document.createStyleSheet(resourceUrl); + } else { + stylesFragment = stylesFragment || []; + stylesFragment.push(''); + } + + _loadedStyles[resourceKey] = true; + }); + + if (stylesFragment) { + jQuery('head').append(stylesFragment.join('')); + } + + cb(); + } + + function _loadScripts(scripts, cb) { + if (_config.loadScripts) { + return _config.loadScripts(scripts, cb); + } + + if (!scripts.length) { + return cb(); + } + + var doc = window.document; + var scriptCount = scripts.length; + var scriptsLoaded = 0; + // http://caniuse.com/#feat=script-async + var head = doc && (doc.head || doc.getElementsByTagName('head')[0]); + // For IE, put scripts before any elements, but after any + var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; + // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 + var readyStates = (window.addEventListener) ? {} : { + 'loaded': true, + 'complete': true + }; + + // Log and emit event for the failed (400,500) scripts + function _error(e) { + setTimeout(function() { + var evtData = { + src: e.target.src, + appId: appConfigs[0].appId + }; + + // Send error to console + F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); + + // Emit events + F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); + + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], evtData.src); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + evtData.src + ); + } + }, _config.scriptErrorTimeout); // Defaults to 7000 + } + + function _checkComplete() { + // Are we done loading all scripts for this app? + if (++scriptsLoaded === scriptCount) { + // success + cb(); + } + } + + function _emptyWaitlist(resourceKey, errorEvt) { + var waiting; + var waitlist = _loadingScripts[resourceKey]; + + if (!waitlist) { + return; + } + + for (var i = 0; i < waitlist.length; i++) { + waiting = waitlist [i]; + + if (errorEvt) { + waiting.error(errorEvt); + } else { + waiting.success(); + } + } + + _loadingScripts[resourceKey] = null; + } + + // Load scripts and eval inlines once complete + jQuery.each(scripts, function(i, url) { + var script = doc.createElement('script'); + var resourceUrl = url; + var resourceKey = resourceUrl.toLowerCase(); + + // Already finished loading, trigger callback + if (_loadedScripts[resourceKey]) { + return _checkComplete(); + } + + // This script is actively loading, add this app to the wait list + if (_loadingScripts[resourceKey]) { + _loadingScripts[resourceKey].push({ + success: _checkComplete, + error: _error + }); + + return; + } + + // Create the waitlist + _loadingScripts[resourceKey] = []; + + // If in debugMode, add cache buster to each script URL + if (_config.debugMode) { + resourceUrl += '?cachebuster=' + new Date().getTime(); + } + + // Scripts are loaded asynchronously and executed in order + // in supported browsers: http://caniuse.com/#feat=script-async + script.async = false; + script.type = 'text/javascript'; + script.charset = 'utf-8'; + + script.onerror = function(e) { + _error(e); + _emptyWaitlist(resourceKey, e); + }; + + // Use a closure for the load event so that we can dereference the original script + script.onload = script.onreadystatechange = function(e) { + e = e || window.event; // For older IE + + // Detect when it's done loading + // ev.type == 'load' is for all browsers except IE6-9 + // IE6-9 need to use onreadystatechange and look for + // el.readyState in {loaded, complete} (yes, we need both) + if (e.type === 'load' || readyStates[script.readyState]) { + // Done, cleanup + script.onload = script.onreadystatechange = script.onerror = ''; + // Loaded + _loadedScripts[resourceKey] = true; + // Increment and check if scripts are done + _checkComplete(); + // Empty wait list + _emptyWaitlist(resourceKey); + // Dereference script + script = null; + } + }; + + // Set the src, start loading + script.src = resourceUrl; + + // really is the best + head.insertBefore(script, insertBeforeEl); + }); + } + + function _loadInlineScripts(inlines, cb) { + // Attempt to use the user provided method + if (_config.loadInlineScripts) { + _config.loadInlineScripts(inlines, cb); + } else { + for (var i = 0, len = inlines.length; i < len; i++) { + try { + eval(inlines[i]); + } catch ( exception ) { + F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); + + // Emit events + F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { + appId: appConfigs[0].appId, + src: inlines[i], + err: exception + }); + + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], exception); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + exception + ); + } + } + } + cb(); + } + } + + // Determine whether an element has been added to the page + function elementInDocument(element) { + if (element) { + while (element.parentNode) { + element = element.parentNode; + + if (element === document) { + return true; + } + } + } + + return false; + } + + function _loadHtml(apps) { + jQuery.each(apps, function(i, a) { + if (_isPlaceholderElement(appConfigs[i].root)) { + jQuery(appConfigs[i].root) + .addClass(F2.Constants.Css.APP) + .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); + } else if (!_usesAppHandlers) { + // Load html and save the root node + appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER, + appConfigs[i], // the app config + _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) + ); + + var appId = appConfigs[i].appId; + var root = appConfigs[i].root; + + if (!root) { + throw new Error('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); + } + + if (!elementInDocument(root)) { + throw new Error('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + appConfigs[i] // the app config + ); + + if (!F2.isNativeDOMNode(root)) { + throw new Error('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); + } + } + + // init events + _initAppEvents(appConfigs[i]); + }); + } + + // Pull out the manifest data + var manifestScripts = appManifest.scripts || []; + var manifestStyles = appManifest.styles || []; + var manifestInlines = appManifest.inlineScripts || []; + var manifestApps = appManifest.apps || []; + + // Finally, load the styles, html, and scripts + _loadStyles(manifestStyles, function() { + _loadHtml(manifestApps); + _loadScripts(manifestScripts, function() { + // Emit event we're done with scripts + if (appConfigs[0]) { + F2.Events.emit('APP_SCRIPTS_LOADED', { + appId: appConfigs[0].appId, + scripts: manifestScripts + }); + } + + _loadInlineScripts(manifestInlines, function() { + // Create the apps + jQuery.each(appConfigs, function(i, a) { + _createAppInstance(a, manifestApps[i]); + }); + }); + }); + }); + } + + /** + Loads the app's html/css/javascript into an iframe. + @method loadSecureApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into + the page. + */ + function _loadSecureApp(appConfig, appManifest) { + // Make sure the container is configured for secure apps + if (_config.secureAppPagePath) { + if (_isPlaceholderElement(appConfig.root)) { + jQuery(appConfig.root) + .addClass(F2.Constants.Css.APP) + .append(jQuery('
') + .addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + } else if (!_usesAppHandlers) { + // Create the html container for the iframe + appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); + } else { + var $root = jQuery(appConfig.root); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER, + appConfig, + _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) + ); + + if ($root.parents('body:first').length === 0) { + throw new Error('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + appConfig // the app config + ); + + if (!appConfig.root) { + throw new Error('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } + + if (!F2.isNativeDOMNode(appConfig.root)) { + throw new Error('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } + } + + // Instantiate F2.UI + appConfig.ui = new F2.UI(appConfig); + // Init events + _initAppEvents(appConfig); + // Create RPC socket + F2.Rpc.register(appConfig, appManifest); + } else { + F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); + } + } + + function _outerHtml(html) { + return jQuery('
').append(html).html(); + } + + /** + Checks if the app is valid. + @method _validateApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @returns {bool} True if the app is valid + */ + function _validateApp(appConfig) { + // Check for valid app configurations + if (!appConfig.appId) { + F2.log('"appId" missing from app object'); + return false; + } else if (!appConfig.root && !appConfig.manifestUrl) { + F2.log('"manifestUrl" missing from app object'); + return false; + } + + return true; + } + + /** + Checks if the ContainerConfig is valid. + @method _validateContainerConfig + @private + @returns {bool} True if the config is valid + */ + function _validateContainerConfig() { + if (_config) { + if (_config.xhr) { + if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { + throw new Error('ContainerConfig.xhr should be a function or an object'); + } + if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { + throw new Error('ContainerConfig.xhr.dataType should be a function'); + } + if (_config.xhr.type && typeof _config.xhr.type !== 'function') { + throw new Error('ContainerConfig.xhr.type should be a function'); + } + if (_config.xhr.url && typeof _config.xhr.url !== 'function') { + throw new Error('ContainerConfig.xhr.url should be a function'); + } + } + } + + return true; + } + + return { + /** + Gets the current list of apps in the container. + @method getContainerState + @returns {Array} An array of objects containing the appId + */ + getContainerState: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerState()'); + return; + } + + return jQuery.map(_apps, function(app) { + return { + appId: app.config.appId + }; + }); + }, + /** + Gets the current locale defined by the container. + @method getContainerLocale + @returns {String} IETF-defined standard language tag + */ + getContainerLocale: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerLocale()'); + return; + } + + return F2.ContainerConfig.locale; + }, + /** + Initializes the container. This method must be called before performing + any other actions in the container. + @method init + @param {F2.ContainerConfig} config The configuration object + */ + init: function(config) { + _config = config || {}; + _validateContainerConfig(); + _hydrateContainerConfig(_config); + + // Dictates whether we use the old logic or the new logic. + // TODO: Remove in v2.0 + _usesAppHandlers = (_config.beforeAppRender || _config.appRender || _config.afterAppRender || _config.appScriptLoadFailed); + + // Only establish RPC connection if the container supports the secure app page + if (!!_config.secureAppPagePath || _config.isSecureAppPage) { + F2.Rpc.init(_config.secureAppPagePath ? _config.secureAppPagePath : false); + } + + F2.UI.init(_config); + + if (!_config.isSecureAppPage) { + _initContainerEvents(); + } + }, + /** + Has the container been init? + @method isInit + @return {bool} True if the container has been init + */ + isInit: _isInit, + /** + Automatically load apps that are already defined in the DOM. Elements will + be rendered into the location of the placeholder DOM element. Any + AppHandlers that are defined will be bypassed. + @method loadPlaceholders + @param {Element} parentNode The element to search for placeholder apps + */ + loadPlaceholders: function(parentNode) { + if (parentNode && !F2.isNativeDOMNode(parentNode)) { + throw new Error('"parentNode" must be null or a DOM node'); + } + + var elements = []; + var appConfigs = []; + + /** + If the passed in element has a data-f2-appid attribute add it to the + list of elements but to not search within that element for other + placeholders + */ + if (parentNode) { + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); + } + } else if (document.querySelectorAll) { + elements = elements.concat(document.querySelectorAll('[data-f2-appid]')); + } + + for (var i = 0, len = elements.length; i < len; i++) { + var appConfig = _getAppConfigFromElement(elements[i]); + appConfigs.push(appConfig); + } + + if (appConfigs.length) { + F2.registerApps(appConfigs); + } + }, + /** + Begins the loading process for all apps and/or initialization process for + pre-loaded apps. The app will be passed the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will contain the + app's unique instanceId within the container. If the + {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated + the app is considered to be a pre-loaded app and will be handled + accordingly. Optionally, the + {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those + assets will be used instead of making a request. + @method registerApps + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @param {Array} [appManifests] An array of + {{#crossLink "F2.AppManifest"}}{{/crossLink}} + objects. This array must be the same length as the apps array that is + passed in. This can be useful if apps are loaded on the server-side and + passed down to the client. + @example + // Traditional App requests. + var configs = [{ + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app2', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Pre-loaded and tradition apps mixed. + // You can preload the same app multiple times as long as you have a unique root for each + var configs = [{ + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-1', + manifestUrl: '' + }, { + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-2', + manifestUrl: '' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Apps with predefined manifests. + var configs = [ + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app2', context: {} } + ]; + + // Pre requested manifest responses + var manifests = [{ + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App 2!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/App2Class.js'], + styles: ['http://www.domain.com/css/App2Styles.css'] + }]; + + F2.init(); + F2.registerApps(configs, manifests); + */ + registerApps: function(appConfigs, appManifests) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.registerApps()'); + return; + } else if (!appConfigs) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } + + var appStack = []; + var batches = {}; + var callbackStack = {}; + var haveManifests = false; + appConfigs = [].concat(appConfigs); + appManifests = [].concat(appManifests || []); + haveManifests = !!appManifests.length; + + // AppConfigs must have a length + if (!appConfigs.length) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } else if (appConfigs.length && haveManifests && appConfigs.length !== appManifests.length) { + // Ensure that the array of apps and manifests are equal + F2.log('The length of "apps" does not equal the length of "appManifests"'); + return; + } + + // Validate apps, assign instanceId, then determine which apps can be batched together + jQuery.each(appConfigs, function(i, a) { + // Add properties and methods + a = _createAppConfig(a); + + // Set to itself for preloaded apps + a.root = a.root || null; + + // Validate the app after setting the root because preloaded apps do not require manifest url + if (!_validateApp(a)) { + return; + } + + _apps[a.instanceId] = { + config: a + }; + + // If the root property is defined then this app is considered to be preloaded and we will run it through that logic. + if (a.root && !_isPlaceholderElement(a.root)) { + if ((!a.root && typeof a.root !== 'string') && !F2.isNativeDOMNode(a.root)) { + F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); + F2.log('AppConfig instance:', a); + throw new Error('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); + } else if (jQuery(a.root).length !== 1) { + F2.log('AppConfig invalid for pre-load, root not unique'); + F2.log('AppConfig instance:', a); + F2.log('Number of dom node instances:', jQuery(a.root).length); + throw new Error('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); + } + + // Instantiate F2.App + _createAppInstance(a); + _initAppEvents(a); + + return; + } + + if (!_isPlaceholderElement(a.root)) { + if (!_usesAppHandlers) { + a.root = _beforeAppRender(a); + } else { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, + a + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + a + ); + } + } + + // Load the page if we have the manifest + if (haveManifests) { + _loadApps(a, appManifests[i]); + } else { + // Check if this app can be batched + if (a.enableBatchRequests && !a.isSecure) { + batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; + batches[a.manifestUrl.toLowerCase()].push(a); + } else { + appStack.push({ + apps: [a], + url: a.manifestUrl + }); + } + } + }); + + if (!haveManifests) { + // Add the batches to the appStack + jQuery.each(batches, function(i, b) { + appStack.push({ + url: i, + apps: b + }); + }); + + /* + If an app is being loaded more than once on the page, there is the + potential that the jsonp callback will be clobbered if the request + for the AppManifest for the app comes back at the same time as + another request for the same app. We'll create a callbackStack + that will ensure that requests for the same app are loaded in order + rather than at the same time + */ + jQuery.each(appStack, function(i, req) { + // Define the callback function based on the first app's App ID + var jsonpCallback = F2.Constants.JSONP_CALLBACK + req.apps[0].appId; + + // Push the request onto the callback stack + callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; + callbackStack[jsonpCallback].push(req); + }); + + /* + Loop through each item in the callback stack and make the request + for the AppManifest. When the request is complete, pop the next + request off the stack and make the request. + */ + jQuery.each(callbackStack, function(i, requests) { + function manifestRequest(jsonpCallback, req) { + if (!req) { + return; + } + + // Setup defaults and callbacks + var type = 'GET'; + var dataType = 'jsonp'; + + function completeFunc() { + manifestRequest(i, requests.pop()); + } + + function errorFunc() { + jQuery.each(req.apps, function(idx, item) { + item.name = item.name || item.appId; + F2.log('Removed failed ' + item.name + ' app', item); + F2.removeApp(item.instanceId); + }); + } + + function successFunc(appManifest) { + _loadApps(req.apps, appManifest); + } + + // Optionally fire xhr overrides + if (_config.xhr) { + if (_config.xhr.dataType) { + dataType = _config.xhr.dataType(req.url, req.apps); + + if (typeof dataType !== 'string') { + throw new Error('ContainerConfig.xhr.dataType should return a string'); + } + } + + if (_config.xhr.type) { + type = _config.xhr.type(req.url, req.apps); + + if (typeof type !== 'string') { + throw new Error('ContainerConfig.xhr.type should return a string'); + } + } + + if (_config.xhr.url) { + req.url = _config.xhr.url(req.url, req.apps); + + if (typeof req.url !== 'string') { + throw new Error('ContainerConfig.xhr.url should return a string'); + } + } + } + + // Setup the default request function if an override is not present + var requestFunc = _config.xhr; + + if (typeof requestFunc !== 'function') { + requestFunc = function(url, apps, successCallback, errorCallback, completeCallback) { + jQuery.ajax({ + url: url, + type: type, + data: { + params: F2.stringify(req.apps, F2.appConfigReplacer) + }, + jsonp: false, // do not put 'callback=' in the query string + jsonpCallback: jsonpCallback, // Unique function name + dataType: dataType, + success: successCallback, + error: function(jqxhr, settings, exception) { + F2.log('Failed to load app(s)', exception.toString(), req.apps); + errorCallback(); + }, + complete: completeCallback + }); + }; + } + + requestFunc(req.url, req.apps, successFunc, errorFunc, completeFunc); + } + + manifestRequest(i, requests.pop()); + }); + } + }, + /** + Removes all apps from the container + @method removeAllApps + */ + removeAllApps: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeAllApps()'); + return; + } + + jQuery.each(_apps, function(i, a) { + F2.removeApp(a.config.instanceId); + }); + }, + /** + Removes an app from the container. + @method removeApp + @param {string} instanceId The app's instanceId + */ + removeApp: function(instanceId) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeApp()'); + return; + } + + if (_apps[instanceId]) { + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + _apps[instanceId] + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY, + _apps[instanceId] + ); + + F2.AppHandlers.__trigger( + _appHandlerToken, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + _apps[instanceId] + ); + + delete _apps[instanceId]; + } + } + }; })()); -F2.extend('UI', (function(){ - - var _containerConfig; - - /** - * UI helper methods - * @class F2.UI - * @constructor - * @param {F2.AppConfig} appConfig The F2.AppConfig object - */ - var UI_Class = function(appConfig) { - - var _appConfig = appConfig; - var $root = jQuery(appConfig.root); - - var _updateHeight = function(height) { - height = height || jQuery(_appConfig.root).outerHeight(); - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'updateHeight', - [ - height - ] - ); - } else { - _appConfig.height = height; - $root.find('iframe').height(_appConfig.height); - } - }; - - //http://getbootstrap.com/javascript/#modals - var _modalHtml = function(type,message,showCancel){ - return [ - '' - ].join(''); - }; - - return { - /** - * Removes a overlay from an Element on the page - * @method hideMask - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - */ - hideMask: function(selector) { - F2.UI.hideMask(_appConfig.instanceId, selector); - }, - /** - * Helper methods for creating and using Modals - * @class F2.UI.Modals - * @for F2.UI - */ - Modals: (function(){ - - var _renderAlert = function(message) { - return _modalHtml('Alert',message); - }; - - var _renderConfirm = function(message) { - return _modalHtml('Confirm',message,true); - }; - - return { - /** - * Display an alert message on the page - * @method alert - * @param {string} message The message to be displayed - * @param {function} [callback] The callback to be fired when the user - * closes the dialog - * @for F2.UI.Modals - */ - alert: function(message, callback) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.Modals.alert()'); - return; - } - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Modals.alert', - [].slice.call(arguments) - ); - } else { - // display the alert - jQuery(_renderAlert(message)) - .on('show.bs.modal', function() { - var modal = this; - jQuery(modal).find('.btn-primary').on('click', function() { - jQuery(modal).modal('hide').remove(); - (callback || jQuery.noop)(); - }); - }) - .modal({backdrop:true}); - } - }, - /** - * Display a confirm message on the page - * @method confirm - * @param {string} message The message to be displayed - * @param {function} okCallback The function that will be called when the OK - * button is pressed - * @param {function} cancelCallback The function that will be called when - * the Cancel button is pressed - * @for F2.UI.Modals - */ - confirm: function(message, okCallback, cancelCallback) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); - return; - } - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Modals.confirm', - [].slice.call(arguments) - ); - } else { - // display the alert - jQuery(_renderConfirm(message)) - .on('show.bs.modal', function() { - var modal = this; - - jQuery(modal).find('.btn-ok').on('click', function() { - jQuery(modal).modal('hide').remove(); - (okCallback || jQuery.noop)(); - }); - - jQuery(modal).find('.btn-cancel').on('click', function() { - jQuery(modal).modal('hide').remove(); - (cancelCallback || jQuery.noop)(); - }); - }) - .modal({backdrop:true}); - } - } - }; - })(), - /** - * Sets the title of the app as shown in the browser. Depending on the - * container HTML, this method may do nothing if the container has not been - * configured properly or else the container provider does not allow Title's - * to be set. - * @method setTitle - * @params {string} title The title of the app - * @for F2.UI - */ - setTitle: function(title) { - - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'setTitle', - [ - title - ] - ); - } else { - jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); - } - }, - /** - * Display an ovarlay over an Element on the page - * @method showMask - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ - showMask: function(selector, showLoader) { - F2.UI.showMask(_appConfig.instanceId, selector, showLoader); - }, - /** - * For secure apps, this method updates the size of the iframe that - * contains the app. **Note: It is recommended that app developers call - * this method anytime Elements are added or removed from the DOM** - * @method updateHeight - * @params {int} height The height of the app - */ - updateHeight: _updateHeight, - /** - * Helper methods for creating and using Views - * @class F2.UI.Views - * @for F2.UI - */ - Views: (function(){ - - var _events = new EventEmitter2(); - var _rValidEvents = /change/i; - - // unlimited listeners, set to > 0 for debugging - _events.setMaxListeners(0); - - var _isValid = function(eventName) { - if (_rValidEvents.test(eventName)) { - return true; - } else { - F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); - return false; - } - }; - - return { - /** - * Change the current view for the app or add an event listener - * @method change - * @param {string|function} [input] If a string is passed in, the view - * will be changed for the app. If a function is passed in, a change - * event listener will be added. - * @for F2.UI.Views - */ - change: function(input) { - - if (typeof input === 'function') { - this.on('change', input); - } else if (typeof input === 'string') { - - if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'Views.change', - [].slice.call(arguments) - ); - } else if (F2.inArray(input, _appConfig.views)) { - jQuery('.' + F2.Constants.Css.APP_VIEW, $root) - .addClass('hide') - .filter('[data-f2-view="' + input + '"]', $root) - .removeClass('hide'); - - _updateHeight(); - _events.emit('change', input); - } - } - }, - /** - * Removes a view event listener - * @method off - * @param {string} event The event name - * @param {function} listener The function that will be removed - * @for F2.UI.Views - */ - off: function(event, listener) { - if (_isValid(event)) { - _events.off(event, listener); - } - }, - /** - * Adds a view event listener - * @method on - * @param {string} event The event name - * @param {function} listener The function to be fired when the event is - * emitted - * @for F2.UI.Views - */ - on: function(event, listener) { - if (_isValid(event)) { - _events.on(event, listener); - } - } - }; - })() - }; - }; - - /** - * Removes a overlay from an Element on the page - * @method hideMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * that currently contains the loader - * @for F2.UI - */ - UI_Class.hideMask = function(instanceId, selector) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.hideMask()'); - return; - } - if (F2.Rpc.isRemote(instanceId) && !jQuery(selector).is('.' + F2.Constants.Css.APP)) { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC, - 'F2.UI.hideMask', - [ - instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors - jQuery(selector).selector - ] - ); - } else { - - var container = jQuery(selector); - container.find('> .' + F2.Constants.Css.MASK).remove(); - container.removeClass(F2.Constants.Css.MASK_CONTAINER); - - // if the element contains this data property, we need to reset static - // position - if (container.data(F2.Constants.Css.MASK_CONTAINER)) { - container.css({'position':'static'}); - } - } - }; - - /** - * - * @method init - * @static - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - UI_Class.init = function(containerConfig) { - _containerConfig = containerConfig; - - // set defaults - _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); - }; - - /** - * Display an ovarlay over an Element on the page - * @method showMask - * @static - * @param {string} instanceId The Instance ID of the app - * @param {string|Element} selector The Element or selector to an Element - * over which to display the loader - * @param {bool} showLoading Display a loading icon - */ - UI_Class.showMask = function(instanceId, selector, showLoading) { - - if (!F2.isInit()) { - F2.log('F2.init() must be called before F2.UI.showMask()'); - return; - } - - if (F2.Rpc.isRemote(instanceId) && jQuery(selector).is('.' + F2.Constants.Css.APP)) { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC, - 'F2.UI.showMask', - [ - instanceId, - // must only pass the selector argument. if we pass an Element there - // will be F2.stringify() errors - jQuery(selector).selector, - showLoading - ] - ); - } else { - - if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { - F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); - } - - var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); - var mask = jQuery('
') - .height('100%' /*container.outerHeight()*/) - .width('100%' /*container.outerWidth()*/) - .addClass(F2.Constants.Css.MASK); - - // set inline styles if useClasses is false - if (!_containerConfig.UI.Mask.useClasses) { - mask.css({ - 'background-color':_containerConfig.UI.Mask.backgroundColor, - 'background-image': !!_containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', - 'background-position':'50% 50%', - 'background-repeat':'no-repeat', - 'display':'block', - 'left':0, - 'min-height':30, - 'padding':0, - 'position':'absolute', - 'top':0, - 'z-index':_containerConfig.UI.Mask.zIndex, - - 'filter':'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', - 'opacity':_containerConfig.UI.Mask.opacity - }); - } - - // only set the position if the container is currently static - if (container.css('position') === 'static') { - container.css({'position':'relative'}); - // setting this data property tells hideMask to set the position - // back to static - container.data(F2.Constants.Css.MASK_CONTAINER, true); - } - - // add the mask to the container - container.append(mask); - } - }; - - return UI_Class; -})()); /** - * Root namespace of the F2 SDK - * @module f2 - * @class F2 - */ -F2.extend('', (function() { - - var _apps = {}; - var _config = false; - var _bUsesAppHandlers = false; - var _sAppHandlerToken = F2.AppHandlers.__f2GetToken(); - var _loadedScripts = {}; - var _loadedStyles = {}; - var _loadingScripts = {}; - - /** - * Appends the app's html to the DOM - * @method _afterAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html - * @return {Element} The DOM Element that contains the app - */ - var _afterAppRender = function(appConfig, html) { - - var handler = _config.afterAppRender || function(appConfig, html) { - return jQuery(html).appendTo('body'); - }; - var appContainer = handler(appConfig, html); - - if ( !! _config.afterAppRender && !appContainer) { - F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); - return; - } - else { - // apply APP class - jQuery(appContainer).addClass(F2.Constants.Css.APP); - return appContainer.get(0); - } - }; - - /** - * Renders the html for an app. - * @method _appRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {string} html The string of html - */ - var _appRender = function(appConfig, html) { - - // apply APP_CONTAINER class and AppID - html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - - // optionally apply wrapper html - if (_config.appRender) { - html = _config.appRender(appConfig, html); - } - - return _outerHtml(html); - }; - - /** - * Rendering hook to allow containers to render some html prior to an app - * loading - * @method _beforeAppRender - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {Element} The DOM Element surrounding the app - */ - var _beforeAppRender = function(appConfig) { - var handler = _config.beforeAppRender || jQuery.noop; - return handler(appConfig); - }; - - /** - * Handler to inform the container that a script failed to load - * @method _onScriptLoadFailure - * @deprecated This has been replaced with {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param scriptInfo The path of the script that failed to load or the exception info - * for the inline script that failed to execute - */ - var _appScriptLoadFailed = function(appConfig, scriptInfo) { - var handler = _config.appScriptLoadFailed || jQuery.noop; - return handler(appConfig, scriptInfo); - }; - - /** - * Adds properties to the AppConfig object - * @method _createAppConfig - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with - * necessary properties - */ - var _createAppConfig = function(appConfig) { - - // make a copy of the app config to ensure that the original is not modified - appConfig = jQuery.extend(true, {}, appConfig); - - // create the instanceId for the app - appConfig.instanceId = appConfig.instanceId || F2.guid(); - - // default the views if not provided - appConfig.views = appConfig.views || []; - if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { - appConfig.views.push(F2.Constants.Views.HOME); - } - - //pass container-defined locale to each app - if (F2.ContainerConfig.locale){ - appConfig.containerLocale = F2.ContainerConfig.locale; - } - - return appConfig; - }; - - /** - * Generate an AppConfig from the element's attributes - * @method _getAppConfigFromElement - * @private - * @param {Element} node The DOM node from which to generate the F2.AppConfig object - * @return {F2.AppConfig} The new F2.AppConfig object - */ - var _getAppConfigFromElement = function(node) { - var appConfig; - - if (node) { - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; - - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); - - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } - catch (e) { - console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } - } - } - } - - return appConfig; - }; - - /** - * Returns true if the DOM node has children that are not text nodes - * @method _hasNonTextChildNodes - * @private - * @param {Element} node The DOM node - * @return {bool} True if there are non-text children - */ - var _hasNonTextChildNodes = function(node) { - var hasNodes = false; - - if (node.hasChildNodes()) { - for (var i = 0, len = node.childNodes.length; i < len; i++) { - if (node.childNodes[i].nodeType === 1) { - hasNodes = true; - break; - } - } - } - - return hasNodes; - }; - - /** - * Adds properties to the ContainerConfig object to take advantage of defaults - * @method _hydrateContainerConfig - * @private - * @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - var _hydrateContainerConfig = function(containerConfig) { - - if (!containerConfig.scriptErrorTimeout) { - containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; - } - - if (containerConfig.debugMode !== true) { - containerConfig.debugMode = F2.ContainerConfig.debugMode; - } - - if (containerConfig.locale && typeof containerConfig.locale == 'string'){ - F2.ContainerConfig.locale = containerConfig.locale; - } - }; - - /** - * Attach app events - * @method _initAppEvents - * @private - */ - var _initAppEvents = function(appConfig) { - - jQuery(appConfig.root).on('click', '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']', function(event) { - - event.preventDefault(); - - var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); - - // handle the special REMOVE view - if (view == F2.Constants.Views.REMOVE) { - F2.removeApp(appConfig.instanceId); - } - else { - appConfig.ui.Views.change(view); - } - }); - }; - - /** - * Attach container Events - * @method _initContainerEvents - * @private - */ - var _initContainerEvents = function() { - - var resizeTimeout; - var resizeHandler = function() { - F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); - }; - - jQuery(window).on('resize', function() { - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(resizeHandler, 100); - }); - - //listen for container-broadcasted locale changes - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(data){ - if (data.locale && typeof data.locale == 'string'){ - F2.ContainerConfig.locale = data.locale; - } - }); - }; - - /** - * Checks if an element is a placeholder element - * @method _isPlaceholderElement - * @private - * @param {Element} node The DOM element to check - * @return {bool} True if the element is a placeholder - */ - var _isPlaceholderElement = function(node) { - return ( - F2.isNativeDOMNode(node) && - !_hasNonTextChildNodes(node) && - !!node.getAttribute('data-f2-appid') && - !!node.getAttribute('data-f2-manifesturl') - ); - }; - - /** - * Has the container been init? - * @method _isInit - * @private - * @return {bool} True if the container has been init - */ - var _isInit = function() { - return !!_config; - }; - - /** - * Instantiates each app from it's appConfig and stores that in a local private collection - * @method _createAppInstance - * @private - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - */ - var _createAppInstance = function(appConfig, appContent) { - // instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - - // instantiate F2.App - if (F2.Apps[appConfig.appId] !== undefined) { - if (typeof F2.Apps[appConfig.appId] === 'function') { - - // IE - setTimeout(function() { - _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); - if (_apps[appConfig.instanceId].app['init'] !== undefined) { - _apps[appConfig.instanceId].app.init(); - } - }, 0); - - } - else { - F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); - } - } - }; - - /** - * Loads the app's html/css/javascript - * @method loadApp - * @private - * @param {Array} appConfigs An array of - * {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - * @param {F2.AppManifest} [appManifest] The AppManifest object - */ - var _loadApps = function(appConfigs, appManifest) { - appConfigs = [].concat(appConfigs); - - // check for secure app - if (appConfigs.length == 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { - _loadSecureApp(appConfigs[0], appManifest); - return; - } - - // check that the number of apps in manifest matches the number requested - if (appConfigs.length != appManifest.apps.length) { - F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); - return; - } - - // Fn for loading manifest Styles - var _loadStyles = function(styles, cb) { - // Attempt to use the user provided method - if (_config.loadStyles) { - return _config.loadStyles(styles, cb); - } - - // load styles, see #101 - var stylesFragment = null, - useCreateStyleSheet = !! document.createStyleSheet; - - jQuery.each(styles, function(i, e) { - var resourceUrl = e, - resourceKey = e.toLowerCase(); - - if (_loadedStyles[resourceKey]) { - return; - } - - if (useCreateStyleSheet) { - document.createStyleSheet(resourceUrl); - } - else { - stylesFragment = stylesFragment || []; - stylesFragment.push(''); - } - - _loadedStyles[resourceKey] = true; - }); - - if (stylesFragment) { - jQuery('head').append(stylesFragment.join('')); - } - - cb(); - }; - - // For loading AppManifest.scripts - // Parts derived from curljs, headjs, requirejs, dojo - var _loadScripts = function(scripts, cb) { - // Attempt to use the user provided method - if (_config.loadScripts) { - return _config.loadScripts(scripts, cb); - } - - if (!scripts.length) { - return cb(); - } - - var doc = window.document; - var scriptCount = scripts.length; - var scriptsLoaded = 0; - //http://caniuse.com/#feat=script-async - // var supportsAsync = 'async' in doc.createElement('script') || 'MozAppearance' in doc.documentElement.style || window.opera; - var head = doc && (doc['head'] || doc.getElementsByTagName('head')[0]); - // to keep IE from crying, we need to put scripts before any - // elements, but after any . this should do it: - var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; - // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 - var readyStates = 'addEventListener' in window ? {} : { 'loaded': true, 'complete': true }; - - // Log and emit event for the failed (400,500) scripts - var _error = function(e) { - setTimeout(function() { - var evtData = { - src: e.target.src, - appId: appConfigs[0].appId - }; - - // Send error to console - F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); - - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); - - if (!_bUsesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], evtData.src); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - evtData.src - ); - } - }, _config.scriptErrorTimeout); // Defaults to 7000 - }; - - var _checkComplete = function() { - // Are we done loading all scripts for this app? - if (++scriptsLoaded === scriptCount) { - // success - cb(); - } - }; - - var _emptyWaitlist = function(resourceKey, errorEvt) { - var waiting, - waitlist = _loadingScripts[resourceKey]; - - if (!waitlist) { - return; - } - - for (var i=0; i really is the best - head.insertBefore(script, insertBeforeEl); - }); - }; - - var _loadInlineScripts = function(inlines, cb) { - // Attempt to use the user provided method - if (_config.loadInlineScripts) { - _config.loadInlineScripts(inlines, cb); - } - else { - for (var i = 0, len = inlines.length; i < len; i++) { - try { - eval(inlines[i]); - } - catch (exception) { - F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); - - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { appId:appConfigs[0].appId, src: inlines[i], err: exception }); - - if (!_bUsesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], exception); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - exception - ); - } - } - } - cb(); - } - }; - - // Determine whether an element has been added to the page - var elementInDocument = function(element) { - if (element) { - while (element.parentNode) { - element = element.parentNode; - - if (element === document) { - return true; - } - } - } - - return false; - }; - - // Fn for loading manifest app html - var _loadHtml = function(apps) { - jQuery.each(apps, function(i, a) { - if (_isPlaceholderElement(appConfigs[i].root)) { - jQuery(appConfigs[i].root) - .addClass(F2.Constants.Css.APP) - .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); - } - else if (!_bUsesAppHandlers) { - // load html and save the root node - appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfigs[i], // the app config - _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) - ); - - var appId = appConfigs[i].appId, - root = appConfigs[i].root; - - if (!root) { - throw ('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); - } - - if (!elementInDocument(root)) { - throw ('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfigs[i] // the app config - ); - - if (!F2.isNativeDOMNode(root)) { - throw ('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); - } - } - - // init events - _initAppEvents(appConfigs[i]); - }); - }; - - // Pull out the manifest data - var scripts = appManifest.scripts || []; - var styles = appManifest.styles || []; - var inlines = appManifest.inlineScripts || []; - var apps = appManifest.apps || []; - - // Finally, load the styles, html, and scripts - _loadStyles(styles, function() { - // Put the html on the page - _loadHtml(apps); - // Add the script content to the page - _loadScripts(scripts, function() { - // emit event we're done with scripts - if (appConfigs[0]){ F2.Events.emit('APP_SCRIPTS_LOADED', { appId:appConfigs[0].appId, scripts:scripts }); } - // Load any inline scripts - _loadInlineScripts(inlines, function() { - // Create the apps - jQuery.each(appConfigs, function(i, a) { - _createAppInstance(a, appManifest.apps[i]); - }); - }); - }); - }); - }; - - /** - * Loads the app's html/css/javascript into an iframe - * @method loadSecureApp - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into the - * page. - */ - var _loadSecureApp = function(appConfig, appManifest) { - - // make sure the container is configured for secure apps - if (_config.secureAppPagePath) { - if (_isPlaceholderElement(appConfig.root)) { - jQuery(appConfig.root) - .addClass(F2.Constants.Css.APP) - .append(jQuery('
').addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - } - else if (!_bUsesAppHandlers) { - // create the html container for the iframe - appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); - } - else { - var $root = jQuery(appConfig.root); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfig, // the app config - _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) - ); - - if ($root.parents('body:first').length === 0) { - throw ('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfig // the app config - ); - - if (!appConfig.root) { - throw ('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } - - if (!F2.isNativeDOMNode(appConfig.root)) { - throw ('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } - } - - // instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - // init events - _initAppEvents(appConfig); - // create RPC socket - F2.Rpc.register(appConfig, appManifest); - } - else { - F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); - } - }; - - var _outerHtml = function(html) { - return jQuery('
').append(html).html(); - }; - - /** - * Checks if the app is valid - * @method _validateApp - * @private - * @param {F2.AppConfig} appConfig The F2.AppConfig object - * @returns {bool} True if the app is valid - */ - var _validateApp = function(appConfig) { - - // check for valid app configurations - if (!appConfig.appId) { - F2.log('"appId" missing from app object'); - return false; - } - else if (!appConfig.root && !appConfig.manifestUrl) { - F2.log('"manifestUrl" missing from app object'); - return false; - } - - return true; - }; - - /** - * Checks if the ContainerConfig is valid - * @method _validateContainerConfig - * @private - * @returns {bool} True if the config is valid - */ - var _validateContainerConfig = function() { - - if (_config) { - if (_config.xhr) { - if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { - throw ('ContainerConfig.xhr should be a function or an object'); - } - if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { - throw ('ContainerConfig.xhr.dataType should be a function'); - } - if (_config.xhr.type && typeof _config.xhr.type !== 'function') { - throw ('ContainerConfig.xhr.type should be a function'); - } - if (_config.xhr.url && typeof _config.xhr.url !== 'function') { - throw ('ContainerConfig.xhr.url should be a function'); - } - } - } - - return true; - }; - - return { - /** - * Gets the current list of apps in the container - * @method getContainerState - * @returns {Array} An array of objects containing the appId - */ - getContainerState: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerState()'); - return; - } - - return jQuery.map(_apps, function(app) { - return { - appId: app.config.appId - }; - }); - }, - /** - * Gets the current locale defined by the container - * @method getContainerLocale - * @returns {String} IETF-defined standard language tag - */ - getContainerLocale: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerLocale()'); - return; - } - - return F2.ContainerConfig.locale; - }, - /** - * Initializes the container. This method must be called before performing - * any other actions in the container. - * @method init - * @param {F2.ContainerConfig} config The configuration object - */ - init: function(config) { - _config = config || {}; - - _validateContainerConfig(); - - _hydrateContainerConfig(_config); - - // dictates whether we use the old logic or the new logic. - // TODO: Remove in v2.0 - _bUsesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); - - // only establish RPC connection if the container supports the secure app page - if ( !! _config.secureAppPagePath || _config.isSecureAppPage) { - F2.Rpc.init( !! _config.secureAppPagePath ? _config.secureAppPagePath : false); - } - - F2.UI.init(_config); - - if (!_config.isSecureAppPage) { - _initContainerEvents(); - } - }, - /** - * Has the container been init? - * @method isInit - * @return {bool} True if the container has been init - */ - isInit: _isInit, - /** - * Automatically load apps that are already defined in the DOM. Elements will - * be rendered into the location of the placeholder DOM element. Any AppHandlers - * that are defined will be bypassed. - * @method loadPlaceholders - * @param {Element} parentNode The element to search for placeholder apps - */ - loadPlaceholders: function(parentNode) { - - var elements = [], - appConfigs = [], - add = function(e) { - if (!e) { return; } - elements.push(e); - }, - addAll = function(els) { - if (!els) { return; } - for (var i = 0, len = els.length; i < len; i++) { - add(els[i]); - } - }; - - if (!!parentNode && !F2.isNativeDOMNode(parentNode)) { - throw ('"parentNode" must be null or a DOM node'); - } - - // if the passed in element has a data-f2-appid attribute add - // it to the list of elements but to not search within that - // element for other placeholders - if (parentNode && parentNode.hasAttribute('data-f2-appid')) { - add(parentNode); - } else { - - // find placeholders within the parentNode only if - // querySelectorAll exists - parentNode = parentNode || document; - if (parentNode.querySelectorAll) { - addAll(parentNode.querySelectorAll('[data-f2-appid]')); - } - } - - for (var i = 0, len = elements.length; i < len; i++) { - var appConfig = _getAppConfigFromElement(elements[i]); - appConfigs.push(appConfig); - } - - if (appConfigs.length) { - F2.registerApps(appConfigs); - } - }, - /** - * Begins the loading process for all apps and/or initialization process for pre-loaded apps. - * The app will be passed the {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will - * contain the app's unique instanceId within the container. If the - * {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated the app is considered - * to be a pre-loaded app and will be handled accordingly. Optionally, the - * {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those - * assets will be used instead of making a request. - * @method registerApps - * @param {Array} appConfigs An array of {{#crossLink "F2.AppConfig"}}{{/crossLink}} - * objects - * @param {Array} [appManifests] An array of - * {{#crossLink "F2.AppManifest"}}{{/crossLink}} - * objects. This array must be the same length as the apps array that is - * objects. This array must be the same length as the apps array that is - * passed in. This can be useful if apps are loaded on the server-side and - * passed down to the client. - * @example - * Traditional App requests. - * - * // Traditional f2 app configs - * var arConfigs = [ - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * }, - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * }, - * { - * appId: 'com_externaldomain_example_app2', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs); - * - * @example - * Pre-loaded and tradition apps mixed. - * - * // Pre-loaded apps and traditional f2 app configs - * // you can preload the same app multiple times as long as you have a unique root for each - * var arConfigs = [ - * { - * appId: 'com_mydomain_example_app', - * context: {}, - * root: 'div#example-app-1', - * manifestUrl: '' - * }, - * { - * appId: 'com_mydomain_example_app', - * context: {}, - * root: 'div#example-app-2', - * manifestUrl: '' - * }, - * { - * appId: 'com_externaldomain_example_app', - * context: {}, - * manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs); - * - * @example - * Apps with predefined manifests. - * - * // Traditional f2 app configs - * var arConfigs = [ - * {appId: 'com_externaldomain_example_app', context: {}}, - * {appId: 'com_externaldomain_example_app', context: {}}, - * {appId: 'com_externaldomain_example_app2', context: {}} - * ]; - * - * // Pre requested manifest responses - * var arManifests = [ - * { - * apps: ['
Example App!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/AppClass.js'], - * styles: ['http://www.domain.com/css/AppStyles.css'] - * }, - * { - * apps: ['
Example App!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/AppClass.js'], - * styles: ['http://www.domain.com/css/AppStyles.css'] - * }, - * { - * apps: ['
Example App 2!
'], - * inlineScripts: [], - * scripts: ['http://www.domain.com/js/App2Class.js'], - * styles: ['http://www.domain.com/css/App2Styles.css'] - * } - * ]; - * - * F2.init(); - * F2.registerApps(arConfigs, arManifests); - */ - registerApps: function(appConfigs, appManifests) { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.registerApps()'); - return; - } - else if (!appConfigs) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - } - - var appStack = []; - var batches = {}; - var callbackStack = {}; - var haveManifests = false; - appConfigs = [].concat(appConfigs); - appManifests = [].concat(appManifests || []); - haveManifests = !! appManifests.length; - - // appConfigs must have a length - if (!appConfigs.length) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - // ensure that the array of apps and manifests are qual - } - else if (appConfigs.length && haveManifests && appConfigs.length != appManifests.length) { - F2.log('The length of "apps" does not equal the length of "appManifests"'); - return; - } - - // validate each app and assign it an instanceId - // then determine which apps can be batched together - jQuery.each(appConfigs, function(i, a) { - // add properties and methods - a = _createAppConfig(a); - - // Will set to itself, for preloaded apps, or set to null for apps that aren't already - // on the page. - a.root = a.root || null; - - // we validate the app after setting the root property because pre-load apps do no require - // manifest url - if (!_validateApp(a)) { - return; // move to the next app - } - - // save app - _apps[a.instanceId] = { - config: a - }; - - // If the root property is defined then this app is considered to be preloaded and we will - // run it through that logic. - if (a.root && !_isPlaceholderElement(a.root)) { - if ((!a.root && typeof(a.root) != 'string') && !F2.isNativeDOMNode(a.root)) { - F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); - F2.log('AppConfig instance:', a); - throw ('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); - } - else if (jQuery(a.root).length != 1) { - F2.log('AppConfig invalid for pre-load, root not unique'); - F2.log('AppConfig instance:', a); - F2.log('Number of dom node instances:', jQuery(a.root).length); - throw ('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); - } - - // instantiate F2.App - _createAppInstance(a); - - // init events - _initAppEvents(a); - - // Continue on in the .each loop, no need to continue because the app is on the page - // the js in initialized, and it is ready to role. - return; // equivalent to continue in .each - } - - if (!_isPlaceholderElement(a.root)) { - if (!_bUsesAppHandlers) { - // fire beforeAppRender - a.root = _beforeAppRender(a); - } - else { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - a // the app config - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - a // the app config - ); - } - } - - // if we have the manifest, go ahead and load the app - if (haveManifests) { - _loadApps(a, appManifests[i]); - } - else { - // check if this app can be batched - if (a.enableBatchRequests && !a.isSecure) { - batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; - batches[a.manifestUrl.toLowerCase()].push(a); - } - else { - appStack.push({ - apps: [a], - url: a.manifestUrl - }); - } - } - }); - - // we don't have the manifests, go ahead and load them - if (!haveManifests) { - // add the batches to the appStack - jQuery.each(batches, function(i, b) { - appStack.push({ - url: i, - apps: b - }); - }); - - // if an app is being loaded more than once on the page, there is the - // potential that the jsonp callback will be clobbered if the request - // for the AppManifest for the app comes back at the same time as - // another request for the same app. We'll create a callbackStack - // that will ensure that requests for the same app are loaded in order - // rather than at the same time - jQuery.each(appStack, function(i, req) { - // define the callback function based on the first app's App ID - var jsonpCallback = F2.Constants.JSONP_CALLBACK + req.apps[0].appId; - - // push the request onto the callback stack - callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; - callbackStack[jsonpCallback].push(req); - }); - - // loop through each item in the callback stack and make the request - // for the AppManifest. When the request is complete, pop the next - // request off the stack and make the request. - jQuery.each(callbackStack, function(i, requests) { - - var manifestRequest = function(jsonpCallback, req) { - if (!req) { - return; - } - - // setup defaults and callbacks - var url = req.url, - type = 'GET', - dataType = 'jsonp', - completeFunc = function() { - manifestRequest(i, requests.pop()); - }, - errorFunc = function() { - jQuery.each(req.apps, function(idx, item) { - item.name = item.name || item.appId; - F2.log('Removed failed ' + item.name + ' app', item); - F2.removeApp(item.instanceId); - }); - }, - successFunc = function(appManifest) { - _loadApps(req.apps, appManifest); - }; - - // optionally fire xhr overrides - if (_config.xhr && _config.xhr.dataType) { - dataType = _config.xhr.dataType(req.url, req.apps); - if (typeof dataType !== 'string') { - throw ('ContainerConfig.xhr.dataType should return a string'); - } - } - if (_config.xhr && _config.xhr.type) { - type = _config.xhr.type(req.url, req.apps); - if (typeof type !== 'string') { - throw ('ContainerConfig.xhr.type should return a string'); - } - } - if (_config.xhr && _config.xhr.url) { - url = _config.xhr.url(req.url, req.apps); - if (typeof url !== 'string') { - throw ('ContainerConfig.xhr.url should return a string'); - } - } - - // setup the default request function if an override is not present - var requestFunc = _config.xhr; - if (typeof requestFunc !== 'function') { - requestFunc = function(url, appConfigs, successCallback, errorCallback, completeCallback) { - jQuery.ajax({ - url: url, - type: type, - data: { - params: F2.stringify(req.apps, F2.appConfigReplacer) - }, - jsonp: false, // do not put 'callback=' in the query string - jsonpCallback: jsonpCallback, // Unique function name - dataType: dataType, - success: successCallback, - error: function(jqxhr, settings, exception) { - F2.log('Failed to load app(s)', exception.toString(), req.apps); - errorCallback(); - }, - complete: completeCallback - }); - }; - } - - requestFunc(url, req.apps, successFunc, errorFunc, completeFunc); - }; - - manifestRequest(i, requests.pop()); - }); - } - }, - /** - * Removes all apps from the container - * @method removeAllApps - */ - removeAllApps: function() { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeAllApps()'); - return; - } + Handles [Context](../../app-development.html#context) passing from containers + to apps and apps to apps. + @class F2.Events +*/ +F2.extend('Events', (function() { + var _events = new EventEmitter2({ + wildcard: true + }); + + // Unlimited listeners, set to > 0 for debugging + _events.setMaxListeners(0); + + return { + /** + Same as F2.Events.emit except that it will not send the event to all + sockets. + @method _socketEmit + @private + @param {string} event The event name + @param {object} [arg]* The arguments to be passed + @returns {object} EventEmitter2 instance + */ + _socketEmit: function() { + return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); + }, + /** + Execute each of the listeners that may be listening for the specified + event name in order with the list of arguments. + @method emit + @param {string} event The event name + @param {object} [arg]* The arguments to be passed + @returns {object} EventEmitter2 instance + */ + emit: function() { + F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); + return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); + }, + /** + Adds a listener that will execute n times for the event before being + removed. The listener is invoked only the first time the event is fired, + after which it is removed. + @method many + @param {string} event The event name + @param {int} timesToListen The number of times to execute the event + before being removed + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ + many: function(event, timesToListen, listener) { + return _events.many(event, timesToListen, listener); + }, + /** + Remove a listener for the specified event. + @method off + @param {string} event The event name + @param {function} listener The function that will be removed + @returns {object} EventEmitter2 instance + */ + off: function(event, listener) { + return _events.off(event, listener); + }, + /** + Adds a listener for the specified event + @method on + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ + on: function(event, listener) { + return _events.on(event, listener); + }, + /** + Adds a one time listener for the event. The listener is invoked only + the first time the event is fired, after which it is removed. + @method once + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @returns {object} EventEmitter2 instance + */ + once: function(event, listener) { + return _events.once(event, listener); + } + }; +})()); - jQuery.each(_apps, function(i, a) { - F2.removeApp(a.config.instanceId); - }); - }, - /** - * Removes an app from the container - * @method removeApp - * @param {string} instanceId The app's instanceId - */ - removeApp: function(instanceId) { - - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeApp()'); - return; - } +/** + Handles socket communication between the container and secure apps + @class F2.Rpc +*/ +F2.extend('Rpc', (function() { + var _callbacks = {}; + var _secureAppPagePath = ''; + var _apps = {}; + var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); + var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); + var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); + var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); + var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); + + /** + Creates a socket connection from the app to the container using + easyXDM. + @method _createAppToContainerSocket + @private + */ + function _createAppToContainerSocket() { + var appConfig; + var isLoaded = false; + /** + It's possible for messages to be received before the socket load event has + happened. We'll save off these messages and replay them once the socket is + ready. + */ + var messagePlayback = []; + + var socket = new easyXDM.Socket({ + onMessage: function(message, origin) { + // Handle Socket Load + if (!isLoaded && _rSocketLoad.test(message)) { + message = message.replace(_rSocketLoad, ''); + var appParts = F2.parse(message); + + // Make sure we have the AppConfig and AppManifest + if (appParts.length === 2) { + appConfig = appParts[0]; + + // Save socket + _apps[appConfig.instanceId] = { + config: appConfig, + socket: socket + }; + + F2.registerApps([appConfig], [appParts[1]]); + + // Socket message playback + jQuery.each(messagePlayback, function() { + _onMessage(appConfig, message, origin); + }); + + isLoaded = true; + } + } else if (isLoaded) { + // Pass everyting else to _onMessage + _onMessage(appConfig, message, origin); + } else { + messagePlayback.push(message); + } + } + }); + } + + /** + Creates a socket connection from the container to the app using + easyXDM. + @method _createContainerToAppSocket + @private + @param {appConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The F2.AppManifest object + @return {object} The new socket + */ + function _createContainerToAppSocket(appConfig, appManifest) { + var container = jQuery(appConfig.root); + + if (!container.length) { + F2.log('Unable to locate app in order to establish secure connection.'); + return; + } + + var iframeProps = { + scrolling: 'no', + style: { + width: '100%' + } + }; + + if (appConfig.height) { + iframeProps.style.height = appConfig.height + 'px'; + } + + var socket = new easyXDM.Socket({ + remote: _secureAppPagePath, + container: container.get(0), + props: iframeProps, + onMessage: function(message, origin) { + _onMessage(appConfig, message, origin); + }, + onReady: function() { + socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); + } + }); + + return socket; + } + + /** + @method _createRpcCallback + @private + @param {string} instanceId The app's Instance ID + @param {function} callbackId The callback ID + @return {function} A function to make the RPC call + */ + function _createRpcCallback(instanceId, callbackId) { + return function() { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC_CALLBACK, + callbackId, + [].slice.call(arguments).slice(2) + ); + }; + } + + /** + Handles messages that come across the sockets + @method _onMessage + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} message The socket message + @param {string} origin The originator + */ + function _onMessage(appConfig, message, origin) { + var obj; + var func; + + function parseFunction(parent, functionName) { + var path = String(functionName).split('.'); + for (var i = 0; i < path.length; i++) { + if (parent[path[i]] === undefined) { + parent = undefined; + break; + } + parent = parent[path[i]]; + } + return parent; + } + + function parseMessage(regEx, rawMessage, instanceId) { + var o = F2.parse(rawMessage.replace(regEx, '')); + + // if obj.callbacks + // for each callback + // for each params + // if callback matches param + // replace param with _createRpcCallback(app.instanceId, callback) + if (o.params && o.params.length && o.callbacks && o.callbacks.length) { + jQuery.each(o.callbacks, function(i, c) { + jQuery.each(o.params, function(j, p) { + if (c === p) { + o.params[j] = _createRpcCallback(instanceId, c); + } + }); + }); + } + + return o; + } + + // Handle UI Call + if (_rUiCall.test(message)) { + obj = parseMessage(_rUiCall, message, appConfig.instanceId); + func = parseFunction(appConfig.ui, obj.functionName); + + if (func !== undefined) { + func.apply(appConfig.ui, obj.params); + } else { + F2.log('Unable to locate UI RPC function: ' + obj.functionName); + } + } else if (_rRpc.test(message)) { + obj = parseMessage(_rRpc, message, appConfig.instanceId); + func = parseFunction(window, obj.functionName); + + if (func !== undefined) { + func.apply(func, obj.params); + } else { + F2.log('Unable to locate RPC function: ' + obj.functionName); + } + } else if (_rRpcCallback.test(message)) { + obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); + + if (_callbacks[obj.functionName] !== undefined) { + _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); + delete _callbacks[obj.functionName]; + } + } else if (_rEvents.test(message)) { + obj = parseMessage(_rEvents, message, appConfig.instanceId); + F2.Events._socketEmit.apply(F2.Events, obj); + } + } + + /** + Registers a callback function + @method _registerCallback + @private + @param {function} callback The callback function + @return {string} The callback ID + */ + function _registerCallback(callback) { + var callbackId = F2.guid(); + _callbacks[callbackId] = callback; + return callbackId; + } + + return { + /** + Broadcast an RPC function to all sockets + @method broadcast + @param {string} messageType The message type + @param {Array} params The parameters to broadcast + */ + broadcast: function(messageType, params) { + var message = messageType + F2.stringify(params); + + jQuery.each(_apps, function(i, a) { + a.socket.postMessage(message); + }); + }, + /** + Calls a remote function + @method call + @param {string} instanceId The app's Instance ID + @param {string} messageType The message type + @param {string} functionName The name of the remote function + @param {Array} params An array of parameters to pass to the remote + function. Any functions found within the params will be treated as a + callback function. + */ + call: function(instanceId, messageType, functionName, params) { + // Loop through params and find functions and convert them to callbacks + var callbacks = []; + + jQuery.each(params, function(i, e) { + if (typeof e === 'function') { + var cid = _registerCallback(e); + params[i] = cid; + callbacks.push(cid); + } + }); + + _apps[instanceId].socket.postMessage( + messageType + F2.stringify({ + functionName: functionName, + params: params, + callbacks: callbacks + }) + ); + }, + + /** + Init function which tells F2.Rpc whether it is running at the container- + level or the app-level. This method is generally called by + F2.{{#crossLink "F2/init"}}{{/crossLink}} + @method init + @param {string} [secureAppPagePath] The + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath + property + */ + init: function(secureAppPagePath) { + _secureAppPagePath = secureAppPagePath; + + if (!_secureAppPagePath) { + _createAppToContainerSocket(); + } + }, + + /** + Determines whether the Instance ID is considered to be 'remote'. This is + determined by checking if 1) the app has an open socket and 2) whether + F2.Rpc is running inside of an iframe + @method isRemote + @param {string} instanceId The Instance ID + @return {bool} True if there is an open socket + */ + isRemote: function(instanceId) { + var appExists = _apps[instanceId] !== undefined; + var appIsSecure = _apps[instanceId].config.isSecure; + var noFrameAccess = !jQuery(_apps[instanceId].config.root).find('iframe').length; + + return appExists && appIsSecure && noFrameAccess; + }, + + /** + Creates a container-to-app or app-to-container socket for communication + @method register + @param {F2.AppConfig} [appConfig] The F2.AppConfig object + @param {F2.AppManifest} [appManifest] The F2.AppManifest object + */ + register: function(appConfig, appManifest) { + if (appConfig && appManifest) { + _apps[appConfig.instanceId] = { + config: appConfig, + socket: _createContainerToAppSocket(appConfig, appManifest) + }; + } else { + F2.log('Unable to register socket connection. Please check container configuration.'); + } + } + }; +})()); - if (_apps[instanceId]) { - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - _apps[instanceId] // the app instance - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY, - _apps[instanceId] // the app instance - ); - - F2.AppHandlers.__trigger( - _sAppHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - _apps[instanceId] // the app instance - ); - - delete _apps[instanceId]; - } - } - }; +F2.extend('UI', (function() { + + var _containerConfig; + + /** + UI helper methods + @class F2.UI + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object + */ + function UIClass(appConfig) { + var _appConfig = appConfig; + var $root = jQuery(appConfig.root); + + function _updateHeight(height) { + height = height || jQuery(_appConfig.root).outerHeight(); + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'updateHeight', + [ + height + ] + ); + } else { + _appConfig.height = height; + $root.find('iframe').height(_appConfig.height); + } + } + + // http://getbootstrap.com/javascript/#modals + function _modalHtml(type, message, showCancel) { + return [ + '' + ].join(''); + } + + return { + /** + Removes a overlay from an Element on the page + @method hideMask + @param {string|Element} selector The Element or selector to an Element + that currently contains the loader + */ + hideMask: function(selector) { + F2.UI.hideMask(_appConfig.instanceId, selector); + }, + /** + Helper methods for creating and using Modals + @class F2.UI.Modals + @for F2.UI + */ + Modals: (function() { + function _renderAlert(message) { + return _modalHtml('Alert', message); + } + + function _renderConfirm(message) { + return _modalHtml('Confirm', message, true); + } + + return { + /** + Display an alert message on the page + @method alert + @param {string} message The message to be displayed + @param {function} [callback] The callback to be fired when the user + closes the dialog + @for F2.UI.Modals + */ + alert: function(message, callback) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.Modals.alert()'); + return; + } + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Modals.alert', + [].slice.call(arguments) + ); + } else { + // Display the alert + jQuery(_renderAlert(message)) + .on('show.bs.modal', function() { + var modal = this; + jQuery(modal).find('.btn-primary').on('click', function() { + jQuery(modal).modal('hide').remove(); + (callback || jQuery.noop)(); + }); + }) + .modal({ + backdrop: true + }); + } + }, + /** + Display a confirm message on the page + @method confirm + @param {string} message The message to be displayed + @param {function} okCallback The function that will be called when + the OK button is pressed + @param {function} cancelCallback The function that will be called + when the Cancel button is pressed + @for F2.UI.Modals + */ + confirm: function(message, okCallback, cancelCallback) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.Modals.confirm()'); + return; + } + + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Modals.confirm', + [].slice.call(arguments) + ); + } else { + // Display the alert + jQuery(_renderConfirm(message)) + .on('show.bs.modal', function() { + var modal = this; + + jQuery(modal).find('.btn-ok').on('click', function() { + jQuery(modal).modal('hide').remove(); + (okCallback || jQuery.noop)(); + }); + + jQuery(modal).find('.btn-cancel').on('click', function() { + jQuery(modal).modal('hide').remove(); + (cancelCallback || jQuery.noop)(); + }); + }) + .modal({ + backdrop: true + }); + } + } + }; + })(), + /** + Sets the title of the app as shown in the browser. Depending on the + container HTML, this method may do nothing if the container has not been + configured properly or else the container provider does not allow Title's + to be set. + @method setTitle + @param {string} title The title of the app + @for F2.UI + */ + setTitle: function(title) { + if (F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'setTitle', + [title] + ); + } else { + jQuery(_appConfig.root).find('.' + F2.Constants.Css.APP_TITLE).text(title); + } + }, + /** + Display an ovarlay over an Element on the page + @method showMask + @param {string|Element} selector The Element or selector to an Element + over which to display the loader + @param {bool} showLoader Display a loading icon + */ + showMask: function(selector, showLoader) { + F2.UI.showMask(_appConfig.instanceId, selector, showLoader); + }, + /** + For secure apps, this method updates the size of the iframe that + contains the app. **Note: It is recommended that app developers call + this method anytime Elements are added or removed from the DOM** + @method updateHeight + @param {int} height The height of the app + */ + updateHeight: _updateHeight, + /** + Helper methods for creating and using Views + @class F2.UI.Views + @for F2.UI + */ + Views: (function() { + var _events = new EventEmitter2(); + var eventsPattern = /change/i; + + // Unlimited listeners, set to > 0 for debugging + _events.setMaxListeners(0); + + function _isValid(eventName) { + if (!eventsPattern.test(eventName)) { + F2.log('"' + eventName + '" is not a valid F2.UI.Views event name'); + return false; + } + + return true; + } + + return { + /** + Change the current view for the app or add an event listener + @method change + @param {string|function} [input] If a string is passed in, the view + will be changed for the app. If a function is passed in, a change + event listener will be added. + @for F2.UI.Views + */ + change: function(input) { + if (typeof input === 'function') { + this.on('change', input); + } else if (typeof input === 'string') { + if (_appConfig.isSecure && !F2.Rpc.isRemote(_appConfig.instanceId)) { + F2.Rpc.call( + _appConfig.instanceId, + F2.Constants.Sockets.UI_RPC, + 'Views.change', + [].slice.call(arguments) + ); + } else if (F2.inArray(input, _appConfig.views)) { + jQuery('.' + F2.Constants.Css.APP_VIEW, $root) + .addClass('hide') + .filter('[data-f2-view="' + input + '"]', $root) + .removeClass('hide'); + + _updateHeight(); + _events.emit('change', input); + } + } + }, + /** + Removes a view event listener + @method off + @param {string} event The event name + @param {function} listener The function that will be removed + @for F2.UI.Views + */ + off: function(event, listener) { + if (_isValid(event)) { + _events.off(event, listener); + } + }, + /** + Adds a view event listener + @method on + @param {string} event The event name + @param {function} listener The function to be fired when the event is + emitted + @for F2.UI.Views + */ + on: function(event, listener) { + if (_isValid(event)) { + _events.on(event, listener); + } + } + }; + })() + }; + } + + /** + Removes a overlay from an Element on the page + @method hideMask + @static + @param {string} instanceId The Instance ID of the app + @param {string|Element} selector The Element or selector to an Element + that currently contains the loader + @for F2.UI + */ + UIClass.hideMask = function(instanceId, selector) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.hideMask()'); + return; + } + + if (F2.Rpc.isRemote(instanceId) && !jQuery(selector).is('.' + F2.Constants.Css.APP)) { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC, + 'F2.UI.hideMask', + [ + instanceId, + // Have to pass selector or else there will be stringify errors + jQuery(selector).selector + ] + ); + } else { + var container = jQuery(selector); + container.find('> .' + F2.Constants.Css.MASK).remove(); + container.removeClass(F2.Constants.Css.MASK_CONTAINER); + + // If the element contains this property, reset to static position + if (container.data(F2.Constants.Css.MASK_CONTAINER)) { + container.css({ 'position': 'static' }); + } + } + }; + + /** + Runs initialization code for the UI class + @method init + @static + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object + */ + UIClass.init = function(containerConfig) { + _containerConfig = containerConfig; + _containerConfig.UI = jQuery.extend(true, {}, F2.ContainerConfig.UI, _containerConfig.UI || {}); + }; + + /** + Display an ovarlay over an Element on the page + @method showMask + @static + @param {string} instanceId The Instance ID of the app + @param {string|Element} selector The Element or selector to an Element over + which to display the loader + @param {bool} showLoading Display a loading icon + */ + UIClass.showMask = function(instanceId, selector, showLoading) { + if (!F2.isInit()) { + F2.log('F2.init() must be called before F2.UI.showMask()'); + return; + } + + if (F2.Rpc.isRemote(instanceId) && jQuery(selector).is('.' + F2.Constants.Css.APP)) { + F2.Rpc.call( + instanceId, + F2.Constants.Sockets.RPC, + 'F2.UI.showMask', + [ + instanceId, + // Have to pass selector or else there will be stringify errors + jQuery(selector).selector, + showLoading + ] + ); + } else { + if (showLoading && !_containerConfig.UI.Mask.loadingIcon) { + F2.log('Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();'); + } + + var container = jQuery(selector).addClass(F2.Constants.Css.MASK_CONTAINER); + var mask = jQuery('
') + .height('100%') + .width('100%') + .addClass(F2.Constants.Css.MASK); + + // Set inline styles if useClasses is false + if (!_containerConfig.UI.Mask.useClasses) { + mask.css({ + 'background-color': _containerConfig.UI.Mask.backgroundColor, + 'background-image': _containerConfig.UI.Mask.loadingIcon ? ('url(' + _containerConfig.UI.Mask.loadingIcon + ')') : '', + 'background-position': '50% 50%', + 'background-repeat': 'no-repeat', + 'display': 'block', + 'left': 0, + 'min-height': 30, + 'padding': 0, + 'position': 'absolute', + 'top': 0, + 'z-index': _containerConfig.UI.Mask.zIndex, + 'filter': 'alpha(opacity=' + (_containerConfig.UI.Mask.opacity * 100) + ')', + 'opacity': _containerConfig.UI.Mask.opacity + }); + } + + if (container.css('position') === 'static') { + container.css({ 'position': 'relative' }); + + // Setting this property tells hideMask to set the position to static + container.data(F2.Constants.Css.MASK_CONTAINER, true); + } + + container.append(mask); + } + }; + + return UIClass; })()); jQuery(function() { diff --git a/tests/f2.min.map b/tests/f2.min.map deleted file mode 100644 index f2076109..00000000 --- a/tests/f2.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","JSON","f","n","quote","string","escapable","lastIndex","test","replace","a","c","meta","charCodeAt","toString","slice","str","key","holder","i","k","v","length","partial","mind","gap","value","toJSON","rep","call","isFinite","String","indent","Object","prototype","apply","join","push","hasOwnProperty","Date","this","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","cx","\b","\t","\n","\f","\r","\"","\\","stringify","replacer","space","Error","parse","text","reviver","walk","undefined","j","eval","SyntaxError","window","createOptions","options","object","optionsCache","jQuery","each","split","core_rspace","_","flag","dataAttr","elem","data","nodeType","name","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","obj","isEmptyObject","returnFalse","returnTrue","isDisconnected","node","parentNode","sibling","cur","dir","winnow","elements","qualifier","keep","isFunction","grep","retVal","filtered","isSimple","filter","inArray","createSafeFragment","document","list","nodeNames","safeFrag","createDocumentFragment","createElement","pop","findOrAppend","tag","getElementsByTagName","appendChild","ownerDocument","cloneCopyEvent","src","dest","hasData","type","l","oldData","_data","curData","events","handle","event","add","extend","cloneFixAttributes","nodeName","clearAttributes","mergeAttributes","outerHTML","support","html5Clone","innerHTML","trim","rcheckableType","defaultChecked","checked","selected","defaultSelected","defaultValue","removeAttribute","expando","getAll","querySelectorAll","fixDefaultChecked","vendorPropName","style","capName","charAt","toUpperCase","origName","cssPrefixes","isHidden","el","css","contains","showHide","show","display","values","index","css_defaultDisplay","curCSS","setPositiveNumber","subtract","matches","rnumsplit","exec","Math","max","augmentWidthOrHeight","extra","isBorderBox","val","cssExpand","parseFloat","getWidthOrHeight","offsetWidth","offsetHeight","valueIsBorderBox","boxSizing","rnumnonpx","boxSizingReliable","elemdisplay","appendTo","body","remove","iframe","frameBorder","width","height","iframeDoc","contentWindow","contentDocument","write","close","removeChild","buildParams","prefix","traditional","isArray","rbracket","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","placeBefore","dataTypes","substr","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","selection","executeOnly","prefilters","unshift","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","contents","responseFields","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","conv","conv2","current","tmp","prev","dataFilter","splice","state","error","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","createFxNow","setTimeout","fxNow","now","createTweens","animation","props","prop","collection","tweeners","concat","Animation","properties","result","animationPrefilters","deferred","Deferred","always","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","opts","specialEasing","originalProperties","createTween","end","tween","Tween","easing","stop","gotoEnd","rejectWith","propFilter","start","fx","timer","anim","queue","progress","done","complete","fail","hooks","camelCase","cssHooks","expand","defaultPrefilter","dataShow","toggle","oldfire","orig","handled","hidden","_queueHooks","unqueued","empty","fire","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","hide","removeData","init","genFx","includeWidth","which","attrs","opacity","getWindow","isWindow","defaultView","parentWindow","rootjQuery","readyList","location","navigator","_jQuery","_$","$","core_push","Array","core_slice","core_indexOf","indexOf","core_toString","core_hasOwn","core_trim","selector","context","fn","core_pnum","source","core_rnotwhite","rtrim","rquickExpr","rsingleTag","rvalidchars","rvalidbraces","rvalidescape","rvalidtokens","rmsPrefix","rdashAlpha","fcamelCase","all","letter","DOMContentLoaded","addEventListener","removeEventListener","ready","readyState","detachEvent","class2type","constructor","match","doc","jquery","find","parseHTML","isPlainObject","attr","merge","getElementById","id","makeArray","size","toArray","get","num","pushStack","elems","ret","prevObject","callback","args","eq","first","last","arguments","map","sort","copy","copyIsArray","clone","noConflict","isReady","readyWait","holdReady","hold","wait","trigger","off","isNumeric","isNaN","msg","scripts","parsed","buildFragment","cacheable","fragment","childNodes","Function","parseXML","xml","DOMParser","parseFromString","async","loadXML","documentElement","noop","globalEval","execScript","isObj","arr","results","len","second","inv","arg","guid","proxy","access","chainable","emptyGet","pass","bulk","getTime","attachEvent","top","frameElement","doScroll","doScrollCheck","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","stack","once","stopOnFalse","self","disable","unique","has","disabled","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","action","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","contexts","select","opt","input","eventName","isSupported","clickFn","div","setAttribute","cssText","leadingWhitespace","firstChild","tbody","htmlSerialize","hrefNormalized","cssFloat","checkOn","optSelected","getSetAttribute","className","enctype","cloneNode","boxModel","compatMode","submitBubbles","changeBubbles","focusinBubbles","deleteExpando","noCloneEvent","reliableMarginRight","pixelPosition","noCloneChecked","optDisabled","fireEvent","radioValue","lastChild","checkClone","appendChecked","submit","change","focusin","container","tds","marginDiv","divReset","insertBefore","reliableHiddenOffsets","doesNotIncludeMarginInBodyOffset","offsetTop","getComputedStyle","marginRight","cache","deletedIds","uuid","random","noData","embed","applet","pvt","acceptData","thisCache","internalKey","getByName","isNode","cleanData","parts","part","attributes","substring","triggerHandler","dequeue","startLength","next","setter","delay","time","speeds","timeout","clearTimeout","clearQueue","count","defer","nodeHook","boolHook","fixSpecified","rclass","rreturn","rtype","rfocusable","rclickable","rboolean","removeAttr","removeProp","propFix","addClass","classNames","setClass","cl","removeClass","removes","toggleClass","stateVal","isBool","hasClass","valHooks","set","option","specified","selectedIndex","one","attrFn","notxml","nType","isXMLDoc","attrHooks","propName","attrNames","tabindex","readonly","for","class","maxlength","cellspacing","cellpadding","rowspan","colspan","usemap","frameborder","contenteditable","propHooks","tabIndex","attributeNode","getAttributeNode","parseInt","href","attrNode","property","nodeValue","coords","button","createAttribute","setAttributeNode","parent","rformElems","rtypenamespace","rhoverHack","rkeyEvent","rmouseEvent","rfocusMorph","hoverHack","special","hover","types","handler","elemData","eventHandle","t","tns","namespaces","handleObj","handleObjIn","handlers","triggered","dispatch","delegateType","bindType","origType","needsContext","expr","namespace","delegateCount","setup","global","mappedTypes","origCount","eventType","RegExp","teardown","removeEvent","customEvent","getData","setData","changeData","onlyHandlers","exclusive","old","ontype","eventPath","bubbleType","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","selMatch","matched","sel","run_all","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","fixHooks","keyHooks","original","charCode","keyCode","mouseHooks","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","originalEvent","fixHook","srcElement","metaKey","load","focus","blur","beforeunload","onbeforeunload","simulate","bubble","isSimulated","defaultPrevented","returnValue","getPreventDefault","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","related","form","_submit_bubble","propertyName","_just_changed","attaches","on","origFn","bind","unbind","live","die","delegate","undelegate","toggler","lastToggle","click","fnOver","fnOut","Sizzle","seed","m","isXML","assertUsableClassName","getElementsByClassName","createInputPseudo","createButtonPseudo","createPositionalPseudo","markFunction","argument","matchIndexes","siblingCheck","b","nextSibling","tokenize","parseOnly","tokens","soFar","groups","preFilters","cached","tokenCache","Expr","preFilter","rcomma","rcombinators","Token","matchExpr","addCombinator","matcher","combinator","base","checkNonElements","doneName","dirkey","dirruns","cachedkey","cachedruns","sizset","elementMatcher","matchers","condense","unmatched","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","expandContext","setMatched","matchedCount","outermost","contextBackup","dirrunsUnique","E","uniqueSort","token","rbackslash","rsibling","compile","setFilters","assertGetIdNotName","getText","sortOrder","hasDuplicate","baseHasDuplicate","strundefined","docElem","createCache","keys","cacheLength","classCache","compilerCache","whitespace","characterEncoding","identifier","operators","pseudos","pos","rpseudo","rheader","rinputs","ID","CLASS","NAME","TAG","ATTR","PSEUDO","POS","CHILD","assert","assertTagNameNoComments","createComment","assertHrefNotNormalized","assertAttributes","assertUsableName","getElementsByName","matchesSelector","textContent","adown","bup","compareDocumentPosition","attrHandle","selectors","createPseudo",">"," ","+","~","unquoted","excess","pattern","operator","check","diff","previousSibling","pseudo","idx","not","innerText","enabled","header","radio","checkbox","file","password","image","reset","activeElement","hasFocus","active","even","odd","lt","gt","sourceIndex","al","bl","ap","bp","aup","duplicates","group","disconnectedMatch","oldSelect","rescape","rattributeQuotes","rbuggyQSA","rbuggyMatches","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","msMatchesSelector","nid","newContext","newSelector","qsaError","filters","runtil","rparentsprev","rneedsContext","guaranteedUnique","children","r","targets","is","closest","prevAll","addBack","andSelf","parents","parentsUntil","until","nextAll","nextUntil","prevUntil","siblings","reverse","rinlinejQuery","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rnocache","rnoshimcache","rchecked","rscriptType","rcleanScript","wrapMap","legend","thead","tr","td","col","area","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","append","createTextNode","wrapAll","html","wrap","wrapInner","unwrap","replaceWith","domManip","prepend","before","clean","after","keepData","dataAndEvents","deepDataAndEvents","detach","table","iNoClone","ajax","url","throws","cachehit","fragments","prependTo","insertAfter","replaceAll","insert","srcElements","destElements","depth","hasBody","handleScript","jsTags","safe","browser","uaMatch","ua","version","userAgent","chrome","webkit","safari","sub","jQuerySub","superclass","rootjQuerySub","ralpha","ropacity","rposition","rdisplayswap","rmargin","rrelNum","BODY","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","eventsToggle","fn2","bool","computed","cssNumber","fillOpacity","lineHeight","orphans","widows","zIndex","cssProps","float","numeric","swap","minWidth","maxWidth","getPropertyValue","currentStyle","left","rsLeft","runtimeStyle","pixelLeft","$1","visible","margin","padding","border","suffix","expanded","r20","rCRLF","rinput","rselectTextarea","serialize","param","serializeArray","encodeURIComponent","ajaxLocParts","ajaxLocation","rhash","rheaders","rlocalProtocol","rnoContent","rprotocol","rquery","rscript","rts","rurl","_load","transports","allTypes","params","status","responseText","o","method","success","getScript","getJSON","ajaxSetup","settings","isLocal","contentType","processData","accepts","json","*","* text","text html","text json","text xml","ajaxPrefilter","ajaxTransport","nativeStatusText","headers","isSuccess","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","lastModified","ifModifiedKey","etag","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","setRequestHeader","lname","getAllResponseHeaders","overrideMimeType","abort","crossDomain","hasContent","ts","beforeSend","send","oldCallbacks","rquestion","rjsonp","nonce","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","hasCallback","replaceInUrl","replaceInData","script","text script","head","scriptCharset","charset","onload","onreadystatechange","isAbort","xhrCallbacks","xhrOnUnloadAbort","xhrId","xhr","cors","username","open","xhrFields","responseXML","firefoxAccessException","unload","timerId","rfxnum","rrun","unit","scale","maxIterations","tweener","prefilter","eased","step","cssFn","speed","animate","fadeTo","to","optall","doAnimation","stopQueue","timers","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","linear","p","swing","cos","PI","setInterval","interval","clearInterval","slow","fast","animated","rroot","offset","setOffset","win","box","bodyOffset","getBoundingClientRect","pageYOffset","pageXOffset","offsetLeft","curTop","curLeft","curElem","curOffset","curCSSTop","curCSSLeft","calculatePosition","curPosition","using","offsetParent","parentOffset","scrollTo","Height","Width","content","defaultExtra","funcName","define","amd","Modal","element","$element","remote","isShown","that","escape","backdrop","transition","enforceFocus","hideWithTransition","hideModal","keyboard","removeBackdrop","$backdrop","doAnimate","modal","$this","defaults","Constructor","$target","_events","configure","conf","delimiter","wildcard","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","maxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","newListener","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","isHostObject","hasFlash","activeX","flashVersion","GetVariable","HAS_FLASH_THROTTLED_BUG","notSupportedException","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","hash","q","useHash","undef","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","onLoad","allowTransparency","checkAcl","acl","re","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","w","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","code","ex1","_absolutizeURI","removeDotSegments","output","_parseURI","authority","hostname","appConfigReplacer","Apps","overwrite","isFunc","S4","array","isLocalRequest","urlLower","isNativeDOMNode","testObject","bIsNode","Node","bIsElement","HTMLElement","log","_log","_logMethod","methods","_ct","_f2t","_handlerCollection","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","$root","root","appInstance","app","appId","_createHandler","sNamespace","func_or_element","bDomNodeAppropriate","_validateToken","domNode","sToken","_removeHandler","eventKey","currentEventKey","eventCollection","newEvents","ec","currentEventHandler","newHandlerCollection","iCounter","hc","currentHandler","getToken","__f2GetToken","__trigger","passableArgs","hcl","$appRoot","arData","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","styles","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","_PREFIX","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","_APP_EVENT_PREFIX","_CONTAINER_EVENT_PREFIX","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_socketEmit","broadcast","Constants","timesToListen","_secureAppPagePath","_apps","_rEvents","_rRpc","_rRpcCallback","_rSocketLoad","_rUiCall","_createAppToContainerSocket","isLoaded","messagePlayback","socket","appParts","registerApps","_createContainerToAppSocket","appManifest","iframeProps","scrolling","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","callbacks","_registerCallback","messageType","cid","isRemote","register","_containerConfig","UI_Class","_appConfig","_updateHeight","outerHeight","hideMask","Modals","_renderAlert","_renderConfirm","alert","isInit","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_rValidEvents","_isValid","containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","_config","_bUsesAppHandlers","_sAppHandlerToken","_afterAppRender","appContainer","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_hydrateContainerConfig","_initAppEvents","view","removeApp","_initContainerEvents","resizeTimeout","resizeHandler","_isInit","_createAppInstance","appContent","_loadApps","appConfigs","_loadSecureApp","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","_loadScripts","scriptCount","scriptsLoaded","readyStates","loaded","_error","evtData","resourceUrl","onerror","_loadInlineScripts","inlines","loadInlineScripts","exception","elementInDocument","_loadHtml","_validateApp","_validateContainerConfig","getContainerState","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps"],"mappings":";;CAAC,SAAUA,SAEV,IAAIA,QAAQC,IAAOD,QAAQE,gBAA3B;;;;;;;;;;;;;;;;;;;AA8KmB,gBAATC,QACPA,SAGH,WACG,YAEA,SAASC,GAAEC,GAEP,MAAW,IAAJA,EAAS,IAAMA,EAAIA,EAwC9B,QAASC,OAAMC,GAQX,MADAC,WAAUC,UAAY,EACfD,UAAUE,KAAKH,GAAU,IAAMA,EAAOI,QAAQH,UAAW,SAAUI,GACtE,GAAIC,GAAIC,KAAKF,EACb,OAAoB,gBAANC,GACRA,EACA,OAAS,OAASD,EAAEG,WAAW,GAAGC,SAAS,KAAKC,MAAM,MAC3D,IAAM,IAAMV,EAAS,IAI9B,QAASW,KAAIC,EAAKC,GAId,GAAIC,GACAC,EACAC,EACAC,EAEAC,EADAC,EAAOC,IAEPC,EAAQR,EAAOD,EAkBnB,QAdIS,GAA0B,gBAAVA,IACY,kBAAjBA,GAAMC,SACjBD,EAAQA,EAAMC,OAAOV,IAMN,kBAARW,OACPF,EAAQE,IAAIC,KAAKX,EAAQD,EAAKS,UAKnBA,IACf,IAAK,SACD,MAAOtB,OAAMsB,EAEjB,KAAK,SAID,MAAOI,UAASJ,GAASK,OAAOL,GAAS,MAE7C,KAAK,UACL,IAAK,OAMD,MAAOK,QAAOL,EAKlB,KAAK,SAKD,IAAKA,EACD,MAAO,MAUX,IALAD,KAAOO,OACPT,KAI+C,mBAA3CU,OAAOC,UAAUpB,SAASqB,MAAMT,GAA6B,CAM7D,IADAJ,EAASI,EAAMJ,OACVH,EAAI,EAAOG,EAAJH,EAAYA,GAAK,EACzBI,EAAQJ,GAAKH,IAAIG,EAAGO,IAAU,MAYlC,OANAL,GAAuB,IAAnBE,EAAQD,OACN,KACAG,IACA,MAAQA,IAAMF,EAAQa,KAAK,MAAQX,KAAO,KAAOD,EAAO,IACxD,IAAMD,EAAQa,KAAK,KAAO,IAChCX,IAAMD,EACCH,EAKX,GAAIO,KAAsB,gBAARA,KAEd,IADAN,EAASM,IAAIN,OACRH,EAAI,EAAOG,EAAJH,EAAYA,GAAK,EACH,gBAAXS,KAAIT,KACXC,EAAIQ,IAAIT,GACRE,EAAIL,IAAII,EAAGM,GACPL,GACAE,EAAQc,KAAKjC,MAAMgB,IAAMK,IAAM,KAAO,KAAOJ,QAQzD,KAAKD,IAAKM,GACFO,OAAOC,UAAUI,eAAeT,KAAKH,EAAON,KAC5CC,EAAIL,IAAII,EAAGM,GACPL,GACAE,EAAQc,KAAKjC,MAAMgB,IAAMK,IAAM,KAAO,KAAOJ,GAe7D,OANAA,GAAuB,IAAnBE,EAAQD,OACN,KACAG,IACA,MAAQA,IAAMF,EAAQa,KAAK,MAAQX,KAAO,KAAOD,EAAO,IACxD,IAAMD,EAAQa,KAAK,KAAO,IAChCX,IAAMD,EACCH,GAlLsB,kBAA1BkB,MAAKL,UAAUP,SAEtBY,KAAKL,UAAUP,OAAS,WAEpB,MAAOG,UAASU,KAAKC,WACfD,KAAKE,iBAAuB,IAC1BxC,EAAEsC,KAAKG,cAAgB,GAAK,IAC5BzC,EAAEsC,KAAKI,cAAqB,IAC5B1C,EAAEsC,KAAKK,eAAqB,IAC5B3C,EAAEsC,KAAKM,iBAAqB,IAC5B5C,EAAEsC,KAAKO,iBAAqB,IAC9B,MAGVhB,OAAOG,UAAUP,OACbqB,OAAOd,UAAUP,OACjBsB,QAAQf,UAAUP,OAAS,WACvB,MAAOa,MAAKC,WAIxB,IAAIS,IAAK,2GACL5C,UAAY,2HACZmB,IACAO,OACApB,MACIuC,KAAM,MACNC,IAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,IAAM,MACNC,KAAM,QAEV7B,GAsJ0B,mBAAnB3B,MAAKyD,YACZzD,KAAKyD,UAAY,SAAUhC,EAAOiC,EAAUC,GAQxC,GAAIzC,EAOJ,IANAM,IAAM,GACNO,OAAS,GAKY,gBAAV4B,GACP,IAAKzC,EAAI,EAAOyC,EAAJzC,EAAWA,GAAK,EACxBa,QAAU,QAKU,gBAAV4B,KACd5B,OAAS4B,EAOb,IADAhC,IAAM+B,EACFA,GAAgC,kBAAbA,KACM,gBAAbA,IACmB,gBAApBA,GAASrC,QACpB,KAAM,IAAIuC,OAAM,iBAMpB,OAAO7C,KAAI,IAAK,GAAIU,MAOF,kBAAfzB,MAAK6D,QACZ7D,KAAK6D,MAAQ,SAAUC,KAAMC,SAOzB,QAASC,MAAK/C,EAAQD,GAKlB,GAAIG,GAAGC,EAAGK,EAAQR,EAAOD,EACzB,IAAIS,GAA0B,gBAAVA,GAChB,IAAKN,IAAKM,GACFO,OAAOC,UAAUI,eAAeT,KAAKH,EAAON,KAC5CC,EAAI4C,KAAKvC,EAAON,GACN8C,SAAN7C,EACAK,EAAMN,GAAKC,QAEJK,GAAMN,GAK7B,OAAO4C,SAAQnC,KAAKX,EAAQD,EAAKS,GApBrC,GAAIyC,EAkDJ,IAtBAJ,KAAOhC,OAAOgC,MACdb,GAAG3C,UAAY,EACX2C,GAAG1C,KAAKuD,QACRA,KAAOA,KAAKtD,QAAQyC,GAAI,SAAUxC,GAC9B,MAAO,OACF,OAASA,EAAEG,WAAW,GAAGC,SAAS,KAAKC,MAAM,OAiBtD,gBACKP,KAAKuD,KAAKtD,QAAQ,sCAAuC,KACrDA,QAAQ,mEAAoE,KAC5EA,QAAQ,uBAAwB,KAYzC,MALA0D,GAAIC,KAAK,IAAML,KAAO,KAKI,kBAAZC,SACRC,MAAM,GAAIE,GAAI,IACdA,CAKV,MAAM,IAAIE,aAAY;;;;;;;;;;;;;;;;;;;;;AA0BlC,SAAWC,EAAQJ,GAi4BnB,QAASK,GAAeC,GACvB,GAAIC,GAASC,GAAcF,KAI3B,OAHAG,GAAOC,KAAMJ,EAAQK,MAAOC,IAAe,SAAUC,EAAGC,GACvDP,EAAQO,IAAS,IAEXP,EAq3BR,QAASQ,GAAUC,EAAMjE,EAAKkE,GAG7B,GAAKA,IAASjB,GAA+B,IAAlBgB,EAAKE,SAAiB,CAEhD,GAAIC,GAAO,QAAUpE,EAAIR,QAAS6E,GAAY,OAAQC,aAItD,IAFAJ,EAAOD,EAAKM,aAAcH,GAEL,gBAATF,GAAoB,CAC/B,IACCA,EAAgB,SAATA,GAAkB,EAChB,UAATA,GAAmB,EACV,SAATA,EAAkB,MAEjBA,EAAO,KAAOA,GAAQA,EACvBM,GAAOjF,KAAM2E,GAASR,EAAOe,UAAWP,GACvCA,EACA,MAAOQ,IAGThB,EAAOQ,KAAMD,EAAMjE,EAAKkE,OAGxBA,GAAOjB,EAIT,MAAOiB,GAIR,QAASS,GAAmBC,GAC3B,GAAIR,EACJ,KAAMA,IAAQQ,GAGb,IAAc,SAATR,IAAmBV,EAAOmB,cAAeD,EAAIR,MAGpC,WAATA,EACJ,OAAO,CAIT,QAAO,EAo5CR,QAASU,KACR,OAAO,EAER,QAASC,KACR,OAAO,EAkrER,QAASC,GAAgBC,GACxB,OAAQA,IAASA,EAAKC,YAA2C,KAA7BD,EAAKC,WAAWf,SAGrD,QAASgB,GAASC,EAAKC,GACtB,EACCD,GAAMA,EAAKC,SACFD,GAAwB,IAAjBA,EAAIjB,SAErB,OAAOiB,GAuGR,QAASE,GAAQC,EAAUC,EAAWC,GAMrC,GAFAD,EAAYA,GAAa,EAEpB9B,EAAOgC,WAAYF,GACvB,MAAO9B,GAAOiC,KAAKJ,EAAU,SAAUtB,EAAM/D,GAC5C,GAAI0F,KAAWJ,EAAU5E,KAAMqD,EAAM/D,EAAG+D,EACxC,OAAO2B,KAAWH,GAGb,IAAKD,EAAUrB,SACrB,MAAOT,GAAOiC,KAAKJ,EAAU,SAAUtB,GACtC,MAASA,KAASuB,IAAgBC,GAG7B,IAA0B,gBAAdD,GAAyB,CAC3C,GAAIK,GAAWnC,EAAOiC,KAAKJ,EAAU,SAAUtB,GAC9C,MAAyB,KAAlBA,EAAKE,UAGb,IAAK2B,GAASvG,KAAMiG,GACnB,MAAO9B,GAAOqC,OAAOP,EAAWK,GAAWJ,EAE3CD,GAAY9B,EAAOqC,OAAQP,EAAWK,GAIxC,MAAOnC,GAAOiC,KAAKJ,EAAU,SAAUtB,GACtC,MAASP,GAAOsC,QAAS/B,EAAMuB,IAAe,IAAQC,IAGxD,QAASQ,GAAoBC,GAC5B,GAAIC,GAAOC,GAAUxC,MAAO,KAC5ByC,EAAWH,EAASI,wBAEpB,IAAKD,EAASE,cACb,KAAQJ,EAAK9F,QACZgG,EAASE,cACRJ,EAAKK,MAIR,OAAOH,GAqXR,QAASI,GAAcxC,EAAMyC,GAC5B,MAAOzC,GAAK0C,qBAAsBD,GAAM,IAAMzC,EAAK2C,YAAa3C,EAAK4C,cAAcN,cAAeG,IAGnG,QAASI,GAAgBC,EAAKC,GAE7B,GAAuB,IAAlBA,EAAK7C,UAAmBT,EAAOuD,QAASF,GAA7C,CAIA,GAAIG,GAAMhH,EAAGiH,EACZC,EAAU1D,EAAO2D,MAAON,GACxBO,EAAU5D,EAAO2D,MAAOL,EAAMI,GAC9BG,EAASH,EAAQG,MAElB,IAAKA,EAAS,OACND,GAAQE,OACfF,EAAQC,SAER,KAAML,IAAQK,GACb,IAAMrH,EAAI,EAAGiH,EAAII,EAAQL,GAAO7G,OAAY8G,EAAJjH,EAAOA,IAC9CwD,EAAO+D,MAAMC,IAAKV,EAAME,EAAMK,EAAQL,GAAQhH,IAM5CoH,EAAQpD,OACZoD,EAAQpD,KAAOR,EAAOiE,UAAYL,EAAQpD,QAI5C,QAAS0D,GAAoBb,EAAKC,GACjC,GAAIa,EAGmB,KAAlBb,EAAK7C,WAML6C,EAAKc,iBACTd,EAAKc,kBAKDd,EAAKe,iBACTf,EAAKe,gBAAiBhB,GAGvBc,EAAWb,EAAKa,SAASvD,cAEP,WAAbuD,GAGCb,EAAK9B,aACT8B,EAAKgB,UAAYjB,EAAIiB,WAOjBtE,EAAOuE,QAAQC,YAAenB,EAAIoB,YAAczE,EAAO0E,KAAKpB,EAAKmB,aACrEnB,EAAKmB,UAAYpB,EAAIoB,YAGE,UAAbN,GAAwBQ,GAAe9I,KAAMwH,EAAIG,OAK5DF,EAAKsB,eAAiBtB,EAAKuB,QAAUxB,EAAIwB,QAIpCvB,EAAKvG,QAAUsG,EAAItG,QACvBuG,EAAKvG,MAAQsG,EAAItG,QAKM,WAAboH,EACXb,EAAKwB,SAAWzB,EAAI0B,gBAII,UAAbZ,GAAqC,aAAbA,EACnCb,EAAK0B,aAAe3B,EAAI2B,aAGA,WAAbb,GAAyBb,EAAKlE,OAASiE,EAAIjE,OACtDkE,EAAKlE,KAAOiE,EAAIjE,MAKjBkE,EAAK2B,gBAAiBjF,EAAOkF,UA4E9B,QAASC,GAAQ5E,GAChB,MAA0C,mBAA9BA,GAAK0C,qBACT1C,EAAK0C,qBAAsB,KAEU,mBAA1B1C,GAAK6E,iBAChB7E,EAAK6E,iBAAkB,QAQhC,QAASC,GAAmB9E,GACtBoE,GAAe9I,KAAM0E,EAAKiD,QAC9BjD,EAAKqE,eAAiBrE,EAAKsE,SAoV7B,QAASS,GAAgBC,EAAO7E,GAG/B,GAAKA,IAAQ6E,GACZ,MAAO7E,EAQR,KAJA,GAAI8E,GAAU9E,EAAK+E,OAAO,GAAGC,cAAgBhF,EAAKtE,MAAM,GACvDuJ,EAAWjF,EACXlE,EAAIoJ,GAAYjJ,OAETH,KAEP,GADAkE,EAAOkF,GAAapJ,GAAMgJ,EACrB9E,IAAQ6E,GACZ,MAAO7E,EAIT,OAAOiF,GAGR,QAASE,GAAUtF,EAAMuF,GAExB,MADAvF,GAAOuF,GAAMvF,EAC4B,SAAlCP,EAAO+F,IAAKxF,EAAM,aAA2BP,EAAOgG,SAAUzF,EAAK4C,cAAe5C,GAG1F,QAAS0F,GAAUpE,EAAUqE,GAM5B,IALA,GAAI3F,GAAM4F,EACTC,KACAC,EAAQ,EACR1J,EAASkF,EAASlF,OAEHA,EAAR0J,EAAgBA,IACvB9F,EAAOsB,EAAUwE,GACX9F,EAAKgF,QAGXa,EAAQC,GAAUrG,EAAO2D,MAAOpD,EAAM,cACjC2F,GAGEE,EAAQC,IAAkC,SAAvB9F,EAAKgF,MAAMY,UACnC5F,EAAKgF,MAAMY,QAAU,IAMM,KAAvB5F,EAAKgF,MAAMY,SAAkBN,EAAUtF,KAC3C6F,EAAQC,GAAUrG,EAAO2D,MAAOpD,EAAM,aAAc+F,EAAmB/F,EAAK4D,cAG7EgC,EAAUI,GAAQhG,EAAM,WAElB6F,EAAQC,IAAuB,SAAZF,GACxBnG,EAAO2D,MAAOpD,EAAM,aAAc4F,IAOrC,KAAME,EAAQ,EAAW1J,EAAR0J,EAAgBA,IAChC9F,EAAOsB,EAAUwE,GACX9F,EAAKgF,QAGLW,GAA+B,SAAvB3F,EAAKgF,MAAMY,SAA6C,KAAvB5F,EAAKgF,MAAMY,UACzD5F,EAAKgF,MAAMY,QAAUD,EAAOE,EAAQC,IAAW,GAAK,QAItD,OAAOxE,GAwQR,QAAS2E,GAAmBjG,EAAMxD,EAAO0J,GACxC,GAAIC,GAAUC,GAAUC,KAAM7J,EAC9B,OAAO2J,GACLG,KAAKC,IAAK,EAAGJ,EAAS,IAAQD,GAAY,KAAUC,EAAS,IAAO,MACpE3J,EAGH,QAASgK,GAAsBxG,EAAMG,EAAMsG,EAAOC,GASjD,IARA,GAAIzK,GAAIwK,KAAYC,EAAc,SAAW,WAE5C,EAES,UAATvG,EAAmB,EAAI,EAEvBwG,EAAM,EAEK,EAAJ1K,EAAOA,GAAK,EAEJ,WAAVwK,IAGJE,GAAOlH,EAAO+F,IAAKxF,EAAMyG,EAAQG,GAAW3K,IAAK,IAI7CyK,GAEW,YAAVD,IACJE,GAAOE,WAAYb,GAAQhG,EAAM,UAAY4G,GAAW3K,MAAW,GAIrD,WAAVwK,IACJE,GAAOE,WAAYb,GAAQhG,EAAM,SAAW4G,GAAW3K,GAAM,WAAe,KAI7E0K,GAAOE,WAAYb,GAAQhG,EAAM,UAAY4G,GAAW3K,MAAW,EAGpD,YAAVwK,IACJE,GAAOE,WAAYb,GAAQhG,EAAM,SAAW4G,GAAW3K,GAAM,WAAe,GAK/E,OAAO0K,GAGR,QAASG,GAAkB9G,EAAMG,EAAMsG,GAGtC,GAAIE,GAAe,UAATxG,EAAmBH,EAAK+G,YAAc/G,EAAKgH,aACpDC,GAAmB,EACnBP,EAAcjH,EAAOuE,QAAQkD,WAAiD,eAApCzH,EAAO+F,IAAKxF,EAAM,YAK7D,IAAY,GAAP2G,GAAmB,MAAPA,EAAc,CAQ9B,GANAA,EAAMX,GAAQhG,EAAMG,IACT,EAANwG,GAAkB,MAAPA,KACfA,EAAM3G,EAAKgF,MAAO7E,IAIdgH,GAAU7L,KAAKqL,GACnB,MAAOA,EAKRM,GAAmBP,IAAiBjH,EAAOuE,QAAQoD,mBAAqBT,IAAQ3G,EAAKgF,MAAO7E,IAG5FwG,EAAME,WAAYF,IAAS,EAI5B,MAASA,GACRH,EACCxG,EACAG,EACAsG,IAAWC,EAAc,SAAW,WACpCO,GAEE,KAKL,QAASlB,GAAoBnC,GAC5B,GAAKyD,GAAazD,GACjB,MAAOyD,IAAazD,EAGrB,IAAI5D,GAAOP,EAAQ,IAAMmE,EAAW,KAAM0D,SAAUrF,EAASsF,MAC5D3B,EAAU5F,EAAKwF,IAAI,UAiCpB,OAhCAxF,GAAKwH,UAIY,SAAZ5B,GAAkC,KAAZA,KAE1B6B,GAASxF,EAASsF,KAAK5E,YACtB8E,IAAUhI,EAAOiE,OAAQzB,EAASK,cAAc,WAC/CoF,YAAa,EACbC,MAAO,EACPC,OAAQ,KAOJC,IAAcJ,GAAOnF,gBAC1BuF,IAAcJ,GAAOK,eAAiBL,GAAOM,iBAAkB9F,SAC/D4F,GAAUG,MAAM,+BAChBH,GAAUI,SAGXjI,EAAO6H,GAAUN,KAAK5E,YAAakF,GAAUvF,cAAcsB,IAE3DgC,EAAUI,GAAQhG,EAAM,WACxBiC,EAASsF,KAAKW,YAAaT,KAI5BJ,GAAazD,GAAagC,EAEnBA,EAuNR,QAASuC,GAAaC,EAAQzH,EAAK0H,EAAa5E,GAC/C,GAAItD,EAEJ,IAAKV,EAAO6I,QAAS3H,GAEpBlB,EAAOC,KAAMiB,EAAK,SAAU1E,EAAGE,GACzBkM,GAAeE,GAASjN,KAAM8M,GAElC3E,EAAK2E,EAAQjM,GAUbgM,EAAaC,EAAS,KAAqB,gBAANjM,GAAiBF,EAAI,IAAO,IAAKE,EAAGkM,EAAa5E,SAIlF,IAAM4E,GAAsC,WAAvB5I,EAAOwD,KAAMtC,GAQxC8C,EAAK2E,EAAQzH,OANb,KAAMR,IAAQQ,GACbwH,EAAaC,EAAS,IAAMjI,EAAO,IAAKQ,EAAKR,GAAQkI,EAAa5E,GAgErE,QAAS+E,GAA6BC,GAGrC,MAAO,UAAUC,EAAoBC,GAED,gBAAvBD,KACXC,EAAOD,EACPA,EAAqB,IAGtB,IAAIE,GAAU1G,EAAM2G,EACnBC,EAAYJ,EAAmBrI,cAAcV,MAAOC,IACpD3D,EAAI,EACJG,EAAS0M,EAAU1M,MAEpB,IAAKqD,EAAOgC,WAAYkH,GAEvB,KAAYvM,EAAJH,EAAYA,IACnB2M,EAAWE,EAAW7M,GAGtB4M,EAAc,MAAMvN,KAAMsN,GACrBC,IACJD,EAAWA,EAASG,OAAQ,IAAO,KAEpC7G,EAAOuG,EAAWG,GAAaH,EAAWG,OAE1C1G,EAAM2G,EAAc,UAAY,QAAUF,IAO9C,QAASK,GAA+BP,EAAWnJ,EAAS2J,EAAiBC,EAC3EN,EAAyBO,GAE1BP,EAAWA,GAAYtJ,EAAQwJ,UAAW,GAC1CK,EAAYA,MAEZA,EAAWP,IAAa,CAQxB,KANA,GAAIQ,GACHlH,EAAOuG,EAAWG,GAClB3M,EAAI,EACJG,EAAS8F,EAAOA,EAAK9F,OAAS,EAC9BiN,EAAgBZ,IAAca,GAEnBlN,EAAJH,IAAgBoN,IAAgBD,GAAanN,IACpDmN,EAAYlH,EAAMjG,GAAKqD,EAAS2J,EAAiBC,GAGvB,gBAAdE,MACLC,GAAeF,EAAWC,GAC/BA,EAAYpK,GAEZM,EAAQwJ,UAAUS,QAASH,GAC3BA,EAAYJ,EACVP,EAAWnJ,EAAS2J,EAAiBC,EAAOE,EAAWD,IAY5D,QANOE,GAAgBD,GAAgBD,EAAW,OACjDC,EAAYJ,EACVP,EAAWnJ,EAAS2J,EAAiBC,EAAO,IAAKC,IAI7CC,EAMR,QAASI,GAAYC,EAAQ3G,GAC5B,GAAI/G,GAAK2N,EACRC,EAAclK,EAAOmK,aAAaD,eACnC,KAAM5N,IAAO+G,GACPA,EAAK/G,KAAUiD,KACjB2K,EAAa5N,GAAQ0N,EAAWC,IAAUA,OAAiB3N,GAAQ+G,EAAK/G,GAGvE2N,IACJjK,EAAOiE,QAAQ,EAAM+F,EAAQC,GAmlB/B,QAASG,GAAqBC,EAAGZ,EAAOa,GAEvC,GAAIC,GAAI/G,EAAMgH,EAAeC,EAC5BC,EAAWL,EAAEK,SACbrB,EAAYgB,EAAEhB,UACdsB,EAAiBN,EAAEM,cAGpB,KAAMnH,IAAQmH,GACRnH,IAAQ8G,KACZb,EAAOkB,EAAenH,IAAU8G,EAAW9G,GAK7C,MAA0B,MAAnB6F,EAAW,IACjBA,EAAUuB,QACLL,IAAOhL,IACXgL,EAAKF,EAAEQ,UAAYpB,EAAMqB,kBAAmB,gBAK9C,IAAKP,EACJ,IAAM/G,IAAQkH,GACb,GAAKA,EAAUlH,IAAUkH,EAAUlH,GAAO3H,KAAM0O,GAAO,CACtDlB,EAAUS,QAAStG,EACnB,OAMH,GAAK6F,EAAW,IAAOiB,GACtBE,EAAgBnB,EAAW,OACrB,CAEN,IAAM7F,IAAQ8G,GAAY,CACzB,IAAMjB,EAAW,IAAOgB,EAAEU,WAAYvH,EAAO,IAAM6F,EAAU,IAAO,CACnEmB,EAAgBhH,CAChB,OAEKiH,IACLA,EAAgBjH,GAIlBgH,EAAgBA,GAAiBC,EAMlC,MAAKD,IACCA,IAAkBnB,EAAW,IACjCA,EAAUS,QAASU,GAEbF,EAAWE,IAJnB,OASD,QAASQ,GAAaX,EAAGY,GAExB,GAAIC,GAAMC,EAAOC,EAASC,EAEzBhC,EAAYgB,EAAEhB,UAAUjN,QACxBkP,EAAOjC,EAAW,GAClB0B,KACAvO,EAAI,CAQL,IALK6N,EAAEkB,aACNN,EAAWZ,EAAEkB,WAAYN,EAAUZ,EAAElB,WAIjCE,EAAW,GACf,IAAM6B,IAAQb,GAAEU,WACfA,EAAYG,EAAKtK,eAAkByJ,EAAEU,WAAYG,EAKnD,MAASE,EAAU/B,IAAY7M,IAG9B,GAAiB,MAAZ4O,EAAkB,CAGtB,GAAc,MAATE,GAAgBA,IAASF,EAAU,CAMvC,GAHAF,EAAOH,EAAYO,EAAO,IAAMF,IAAaL,EAAY,KAAOK,IAG1DF,EACL,IAAMC,IAASJ,GAId,GADAM,EAAMF,EAAMjL,MAAM,KACbmL,EAAK,KAAQD,IAGjBF,EAAOH,EAAYO,EAAO,IAAMD,EAAK,KACpCN,EAAY,KAAOM,EAAK,KACb,CAENH,KAAS,EACbA,EAAOH,EAAYI,GAGRJ,EAAYI,MAAY,IACnCC,EAAUC,EAAK,GACfhC,EAAUmC,OAAQhP,IAAK,EAAG4O,GAG3B,OAOJ,GAAKF,KAAS,EAGb,GAAKA,GAAQb,EAAE,UACdY,EAAWC,EAAMD,OAEjB,KACCA,EAAWC,EAAMD,GAChB,MAAQjK,GACT,OAASyK,MAAO,cAAeC,MAAOR,EAAOlK,EAAI,sBAAwBsK,EAAO,OAASF,IAO7FE,EAAOF,EAIT,OAASK,MAAO,UAAWjL,KAAMyK,GAyLlC,QAASU,KACR,IACC,MAAO,IAAIhM,GAAOiM,eACjB,MAAO5K,KAGV,QAAS6K,KACR,IACC,MAAO,IAAIlM,GAAOmM,cAAe,qBAChC,MAAO9K,KA2PV,QAAS+K,KAIR,MAHAC,YAAW,WACVC,GAAQ1M,GACN,GACM0M,GAAQjM,EAAOkM,MAGzB,QAASC,GAAcC,EAAWC,GACjCrM,EAAOC,KAAMoM,EAAO,SAAUC,EAAMvP,GAInC,IAHA,GAAIwP,IAAeC,GAAUF,QAAeG,OAAQD,GAAU,MAC7DnG,EAAQ,EACR1J,EAAS4P,EAAW5P,OACLA,EAAR0J,EAAgBA,IACvB,GAAKkG,EAAYlG,GAAQnJ,KAAMkP,EAAWE,EAAMvP,GAG/C,SAMJ,QAAS2P,GAAWnM,EAAMoM,EAAY9M,GACrC,GAAI+M,GACHvG,EAAQ,EAER1J,EAASkQ,GAAoBlQ,OAC7BmQ,EAAW9M,EAAO+M,WAAWC,OAAQ,iBAE7BC,GAAK1M,OAEb0M,EAAO,WASN,IARA,GAAIC,GAAcjB,IAASF,IAC1BoB,EAAYtG,KAAKC,IAAK,EAAGsF,EAAUgB,UAAYhB,EAAUiB,SAAWH,GAEpEI,EAAOH,EAAYf,EAAUiB,UAAY,EACzCE,EAAU,EAAID,EACdjH,EAAQ,EACR1J,EAASyP,EAAUoB,OAAO7Q,OAEXA,EAAR0J,EAAiBA,IACxB+F,EAAUoB,OAAQnH,GAAQoH,IAAKF,EAKhC,OAFAT,GAASY,WAAYnN,GAAQ6L,EAAWmB,EAASJ,IAElC,EAAVI,GAAe5Q,EACZwQ,GAEPL,EAASa,YAAapN,GAAQ6L,KACvB,IAGTA,EAAYU,EAASc,SACpBrN,KAAMA,EACN8L,MAAOrM,EAAOiE,UAAY0I,GAC1BkB,KAAM7N,EAAOiE,QAAQ,GAAQ6J,kBAAqBjO,GAClDkO,mBAAoBpB,EACpBnD,gBAAiB3J,EACjBuN,UAAWnB,IAASF,IACpBsB,SAAUxN,EAAQwN,SAClBG,UACAQ,YAAa,SAAU1B,EAAM2B,GAC5B,GAAIC,GAAQlO,EAAOmO,MAAO5N,EAAM6L,EAAUyB,KAAMvB,EAAM2B,EACpD7B,EAAUyB,KAAKC,cAAexB,IAAUF,EAAUyB,KAAKO,OAEzD,OADAhC,GAAUoB,OAAO9P,KAAMwQ,GAChBA,GAERG,KAAM,SAAUC,GAMf,IALA,GAAIjI,GAAQ,EAGX1J,EAAS2R,EAAUlC,EAAUoB,OAAO7Q,OAAS,EAE9BA,EAAR0J,EAAiBA,IACxB+F,EAAUoB,OAAQnH,GAAQoH,IAAK,EAUhC,OALKa,GACJxB,EAASa,YAAapN,GAAQ6L,EAAWkC,IAEzCxB,EAASyB,WAAYhO,GAAQ6L,EAAWkC,IAElCzQ,QAGTwO,EAAQD,EAAUC,KAInB,KAFAmC,EAAYnC,EAAOD,EAAUyB,KAAKC,eAElBnR,EAAR0J,EAAiBA,IAExB,GADAuG,EAASC,GAAqBxG,GAAQnJ,KAAMkP,EAAW7L,EAAM8L,EAAOD,EAAUyB,MAE7E,MAAOjB,EAmBT,OAfAT,GAAcC,EAAWC,GAEpBrM,EAAOgC,WAAYoK,EAAUyB,KAAKY,QACtCrC,EAAUyB,KAAKY,MAAMvR,KAAMqD,EAAM6L,GAGlCpM,EAAO0O,GAAGC,MACT3O,EAAOiE,OAAQgJ,GACd2B,KAAMxC,EACNyC,MAAOzC,EAAUyB,KAAKgB,MACtBtO,KAAMA,KAKD6L,EAAU0C,SAAU1C,EAAUyB,KAAKiB,UACxCC,KAAM3C,EAAUyB,KAAKkB,KAAM3C,EAAUyB,KAAKmB,UAC1CC,KAAM7C,EAAUyB,KAAKoB,MACrBjC,OAAQZ,EAAUyB,KAAKb,QAG1B,QAASwB,GAAYnC,EAAOyB,GAC3B,GAAIzH,GAAO3F,EAAM0N,EAAQrR,EAAOmS,CAGhC,KAAM7I,IAASgG,GAed,GAdA3L,EAAOV,EAAOmP,UAAW9I,GACzB+H,EAASN,EAAepN,GACxB3D,EAAQsP,EAAOhG,GACVrG,EAAO6I,QAAS9L,KACpBqR,EAASrR,EAAO,GAChBA,EAAQsP,EAAOhG,GAAUtJ,EAAO,IAG5BsJ,IAAU3F,IACd2L,EAAO3L,GAAS3D,QACTsP,GAAOhG,IAGf6I,EAAQlP,EAAOoP,SAAU1O,GACpBwO,GAAS,UAAYA,GAAQ,CACjCnS,EAAQmS,EAAMG,OAAQtS,SACfsP,GAAO3L,EAId,KAAM2F,IAAStJ,GACNsJ,IAASgG,KAChBA,EAAOhG,GAAUtJ,EAAOsJ,GACxByH,EAAezH,GAAU+H,OAI3BN,GAAepN,GAAS0N,EAmC3B,QAASkB,GAAkB/O,EAAM8L,EAAOwB,GACvC,GAAIxH,GAAOiG,EAAMvP,EAAOJ,EAAQ4S,EAAUC,EAAQtB,EAAOgB,EAAOO,EAC/Db,EAAO/Q,KACP0H,EAAQhF,EAAKgF,MACbmK,KACAC,KACAC,EAASrP,EAAKE,UAAYoF,EAAUtF,EAG/BsN,GAAKgB,QACVK,EAAQlP,EAAO6P,YAAatP,EAAM,MACX,MAAlB2O,EAAMY,WACVZ,EAAMY,SAAW,EACjBL,EAAUP,EAAMa,MAAMC,KACtBd,EAAMa,MAAMC,KAAO,WACZd,EAAMY,UACXL,MAIHP,EAAMY,WAENlB,EAAK5B,OAAO,WAGX4B,EAAK5B,OAAO,WACXkC,EAAMY,WACA9P,EAAO6O,MAAOtO,EAAM,MAAO5D,QAChCuS,EAAMa,MAAMC,YAOO,IAAlBzP,EAAKE,WAAoB,UAAY4L,IAAS,SAAWA,MAK7DwB,EAAKoC,UAAa1K,EAAM0K,SAAU1K,EAAM2K,UAAW3K,EAAM4K,WAIlB,WAAlCnQ,EAAO+F,IAAKxF,EAAM,YACW,SAAhCP,EAAO+F,IAAKxF,EAAM,WAIbP,EAAOuE,QAAQ6L,wBAAkE,WAAxC9J,EAAoB/F,EAAK4D,UAIvEoB,EAAM8K,KAAO,EAHb9K,EAAMY,QAAU,iBAQd0H,EAAKoC,WACT1K,EAAM0K,SAAW,SACXjQ,EAAOuE,QAAQ+L,kBACpB1B,EAAKG,KAAK,WACTxJ,EAAM0K,SAAWpC,EAAKoC,SAAU,GAChC1K,EAAM2K,UAAYrC,EAAKoC,SAAU,GACjC1K,EAAM4K,UAAYtC,EAAKoC,SAAU,KAOpC,KAAM5J,IAASgG,GAEd,GADAtP,EAAQsP,EAAOhG,GACVkK,GAAS3J,KAAM7J,GAAU,CAG7B,SAFOsP,GAAOhG,GACdmJ,EAASA,GAAoB,WAAVzS,EACdA,KAAY6S,EAAS,OAAS,QAClC,QAEDD,GAAQjS,KAAM2I,GAKhB,GADA1J,EAASgT,EAAQhT,OACH,CACb4S,EAAWvP,EAAO2D,MAAOpD,EAAM,WAAcP,EAAO2D,MAAOpD,EAAM,aAC5D,UAAYgP,KAChBK,EAASL,EAASK,QAIdJ,IACJD,EAASK,QAAUA,GAEfA,EACJ5P,EAAQO,GAAO2F,OAEf0I,EAAKG,KAAK,WACT/O,EAAQO,GAAOiQ,SAGjB5B,EAAKG,KAAK,WACT,GAAIzC,EACJtM,GAAOyQ,WAAYlQ,EAAM,UAAU,EACnC,KAAM+L,IAAQoD,GACb1P,EAAOuF,MAAOhF,EAAM+L,EAAMoD,EAAMpD,KAGlC,KAAMjG,EAAQ,EAAY1J,EAAR0J,EAAiBA,IAClCiG,EAAOqD,EAAStJ,GAChB6H,EAAQU,EAAKZ,YAAa1B,EAAMsD,EAASL,EAAUjD,GAAS,GAC5DoD,EAAMpD,GAASiD,EAAUjD,IAAUtM,EAAOuF,MAAOhF,EAAM+L,GAE/CA,IAAQiD,KACfA,EAAUjD,GAAS4B,EAAMO,MACpBmB,IACJ1B,EAAMD,IAAMC,EAAMO,MAClBP,EAAMO,MAAiB,UAATnC,GAA6B,WAATA,EAAoB,EAAI,KAO/D,QAAS6B,GAAO5N,EAAMV,EAASyM,EAAM2B,EAAKG,GACzC,MAAO,IAAID,GAAM5Q,UAAUmT,KAAMnQ,EAAMV,EAASyM,EAAM2B,EAAKG,GAuL5D,QAASuC,GAAOnN,EAAMoN,GACrB,GAAIC,GACHC,GAAU3I,OAAQ3E,GAClBhH,EAAI,CAKL,KADAoU,EAAeA,EAAc,EAAI,EACtB,EAAJpU,EAAQA,GAAK,EAAIoU,EACvBC,EAAQ1J,GAAW3K,GACnBsU,EAAO,SAAWD,GAAUC,EAAO,UAAYD,GAAUrN,CAO1D,OAJKoN,KACJE,EAAMC,QAAUD,EAAM5I,MAAQ1E,GAGxBsN,EAiSR,QAASE,GAAWzQ,GACnB,MAAOP,GAAOiR,SAAU1Q,GACvBA,EACkB,IAAlBA,EAAKE,SACJF,EAAK2Q,aAAe3Q,EAAK4Q,cACzB,EAnrSH,GAECC,GAGAC,EAGA7O,EAAW7C,EAAO6C,SAClB8O,EAAW3R,EAAO2R,SAClBC,EAAY5R,EAAO4R,UAGnBC,EAAU7R,EAAOK,OAGjByR,EAAK9R,EAAO+R,EAGZC,EAAYC,MAAMrU,UAAUG,KAC5BmU,EAAaD,MAAMrU,UAAUnB,MAC7B0V,EAAeF,MAAMrU,UAAUwU,QAC/BC,EAAgB1U,OAAOC,UAAUpB,SACjC8V,EAAc3U,OAAOC,UAAUI,eAC/BuU,EAAY9U,OAAOG,UAAUmH,KAG7B1E,EAAS,SAAUmS,EAAUC,GAE5B,MAAO,IAAIpS,GAAOqS,GAAG3B,KAAMyB,EAAUC,EAAShB,IAI/CkB,EAAY,wCAAwCC,OAGpDC,GAAiB,KACjBrS,GAAc,MAGdsS,GAAQ,qCAIRC,GAAa,2CAGbC,GAAa,6BAGbC,GAAc,gBACdC,GAAe,uBACfC,GAAe,qCACfC,GAAe,qEAGfC,GAAY,QACZC,GAAa,eAGbC,GAAa,SAAUC,EAAKC,GAC3B,OAASA,EAAS,IAAK1N,eAIxB2N,GAAmB,WACb7Q,EAAS8Q,kBACb9Q,EAAS+Q,oBAAqB,mBAAoBF,IAAkB,GACpErT,EAAOwT,SAC4B,aAAxBhR,EAASiR,aAGpBjR,EAASkR,YAAa,qBAAsBL,IAC5CrT,EAAOwT,UAKTG,KAED3T,GAAOqS,GAAKrS,EAAOzC,WAClBqW,YAAa5T,EACb0Q,KAAM,SAAUyB,EAAUC,EAAShB,GAClC,GAAIyC,GAAOtT,EAAWuT,CAGtB,KAAM3B,EACL,MAAOtU,KAIR,IAAKsU,EAAS1R,SAGb,MAFA5C,MAAKuU,QAAUvU,KAAK,GAAKsU,EACzBtU,KAAKlB,OAAS,EACPkB,IAIR,IAAyB,gBAAbsU,GAAwB,CAUnC,GAPC0B,EAF2B,MAAvB1B,EAAS1M,OAAO,IAAyD,MAA3C0M,EAAS1M,OAAQ0M,EAASxV,OAAS,IAAewV,EAASxV,QAAU,GAE7F,KAAMwV,EAAU,MAGlBO,GAAW9L,KAAMuL,IAIrB0B,IAAUA,EAAM,IAAOzB,EAuCrB,OAAMA,GAAWA,EAAQ2B,QACtB3B,GAAWhB,GAAa4C,KAAM7B,GAKhCtU,KAAK+V,YAAaxB,GAAU4B,KAAM7B,EA1CzC,IAAK0B,EAAM,GAUV,MATAzB,GAAUA,YAAmBpS,GAASoS,EAAQ,GAAKA,EACnD0B,EAAQ1B,GAAWA,EAAQ3R,SAAW2R,EAAQjP,eAAiBiP,EAAU5P,EAGzE2P,EAAWnS,EAAOiU,UAAWJ,EAAM,GAAIC,GAAK,GACvCnB,GAAW9W,KAAMgY,EAAM,KAAQ7T,EAAOkU,cAAe9B,IACzDvU,KAAKsW,KAAKjX,KAAMiV,EAAUC,GAAS,GAG7BpS,EAAOoU,MAAOvW,KAAMsU,EAQ3B,IAJA5R,EAAOiC,EAAS6R,eAAgBR,EAAM,IAIjCtT,GAAQA,EAAKiB,WAAa,CAG9B,GAAKjB,EAAK+T,KAAOT,EAAM,GACtB,MAAOzC,GAAW4C,KAAM7B,EAIzBtU,MAAKlB,OAAS,EACdkB,KAAK,GAAK0C,EAKX,MAFA1C,MAAKuU,QAAU5P,EACf3E,KAAKsU,SAAWA,EACTtU,KAeH,MAAKmC,GAAOgC,WAAYmQ,GACvBf,EAAWoC,MAAOrB,IAGrBA,EAASA,WAAa5S,IAC1B1B,KAAKsU,SAAWA,EAASA,SACzBtU,KAAKuU,QAAUD,EAASC,SAGlBpS,EAAOuU,UAAWpC,EAAUtU,QAIpCsU,SAAU,GAGV4B,OAAQ,QAGRpX,OAAQ,EAGR6X,KAAM,WACL,MAAO3W,MAAKlB,QAGb8X,QAAS,WACR,MAAO5C,GAAW3U,KAAMW,OAKzB6W,IAAK,SAAUC,GACd,MAAc,OAAPA,EAGN9W,KAAK4W,UAGG,EAANE,EAAU9W,KAAMA,KAAKlB,OAASgY,GAAQ9W,KAAM8W,IAKhDC,UAAW,SAAUC,EAAOnU,EAAMyR,GAGjC,GAAI2C,GAAM9U,EAAOoU,MAAOvW,KAAK+V,cAAeiB,EAc5C,OAXAC,GAAIC,WAAalX,KAEjBiX,EAAI1C,QAAUvU,KAAKuU,QAEL,SAAT1R,EACJoU,EAAI3C,SAAWtU,KAAKsU,UAAatU,KAAKsU,SAAW,IAAM,IAAOA,EACnDzR,IACXoU,EAAI3C,SAAWtU,KAAKsU,SAAW,IAAMzR,EAAO,IAAMyR,EAAW,KAIvD2C,GAMR7U,KAAM,SAAU+U,EAAUC,GACzB,MAAOjV,GAAOC,KAAMpC,KAAMmX,EAAUC,IAGrCzB,MAAO,SAAUnB,GAIhB,MAFArS,GAAOwT,MAAM5F,UAAUmB,KAAMsD,GAEtBxU,MAGRqX,GAAI,SAAU1Y,GAEb,MADAA,IAAKA,EACQ,KAANA,EACNqB,KAAKzB,MAAOI,GACZqB,KAAKzB,MAAOI,EAAGA,EAAI,IAGrB2Y,MAAO,WACN,MAAOtX,MAAKqX,GAAI,IAGjBE,KAAM,WACL,MAAOvX,MAAKqX,GAAI,KAGjB9Y,MAAO,WACN,MAAOyB,MAAK+W,UAAW/C,EAAWrU,MAAOK,KAAMwX,WAC9C,QAASxD,EAAW3U,KAAKmY,WAAW5X,KAAK,OAG3C6X,IAAK,SAAUN,GACd,MAAOnX,MAAK+W,UAAW5U,EAAOsV,IAAIzX,KAAM,SAAU0C,EAAM/D,GACvD,MAAOwY,GAAS9X,KAAMqD,EAAM/D,EAAG+D,OAIjC0N,IAAK,WACJ,MAAOpQ,MAAKkX,YAAclX,KAAK+V,YAAY,OAK5ClW,KAAMiU,EACN4D,QAASA,KACT/J,UAAWA,QAIZxL,EAAOqS,GAAG3B,KAAKnT,UAAYyC,EAAOqS,GAElCrS,EAAOiE,OAASjE,EAAOqS,GAAGpO,OAAS,WAClC,GAAIpE,GAASa,EAAM2C,EAAKmS,EAAMC,EAAaC,EAC1C1L,EAASqL,UAAU,OACnB7Y,EAAI,EACJG,EAAS0Y,UAAU1Y,OACnBsN,GAAO,CAqBR,KAlBuB,iBAAXD,KACXC,EAAOD,EACPA,EAASqL,UAAU,OAEnB7Y,EAAI,GAIkB,gBAAXwN,IAAwBhK,EAAOgC,WAAWgI,KACrDA,MAIIrN,IAAWH,IACfwN,EAASnM,OACPrB,GAGSG,EAAJH,EAAYA,IAEnB,GAAmC,OAA7BqD,EAAUwV,UAAW7Y,IAE1B,IAAMkE,IAAQb,GACbwD,EAAM2G,EAAQtJ,GACd8U,EAAO3V,EAASa,GAGXsJ,IAAWwL,IAKXvL,GAAQuL,IAAUxV,EAAOkU,cAAcsB,KAAUC,EAAczV,EAAO6I,QAAQ2M,MAC7EC,GACJA,GAAc,EACdC,EAAQrS,GAAOrD,EAAO6I,QAAQxF,GAAOA,MAGrCqS,EAAQrS,GAAOrD,EAAOkU,cAAc7Q,GAAOA,KAI5C2G,EAAQtJ,GAASV,EAAOiE,OAAQgG,EAAMyL,EAAOF,IAGlCA,IAASjW,IACpByK,EAAQtJ,GAAS8U,GAOrB,OAAOxL,IAGRhK,EAAOiE,QACN0R,WAAY,SAAU1L,GASrB,MARKtK,GAAO+R,IAAM1R,IACjBL,EAAO+R,EAAID,GAGPxH,GAAQtK,EAAOK,SAAWA,IAC9BL,EAAOK,OAASwR,GAGVxR,GAIR4V,SAAS,EAITC,UAAW,EAGXC,UAAW,SAAUC,GACfA,EACJ/V,EAAO6V,YAEP7V,EAAOwT,OAAO,IAKhBA,MAAO,SAAUwC,GAGhB,GAAKA,KAAS,KAAShW,EAAO6V,WAAY7V,EAAO4V,QAAjD,CAKA,IAAMpT,EAASsF,KACd,MAAOkE,YAAYhM,EAAOwT,MAAO,EAIlCxT,GAAO4V,SAAU,EAGZI,KAAS,KAAUhW,EAAO6V,UAAY,IAK3CxE,EAAU1D,YAAanL,GAAYxC,IAG9BA,EAAOqS,GAAG4D,SACdjW,EAAQwC,GAAWyT,QAAQ,SAASC,IAAI,YAO1ClU,WAAY,SAAUd,GACrB,MAA4B,aAArBlB,EAAOwD,KAAKtC,IAGpB2H,QAAS+I,MAAM/I,SAAW,SAAU3H,GACnC,MAA4B,UAArBlB,EAAOwD,KAAKtC,IAGpB+P,SAAU,SAAU/P,GACnB,MAAc,OAAPA,GAAeA,GAAOA,EAAIvB,QAGlCwW,UAAW,SAAUjV,GACpB,OAAQkV,MAAOhP,WAAWlG,KAAU/D,SAAU+D,IAG/CsC,KAAM,SAAUtC,GACf,MAAc,OAAPA,EACN9D,OAAQ8D,GACRyS,GAAY3B,EAAc9U,KAAKgE,KAAU,UAG3CgT,cAAe,SAAUhT,GAIxB,IAAMA,GAA4B,WAArBlB,EAAOwD,KAAKtC,IAAqBA,EAAIT,UAAYT,EAAOiR,SAAU/P,GAC9E,OAAO,CAGR,KAEC,GAAKA,EAAI0S,cACP3B,EAAY/U,KAAKgE,EAAK,iBACtB+Q,EAAY/U,KAAKgE,EAAI0S,YAAYrW,UAAW,iBAC7C,OAAO,EAEP,MAAQyD,GAET,OAAO,EAMR,GAAI1E,EACJ,KAAMA,IAAO4E,IAEb,MAAO5E,KAAQiD,GAAa0S,EAAY/U,KAAMgE,EAAK5E,IAGpD6E,cAAe,SAAUD,GACxB,GAAIR,EACJ,KAAMA,IAAQQ,GACb,OAAO,CAER,QAAO,GAGRwK,MAAO,SAAU2K,GAChB,KAAM,IAAInX,OAAOmX,IAMlBpC,UAAW,SAAUzT,EAAM4R,EAASkE,GACnC,GAAIC,EACJ,OAAM/V,IAAwB,gBAATA,IAGG,iBAAZ4R,KACXkE,EAAUlE,EACVA,EAAU,GAEXA,EAAUA,GAAW5P,GAGf+T,EAAS5D,GAAW/L,KAAMpG,KACtB4R,EAAQvP,cAAe0T,EAAO,MAGxCA,EAASvW,EAAOwW,eAAiBhW,GAAQ4R,EAASkE,EAAU,SACrDtW,EAAOoU,UACZmC,EAAOE,UAAYzW,EAAO0V,MAAOa,EAAOG,UAAaH,EAAOG,UAAUC,cAfhE,MAkBT5V,UAAW,SAAUP,GACpB,MAAMA,IAAwB,gBAATA,IAKrBA,EAAOR,EAAO0E,KAAMlE,GAGfb,EAAOrE,MAAQqE,EAAOrE,KAAK6D,MACxBQ,EAAOrE,KAAK6D,MAAOqB,GAKtBoS,GAAY/W,KAAM2E,EAAK1E,QAASgX,GAAc,KACjDhX,QAASiX,GAAc,KACvBjX,QAAS+W,GAAc,KAEjB,GAAM+D,UAAU,UAAYpW,SAGpCR,GAAO0L,MAAO,iBAAmBlL,IApBzB,MAwBTqW,SAAU,SAAUrW,GACnB,GAAIsW,GAAKzL,CACT,KAAM7K,GAAwB,gBAATA,GACpB,MAAO,KAER,KACMb,EAAOoX,WACX1L,EAAM,GAAI0L,WACVD,EAAMzL,EAAI2L,gBAAiBxW,EAAO,cAElCsW,EAAM,GAAIhL,eAAe,oBACzBgL,EAAIG,MAAQ,QACZH,EAAII,QAAS1W,IAEb,MAAOQ,GACR8V,EAAMvX,EAKP,MAHMuX,IAAQA,EAAIK,kBAAmBL,EAAI7T,qBAAsB,eAAgBtG,QAC9EqD,EAAO0L,MAAO,gBAAkBlL,GAE1BsW,GAGRM,KAAM,aAKNC,WAAY,SAAU7W,GAChBA,GAAQgS,GAAe3W,KAAM2E,KAI/Bb,EAAO2X,YAAc,SAAU9W,GAChCb,EAAe,KAAEzC,KAAMyC,EAAQa,KAC3BA,IAMP2O,UAAW,SAAUzT,GACpB,MAAOA,GAAOI,QAASkX,GAAW,OAAQlX,QAASmX,GAAYC,KAGhE/O,SAAU,SAAU5D,EAAMG,GACzB,MAAOH,GAAK4D,UAAY5D,EAAK4D,SAASvD,gBAAkBF,EAAKE,eAI9DX,KAAM,SAAUiB,EAAK8T,EAAUC,GAC9B,GAAIvU,GACHlE,EAAI,EACJG,EAASuE,EAAIvE,OACb4a,EAAQ5a,IAAW4C,GAAaS,EAAOgC,WAAYd,EAEpD,IAAK+T,EACJ,GAAKsC,GACJ,IAAM7W,IAAQQ,GACb,GAAK8T,EAASxX,MAAO0D,EAAKR,GAAQuU,MAAW,EAC5C,UAIF,MAAYtY,EAAJH,GACFwY,EAASxX,MAAO0D,EAAK1E,KAAOyY,MAAW,QAQ9C,IAAKsC,GACJ,IAAM7W,IAAQQ,GACb,GAAK8T,EAAS9X,KAAMgE,EAAKR,GAAQA,EAAMQ,EAAKR,OAAa,EACxD,UAIF,MAAY/D,EAAJH,GACFwY,EAAS9X,KAAMgE,EAAK1E,GAAKA,EAAG0E,EAAK1E,SAAY,IAOrD,MAAO0E,IAIRwD,KAAMwN,IAAcA,EAAUhV,KAAK,MAClC,SAAUkC,GACT,MAAe,OAARA,EACN,GACA8S,EAAUhV,KAAMkC,IAIlB,SAAUA,GACT,MAAe,OAARA,EACN,IACEA,EAAO,IAAKtD,QAAS2W,GAAO,KAIjC8B,UAAW,SAAUiD,EAAKC,GACzB,GAAIjU,GACHsR,EAAM2C,KAcP,OAZY,OAAPD,IAGJhU,EAAOxD,EAAOwD,KAAMgU,GAED,MAAdA,EAAI7a,QAA2B,WAAT6G,GAA8B,aAATA,GAAgC,WAATA,GAAqBxD,EAAOiR,SAAUuG,GAC5G7F,EAAUzU,KAAM4X,EAAK0C,GAErBxX,EAAOoU,MAAOU,EAAK0C,IAId1C,GAGRxS,QAAS,SAAU/B,EAAMiX,EAAKhb,GAC7B,GAAIkb,EAEJ,IAAKF,EAAM,CACV,GAAK1F,EACJ,MAAOA,GAAa5U,KAAMsa,EAAKjX,EAAM/D,EAMtC,KAHAkb,EAAMF,EAAI7a,OACVH,EAAIA,EAAQ,EAAJA,EAAQqK,KAAKC,IAAK,EAAG4Q,EAAMlb,GAAMA,EAAI,EAEjCkb,EAAJlb,EAASA,IAEhB,GAAKA,IAAKgb,IAAOA,EAAKhb,KAAQ+D,EAC7B,MAAO/D,GAKV,MAAO,IAGR4X,MAAO,SAAUe,EAAOwC,GACvB,GAAIlU,GAAIkU,EAAOhb,OACdH,EAAI2Y,EAAMxY,OACV6C,EAAI,CAEL,IAAkB,gBAANiE,GACX,KAAYA,EAAJjE,EAAOA,IACd2V,EAAO3Y,KAAQmb,EAAQnY,OAIxB,MAAQmY,EAAOnY,KAAOD,GACrB4V,EAAO3Y,KAAQmb,EAAQnY,IAMzB,OAFA2V,GAAMxY,OAASH,EAER2Y,GAGRlT,KAAM,SAAU4S,EAAOG,EAAU4C,GAChC,GAAI1V,GACH4S,KACAtY,EAAI,EACJG,EAASkY,EAAMlY,MAKhB,KAJAib,IAAQA,EAIIjb,EAAJH,EAAYA,IACnB0F,IAAW8S,EAAUH,EAAOrY,GAAKA,GAC5Bob,IAAQ1V,GACZ4S,EAAIpX,KAAMmX,EAAOrY,GAInB,OAAOsY,IAIRQ,IAAK,SAAUT,EAAOG,EAAU6C,GAC/B,GAAI9a,GAAOT,EACVwY,KACAtY,EAAI,EACJG,EAASkY,EAAMlY,OAEfkM,EAAUgM,YAAiB7U,IAAUrD,IAAW4C,GAA+B,gBAAX5C,KAA2BA,EAAS,GAAKkY,EAAO,IAAOA,EAAOlY,EAAQ,IAAoB,IAAXA,GAAgBqD,EAAO6I,QAASgM,GAGpL,IAAKhM,EACJ,KAAYlM,EAAJH,EAAYA,IACnBO,EAAQiY,EAAUH,EAAOrY,GAAKA,EAAGqb,GAEnB,MAAT9a,IACJ+X,EAAKA,EAAInY,QAAWI,OAMtB,KAAMT,IAAOuY,GACZ9X,EAAQiY,EAAUH,EAAOvY,GAAOA,EAAKub,GAEvB,MAAT9a,IACJ+X,EAAKA,EAAInY,QAAWI,EAMvB,OAAO+X,GAAIrI,OAAOjP,SAAWsX,IAI9BgD,KAAM,EAINC,MAAO,SAAU1F,EAAID,GACpB,GAAI/G,GAAK4J,EAAM8C,CAUf,OARwB,gBAAZ3F,KACX/G,EAAMgH,EAAID,GACVA,EAAUC,EACVA,EAAKhH,GAKArL,EAAOgC,WAAYqQ,IAKzB4C,EAAOpD,EAAW3U,KAAMmY,UAAW,GACnC0C,EAAQ,WACP,MAAO1F,GAAG7U,MAAO4U,EAAS6C,EAAKxI,OAAQoF,EAAW3U,KAAMmY,cAIzD0C,EAAMD,KAAOzF,EAAGyF,KAAOzF,EAAGyF,MAAQ9X,EAAO8X,OAElCC,GAZCxY,GAiBTyY,OAAQ,SAAUnD,EAAOxC,EAAI/V,EAAKS,EAAOkb,EAAWC,EAAUC,GAC7D,GAAIvR,GACHwR,EAAc,MAAP9b,EACPE,EAAI,EACJG,EAASkY,EAAMlY,MAGhB,IAAKL,GAAsB,gBAARA,GAAmB,CACrC,IAAME,IAAKF,GACV0D,EAAOgY,OAAQnD,EAAOxC,EAAI7V,EAAGF,EAAIE,GAAI,EAAG0b,EAAUnb,EAEnDkb,GAAY,MAGN,IAAKlb,IAAUwC,EAAY,CAmBjC,GAjBAqH,EAAOuR,IAAS5Y,GAAaS,EAAOgC,WAAYjF,GAE3Cqb,IAECxR,GACJA,EAAOyL,EACPA,EAAK,SAAU9R,EAAMjE,EAAKS,GACzB,MAAO6J,GAAK1J,KAAM8C,EAAQO,GAAQxD,MAKnCsV,EAAGnV,KAAM2X,EAAO9X,GAChBsV,EAAK,OAIFA,EACJ,KAAW1V,EAAJH,EAAYA,IAClB6V,EAAIwC,EAAMrY,GAAIF,EAAKsK,EAAO7J,EAAMG,KAAM2X,EAAMrY,GAAIA,EAAG6V,EAAIwC,EAAMrY,GAAIF,IAAUS,EAAOob,EAIpFF,GAAY,EAGb,MAAOA,GACNpD,EAGAuD,EACC/F,EAAGnV,KAAM2X,GACTlY,EAAS0V,EAAIwC,EAAM,GAAIvY,GAAQ4b,GAGlChM,IAAK,WACJ,OAAO,GAAMtO,OAASya,aAIxBrY,EAAOwT,MAAM5F,QAAU,SAAU1M,GAChC,IAAMmQ,EAOL,GALAA,EAAYrR,EAAO+M,WAKU,aAAxBvK,EAASiR,WAEbzH,WAAYhM,EAAOwT,MAAO,OAGpB,IAAKhR,EAAS8Q,iBAEpB9Q,EAAS8Q,iBAAkB,mBAAoBD,IAAkB,GAGjE1T,EAAO2T,iBAAkB,OAAQtT,EAAOwT,OAAO,OAGzC,CAENhR,EAAS8V,YAAa,qBAAsBjF,IAG5C1T,EAAO2Y,YAAa,SAAUtY,EAAOwT,MAIrC,IAAI+E,IAAM,CAEV,KACCA,EAA6B,MAAvB5Y,EAAO6Y,cAAwBhW,EAAS2U,gBAC7C,MAAMnW,IAEHuX,GAAOA,EAAIE,WACf,QAAUC,KACT,IAAM1Y,EAAO4V,QAAU,CAEtB,IAGC2C,EAAIE,SAAS,QACZ,MAAMzX,GACP,MAAOgL,YAAY0M,EAAe,IAInC1Y,EAAOwT,YAMZ,MAAOnC,GAAUzD,QAAS1M,IAI3BlB,EAAOC,KAAK,0DAA0DC,MAAM,KAAM,SAAS1D,EAAGkE,GAC7FiT,GAAY,WAAajT,EAAO,KAAQA,EAAKE,gBAI9CwQ,EAAapR,EAAOwC,EAEpB,IAAIzC,MAiCJC,GAAO2Y,UAAY,SAAU9Y,GAI5BA,EAA6B,gBAAZA,GACdE,GAAcF,IAAaD,EAAeC,GAC5CG,EAAOiE,UAAYpE,EAEpB,IACC+Y,GAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAxW,KAEAyW,GAASrZ,EAAQsZ,SAEjBnJ,EAAO,SAAUxP,GAOhB,IANAoY,EAAS/Y,EAAQ+Y,QAAUpY,EAC3BqY,GAAQ,EACRI,EAAcF,GAAe,EAC7BA,EAAc,EACdC,EAAevW,EAAK9F,OACpBmc,GAAS,EACDrW,GAAsBuW,EAAdC,EAA4BA,IAC3C,GAAKxW,EAAMwW,GAAczb,MAAOgD,EAAM,GAAKA,EAAM,OAAU,GAASX,EAAQuZ,YAAc,CACzFR,GAAS,CACT,OAGFE,GAAS,EACJrW,IACCyW,EACCA,EAAMvc,QACVqT,EAAMkJ,EAAMtO,SAEFgO,EACXnW,KAEA4W,EAAKC,YAKRD,GAECrV,IAAK,WACJ,GAAKvB,EAAO,CAEX,GAAIgM,GAAQhM,EAAK9F,QACjB,QAAUqH,GAAKiR,GACdjV,EAAOC,KAAMgV,EAAM,SAAU7U,EAAGyX,GAC/B,GAAIrU,GAAOxD,EAAOwD,KAAMqU,EACV,cAATrU,EACE3D,EAAQ0Z,QAAWF,EAAKG,IAAK3B,IAClCpV,EAAK/E,KAAMma,GAEDA,GAAOA,EAAIlb,QAAmB,WAAT6G,GAEhCQ,EAAK6T,MAGJxC,WAGCyD,EACJE,EAAevW,EAAK9F,OAGTic,IACXG,EAActK,EACduB,EAAM4I,IAGR,MAAO/a,OAGRkK,OAAQ,WAkBP,MAjBKtF,IACJzC,EAAOC,KAAMoV,UAAW,SAAUjV,EAAGyX,GAEpC,IADA,GAAIxR,IACKA,EAAQrG,EAAOsC,QAASuV,EAAKpV,EAAM4D,IAAY,IACvD5D,EAAK+I,OAAQnF,EAAO,GAEfyS,IACUE,GAAT3S,GACJ2S,IAEaC,GAAT5S,GACJ4S,OAMEpb,MAGR2b,IAAK,SAAUnH,GACd,MAAOrS,GAAOsC,QAAS+P,EAAI5P,GAAS,IAGrCsN,MAAO,WAEN,MADAtN,MACO5E,MAGRyb,QAAS,WAER,MADA7W,GAAOyW,EAAQN,EAASrZ,EACjB1B,MAGR4b,SAAU,WACT,OAAQhX,GAGTiX,KAAM,WAKL,MAJAR,GAAQ3Z,EACFqZ,GACLS,EAAKC,UAECzb,MAGR8b,OAAQ,WACP,OAAQT,GAGTU,SAAU,SAAUxH,EAAS6C,GAU5B,MATAA,GAAOA,MACPA,GAAS7C,EAAS6C,EAAK7Y,MAAQ6Y,EAAK7Y,QAAU6Y,IACzCxS,GAAWoW,IAASK,IACnBJ,EACJI,EAAMxb,KAAMuX,GAEZjF,EAAMiF,IAGDpX,MAGRmS,KAAM,WAEL,MADAqJ,GAAKO,SAAU/b,KAAMwX,WACdxX,MAGRgb,MAAO,WACN,QAASA,GAIZ,OAAOQ,IAERrZ,EAAOiE,QAEN8I,SAAU,SAAU7D,GACnB,GAAI2Q,KAEA,UAAW,OAAQ7Z,EAAO2Y,UAAU,eAAgB,aACpD,SAAU,OAAQ3Y,EAAO2Y,UAAU,eAAgB,aACnD,SAAU,WAAY3Y,EAAO2Y,UAAU,YAE1ClN,EAAQ,UACRmC,GACCnC,MAAO,WACN,MAAOA,IAERuB,OAAQ,WAEP,MADAF,GAASiC,KAAMsG,WAAYpG,KAAMoG,WAC1BxX,MAERic,KAAM,WACL,GAAIC,GAAM1E,SACV,OAAOrV,GAAO+M,SAAS,SAAUiN,GAChCha,EAAOC,KAAM4Z,EAAQ,SAAUrd,EAAGyd,GACjC,GAAIC,GAASD,EAAO,GACnB5H,EAAK0H,EAAKvd,EAEXsQ,GAAUmN,EAAM,IAAMja,EAAOgC,WAAYqQ,GACxC,WACC,GAAI8H,GAAW9H,EAAG7U,MAAOK,KAAMwX,UAC1B8E,IAAYna,EAAOgC,WAAYmY,EAASvM,SAC5CuM,EAASvM,UACPmB,KAAMiL,EAASI,SACfnL,KAAM+K,EAASK,QACfvL,SAAUkL,EAASM,QAErBN,EAAUE,EAAS,QAAUrc,OAASiP,EAAWkN,EAAWnc,MAAQsc,KAGtEH,EAAUE,MAGZH,EAAM,OACJnM,WAIJA,QAAS,SAAU1M,GAClB,MAAc,OAAPA,EAAclB,EAAOiE,OAAQ/C,EAAK0M,GAAYA,IAGvDd,IAqCD,OAlCAc,GAAQ2M,KAAO3M,EAAQkM,KAGvB9Z,EAAOC,KAAM4Z,EAAQ,SAAUrd,EAAGyd,GACjC,GAAIxX,GAAOwX,EAAO,GACjBO,EAAcP,EAAO,EAGtBrM,GAASqM,EAAM,IAAOxX,EAAKuB,IAGtBwW,GACJ/X,EAAKuB,IAAI,WAERyH,EAAQ+O,GAGNX,EAAY,EAAJrd,GAAS,GAAI8c,QAASO,EAAQ,GAAK,GAAIH,MAInD5M,EAAUmN,EAAM,IAAOxX,EAAKuN,KAC5BlD,EAAUmN,EAAM,GAAK,QAAWxX,EAAKmX,WAItChM,EAAQA,QAASd,GAGZ5D,GACJA,EAAKhM,KAAM4P,EAAUA,GAIfA,GAIR2N,KAAM,SAAUC,GACf,GAuBCC,GAAgBC,EAAkBC,EAvB/Bre,EAAI,EACPse,EAAgBjJ,EAAW3U,KAAMmY,WACjC1Y,EAASme,EAAcne,OAGvBwQ,EAAuB,IAAXxQ,GAAkB+d,GAAe1a,EAAOgC,WAAY0Y,EAAY9M,SAAcjR,EAAS,EAGnGmQ,EAAyB,IAAdK,EAAkBuN,EAAc1a,EAAO+M,WAGlDgO,EAAa,SAAUve,EAAGwe,EAAU5U,GACnC,MAAO,UAAUrJ,GAChBie,EAAUxe,GAAMqB,KAChBuI,EAAQ5J,GAAM6Y,UAAU1Y,OAAS,EAAIkV,EAAW3U,KAAMmY,WAActY,EAChEqJ,IAAWuU,EACd7N,EAASY,WAAYsN,EAAU5U,KACf+G,GAChBL,EAASa,YAAaqN,EAAU5U,IAQpC,IAAKzJ,EAAS,EAIb,IAHAge,EAAiB,GAAI/I,OAAOjV,GAC5Bie,EAAmB,GAAIhJ,OAAOjV,GAC9Bke,EAAkB,GAAIjJ,OAAOjV,GACjBA,EAAJH,EAAYA,IACdse,EAAete,IAAOwD,EAAOgC,WAAY8Y,EAAete,GAAIoR,SAChEkN,EAAete,GAAIoR,UACjBmB,KAAMgM,EAAYve,EAAGqe,EAAiBC,IACtC7L,KAAMnC,EAASuN,QACfvL,SAAUiM,EAAYve,EAAGoe,EAAkBD,MAE3CxN,CAUL,OAJMA,IACLL,EAASa,YAAakN,EAAiBC,GAGjChO,EAASc,aAGlB5N,EAAOuE,QAAU,WAEhB,GAAIA,GACH4O,EACApX,EACAkf,EACAC,EACAC,EACAzE,EACA0E,EACA5e,EACA6e,EACAC,EACAC,EAAM/Y,EAASK,cAAc,MAS9B,IANA0Y,EAAIC,aAAc,YAAa,KAC/BD,EAAI9W,UAAY,qEAGhB0O,EAAMoI,EAAItY,qBAAqB,KAC/BlH,EAAIwf,EAAItY,qBAAqB,KAAM,IAC7BkQ,IAAQpX,IAAMoX,EAAIxW,OACvB,QAIDse,GAASzY,EAASK,cAAc,UAChCqY,EAAMD,EAAO/X,YAAaV,EAASK,cAAc,WACjDsY,EAAQI,EAAItY,qBAAqB,SAAU,GAE3ClH,EAAEwJ,MAAMkW,QAAU,gCAClBlX,GAECmX,kBAAiD,IAA5BH,EAAII,WAAWlb,SAIpCmb,OAAQL,EAAItY,qBAAqB,SAAStG,OAI1Ckf,gBAAiBN,EAAItY,qBAAqB,QAAQtG,OAIlD4I,MAAO,MAAM1J,KAAME,EAAE8E,aAAa,UAIlCib,eAA6C,OAA3B/f,EAAE8E,aAAa,QAKjCkQ,QAAS,OAAOlV,KAAME,EAAEwJ,MAAMwL,SAI9BgL,WAAYhgB,EAAEwJ,MAAMwW,SAKpBC,QAA2B,OAAhBb,EAAMpe,MAIjBkf,YAAaf,EAAIpW,SAGjBoX,gBAAmC,MAAlBX,EAAIY,UAGrBC,UAAW5Z,EAASK,cAAc,QAAQuZ,QAI1C5X,WAA0E,kBAA9DhC,EAASK,cAAc,OAAOwZ,WAAW,GAAO/X,UAG5DgY,SAAoC,eAAxB9Z,EAAS+Z,WAGrBC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,EACdxM,wBAAwB,EACxBE,kBAAkB,EAClBuM,qBAAqB,EACrBlV,mBAAmB,EACnBmV,eAAe,GAIhB3B,EAAMtW,SAAU,EAChBN,EAAQwY,eAAiB5B,EAAMkB,WAAW,GAAOxX,QAIjDoW,EAAOxB,UAAW,EAClBlV,EAAQyY,aAAe9B,EAAIzB,QAI3B,WACQ8B,GAAI1f,KACV,MAAOmF,GACRuD,EAAQoY,eAAgB,EA6CzB,IA1CMpB,EAAIjI,kBAAoBiI,EAAIjD,aAAeiD,EAAI0B,YACpD1B,EAAIjD,YAAa,UAAWgD,EAAU,WAGrC/W,EAAQqY,cAAe,IAExBrB,EAAIc,WAAW,GAAOY,UAAU,WAChC1B,EAAI7H,YAAa,UAAW4H,IAK7BH,EAAQ3Y,EAASK,cAAc,SAC/BsY,EAAMpe,MAAQ,IACdoe,EAAMK,aAAc,OAAQ,SAC5BjX,EAAQ2Y,WAA6B,MAAhB/B,EAAMpe,MAE3Boe,EAAMK,aAAc,UAAW,WAG/BL,EAAMK,aAAc,OAAQ,KAE5BD,EAAIrY,YAAaiY,GACjBzE,EAAWlU,EAASI,yBACpB8T,EAASxT,YAAaqY,EAAI4B,WAG1B5Y,EAAQ6Y,WAAa1G,EAAS2F,WAAW,GAAOA,WAAW,GAAOc,UAAUtY,QAI5EN,EAAQ8Y,cAAgBlC,EAAMtW,QAE9B6R,EAASjO,YAAa0S,GACtBzE,EAASxT,YAAaqY,GAQjBA,EAAIjD,YACR,IAAM9b,KACL8gB,QAAQ,EACRC,QAAQ,EACRC,SAAS,GAETpC,EAAY,KAAO5e,EACnB6e,EAAgBD,IAAaG,GACvBF,IACLE,EAAIC,aAAcJ,EAAW,WAC7BC,EAA4C,kBAArBE,GAAKH,IAE7B7W,EAAS/H,EAAI,WAAc6e,CAiG7B,OA5FArb,GAAO,WACN,GAAIyd,GAAWlC,EAAKmC,EAAKC,EACxBC,EAAW,6DACX9V,EAAOtF,EAASS,qBAAqB,QAAQ,EAExC6E,KAKN2V,EAAYjb,EAASK,cAAc,OACnC4a,EAAUlY,MAAMkW,QAAU,mFAC1B3T,EAAK+V,aAAcJ,EAAW3V,EAAK6T,YAGnCJ,EAAM/Y,EAASK,cAAc,OAC7B4a,EAAUva,YAAaqY,GASvBA,EAAI9W,UAAY,8CAChBiZ,EAAMnC,EAAItY,qBAAqB,MAC/Bya,EAAK,GAAInY,MAAMkW,QAAU,2CACzBJ,EAA0C,IAA1BqC,EAAK,GAAInW,aAEzBmW,EAAK,GAAInY,MAAMY,QAAU,GACzBuX,EAAK,GAAInY,MAAMY,QAAU,OAIzB5B,EAAQuZ,sBAAwBzC,GAA2C,IAA1BqC,EAAK,GAAInW,aAG1DgU,EAAI9W,UAAY,GAChB8W,EAAIhW,MAAMkW,QAAU,wKACpBlX,EAAQkD,UAAkC,IAApB8T,EAAIjU,YAC1B/C,EAAQwZ,iCAAwD,IAAnBjW,EAAKkW,UAI7Cre,EAAOse,mBACX1Z,EAAQuY,cAAuE,QAArDnd,EAAOse,iBAAkB1C,EAAK,WAAehD,IACvEhU,EAAQoD,kBAA2F,SAArEhI,EAAOse,iBAAkB1C,EAAK,QAAYrT,MAAO,QAAUA,MAOzFyV,EAAYnb,EAASK,cAAc,OACnC8a,EAAUpY,MAAMkW,QAAUF,EAAIhW,MAAMkW,QAAUmC,EAC9CD,EAAUpY,MAAM2Y,YAAcP,EAAUpY,MAAM2C,MAAQ,IACtDqT,EAAIhW,MAAM2C,MAAQ,MAClBqT,EAAIrY,YAAaya,GACjBpZ,EAAQsY,qBACNzV,YAAczH,EAAOse,iBAAkBN,EAAW,WAAeO,cAGrC,mBAAnB3C,GAAIhW,MAAM8K,OAKrBkL,EAAI9W,UAAY,GAChB8W,EAAIhW,MAAMkW,QAAUmC,EAAW,8CAC/BrZ,EAAQ6L,uBAA+C,IAApBmL,EAAIjU,YAIvCiU,EAAIhW,MAAMY,QAAU,QACpBoV,EAAIhW,MAAM0K,SAAW,UACrBsL,EAAI9W,UAAY,cAChB8W,EAAII,WAAWpW,MAAM2C,MAAQ,MAC7B3D,EAAQ+L,iBAAyC,IAApBiL,EAAIjU,YAEjCmW,EAAUlY,MAAM8K,KAAO,GAIxBvI,EAAKW,YAAagV,GAClBA,EAAYlC,EAAMmC,EAAMC,EAAY,QAIrCjH,EAASjO,YAAa8S,GACtBpI,EAAMpX,EAAIkf,EAASC,EAAMC,EAAQzE,EAAW6E,EAAM,KAE3ChX,IAER,IAAIzD,IAAS,+BACZH,GAAa,UAEdX,GAAOiE,QACNka,SAEAC,cAGAC,KAAM,EAINnZ,QAAS,UAAalF,EAAOqS,GAAG0B,OAASlN,KAAKyX,UAAWxiB,QAAS,MAAO,IAIzEyiB,QACCC,OAAS,EAET1e,OAAU,6CACV2e,QAAU,GAGXlb,QAAS,SAAUhD,GAElB,MADAA,GAAOA,EAAKE,SAAWT,EAAOme,MAAO5d,EAAKP,EAAOkF,UAAa3E,EAAMP,EAAOkF,WAClE3E,IAASU,EAAmBV,IAGtCC,KAAM,SAAUD,EAAMG,EAAMF,EAAMke,GACjC,GAAM1e,EAAO2e,WAAYpe,GAAzB,CAIA,GAAIqe,GAAW9J,EACd+J,EAAc7e,EAAOkF,QACrB4Z,EAA4B,gBAATpe,GAInBqe,EAASxe,EAAKE,SAId0d,EAAQY,EAAS/e,EAAOme,MAAQ5d,EAIhC+T,EAAKyK,EAASxe,EAAMse,GAAgBte,EAAMse,IAAiBA,CAI5D,IAAOvK,GAAO6J,EAAM7J,KAASoK,GAAQP,EAAM7J,GAAI9T,QAAUse,GAAate,IAASjB,EAoE/E,MAhEM+U,KAGAyK,EACJxe,EAAMse,GAAgBvK,EAAKtU,EAAOoe,WAAWtb,OAAS9C,EAAO8X,OAE7DxD,EAAKuK,GAIDV,EAAO7J,KACZ6J,EAAO7J,MAIDyK,IACLZ,EAAO7J,GAAKtX,OAASgD,EAAOoX,QAMT,gBAAT1W,IAAqC,kBAATA,MAClCge,EACJP,EAAO7J,GAAOtU,EAAOiE,OAAQka,EAAO7J,GAAM5T,GAE1Cyd,EAAO7J,GAAK9T,KAAOR,EAAOiE,OAAQka,EAAO7J,GAAK9T,KAAME,IAItDke,EAAYT,EAAO7J,GAKboK,IACCE,EAAUpe,OACfoe,EAAUpe,SAGXoe,EAAYA,EAAUpe,MAGlBA,IAASjB,IACbqf,EAAW5e,EAAOmP,UAAWzO,IAAWF,GAKpCse,GAGJhK,EAAM8J,EAAWle,GAGL,MAAPoU,IAGJA,EAAM8J,EAAW5e,EAAOmP,UAAWzO,MAGpCoU,EAAM8J,EAGA9J,IAGRrE,WAAY,SAAUlQ,EAAMG,EAAMge,GACjC,GAAM1e,EAAO2e,WAAYpe,GAAzB,CAIA,GAAIqe,GAAWpiB,EAAGiH,EAEjBsb,EAASxe,EAAKE,SAGd0d,EAAQY,EAAS/e,EAAOme,MAAQ5d,EAChC+T,EAAKyK,EAASxe,EAAMP,EAAOkF,SAAYlF,EAAOkF,OAI/C,IAAMiZ,EAAO7J,GAAb,CAIA,GAAK5T,IAEJke,EAAYF,EAAMP,EAAO7J,GAAO6J,EAAO7J,GAAK9T,MAE3B,CAGVR,EAAO6I,QAASnI,KAGhBA,IAAQke,GACZle,GAASA,IAITA,EAAOV,EAAOmP,UAAWzO,GAExBA,EADIA,IAAQke,IACHle,GAEFA,EAAKR,MAAM,MAKrB,KAAM1D,EAAI,EAAGiH,EAAI/C,EAAK/D,OAAY8G,EAAJjH,EAAOA,UAC7BoiB,GAAWle,EAAKlE,GAKxB,MAAQkiB,EAAMzd,EAAoBjB,EAAOmB,eAAiByd,GACzD,QAMGF,UACEP,GAAO7J,GAAK9T,KAIbS,EAAmBkd,EAAO7J,QAM5ByK,EACJ/e,EAAOgf,WAAaze,IAAQ,GAGjBP,EAAOuE,QAAQoY,eAAiBwB,GAASA,EAAMxe,aACnDwe,GAAO7J,GAId6J,EAAO7J,GAAO,SAKhB3Q,MAAO,SAAUpD,EAAMG,EAAMF,GAC5B,MAAOR,GAAOQ,KAAMD,EAAMG,EAAMF,GAAM,IAIvCme,WAAY,SAAUpe,GACrB,GAAIge,GAAShe,EAAK4D,UAAYnE,EAAOue,OAAQhe,EAAK4D,SAASvD,cAG3D,QAAQ2d,GAAUA,KAAW,GAAQhe,EAAKM,aAAa,aAAe0d,KAIxEve,EAAOqS,GAAGpO,QACTzD,KAAM,SAAUlE,EAAKS,GACpB,GAAIkiB,GAAOC,EAAM/K,EAAMzT,EAAM+C,EAC5BlD,EAAO1C,KAAK,GACZrB,EAAI,EACJgE,EAAO,IAGR,IAAKlE,IAAQiD,EAAY,CACxB,GAAK1B,KAAKlB,SACT6D,EAAOR,EAAOQ,KAAMD,GAEG,IAAlBA,EAAKE,WAAmBT,EAAO2D,MAAOpD,EAAM,gBAAkB,CAElE,IADA4T,EAAO5T,EAAK4e,WACN1b,EAAI0Q,EAAKxX,OAAY8G,EAAJjH,EAAOA,IAC7BkE,EAAOyT,EAAK3X,GAAGkE,KAETA,EAAKqR,QAAS,WACnBrR,EAAOV,EAAOmP,UAAWzO,EAAK0e,UAAU,IAExC9e,EAAUC,EAAMG,EAAMF,EAAME,IAG9BV,GAAO2D,MAAOpD,EAAM,eAAe,GAIrC,MAAOC,GAIR,MAAoB,gBAARlE,GACJuB,KAAKoC,KAAK,WAChBD,EAAOQ,KAAM3C,KAAMvB,MAIrB2iB,EAAQ3iB,EAAI4D,MAAO,IAAK,GACxB+e,EAAM,GAAKA,EAAM,GAAK,IAAMA,EAAM,GAAK,GACvCC,EAAOD,EAAM,GAAK,IAEXjf,EAAOgY,OAAQna,KAAM,SAAUd,GAErC,MAAKA,KAAUwC,GACdiB,EAAO3C,KAAKwhB,eAAgB,UAAYH,GAAQD,EAAM,KAGjDze,IAASjB,GAAagB,IAC1BC,EAAOR,EAAOQ,KAAMD,EAAMjE,GAC1BkE,EAAOF,EAAUC,EAAMjE,EAAKkE,IAGtBA,IAASjB,GAAa0f,EAAM,GAClCphB,KAAK2C,KAAMye,EAAM,IACjBze,IAGFye,EAAM,GAAKliB,MACXc,MAAKoC,KAAK,WACT,GAAIoZ,GAAOrZ,EAAQnC,KAEnBwb,GAAKgG,eAAgB,UAAYH,EAAMD,GACvCjf,EAAOQ,KAAM3C,KAAMvB,EAAKS,GACxBsc,EAAKgG,eAAgB,aAAeH,EAAMD,OAEzC,KAAMliB,EAAOsY,UAAU1Y,OAAS,EAAG,MAAM,KAG7C8T,WAAY,SAAUnU,GACrB,MAAOuB,MAAKoC,KAAK,WAChBD,EAAOyQ,WAAY5S,KAAMvB,QAoD5B0D,EAAOiE,QACN4K,MAAO,SAAUtO,EAAMiD,EAAMhD,GAC5B,GAAIqO,EAEJ,OAAKtO,IACJiD,GAASA,GAAQ,MAAS,QAC1BqL,EAAQ7O,EAAO2D,MAAOpD,EAAMiD,GAGvBhD,KACEqO,GAAS7O,EAAO6I,QAAQrI,GAC7BqO,EAAQ7O,EAAO2D,MAAOpD,EAAMiD,EAAMxD,EAAOuU,UAAU/T,IAEnDqO,EAAMnR,KAAM8C,IAGPqO,OAZR,QAgBDyQ,QAAS,SAAU/e,EAAMiD,GACxBA,EAAOA,GAAQ,IAEf,IAAIqL,GAAQ7O,EAAO6O,MAAOtO,EAAMiD,GAC/B+b,EAAc1Q,EAAMlS,OACpB0V,EAAKxD,EAAMjE,QACXsE,EAAQlP,EAAO6P,YAAatP,EAAMiD,GAClCgc,EAAO,WACNxf,EAAOsf,QAAS/e,EAAMiD,GAIZ,gBAAP6O,IACJA,EAAKxD,EAAMjE,QACX2U,KAGIlN,IAIU,OAAT7O,GACJqL,EAAM/E,QAAS,oBAIToF,GAAMb,KACbgE,EAAGnV,KAAMqD,EAAMif,EAAMtQ,KAGhBqQ,GAAerQ,GACpBA,EAAMa,MAAMC,QAKdH,YAAa,SAAUtP,EAAMiD,GAC5B,GAAIlH,GAAMkH,EAAO,YACjB,OAAOxD,GAAO2D,MAAOpD,EAAMjE,IAAS0D,EAAO2D,MAAOpD,EAAMjE,GACvDyT,MAAO/P,EAAO2Y,UAAU,eAAe3U,IAAI,WAC1ChE,EAAOyQ,WAAYlQ,EAAMiD,EAAO,SAAS,GACzCxD,EAAOyQ,WAAYlQ,EAAMjE,GAAK,UAMlC0D,EAAOqS,GAAGpO,QACT4K,MAAO,SAAUrL,EAAMhD,GACtB,GAAIif,GAAS,CAQb,OANqB,gBAATjc,KACXhD,EAAOgD,EACPA,EAAO,KACPic,KAGIpK,UAAU1Y,OAAS8iB,EAChBzf,EAAO6O,MAAOhR,KAAK,GAAI2F,GAGxBhD,IAASjB,EACf1B,KACAA,KAAKoC,KAAK,WACT,GAAI4O,GAAQ7O,EAAO6O,MAAOhR,KAAM2F,EAAMhD,EAGtCR,GAAO6P,YAAahS,KAAM2F,GAEZ,OAATA,GAA8B,eAAbqL,EAAM,IAC3B7O,EAAOsf,QAASzhB,KAAM2F,MAI1B8b,QAAS,SAAU9b,GAClB,MAAO3F,MAAKoC,KAAK,WAChBD,EAAOsf,QAASzhB,KAAM2F,MAKxBkc,MAAO,SAAUC,EAAMnc,GAItB,MAHAmc,GAAO3f,EAAO0O,GAAK1O,EAAO0O,GAAGkR,OAAQD,IAAUA,EAAOA,EACtDnc,EAAOA,GAAQ,KAER3F,KAAKgR,MAAOrL,EAAM,SAAUgc,EAAMtQ,GACxC,GAAI2Q,GAAU7T,WAAYwT,EAAMG,EAChCzQ,GAAMb,KAAO,WACZyR,aAAcD,OAIjBE,WAAY,SAAUvc,GACrB,MAAO3F,MAAKgR,MAAOrL,GAAQ,UAI5BoK,QAAS,SAAUpK,EAAMtC,GACxB,GAAImK,GACH2U,EAAQ,EACRC,EAAQjgB,EAAO+M,WACflL,EAAWhE,KACXrB,EAAIqB,KAAKlB,OACTyd,EAAU,aACC4F,GACTC,EAAMtS,YAAa9L,GAAYA,IAUlC,KANqB,gBAAT2B,KACXtC,EAAMsC,EACNA,EAAOjE,GAERiE,EAAOA,GAAQ,KAERhH,KACN6O,EAAMrL,EAAO2D,MAAO9B,EAAUrF,GAAKgH,EAAO,cACrC6H,GAAOA,EAAI0E,QACfiQ,IACA3U,EAAI0E,MAAM/L,IAAKoW,GAIjB,OADAA,KACO6F,EAAMrS,QAAS1M,KAGxB,IAAIgf,IAAUC,GAAUC,GACvBC,GAAS,YACTC,GAAU,MACVC,GAAQ,sBACRC,GAAa,6CACbC,GAAa,eACbC,GAAW,8HACXxE,GAAkBlc,EAAOuE,QAAQ2X,eAElClc,GAAOqS,GAAGpO,QACTkQ,KAAM,SAAUzT,EAAM3D,GACrB,MAAOiD,GAAOgY,OAAQna,KAAMmC,EAAOmU,KAAMzT,EAAM3D,EAAOsY,UAAU1Y,OAAS,IAG1EgkB,WAAY,SAAUjgB,GACrB,MAAO7C,MAAKoC,KAAK,WAChBD,EAAO2gB,WAAY9iB,KAAM6C,MAI3B4L,KAAM,SAAU5L,EAAM3D,GACrB,MAAOiD,GAAOgY,OAAQna,KAAMmC,EAAOsM,KAAM5L,EAAM3D,EAAOsY,UAAU1Y,OAAS,IAG1EikB,WAAY,SAAUlgB,GAErB,MADAA,GAAOV,EAAO6gB,QAASngB,IAAUA,EAC1B7C,KAAKoC,KAAK,WAEhB,IACCpC,KAAM6C,GAASnB,QACR1B,MAAM6C,GACZ,MAAOM,QAIX8f,SAAU,SAAU/jB,GACnB,GAAIgkB,GAAYvkB,EAAGiH,EAAGlD,EACrBygB,EAAUhlB,EAAGilB,CAEd,IAAKjhB,EAAOgC,WAAYjF,GACvB,MAAOc,MAAKoC,KAAK,SAAUT,GAC1BQ,EAAQnC,MAAOijB,SAAU/jB,EAAMG,KAAKW,KAAM2B,EAAG3B,KAAKse,aAIpD,IAAKpf,GAA0B,gBAAVA,GAGpB,IAFAgkB,EAAahkB,EAAMmD,MAAOC,IAEpB3D,EAAI,EAAGiH,EAAI5F,KAAKlB,OAAY8G,EAAJjH,EAAOA,IAGpC,GAFA+D,EAAO1C,KAAMrB,GAEU,IAAlB+D,EAAKE,SACT,GAAMF,EAAK4b,WAAmC,IAAtB4E,EAAWpkB,OAG5B,CAGN,IAFAqkB,EAAW,IAAMzgB,EAAK4b,UAAY,IAE5BngB,EAAI,EAAGilB,EAAKF,EAAWpkB,OAAYskB,EAAJjlB,EAAQA,IACvCglB,EAASjP,QAAS,IAAMgP,EAAY/kB,GAAM,KAAQ,IACtDglB,GAAYD,EAAY/kB,GAAM,IAGhCuE,GAAK4b,UAAYnc,EAAO0E,KAAMsc,OAV9BzgB,GAAK4b,UAAYpf,CAgBrB,OAAOc,OAGRqjB,YAAa,SAAUnkB,GACtB,GAAIokB,GAAShF,EAAW5b,EAAMvE,EAAGilB,EAAIzkB,EAAGiH,CAExC,IAAKzD,EAAOgC,WAAYjF,GACvB,MAAOc,MAAKoC,KAAK,SAAUT,GAC1BQ,EAAQnC,MAAOqjB,YAAankB,EAAMG,KAAKW,KAAM2B,EAAG3B,KAAKse,aAGvD,IAAMpf,GAA0B,gBAAVA,IAAuBA,IAAUwC,EAGtD,IAFA4hB,GAAYpkB,GAAS,IAAKmD,MAAOC,IAE3B3D,EAAI,EAAGiH,EAAI5F,KAAKlB,OAAY8G,EAAJjH,EAAOA,IAEpC,GADA+D,EAAO1C,KAAMrB,GACU,IAAlB+D,EAAKE,UAAkBF,EAAK4b,UAAY,CAK5C,IAHAA,GAAa,IAAM5b,EAAK4b,UAAY,KAAKrgB,QAASukB,GAAQ,KAGpDrkB,EAAI,EAAGilB,EAAKE,EAAQxkB,OAAYskB,EAAJjlB,EAAQA,IAEzC,KAAQmgB,EAAUpK,QAAQ,IAAMoP,EAASnlB,GAAM,MAAQ,GACtDmgB,EAAYA,EAAUrgB,QAAS,IAAMqlB,EAASnlB,GAAM,IAAM,IAG5DuE,GAAK4b,UAAYpf,EAAQiD,EAAO0E,KAAMyX,GAAc,GAKvD,MAAOte,OAGRujB,YAAa,SAAUrkB,EAAOskB,GAC7B,GAAI7d,SAAczG,GACjBukB,EAA6B,iBAAbD,EAEjB,OACQxjB,MAAKoC,KADRD,EAAOgC,WAAYjF,GACN,SAAUP,GAC1BwD,EAAQnC,MAAOujB,YAAarkB,EAAMG,KAAKW,KAAMrB,EAAGqB,KAAKse,UAAWkF,GAAWA,IAI5D,WAChB,GAAc,WAAT7d,EAQJ,IANA,GAAI2Y,GACH3f,EAAI,EACJ6c,EAAOrZ,EAAQnC,MACf4N,EAAQ4V,EACRN,EAAahkB,EAAMmD,MAAOC,IAElBgc,EAAY4E,EAAYvkB,MAEhCiP,EAAQ6V,EAAS7V,GAAS4N,EAAKkI,SAAUpF,GACzC9C,EAAM5N,EAAQ,WAAa,eAAiB0Q,QAGzB,cAAT3Y,GAAiC,YAATA,KAC9B3F,KAAKse,WAETnc,EAAO2D,MAAO9F,KAAM,gBAAiBA,KAAKse,WAI3Cte,KAAKse,UAAYte,KAAKse,WAAapf,KAAU,EAAQ,GAAKiD,EAAO2D,MAAO9F,KAAM,kBAAqB,OAKtG0jB,SAAU,SAAUpP,GAInB,IAHA,GAAIgK,GAAY,IAAMhK,EAAW,IAChC3V,EAAI,EACJiH,EAAI5F,KAAKlB,OACE8G,EAAJjH,EAAOA,IACd,GAA0B,IAArBqB,KAAKrB,GAAGiE,WAAmB,IAAM5C,KAAKrB,GAAG2f,UAAY,KAAKrgB,QAAQukB,GAAQ,KAAKtO,QAASoK,IAAe,EAC3G,OAAO,CAIT,QAAO,GAGRjV,IAAK,SAAUnK,GACd,GAAImS,GAAO4F,EAAK9S,EACfzB,EAAO1C,KAAK,EAEb,EAAA,GAAMwX,UAAU1Y,OAsBhB,MAFAqF,GAAahC,EAAOgC,WAAYjF,GAEzBc,KAAKoC,KAAK,SAAUzD,GAC1B,GAAI0K,GACHmS,EAAOrZ,EAAOnC,KAEQ,KAAlBA,KAAK4C,WAKTyG,EADIlF,EACEjF,EAAMG,KAAMW,KAAMrB,EAAG6c,EAAKnS,OAE1BnK,EAIK,MAAPmK,EACJA,EAAM,GACoB,gBAARA,GAClBA,GAAO,GACIlH,EAAO6I,QAAS3B,KAC3BA,EAAMlH,EAAOsV,IAAIpO,EAAK,SAAWnK,GAChC,MAAgB,OAATA,EAAgB,GAAKA,EAAQ,MAItCmS,EAAQlP,EAAOwhB,SAAU3jB,KAAK2F,OAAUxD,EAAOwhB,SAAU3jB,KAAKsG,SAASvD,eAGjEsO,GAAW,OAASA,IAAUA,EAAMuS,IAAK5jB,KAAMqJ,EAAK,WAAc3H,IACvE1B,KAAKd,MAAQmK,KAlDd,IAAK3G,EAGJ,MAFA2O,GAAQlP,EAAOwhB,SAAUjhB,EAAKiD,OAAUxD,EAAOwhB,SAAUjhB,EAAK4D,SAASvD,eAElEsO,GAAS,OAASA,KAAU4F,EAAM5F,EAAMwF,IAAKnU,EAAM,YAAehB,EAC/DuV,GAGRA,EAAMvU,EAAKxD,MAEW,gBAAR+X,GAEbA,EAAIhZ,QAAQwkB,GAAS,IAEd,MAAPxL,EAAc,GAAKA,OA2CxB9U,EAAOiE,QACNud,UACCE,QACChN,IAAK,SAAUnU,GAGd,GAAI2G,GAAM3G,EAAK4e,WAAWpiB,KAC1B,QAAQmK,GAAOA,EAAIya,UAAYphB,EAAKxD,MAAQwD,EAAKnB,OAGnD6b,QACCvG,IAAK,SAAUnU,GAYd,IAXA,GAAIxD,GAAO2kB,EACV7hB,EAAUU,EAAKV,QACfwG,EAAQ9F,EAAKqhB,cACbC,EAAoB,eAAdthB,EAAKiD,MAAiC,EAAR6C,EACpCD,EAASyb,EAAM,QACf/a,EAAM+a,EAAMxb,EAAQ,EAAIxG,EAAQlD,OAChCH,EAAY,EAAR6J,EACHS,EACA+a,EAAMxb,EAAQ,EAGJS,EAAJtK,EAASA,IAIhB,GAHAklB,EAAS7hB,EAASrD,MAGXklB,EAAO5c,UAAYtI,IAAM6J,IAE5BrG,EAAOuE,QAAQyY,YAAe0E,EAAOjI,SAA+C,OAApCiI,EAAO7gB,aAAa,cACnE6gB,EAAOlgB,WAAWiY,UAAazZ,EAAOmE,SAAUud,EAAOlgB,WAAY,aAAiB,CAMxF,GAHAzE,EAAQiD,EAAQ0hB,GAASxa,MAGpB2a,EACJ,MAAO9kB,EAIRqJ,GAAO1I,KAAMX,GAIf,MAAOqJ,IAGRqb,IAAK,SAAUlhB,EAAMxD,GACpB,GAAIqJ,GAASpG,EAAOuU,UAAWxX,EAS/B,OAPAiD,GAAOO,GAAMyT,KAAK,UAAU/T,KAAK,WAChCpC,KAAKiH,SAAW9E,EAAOsC,QAAStC,EAAOnC,MAAMqJ,MAAOd,IAAY,IAG3DA,EAAOzJ,SACZ4D,EAAKqhB,cAAgB,IAEfxb,KAMV0b,UAEA3N,KAAM,SAAU5T,EAAMG,EAAM3D,EAAOob,GAClC,GAAIrD,GAAK5F,EAAO6S,EACfC,EAAQzhB,EAAKE,QAGd,IAAMF,GAAkB,IAAVyhB,GAAyB,IAAVA,GAAyB,IAAVA,EAI5C,MAAK7J,IAAQnY,EAAOgC,WAAYhC,EAAOqS,GAAI3R,IACnCV,EAAQO,GAAQG,GAAQ3D,GAIE,mBAAtBwD,GAAKM,aACTb,EAAOsM,KAAM/L,EAAMG,EAAM3D,IAGjCglB,EAAmB,IAAVC,IAAgBhiB,EAAOiiB,SAAU1hB,GAIrCwhB,IACJrhB,EAAOA,EAAKE,cACZsO,EAAQlP,EAAOkiB,UAAWxhB,KAAYggB,GAAS7kB,KAAM6E,GAASyf,GAAWD,KAGrEnjB,IAAUwC,EAEC,OAAVxC,MACJiD,GAAO2gB,WAAYpgB,EAAMG,GAGdwO,GAAS,OAASA,IAAS6S,IAAWjN,EAAM5F,EAAMuS,IAAKlhB,EAAMxD,EAAO2D,MAAYnB,EACpFuV,GAGPvU,EAAKib,aAAc9a,EAAM3D,EAAQ,IAC1BA,GAGGmS,GAAS,OAASA,IAAS6S,GAA8C,QAAnCjN,EAAM5F,EAAMwF,IAAKnU,EAAMG,IACjEoU,GAIPA,EAAMvU,EAAKM,aAAcH,GAGV,OAARoU,EACNvV,EACAuV,KAIH6L,WAAY,SAAUpgB,EAAMxD,GAC3B,GAAIolB,GAAUC,EAAW1hB,EAAM4gB,EAC9B9kB,EAAI,CAEL,IAAKO,GAA2B,IAAlBwD,EAAKE,SAIlB,IAFA2hB,EAAYrlB,EAAMmD,MAAOC,IAEjB3D,EAAI4lB,EAAUzlB,OAAQH,IAC7BkE,EAAO0hB,EAAW5lB,GAEbkE,IACJyhB,EAAWniB,EAAO6gB,QAASngB,IAAUA,EACrC4gB,EAASZ,GAAS7kB,KAAM6E,GAIlB4gB,GACLthB,EAAOmU,KAAM5T,EAAMG,EAAM,IAE1BH,EAAK0E,gBAAiBiX,GAAkBxb,EAAOyhB,GAG1Cb,GAAUa,IAAY5hB,KAC1BA,EAAM4hB,IAAa,KAOxBD,WACC1e,MACCie,IAAK,SAAUlhB,EAAMxD,GAEpB,GAAKwjB,GAAM1kB,KAAM0E,EAAK4D,WAAc5D,EAAKiB,WACxCxB,EAAO0L,MAAO,sCACR,KAAM1L,EAAOuE,QAAQ2Y,YAAwB,UAAVngB,GAAqBiD,EAAOmE,SAAS5D,EAAM,SAAW,CAI/F,GAAI2G,GAAM3G,EAAKxD,KAKf,OAJAwD,GAAKib,aAAc,OAAQze,GACtBmK,IACJ3G,EAAKxD,MAAQmK,GAEPnK,KAMVA,OACC2X,IAAK,SAAUnU,EAAMG,GACpB,MAAKwf,KAAYlgB,EAAOmE,SAAU5D,EAAM,UAChC2f,GAASxL,IAAKnU,EAAMG,GAErBA,IAAQH,GACdA,EAAKxD,MACL,MAEF0kB,IAAK,SAAUlhB,EAAMxD,EAAO2D,GAC3B,MAAKwf,KAAYlgB,EAAOmE,SAAU5D,EAAM,UAChC2f,GAASuB,IAAKlhB,EAAMxD,EAAO2D,QAGnCH,EAAKxD,MAAQA,MAKhB8jB,SACCwB,SAAU,WACVC,SAAU,WACVC,MAAO,UACPC,QAAS,YACTC,UAAW,YACXC,YAAa,cACbC,YAAa,cACbC,QAAS,UACTC,QAAS,UACTC,OAAQ,SACRC,YAAa,cACbC,gBAAiB,mBAGlB1W,KAAM,SAAU/L,EAAMG,EAAM3D,GAC3B,GAAI+X,GAAK5F,EAAO6S,EACfC,EAAQzhB,EAAKE,QAGd,IAAMF,GAAkB,IAAVyhB,GAAyB,IAAVA,GAAyB,IAAVA,EAY5C,MARAD,GAAmB,IAAVC,IAAgBhiB,EAAOiiB,SAAU1hB,GAErCwhB,IAEJrhB,EAAOV,EAAO6gB,QAASngB,IAAUA,EACjCwO,EAAQlP,EAAOijB,UAAWviB,IAGtB3D,IAAUwC,EACT2P,GAAS,OAASA,KAAU4F,EAAM5F,EAAMuS,IAAKlhB,EAAMxD,EAAO2D,MAAYnB,EACnEuV,EAGEvU,EAAMG,GAAS3D,EAIpBmS,GAAS,OAASA,IAA6C,QAAnC4F,EAAM5F,EAAMwF,IAAKnU,EAAMG,IAChDoU,EAGAvU,EAAMG,IAKhBuiB,WACCC,UACCxO,IAAK,SAAUnU,GAGd,GAAI4iB,GAAgB5iB,EAAK6iB,iBAAiB,WAE1C,OAAOD,IAAiBA,EAAcxB,UACrC0B,SAAUF,EAAcpmB,MAAO,IAC/ByjB,GAAW3kB,KAAM0E,EAAK4D,WAAcsc,GAAW5kB,KAAM0E,EAAK4D,WAAc5D,EAAK+iB,KAC5E,EACA/jB,OAON4gB,IACCzL,IAAK,SAAUnU,EAAMG,GAGpB,GAAI6iB,GACHC,EAAWxjB,EAAOsM,KAAM/L,EAAMG,EAC/B,OAAO8iB,MAAa,GAA4B,iBAAbA,KAA4BD,EAAWhjB,EAAK6iB,iBAAiB1iB,KAAW6iB,EAASE,aAAc,EACjI/iB,EAAKE,cACLrB,GAEFkiB,IAAK,SAAUlhB,EAAMxD,EAAO2D,GAC3B,GAAIyhB,EAeJ,OAdKplB,MAAU,EAEdiD,EAAO2gB,WAAYpgB,EAAMG,IAIzByhB,EAAWniB,EAAO6gB,QAASngB,IAAUA,EAChCyhB,IAAY5hB,KAEhBA,EAAM4hB,IAAa,GAGpB5hB,EAAKib,aAAc9a,EAAMA,EAAKE,gBAExBF,IAKHwb,KAELkE,IACC1f,MAAM,EACN4T,IAAI,EACJoP,QAAQ,GAKTxD,GAAWlgB,EAAOwhB,SAASmC,QAC1BjP,IAAK,SAAUnU,EAAMG,GACpB,GAAIoU,EAEJ,OADAA,GAAMvU,EAAK6iB,iBAAkB1iB,GACtBoU,IAASsL,GAAc1f,GAAuB,KAAdoU,EAAI/X,MAAe+X,EAAI6M,WAC7D7M,EAAI/X,MACJwC,GAEFkiB,IAAK,SAAUlhB,EAAMxD,EAAO2D,GAE3B,GAAIoU,GAAMvU,EAAK6iB,iBAAkB1iB,EAKjC,OAJMoU,KACLA,EAAMtS,EAASohB,gBAAiBljB,GAChCH,EAAKsjB,iBAAkB/O,IAEfA,EAAI/X,MAAQA,EAAQ,KAM/BiD,EAAOC,MAAO,QAAS,UAAY,SAAUzD,EAAGkE,GAC/CV,EAAOkiB,UAAWxhB,GAASV,EAAOiE,OAAQjE,EAAOkiB,UAAWxhB,IAC3D+gB,IAAK,SAAUlhB,EAAMxD,GACpB,MAAe,KAAVA,GACJwD,EAAKib,aAAc9a,EAAM,QAClB3D,GAFR;MAUHiD,EAAOkiB,UAAUc,iBAChBtO,IAAKwL,GAASxL,IACd+M,IAAK,SAAUlhB,EAAMxD,EAAO2D,GACZ,KAAV3D,IACJA,EAAQ,SAETmjB,GAASuB,IAAKlhB,EAAMxD,EAAO2D,MAOxBV,EAAOuE,QAAQuX,gBACpB9b,EAAOC,MAAO,OAAQ,MAAO,QAAS,UAAY,SAAUzD,EAAGkE,GAC9DV,EAAOkiB,UAAWxhB,GAASV,EAAOiE,OAAQjE,EAAOkiB,UAAWxhB,IAC3DgU,IAAK,SAAUnU,GACd,GAAIuU,GAAMvU,EAAKM,aAAcH,EAAM,EACnC,OAAe,QAARoU,EAAevV,EAAYuV,OAMhC9U,EAAOuE,QAAQgB,QACpBvF,EAAOkiB,UAAU3c,OAChBmP,IAAK,SAAUnU,GAGd,MAAOA,GAAKgF,MAAMkW,QAAQ7a,eAAiBrB,GAE5CkiB,IAAK,SAAUlhB,EAAMxD,GACpB,MAASwD,GAAKgF,MAAMkW,QAAU1e,EAAQ,MAOnCiD,EAAOuE,QAAQ0X,cACpBjc,EAAOijB,UAAUne,SAAW9E,EAAOiE,OAAQjE,EAAOijB,UAAUne,UAC3D4P,IAAK,SAAUnU,GACd,GAAIujB,GAASvjB,EAAKiB,UAUlB,OARKsiB,KACJA,EAAOlC,cAGFkC,EAAOtiB,YACXsiB,EAAOtiB,WAAWogB,eAGb,SAMJ5hB,EAAOuE,QAAQ6X,UACpBpc,EAAO6gB,QAAQzE,QAAU,YAIpBpc,EAAOuE,QAAQyX,SACpBhc,EAAOC,MAAO,QAAS,YAAc,WACpCD,EAAOwhB,SAAU3jB,OAChB6W,IAAK,SAAUnU,GAEd,MAAsC,QAA/BA,EAAKM,aAAa,SAAoB,KAAON,EAAKxD,UAK7DiD,EAAOC,MAAO,QAAS,YAAc,WACpCD,EAAOwhB,SAAU3jB,MAASmC,EAAOiE,OAAQjE,EAAOwhB,SAAU3jB,OACzD4jB,IAAK,SAAUlhB,EAAMxD,GACpB,MAAKiD,GAAO6I,QAAS9L,GACXwD,EAAKsE,QAAU7E,EAAOsC,QAAStC,EAAOO,GAAM2G,MAAOnK,IAAW,EADxE,WAMH,IAAIgnB,IAAa,+BAChBC,GAAiB,yBACjBC,GAAa,0BACbC,GAAY,OACZC,GAAc,+BACdC,GAAc,kCACdC,GAAY,SAAUxgB,GACrB,MAAO7D,GAAO+D,MAAMugB,QAAQC,MAAQ1gB,EAASA,EAAO/H,QAASmoB,GAAY,6BAO3EjkB,GAAO+D,OAENC,IAAK,SAAUzD,EAAMikB,EAAOC,EAASjkB,EAAM2R,GAE1C,GAAIuS,GAAUC,EAAa9gB,EAC1B+gB,EAAGC,EAAKrhB,EAAMshB,EAAYC,EAC1BC,EAAaC,EAAUX,CAGxB,IAAuB,IAAlB/jB,EAAKE,UAAoC,IAAlBF,EAAKE,UAAmB+jB,GAAUC,IAAaC,EAAW1kB,EAAO2D,MAAOpD,IAApG,CAqCA,IAhCKkkB,EAAQA,UACZO,EAAcP,EACdA,EAAUO,EAAYP,QACtBtS,EAAW6S,EAAY7S,UAIlBsS,EAAQ3M,OACb2M,EAAQ3M,KAAO9X,EAAO8X,QAIvBjU,EAAS6gB,EAAS7gB,OACZA,IACL6gB,EAAS7gB,OAASA,MAEnB8gB,EAAcD,EAAS5gB,OACjB6gB,IACLD,EAAS5gB,OAAS6gB,EAAc,SAAU3jB,GAGzC,MAAyB,mBAAXhB,IAA4BgB,GAAKhB,EAAO+D,MAAMmhB,YAAclkB,EAAEwC,KAE3EjE,EADAS,EAAO+D,MAAMohB,SAAS3nB,MAAOmnB,EAAYpkB,KAAM8U,YAIjDsP,EAAYpkB,KAAOA,GAKpBikB,EAAQxkB,EAAO0E,KAAM2f,GAAUG,IAAStkB,MAAO,KACzC0kB,EAAI,EAAGA,EAAIJ,EAAM7nB,OAAQioB,IAE9BC,EAAMb,GAAepd,KAAM4d,EAAMI,QACjCphB,EAAOqhB,EAAI,GACXC,GAAeD,EAAI,IAAM,IAAK3kB,MAAO,KAAMqV,OAG3C+O,EAAUtkB,EAAO+D,MAAMugB,QAAS9gB,OAGhCA,GAAS2O,EAAWmS,EAAQc,aAAed,EAAQe,WAAc7hB,EAGjE8gB,EAAUtkB,EAAO+D,MAAMugB,QAAS9gB,OAGhCuhB,EAAY/kB,EAAOiE,QAClBT,KAAMA,EACN8hB,SAAUT,EAAI,GACdrkB,KAAMA,EACNikB,QAASA,EACT3M,KAAM2M,EAAQ3M,KACd3F,SAAUA,EACVoT,aAAcpT,GAAYnS,EAAOwlB,KAAK3R,MAAM0R,aAAa1pB,KAAMsW,GAC/DsT,UAAWX,EAAWrnB,KAAK,MACzBunB,GAGHC,EAAWphB,EAAQL,GACbyhB,IACLA,EAAWphB,EAAQL,MACnByhB,EAASS,cAAgB,EAGnBpB,EAAQqB,OAASrB,EAAQqB,MAAMzoB,KAAMqD,EAAMC,EAAMskB,EAAYH,MAAkB,IAE/EpkB,EAAK+S,iBACT/S,EAAK+S,iBAAkB9P,EAAMmhB,GAAa,GAE/BpkB,EAAK+X,aAChB/X,EAAK+X,YAAa,KAAO9U,EAAMmhB,KAK7BL,EAAQtgB,MACZsgB,EAAQtgB,IAAI9G,KAAMqD,EAAMwkB,GAElBA,EAAUN,QAAQ3M,OACvBiN,EAAUN,QAAQ3M,KAAO2M,EAAQ3M,OAK9B3F,EACJ8S,EAASzZ,OAAQyZ,EAASS,gBAAiB,EAAGX,GAE9CE,EAASvnB,KAAMqnB,GAIhB/kB,EAAO+D,MAAM6hB,OAAQpiB,IAAS,CAI/BjD,GAAO,OAGRqlB,UAGA7d,OAAQ,SAAUxH,EAAMikB,EAAOC,EAAStS,EAAU0T,GAEjD,GAAIjB,GAAGC,EAAKrhB,EAAM8hB,EAAUR,EAAYgB,EACvCtmB,EAAGqE,EAAQygB,EAASyB,EAAWhB,EAC/BL,EAAW1kB,EAAOuD,QAAShD,IAAUP,EAAO2D,MAAOpD,EAEpD,IAAMmkB,IAAc7gB,EAAS6gB,EAAS7gB,QAAtC,CAMA,IADA2gB,EAAQxkB,EAAO0E,KAAM2f,GAAWG,GAAS,KAAOtkB,MAAM,KAChD0kB,EAAI,EAAGA,EAAIJ,EAAM7nB,OAAQioB,IAM9B,GALAC,EAAMb,GAAepd,KAAM4d,EAAMI,QACjCphB,EAAO8hB,EAAWT,EAAI,GACtBC,EAAaD,EAAI,GAGXrhB,EAAN,CAcA,IAPA8gB,EAAUtkB,EAAO+D,MAAMugB,QAAS9gB,OAChCA,GAAS2O,EAAUmS,EAAQc,aAAed,EAAQe,WAAc7hB,EAChEuiB,EAAYliB,EAAQL,OACpBsiB,EAAYC,EAAUppB,OACtBmoB,EAAaA,EAAa,GAAIkB,QAAO,UAAYlB,EAAW5kB,MAAM,KAAKqV,OAAO9X,KAAK,iBAAmB,WAAa,KAG7G+B,EAAI,EAAGA,EAAIumB,EAAUppB,OAAQ6C,IAClCulB,EAAYgB,EAAWvmB,IAEhBqmB,GAAeP,IAAaP,EAAUO,UACxCb,GAAWA,EAAQ3M,OAASiN,EAAUjN,MACtCgN,IAAcA,EAAWjpB,KAAMkpB,EAAUU,YACzCtT,GAAYA,IAAa4S,EAAU5S,WAAyB,OAAbA,IAAqB4S,EAAU5S,YAClF4T,EAAUva,OAAQhM,IAAK,GAElBulB,EAAU5S,UACd4T,EAAUL,gBAENpB,EAAQvc,QACZuc,EAAQvc,OAAO7K,KAAMqD,EAAMwkB,GAOJ,KAArBgB,EAAUppB,QAAgBmpB,IAAcC,EAAUppB,SAChD2nB,EAAQ2B,UAAY3B,EAAQ2B,SAAS/oB,KAAMqD,EAAMukB,EAAYJ,EAAS5gB,WAAa,GACxF9D,EAAOkmB,YAAa3lB,EAAMiD,EAAMkhB,EAAS5gB,cAGnCD,GAAQL,QAtCf,KAAMA,IAAQK,GACb7D,EAAO+D,MAAMgE,OAAQxH,EAAMiD,EAAOghB,EAAOI,GAAKH,EAAStS,GAAU,EA0C/DnS,GAAOmB,cAAe0C,WACnB6gB,GAAS5gB,OAIhB9D,EAAOyQ,WAAYlQ,EAAM,UAAU,MAMrC4lB,aACCC,SAAW,EACXC,SAAW,EACXC,YAAc,GAGfrQ,QAAS,SAAUlS,EAAOvD,EAAMD,EAAMgmB,GAErC,IAAKhmB,GAA2B,IAAlBA,EAAKE,UAAoC,IAAlBF,EAAKE,SAA1C,CAKA,GAAI0d,GAAOqI,EAAWhqB,EAAGkF,EAAK+kB,EAAKC,EAAQpC,EAASxgB,EAAQ6iB,EAAWC,EACtEpjB,EAAOO,EAAMP,MAAQO,EACrB+gB,IAGD,KAAKV,GAAYvoB,KAAM2H,EAAOxD,EAAO+D,MAAMmhB,aAItC1hB,EAAKuO,QAAS,MAAS,IAE3BvO,EAAOA,EAAKpH,MAAM,EAAG,IACrBoqB,GAAY,GAGRhjB,EAAKuO,QAAS,MAAS,IAE3B+S,EAAathB,EAAKtD,MAAM,KACxBsD,EAAOshB,EAAWla,QAClBka,EAAWvP,QAGLhV,IAAQP,EAAO+D,MAAMoiB,YAAa3iB,IAAYxD,EAAO+D,MAAM6hB,OAAQpiB,IAsB1E,GAhBAO,EAAyB,gBAAVA,GAEdA,EAAO/D,EAAOkF,SAAYnB,EAE1B,GAAI/D,GAAO6mB,MAAOrjB,EAAMO,GAExB,GAAI/D,GAAO6mB,MAAOrjB,GAEnBO,EAAMP,KAAOA,EACbO,EAAM+iB,WAAY,EAClB/iB,EAAMyiB,UAAYA,EAClBziB,EAAM0hB,UAAYX,EAAWrnB,KAAM,KACnCsG,EAAMgjB,aAAehjB,EAAM0hB,UAAW,GAAIO,QAAO,UAAYlB,EAAWrnB,KAAK,iBAAmB,WAAa,KAC7GipB,EAASljB,EAAKuO,QAAS,KAAQ,EAAI,KAAOvO,EAAO,GAG3CjD,GAwBN,GAXAwD,EAAM6I,OAASrN,EACTwE,EAAMiG,SACXjG,EAAMiG,OAASzJ,GAIhBC,EAAe,MAARA,EAAeR,EAAOuU,UAAW/T,MACxCA,EAAKsJ,QAAS/F,GAGdugB,EAAUtkB,EAAO+D,MAAMugB,QAAS9gB,QAC3B8gB,EAAQrO,SAAWqO,EAAQrO,QAAQzY,MAAO+C,EAAMC,MAAW,EAAhE,CAOA,GADAmmB,IAAepmB,EAAM+jB,EAAQe,UAAY7hB,KACnC+iB,IAAiBjC,EAAQ0C,WAAahnB,EAAOiR,SAAU1Q,GAAS,CAIrE,IAFAqmB,EAAatC,EAAQc,cAAgB5hB,EACrC9B,EAAM0iB,GAAYvoB,KAAM+qB,EAAapjB,GAASjD,EAAOA,EAAKiB,WACpDilB,EAAMlmB,EAAMmB,EAAKA,EAAMA,EAAIF,WAChCmlB,EAAUjpB,MAAOgE,EAAKklB,IACtBH,EAAM/kB,CAIF+kB,MAASlmB,EAAK4C,eAAiBX,IACnCmkB,EAAUjpB,MAAO+oB,EAAIvV,aAAeuV,EAAItV,cAAgBxR,EAAQinB,IAKlE,IAAMpqB,EAAI,EAAGA,EAAImqB,EAAUhqB,SAAWoH,EAAMkjB,uBAAwBzqB,IAEnEkF,EAAMilB,EAAUnqB,GAAG,GACnBuH,EAAMP,KAAOmjB,EAAUnqB,GAAG,GAE1BsH,GAAW9D,EAAO2D,MAAOjC,EAAK,eAAoBqC,EAAMP,OAAUxD,EAAO2D,MAAOjC,EAAK,UAChFoC,GACJA,EAAOtG,MAAOkE,EAAKlB,GAGpBsD,EAAS4iB,GAAUhlB,EAAKglB,GACnB5iB,GAAU9D,EAAO2e,WAAYjd,IAASoC,EAAOtG,OAASsG,EAAOtG,MAAOkE,EAAKlB,MAAW,GACxFuD,EAAMmjB,gBAoCR,OAjCAnjB,GAAMP,KAAOA,EAGP+iB,GAAiBxiB,EAAMojB,sBAErB7C,EAAQ8C,UAAY9C,EAAQ8C,SAAS5pB,MAAO+C,EAAK4C,cAAe3C,MAAW,GACtE,UAATgD,GAAoBxD,EAAOmE,SAAU5D,EAAM,OAAUP,EAAO2e,WAAYpe,IAMrEmmB,GAAUnmB,EAAMiD,KAAqB,UAATA,GAA6B,SAATA,GAAiD,IAA7BO,EAAMiG,OAAO1C,eAAuBtH,EAAOiR,SAAU1Q,KAG7HkmB,EAAMlmB,EAAMmmB,GAEPD,IACJlmB,EAAMmmB,GAAW,MAIlB1mB,EAAO+D,MAAMmhB,UAAY1hB,EACzBjD,EAAMiD,KACNxD,EAAO+D,MAAMmhB,UAAY3lB,EAEpBknB,IACJlmB,EAAMmmB,GAAWD,IAMd1iB,EAAM6I,YA/Fb,CAGCuR,EAAQne,EAAOme,KACf,KAAM3hB,IAAK2hB,GACLA,EAAO3hB,GAAIqH,QAAUsa,EAAO3hB,GAAIqH,OAAQL,IAC5CxD,EAAO+D,MAAMkS,QAASlS,EAAOvD,EAAM2d,EAAO3hB,GAAIsH,OAAOvD,MAAM,MA4F/D4kB,SAAU,SAAUphB,GAGnBA,EAAQ/D,EAAO+D,MAAMsjB,IAAKtjB,GAASpE,EAAOoE,MAE1C,IAAIvH,GAAGgD,EAAGkC,EAAKoT,EAAKwS,EAAUC,EAAS7gB,EAASqe,EAAWyC,EAC1DvC,GAAcjlB,EAAO2D,MAAO9F,KAAM,eAAoBkG,EAAMP,UAC5DkiB,EAAgBT,EAASS,cACzBzQ,EAAOpD,EAAW3U,KAAMmY,WACxBoS,GAAW1jB,EAAMyiB,YAAcziB,EAAM0hB,UACrCnB,EAAUtkB,EAAO+D,MAAMugB,QAASvgB,EAAMP,UACtCkkB,IAOD,IAJAzS,EAAK,GAAKlR,EACVA,EAAM4jB,eAAiB9pB,MAGlBymB,EAAQsD,aAAetD,EAAQsD,YAAY1qB,KAAMW,KAAMkG,MAAY,EAAxE,CAMA,GAAK2hB,KAAmB3hB,EAAM4f,QAAyB,UAAf5f,EAAMP,MAE7C,IAAM9B,EAAMqC,EAAMiG,OAAQtI,GAAO7D,KAAM6D,EAAMA,EAAIF,YAAc3D,KAG9D,GAAK6D,EAAI+X,YAAa,GAAuB,UAAf1V,EAAMP,KAAmB,CAGtD,IAFA8jB,KACA5gB,KACMlK,EAAI,EAAOkpB,EAAJlpB,EAAmBA,IAC/BuoB,EAAYE,EAAUzoB,GACtBgrB,EAAMzC,EAAU5S,SAEXmV,EAAUE,KAAUjoB,IACxB+nB,EAAUE,GAAQzC,EAAUQ,aAC3BvlB,EAAQwnB,EAAK3pB,MAAOwI,MAAO3E,IAAS,EACpC1B,EAAOgU,KAAMwT,EAAK3pB,KAAM,MAAQ6D,IAAQ/E,QAErC2qB,EAAUE,IACd9gB,EAAQhJ,KAAMqnB,EAGXre,GAAQ/J,QACZ+qB,EAAahqB,MAAO6C,KAAMmB,EAAKgF,QAASA,IAY5C,IALKue,EAAStoB,OAAS+oB,GACtBgC,EAAahqB,MAAO6C,KAAM1C,KAAM6I,QAASue,EAAS7oB,MAAOspB,KAIpDlpB,EAAI,EAAGA,EAAIkrB,EAAa/qB,SAAWoH,EAAMkjB,uBAAwBzqB,IAItE,IAHA+qB,EAAUG,EAAclrB,GACxBuH,EAAM8jB,cAAgBN,EAAQhnB,KAExBf,EAAI,EAAGA,EAAI+nB,EAAQ7gB,QAAQ/J,SAAWoH,EAAM+jB,gCAAiCtoB,IAClFulB,EAAYwC,EAAQ7gB,QAASlH,IAIxBioB,IAAa1jB,EAAM0hB,YAAcV,EAAUU,WAAc1hB,EAAMgjB,cAAgBhjB,EAAMgjB,aAAalrB,KAAMkpB,EAAUU,cAEtH1hB,EAAMvD,KAAOukB,EAAUvkB,KACvBuD,EAAMghB,UAAYA,EAElBjQ,IAAS9U,EAAO+D,MAAMugB,QAASS,EAAUO,eAAkBxhB,QAAUihB,EAAUN,SAC5EjnB,MAAO+pB,EAAQhnB,KAAM0U,GAEnBH,IAAQvV,IACZwE,EAAM6I,OAASkI,EACVA,KAAQ,IACZ/Q,EAAMmjB,iBACNnjB,EAAMgkB,oBAYX,OAJKzD,GAAQ0D,cACZ1D,EAAQ0D,aAAa9qB,KAAMW,KAAMkG,GAG3BA,EAAM6I,SAKdP,MAAO,mKAAmKnM,MAAM,KAEhL+nB,YAEAC,UACC7b,MAAO,4BAA4BnM,MAAM,KACzCmC,OAAQ,SAAU0B,EAAOokB,GAOxB,MAJoB,OAAfpkB,EAAM8M,QACV9M,EAAM8M,MAA6B,MAArBsX,EAASC,SAAmBD,EAASC,SAAWD,EAASE,SAGjEtkB,IAITukB,YACCjc,MAAO,mGAAmGnM,MAAM,KAChHmC,OAAQ,SAAU0B,EAAOokB,GACxB,GAAII,GAAUzU,EAAKhM,EAClB6b,EAASwE,EAASxE,OAClB6E,EAAcL,EAASK,WAuBxB,OApBoB,OAAfzkB,EAAM0kB,OAAqC,MAApBN,EAASO,UACpCH,EAAWxkB,EAAMiG,OAAO7G,eAAiBX,EACzCsR,EAAMyU,EAASpR,gBACfrP,EAAOygB,EAASzgB,KAEhB/D,EAAM0kB,MAAQN,EAASO,SAAY5U,GAAOA,EAAI6U,YAAc7gB,GAAQA,EAAK6gB,YAAc,IAAQ7U,GAAOA,EAAI8U,YAAc9gB,GAAQA,EAAK8gB,YAAc,GACnJ7kB,EAAM8kB,MAAQV,EAASW,SAAYhV,GAAOA,EAAIiV,WAAcjhB,GAAQA,EAAKihB,WAAc,IAAQjV,GAAOA,EAAIkV,WAAclhB,GAAQA,EAAKkhB,WAAc,KAI9IjlB,EAAMklB,eAAiBT,IAC5BzkB,EAAMklB,cAAgBT,IAAgBzkB,EAAMiG,OAASme,EAASe,UAAYV,GAKrEzkB,EAAM8M,OAAS8S,IAAWpkB,IAC/BwE,EAAM8M,MAAmB,EAAT8S,EAAa,EAAe,EAATA,EAAa,EAAe,EAATA,EAAa,EAAI,GAGjE5f,IAITsjB,IAAK,SAAUtjB,GACd,GAAKA,EAAO/D,EAAOkF,SAClB,MAAOnB,EAIR,IAAIvH,GAAG8P,EACN6c,EAAgBplB,EAChBqlB,EAAUppB,EAAO+D,MAAMkkB,SAAUlkB,EAAMP,UACvCgS,EAAO4T,EAAQ/c,MAAQxO,KAAKwO,MAAMI,OAAQ2c,EAAQ/c,OAAUxO,KAAKwO,KAIlE,KAFAtI,EAAQ/D,EAAO6mB,MAAOsC,GAEhB3sB,EAAIgZ,EAAK7Y,OAAQH,GACtB8P,EAAOkJ,IAAQhZ,GACfuH,EAAOuI,GAAS6c,EAAe7c,EAgBhC,OAZMvI,GAAMiG,SACXjG,EAAMiG,OAASmf,EAAcE,YAAc7mB,GAIb,IAA1BuB,EAAMiG,OAAOvJ,WACjBsD,EAAMiG,OAASjG,EAAMiG,OAAOxI,YAI7BuC,EAAMulB,UAAYvlB,EAAMulB,QAEjBF,EAAQ/mB,OAAQ+mB,EAAQ/mB,OAAQ0B,EAAOolB,GAAkBplB,GAGjEugB,SACCiF,MAECvC,UAAU,GAGXwC,OACCpE,aAAc,WAEfqE,MACCrE,aAAc,YAGfsE,cACC/D,MAAO,SAAUnlB,EAAMskB,EAAYH,GAE7B3kB,EAAOiR,SAAUpT,QACrBA,KAAK8rB,eAAiBhF,IAIxBsB,SAAU,SAAUnB,EAAYH,GAC1B9mB,KAAK8rB,iBAAmBhF,IAC5B9mB,KAAK8rB,eAAiB,SAM1BC,SAAU,SAAUpmB,EAAMjD,EAAMwD,EAAO8lB,GAItC,GAAI7oB,GAAIhB,EAAOiE,OACd,GAAIjE,GAAO6mB,MACX9iB,GACEP,KAAMA,EACPsmB,aAAa,EACbX,kBAGGU,GACJ7pB,EAAO+D,MAAMkS,QAASjV,EAAG,KAAMT,GAE/BP,EAAO+D,MAAMohB,SAASjoB,KAAMqD,EAAMS,GAE9BA,EAAEmmB,sBACNpjB,EAAMmjB,mBAOTlnB,EAAO+D,MAAMD,OAAS9D,EAAO+D,MAAMohB,SAEnCnlB,EAAOkmB,YAAc1jB,EAAS+Q,oBAC7B,SAAUhT,EAAMiD,EAAMM,GAChBvD,EAAKgT,qBACThT,EAAKgT,oBAAqB/P,EAAMM,GAAQ,IAG1C,SAAUvD,EAAMiD,EAAMM,GACrB,GAAIpD,GAAO,KAAO8C,CAEbjD,GAAKmT,cAIoB,mBAAjBnT,GAAMG,KACjBH,EAAMG,GAAS,MAGhBH,EAAKmT,YAAahT,EAAMoD,KAI3B9D,EAAO6mB,MAAQ,SAAUxjB,EAAKgJ,GAE7B,MAAOxO,gBAAgBmC,GAAO6mB,OAKzBxjB,GAAOA,EAAIG,MACf3F,KAAKsrB,cAAgB9lB,EACrBxF,KAAK2F,KAAOH,EAAIG,KAIhB3F,KAAKspB,mBAAuB9jB,EAAI0mB,kBAAoB1mB,EAAI2mB,eAAgB,GACvE3mB,EAAI4mB,mBAAqB5mB,EAAI4mB,oBAAwB5oB,EAAaD,GAInEvD,KAAK2F,KAAOH,EAIRgJ,GACJrM,EAAOiE,OAAQpG,KAAMwO,GAItBxO,KAAKqsB,UAAY7mB,GAAOA,EAAI6mB,WAAalqB,EAAOkM,WAGhDrO,KAAMmC,EAAOkF,UAAY,IA3BjB,GAAIlF,GAAO6mB,MAAOxjB,EAAKgJ,IAuChCrM,EAAO6mB,MAAMtpB,WACZ2pB,eAAgB,WACfrpB,KAAKspB,mBAAqB9lB,CAE1B,IAAIL,GAAInD,KAAKsrB,aACPnoB,KAKDA,EAAEkmB,eACNlmB,EAAEkmB,iBAIFlmB,EAAEgpB,aAAc,IAGlBjC,gBAAiB,WAChBlqB,KAAKopB,qBAAuB5lB,CAE5B,IAAIL,GAAInD,KAAKsrB,aACPnoB,KAIDA,EAAE+mB,iBACN/mB,EAAE+mB,kBAGH/mB,EAAEmpB,cAAe,IAElBC,yBAA0B,WACzBvsB,KAAKiqB,8BAAgCzmB,EACrCxD,KAAKkqB,mBAENZ,mBAAoB/lB,EACpB6lB,qBAAsB7lB,EACtB0mB,8BAA+B1mB,GAIhCpB,EAAOC,MACNoqB,WAAY,YACZC,WAAY,YACV,SAAU5a,EAAM2X,GAClBrnB,EAAO+D,MAAMugB,QAAS5U,IACrB0V,aAAciC,EACdhC,SAAUgC,EAEVvjB,OAAQ,SAAUC,GACjB,CAAA,GAAI+Q,GACH9K,EAASnM,KACT0sB,EAAUxmB,EAAMklB,cAChBlE,EAAYhhB,EAAMghB,SACPA,GAAU5S,SAStB,QALMoY,GAAYA,IAAYvgB,IAAWhK,EAAOgG,SAAUgE,EAAQugB,MACjExmB,EAAMP,KAAOuhB,EAAUO,SACvBxQ,EAAMiQ,EAAUN,QAAQjnB,MAAOK,KAAMwX,WACrCtR,EAAMP,KAAO6jB,GAEPvS,MAMJ9U,EAAOuE,QAAQiY,gBAEpBxc,EAAO+D,MAAMugB,QAAQhH,QACpBqI,MAAO,WAEN,MAAK3lB,GAAOmE,SAAUtG,KAAM,SACpB,MAIRmC,GAAO+D,MAAMC,IAAKnG,KAAM,iCAAkC,SAAUmD,GAEnE,GAAIT,GAAOS,EAAEgJ,OACZwgB,EAAOxqB,EAAOmE,SAAU5D,EAAM,UAAaP,EAAOmE,SAAU5D,EAAM,UAAaA,EAAKiqB,KAAOjrB,CACvFirB,KAASxqB,EAAO2D,MAAO6mB,EAAM,sBACjCxqB,EAAO+D,MAAMC,IAAKwmB,EAAM,iBAAkB,SAAUzmB,GACnDA,EAAM0mB,gBAAiB,IAExBzqB,EAAO2D,MAAO6mB,EAAM,oBAAoB,OAM3CxC,aAAc,SAAUjkB,GAElBA,EAAM0mB,uBACH1mB,GAAM0mB,eACR5sB,KAAK2D,aAAeuC,EAAM+iB,WAC9B9mB,EAAO+D,MAAM6lB,SAAU,SAAU/rB,KAAK2D,WAAYuC,GAAO,KAK5DkiB,SAAU,WAET,MAAKjmB,GAAOmE,SAAUtG,KAAM,SACpB,MAIRmC,GAAO+D,MAAMgE,OAAQlK,KAAM,eAMxBmC,EAAOuE,QAAQkY,gBAEpBzc,EAAO+D,MAAMugB,QAAQ/G,QAEpBoI,MAAO,WAEN,MAAK5B,IAAWloB,KAAMgC,KAAKsG,YAIP,aAAdtG,KAAK2F,MAAqC,UAAd3F,KAAK2F,QACrCxD,EAAO+D,MAAMC,IAAKnG,KAAM,yBAA0B,SAAUkG,GACjB,YAArCA,EAAMolB,cAAcuB,eACxB7sB,KAAK8sB,eAAgB,KAGvB3qB,EAAO+D,MAAMC,IAAKnG,KAAM,gBAAiB,SAAUkG,GAC7ClG,KAAK8sB,gBAAkB5mB,EAAM+iB,YACjCjpB,KAAK8sB,eAAgB,GAGtB3qB,EAAO+D,MAAM6lB,SAAU,SAAU/rB,KAAMkG,GAAO,OAGzC,OAGR/D,GAAO+D,MAAMC,IAAKnG,KAAM,yBAA0B,SAAUmD,GAC3D,GAAIT,GAAOS,EAAEgJ,MAER+Z,IAAWloB,KAAM0E,EAAK4D,YAAenE,EAAO2D,MAAOpD,EAAM,sBAC7DP,EAAO+D,MAAMC,IAAKzD,EAAM,iBAAkB,SAAUwD,IAC9ClG,KAAK2D,YAAeuC,EAAM+lB,aAAgB/lB,EAAM+iB,WACpD9mB,EAAO+D,MAAM6lB,SAAU,SAAU/rB,KAAK2D,WAAYuC,GAAO,KAG3D/D,EAAO2D,MAAOpD,EAAM,oBAAoB,OAK3CuD,OAAQ,SAAUC,GACjB,GAAIxD,GAAOwD,EAAMiG,MAGjB,OAAKnM,QAAS0C,GAAQwD,EAAM+lB,aAAe/lB,EAAM+iB,WAA4B,UAAdvmB,EAAKiD,MAAkC,aAAdjD,EAAKiD,KACrFO,EAAMghB,UAAUN,QAAQjnB,MAAOK,KAAMwX,WAD7C,QAKD4Q,SAAU,WAGT,MAFAjmB,GAAO+D,MAAMgE,OAAQlK,KAAM,aAEnBkmB,GAAWloB,KAAMgC,KAAKsG,aAM3BnE,EAAOuE,QAAQmY,gBACpB1c,EAAOC,MAAOupB,MAAO,UAAWC,KAAM,YAAc,SAAU/Z,EAAM2X,GAGnE,GAAIuD,GAAW,EACdnG,EAAU,SAAU1gB,GACnB/D,EAAO+D,MAAM6lB,SAAUvC,EAAKtjB,EAAMiG,OAAQhK,EAAO+D,MAAMsjB,IAAKtjB,IAAS,GAGvE/D,GAAO+D,MAAMugB,QAAS+C,IACrB1B,MAAO,WACc,IAAfiF,KACJpoB,EAAS8Q,iBAAkB5D,EAAM+U,GAAS,IAG5CwB,SAAU,WACW,MAAb2E,GACNpoB,EAAS+Q,oBAAqB7D,EAAM+U,GAAS,OAOlDzkB,EAAOqS,GAAGpO,QAET4mB,GAAI,SAAUrG,EAAOrS,EAAU3R,EAAM6R,EAAiBwP,GACrD,GAAIiJ,GAAQtnB,CAGZ,IAAsB,gBAAVghB,GAAqB,CAEP,gBAAbrS,KAEX3R,EAAOA,GAAQ2R,EACfA,EAAW5S,EAEZ,KAAMiE,IAAQghB,GACb3mB,KAAKgtB,GAAIrnB,EAAM2O,EAAU3R,EAAMgkB,EAAOhhB,GAAQqe,EAE/C,OAAOhkB,MAmBR,GAhBa,MAAR2C,GAAsB,MAAN6R,GAEpBA,EAAKF,EACL3R,EAAO2R,EAAW5S,GACD,MAAN8S,IACc,gBAAbF,IAEXE,EAAK7R,EACLA,EAAOjB,IAGP8S,EAAK7R,EACLA,EAAO2R,EACPA,EAAW5S,IAGR8S,KAAO,EACXA,EAAKjR,MACC,KAAMiR,EACZ,MAAOxU,KAaR,OAVa,KAARgkB,IACJiJ,EAASzY,EACTA,EAAK,SAAUtO,GAGd,MADA/D,KAASkW,IAAKnS,GACP+mB,EAAOttB,MAAOK,KAAMwX,YAG5BhD,EAAGyF,KAAOgT,EAAOhT,OAAUgT,EAAOhT,KAAO9X,EAAO8X,SAE1Cja,KAAKoC,KAAM,WACjBD,EAAO+D,MAAMC,IAAKnG,KAAM2mB,EAAOnS,EAAI7R,EAAM2R,MAG3C0P,IAAK,SAAU2C,EAAOrS,EAAU3R,EAAM6R,GACrC,MAAOxU,MAAKgtB,GAAIrG,EAAOrS,EAAU3R,EAAM6R,EAAI,IAE5C6D,IAAK,SAAUsO,EAAOrS,EAAUE,GAC/B,GAAI0S,GAAWvhB,CACf,IAAKghB,GAASA,EAAM0C,gBAAkB1C,EAAMO,UAQ3C,MANAA,GAAYP,EAAMO,UAClB/kB,EAAQwkB,EAAMmD,gBAAiBzR,IAC9B6O,EAAUU,UAAYV,EAAUO,SAAW,IAAMP,EAAUU,UAAYV,EAAUO,SACjFP,EAAU5S,SACV4S,EAAUN,SAEJ5mB,IAER,IAAsB,gBAAV2mB,GAAqB,CAEhC,IAAMhhB,IAAQghB,GACb3mB,KAAKqY,IAAK1S,EAAM2O,EAAUqS,EAAOhhB,GAElC,OAAO3F,MAUR,OARKsU,KAAa,GAA6B,kBAAbA,MAEjCE,EAAKF,EACLA,EAAW5S,GAEP8S,KAAO,IACXA,EAAKjR,GAECvD,KAAKoC,KAAK,WAChBD,EAAO+D,MAAMgE,OAAQlK,KAAM2mB,EAAOnS,EAAIF,MAIxC4Y,KAAM,SAAUvG,EAAOhkB,EAAM6R,GAC5B,MAAOxU,MAAKgtB,GAAIrG,EAAO,KAAMhkB,EAAM6R,IAEpC2Y,OAAQ,SAAUxG,EAAOnS,GACxB,MAAOxU,MAAKqY,IAAKsO,EAAO,KAAMnS,IAG/B4Y,KAAM,SAAUzG,EAAOhkB,EAAM6R,GAE5B,MADArS,GAAQnC,KAAKuU,SAAUyY,GAAIrG,EAAO3mB,KAAKsU,SAAU3R,EAAM6R,GAChDxU,MAERqtB,IAAK,SAAU1G,EAAOnS,GAErB,MADArS,GAAQnC,KAAKuU,SAAU8D,IAAKsO,EAAO3mB,KAAKsU,UAAY,KAAME,GACnDxU,MAGRstB,SAAU,SAAUhZ,EAAUqS,EAAOhkB,EAAM6R,GAC1C,MAAOxU,MAAKgtB,GAAIrG,EAAOrS,EAAU3R,EAAM6R,IAExC+Y,WAAY,SAAUjZ,EAAUqS,EAAOnS,GAEtC,MAA4B,KAArBgD,UAAU1Y,OAAekB,KAAKqY,IAAK/D,EAAU,MAAStU,KAAKqY,IAAKsO,EAAOrS,GAAY,KAAME,IAGjG4D,QAAS,SAAUzS,EAAMhD,GACxB,MAAO3C,MAAKoC,KAAK,WAChBD,EAAO+D,MAAMkS,QAASzS,EAAMhD,EAAM3C,SAGpCwhB,eAAgB,SAAU7b,EAAMhD,GAC/B,MAAK3C,MAAK,GACFmC,EAAO+D,MAAMkS,QAASzS,EAAMhD,EAAM3C,KAAK,IAAI,GADnD,QAKD2R,OAAQ,SAAU6C,GAEjB,GAAI4C,GAAOI,UACVyC,EAAOzF,EAAGyF,MAAQ9X,EAAO8X,OACzBtb,EAAI,EACJ6uB,EAAU,SAAUtnB,GAEnB,GAAIunB,IAAetrB,EAAO2D,MAAO9F,KAAM,aAAewU,EAAGyF,OAAU,GAAMtb,CAOzE,OANAwD,GAAO2D,MAAO9F,KAAM,aAAewU,EAAGyF,KAAMwT,EAAa,GAGzDvnB,EAAMmjB,iBAGCjS,EAAMqW,GAAa9tB,MAAOK,KAAMwX,aAAe,EAKxD,KADAgW,EAAQvT,KAAOA,EACPtb,EAAIyY,EAAKtY,QAChBsY,EAAMzY,KAAMsb,KAAOA,CAGpB,OAAOja,MAAK0tB,MAAOF,IAGpB9G,MAAO,SAAUiH,EAAQC,GACxB,MAAO5tB,MAAKwsB,WAAYmB,GAASlB,WAAYmB,GAASD,MAIxDxrB,EAAOC,KAAM,0MAEqDC,MAAM,KAAM,SAAU1D,EAAGkE,GAG1FV,EAAOqS,GAAI3R,GAAS,SAAUF,EAAM6R,GAMnC,MALW,OAANA,IACJA,EAAK7R,EACLA,EAAO,MAGD6U,UAAU1Y,OAAS,EACzBkB,KAAKgtB,GAAInqB,EAAM,KAAMF,EAAM6R,GAC3BxU,KAAKoY,QAASvV,IAGXwjB,GAAUroB,KAAM6E,KACpBV,EAAO+D,MAAMkkB,SAAUvnB,GAASV,EAAO+D,MAAMmkB,UAGzC/D,GAAYtoB,KAAM6E,KACtBV,EAAO+D,MAAMkkB,SAAUvnB,GAASV,EAAO+D,MAAMukB;;;;;;AAS/C,SAAW3oB,EAAQJ,GAmNnB,QAASmsB,GAAQvZ,EAAUC,EAASqF,EAASkU,GAC5ClU,EAAUA,MACVrF,EAAUA,GAAW5P,CACrB,IAAIqR,GAAOtT,EAAMuW,EAAK8U,EACrBnrB,EAAW2R,EAAQ3R,QAEpB,KAAM0R,GAAgC,gBAAbA,GACxB,MAAOsF,EAGR,IAAkB,IAAbhX,GAA+B,IAAbA,EACtB,QAKD,IAFAqW,EAAM+U,EAAOzZ,IAEP0E,IAAQ6U,IACP9X,EAAQnB,GAAW9L,KAAMuL,IAE9B,GAAMyZ,EAAI/X,EAAM,IACf,GAAkB,IAAbpT,EAAiB,CAIrB,GAHAF,EAAO6R,EAAQiC,eAAgBuX,IAG1BrrB,IAAQA,EAAKiB,WAQjB,MAAOiW,EALP,IAAKlX,EAAK+T,KAAOsX,EAEhB,MADAnU,GAAQ/Z,KAAM6C,GACPkX,MAOT,IAAKrF,EAAQjP,gBAAkB5C,EAAO6R,EAAQjP,cAAckR,eAAgBuX,KAC3E5lB,EAAUoM,EAAS7R,IAAUA,EAAK+T,KAAOsX,EAEzC,MADAnU,GAAQ/Z,KAAM6C,GACPkX,MAKH,CAAA,GAAK5D,EAAM,GAEjB,MADAnW,GAAKF,MAAOia,EAASrb,EAAMc,KAAKkV,EAAQnP,qBAAsBkP,GAAY,IACnEsF,CAGD,KAAMmU,EAAI/X,EAAM,KAAOiY,IAAyB1Z,EAAQ2Z,uBAE9D,MADAruB,GAAKF,MAAOia,EAASrb,EAAMc,KAAKkV,EAAQ2Z,uBAAwBH,GAAK,IAC9DnU,EAMV,MAAOwD,GAAQ9I,EAASrW,QAAS2W,EAAO,MAAQL,EAASqF,EAASkU,EAAM7U,GAYzE,QAASkV,GAAmBxoB,GAC3B,MAAO,UAAUjD,GAChB,GAAIG,GAAOH,EAAK4D,SAASvD,aACzB,OAAgB,UAATF,GAAoBH,EAAKiD,OAASA,GAK3C,QAASyoB,GAAoBzoB,GAC5B,MAAO,UAAUjD,GAChB,GAAIG,GAAOH,EAAK4D,SAASvD,aACzB,QAAiB,UAATF,GAA6B,WAATA,IAAsBH,EAAKiD,OAASA,GAKlE,QAAS0oB,GAAwB7Z,GAChC,MAAO8Z,GAAa,SAAUC,GAE7B,MADAA,IAAYA,EACLD,EAAa,SAAUR,EAAMjlB,GAMnC,IALA,GAAIlH,GACH6sB,EAAeha,KAAQsZ,EAAKhvB,OAAQyvB,GACpC5vB,EAAI6vB,EAAa1vB,OAGVH,KACFmvB,EAAOnsB,EAAI6sB,EAAa7vB,MAC5BmvB,EAAKnsB,KAAOkH,EAAQlH,GAAKmsB,EAAKnsB,SAwkBnC,QAAS8sB,GAAcvwB,EAAGwwB,EAAGzX,GAC5B,GAAK/Y,IAAMwwB,EACV,MAAOzX,EAKR,KAFA,GAAIpT,GAAM3F,EAAEywB,YAEJ9qB,GAAM,CACb,GAAKA,IAAQ6qB,EACZ,MAAO,EAGR7qB,GAAMA,EAAI8qB,YAGX,MAAO,GA4GR,QAASC,GAAUta,EAAUua,GAC5B,GAAInF,GAAS1T,EAAO8Y,EAAQnpB,EAC3BopB,EAAOC,EAAQC,EACfC,EAASC,EAAY9nB,GAAWiN,EAAW,IAE5C,IAAK4a,EACJ,MAAOL,GAAY,EAAIK,EAAO3wB,MAAO,EAOtC,KAJAwwB,EAAQza,EACR0a,KACAC,EAAaG,EAAKC,UAEVN,GAAQ,GAGTrF,IAAY1T,EAAQsZ,EAAOvmB,KAAMgmB,OACjC/Y,IAEJ+Y,EAAQA,EAAMxwB,MAAOyX,EAAM,GAAGlX,SAAYiwB,GAE3CC,EAAOnvB,KAAMivB,OAGdpF,GAAU,GAGJ1T,EAAQuZ,GAAaxmB,KAAMgmB,MAChCD,EAAOjvB,KAAM6pB,EAAU,GAAI8F,GAAOxZ,EAAMjJ,UACxCgiB,EAAQA,EAAMxwB,MAAOmrB,EAAQ5qB,QAG7B4qB,EAAQ/jB,KAAOqQ,EAAM,GAAG/X,QAAS2W,EAAO,KAIzC,KAAMjP,IAAQypB,GAAK5qB,SACZwR,EAAQyZ,GAAW9pB,GAAOoD,KAAMgmB,KAAcE,EAAYtpB,MAC9DqQ,EAAQiZ,EAAYtpB,GAAQqQ,MAE7B8Y,EAAOjvB,KAAM6pB,EAAU,GAAI8F,GAAOxZ,EAAMjJ,UACxCgiB,EAAQA,EAAMxwB,MAAOmrB,EAAQ5qB,QAC7B4qB,EAAQ/jB,KAAOA,EACf+jB,EAAQ7gB,QAAUmN,EAIpB,KAAM0T,EACL,MAOF,MAAOmF,GACNE,EAAMjwB,OACNiwB,EACClB,EAAOhgB,MAAOyG,GAEd6a,EAAY7a,EAAU0a,GAASzwB,MAAO,GAGzC,QAASmxB,GAAeC,EAASC,EAAYC,GAC5C,GAAI/rB,GAAM8rB,EAAW9rB,IACpBgsB,EAAmBD,GAA2B,eAAnBD,EAAW9rB,IACtCisB,EAAW7e,GAEZ,OAAO0e,GAAWtY,MAEjB,SAAU5U,EAAM6R,EAAS0E,GACxB,KAASvW,EAAOA,EAAMoB,IACrB,GAAKgsB,GAAsC,IAAlBptB,EAAKE,SAC7B,MAAO+sB,GAASjtB,EAAM6R,EAAS0E,IAMlC,SAAUvW,EAAM6R,EAAS0E,GAExB,GAAMA,GAuBL,KAASvW,EAAOA,EAAMoB,IACrB,IAAKgsB,GAAsC,IAAlBptB,EAAKE,WACxB+sB,EAASjtB,EAAM6R,EAAS0E,GAC5B,MAAOvW,OAtBV,KAHA,GAAI4d,GACH0P,EAASC,EAAU,IAAMF,EAAW,IACpCG,EAAYF,EAASG,EACbztB,EAAOA,EAAMoB,IACrB,GAAKgsB,GAAsC,IAAlBptB,EAAKE,SAAiB,CAC9C,IAAM0d,EAAQ5d,EAAM2E,MAAe6oB,EAClC,MAAOxtB,GAAK0tB,MACN,IAAsB,gBAAV9P,IAAgD,IAA1BA,EAAMpM,QAAQ8b,IACtD,GAAKttB,EAAK0tB,OACT,MAAO1tB,OAEF,CAEN,GADAA,EAAM2E,GAAY6oB,EACbP,EAASjtB,EAAM6R,EAAS0E,GAE5B,MADAvW,GAAK0tB,QAAS,EACP1tB,CAERA,GAAK0tB,QAAS,KAgBrB,QAASC,GAAgBC,GACxB,MAAOA,GAASxxB,OAAS,EACxB,SAAU4D,EAAM6R,EAAS0E,GAExB,IADA,GAAIta,GAAI2xB,EAASxxB,OACTH,KACP,IAAM2xB,EAAS3xB,GAAI+D,EAAM6R,EAAS0E,GACjC,OAAO,CAGT,QAAO,GAERqX,EAAS,GAGX,QAASC,GAAUC,EAAW/Y,EAAKjT,EAAQ+P,EAAS0E,GAOnD,IANA,GAAIvW,GACH+tB,KACA9xB,EAAI,EACJkb,EAAM2W,EAAU1xB,OAChB4xB,EAAgB,MAAPjZ,EAEEoC,EAAJlb,EAASA,KACV+D,EAAO8tB,EAAU7xB,OAChB6F,GAAUA,EAAQ9B,EAAM6R,EAAS0E,MACtCwX,EAAa5wB,KAAM6C,GACdguB,GACJjZ,EAAI5X,KAAMlB,GAMd,OAAO8xB,GAGR,QAASE,GAAYtB,EAAW/a,EAAUqb,EAASiB,EAAYC,EAAYC,GAO1E,MANKF,KAAeA,EAAYvpB,KAC/BupB,EAAaD,EAAYC,IAErBC,IAAeA,EAAYxpB,KAC/BwpB,EAAaF,EAAYE,EAAYC,IAE/BxC,EAAa,SAAUR,EAAMlU,EAASrF,EAAS0E,GACrD,GAAIxJ,GAAM9Q,EAAG+D,EACZquB,KACAC,KACAC,EAAcrX,EAAQ9a,OAGtBkY,EAAQ8W,GAAQoD,EAAkB5c,GAAY,IAAKC,EAAQ3R,UAAa2R,GAAYA,MAGpF4c,GAAY9B,IAAevB,GAASxZ,EAEnC0C,EADAuZ,EAAUvZ,EAAO+Z,EAAQ1B,EAAW9a,EAAS0E,GAG9CmY,EAAazB,EAEZkB,IAAgB/C,EAAOuB,EAAY4B,GAAeL,MAMjDhX,EACDuX,CAQF,IALKxB,GACJA,EAASwB,EAAWC,EAAY7c,EAAS0E,GAIrC2X,EAMJ,IALAnhB,EAAO8gB,EAAUa,EAAYJ,GAC7BJ,EAAYnhB,KAAU8E,EAAS0E,GAG/Bta,EAAI8Q,EAAK3Q,OACDH,MACD+D,EAAO+M,EAAK9Q,MACjByyB,EAAYJ,EAAQryB,MAASwyB,EAAWH,EAAQryB,IAAO+D,GAK1D,IAAKorB,GACJ,GAAK+C,GAAcxB,EAAY,CAC9B,GAAKwB,EAAa,CAIjB,IAFAphB,KACA9Q,EAAIyyB,EAAWtyB,OACPH,MACD+D,EAAO0uB,EAAWzyB,KAEvB8Q,EAAK5P,KAAOsxB,EAAUxyB,GAAK+D,EAG7BmuB,GAAY,KAAOO,KAAkB3hB,EAAMwJ,GAK5C,IADAta,EAAIyyB,EAAWtyB,OACPH,MACD+D,EAAO0uB,EAAWzyB,MACtB8Q,EAAOohB,EAAa3c,EAAQ7U,KAAMyuB,EAAMprB,GAASquB,EAAOpyB,IAAM,KAE/DmvB,EAAKre,KAAUmK,EAAQnK,GAAQ/M,SAOlC0uB,GAAab,EACZa,IAAexX,EACdwX,EAAWzjB,OAAQsjB,EAAaG,EAAWtyB,QAC3CsyB,GAEGP,EACJA,EAAY,KAAMjX,EAASwX,EAAYnY,GAEvCpZ,EAAKF,MAAOia,EAASwX,KAMzB,QAASC,GAAmBvC,GAqB3B,IApBA,GAAIwC,GAAc3B,EAAShuB,EAC1BkY,EAAMiV,EAAOhwB,OACbyyB,EAAkBnC,EAAKoC,SAAU1C,EAAO,GAAGnpB,MAC3C8rB,EAAmBF,GAAmBnC,EAAKoC,SAAS,KACpD7yB,EAAI4yB,EAAkB,EAAI,EAG1BG,EAAehC,EAAe,SAAUhtB,GACvC,MAAOA,KAAS4uB,GACdG,GAAkB,GACrBE,EAAkBjC,EAAe,SAAUhtB,GAC1C,MAAOwR,GAAQ7U,KAAMiyB,EAAc5uB,GAAS,IAC1C+uB,GAAkB,GACrBnB,GAAa,SAAU5tB,EAAM6R,EAAS0E,GACrC,OAAUsY,IAAqBtY,GAAO1E,IAAYqd,MAChDN,EAAe/c,GAAS3R,SACxB8uB,EAAchvB,EAAM6R,EAAS0E,GAC7B0Y,EAAiBjvB,EAAM6R,EAAS0E,MAGxBY,EAAJlb,EAASA,IAChB,GAAMgxB,EAAUP,EAAKoC,SAAU1C,EAAOnwB,GAAGgH,MACxC2qB,GAAaZ,EAAeW,EAAgBC,GAAYX,QAClD,CAIN,GAHAA,EAAUP,EAAK5qB,OAAQsqB,EAAOnwB,GAAGgH,MAAOhG,MAAO,KAAMmvB,EAAOnwB,GAAGkK,SAG1D8mB,EAAStoB,GAAY,CAGzB,IADA1F,IAAMhD,EACMkb,EAAJlY,IACFytB,EAAKoC,SAAU1C,EAAOntB,GAAGgE,MADdhE,KAKjB,MAAOgvB,GACNhyB,EAAI,GAAK0xB,EAAgBC,GACzB3xB,EAAI,GAAKmwB,EAAOvwB,MAAO,EAAGI,EAAI,GAAIiB,KAAK,IAAI3B,QAAS2W,EAAO,MAC3D+a,EACIhuB,EAAJhD,GAAS0yB,EAAmBvC,EAAOvwB,MAAOI,EAAGgD,IACzCkY,EAAJlY,GAAW0vB,EAAoBvC,EAASA,EAAOvwB,MAAOoD,IAClDkY,EAAJlY,GAAWmtB,EAAOlvB,KAAK,KAGzB0wB,EAASzwB,KAAM8vB,GAIjB,MAAOU,GAAgBC,GAGxB,QAASuB,GAA0BC,EAAiBC,GACnD,GAAIC,GAAQD,EAAYjzB,OAAS,EAChCmzB,EAAYH,EAAgBhzB,OAAS,EACrCozB,EAAe,SAAUpE,EAAMvZ,EAAS0E,EAAKW,EAASuY,GACrD,GAAIzvB,GAAMf,EAAGguB,EACZyC,KACAC,EAAe,EACf1zB,EAAI,IACJ6xB,EAAY1C,MACZwE,EAA6B,MAAjBH,EACZI,EAAgBX,EAEhB5a,EAAQ8W,GAAQmE,GAAa7C,EAAKjZ,KAAU,IAAG,IAAKgc,GAAiB5d,EAAQ5Q,YAAc4Q,GAE3Fie,EAAiBvC,GAA4B,MAAjBsC,EAAwB,EAAIvpB,KAAKypB,CAQ9D,KANKH,IACJV,EAAmBrd,IAAY5P,GAAY4P,EAC3C4b,EAAa+B,EAAajqB,IAIE,OAApBvF,EAAOsU,EAAMrY,IAAaA,IAAM,CACxC,GAAKszB,GAAavvB,EAAO,CACxB,IAAMf,EAAI,EAAIguB,EAAUmC,EAAgBnwB,GAAKA,IAC5C,GAAKguB,EAASjtB,EAAM6R,EAAS0E,GAAQ,CACpCW,EAAQ/Z,KAAM6C,EACd,OAGG4vB,IACJrC,EAAUuC,EACVrC,IAAe+B,EAAajqB,IAKzB+pB,KAEEtvB,GAAQitB,GAAWjtB,IACxB2vB,IAIIvE,GACJ0C,EAAU3wB,KAAM6C,IAOnB,GADA2vB,GAAgB1zB,EACXqzB,GAASrzB,IAAM0zB,EAAe,CAClC,IAAM1wB,EAAI,EAAIguB,EAAUoC,EAAYpwB,GAAKA,IACxCguB,EAASa,EAAW4B,EAAY7d,EAAS0E,EAG1C,IAAK6U,EAAO,CAEX,GAAKuE,EAAe,EACnB,KAAQ1zB,KACA6xB,EAAU7xB,IAAMyzB,EAAWzzB,KACjCyzB,EAAWzzB,GAAKsG,EAAI5F,KAAMua,GAM7BwY,GAAa7B,EAAU6B,GAIxBvyB,EAAKF,MAAOia,EAASwY,GAGhBE,IAAcxE,GAAQsE,EAAWtzB,OAAS,GAC5CuzB,EAAeN,EAAYjzB,OAAW,GAExC+uB,EAAO6E,WAAY9Y,GAUrB,MALK0Y,KACJrC,EAAUuC,EACVZ,EAAmBW,GAGb/B,EAIT,OADA0B,GAAajqB,GAAK,EACX+pB,EACN1D,EAAc4D,GACdA,EA8BF,QAAShB,GAAkB5c,EAAU6I,EAAUvD,GAG9C,IAFA,GAAIjb,GAAI,EACPkb,EAAMsD,EAASre,OACJ+a,EAAJlb,EAASA,IAChBkvB,EAAQvZ,EAAU6I,EAASxe,GAAIib,EAEhC,OAAOA,GAGR,QAASwD,GAAQ9I,EAAUC,EAASqF,EAASkU,EAAM7U,GAClD,CAAA,GAAIta,GAAGmwB,EAAQ6D,EAAOhtB,EAAMwQ,EAC3BH,EAAQ4Y,EAAUta,EACd0B,GAAMlX,OAEX,IAAMgvB,GAEiB,IAAjB9X,EAAMlX,OAAe,CAIzB,GADAgwB,EAAS9Y,EAAM,GAAKA,EAAM,GAAGzX,MAAO,GAC/BuwB,EAAOhwB,OAAS,GAAkC,QAA5B6zB,EAAQ7D,EAAO,IAAInpB,MACvB,IAArB4O,EAAQ3R,WAAmBqW,GAC3BmW,EAAKoC,SAAU1C,EAAO,GAAGnpB,MAAS,CAGnC,GADA4O,EAAU6a,EAAKjZ,KAAS,GAAGwc,EAAM9pB,QAAQ,GAAG5K,QAAS20B,GAAY,IAAMre,EAAS0E,GAAM,IAChF1E,EACL,MAAOqF,EAGRtF,GAAWA,EAAS/V,MAAOuwB,EAAO/hB,QAAQjO,QAI3C,IAAMH,EAAI8wB,GAAe,IAAEzxB,KAAMsW,GAAa,GAAKwa,EAAOhwB,OAAS,EAAGH,GAAK,IAC1Eg0B,EAAQ7D,EAAOnwB,IAGVywB,EAAKoC,SAAW7rB,EAAOgtB,EAAMhtB,OAJ2ChH,IAO7E,IAAMwX,EAAOiZ,EAAKjZ,KAAMxQ,MAEjBmoB,EAAO3X,EACZwc,EAAM9pB,QAAQ,GAAG5K,QAAS20B,GAAY,IACtCC,GAAS70B,KAAM8wB,EAAO,GAAGnpB,OAAU4O,EAAQ5Q,YAAc4Q,EACzD0E,IACI,CAKJ,GAFA6V,EAAOnhB,OAAQhP,EAAG,GAClB2V,EAAWwZ,EAAKhvB,QAAUgwB,EAAOlvB,KAAK,KAChC0U,EAEL,MADAzU,GAAKF,MAAOia,EAASrb,EAAMc,KAAMyuB,EAAM,IAChClU,CAGR,QAgBL,MAPAkZ,GAASxe,EAAU0B,GAClB8X,EACAvZ,EACA0E,EACAW,EACAiZ,GAAS70B,KAAMsW,IAETsF,EAoKR,QAASmZ,MAnoDT,GAAI5C,GACH6C,EACA5D,EACA6D,EACAjF,EACA7lB,EACA2qB,EACAI,EACAC,EACAvB,EAEAwB,GAAmB,EACnBC,EAAe,YAEfhsB,GAAY,WAAa2B,KAAKyX,UAAWxiB,QAAS,IAAK,IAEvDuxB,EAAQjwB,OACRoF,EAAW7C,EAAO6C,SAClB2uB,EAAU3uB,EAAS2U,gBACnB2W,EAAU,EACV/e,EAAO,EACPjM,KAASA,IACTpF,KAAUA,KACVtB,KAAWA,MAEX2V,KAAaA,SAAW,SAAUxR,GAGjC,IAFA,GAAI/D,GAAI,EACPkb,EAAM7Z,KAAKlB,OACA+a,EAAJlb,EAASA,IAChB,GAAKqB,KAAKrB,KAAO+D,EAChB,MAAO/D,EAGT,OAAO,IAIR2vB,EAAe,SAAU9Z,EAAItV,GAE5B,MADAsV,GAAInN,GAAqB,MAATnI,GAAiBA,EAC1BsV,GAGR+e,EAAc,WACb,GAAIjT,MACHkT,IAED,OAAOlF,GAAa,SAAU7vB,EAAKS,GAOlC,MALKs0B,GAAK3zB,KAAMpB,GAAQ2wB,EAAKqE,mBACrBnT,GAAOkT,EAAKzmB,SAIZuT,EAAO7hB,EAAM,KAAQS,GAC3BohB,IAGJoT,EAAaH,IACbpE,EAAaoE,IACbI,EAAgBJ,IAKhBK,EAAa,sBAEbC,EAAoB,mCAKpBC,EAAaD,EAAkB51B,QAAS,IAAK,MAG7C81B,EAAY,eACZzS,EAAa,MAAQsS,EAAa,KAAOC,EAAoB,IAAMD,EAClE,OAASG,EAAYH,EAAa,wCAA0CE,EAAa,QAAUF,EAAa,OAOjHI,EAAU,KAAOH,EAAoB,+DAAiEvS,EAAa,2BAGnH2S,EAAM,4CAA8CL,EACnD,mBAAqBA,EAAa,mBAGnChf,EAAQ,GAAIuT,QAAQ,IAAMyL,EAAa,8BAAgCA,EAAa,KAAM,KAE1FtE,EAAS,GAAInH,QAAQ,IAAMyL,EAAa,KAAOA,EAAa,KAC5DrE,GAAe,GAAIpH,QAAQ,IAAMyL,EAAa,4BAA8BA,EAAa,KACzFM,GAAU,GAAI/L,QAAQ6L,GAGtBnf,GAAa,qCAGbge,GAAW,sBAGXsB,GAAU,OACVC,GAAU,gCAEVxB,GAAa,YAEbnD,IACC4E,GAAM,GAAIlM,QAAQ,MAAQ0L,EAAoB,KAC9CS,MAAS,GAAInM,QAAQ,QAAU0L,EAAoB,KACnDU,KAAQ,GAAIpM,QAAQ,mBAAqB0L,EAAoB,cAC7DW,IAAO,GAAIrM,QAAQ,KAAO0L,EAAkB51B,QAAS,IAAK,MAAS,KACnEw2B,KAAQ,GAAItM,QAAQ,IAAM7G,GAC1BoT,OAAU,GAAIvM,QAAQ,IAAM6L,GAC5BW,IAAO,GAAIxM,QAAQ8L,EAAK,KACxBW,MAAS,GAAIzM,QAAQ,sCAAwCyL,EAC5D,+BAAiCA,EAAa,cAAgBA,EAC9D,aAAeA,EAAa,SAAU,KAEvClM,aAAgB,GAAIS,QAAQ,IAAMyL,EAAa,UAAYK,EAAK,MAMjEY,GAAS,SAAUrgB,GAClB,GAAIkJ,GAAM/Y,EAASK,cAAc,MAEjC,KACC,MAAOwP,GAAIkJ,GACV,MAAOva,GACR,OAAO,EACN,QAEDua,EAAM,OAKRoX,GAA0BD,GAAO,SAAUnX,GAE1C,MADAA,GAAIrY,YAAaV,EAASowB,cAAc,MAChCrX,EAAItY,qBAAqB,KAAKtG,SAIvCk2B,GAA0BH,GAAO,SAAUnX,GAE1C,MADAA,GAAI9W,UAAY,mBACT8W,EAAII,kBAAqBJ,GAAII,WAAW9a,eAAiBqwB,GACvB,MAAxC3V,EAAII,WAAW9a,aAAa,UAI9BiyB,GAAmBJ,GAAO,SAAUnX,GACnCA,EAAI9W,UAAY,mBAChB,IAAIjB,SAAc+X,GAAI4B,UAAUtc,aAAa,WAE7C,OAAgB,YAAT2C,GAA+B,WAATA,IAI9BsoB,GAAwB4G,GAAO,SAAUnX,GAGxC,MADAA,GAAI9W,UAAY,yDACV8W,EAAIwQ,wBAA2BxQ,EAAIwQ,uBAAuB,KAAKpvB,QAKrE4e,EAAI4B,UAAUhB,UAAY,IACwB,IAA3CZ,EAAIwQ,uBAAuB,KAAKpvB,SAL/B,IAUTo2B,GAAmBL,GAAO,SAAUnX,GAEnCA,EAAIjH,GAAKpP,EAAU,EACnBqW,EAAI9W,UAAY,YAAcS,EAAU,oBAAsBA,EAAU,WACxEisB,EAAQtT,aAActC,EAAK4V,EAAQxV,WAGnC,IAAIxD,GAAO3V,EAASwwB,mBAEnBxwB,EAASwwB,kBAAmB9tB,GAAUvI,SAAW,EAEjD6F,EAASwwB,kBAAmB9tB,EAAU,GAAIvI,MAM3C,OALAk0B,IAAsBruB,EAAS6R,eAAgBnP,GAG/CisB,EAAQ1oB,YAAa8S,GAEdpD,GAIT,KACC/b,EAAMc,KAAMi0B,EAAQxa,WAAY,GAAI,GAAGlW,SACtC,MAAQO,IACT5E,EAAQ,SAAUI,GAGjB,IAFA,GAAI+D,GACHkX,KACQlX,EAAO1C,KAAKrB,GAAKA,IACzBib,EAAQ/Z,KAAM6C,EAEf,OAAOkX,IAgETiU,EAAOhlB,QAAU,SAAU8e,EAAM3jB,GAChC,MAAO6pB,GAAQlG,EAAM,KAAM,KAAM3jB,IAGlC6pB,EAAOuH,gBAAkB,SAAU1yB,EAAMilB,GACxC,MAAOkG,GAAQlG,EAAM,KAAM,MAAQjlB,IAAS5D,OAAS,GA0CtDm0B,EAAUpF,EAAOoF,QAAU,SAAUvwB,GACpC,GAAIgB,GACHuT,EAAM,GACNtY,EAAI,EACJiE,EAAWF,EAAKE,QAEjB,IAAKA,GACJ,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAG1D,GAAiC,gBAArBF,GAAK2yB,YAChB,MAAO3yB,GAAK2yB,WAGZ,KAAM3yB,EAAOA,EAAKob,WAAYpb,EAAMA,EAAOA,EAAKisB,YAC/C1X,GAAOgc,EAASvwB,OAGZ,IAAkB,IAAbE,GAA+B,IAAbA,EAC7B,MAAOF,GAAKkjB,cAMb,MAASliB,EAAOhB,EAAK/D,GAAKA,IAEzBsY,GAAOgc,EAASvvB,EAGlB,OAAOuT,IAGR+W,EAAQH,EAAOG,MAAQ,SAAUtrB,GAGhC,GAAI4W,GAAkB5W,IAASA,EAAK4C,eAAiB5C,GAAM4W,eAC3D,OAAOA,GAA+C,SAA7BA,EAAgBhT,UAAsB,GAIhE6B,EAAW0lB,EAAO1lB,SAAWmrB,EAAQnrB,SACpC,SAAUjK,EAAGwwB,GACZ,GAAI4G,GAAuB,IAAfp3B,EAAE0E,SAAiB1E,EAAEob,gBAAkBpb,EAClDq3B,EAAM7G,GAAKA,EAAE/qB,UACd,OAAOzF,KAAMq3B,MAAWA,GAAwB,IAAjBA,EAAI3yB,UAAkB0yB,EAAMntB,UAAYmtB,EAAMntB,SAASotB,KAEvFjC,EAAQkC,wBACR,SAAUt3B,EAAGwwB,GACZ,MAAOA,OAA0C,GAAjCxwB,EAAEs3B,wBAAyB9G,KAE5C,SAAUxwB,EAAGwwB,GACZ,KAASA,EAAIA,EAAE/qB,YACd,GAAK+qB,IAAMxwB,EACV,OAAO,CAGT,QAAO,GAGT2vB,EAAOvX,KAAO,SAAU5T,EAAMG,GAC7B,GAAIwG,GACH4P,EAAM+U,EAAOtrB,EAKd,OAHMuW,KACLpW,EAAOA,EAAKE,gBAEPsG,EAAM+lB,EAAKqG,WAAY5yB,IACrBwG,EAAK3G,GAERuW,GAAOgc,GACJvyB,EAAKM,aAAcH,IAE3BwG,EAAM3G,EAAK6iB,iBAAkB1iB,GACtBwG,EACkB,iBAAjB3G,GAAMG,GACZH,EAAMG,GAASA,EAAO,KACtBwG,EAAIya,UAAYza,EAAInK,MAAQ,KAC7B,OAGFkwB,EAAOvB,EAAO6H,WAGbjC,YAAa,GAEbkC,aAAcrH,EAEdtY,MAAOyZ,GAGPgG,WAAYT,OAGVvP,KAAQ,SAAU/iB,GACjB,MAAOA,GAAKM,aAAc,OAAQ,IAEnC2C,KAAQ,SAAUjD,GACjB,MAAOA,GAAKM,aAAa,UAI5BmT,MACCke,GAAMrB,EACL,SAAUvc,EAAIlC,EAAS0E,GACtB,SAAY1E,GAAQiC,iBAAmB6c,IAAiBpa,EAAM,CAC7D,GAAI8U,GAAIxZ,EAAQiC,eAAgBC,EAGhC,OAAOsX,IAAKA,EAAEpqB,YAAcoqB,QAG9B,SAAUtX,EAAIlC,EAAS0E,GACtB,SAAY1E,GAAQiC,iBAAmB6c,IAAiBpa,EAAM,CAC7D,GAAI8U,GAAIxZ,EAAQiC,eAAgBC,EAEhC,OAAOsX,GACNA,EAAEtX,KAAOA,SAAasX,GAAExI,mBAAqB8N,GAAgBtF,EAAExI,iBAAiB,MAAMrmB,QAAUuX,GAC9FsX,GACDrsB,OAKL8yB,IAAOM,GACN,SAAU3vB,EAAKoP,GACd,aAAYA,GAAQnP,uBAAyBiuB,EACrC9e,EAAQnP,qBAAsBD,GADtC,QAID,SAAUA,EAAKoP,GACd,GAAIqF,GAAUrF,EAAQnP,qBAAsBD,EAG5C,IAAa,MAARA,EAAc,CAKlB,IAJA,GAAIzC,GACH8K,KACA7O,EAAI,EAEI+D,EAAOkX,EAAQjb,GAAKA,IACL,IAAlB+D,EAAKE,UACT4K,EAAI3N,KAAM6C,EAIZ,OAAO8K,GAER,MAAOoM,IAGT2a,KAAQW,IAAoB,SAAU/vB,EAAKoP,GAC1C,aAAYA,GAAQ4gB,oBAAsB9B,EAClC9e,EAAQ4gB,kBAAmBtyB,MADnC,QAKDyxB,MAASrG,IAAyB,SAAU3P,EAAW/J,EAAS0E,GAC/D,aAAY1E,GAAQ2Z,yBAA2BmF,GAAiBpa,EAAhE,OACQ1E,EAAQ2Z,uBAAwB5P,KAK1CkT,UACCoE,KAAO9xB,IAAK,aAAcwT,OAAO,GACjCue,KAAO/xB,IAAK,cACZgyB,KAAOhyB,IAAK,kBAAmBwT,OAAO,GACtCye,KAAOjyB,IAAK,oBAGburB,WACCoF,KAAQ,SAAUze,GAUjB,MATAA,GAAM,GAAKA,EAAM,GAAG/X,QAAS20B,GAAY,IAGzC5c,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAM,IAAK/X,QAAS20B,GAAY,IAE7C,OAAb5c,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAMzX,MAAO,EAAG,IAGxBq2B,MAAS,SAAU5e,GA4BlB,MAlBAA,GAAM,GAAKA,EAAM,GAAGjT,cAEF,QAAbiT,EAAM,IAEJA,EAAM,IACX6X,EAAOhgB,MAAOmI,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjB6X,EAAOhgB,MAAOmI,EAAM,IAGdA,GAGR0e,OAAU,SAAU1e,GACnB,GAAIggB,GAAUC,CACd,OAAKxG,IAAiB,MAAEzxB,KAAMgY,EAAM,IAC5B,MAGHA,EAAM,GACVA,EAAM,GAAKA,EAAM,IACLggB,EAAWhgB,EAAM,MAExBke,GAAQl2B,KAAKg4B,KAEhBC,EAASrH,EAAUoH,GAAU,MAE7BC,EAASD,EAAS9hB,QAAS,IAAK8hB,EAASl3B,OAASm3B,GAAWD,EAASl3B,UAGvEk3B,EAAWA,EAASz3B,MAAO,EAAG03B,GAC9BjgB,EAAM,GAAKA,EAAM,GAAGzX,MAAO,EAAG03B,IAE/BjgB,EAAM,GAAKggB,GAILhgB,EAAMzX,MAAO,EAAG,MAIzBiG,QACC6vB,GAAMrB,EACL,SAAUvc,GAET,MADAA,GAAKA,EAAGxY,QAAS20B,GAAY,IACtB,SAAUlwB,GAChB,MAAOA,GAAKM,aAAa,QAAUyT,IAGrC,SAAUA,GAET,MADAA,GAAKA,EAAGxY,QAAS20B,GAAY,IACtB,SAAUlwB,GAChB,GAAIgB,SAAchB,GAAK6iB,mBAAqB8N,GAAgB3wB,EAAK6iB,iBAAiB,KAClF,OAAO7hB,IAAQA,EAAKxE,QAAUuX,IAIjC+d,IAAO,SAAUluB,GAChB,MAAkB,MAAbA,EACG,WAAa,OAAO,IAE5BA,EAAWA,EAASrI,QAAS20B,GAAY,IAAK7vB,cAEvC,SAAUL,GAChB,MAAOA,GAAK4D,UAAY5D,EAAK4D,SAASvD,gBAAkBuD,KAI1DguB,MAAS,SAAUhW,GAClB,GAAI4X,GAAUxC,EAAYrsB,GAAWiX,EAAY,IAEjD,OAAO4X,KACLA,EAAU,GAAI/N,QAAQ,MAAQyL,EAAa,IAAMtV,EAAY,IAAMsV,EAAa,SACjFF,EAAYpV,EAAW,SAAU5b,GAChC,MAAOwzB,GAAQl4B,KAAM0E,EAAK4b,iBAAqB5b,GAAKM,eAAiBqwB,GAAgB3wB,EAAKM,aAAa,UAAa,OAIvHyxB,KAAQ,SAAU5xB,EAAMszB,EAAUC,GACjC,MAAO,UAAU1zB,GAChB,GAAIqM,GAAS8e,EAAOvX,KAAM5T,EAAMG,EAEhC,OAAe,OAAVkM,EACgB,OAAbonB,EAEFA,GAINpnB,GAAU,GAEU,MAAbonB,EAAmBpnB,IAAWqnB,EACvB,OAAbD,EAAoBpnB,IAAWqnB,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BrnB,EAAOmF,QAASkiB,GAChC,OAAbD,EAAoBC,GAASrnB,EAAOmF,QAASkiB,GAAU,GAC1C,OAAbD,EAAoBC,GAASrnB,EAAOtD,OAAQsD,EAAOjQ,OAASs3B,EAAMt3B,UAAas3B,EAClE,OAAbD,GAAsB,IAAMpnB,EAAS,KAAMmF,QAASkiB,GAAU,GACjD,OAAbD,EAAoBpnB,IAAWqnB,GAASrnB,EAAOtD,OAAQ,EAAG2qB,EAAMt3B,OAAS,KAAQs3B,EAAQ,KACzF,IAZO,IAgBVxB,MAAS,SAAUjvB,EAAM4oB,EAAUjX,EAAOC,GAEzC,MAAc,QAAT5R,EACG,SAAUjD,GAChB,GAAIgB,GAAM2yB,EACTpQ,EAASvjB,EAAKiB,UAEf,IAAe,IAAV2T,GAAwB,IAATC,EACnB,OAAO,CAGR,IAAK0O,EAEJ,IADAoQ,EAAO,EACD3yB,EAAOuiB,EAAOnI,WAAYpa,IACR,IAAlBA,EAAKd,WACTyzB,IACK3zB,IAASgB,IAHsBA,EAAOA,EAAKirB,aAYnD,MADA0H,IAAQ9e,EACD8e,IAAS/e,GAAW+e,EAAO/e,IAAU,GAAK+e,EAAO/e,GAAS,GAI5D,SAAU5U,GAChB,GAAIgB,GAAOhB,CAEX,QAASiD,GACR,IAAK,OACL,IAAK,QACJ,KAASjC,EAAOA,EAAK4yB,iBACpB,GAAuB,IAAlB5yB,EAAKd,SACT,OAAO,CAIT,IAAc,UAAT+C,EACJ,OAAO,CAGRjC,GAAOhB,CAGR,KAAK,OACJ,KAASgB,EAAOA,EAAKirB,aACpB,GAAuB,IAAlBjrB,EAAKd,SACT,OAAO,CAIT,QAAO,KAKX8xB,OAAU,SAAU6B,EAAQhI,GAK3B,GAAInX,GACH5C,EAAK4a,EAAK4E,QAASuC,IAAYnH,EAAK2D,WAAYwD,EAAOxzB,gBACtD8qB,EAAOhgB,MAAO,uBAAyB0oB,EAKzC,OAAK/hB,GAAInN,GACDmN,EAAI+Z,GAIP/Z,EAAG1V,OAAS,GAChBsY,GAASmf,EAAQA,EAAQ,GAAIhI,GACtBa,EAAK2D,WAAWjzB,eAAgBy2B,EAAOxzB,eAC7CurB,EAAa,SAAUR,EAAMjlB,GAI5B,IAHA,GAAI2tB,GACH9M,EAAUlV,EAAIsZ,EAAMS,GACpB5vB,EAAI+qB,EAAQ5qB,OACLH,KACP63B,EAAMtiB,EAAQ7U,KAAMyuB,EAAMpE,EAAQ/qB,IAClCmvB,EAAM0I,KAAW3tB,EAAS2tB,GAAQ9M,EAAQ/qB,MAG5C,SAAU+D,GACT,MAAO8R,GAAI9R,EAAM,EAAG0U,KAIhB5C,IAITwf,SACCyC,IAAOnI,EAAa,SAAUha,GAI7B,GAAIgJ,MACH1D,KACA+V,EAAUmD,EAASxe,EAASrW,QAAS2W,EAAO,MAE7C,OAAO+a,GAAStoB,GACfinB,EAAa,SAAUR,EAAMjlB,EAAS0L,EAAS0E,GAM9C,IALA,GAAIvW,GACH8tB,EAAYb,EAAS7B,EAAM,KAAM7U,MACjCta,EAAImvB,EAAKhvB,OAGFH,MACD+D,EAAO8tB,EAAU7xB,MACtBmvB,EAAKnvB,KAAOkK,EAAQlK,GAAK+D,MAI5B,SAAUA,EAAM6R,EAAS0E,GAGxB,MAFAqE,GAAM,GAAK5a,EACXitB,EAASrS,EAAO,KAAMrE,EAAKW,IACnBA,EAAQ3U,SAInB0W,IAAO2S,EAAa,SAAUha,GAC7B,MAAO,UAAU5R,GAChB,MAAOmrB,GAAQvZ,EAAU5R,GAAO5D,OAAS,KAI3CqJ,SAAYmmB,EAAa,SAAU/sB,GAClC,MAAO,UAAUmB,GAChB,OAASA,EAAK2yB,aAAe3yB,EAAKg0B,WAAazD,EAASvwB,IAASwR,QAAS3S,GAAS,MAIrFo1B,QAAW,SAAUj0B,GACpB,MAAOA,GAAKkZ,YAAa,GAG1BA,SAAY,SAAUlZ,GACrB,MAAOA,GAAKkZ,YAAa,GAG1B5U,QAAW,SAAUtE,GAGpB,GAAI4D,GAAW5D,EAAK4D,SAASvD,aAC7B,OAAqB,UAAbuD,KAA0B5D,EAAKsE,SAA0B,WAAbV,KAA2B5D,EAAKuE,UAGrFA,SAAY,SAAUvE,GAOrB,MAJKA,GAAKiB,YACTjB,EAAKiB,WAAWogB,cAGVrhB,EAAKuE,YAAa,GAG1Bgf,OAAU,SAAUvjB,GACnB,OAAQ0sB,EAAK4E,QAAe,MAAGtxB,IAGhCwP,MAAS,SAAUxP,GAMlB,GAAIE,EAEJ,KADAF,EAAOA,EAAKob,WACJpb,GAAO,CACd,GAAKA,EAAK4D,SAAW,KAAsC,KAA9B1D,EAAWF,EAAKE,WAAgC,IAAbA,EAC/D,OAAO,CAERF,GAAOA,EAAKisB,YAEb,OAAO,GAGRiI,OAAU,SAAUl0B,GACnB,MAAOyxB,IAAQn2B,KAAM0E,EAAK4D,WAG3B/E,KAAQ,SAAUmB,GACjB,GAAIiD,GAAM2Q,CAGV,OAAuC,UAAhC5T,EAAK4D,SAASvD,eACG,UAAtB4C,EAAOjD,EAAKiD,QAC2B,OAArC2Q,EAAO5T,EAAKM,aAAa,UAAoBsT,EAAKvT,gBAAkB4C,IAIzEkxB,MAAS1I,EAAkB,SAC3B2I,SAAY3I,EAAkB,YAC9B4I,KAAQ5I,EAAkB,QAC1B6I,SAAY7I,EAAkB,YAC9B8I,MAAS9I,EAAkB,SAE3B1O,OAAU2O,EAAmB,UAC7B8I,MAAS9I,EAAmB,SAE5BtI,OAAU,SAAUpjB,GACnB,GAAIG,GAAOH,EAAK4D,SAASvD,aACzB,OAAgB,UAATF,GAAkC,WAAdH,EAAKiD,MAA8B,WAAT9C,GAGtDya,MAAS,SAAU5a,GAClB,MAAO0xB,IAAQp2B,KAAM0E,EAAK4D,WAG3BqlB,MAAS,SAAUjpB,GAClB,GAAIuT,GAAMvT,EAAK4C,aACf,OAAO5C,KAASuT,EAAIkhB,iBAAmBlhB,EAAImhB,UAAYnhB,EAAImhB,gBAAkB10B,EAAKiD,MAAQjD,EAAK+iB,OAAS/iB,EAAK2iB,WAG9GgS,OAAU,SAAU30B,GACnB,MAAOA,KAASA,EAAK4C,cAAc6xB,eAIpC7f,MAAS+W,EAAuB,WAC/B,OAAS,KAGV9W,KAAQ8W,EAAuB,SAAUG,EAAc1vB,GACtD,OAASA,EAAS,KAGnBuY,GAAMgX,EAAuB,SAAUG,EAAc1vB,EAAQyvB,GAC5D,OAAoB,EAAXA,EAAeA,EAAWzvB,EAASyvB,KAG7C+I,KAAQjJ,EAAuB,SAAUG,EAAc1vB,GACtD,IAAM,GAAIH,GAAI,EAAOG,EAAJH,EAAYA,GAAK,EACjC6vB,EAAa3uB,KAAMlB,EAEpB,OAAO6vB,KAGR+I,IAAOlJ,EAAuB,SAAUG,EAAc1vB,GACrD,IAAM,GAAIH,GAAI,EAAOG,EAAJH,EAAYA,GAAK,EACjC6vB,EAAa3uB,KAAMlB,EAEpB,OAAO6vB,KAGRgJ,GAAMnJ,EAAuB,SAAUG,EAAc1vB,EAAQyvB,GAC5D,IAAM,GAAI5vB,GAAe,EAAX4vB,EAAeA,EAAWzvB,EAASyvB,IAAY5vB,GAAK,GACjE6vB,EAAa3uB,KAAMlB,EAEpB,OAAO6vB,KAGRiJ,GAAMpJ,EAAuB,SAAUG,EAAc1vB,EAAQyvB,GAC5D,IAAM,GAAI5vB,GAAe,EAAX4vB,EAAeA,EAAWzvB,EAASyvB,IAAY5vB,EAAIG,GAChE0vB,EAAa3uB,KAAMlB,EAEpB,OAAO6vB,OAuBV0E,EAAYI,EAAQkC,wBACnB,SAAUt3B,EAAGwwB,GACZ,MAAKxwB,KAAMwwB,GACVyE,GAAe,EACR,IAGEj1B,EAAEs3B,yBAA4B9G,EAAE8G,wBAEV,EAA/Bt3B,EAAEs3B,wBAAwB9G,GAD1BxwB,EAAEs3B,yBAEC,GAAK,GAEV,SAAUt3B,EAAGwwB,GAEZ,GAAKxwB,IAAMwwB,EAEV,MADAyE,IAAe,EACR,CAGD,IAAKj1B,EAAEw5B,aAAehJ,EAAEgJ,YAC9B,MAAOx5B,GAAEw5B,YAAchJ,EAAEgJ,WAG1B,IAAIC,GAAIC,EACPC,KACAC,KACAC,EAAM75B,EAAEyF,WACR4xB,EAAM7G,EAAE/qB,WACRE,EAAMk0B,CAGP,IAAKA,IAAQxC,EACZ,MAAO9G,GAAcvwB,EAAGwwB,EAGlB,KAAMqJ,EACZ,MAAO,EAED,KAAMxC,EACZ,MAAO,EAKR,MAAQ1xB,GACPg0B,EAAG5rB,QAASpI,GACZA,EAAMA,EAAIF,UAKX,KAFAE,EAAM0xB,EAEE1xB,GACPi0B,EAAG7rB,QAASpI,GACZA,EAAMA,EAAIF,UAGXg0B,GAAKE,EAAG/4B,OACR84B,EAAKE,EAAGh5B,MAGR,KAAM,GAAIH,GAAI,EAAOg5B,EAAJh5B,GAAci5B,EAAJj5B,EAAQA,IAClC,GAAKk5B,EAAGl5B,KAAOm5B,EAAGn5B,GACjB,MAAO8vB,GAAcoJ,EAAGl5B,GAAIm5B,EAAGn5B,GAKjC,OAAOA,KAAMg5B,EACZlJ,EAAcvwB,EAAG45B,EAAGn5B,GAAI,IACxB8vB,EAAcoJ,EAAGl5B,GAAI+vB,EAAG,KAK1B,EAAG,GAAGhX,KAAMwb,GACbE,GAAoBD,EAGpBtF,EAAO6E,WAAa,SAAU9Y,GAC7B,GAAIlX,GACHs1B,KACAr5B,EAAI,EACJgD,EAAI,CAKL,IAHAwxB,EAAeC,EACfxZ,EAAQlC,KAAMwb,GAETC,EAAe,CACnB,KAASzwB,EAAOkX,EAAQjb,GAAKA,IACvB+D,IAASkX,EAASjb,EAAI,KAC1BgD,EAAIq2B,EAAWn4B,KAAMlB,GAGvB,MAAQgD,KACPiY,EAAQjM,OAAQqqB,EAAYr2B,GAAK,GAInC,MAAOiY,IAGRiU,EAAOhgB,MAAQ,SAAU2K,GACxB,KAAM,IAAInX,OAAO,0CAA4CmX,IA2Y9Dsa,EAAUjF,EAAOiF,QAAU,SAAUxe,EAAU2jB,GAC9C,GAAIt5B,GACHozB,KACAD,KACA5C,EAASyE,EAAetsB,GAAWiN,EAAW,IAE/C,KAAM4a,EAAS,CAMd,IAJM+I,IACLA,EAAQrJ,EAAUta,IAEnB3V,EAAIs5B,EAAMn5B,OACFH,KACPuwB,EAASmC,EAAmB4G,EAAMt5B,IAC7BuwB,EAAQ7nB,GACZ0qB,EAAYlyB,KAAMqvB,GAElB4C,EAAgBjyB,KAAMqvB,EAKxBA,GAASyE,EAAerf,EAAUud,EAA0BC,EAAiBC,IAE9E,MAAO7C,IA8EHvqB,EAAS4C,mBACb,WACC,GAAI2wB,GACHC,EAAY/a,EACZgb,EAAU,QACVC,EAAmB,gDAInBC,GAAc,UAKdC,GAAkB,WAClB1vB,EAAUyqB,EAAQ8B,iBACjB9B,EAAQkF,oBACRlF,EAAQmF,uBACRnF,EAAQoF,kBACRpF,EAAQqF,iBAIV9D,IAAO,SAAUnX,GAMhBA,EAAI9W,UAAY,iDAGV8W,EAAInW,iBAAiB,cAAczI,QACxCw5B,EAAUz4B,KAAM,MAAQ+zB,EAAa,gEAMhClW,EAAInW,iBAAiB,YAAYzI,QACtCw5B,EAAUz4B,KAAK,cAIjBg1B,GAAO,SAAUnX,GAIhBA,EAAI9W,UAAY,kBACX8W,EAAInW,iBAAiB,cAAczI,QACvCw5B,EAAUz4B,KAAM,SAAW+zB,EAAa,gBAKzClW,EAAI9W,UAAY,yBACV8W,EAAInW,iBAAiB,YAAYzI,QACtCw5B,EAAUz4B,KAAK,WAAY,eAK7By4B,EAAsC,GAAInQ,QAAQmQ,EAAU14B,KAAK,MAEjEwd,EAAS,SAAU9I,EAAUC,EAASqF,EAASkU,EAAM7U,GAIpD,IAAM6U,IAAS7U,IAAQqf,EAAUt6B,KAAMsW,GAAa,CACnD,GAAI0a,GAAQrwB,EACXiqB,GAAM,EACNgQ,EAAMvxB,EACNwxB,EAAatkB,EACbukB,EAAmC,IAArBvkB,EAAQ3R,UAAkB0R,CAMzC,IAA0B,IAArBC,EAAQ3R,UAAqD,WAAnC2R,EAAQjO,SAASvD,cAA6B,CAW5E,IAVAisB,EAASJ,EAAUta,IAEbsU,EAAMrU,EAAQvR,aAAa,OAChC41B,EAAMhQ,EAAI3qB,QAASm6B,EAAS,QAE5B7jB,EAAQoJ,aAAc,KAAMib,GAE7BA,EAAM,QAAUA,EAAM,MAEtBj6B,EAAIqwB,EAAOlwB,OACHH,KACPqwB,EAAOrwB,GAAKi6B,EAAM5J,EAAOrwB,GAAGiB,KAAK,GAElCi5B,GAAahG,GAAS70B,KAAMsW,IAAcC,EAAQ5Q,YAAc4Q,EAChEukB,EAAc9J,EAAOpvB,KAAK,KAG3B,GAAKk5B,EACJ,IAIC,MAHAj5B,GAAKF,MAAOia,EAASrb,EAAMc,KAAMw5B,EAAWtxB,iBAC3CuxB,GACE,IACIlf,EACN,MAAMmf,IACN,QACKnQ,GACLrU,EAAQnN,gBAAgB,OAM5B,MAAO+wB,GAAW7jB,EAAUC,EAASqF,EAASkU,EAAM7U,IAGhDpQ,IACJgsB,GAAO,SAAUnX,GAGhBwa,EAAoBrvB,EAAQxJ,KAAMqe,EAAK,MAIvC,KACC7U,EAAQxJ,KAAMqe,EAAK,qBACnB6a,EAAc14B,KAAM,KAAMm0B,GACzB,MAAQ7wB,OAIXo1B,EAA8C,GAAIpQ,QAAQoQ,EAAc34B,KAAK,MAE7EiuB,EAAOuH,gBAAkB,SAAU1yB,EAAMilB,GAKxC,GAHAA,EAAOA,EAAK1pB,QAASo6B,EAAkB,WAGjCrK,EAAOtrB,KAAW61B,EAAcv6B,KAAM2pB,KAAW2Q,EAAUt6B,KAAM2pB,GACtE,IACC,GAAI1Q,GAAMpO,EAAQxJ,KAAMqD,EAAMilB,EAG9B,IAAK1Q,GAAOihB,GAGVx1B,EAAKiC,UAAuC,KAA3BjC,EAAKiC,SAAS/B,SAChC,MAAOqU,GAEP,MAAM9T,IAGT,MAAO0qB,GAAQlG,EAAM,KAAM,MAAQjlB,IAAS5D,OAAS,OAOzDswB,EAAK4E,QAAa,IAAI5E,EAAK4E,QAAY,GAIvC5E,EAAK4J,QAAUjG,EAAWrzB,UAAY0vB,EAAK4E,QAC3C5E,EAAK2D,WAAa,GAAIA,GAGtBlF,EAAOvX,KAAOnU,EAAOmU,KACrBnU,EAAOgU,KAAO0X,EACd1rB,EAAOwlB,KAAOkG,EAAO6H,UACrBvzB,EAAOwlB,KAAK,KAAOxlB,EAAOwlB,KAAKqM,QAC/B7xB,EAAOuZ,OAASmS,EAAO6E,WACvBvwB,EAAOZ,KAAOssB,EAAOoF,QACrB9wB,EAAOiiB,SAAWyJ,EAAOG,MACzB7rB,EAAOgG,SAAW0lB,EAAO1lB,UAGrBrG,EACJ,IAAIm3B,IAAS,SACZC,GAAe,iCACf30B,GAAW,iBACX40B,GAAgBh3B,EAAOwlB,KAAK3R,MAAM0R,aAElC0R,IACCC,UAAU,EACVxsB,UAAU,EACV8U,MAAM,EACNlU,MAAM,EAGRtL,GAAOqS,GAAGpO,QACT+P,KAAM,SAAU7B,GACf,GAAI3V,GAAGiH,EAAG9G,EAAQnB,EAAG27B,EAAGriB,EACvBuE,EAAOxb,IAER,IAAyB,gBAAbsU,GACX,MAAOnS,GAAQmS,GAAW9P,OAAO,WAChC,IAAM7F,EAAI,EAAGiH,EAAI4V,EAAK1c,OAAY8G,EAAJjH,EAAOA,IACpC,GAAKwD,EAAOgG,SAAUqT,EAAM7c,GAAKqB,MAChC,OAAO,GAQX,KAFAiX,EAAMjX,KAAK+W,UAAW,GAAI,OAAQzC,GAE5B3V,EAAI,EAAGiH,EAAI5F,KAAKlB,OAAY8G,EAAJjH,EAAOA,IAIpC,GAHAG,EAASmY,EAAInY,OACbqD,EAAOgU,KAAM7B,EAAUtU,KAAKrB,GAAIsY,GAE3BtY,EAAI,EAER,IAAMhB,EAAImB,EAAQnB,EAAIsZ,EAAInY,OAAQnB,IACjC,IAAM27B,EAAI,EAAOx6B,EAAJw6B,EAAYA,IACxB,GAAKriB,EAAIqiB,KAAOriB,EAAItZ,GAAK,CACxBsZ,EAAItJ,OAAOhQ,IAAK,EAChB,OAOL,MAAOsZ,IAGR0E,IAAK,SAAUxP,GACd,GAAIxN,GACH46B,EAAUp3B,EAAQgK,EAAQnM,MAC1B6Z,EAAM0f,EAAQz6B,MAEf,OAAOkB,MAAKwE,OAAO,WAClB,IAAM7F,EAAI,EAAOkb,EAAJlb,EAASA,IACrB,GAAKwD,EAAOgG,SAAUnI,KAAMu5B,EAAQ56B,IACnC,OAAO,KAMX83B,IAAK,SAAUniB,GACd,MAAOtU,MAAK+W,UAAWhT,EAAO/D,KAAMsU,GAAU,GAAQ,MAAOA,IAG9D9P,OAAQ,SAAU8P,GACjB,MAAOtU,MAAK+W,UAAWhT,EAAO/D,KAAMsU,GAAU,GAAO,SAAUA,IAGhEklB,GAAI,SAAUllB,GACb,QAASA,IACY,gBAAbA,GAGN6kB,GAAcn7B,KAAMsW,GACnBnS,EAAQmS,EAAUtU,KAAKuU,SAAU/L,MAAOxI,KAAK,KAAQ,EACrDmC,EAAOqC,OAAQ8P,EAAUtU,MAAOlB,OAAS,EAC1CkB,KAAKwE,OAAQ8P,GAAWxV,OAAS,IAGpC26B,QAAS,SAAU/D,EAAWnhB,GAS7B,IARA,GAAI1Q,GACHlF,EAAI,EACJiH,EAAI5F,KAAKlB,OACTmY,KACAgd,EAAMkF,GAAcn7B,KAAM03B,IAAoC,gBAAdA,GAC/CvzB,EAAQuzB,EAAWnhB,GAAWvU,KAAKuU,SACnC,EAEU3O,EAAJjH,EAAOA,IAGd,IAFAkF,EAAM7D,KAAKrB,GAEHkF,GAAOA,EAAIyB,eAAiBzB,IAAQ0Q,GAA4B,KAAjB1Q,EAAIjB,UAAkB,CAC5E,GAAKqxB,EAAMA,EAAIzrB,MAAM3E,GAAO,GAAK1B,EAAOgU,KAAKif,gBAAgBvxB,EAAK6xB,GAAa,CAC9Eze,EAAIpX,KAAMgE,EACV,OAEDA,EAAMA,EAAIF,WAMZ,MAFAsT,GAAMA,EAAInY,OAAS,EAAIqD,EAAOuZ,OAAQzE,GAAQA,EAEvCjX,KAAK+W,UAAWE,EAAK,UAAWye,IAKxCltB,MAAO,SAAU9F,GAGhB,MAAMA,GAKe,gBAATA,GACJP,EAAOsC,QAASzE,KAAK,GAAImC,EAAQO,IAIlCP,EAAOsC,QAEb/B,EAAKwT,OAASxT,EAAK,GAAKA,EAAM1C,MAXrBA,KAAK,IAAMA,KAAK,GAAG2D,WAAe3D,KAAK05B,UAAU56B,OAAS,IAcrEqH,IAAK,SAAUmO,EAAUC,GACxB,GAAIqP,GAA0B,gBAAbtP,GACfnS,EAAQmS,EAAUC,GAClBpS,EAAOuU,UAAWpC,GAAYA,EAAS1R,UAAa0R,GAAaA,GAClEgB,EAAMnT,EAAOoU,MAAOvW,KAAK6W,MAAO+M,EAEjC,OAAO5jB,MAAK+W,UAAWtT,EAAgBmgB,EAAI,KAAQngB,EAAgB6R,EAAI,IACtEA,EACAnT,EAAOuZ,OAAQpG,KAGjBqkB,QAAS,SAAUrlB,GAClB,MAAOtU,MAAKmG,IAAiB,MAAZmO,EAChBtU,KAAKkX,WAAalX,KAAKkX,WAAW1S,OAAO8P,OAK5CnS,EAAOqS,GAAGolB,QAAUz3B,EAAOqS,GAAGmlB,QAgB9Bx3B,EAAOC,MACN6jB,OAAQ,SAAUvjB,GACjB,GAAIujB,GAASvjB,EAAKiB,UAClB,OAAOsiB,IAA8B,KAApBA,EAAOrjB,SAAkBqjB,EAAS,MAEpD4T,QAAS,SAAUn3B,GAClB,MAAOP,GAAO2B,IAAKpB,EAAM,eAE1Bo3B,aAAc,SAAUp3B,EAAM/D,EAAGo7B,GAChC,MAAO53B,GAAO2B,IAAKpB,EAAM,aAAcq3B,IAExCpY,KAAM,SAAUjf,GACf,MAAOkB,GAASlB,EAAM,gBAEvB+K,KAAM,SAAU/K,GACf,MAAOkB,GAASlB,EAAM,oBAEvBs3B,QAAS,SAAUt3B,GAClB,MAAOP,GAAO2B,IAAKpB,EAAM,gBAE1Bg3B,QAAS,SAAUh3B,GAClB,MAAOP,GAAO2B,IAAKpB,EAAM,oBAE1Bu3B,UAAW,SAAUv3B,EAAM/D,EAAGo7B,GAC7B,MAAO53B,GAAO2B,IAAKpB,EAAM,cAAeq3B,IAEzCG,UAAW,SAAUx3B,EAAM/D,EAAGo7B,GAC7B,MAAO53B,GAAO2B,IAAKpB,EAAM,kBAAmBq3B,IAE7CI,SAAU,SAAUz3B,GACnB,MAAOP,GAAOyB,SAAWlB,EAAKiB,gBAAmBma,WAAYpb,IAE9D22B,SAAU,SAAU32B,GACnB,MAAOP,GAAOyB,QAASlB,EAAKob,aAE7BjR,SAAU,SAAUnK,GACnB,MAAOP,GAAOmE,SAAU5D,EAAM,UAC7BA,EAAK+H,iBAAmB/H,EAAK8H,cAAc7F,SAC3CxC,EAAOoU,SAAW7T,EAAKoW,cAEvB,SAAUjW,EAAM2R,GAClBrS,EAAOqS,GAAI3R,GAAS,SAAUk3B,EAAOzlB,GACpC,GAAI2C,GAAM9U,EAAOsV,IAAKzX,KAAMwU,EAAIulB,EAgBhC,OAdMd,IAAOj7B,KAAM6E,KAClByR,EAAWylB,GAGPzlB,GAAgC,gBAAbA,KACvB2C,EAAM9U,EAAOqC,OAAQ8P,EAAU2C,IAGhCA,EAAMjX,KAAKlB,OAAS,IAAMs6B,GAAkBv2B,GAASV,EAAOuZ,OAAQzE,GAAQA,EAEvEjX,KAAKlB,OAAS,GAAKo6B,GAAal7B,KAAM6E,KAC1CoU,EAAMA,EAAImjB,WAGJp6B,KAAK+W,UAAWE,EAAKpU,EAAMmR,EAAW3U,KAAMmY,WAAY5X,KAAK,SAItEuC,EAAOiE,QACN5B,OAAQ,SAAUmjB,EAAM3Q,EAAOyf,GAK9B,MAJKA,KACJ9O,EAAO,QAAUA,EAAO,KAGD,IAAjB3Q,EAAMlY,OACZqD,EAAOgU,KAAKif,gBAAgBpe,EAAM,GAAI2Q,IAAU3Q,EAAM,OACtD7U,EAAOgU,KAAKtN,QAAQ8e,EAAM3Q,IAG5BlT,IAAK,SAAUpB,EAAMoB,EAAKi2B,GAIzB,IAHA,GAAIrQ,MACH7lB,EAAMnB,EAAMoB,GAELD,GAAwB,IAAjBA,EAAIjB,WAAmBm3B,IAAUr4B,GAA8B,IAAjBmC,EAAIjB,WAAmBT,EAAQ0B,GAAM21B,GAAIO,KAC/E,IAAjBl2B,EAAIjB,UACR8mB,EAAQ7pB,KAAMgE,GAEfA,EAAMA,EAAIC,EAEX,OAAO4lB,IAGR9lB,QAAS,SAAUjG,EAAG+E,GAGrB,IAFA,GAAI42B,MAEI37B,EAAGA,EAAIA,EAAEgxB,YACI,IAAfhxB,EAAEiF,UAAkBjF,IAAM+E,GAC9B42B,EAAEz5B,KAAMlC,EAIV,OAAO27B,KAoDT,IAAIz0B,IAAY,6JAEfw1B,GAAgB,6BAChBC,GAAqB,OACrBC,GAAY,0EACZC,GAAW,YACXC,GAAS,UACTC,GAAQ,YACRC,GAAe,0BACfC,GAAW,yCACXC,GAAe,GAAI1S,QAAO,OAAStjB,GAAY,WAAY,KAC3DiC,GAAiB,uBAEjBg0B,GAAW,oCACXC,GAAc,uBACdC,GAAe,2CACfC,IACCpX,QAAU,EAAG,+BAAgC,aAC7CqX,QAAU,EAAG,aAAc,eAC3BC,OAAS,EAAG,UAAW,YACvBC,IAAM,EAAG,iBAAkB,oBAC3BC,IAAM,EAAG,qBAAsB,yBAC/BC,KAAO,EAAG,mCAAoC,uBAC9CC,MAAQ,EAAG,QAAS,UACpBhS,UAAY,EAAG,GAAI,KAEpBiS,GAAe92B,EAAoBC,GACnC82B,GAAcD,GAAan2B,YAAaV,EAASK,cAAc,OAEhEi2B,IAAQS,SAAWT,GAAQpX,OAC3BoX,GAAQld,MAAQkd,GAAQU,MAAQV,GAAQW,SAAWX,GAAQY,QAAUZ,GAAQE,MAC7EF,GAAQa,GAAKb,GAAQI,GAIfl5B,EAAOuE,QAAQsX,gBACpBid,GAAQ1R,UAAa,EAAG,SAAU,WAGnCpnB,EAAOqS,GAAGpO,QACT7E,KAAM,SAAUrC,GACf,MAAOiD,GAAOgY,OAAQna,KAAM,SAAUd,GACrC,MAAOA,KAAUwC,EAChBS,EAAOZ,KAAMvB,MACbA,KAAKkS,QAAQ6pB,QAAU/7B,KAAK,IAAMA,KAAK,GAAGsF,eAAiBX,GAAWq3B,eAAgB98B,KACrF,KAAMA,EAAOsY,UAAU1Y,SAG3Bm9B,QAAS,SAAUC,GAClB,GAAK/5B,EAAOgC,WAAY+3B,GACvB,MAAOl8B,MAAKoC,KAAK,SAASzD,GACzBwD,EAAOnC,MAAMi8B,QAASC,EAAK78B,KAAKW,KAAMrB,KAIxC,IAAKqB,KAAK,GAAK,CAEd,GAAIm8B,GAAOh6B,EAAQ+5B,EAAMl8B,KAAK,GAAGsF,eAAgB+R,GAAG,GAAGQ,OAAM,EAExD7X,MAAK,GAAG2D,YACZw4B,EAAKnc,aAAchgB,KAAK,IAGzBm8B,EAAK1kB,IAAI,WAGR,IAFA,GAAI/U,GAAO1C,KAEH0C,EAAKob,YAA2C,IAA7Bpb,EAAKob,WAAWlb,UAC1CF,EAAOA,EAAKob,UAGb,OAAOpb,KACLq5B,OAAQ/7B,MAGZ,MAAOA,OAGRo8B,UAAW,SAAUF,GACpB,MACQl8B,MAAKoC,KADRD,EAAOgC,WAAY+3B,GACN,SAASv9B,GACzBwD,EAAOnC,MAAMo8B,UAAWF,EAAK78B,KAAKW,KAAMrB,KAIzB,WAChB,GAAI6c,GAAOrZ,EAAQnC,MAClB6M,EAAW2O,EAAK3O,UAEZA,GAAS/N,OACb+N,EAASovB,QAASC,GAGlB1gB,EAAKugB,OAAQG,MAKhBC,KAAM,SAAUD,GACf,GAAI/3B,GAAahC,EAAOgC,WAAY+3B,EAEpC,OAAOl8B,MAAKoC,KAAK,SAASzD,GACzBwD,EAAQnC,MAAOi8B,QAAS93B,EAAa+3B,EAAK78B,KAAKW,KAAMrB,GAAKu9B,MAI5DG,OAAQ,WACP,MAAOr8B,MAAKimB,SAAS7jB,KAAK,WACnBD,EAAOmE,SAAUtG,KAAM,SAC5BmC,EAAQnC,MAAOs8B,YAAat8B,KAAK8Y,cAEhC1I,OAGJ2rB,OAAQ,WACP,MAAO/7B,MAAKu8B,SAAS/kB,WAAW,EAAM,SAAU9U,IACxB,IAAlB1C,KAAK4C,UAAoC,KAAlB5C,KAAK4C,WAChC5C,KAAKqF,YAAa3C,MAKrB85B,QAAS,WACR,MAAOx8B,MAAKu8B,SAAS/kB,WAAW,EAAM,SAAU9U,IACxB,IAAlB1C,KAAK4C,UAAoC,KAAlB5C,KAAK4C,WAChC5C,KAAKggB,aAActd,EAAM1C,KAAK8d,eAKjC2e,OAAQ,WACP,IAAMh5B,EAAgBzD,KAAK,IAC1B,MAAOA,MAAKu8B,SAAS/kB,WAAW,EAAO,SAAU9U,GAChD1C,KAAK2D,WAAWqc,aAActd,EAAM1C,OAItC,IAAKwX,UAAU1Y,OAAS,CACvB,GAAI8kB,GAAMzhB,EAAOu6B,MAAOllB,UACxB,OAAOxX,MAAK+W,UAAW5U,EAAOoU,MAAOqN,EAAK5jB,MAAQ,SAAUA,KAAKsU,YAInEqoB,MAAO,WACN,IAAMl5B,EAAgBzD,KAAK,IAC1B,MAAOA,MAAKu8B,SAAS/kB,WAAW,EAAO,SAAU9U,GAChD1C,KAAK2D,WAAWqc,aAActd,EAAM1C,KAAK2uB,cAI3C,IAAKnX,UAAU1Y,OAAS,CACvB,GAAI8kB,GAAMzhB,EAAOu6B,MAAOllB,UACxB,OAAOxX,MAAK+W,UAAW5U,EAAOoU,MAAOvW,KAAM4jB,GAAO,QAAS5jB,KAAKsU,YAKlEpK,OAAQ,SAAUoK,EAAUsoB,GAI3B,IAHA,GAAIl6B,GACH/D,EAAI,EAEuB,OAAnB+D,EAAO1C,KAAKrB,IAAaA,MAC3B2V,GAAYnS,EAAOqC,OAAQ8P,GAAY5R,IAAS5D,UAC/C89B,GAA8B,IAAlBl6B,EAAKE,WACtBT,EAAOgf,UAAWze,EAAK0C,qBAAqB,MAC5CjD,EAAOgf,WAAaze,KAGhBA,EAAKiB,YACTjB,EAAKiB,WAAWiH,YAAalI,GAKhC,OAAO1C,OAGRkS,MAAO,WAIN,IAHA,GAAIxP,GACH/D,EAAI,EAEuB,OAAnB+D,EAAO1C,KAAKrB,IAAaA,IAOjC,IALuB,IAAlB+D,EAAKE,UACTT,EAAOgf,UAAWze,EAAK0C,qBAAqB,MAIrC1C,EAAKob,YACZpb,EAAKkI,YAAalI,EAAKob,WAIzB,OAAO9d,OAGR6X,MAAO,SAAUglB,EAAeC,GAI/B,MAHAD,GAAiC,MAAjBA,GAAwB,EAAQA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzD98B,KAAKyX,IAAK,WAChB,MAAOtV,GAAO0V,MAAO7X,KAAM68B,EAAeC,MAI5CZ,KAAM,SAAUh9B,GACf,MAAOiD,GAAOgY,OAAQna,KAAM,SAAUd,GACrC,GAAIwD,GAAO1C,KAAK,OACfrB,EAAI,EACJiH,EAAI5F,KAAKlB,MAEV,IAAKI,IAAUwC,EACd,MAAyB,KAAlBgB,EAAKE,SACXF,EAAKkE,UAAU3I,QAASo8B,GAAe,IACvC34B,CAIF,MAAsB,gBAAVxC,IAAuBy7B,GAAa38B,KAAMkB,KACnDiD,EAAOuE,QAAQsX,eAAkB6c,GAAa78B,KAAMkB,KACpDiD,EAAOuE,QAAQmX,mBAAsByc,GAAmBt8B,KAAMkB,IAC/D+7B,IAAWT,GAASzxB,KAAM7J,KAAY,GAAI,KAAM,GAAG6D,gBAAkB,CAEtE7D,EAAQA,EAAMjB,QAASs8B,GAAW,YAElC,KACC,KAAW30B,EAAJjH,EAAOA,IAEb+D,EAAO1C,KAAKrB,OACW,IAAlB+D,EAAKE,WACTT,EAAOgf,UAAWze,EAAK0C,qBAAsB,MAC7C1C,EAAKkE,UAAY1H,EAInBwD,GAAO,EAGN,MAAMS,KAGJT,GACJ1C,KAAKkS,QAAQ6pB,OAAQ78B,IAEpB,KAAMA,EAAOsY,UAAU1Y,SAG3Bw9B,YAAa,SAAUp9B,GACtB,MAAMuE,GAAgBzD,KAAK,IA4BpBA,KAAKlB,OACXkB,KAAK+W,UAAW5U,EAAOA,EAAOgC,WAAWjF,GAASA,IAAUA,GAAQ,cAAeA,GACnFc,KA3BKmC,EAAOgC,WAAYjF,GAChBc,KAAKoC,KAAK,SAASzD,GACzB,GAAI6c,GAAOrZ,EAAOnC,MAAO4oB,EAAMpN,EAAK0gB,MACpC1gB,GAAK8gB,YAAap9B,EAAMG,KAAMW,KAAMrB,EAAGiqB,OAInB,gBAAV1pB,KACXA,EAAQiD,EAAQjD,GAAQ69B,UAGlB/8B,KAAKoC,KAAK,WAChB,GAAIuf,GAAO3hB,KAAK2uB,YACf1I,EAASjmB,KAAK2D,UAEfxB,GAAQnC,MAAOkK,SAEVyX,EACJxf,EAAOwf,GAAM8a,OAAQv9B,GAErBiD,EAAO8jB,GAAQ8V,OAAQ78B,OAU3B69B,OAAQ,SAAUzoB,GACjB,MAAOtU,MAAKkK,OAAQoK,GAAU,IAG/BioB,SAAU,SAAUnlB,EAAM4lB,EAAO7lB,GAGhCC,KAAUxI,OAAOjP,SAAWyX,EAE5B,IAAIwC,GAAStC,EAAOuB,EAAUokB,EAC7Bt+B,EAAI,EACJO,EAAQkY,EAAK,GACbqB,KACA7S,EAAI5F,KAAKlB,MAGV,KAAMqD,EAAOuE,QAAQ6Y,YAAc3Z,EAAI,GAAsB,gBAAV1G,IAAsB47B,GAAS98B,KAAMkB,GACvF,MAAOc,MAAKoC,KAAK,WAChBD,EAAOnC,MAAMu8B,SAAUnlB,EAAM4lB,EAAO7lB,IAItC,IAAKhV,EAAOgC,WAAWjF,GACtB,MAAOc,MAAKoC,KAAK,SAASzD,GACzB,GAAI6c,GAAOrZ,EAAOnC,KAClBoX,GAAK,GAAKlY,EAAMG,KAAMW,KAAMrB,EAAGq+B,EAAQxhB,EAAK0gB,OAASx6B,GACrD8Z,EAAK+gB,SAAUnlB,EAAM4lB,EAAO7lB,IAI9B,IAAKnX,KAAK,GAAK,CASd,GARA4Z,EAAUzX,EAAOwW,cAAevB,EAAMpX,KAAMyY,GAC5CI,EAAWe,EAAQf,SACnBvB,EAAQuB,EAASiF,WAEmB,IAA/BjF,EAASC,WAAWha,SACxB+Z,EAAWvB,GAGPA,EAMJ,IALA0lB,EAAQA,GAAS76B,EAAOmE,SAAUgR,EAAO,MAKnC2lB,EAAWrjB,EAAQhB,WAAahT,EAAI,EAAOA,EAAJjH,EAAOA,IACnDwY,EAAS9X,KACR29B,GAAS76B,EAAOmE,SAAUtG,KAAKrB,GAAI,SAClCuG,EAAclF,KAAKrB,GAAI,SACvBqB,KAAKrB,GACNA,IAAMs+B,EACLpkB,EACA1W,EAAO0V,MAAOgB,GAAU,GAAM,GAMlCA,GAAWvB,EAAQ,KAEdmB,EAAQ3Z,QACZqD,EAAOC,KAAMqW,EAAS,SAAU9Z,EAAG+D,GAC7BA,EAAK8C,IACJrD,EAAO+6B,KACX/6B,EAAO+6B,MACNC,IAAKz6B,EAAK8C,IACVG,KAAM,MACN2F,SAAU,SACV8N,OAAO,EACP2O,QAAQ,EACRqV,UAAU,IAGXj7B,EAAO0L,MAAM,WAGd1L,EAAOqX,YAAc9W,EAAKnB,MAAQmB,EAAK2yB,aAAe3yB,EAAKkE,WAAa,IAAK3I,QAAS+8B,GAAc,KAGhGt4B,EAAKiB,YACTjB,EAAKiB,WAAWiH,YAAalI,KAMjC,MAAO1C,SA0GTmC,EAAOwW,cAAgB,SAAUvB,EAAM7C,EAASkE,GAC/C,GAAII,GAAUD,EAAWykB,EACxB/lB,EAAQF,EAAM,EAoCf,OA/BA7C,GAAUA,GAAW5P,EACrB4P,GAAWA,EAAQ3R,UAAY2R,EAAQ,IAAMA,EAC7CA,EAAUA,EAAQjP,eAAiBiP,IAOd,IAAhB6C,EAAKtY,QAAiC,gBAAVwY,IAAsBA,EAAMxY,OAAS,KAAOyV,IAAY5P,GACpE,MAApB2S,EAAM1P,OAAO,KAAegzB,GAAS58B,KAAMsZ,KAC1CnV,EAAOuE,QAAQ6Y,YAAeub,GAAS98B,KAAMsZ,KAC7CnV,EAAOuE,QAAQC,YAAek0B,GAAa78B,KAAMsZ,KAGlDsB,GAAY,EACZC,EAAW1W,EAAOm7B,UAAWhmB,GAC7B+lB,EAAWxkB,IAAanX,GAGnBmX,IACLA,EAAWtE,EAAQxP,yBACnB5C,EAAOu6B,MAAOtlB,EAAM7C,EAASsE,EAAUJ,GAIlCG,IACJzW,EAAOm7B,UAAWhmB,GAAU+lB,GAAYxkB,KAIjCA,SAAUA,EAAUD,UAAWA,IAGzCzW,EAAOm7B,aAEPn7B,EAAOC,MACN4H,SAAU,SACVuzB,UAAW,UACXvd,aAAc,SACdwd,YAAa,QACbC,WAAY,eACV,SAAU56B,EAAMynB,GAClBnoB,EAAOqS,GAAI3R,GAAS,SAAUyR,GAC7B,GAAI0C,GACHrY,EAAI,EACJsY,KACAymB,EAASv7B,EAAQmS,GACjB1O,EAAI83B,EAAO5+B,OACXmnB,EAAyB,IAAhBjmB,KAAKlB,QAAgBkB,KAAK,GAAG2D,UAEvC,KAAgB,MAAVsiB,GAAkBA,GAA8B,KAApBA,EAAOrjB,UAAgD,IAA7BqjB,EAAOnN,WAAWha,SAAuB,IAAN8G,EAE9F,MADA83B,GAAQpT,GAAYtqB,KAAK,IAClBA,IAEP,MAAY4F,EAAJjH,EAAOA,IACdqY,GAAUrY,EAAI,EAAIqB,KAAK6X,OAAM,GAAQ7X,MAAO6W,MAC5C1U,EAAQu7B,EAAO/+B,IAAM2rB,GAAYtT,GACjCC,EAAMA,EAAIrI,OAAQoI,EAGnB,OAAOhX,MAAK+W,UAAWE,EAAKpU,EAAM66B,EAAOppB,aAwB5CnS,EAAOiE,QACNyR,MAAO,SAAUnV,EAAMm6B,EAAeC,GACrC,GAAIa,GACHC,EACAj/B,EACAkZ,CAWD,IATK1V,EAAOuE,QAAQC,YAAcxE,EAAOiiB,SAAS1hB,KAAUm4B,GAAa78B,KAAM,IAAM0E,EAAK4D,SAAW,KACpGuR,EAAQnV,EAAK8b,WAAW,IAIxBid,GAAY70B,UAAYlE,EAAK+D,UAC7Bg1B,GAAY7wB,YAAaiN,EAAQ4jB,GAAY3d,eAGvC3b,EAAOuE,QAAQqY,cAAiB5c,EAAOuE,QAAQwY,gBACjC,IAAlBxc,EAAKE,UAAoC,KAAlBF,EAAKE,UAAqBT,EAAOiiB,SAAS1hB,IAgBnE,IATA2D,EAAoB3D,EAAMmV,GAG1B8lB,EAAcr2B,EAAQ5E,GACtBk7B,EAAet2B,EAAQuQ,GAKjBlZ,EAAI,EAAGg/B,EAAYh/B,KAAMA,EAEzBi/B,EAAaj/B,IACjB0H,EAAoBs3B,EAAYh/B,GAAIi/B,EAAaj/B,GAMpD,IAAKk+B,IACJt3B,EAAgB7C,EAAMmV,GAEjBilB,GAIJ,IAHAa,EAAcr2B,EAAQ5E,GACtBk7B,EAAet2B,EAAQuQ,GAEjBlZ,EAAI,EAAGg/B,EAAYh/B,KAAMA,EAC9B4G,EAAgBo4B,EAAYh/B,GAAIi/B,EAAaj/B,GAQhD,OAHAg/B,GAAcC,EAAe,KAGtB/lB,GAGR6kB,MAAO,SAAU1lB,EAAOzC,EAASsE,EAAUJ,GAC1C,GAAI9Z,GAAGgD,EAAGe,EAAMyC,EAAKg3B,EAAM0B,EAAOngB,EAAKogB,EAAS/f,EAAYggB,EAAcC,EACzEC,EAAO1pB,IAAY5P,GAAY62B,GAC/BvkB,IAQD,KALM1C,GAAqD,mBAAnCA,GAAQxP,yBAC/BwP,EAAU5P,GAILhG,EAAI,EAAwB,OAApB+D,EAAOsU,EAAMrY,IAAaA,IAKvC,GAJqB,gBAAT+D,KACXA,GAAQ,IAGHA,EAAN,CAKA,GAAqB,gBAATA,GACX,GAAMg4B,GAAM18B,KAAM0E,GAEX,CAgBN,IAdAu7B,EAAOA,GAAQv5B,EAAoB6P,GACnCmJ,EAAMnJ,EAAQvP,cAAc,OAC5Bi5B,EAAK54B,YAAaqY,GAGlBhb,EAAOA,EAAKzE,QAAQs8B,GAAW,aAG/Bp1B,GAAQq1B,GAASzxB,KAAMrG,KAAW,GAAI,KAAM,GAAGK,cAC/Co5B,EAAOlB,GAAS91B,IAAS81B,GAAQ1R,SACjCsU,EAAQ1B,EAAK,GACbze,EAAI9W,UAAYu1B,EAAK,GAAKz5B,EAAOy5B,EAAK,GAG9B0B,KACPngB,EAAMA,EAAI4B,SAIX,KAAMnd,EAAOuE,QAAQqX,MAYpB,IATA+f,EAAUrD,GAAOz8B,KAAK0E,GACrBqb,EAAgB,UAAR5Y,GAAoB24B,EAIf,YAAZ3B,EAAK,IAAqB2B,KACzBpgB,EAAI5E,WAJL4E,EAAII,YAAcJ,EAAII,WAAWhF,WAO7BnX,EAAIoc,EAAMjf,OAAS,EAAG6C,GAAK,IAAMA,EACjCQ,EAAOmE,SAAUyX,EAAOpc,GAAK,WAAcoc,EAAOpc,GAAImX,WAAWha,QACrEif,EAAOpc,GAAIgC,WAAWiH,YAAamT,EAAOpc,KAMvCQ,EAAOuE,QAAQmX,mBAAqByc,GAAmBt8B,KAAM0E,IAClEgb,EAAIsC,aAAczL,EAAQynB,eAAgB1B,GAAmBvxB,KAAKrG,GAAM,IAAMgb,EAAII,YAGnFpb,EAAOgb,EAAI5E,WAGX4E,EAAI/Z,WAAWiH,YAAa8S,OAjD5Bhb,GAAO6R,EAAQynB,eAAgBt5B,EAqD5BA,GAAKE,SACTqU,EAAIpX,KAAM6C,GAEVP,EAAOoU,MAAOU,EAAKvU,GAWrB,GANKgb,IACJhb,EAAOgb,EAAMugB,EAAO,OAKf97B,EAAOuE,QAAQ8Y,cACpB,IAAM7gB,EAAI,EAAsB,OAAlB+D,EAAOuU,EAAItY,IAAaA,IAChCwD,EAAOmE,SAAU5D,EAAM,SAC3B8E,EAAmB9E,GAC6B,mBAA9BA,GAAK0C,sBACvBjD,EAAOiC,KAAM1B,EAAK0C,qBAAqB,SAAUoC,EAMpD,IAAKqR,EAaJ,IAXAklB,EAAe,SAAUr7B,GAExB,OAAMA,EAAKiD,MAAQo1B,GAAY/8B,KAAM0E,EAAKiD,MAGlC8S,EACNA,EAAQ5Y,KAAM6C,EAAKiB,WAAajB,EAAKiB,WAAWiH,YAAalI,GAASA,GACtEmW,EAASxT,YAAa3C,GALxB,QASK/D,EAAI,EAAsB,OAAlB+D,EAAOuU,EAAItY,IAAaA,IAE7BwD,EAAOmE,SAAU5D,EAAM,WAAcq7B,EAAcr7B,KAE1DmW,EAASxT,YAAa3C,GACoB,mBAA9BA,GAAK0C,uBAEhB44B,EAAS77B,EAAOiC,KAAMjC,EAAOoU,SAAW7T,EAAK0C,qBAAqB,WAAa24B,GAG/E9mB,EAAItJ,OAAOhO,MAAOsX,GAAMtY,EAAI,EAAG,GAAGiQ,OAAQovB,IAC1Cr/B,GAAKq/B,EAAOl/B,QAMhB,OAAOmY,IAGRkK,UAAW,SAAUnK,EAAsB8J,GAQ1C,IAPA,GAAIne,GAAM8T,EAAI/T,EAAMiD,EACnBhH,EAAI,EACJqiB,EAAc7e,EAAOkF,QACrBiZ,EAAQne,EAAOme,MACfxB,EAAgB3c,EAAOuE,QAAQoY,cAC/B2H,EAAUtkB,EAAO+D,MAAMugB,QAEK,OAApB/jB,EAAOsU,EAAMrY,IAAaA,IAElC,IAAKmiB,GAAc3e,EAAO2e,WAAYpe,MAErC+T,EAAK/T,EAAMse,GACXre,EAAO8T,GAAM6J,EAAO7J,IAER,CACX,GAAK9T,EAAKqD,OACT,IAAML,IAAQhD,GAAKqD,OACbygB,EAAS9gB,GACbxD,EAAO+D,MAAMgE,OAAQxH,EAAMiD,GAI3BxD,EAAOkmB,YAAa3lB,EAAMiD,EAAMhD,EAAKsD,OAMnCqa,GAAO7J,WAEJ6J,GAAO7J,GAKTqI,QACGpc,GAAMse,GAEFte,EAAK0E,gBAChB1E,EAAK0E,gBAAiB4Z,GAGtBte,EAAMse,GAAgB,KAGvB7e,EAAOoe,WAAW1gB,KAAM4W,QAQ9B,WAEA,GAAIiT,GAASwU,CAKb/7B,GAAOg8B,QAAU,SAAUC,GAC1BA,EAAKA,EAAGr7B,aAER,IAAIiT,GAAQ,wBAAwBjN,KAAMq1B,IACzC,wBAAwBr1B,KAAMq1B,IAC9B,qCAAqCr1B,KAAMq1B,IAC3C,kBAAkBr1B,KAAMq1B,IACxBA,EAAGlqB,QAAQ,cAAgB,GAAK,gCAAgCnL,KAAMq1B,MAGvE,QACCF,QAASloB,EAAO,IAAO,GACvBqoB,QAASroB,EAAO,IAAO,MAIzB0T,EAAUvnB,EAAOg8B,QAASzqB,EAAU4qB,WACpCJ,KAEKxU,EAAQwU,UACZA,EAASxU,EAAQwU,UAAY,EAC7BA,EAAQG,QAAU3U,EAAQ2U,SAItBH,EAAQK,OACZL,EAAQM,QAAS,EACNN,EAAQM,SACnBN,EAAQO,QAAS,GAGlBt8B,EAAO+7B,QAAUA,EAEjB/7B,EAAOu8B,IAAM,WACZ,QAASC,GAAWrqB,EAAUC,GAC7B,MAAO,IAAIoqB,GAAUnqB,GAAG3B,KAAMyB,EAAUC,GAEzCpS,EAAOiE,QAAQ,EAAMu4B,EAAW3+B,MAChC2+B,EAAUC,WAAa5+B,KACvB2+B,EAAUnqB,GAAKmqB,EAAUj/B,UAAYM,OACrC2+B,EAAUnqB,GAAGuB,YAAc4oB,EAC3BA,EAAUD,IAAM1+B,KAAK0+B,IACrBC,EAAUnqB,GAAG3B,KAAO,SAAeyB,EAAUC,GAK5C,MAJKA,IAAWA,YAAmBpS,MAAYoS,YAAmBoqB,MACjEpqB,EAAUoqB,EAAWpqB,IAGfpS,EAAOqS,GAAG3B,KAAKxT,KAAMW,KAAMsU,EAAUC,EAASsqB,IAEtDF,EAAUnqB,GAAG3B,KAAKnT,UAAYi/B,EAAUnqB,EACxC,IAAIqqB,GAAgBF,EAAUh6B,EAC9B,OAAOg6B,MAIR,IAAIj2B,IAAQyB,GAAQI,GACnBu0B,GAAS,kBACTC,GAAW,kBACXC,GAAY,4BAGZC,GAAe,4BACfC,GAAU,UACVp2B,GAAY,GAAIqf,QAAQ,KAAO1T,EAAY,SAAU,KACrD5K,GAAY,GAAIse,QAAQ,KAAO1T,EAAY,kBAAmB,KAC9D0qB,GAAU,GAAIhX,QAAQ,YAAc1T,EAAY,IAAK,KACrD1K,IAAgBq1B,KAAM,SAEtBC,IAAYC,SAAU,WAAYC,WAAY,SAAUj3B,QAAS,SACjEk3B,IACCC,cAAe,EACfC,WAAY,KAGbp2B,IAAc,MAAO,QAAS,SAAU,QACxCvB,IAAgB,SAAU,IAAK,MAAO,MAEtC43B,GAAex9B,EAAOqS,GAAG7C,MA+E1BxP,GAAOqS,GAAGpO,QACT8B,IAAK,SAAUrF,EAAM3D,GACpB,MAAOiD,GAAOgY,OAAQna,KAAM,SAAU0C,EAAMG,EAAM3D,GACjD,MAAOA,KAAUwC,EAChBS,EAAOuF,MAAOhF,EAAMG,EAAM3D,GAC1BiD,EAAO+F,IAAKxF,EAAMG,IACjBA,EAAM3D,EAAOsY,UAAU1Y,OAAS,IAEpCuJ,KAAM,WACL,MAAOD,GAAUpI,MAAM,IAExB2S,KAAM,WACL,MAAOvK,GAAUpI,OAElB2R,OAAQ,SAAU/D,EAAOgyB,GACxB,GAAIC,GAAwB,iBAAVjyB,EAElB,OAAKzL,GAAOgC,WAAYyJ,IAAWzL,EAAOgC,WAAYy7B,GAC9CD,GAAahgC,MAAOK,KAAMwX,WAG3BxX,KAAKoC,KAAK,YACXy9B,EAAOjyB,EAAQ5F,EAAUhI,OAC7BmC,EAAQnC,MAAOqI,OAEflG,EAAQnC,MAAO2S,YAMnBxQ,EAAOiE,QAGNmL,UACC2B,SACC2D,IAAK,SAAUnU,EAAMo9B,GACpB,GAAKA,EAAW,CAEf,GAAI7oB,GAAMvO,GAAQhG,EAAM,UACxB,OAAe,KAARuU,EAAa,IAAMA,MAQ9B8oB,WACCC,aAAe,EACfN,YAAc,EACdO,YAAc,EACd/sB,SAAW,EACXgtB,SAAW,EACXC,QAAU,EACVC,QAAU,EACV5tB,MAAQ,GAKT6tB,UAECC,QAASn+B,EAAOuE,QAAQwX,SAAW,WAAa,cAIjDxW,MAAO,SAAUhF,EAAMG,EAAM3D,EAAOiK,GAEnC,GAAMzG,GAA0B,IAAlBA,EAAKE,UAAoC,IAAlBF,EAAKE,UAAmBF,EAAKgF,MAAlE,CAKA,GAAIuP,GAAKtR,EAAM0L,EACdvJ,EAAW3F,EAAOmP,UAAWzO,GAC7B6E,EAAQhF,EAAKgF,KASd,IAPA7E,EAAOV,EAAOk+B,SAAUv4B,KAAgB3F,EAAOk+B,SAAUv4B,GAAaL,EAAgBC,EAAOI,IAI7FuJ,EAAQlP,EAAOoP,SAAU1O,IAAUV,EAAOoP,SAAUzJ,GAG/C5I,IAAUwC,EA+Bd,MAAK2P,IAAS,OAASA,KAAU4F,EAAM5F,EAAMwF,IAAKnU,GAAM,EAAOyG,MAAazH,EACpEuV,EAIDvP,EAAO7E,EAzBd,IAVA8C,QAAczG,GAGA,WAATyG,IAAsBsR,EAAMkoB,GAAQp2B,KAAM7J,MAC9CA,GAAU+X,EAAI,GAAK,GAAMA,EAAI,GAAK1N,WAAYpH,EAAO+F,IAAKxF,EAAMG,IAEhE8C,EAAO,YAIM,MAATzG,GAA0B,WAATyG,GAAqB4S,MAAOrZ,KAKpC,WAATyG,GAAsBxD,EAAO49B,UAAWj4B,KAC5C5I,GAAS,MAIJmS,GAAW,OAASA,KAAWnS,EAAQmS,EAAMuS,IAAKlhB,EAAMxD,EAAOiK,MAAazH,IAGjF,IACCgG,EAAO7E,GAAS3D,EACf,MAAMiE,OAcX+E,IAAK,SAAUxF,EAAMG,EAAM09B,EAASp3B,GACnC,GAAIE,GAAKyN,EAAKzF,EACbvJ,EAAW3F,EAAOmP,UAAWzO,EAyB9B,OAtBAA,GAAOV,EAAOk+B,SAAUv4B,KAAgB3F,EAAOk+B,SAAUv4B,GAAaL,EAAgB/E,EAAKgF,MAAOI,IAIlGuJ,EAAQlP,EAAOoP,SAAU1O,IAAUV,EAAOoP,SAAUzJ,GAG/CuJ,GAAS,OAASA,KACtBhI,EAAMgI,EAAMwF,IAAKnU,GAAM,EAAMyG,IAIzBE,IAAQ3H,IACZ2H,EAAMX,GAAQhG,EAAMG,IAIR,WAARwG,GAAoBxG,IAAQ28B,MAChCn2B,EAAMm2B,GAAoB38B,IAItB09B,GAAWp3B,IAAUzH,GACzBoV,EAAMvN,WAAYF,GACXk3B,GAAWp+B,EAAOmW,UAAWxB,GAAQA,GAAO,EAAIzN,GAEjDA,GAIRm3B,KAAM,SAAU99B,EAAMV,EAASmV,GAC9B,GAAIF,GAAKpU,EACR+lB,IAGD,KAAM/lB,IAAQb,GACb4mB,EAAK/lB,GAASH,EAAKgF,MAAO7E,GAC1BH,EAAKgF,MAAO7E,GAASb,EAASa,EAG/BoU,GAAME,EAAS9X,KAAMqD,EAGrB,KAAMG,IAAQb,GACbU,EAAKgF,MAAO7E,GAAS+lB,EAAK/lB,EAG3B,OAAOoU,MAMJnV,EAAOse,iBACX1X,GAAS,SAAUhG,EAAMG,GACxB,GAAIoU,GAAK5M,EAAOo2B,EAAUC,EACzBZ,EAAWh+B,EAAOse,iBAAkB1d,EAAM,MAC1CgF,EAAQhF,EAAKgF,KA6Bd,OA3BKo4B,KAGJ7oB,EAAM6oB,EAASa,iBAAkB99B,IAAUi9B,EAAUj9B,GAExC,KAARoU,GAAe9U,EAAOgG,SAAUzF,EAAK4C,cAAe5C,KACxDuU,EAAM9U,EAAOuF,MAAOhF,EAAMG,IAOtBgH,GAAU7L,KAAMiZ,IAASioB,GAAQlhC,KAAM6E,KAC3CwH,EAAQ3C,EAAM2C,MACdo2B,EAAW/4B,EAAM+4B,SACjBC,EAAWh5B,EAAMg5B,SAEjBh5B,EAAM+4B,SAAW/4B,EAAMg5B,SAAWh5B,EAAM2C,MAAQ4M,EAChDA,EAAM6oB,EAASz1B,MAEf3C,EAAM2C,MAAQA,EACd3C,EAAM+4B,SAAWA,EACjB/4B,EAAMg5B,SAAWA,IAIZzpB,GAEGtS,EAAS2U,gBAAgBsnB,eACpCl4B,GAAS,SAAUhG,EAAMG,GACxB,GAAIg+B,GAAMC,EACT7pB,EAAMvU,EAAKk+B,cAAgBl+B,EAAKk+B,aAAc/9B,GAC9C6E,EAAQhF,EAAKgF,KAmCd,OA/BY,OAAPuP,GAAevP,GAASA,EAAO7E,KACnCoU,EAAMvP,EAAO7E,IAUTgH,GAAU7L,KAAMiZ,KAAU+nB,GAAUhhC,KAAM6E,KAG9Cg+B,EAAOn5B,EAAMm5B,KACbC,EAASp+B,EAAKq+B,cAAgBr+B,EAAKq+B,aAAaF,KAG3CC,IACJp+B,EAAKq+B,aAAaF,KAAOn+B,EAAKk+B,aAAaC,MAE5Cn5B,EAAMm5B,KAAgB,aAATh+B,EAAsB,MAAQoU,EAC3CA,EAAMvP,EAAMs5B,UAAY,KAGxBt5B,EAAMm5B,KAAOA,EACRC,IACJp+B,EAAKq+B,aAAaF,KAAOC,IAIZ,KAAR7pB,EAAa,OAASA,IA0I/B9U,EAAOC,MAAO,SAAU,SAAW,SAAUzD,EAAGkE,GAC/CV,EAAOoP,SAAU1O,IAChBgU,IAAK,SAAUnU,EAAMo9B,EAAU32B,GAC9B,MAAK22B,GAGsB,IAArBp9B,EAAK+G,aAAqBw1B,GAAajhC,KAAM0K,GAAQhG,EAAM,YACxDP,EAAOq+B,KAAM99B,EAAM28B,GAAS,WAClC,MAAO71B,GAAkB9G,EAAMG,EAAMsG,KAG/BK,EAAkB9G,EAAMG,EAAMsG,GARvC,QAaDya,IAAK,SAAUlhB,EAAMxD,EAAOiK,GAC3B,MAAOR,GAAmBjG,EAAMxD,EAAOiK,EACtCD,EACCxG,EACAG,EACAsG,EACAhH,EAAOuE,QAAQkD,WAAiD,eAApCzH,EAAO+F,IAAKxF,EAAM,cAC3C,OAMFP,EAAOuE,QAAQwM,UACpB/Q,EAAOoP,SAAS2B,SACf2D,IAAK,SAAUnU,EAAMo9B,GAEpB,MAAOf,IAAS/gC,MAAO8hC,GAAYp9B,EAAKk+B,aAAel+B,EAAKk+B,aAAap8B,OAAS9B,EAAKgF,MAAMlD,SAAW,IACrG,IAAO+E,WAAY4e,OAAO8Y,IAAS,GACrCnB,EAAW,IAAM,IAGnBlc,IAAK,SAAUlhB,EAAMxD,GACpB,GAAIwI,GAAQhF,EAAKgF,MAChBk5B,EAAel+B,EAAKk+B,aACpB1tB,EAAU/Q,EAAOmW,UAAWpZ,GAAU,iBAA2B,IAARA,EAAc,IAAM,GAC7EsF,EAASo8B,GAAgBA,EAAap8B,QAAUkD,EAAMlD,QAAU,EAIjEkD,GAAM8K,KAAO,EAGRtT,GAAS,GAAqD,KAAhDiD,EAAO0E,KAAMrC,EAAOvG,QAAS6gC,GAAQ,MACvDp3B,EAAMN,kBAKNM,EAAMN,gBAAiB,UAGlBw5B,IAAiBA,EAAap8B,UAMpCkD,EAAMlD,OAASs6B,GAAO9gC,KAAMwG,GAC3BA,EAAOvG,QAAS6gC,GAAQ5rB,GACxB1O,EAAS,IAAM0O,MAOnB/Q,EAAO,WACAA,EAAOuE,QAAQsY,sBACpB7c,EAAOoP,SAAS8O,aACfxJ,IAAK,SAAUnU,EAAMo9B,GAGpB,MAAO39B,GAAOq+B,KAAM99B,GAAQ4F,QAAW,gBAAkB,WACxD,MAAKw3B,GACGp3B,GAAQhG,EAAM,eADtB,aAWEP,EAAOuE,QAAQuY,eAAiB9c,EAAOqS,GAAG8qB,UAC/Cn9B,EAAOC,MAAQ,MAAO,QAAU,SAAUzD,EAAG8P,GAC5CtM,EAAOoP,SAAU9C,IAChBoI,IAAK,SAAUnU,EAAMo9B,GACpB,GAAKA,EAAW,CACf,GAAI7oB,GAAMvO,GAAQhG,EAAM+L,EAExB,OAAO5E,IAAU7L,KAAMiZ,GAAQ9U,EAAQO,GAAO48B,WAAY7wB,GAAS,KAAOwI,SAS3E9U,EAAOwlB,MAAQxlB,EAAOwlB,KAAKqR,UAC/B72B,EAAOwlB,KAAKqR,QAAQjnB,OAAS,SAAUrP,GACtC,MAA8B,KAArBA,EAAK+G,aAA2C,IAAtB/G,EAAKgH,eAA0BvH,EAAOuE,QAAQuZ,uBAA+F,UAApEvd,EAAKgF,OAAShF,EAAKgF,MAAMY,SAAYI,GAAQhG,EAAM,aAGhKP,EAAOwlB,KAAKqR,QAAQkI,QAAU,SAAUx+B,GACvC,OAAQP,EAAOwlB,KAAKqR,QAAQjnB,OAAQrP,KAKtCP,EAAOC,MACN++B,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUv2B,EAAQw2B,GACpBn/B,EAAOoP,SAAUzG,EAASw2B,IACzB9vB,OAAQ,SAAUtS,GACjB,GAAIP,GAGHyiB,EAAyB,gBAAVliB,GAAqBA,EAAMmD,MAAM,MAASnD,GACzDqiC,IAED,KAAM5iC,EAAI,EAAO,EAAJA,EAAOA,IACnB4iC,EAAUz2B,EAASxB,GAAW3K,GAAM2iC,GACnClgB,EAAOziB,IAAOyiB,EAAOziB,EAAI,IAAOyiB,EAAO,EAGzC,OAAOmgB;GAIHrC,GAAQlhC,KAAM8M,KACnB3I,EAAOoP,SAAUzG,EAASw2B,GAAS1d,IAAMjb,IAG3C,IAAI64B,IAAM,OACTv2B,GAAW,QACXw2B,GAAQ,SACRC,GAAS,mHACTC,GAAkB,uBAEnBx/B,GAAOqS,GAAGpO,QACTw7B,UAAW,WACV,MAAOz/B,GAAO0/B,MAAO7hC,KAAK8hC,mBAE3BA,eAAgB,WACf,MAAO9hC,MAAKyX,IAAI,WACf,MAAOzX,MAAKgE,SAAW7B,EAAOuU,UAAW1W,KAAKgE,UAAahE,OAE3DwE,OAAO,WACP,MAAOxE,MAAK6C,OAAS7C,KAAK4b,WACvB5b,KAAKgH,SAAW26B,GAAgB3jC,KAAMgC,KAAKsG,WAC5Co7B,GAAO1jC,KAAMgC,KAAK2F,SAEpB8R,IAAI,SAAU9Y,EAAG+D,GACjB,GAAI2G,GAAMlH,EAAQnC,MAAOqJ,KAEzB,OAAc,OAAPA,EACN,KACAlH,EAAO6I,QAAS3B,GACflH,EAAOsV,IAAKpO,EAAK,SAAUA,GAC1B,OAASxG,KAAMH,EAAKG,KAAM3D,MAAOmK,EAAIpL,QAASwjC,GAAO,YAEpD5+B,KAAMH,EAAKG,KAAM3D,MAAOmK,EAAIpL,QAASwjC,GAAO,WAC9C5qB,SAML1U,EAAO0/B,MAAQ,SAAU3jC,EAAG6M,GAC3B,GAAID,GACH0B,KACArG,EAAM,SAAU1H,EAAKS,GAEpBA,EAAQiD,EAAOgC,WAAYjF,GAAUA,IAAqB,MAATA,EAAgB,GAAKA,EACtEsN,EAAGA,EAAE1N,QAAWijC,mBAAoBtjC,GAAQ,IAAMsjC,mBAAoB7iC,GASxE,IALK6L,IAAgBrJ,IACpBqJ,EAAc5I,EAAOmK,cAAgBnK,EAAOmK,aAAavB,aAIrD5I,EAAO6I,QAAS9M,IAASA,EAAEgY,SAAW/T,EAAOkU,cAAenY,GAEhEiE,EAAOC,KAAMlE,EAAG,WACfiI,EAAKnG,KAAK6C,KAAM7C,KAAKd,aAMtB,KAAM4L,IAAU5M,GACf2M,EAAaC,EAAQ5M,EAAG4M,GAAUC,EAAa5E,EAKjD,OAAOqG,GAAE5M,KAAM,KAAM3B,QAASujC,GAAK,KAoCpC,IAECQ,IACAC,GAEAC,GAAQ,OACRC,GAAW,gCAEXC,GAAiB,8DACjBC,GAAa,iBACbC,GAAY,QACZC,GAAS,KACTC,GAAU,sDACVC,GAAM,gBACNC,GAAO,iDAGPC,GAAQxgC,EAAOqS,GAAGkX,KAWlB1f,MAOA42B,MAGAC,IAAY,OAAS,IAItB,KACCZ,GAAexuB,EAASgS,KACvB,MAAOtiB,IAGR8+B,GAAet9B,EAASK,cAAe,KACvCi9B,GAAaxc,KAAO,GACpBwc,GAAeA,GAAaxc,KAI7Buc,GAAeU,GAAK35B,KAAMk5B,GAAal/B,mBA4FvCZ,EAAOqS,GAAGkX,KAAO,SAAUyR,EAAK2F,EAAQ3rB,GACvC,GAAoB,gBAARgmB,IAAoBwF,GAC/B,MAAOA,IAAMhjC,MAAOK,KAAMwX,UAI3B,KAAMxX,KAAKlB,OACV,MAAOkB,KAGR,IAAIsU,GAAU3O,EAAMyH,EACnBoO,EAAOxb,KACPqY,EAAM8kB,EAAIjpB,QAAQ,IAuDnB,OArDKmE,IAAO,IACX/D,EAAW6oB,EAAI5+B,MAAO8Z,EAAK8kB,EAAIr+B,QAC/Bq+B,EAAMA,EAAI5+B,MAAO,EAAG8Z,IAIhBlW,EAAOgC,WAAY2+B,IAGvB3rB,EAAW2rB,EACXA,EAASphC,GAGEohC,GAA4B,gBAAXA,KAC5Bn9B,EAAO,QAIRxD,EAAO+6B,MACNC,IAAKA,EAGLx3B,KAAMA,EACN2F,SAAU,OACV3I,KAAMmgC,EACN3xB,SAAU,SAAUvF,EAAOm3B,GACrB5rB,GACJqE,EAAKpZ,KAAM+U,EAAU/J,IAAcxB,EAAMo3B,aAAcD,EAAQn3B,OAG/DsF,KAAK,SAAU8xB,GAGjB51B,EAAWoK,UAGXgE,EAAK0gB,KAAM5nB,EAGVnS,EAAO,SAIL45B,OAAQiH,EAAa/kC,QAASukC,GAAS,KAGvCrsB,KAAM7B,GAGR0uB,KAIKhjC,MAIRmC,EAAOC,KAAM,iEAAiEC,MAAO,KAAO,SAAU1D,EAAGskC,GACxG9gC,EAAOqS,GAAIyuB,GAAM,SAAUvlC,GAC1B,MAAOsC,MAAKgtB,GAAIiW,EAAGvlC,MAIrByE,EAAOC,MAAQ,MAAO,QAAU,SAAUzD,EAAGukC,GAC5C/gC,EAAQ+gC,GAAW,SAAU/F,EAAKx6B,EAAMwU,EAAUxR,GAQjD,MANKxD,GAAOgC,WAAYxB,KACvBgD,EAAOA,GAAQwR,EACfA,EAAWxU,EACXA,EAAOjB,GAGDS,EAAO+6B,MACbv3B,KAAMu9B,EACN/F,IAAKA,EACLx6B,KAAMA,EACNwgC,QAAShsB,EACT7L,SAAU3F,OAKbxD,EAAOiE,QAENg9B,UAAW,SAAUjG,EAAKhmB,GACzB,MAAOhV,GAAO0U,IAAKsmB,EAAKz7B,EAAWyV,EAAU,WAG9CksB,QAAS,SAAUlG,EAAKx6B,EAAMwU,GAC7B,MAAOhV,GAAO0U,IAAKsmB,EAAKx6B,EAAMwU,EAAU,SAMzCmsB,UAAW,SAAUn3B,EAAQo3B,GAU5B,MATKA,GAEJr3B,EAAYC,EAAQhK,EAAOmK,eAG3Bi3B,EAAWp3B,EACXA,EAAShK,EAAOmK,cAEjBJ,EAAYC,EAAQo3B,GACbp3B,GAGRG,cACC6wB,IAAK8E,GACLuB,QAASpB,GAAepkC,KAAMgkC,GAAc,IAC5Cja,QAAQ,EACRpiB,KAAM,MACN89B,YAAa,mDACbC,aAAa,EACbtqB,OAAO,EAaPuqB,SACC1qB,IAAK,4BACLijB,KAAM,YACN36B,KAAM,aACNqiC,KAAM,oCACNC,IAAKhB,IAGNh2B,UACCoM,IAAK,MACLijB,KAAM,OACN0H,KAAM,QAGP92B,gBACCmM,IAAK,cACL1X,KAAM,gBAMP2L,YAGC42B,SAAUhiC,EAAOvC,OAGjBwkC,aAAa,EAGbC,YAAa7hC,EAAOe,UAGpB+gC,WAAY9hC,EAAO6W,UAOpB3M,aACCkI,SAAS,EACT4oB,KAAK,IAIP+G,cAAeh5B,EAA6Bc,IAC5Cm4B,cAAej5B,EAA6B03B,IAG5C1F,KAAM,SAAUC,EAAKn7B,GAyGpB,QAASkP,GAAM6xB,EAAQqB,EAAkB33B,EAAW43B,GACnD,GAAIC,GAAWnB,EAASt1B,EAAOT,EAAUm3B,EACxCC,EAAaJ,CAGC,KAAVx2B,IAKLA,EAAQ,EAGH62B,GACJxiB,aAAcwiB,GAKfC,EAAYhjC,EAGZijC,EAAwBN,GAAW,GAGnCz4B,EAAMgK,WAAamtB,EAAS,EAAI,EAAI,EAG/Bt2B,IACJW,EAAWb,EAAqBC,EAAGZ,EAAOa,IAItCs2B,GAAU,KAAgB,IAATA,GAA2B,MAAXA,GAGhCv2B,EAAEo4B,aAENL,EAAW34B,EAAMqB,kBAAkB,iBAC9Bs3B,IACJpiC,EAAO0iC,aAAcC,GAAkBP,GAExCA,EAAW34B,EAAMqB,kBAAkB,QAC9Bs3B,IACJpiC,EAAO4iC,KAAMD,GAAkBP,IAKjB,MAAXxB,GAEJyB,EAAa,cACbF,GAAY,IAKZA,EAAYn3B,EAAaX,EAAGY,GAC5Bo3B,EAAaF,EAAU12B,MACvBu1B,EAAUmB,EAAU3hC,KACpBkL,EAAQy2B,EAAUz2B,MAClBy2B,GAAaz2B,KAKdA,EAAQ22B,IACFA,GAAczB,KACnByB,EAAa,QACC,EAATzB,IACJA,EAAS,KAMZn3B,EAAMm3B,OAASA,EACfn3B,EAAM44B,YAAeJ,GAAoBI,GAAe,GAGnDF,EACJr1B,EAASa,YAAak1B,GAAmB7B,EAASqB,EAAY54B,IAE9DqD,EAASyB,WAAYs0B,GAAmBp5B,EAAO44B,EAAY32B,IAI5DjC,EAAMq5B,WAAYA,GAClBA,EAAavjC,EAERwjC,GACJC,EAAmB/sB,QAAS,QAAWksB,EAAY,UAAY,UAC3D14B,EAAOY,EAAG83B,EAAYnB,EAAUt1B,IAIrCu3B,EAAiBrpB,SAAUipB,GAAmBp5B,EAAO44B,IAEhDU,IACJC,EAAmB/sB,QAAS,gBAAkBxM,EAAOY,MAE3CrK,EAAOk1B,QAChBl1B,EAAO+D,MAAMkS,QAAS,cA5ML,gBAAR+kB,KACXn7B,EAAUm7B,EACVA,EAAMz7B,GAIPM,EAAUA,KAEV,IACC8iC,GAEAH,EACAU,EAEAX,EAEAD,EAEArjB,EAEA8jB,EAEAvmC,EAEA6N,EAAIrK,EAAOmhC,aAAethC,GAE1BgjC,EAAkBx4B,EAAE+H,SAAW/H,EAI/B24B,EAAqBH,IAAoBx4B,IACtCw4B,EAAgBpiC,UAAYoiC,YAA2B7iC,IACvDA,EAAQ6iC,GAAoB7iC,EAAO+D,MAEtC+I,EAAW9M,EAAO+M,WAClBk2B,EAAmBjjC,EAAO2Y,UAAW,eAErCmqB,EAAaz4B,EAAEy4B,eAEfK,KACAC,KAEA33B,EAAQ,EAER43B,EAAW,WAEX55B,GAECgK,WAAY,EAGZ6vB,iBAAkB,SAAU5iC,EAAM3D,GACjC,IAAM0O,EAAQ,CACb,GAAI83B,GAAQ7iC,EAAKE,aACjBF,GAAO0iC,EAAqBG,GAAUH,EAAqBG,IAAW7iC,EACtEyiC,EAAgBziC,GAAS3D,EAE1B,MAAOc,OAIR2lC,sBAAuB,WACtB,MAAiB,KAAV/3B,EAAc+2B,EAAwB,MAI9C13B,kBAAmB,SAAUxO,GAC5B,GAAIuX,EACJ,IAAe,IAAVpI,EAAc,CAClB,IAAMy3B,EAEL,IADAA,KACSrvB,EAAQmsB,GAASp5B,KAAM47B,IAC/BU,EAAiBrvB,EAAM,GAAGjT,eAAkBiT,EAAO,EAGrDA,GAAQqvB,EAAiB5mC,EAAIsE,eAE9B,MAAOiT,KAAUtU,EAAY,KAAOsU,GAIrC4vB,iBAAkB,SAAUjgC,GAI3B,MAHMiI,KACLpB,EAAEQ,SAAWrH,GAEP3F,MAIR6lC,MAAO,SAAUrB,GAMhB,MALAA,GAAaA,GAAcgB,EACtBd,GACJA,EAAUmB,MAAOrB,GAElBtzB,EAAM,EAAGszB,GACFxkC,MAmKV,IAhDAiP,EAASc,QAASnE,GAClBA,EAAMu3B,QAAUv3B,EAAMsF,KACtBtF,EAAMiC,MAAQjC,EAAMwF,KACpBxF,EAAMuF,SAAWi0B,EAAiBj/B,IAGlCyF,EAAMq5B,WAAa,SAAUxtB,GAC5B,GAAKA,EAAM,CACV,GAAIjK,EACJ,IAAa,EAARI,EACJ,IAAMJ,IAAOiK,GACZwtB,EAAYz3B,IAAUy3B,EAAWz3B,GAAMiK,EAAIjK,QAG5CA,GAAMiK,EAAK7L,EAAMm3B,QACjBn3B,EAAMuD,OAAQ3B,GAGhB,MAAOxN,OAMRwM,EAAE2wB,MAAUA,GAAO3wB,EAAE2wB,KAAQ,IAAKl/B,QAASikC,GAAO,IAAKjkC,QAASqkC,GAAWN,GAAc,GAAM,MAG/Fx1B,EAAEhB,UAAYrJ,EAAO0E,KAAM2F,EAAElB,UAAY,KAAMvI,cAAcV,MAAOC,IAG9C,MAAjBkK,EAAEs5B,cACN1kB,EAAQshB,GAAK35B,KAAMyD,EAAE2wB,IAAIp6B,eACzByJ,EAAEs5B,eAAkB1kB,GACjBA,EAAO,KAAQ4gB,GAAc,IAAO5gB,EAAO,KAAQ4gB,GAAc,KAChE5gB,EAAO,KAAwB,UAAfA,EAAO,GAAkB,GAAK,QAC7C4gB,GAAc,KAA+B,UAAtBA,GAAc,GAAkB,GAAK,QAK7Dx1B,EAAE7J,MAAQ6J,EAAEk3B,aAAiC,gBAAXl3B,GAAE7J,OACxC6J,EAAE7J,KAAOR,EAAO0/B,MAAOr1B,EAAE7J,KAAM6J,EAAEzB,cAIlCW,EAA+BM,GAAYQ,EAAGxK,EAAS4J,GAGxC,IAAVgC,EACJ,MAAOhC,EAkBR,IAdAs5B,EAAc14B,EAAEub,OAGhBvb,EAAE7G,KAAO6G,EAAE7G,KAAKkC,cAGhB2E,EAAEu5B,YAAc1D,GAAWrkC,KAAMwO,EAAE7G,MAG9Bu/B,GAAmC,IAApB/iC,EAAOk1B,UAC1Bl1B,EAAO+D,MAAMkS,QAAS,cAIjB5L,EAAEu5B,aAGFv5B,EAAE7J,OACN6J,EAAE2wB,MAASoF,GAAOvkC,KAAMwO,EAAE2wB,KAAQ,IAAM,KAAQ3wB,EAAE7J,WAE3C6J,GAAE7J,MAIVmiC,EAAgBt4B,EAAE2wB,IAGb3wB,EAAE8T,SAAU,GAAQ,CAExB,GAAI0lB,GAAK7jC,EAAOkM,MAEf4I,EAAMzK,EAAE2wB,IAAIl/B,QAASwkC,GAAK,OAASuD,EAGpCx5B,GAAE2wB,IAAMlmB,GAAUA,IAAQzK,EAAE2wB,KAAUoF,GAAOvkC,KAAMwO,EAAE2wB,KAAQ,IAAM,KAAQ,KAAO6I,EAAK,KAKpFx5B,EAAE7J,MAAQ6J,EAAEu5B,YAAcv5B,EAAEi3B,eAAgB,GAASzhC,EAAQyhC,cACjE73B,EAAM65B,iBAAkB,eAAgBj5B,EAAEi3B,aAItCj3B,EAAEo4B,aACNE,EAAgBA,GAAiBt4B,EAAE2wB,IAC9Bh7B,EAAO0iC,aAAcC,IACzBl5B,EAAM65B,iBAAkB,oBAAqBtjC,EAAO0iC,aAAcC,IAE9D3iC,EAAO4iC,KAAMD,IACjBl5B,EAAM65B,iBAAkB,gBAAiBtjC,EAAO4iC,KAAMD,KAKxDl5B,EAAM65B,iBACL,SACAj5B,EAAEhB,UAAW,IAAOgB,EAAEm3B,QAASn3B,EAAEhB,UAAU,IAC1CgB,EAAEm3B,QAASn3B,EAAEhB,UAAU,KAA8B,MAArBgB,EAAEhB,UAAW,GAAc,KAAOq3B,GAAW,WAAa,IAC1Fr2B,EAAEm3B,QAAS,KAIb,KAAMhlC,IAAK6N,GAAE63B,QACZz4B,EAAM65B,iBAAkB9mC,EAAG6N,EAAE63B,QAAS1lC,GAIvC,IAAK6N,EAAEy5B,aAAgBz5B,EAAEy5B,WAAW5mC,KAAM2lC,EAAiBp5B,EAAOY,MAAQ,GAAmB,IAAVoB,GAEjF,MAAOhC,GAAMi6B,OAKfL,GAAW,OAGX,KAAM7mC,KAAOwkC,QAAS,EAAGt1B,MAAO,EAAGsD,SAAU,GAC5CvF,EAAOjN,GAAK6N,EAAG7N,GAOhB,IAHA+lC,EAAYh5B,EAA+Bk3B,GAAYp2B,EAAGxK,EAAS4J,GAK5D,CACNA,EAAMgK,WAAa,EAEdsvB,GACJC,EAAmB/sB,QAAS,YAAcxM,EAAOY,IAG7CA,EAAE4M,OAAS5M,EAAEwV,QAAU,IAC3ByiB,EAAet2B,WAAY,WAC1BvC,EAAMi6B,MAAO,YACXr5B,EAAEwV,SAGN,KACCpU,EAAQ,EACR82B,EAAUwB,KAAMZ,EAAgBp0B,GAC/B,MAAO/N,GAER,KAAa,EAARyK,GAIJ,KAAMzK,EAHN+N,GAAM,GAAI/N,QApBZ+N,GAAM,GAAI,eA4BX,OAAOtF,IAIRyrB,OAAQ,EAGRwN,gBACAE,SA2JD,IAAIoB,OACHC,GAAY,KACZC,GAAS,oBACTC,GAAQnkC,EAAOkM,KAGhBlM,GAAOmhC,WACNiD,MAAO,WACPC,cAAe,WACd,GAAIrvB,GAAWgvB,GAAalhC,OAAW9C,EAAOkF,QAAU,IAAQi/B,IAEhE,OADAtmC,MAAMmX,IAAa,EACZA,KAKThV,EAAO+hC,cAAe,aAAc,SAAU13B,EAAGi6B,EAAkB76B,GAElE,GAAI86B,GAAcC,EAAaC,EAC9BjkC,EAAO6J,EAAE7J,KACTw6B,EAAM3wB,EAAE2wB,IACR0J,EAAcr6B,EAAE+5B,SAAU,EAC1BO,EAAeD,GAAeR,GAAOroC,KAAMm/B,GAC3C4J,EAAgBF,IAAgBC,GAAgC,gBAATnkC,MACnD6J,EAAEi3B,aAAe,IAAKvvB,QAAQ,sCACjCmyB,GAAOroC,KAAM2E,EAGf,OAA0B,UAArB6J,EAAEhB,UAAW,IAAmBs7B,GAAgBC,GAGpDL,EAAel6B,EAAEg6B,cAAgBrkC,EAAOgC,WAAYqI,EAAEg6B,eACrDh6B,EAAEg6B,gBACFh6B,EAAEg6B,cACHG,EAAc7kC,EAAQ4kC,GAGjBI,EACJt6B,EAAE2wB,IAAMA,EAAIl/B,QAASooC,GAAQ,KAAOK,GACzBK,EACXv6B,EAAE7J,KAAOA,EAAK1E,QAASooC,GAAQ,KAAOK,GAC3BG,IACXr6B,EAAE2wB,MAASiJ,GAAUpoC,KAAMm/B,GAAQ,IAAM,KAAQ3wB,EAAE+5B,MAAQ,IAAMG,GAIlEl6B,EAAEU,WAAW,eAAiB,WAI7B,MAHM05B,IACLzkC,EAAO0L,MAAO64B,EAAe,mBAEvBE,EAAmB,IAI3Bp6B,EAAEhB,UAAW,GAAM,OAGnB1J,EAAQ4kC,GAAiB,WACxBE,EAAoBpvB,WAIrB5L,EAAMuD,OAAO,WAEZrN,EAAQ4kC,GAAiBC,EAGpBn6B,EAAGk6B,KAEPl6B,EAAEg6B,cAAgBC,EAAiBD,cAGnCL,GAAatmC,KAAM6mC,IAIfE,GAAqBzkC,EAAOgC,WAAYwiC,IAC5CA,EAAaC,EAAmB,IAGjCA,EAAoBD,EAAcjlC,IAI5B,UAxDR,SA4DDS,EAAOmhC,WACNK,SACCqD,OAAQ,6FAETn6B,UACCm6B,OAAQ,yBAET95B,YACC+5B,cAAe,SAAU1lC,GAExB,MADAY,GAAOqX,WAAYjY,GACZA,MAMVY,EAAO+hC,cAAe,SAAU,SAAU13B,GACpCA,EAAE8T,QAAU5e,IAChB8K,EAAE8T,OAAQ,GAEN9T,EAAEs5B,cACNt5B,EAAE7G,KAAO,MACT6G,EAAEub,QAAS,KAKb5lB,EAAOgiC,cAAe,SAAU,SAAS33B,GAGxC,GAAKA,EAAEs5B,YAAc,CAEpB,GAAIkB,GACHE,EAAOviC,EAASuiC,MAAQviC,EAASS,qBAAsB,QAAS,IAAMT,EAAS2U,eAEhF,QAEC4sB,KAAM,SAAU3jC,EAAG4U,GAElB6vB,EAASriC,EAASK,cAAe,UAEjCgiC,EAAO5tB,MAAQ,QAEV5M,EAAE26B,gBACNH,EAAOI,QAAU56B,EAAE26B,eAGpBH,EAAOxhC,IAAMgH,EAAE2wB,IAGf6J,EAAOK,OAASL,EAAOM,mBAAqB,SAAU/kC,EAAGglC,IAEnDA,IAAYP,EAAOpxB,YAAc,kBAAkB5X,KAAMgpC,EAAOpxB,eAGpEoxB,EAAOK,OAASL,EAAOM,mBAAqB,KAGvCJ,GAAQF,EAAOrjC,YACnBujC,EAAKt8B,YAAao8B,GAInBA,EAAStlC,EAGH6lC,GACLpwB,EAAU,IAAK,aAMlB+vB,EAAKlnB,aAAcgnB,EAAQE,EAAKppB,aAGjC+nB,MAAO,WACDmB,GACJA,EAAOK,OAAQ,EAAG,OAMvB,IAAIG,IAEHC,GAAmB3lC,EAAOmM,cAAgB,WAEzC,IAAM,GAAIxP,KAAO+oC,IAChBA,GAAc/oC,GAAO,EAAG,KAEtB,EACJipC,GAAQ,CAiBTvlC,GAAOmK,aAAaq7B,IAAM7lC,EAAOmM,cAOhC,WACC,OAAQjO,KAAKwjC,SAAW11B,KAAuBE,KAGhDF,EAGD,SAAW65B,GACVxlC,EAAOiE,OAAQjE,EAAOuE,SACrBw2B,OAAQyK,EACRC,OAAQD,GAAS,mBAAqBA,MAEpCxlC,EAAOmK,aAAaq7B,OAGnBxlC,EAAOuE,QAAQw2B,MAEnB/6B,EAAOgiC,cAAc,SAAU33B,GAE9B,IAAMA,EAAEs5B,aAAe3jC,EAAOuE,QAAQkhC,KAAO,CAE5C,GAAIzwB,EAEJ,QACC+uB,KAAM,SAAU7B,EAASlzB,GAGxB,GAAIlL,GAAQtH,EACXgpC,EAAMn7B,EAAEm7B,KAWT,IAPKn7B,EAAEq7B,SACNF,EAAIG,KAAMt7B,EAAE7G,KAAM6G,EAAE2wB,IAAK3wB,EAAE4M,MAAO5M,EAAEq7B,SAAUr7B,EAAEwqB,UAEhD2Q,EAAIG,KAAMt7B,EAAE7G,KAAM6G,EAAE2wB,IAAK3wB,EAAE4M,OAIvB5M,EAAEu7B,UACN,IAAMppC,IAAK6N,GAAEu7B,UACZJ,EAAKhpC,GAAM6N,EAAEu7B,UAAWppC,EAKrB6N,GAAEQ,UAAY26B,EAAI/B,kBACtB+B,EAAI/B,iBAAkBp5B,EAAEQ,UAQnBR,EAAEs5B,aAAgBzB,EAAQ,sBAC/BA,EAAS,oBAAuB,iBAIjC,KACC,IAAM1lC,IAAK0lC,GACVsD,EAAIlC,iBAAkB9mC,EAAG0lC,EAAS1lC,IAElC,MAAO4D,IAKTolC,EAAIzB,KAAQ15B,EAAEu5B,YAAcv5B,EAAE7J,MAAU,MAGxCwU,EAAW,SAAU5U,EAAGglC,GAEvB,GAAIxE,GACHyB,EACAa,EACA54B,EACAwM,CAKD,KAGC,GAAK9B,IAAcowB,GAA8B,IAAnBI,EAAI/xB,YAcjC,GAXAuB,EAAWzV,EAGNuE,IACJ0hC,EAAIL,mBAAqBnlC,EAAOoX,KAC3BkuB,UACGD,IAAcvhC,IAKlBshC,EAEoB,IAAnBI,EAAI/xB,YACR+xB,EAAI9B,YAEC,CACN9C,EAAS4E,EAAI5E,OACbsC,EAAkBsC,EAAIhC,wBACtBl5B,KACAwM,EAAM0uB,EAAIK,YAGL/uB,GAAOA,EAAIK,kBACf7M,EAAUwM,IAAMA,EAKjB,KACCxM,EAAUlL,KAAOomC,EAAI3E,aACpB,MAAO7/B,IAKT,IACCqhC,EAAamD,EAAInD,WAChB,MAAOrhC,GAERqhC,EAAa,GAQRzB,IAAUv2B,EAAEg3B,SAAYh3B,EAAEs5B,YAGT,OAAX/C,IACXA,EAAS,KAHTA,EAASt2B,EAAUlL,KAAO,IAAM,KAOlC,MAAO0mC,GACFV,GACLp2B,EAAU,GAAI82B,GAKXx7B,GACJ0E,EAAU4xB,EAAQyB,EAAY/3B,EAAW44B,IAIrC74B,EAAE4M,MAGuB,IAAnBuuB,EAAI/xB,WAGfzH,WAAYgJ,EAAU,IAEtBlR,IAAWyhC,GACND,KAGED,KACLA,MACArlC,EAAQL,GAASomC,OAAQT,KAG1BD,GAAcvhC,GAAWkR,GAE1BwwB,EAAIL,mBAAqBnwB,GAjBzBA,KAqBF0uB,MAAO,WACD1uB,GACJA,EAAS,EAAE,OAOjB,IAAI/I,IAAO+5B,GACVz1B,GAAW,yBACX01B,GAAS,GAAIjgB,QAAQ,iBAAmB1T,EAAY,cAAe,KACnE4zB,GAAO,cACPr5B,IAAwByC,GACxB9C,IACCk1B,KAAM,SAAUp1B,EAAMvP,GACrB,GAAIkR,GAAKk4B,EACRj4B,EAAQrQ,KAAKmQ,YAAa1B,EAAMvP,GAChCkiB,EAAQgnB,GAAOr/B,KAAM7J,GACrBiN,EAASkE,EAAMxM,MACf+M,GAASzE,GAAU,EACnBo8B,EAAQ,EACRC,EAAgB,EAEjB,IAAKpnB,EAAQ,CAKZ,GAJAhR,GAAOgR,EAAM,GACbknB,EAAOlnB,EAAM,KAAQjf,EAAO49B,UAAWtxB,GAAS,GAAK,MAGvC,OAAT65B,GAAiB13B,EAAQ,CAI7BA,EAAQzO,EAAO+F,IAAKmI,EAAM3N,KAAM+L,GAAM,IAAU2B,GAAO,CAEvD,GAGCm4B,GAAQA,GAAS,KAGjB33B,GAAgB23B,EAChBpmC,EAAOuF,MAAO2I,EAAM3N,KAAM+L,EAAMmC,EAAQ03B,SAI/BC,KAAWA,EAAQl4B,EAAMxM,MAAQsI,IAAqB,IAAVo8B,KAAiBC,GAGxEn4B,EAAMi4B,KAAOA,EACbj4B,EAAMO,MAAQA,EAEdP,EAAMD,IAAMgR,EAAM,GAAKxQ,GAAUwQ,EAAM,GAAK,GAAMhR,EAAMA,EAEzD,MAAOC,KAkKVlO,GAAO0M,UAAY1M,EAAOiE,OAAQyI,GAEjC45B,QAAS,SAAUj6B,EAAO2I,GACpBhV,EAAOgC,WAAYqK,IACvB2I,EAAW3I,EACXA,GAAU,MAEVA,EAAQA,EAAMnM,MAAM,IAOrB,KAJA,GAAIoM,GACHjG,EAAQ,EACR1J,EAAS0P,EAAM1P,OAEAA,EAAR0J,EAAiBA,IACxBiG,EAAOD,EAAOhG,GACdmG,GAAUF,GAASE,GAAUF,OAC7BE,GAAUF,GAAOxC,QAASkL,IAI5BuxB,UAAW,SAAUvxB,EAAUqlB,GACzBA,EACJxtB,GAAoB/C,QAASkL,GAE7BnI,GAAoBnP,KAAMsX,MAoI7BhV,EAAOmO,MAAQA,EAEfA,EAAM5Q,WACLqW,YAAazF,EACbuC,KAAM,SAAUnQ,EAAMV,EAASyM,EAAM2B,EAAKG,EAAQ+3B,GACjDtoC,KAAK0C,KAAOA,EACZ1C,KAAKyO,KAAOA,EACZzO,KAAKuQ,OAASA,GAAU,QACxBvQ,KAAKgC,QAAUA,EACfhC,KAAK4Q,MAAQ5Q,KAAKqO,IAAMrO,KAAK6D,MAC7B7D,KAAKoQ,IAAMA,EACXpQ,KAAKsoC,KAAOA,IAAUnmC,EAAO49B,UAAWtxB,GAAS,GAAK,OAEvD5K,IAAK,WACJ,GAAIwN,GAAQf,EAAM8U,UAAWplB,KAAKyO,KAElC,OAAO4C,IAASA,EAAMwF,IACrBxF,EAAMwF,IAAK7W,MACXsQ,EAAM8U,UAAUmE,SAAS1S,IAAK7W,OAEhC4P,IAAK,SAAUF,GACd,GAAIi5B,GACHt3B,EAAQf,EAAM8U,UAAWplB,KAAKyO,KAoB/B,OAjBCzO,MAAKi0B,IAAM0U,EADP3oC,KAAKgC,QAAQwN,SACErN,EAAOoO,OAAQvQ,KAAKuQ,QACtCb,EAAS1P,KAAKgC,QAAQwN,SAAWE,EAAS,EAAG,EAAG1P,KAAKgC,QAAQwN,UAG3CE,EAEpB1P,KAAKqO,KAAQrO,KAAKoQ,IAAMpQ,KAAK4Q,OAAU+3B,EAAQ3oC,KAAK4Q,MAE/C5Q,KAAKgC,QAAQ4mC,MACjB5oC,KAAKgC,QAAQ4mC,KAAKvpC,KAAMW,KAAK0C,KAAM1C,KAAKqO,IAAKrO,MAGzCqR,GAASA,EAAMuS,IACnBvS,EAAMuS,IAAK5jB,MAEXsQ,EAAM8U,UAAUmE,SAAS3F,IAAK5jB,MAExBA,OAITsQ,EAAM5Q,UAAUmT,KAAKnT,UAAY4Q,EAAM5Q,UAEvC4Q,EAAM8U,WACLmE,UACC1S,IAAK,SAAUxG,GACd,GAAItB,EAEJ,OAAiC,OAA5BsB,EAAM3N,KAAM2N,EAAM5B,OACpB4B,EAAM3N,KAAKgF,OAA2C,MAAlC2I,EAAM3N,KAAKgF,MAAO2I,EAAM5B,OAQ/CM,EAAS5M,EAAO+F,IAAKmI,EAAM3N,KAAM2N,EAAM5B,MAAM,EAAO,IAE5CM,GAAqB,SAAXA,EAAwBA,EAAJ,GAT9BsB,EAAM3N,KAAM2N,EAAM5B,OAW3BmV,IAAK,SAAUvT,GAGTlO,EAAO0O,GAAG+3B,KAAMv4B,EAAM5B,MAC1BtM,EAAO0O,GAAG+3B,KAAMv4B,EAAM5B,MAAQ4B,GACnBA,EAAM3N,KAAKgF,QAAgE,MAArD2I,EAAM3N,KAAKgF,MAAOvF,EAAOk+B,SAAUhwB,EAAM5B,QAAoBtM,EAAOoP,SAAUlB,EAAM5B,OACrHtM,EAAOuF,MAAO2I,EAAM3N,KAAM2N,EAAM5B,KAAM4B,EAAMhC,IAAMgC,EAAMi4B,MAExDj4B,EAAM3N,KAAM2N,EAAM5B,MAAS4B,EAAMhC,OASrCiC,EAAM8U,UAAU8F,UAAY5a,EAAM8U,UAAU0F,YAC3ClH,IAAK,SAAUvT,GACTA,EAAM3N,KAAKE,UAAYyN,EAAM3N,KAAKiB,aACtC0M,EAAM3N,KAAM2N,EAAM5B,MAAS4B,EAAMhC,OAKpClM,EAAOC,MAAO,SAAU,OAAQ,QAAU,SAAUzD,EAAGkE,GACtD,GAAIgmC,GAAQ1mC,EAAOqS,GAAI3R,EACvBV,GAAOqS,GAAI3R,GAAS,SAAUimC,EAAOv4B,EAAQ4G,GAC5C,MAAgB,OAAT2xB,GAAkC,iBAAVA,KAE3BnqC,GAAKwD,EAAOgC,WAAY2kC,IAAW3mC,EAAOgC,WAAYoM,GACzDs4B,EAAMlpC,MAAOK,KAAMwX,WACnBxX,KAAK+oC,QAASj2B,EAAOjQ,GAAM,GAAQimC,EAAOv4B,EAAQ4G,MAIrDhV,EAAOqS,GAAGpO,QACT4iC,OAAQ,SAAUF,EAAOG,EAAI14B,EAAQ4G,GAGpC,MAAOnX,MAAKwE,OAAQwD,GAAWE,IAAK,UAAW,GAAIG,OAGjD+H,MAAM24B,SAAU71B,QAAS+1B,GAAMH,EAAOv4B,EAAQ4G,IAEjD4xB,QAAS,SAAUt6B,EAAMq6B,EAAOv4B,EAAQ4G,GACvC,GAAIjF,GAAQ/P,EAAOmB,cAAemL,GACjCy6B,EAAS/mC,EAAO2mC,MAAOA,EAAOv4B,EAAQ4G,GACtCgyB,EAAc,WAEb,GAAIp4B,GAAOlC,EAAW7O,KAAMmC,EAAOiE,UAAYqI,GAAQy6B,EAGlDh3B,IACJnB,EAAKP,MAAM,GAId,OAAO0B,IAASg3B,EAAOl4B,SAAU,EAChChR,KAAKoC,KAAM+mC,GACXnpC,KAAKgR,MAAOk4B,EAAOl4B,MAAOm4B,IAE5B34B,KAAM,SAAU7K,EAAMuc,EAAYzR,GACjC,GAAI24B,GAAY,SAAU/3B,GACzB,GAAIb,GAAOa,EAAMb,WACVa,GAAMb,KACbA,EAAMC,GAYP,OATqB,gBAAT9K,KACX8K,EAAUyR,EACVA,EAAavc,EACbA,EAAOjE,GAEHwgB,GAAcvc,KAAS,GAC3B3F,KAAKgR,MAAOrL,GAAQ,SAGd3F,KAAKoC,KAAK,WAChB,GAAIqf,IAAU,EACbjZ,EAAgB,MAAR7C,GAAgBA,EAAO,aAC/B0jC,EAASlnC,EAAOknC,OAChB1mC,EAAOR,EAAO2D,MAAO9F,KAEtB,IAAKwI,EACC7F,EAAM6F,IAAW7F,EAAM6F,GAAQgI,MACnC44B,EAAWzmC,EAAM6F,QAGlB,KAAMA,IAAS7F,GACTA,EAAM6F,IAAW7F,EAAM6F,GAAQgI,MAAQ63B,GAAKrqC,KAAMwK,IACtD4gC,EAAWzmC,EAAM6F,GAKpB,KAAMA,EAAQ6gC,EAAOvqC,OAAQ0J,KACvB6gC,EAAQ7gC,GAAQ9F,OAAS1C,MAAiB,MAAR2F,GAAgB0jC,EAAQ7gC,GAAQwI,QAAUrL,IAChF0jC,EAAQ7gC,GAAQuI,KAAKP,KAAMC,GAC3BgR,GAAU,EACV4nB,EAAO17B,OAAQnF,EAAO,KAOnBiZ,IAAYhR,IAChBtO,EAAOsf,QAASzhB,KAAM2F,QA4B1BxD,EAAOC,MACNknC,UAAWx2B,EAAM,QACjBy2B,QAASz2B,EAAM,QACf02B,YAAa12B,EAAM,UACnB22B,QAAUv2B,QAAS,QACnBw2B,SAAWx2B,QAAS,QACpBy2B,YAAcz2B,QAAS,WACrB,SAAUrQ,EAAM2L,GAClBrM,EAAOqS,GAAI3R,GAAS,SAAUimC,EAAOv4B,EAAQ4G,GAC5C,MAAOnX,MAAK+oC,QAASv6B,EAAOs6B,EAAOv4B,EAAQ4G,MAI7ChV,EAAO2mC,MAAQ,SAAUA,EAAOv4B,EAAQiE,GACvC,GAAI6I,GAAMyrB,GAA0B,gBAAVA,GAAqB3mC,EAAOiE,UAAY0iC,IACjE33B,SAAUqD,IAAOA,GAAMjE,GACtBpO,EAAOgC,WAAY2kC,IAAWA,EAC/Bt5B,SAAUs5B,EACVv4B,OAAQiE,GAAMjE,GAAUA,IAAWpO,EAAOgC,WAAYoM,IAAYA,EAwBnE,OArBA8M,GAAI7N,SAAWrN,EAAO0O,GAAGwH,IAAM,EAA4B,gBAAjBgF,GAAI7N,SAAwB6N,EAAI7N,SACzE6N,EAAI7N,WAAYrN,GAAO0O,GAAGkR,OAAS5f,EAAO0O,GAAGkR,OAAQ1E,EAAI7N,UAAarN,EAAO0O,GAAGkR,OAAOwH,UAGtE,MAAblM,EAAIrM,OAAiBqM,EAAIrM,SAAU,KACvCqM,EAAIrM,MAAQ,MAIbqM,EAAIuL,IAAMvL,EAAIlM,SAEdkM,EAAIlM,SAAW,WACThP,EAAOgC,WAAYkZ,EAAIuL,MAC3BvL,EAAIuL,IAAIvpB,KAAMW,MAGVqd,EAAIrM,OACR7O,EAAOsf,QAASzhB,KAAMqd,EAAIrM,QAIrBqM,GAGRlb,EAAOoO,QACNq5B,OAAQ,SAAUC,GACjB,MAAOA,IAERC,MAAO,SAAUD,GAChB,MAAO,GAAM7gC,KAAK+gC,IAAKF,EAAE7gC,KAAKghC,IAAO,IAIvC7nC,EAAOknC,UACPlnC,EAAO0O,GAAKP,EAAM5Q,UAAUmT,KAC5B1Q,EAAO0O,GAAGzB,KAAO,WAChB,GAAI0B,GACHu4B,EAASlnC,EAAOknC,OAChB1qC,EAAI,CAIL,KAFAyP,GAAQjM,EAAOkM,MAEP1P,EAAI0qC,EAAOvqC,OAAQH,IAC1BmS,EAAQu4B,EAAQ1qC,GAEVmS,KAAWu4B,EAAQ1qC,KAAQmS,GAChCu4B,EAAO17B,OAAQhP,IAAK,EAIhB0qC,GAAOvqC,QACZqD,EAAO0O,GAAGL,OAEXpC,GAAQ1M,GAGTS,EAAO0O,GAAGC,MAAQ,SAAUA,GACtBA,KAAW3O,EAAOknC,OAAOxpC,KAAMiR,KAAYq3B,KAC/CA,GAAU8B,YAAa9nC,EAAO0O,GAAGzB,KAAMjN,EAAO0O,GAAGq5B,YAInD/nC,EAAO0O,GAAGq5B,SAAW,GAErB/nC,EAAO0O,GAAGL,KAAO,WAChB25B,cAAehC,IACfA,GAAU,MAGXhmC,EAAO0O,GAAGkR,QACTqoB,KAAM,IACNC,KAAM,IAEN9gB,SAAU,KAIXpnB,EAAO0O,GAAG+3B,QAELzmC,EAAOwlB,MAAQxlB,EAAOwlB,KAAKqR,UAC/B72B,EAAOwlB,KAAKqR,QAAQsR,SAAW,SAAU5nC,GACxC,MAAOP,GAAOiC,KAAKjC,EAAOknC,OAAQ,SAAU70B,GAC3C,MAAO9R,KAAS8R,EAAG9R,OACjB5D,QAGL,IAAIyrC,IAAQ,kBAEZpoC,GAAOqS,GAAGg2B,OAAS,SAAUxoC,GAC5B,GAAKwV,UAAU1Y,OACd,MAAOkD,KAAYN,EAClB1B,KACAA,KAAKoC,KAAK,SAAUzD,GACnBwD,EAAOqoC,OAAOC,UAAWzqC,KAAMgC,EAASrD,IAI3C,IAAI20B,GAASrpB,EAAMygC,EAAKvf,EAAWJ,EAAYG,EAAWJ,EACzD6f,GAAQjwB,IAAK,EAAGmmB,KAAM,GACtBn+B,EAAO1C,KAAM,GACbiW,EAAMvT,GAAQA,EAAK4C,aAEpB,IAAM2Q,EAIN,OAAMhM,EAAOgM,EAAIhM,QAAUvH,EACnBP,EAAOqoC,OAAOI,WAAYloC,IAGlC4wB,EAAUrd,EAAIqD,gBAGRnX,EAAOgG,SAAUmrB,EAAS5wB,IAMW,mBAA/BA,GAAKmoC,wBAChBF,EAAMjoC,EAAKmoC,yBAEZH,EAAMv3B,EAAW8C,GACjBkV,EAAamI,EAAQnI,WAAclhB,EAAKkhB,WAAc,EACtDJ,EAAauI,EAAQvI,YAAc9gB,EAAK8gB,YAAc,EACtDG,EAAawf,EAAII,aAAexX,EAAQpI,UACxCJ,EAAa4f,EAAIK,aAAezX,EAAQxI,YAEvCpQ,IAAKiwB,EAAIjwB,IAAOwQ,EAAaC,EAC7B0V,KAAM8J,EAAI9J,KAAO/V,EAAaC,IAfvB4f,IAmBTxoC,EAAOqoC,QAENI,WAAY,SAAU3gC,GACrB,GAAIyQ,GAAMzQ,EAAKkW,UACd0gB,EAAO52B,EAAK+gC,UAOb,OALK7oC,GAAOuE,QAAQwZ,mCACnBxF,GAAQnR,WAAYpH,EAAO+F,IAAI+B,EAAM,eAAkB,EACvD42B,GAAQt3B,WAAYpH,EAAO+F,IAAI+B,EAAM,gBAAmB,IAGhDyQ,IAAKA,EAAKmmB,KAAMA,IAG1B4J,UAAW,SAAU/nC,EAAMV,EAASrD,GACnC,GAAI2gC,GAAWn9B,EAAO+F,IAAKxF,EAAM,WAGf,YAAb48B,IACJ58B,EAAKgF,MAAM43B,SAAW,WAGvB,IAK+B2L,GAAQC,EALnCC,EAAUhpC,EAAQO,GACrB0oC,EAAYD,EAAQX,SACpBa,EAAYlpC,EAAO+F,IAAKxF,EAAM,OAC9B4oC,EAAanpC,EAAO+F,IAAKxF,EAAM,QAC/B6oC,GAAmC,aAAbjM,GAAwC,UAAbA,IAA0Bn9B,EAAOsC,QAAQ,QAAS4mC,EAAWC,IAAe,GAC7H98B,KAAYg9B,IAGRD,IACJC,EAAcL,EAAQ7L,WACtB2L,EAASO,EAAY9wB,IACrBwwB,EAAUM,EAAY3K,OAEtBoK,EAAS1hC,WAAY8hC,IAAe,EACpCH,EAAU3hC,WAAY+hC,IAAgB,GAGlCnpC,EAAOgC,WAAYnC,KACvBA,EAAUA,EAAQ3C,KAAMqD,EAAM/D,EAAGysC,IAGd,MAAfppC,EAAQ0Y,MACZlM,EAAMkM,IAAQ1Y,EAAQ0Y,IAAM0wB,EAAU1wB,IAAQuwB,GAE1B,MAAhBjpC,EAAQ6+B,OACZryB,EAAMqyB,KAAS7+B,EAAQ6+B,KAAOuK,EAAUvK,KAASqK,GAG7C,SAAWlpC,GACfA,EAAQypC,MAAMpsC,KAAMqD,EAAM8L,GAE1B28B,EAAQjjC,IAAKsG,KAMhBrM,EAAOqS,GAAGpO,QAETk5B,SAAU,WACT,GAAMt/B,KAAK,GAAX,CAIA,GAAI0C,GAAO1C,KAAK,GAGhB0rC,EAAe1rC,KAAK0rC,eAGpBlB,EAAexqC,KAAKwqC,SACpBmB,EAAepB,GAAMvsC,KAAK0tC,EAAa,GAAGplC,WAAcoU,IAAK,EAAGmmB,KAAM,GAAM6K,EAAalB,QAazF,OARAA,GAAO9vB,KAAQnR,WAAYpH,EAAO+F,IAAIxF,EAAM,eAAkB,EAC9D8nC,EAAO3J,MAAQt3B,WAAYpH,EAAO+F,IAAIxF,EAAM,gBAAmB,EAG/DipC,EAAajxB,KAAQnR,WAAYpH,EAAO+F,IAAIwjC,EAAa,GAAI,oBAAuB,EACpFC,EAAa9K,MAAQt3B,WAAYpH,EAAO+F,IAAIwjC,EAAa,GAAI,qBAAwB,GAIpFhxB,IAAM8vB,EAAO9vB,IAAOixB,EAAajxB,IACjCmmB,KAAM2J,EAAO3J,KAAO8K,EAAa9K,QAInC6K,aAAc,WACb,MAAO1rC,MAAKyX,IAAI,WAEf,IADA,GAAIi0B,GAAe1rC,KAAK0rC,cAAgB/mC,EAASsF,KACzCyhC,IAAkBnB,GAAMvsC,KAAK0tC,EAAaplC,WAAsD,WAAzCnE,EAAO+F,IAAIwjC,EAAc,aACvFA,EAAeA,EAAaA,YAE7B,OAAOA,IAAgB/mC,EAASsF,UAOnC9H,EAAOC,MAAO0oB,WAAY,cAAeI,UAAW,eAAgB,SAAUgY,EAAQz0B,GACrF,GAAIiM,GAAM,IAAI1c,KAAMyQ,EAEpBtM,GAAOqS,GAAI0uB,GAAW,SAAU75B,GAC/B,MAAOlH,GAAOgY,OAAQna,KAAM,SAAU0C,EAAMwgC,EAAQ75B,GACnD,GAAIqhC,GAAMv3B,EAAWzQ,EAErB,OAAK2G,KAAQ3H,EACLgpC,EAAOj8B,IAAQi8B,GAAOA,EAAKj8B,GACjCi8B,EAAI/lC,SAAS2U,gBAAiB4pB,GAC9BxgC,EAAMwgC,QAGHwH,EACJA,EAAIkB,SACFlxB,EAAYvY,EAAQuoC,GAAM5f,aAApBzhB,EACNqR,EAAMrR,EAAMlH,EAAQuoC,GAAMxf,aAI5BxoB,EAAMwgC,GAAW75B,IAEhB65B,EAAQ75B,EAAKmO,UAAU1Y,OAAQ,SAYpCqD,EAAOC,MAAQypC,OAAQ,SAAUC,MAAO,SAAW,SAAUjpC,EAAM8C,GAClExD,EAAOC,MAAQg/B,QAAS,QAAUv+B,EAAMkpC,QAASpmC,EAAM,GAAI,QAAU9C,GAAQ,SAAUmpC,EAAcC,GAEpG9pC,EAAOqS,GAAIy3B,GAAa,SAAU9K,EAAQjiC,GACzC,GAAIkb,GAAY5C,UAAU1Y,SAAYktC,GAAkC,iBAAX7K,IAC5Dh4B,EAAQ6iC,IAAkB7K,KAAW,GAAQjiC,KAAU,EAAO,SAAW,SAE1E,OAAOiD,GAAOgY,OAAQna,KAAM,SAAU0C,EAAMiD,EAAMzG,GACjD,GAAI+W,EAEJ,OAAK9T,GAAOiR,SAAU1Q,GAIdA,EAAKiC,SAAS2U,gBAAiB,SAAWzW,GAI3B,IAAlBH,EAAKE,UACTqT,EAAMvT,EAAK4W,gBAIJtQ,KAAKC,IACXvG,EAAKuH,KAAM,SAAWpH,GAAQoT,EAAK,SAAWpT,GAC9CH,EAAKuH,KAAM,SAAWpH,GAAQoT,EAAK,SAAWpT,GAC9CoT,EAAK,SAAWpT,KAIX3D,IAAUwC,EAEhBS,EAAO+F,IAAKxF,EAAMiD,EAAMzG,EAAOiK,GAG/BhH,EAAOuF,MAAOhF,EAAMiD,EAAMzG,EAAOiK,IAChCxD,EAAMyU,EAAY+mB,EAASz/B,EAAW0Y,EAAW,WAKvDtY,EAAOK,OAASL,EAAO+R,EAAI1R,EAcJ,kBAAX+pC,SAAyBA,OAAOC,KAAOD,OAAOC,IAAIhqC,QAC7D+pC,OAAQ,YAAc,WAAc,MAAO/pC,MAGxCL;;;;;;;;;;;;;;;;;;CAsBH,SAAU+R,GAET,YAMA,IAAIu4B,GAAQ,SAAUC,EAASrqC,GAC7BhC,KAAKgC,QAAUA,EACfhC,KAAKssC,SAAWz4B,EAAEw4B,GACf/e,SAAS,yBAA0B,sBAAuBzZ,EAAEqG,MAAMla,KAAK2S,KAAM3S,OAChFA,KAAKgC,QAAQuqC,QAAUvsC,KAAKssC,SAASn2B,KAAK,eAAeuV,KAAK1rB,KAAKgC,QAAQuqC,QAG7EH,GAAM1sC,WAEFqW,YAAaq2B,EAEbz6B,OAAQ,WACN,MAAO3R,MAAMA,KAAKwsC,QAAmB,OAAT,WAG9BnkC,KAAM,WACJ,GAAIokC,GAAOzsC,KACPmD,EAAI0Q,EAAEmV,MAAM,OAEhBhpB,MAAKssC,SAASl0B,QAAQjV,GAElBnD,KAAKwsC,SAAWrpC,EAAEmmB,uBAEtBtpB,KAAKwsC,SAAU,EAEfxsC,KAAK0sC,SAEL1sC,KAAK2sC,SAAS,WACZ,GAAIC,GAAa/4B,EAAEnN,QAAQkmC,YAAcH,EAAKH,SAAS5oB,SAAS,OAE3D+oB,GAAKH,SAASrmB,SAASnnB,QAC1B2tC,EAAKH,SAAStiC,SAASrF,SAASsF,MAGlCwiC,EAAKH,SACFjkC,OAECukC,GACFH,EAAKH,SAAS,GAAG7iC,YAGnBgjC,EAAKH,SACFrpB,SAAS,MACT3M,KAAK,eAAe,GAEvBm2B,EAAKI,eAELD,EACEH,EAAKH,SAAStoB,IAAInQ,EAAEnN,QAAQkmC,WAAWx8B,IAAK,WAAcq8B,EAAKH,SAAS3gB,QAAQvT,QAAQ,WACxFq0B,EAAKH,SAAS3gB,QAAQvT,QAAQ,aAKpCzF,KAAM,SAAUxP,GACdA,GAAKA,EAAEkmB,gBAIPlmB,GAAI0Q,EAAEmV,MAAM,QAEZhpB,KAAKssC,SAASl0B,QAAQjV,GAEjBnD,KAAKwsC,UAAWrpC,EAAEmmB,uBAEvBtpB,KAAKwsC,SAAU,EAEfxsC,KAAK0sC,SAEL74B,EAAElP,UAAU0T,IAAI,iBAEhBrY,KAAKssC,SACFjpB,YAAY,MACZ/M,KAAK,eAAe,GAEvBzC,EAAEnN,QAAQkmC,YAAc5sC,KAAKssC,SAAS5oB,SAAS,QAC7C1jB,KAAK8sC,qBACL9sC,KAAK+sC,cAGTF,aAAc,WACZ,GAAIJ,GAAOzsC,IACX6T,GAAElP,UAAUqoB,GAAG,gBAAiB,SAAU7pB,GACpCspC,EAAKH,SAAS,KAAOnpC,EAAEgJ,QAAWsgC,EAAKH,SAAS3wB,IAAIxY,EAAEgJ,QAAQrN,QAChE2tC,EAAKH,SAAS3gB,WAKpB+gB,OAAQ,WACN,GAAID,GAAOzsC,IACPA,MAAKwsC,SAAWxsC,KAAKgC,QAAQgrC,SAC/BhtC,KAAKssC,SAAStf,GAAG,sBAAuB,SAAW7pB,GACtC,IAAXA,EAAE6P,OAAey5B,EAAK95B,SAEd3S,KAAKwsC,SACfxsC,KAAKssC,SAASj0B,IAAI,wBAItBy0B,mBAAoB,WAClB,GAAIL,GAAOzsC,KACPgiB,EAAU7T,WAAW,WACnBs+B,EAAKH,SAASj0B,IAAIxE,EAAEnN,QAAQkmC,WAAWx8B,KACvCq8B,EAAKM,aACJ,IAEP/sC,MAAKssC,SAAStoB,IAAInQ,EAAEnN,QAAQkmC,WAAWx8B,IAAK,WAC1C6R,aAAaD,GACbyqB,EAAKM,eAITA,UAAW,WACT/sC,KAAKssC,SACF35B,OACAyF,QAAQ,UAEXpY,KAAK2sC,YAGPM,eAAgB,WACdjtC,KAAKktC,UAAUhjC,SACflK,KAAKktC,UAAY,MAGnBP,SAAU,SAAUx1B,GAClB,GACI4xB,GAAU/oC,KAAKssC,SAAS5oB,SAAS,QAAU,OAAS,EAExD,IAAI1jB,KAAKwsC,SAAWxsC,KAAKgC,QAAQ2qC,SAAU,CACzC,GAAIQ,GAAYt5B,EAAEnN,QAAQkmC,YAAc7D,CAExC/oC,MAAKktC,UAAYr5B,EAAE,8BAAgCk1B,EAAU,QAC1D/+B,SAASrF,SAASsF,MAErBjK,KAAKktC,UAAUxf,MACY,UAAzB1tB,KAAKgC,QAAQ2qC,SACX94B,EAAEqG,MAAMla,KAAKssC,SAAS,GAAG3gB,MAAO3rB,KAAKssC,SAAS,IAC9Cz4B,EAAEqG,MAAMla,KAAK2S,KAAM3S,OAGnBmtC,GAAWntC,KAAKktC,UAAU,GAAGzjC,YAEjCzJ,KAAKktC,UAAUjqB,SAAS,MAExBkqB,EACEntC,KAAKktC,UAAUlpB,IAAInQ,EAAEnN,QAAQkmC,WAAWx8B,IAAK+G,GAC7CA,SAEQnX,KAAKwsC,SAAWxsC,KAAKktC,WAC/BltC,KAAKktC,UAAU7pB,YAAY,MAE3BxP,EAAEnN,QAAQkmC,YAAc5sC,KAAKssC,SAAS5oB,SAAS,QAC7C1jB,KAAKktC,UAAUlpB,IAAInQ,EAAEnN,QAAQkmC,WAAWx8B,IAAKyD,EAAEqG,MAAMla,KAAKitC,eAAgBjtC,OAC1EA,KAAKitC,kBAEE91B,GACTA,KASR,IAAIyR,GAAM/U,EAAEW,GAAG44B,KAEfv5B,GAAEW,GAAG44B,MAAQ,SAAUvpB,GACrB,MAAO7jB,MAAKoC,KAAK,WACf,GAAIirC,GAAQx5B,EAAE7T,MACV2C,EAAO0qC,EAAM1qC,KAAK,SAClBX,EAAU6R,EAAEzN,UAAWyN,EAAEW,GAAG44B,MAAME,SAAUD,EAAM1qC,OAAyB,gBAAVkhB,IAAsBA,EACtFlhB,IAAM0qC,EAAM1qC,KAAK,QAAUA,EAAO,GAAIypC,GAAMpsC,KAAMgC,IAClC,gBAAV6hB,GAAoBlhB,EAAKkhB,KAC3B7hB,EAAQqG,MAAM1F,EAAK0F,UAIhCwL,EAAEW,GAAG44B,MAAME,UACPX,UAAU,EACVK,UAAU,EACV3kC,MAAM,GAGVwL,EAAEW,GAAG44B,MAAMG,YAAcnB,EAMzBv4B,EAAEW,GAAG44B,MAAMt1B,WAAa,WAEtB,MADAjE,GAAEW,GAAG44B,MAAQxkB,EACN5oB,MAOT6T,EAAElP,UAAUqoB,GAAG,uBAAwB,wBAAyB,SAAU7pB,GACxE,GAAIkqC,GAAQx5B,EAAE7T,MACVylB,EAAO4nB,EAAM/2B,KAAK,QAClBk3B,EAAU35B,EAAEw5B,EAAM/2B,KAAK,gBAAmBmP,GAAQA,EAAKxnB,QAAQ,iBAAkB,KACjF4lB,EAAS2pB,EAAQ7qC,KAAK,SAAW,SAAWkR,EAAEzN,QAASmmC,QAAQ,IAAIvuC,KAAKynB,IAASA,GAAQ+nB,EAAQ7qC,OAAQ0qC,EAAM1qC,OAEnHQ,GAAEkmB,iBAEFmkB,EACGJ,MAAMvpB,GACNG,IAAI,OAAQ,WACXqpB,EAAM1hB,aAIZ7pB,OAAOK;;;AAKT,GAAI0R,GAAG1R,OAAS0R,EAAI/R,OAAOK,OAAO2V,YAAW;;;;;;;;;;;;;;;;;;;;CAsB5C,SAASxa,GAOR,QAASuV,KACP7S,KAAKytC,QAAU,GAAIhuC,QAGrB,QAASiuC,GAAUC,GACbA,IACFA,EAAKC,YAAc5tC,KAAK4tC,UAAYD,EAAKC,WACzCD,EAAKE,WAAa7tC,KAAK6tC,SAAWF,EAAKE,UACnC7tC,KAAK6tC,WACP7tC,KAAK8tC,aAAe,GAAIruC,UAK9B,QAASsuC,GAAaJ,GACpB3tC,KAAKytC,QAAU,GAAIhuC,QACnBiuC,EAAUruC,KAAKW,KAAM2tC,GAQvB,QAASK,GAAmB5mB,EAAUzhB,EAAMsoC,EAAMtvC,GAChD,IAAKsvC,EACH,QAEF,IAAkBC,GAAMr0B,EAAKs0B,EAAQC,EAAOC,EAAQC,EAAgBC,EAAhEC,KACAC,EAAa9oC,EAAK7G,OAAQ4vC,EAAc/oC,EAAKhH,GAAIgwC,EAAWhpC,EAAKhH,EAAE,EACvE,IAAIA,IAAM8vC,GAAcR,EAAKW,WAAY,CAKvC,GAA+B,kBAApBX,GAAKW,WAEd,MADAxnB,IAAYA,EAASvnB,KAAKouC,EAAKW,aACvBX,EAER,KAAKC,EAAO,EAAGr0B,EAAMo0B,EAAKW,WAAW9vC,OAAe+a,EAAPq0B,EAAYA,IACvD9mB,GAAYA,EAASvnB,KAAKouC,EAAKW,WAAWV,GAE5C,QAAQD,GAIZ,GAAqB,MAAhBS,GAAuC,OAAhBA,GAAyBT,EAAKS,GAAc,CAKtE,GAAoB,MAAhBA,EAAqB,CACvB,IAAKP,IAAUF,GACE,eAAXE,GAA2BF,EAAKnuC,eAAequC,KACjDK,EAAYA,EAAU5/B,OAAOo/B,EAAmB5mB,EAAUzhB,EAAMsoC,EAAKE,GAASxvC,EAAE,IAGpF,OAAO6vC,GACF,GAAmB,OAAhBE,EAAsB,CAC9BH,EAAc5vC,EAAE,IAAM8vC,GAAe9vC,EAAE,IAAM8vC,GAA2B,MAAbE,EACxDJ,GAAcN,EAAKW,aAEpBJ,EAAYA,EAAU5/B,OAAOo/B,EAAmB5mB,EAAUzhB,EAAMsoC,EAAMQ,IAGxE,KAAKN,IAAUF,GACE,eAAXE,GAA2BF,EAAKnuC,eAAequC,KACnC,MAAXA,GAA6B,OAAXA,GAChBF,EAAKE,GAAQS,aAAeL,IAC7BC,EAAYA,EAAU5/B,OAAOo/B,EAAmB5mB,EAAUzhB,EAAMsoC,EAAKE,GAASM,KAEhFD,EAAYA,EAAU5/B,OAAOo/B,EAAmB5mB,EAAUzhB,EAAMsoC,EAAKE,GAASxvC,KAE9E6vC,EAAYA,EAAU5/B,OADdu/B,IAAWQ,EACUX,EAAmB5mB,EAAUzhB,EAAMsoC,EAAKE,GAASxvC,EAAE,GAGnDqvC,EAAmB5mB,EAAUzhB,EAAMsoC,EAAKE,GAASxvC,IAIpF,OAAO6vC,GAGTA,EAAYA,EAAU5/B,OAAOo/B,EAAmB5mB,EAAUzhB,EAAMsoC,EAAKS,GAAc/vC,EAAE,IAavF,GAVAyvC,EAAQH,EAAK,KACTG,GAKFJ,EAAmB5mB,EAAUzhB,EAAMyoC,EAAOzvC,EAAE,GAG9C0vC,EAASJ,EAAK,MAEZ,GAAOQ,EAAJ9vC,EAAgB,CACd0vC,EAAOO,YAERZ,EAAmB5mB,EAAUzhB,EAAM0oC,EAAQI,EAI7C,KAAIN,IAAUE,GACE,eAAXF,GAA2BE,EAAOvuC,eAAequC,KAC/CA,IAAWQ,EAEZX,EAAmB5mB,EAAUzhB,EAAM0oC,EAAOF,GAASxvC,EAAE,GAC7CwvC,IAAWO,EAEnBV,EAAmB5mB,EAAUzhB,EAAM0oC,EAAOF,GAASxvC,EAAE,IAErD2vC,KACAA,EAAeH,GAAUE,EAAOF,GAChCH,EAAmB5mB,EAAUzhB,GAAQkpC,KAAMP,GAAkB3vC,EAAE,SAI7D0vC,GAAOO,WAEfZ,EAAmB5mB,EAAUzhB,EAAM0oC,EAAQI,GACnCJ,EAAO,MAAQA,EAAO,KAAKO,YACnCZ,EAAmB5mB,EAAUzhB,EAAM0oC,EAAO,KAAMI,EAIpD,OAAOD,GAGT,QAASM,GAAiBnpC,EAAMopC,GAE9BppC,EAAuB,gBAATA,GAAoBA,EAAKtD,MAAMrC,KAAK4tC,WAAajoC,EAAKpH,OAKpE,KAAI,GAAII,GAAI,EAAGkb,EAAMlU,EAAK7G,OAAc+a,EAANlb,EAAE,EAASA,IAC3C,GAAe,OAAZgH,EAAKhH,IAA6B,OAAdgH,EAAKhH,EAAE,GAC5B,MAOJ,KAHA,GAAIsvC,GAAOjuC,KAAK8tC,aACZjrC,EAAO8C,EAAKoH,QAETlK,GAAM,CAQX,GANKorC,EAAKprC,KACRorC,EAAKprC,GAAQ,GAAIpD,SAGnBwuC,EAAOA,EAAKprC,GAEQ,IAAhB8C,EAAK7G,OAAc,CAErB,GAAKmvC,EAAKW,YAGL,GAA8B,kBAApBX,GAAKW,WAClBX,EAAKW,YAAcX,EAAKW,WAAYG,OAEjC,IAAI/jC,EAAQijC,EAAKW,cAEpBX,EAAKW,WAAW/uC,KAAKkvC,IAEhBd,EAAKW,WAAWI,QAAQ,CAE3B,GAAIjhB,GAAIkhB,CAEiC,oBAA9BjvC,MAAKytC,QAAQyB,eACtBnhB,EAAI/tB,KAAKytC,QAAQyB,cAGfnhB,EAAI,GAAKkgB,EAAKW,WAAW9vC,OAASivB,IAEpCkgB,EAAKW,WAAWI,QAAS,EACzBG,QAAQthC,MAAM,mIAGAogC,EAAKW,WAAW9vC,QAC9BqwC,QAAQC,cAxBZnB,GAAKW,WAAaG,CA4BpB,QAAO,EAETlsC,EAAO8C,EAAKoH,QAEd,OAAO,EAlMT,GAAI/B,GAAU+I,MAAM/I,QAAU+I,MAAM/I,QAAU,SAAkB3H,GAC9D,MAA+C,mBAAxC5D,OAAOC,UAAUpB,SAASe,KAAKgE,IAEpC4rC,EAAsB,EAyM1BlB,GAAaruC,UAAUkuC,UAAY,IAEnCG,EAAaruC,UAAU2vC,gBAAkB,SAAS1xC,GAChDqC,KAAKytC,SAAW56B,EAAKxT,KAAKW,MAC1BA,KAAKytC,QAAQyB,aAAevxC,GAG9BowC,EAAaruC,UAAUwG,MAAQ,GAE/B6nC,EAAaruC,UAAU4b,KAAO,SAASpV,EAAOsO,GAE5C,MADAxU,MAAKsvC,KAAKppC,EAAO,EAAGsO,GACbxU,MAGT+tC,EAAaruC,UAAU4vC,KAAO,SAASppC,EAAOqpC,EAAK/6B,GAOjD,QAASu6B,KACO,MAARQ,GACJ/zB,EAAKnD,IAAInS,EAAO6oC,GAElBv6B,EAAG7U,MAAMK,KAAMwX,WAVjB,GAAIgE,GAAOxb,IAEX,IAAkB,kBAAPwU,GACT,KAAM,IAAInT,OAAM,0CAclB,OAJA0tC,GAASS,QAAUh7B,EAEnBxU,KAAKgtB,GAAG9mB,EAAO6oC,GAERvzB,GAGTuyB,EAAaruC,UAAU+vC,KAAO,WAC5BzvC,KAAKytC,SAAW56B,EAAKxT,KAAKW,KAE1B,IAAI2F,GAAO6R,UAAU,EAErB,IAAa,gBAAT7R,IACG3F,KAAKytC,QAAQiC,YAAe,OAAO,CAI1C,IAAI1vC,KAAK2vC,KAAM,CAGb,IAAK,GAFD/pC,GAAI4R,UAAU1Y,OACdsY,EAAO,GAAIrD,OAAMnO,EAAI,GAChBjH,EAAI,EAAOiH,EAAJjH,EAAOA,IAAKyY,EAAKzY,EAAI,GAAK6Y,UAAU7Y,EACpD,KAAKA,EAAI,EAAGiH,EAAI5F,KAAK2vC,KAAK7wC,OAAY8G,EAAJjH,EAAOA,IACvCqB,KAAKkG,MAAQP,EACb3F,KAAK2vC,KAAKhxC,GAAGgB,MAAMK,KAAMoX,GAK7B,GAAa,UAATzR,KAEG3F,KAAK2vC,MACP3vC,KAAKytC,QAAQ5/B,OACZ7N,KAAK6tC,UAAY7tC,KAAK8tC,aAAajgC,OAErC,KAAI2J,WAAU,YAAcnW,OACpBmW,UAAU,GAEV,GAAInW,OAAM,uCAMtB,IAAIulB,EAEJ,IAAG5mB,KAAK6tC,SAAU,CAChBjnB,IACA,IAAIgpB,GAAqB,gBAATjqC,GAAoBA,EAAKtD,MAAMrC,KAAK4tC,WAAajoC,EAAKpH,OACtEyvC,GAAmB3uC,KAAKW,KAAM4mB,EAASgpB,EAAI5vC,KAAK8tC,aAAc,OAG9DlnB,GAAU5mB,KAAKytC,QAAQ9nC,EAGzB,IAAuB,kBAAZihB,GAAwB,CAEjC,GADA5mB,KAAKkG,MAAQP,EACY,IAArB6R,UAAU1Y,OACZ8nB,EAAQvnB,KAAKW,UAEV,IAAIwX,UAAU1Y,OAAS,EAC1B,OAAQ0Y,UAAU1Y,QAChB,IAAK,GACH8nB,EAAQvnB,KAAKW,KAAMwX,UAAU,GAC7B,MACF,KAAK,GACHoP,EAAQvnB,KAAKW,KAAMwX,UAAU,GAAIA,UAAU,GAC3C,MAEF,SAGE,IAAK,GAFD5R,GAAI4R,UAAU1Y,OACdsY,EAAO,GAAIrD,OAAMnO,EAAI,GAChBjH,EAAI,EAAOiH,EAAJjH,EAAOA,IAAKyY,EAAKzY,EAAI,GAAK6Y,UAAU7Y,EACpDioB,GAAQjnB,MAAMK,KAAMoX,GAE1B,OAAO,EAEJ,GAAIwP,EAAS,CAGhB,IAAK,GAFDhhB,GAAI4R,UAAU1Y,OACdsY,EAAO,GAAIrD,OAAMnO,EAAI,GAChBjH,EAAI,EAAOiH,EAAJjH,EAAOA,IAAKyY,EAAKzY,EAAI,GAAK6Y,UAAU7Y,EAGpD,KAAK,GADD6vC,GAAY5nB,EAAQroB,QACfI,EAAI,EAAGiH,EAAI4oC,EAAU1vC,OAAY8G,EAAJjH,EAAOA,IAC3CqB,KAAKkG,MAAQP,EACb6oC,EAAU7vC,GAAGgB,MAAMK,KAAMoX,EAE3B,OAAQo3B,GAAU1vC,OAAS,GAAMkB,KAAK2vC,KAGtC,MAAO3vC,MAAK2vC,MAKhB5B,EAAaruC,UAAUstB,GAAK,SAASrnB,EAAMopC,GAEzC,GAAoB,kBAATppC,GAET,MADA3F,MAAK6vC,MAAMlqC,GACJ3F,IAGT,IAAwB,kBAAb+uC,GACT,KAAM,IAAI1tC,OAAM,wCAQlB,IANArB,KAAKytC,SAAW56B,EAAKxT,KAAKW,MAI1BA,KAAKyvC,KAAK,cAAe9pC,EAAMopC,GAE5B/uC,KAAK6tC,SAEN,MADAiB,GAAiBzvC,KAAKW,KAAM2F,EAAMopC,GAC3B/uC,IAGT,IAAKA,KAAKytC,QAAQ9nC,IAIb,GAAiC,kBAAvB3F,MAAKytC,QAAQ9nC,GAE1B3F,KAAKytC,QAAQ9nC,IAAS3F,KAAKytC,QAAQ9nC,GAAOopC,OAEvC,IAAI/jC,EAAQhL,KAAKytC,QAAQ9nC,MAE5B3F,KAAKytC,QAAQ9nC,GAAM9F,KAAKkvC,IAGnB/uC,KAAKytC,QAAQ9nC,GAAMqpC,QAAQ,CAE9B,GAAIjhB,GAAIkhB,CAEiC,oBAA9BjvC,MAAKytC,QAAQyB,eACtBnhB,EAAI/tB,KAAKytC,QAAQyB,cAGfnhB,EAAI,GAAK/tB,KAAKytC,QAAQ9nC,GAAM7G,OAASivB,IAEvC/tB,KAAKytC,QAAQ9nC,GAAMqpC,QAAS,EAC5BG,QAAQthC,MAAM,mIAGA7N,KAAKytC,QAAQ9nC,GAAM7G,QACjCqwC,QAAQC,cA1BZpvC,MAAKytC,QAAQ9nC,GAAQopC,CA8BvB,OAAO/uC,OAGT+tC,EAAaruC,UAAUmwC,MAAQ,SAASr7B,GAMtC,GAJIxU,KAAK2vC,OACP3vC,KAAK2vC,SAGW,kBAAPn7B,GACT,KAAM,IAAInT,OAAM,2CAKlB,OADArB,MAAK2vC,KAAK9vC,KAAK2U,GACRxU,MAGT+tC,EAAaruC,UAAUowC,YAAc/B,EAAaruC,UAAUstB,GAE5D+gB,EAAaruC,UAAU2Y,IAAM,SAAS1S,EAAMopC,GAC1C,GAAwB,kBAAbA,GACT,KAAM,IAAI1tC,OAAM,kDAGlB,IAAI+lB,GAAS2oB,IAEb,IAAG/vC,KAAK6tC,SAAU,CAChB,GAAI+B,GAAqB,gBAATjqC,GAAoBA,EAAKtD,MAAMrC,KAAK4tC,WAAajoC,EAAKpH,OACtEwxC,GAAQ/B,EAAmB3uC,KAAKW,KAAM,KAAM4vC,EAAI5vC,KAAK8tC,aAAc,OAEhE,CAEH,IAAK9tC,KAAKytC,QAAQ9nC,GAAO,MAAO3F,KAChConB,GAAWpnB,KAAKytC,QAAQ9nC,GACxBoqC,EAAMlwC,MAAM+uC,WAAWxnB,IAGzB,IAAK,GAAI4oB,GAAM,EAAGA,EAAMD,EAAMjxC,OAAQkxC,IAAS,CAC7C,GAAI9B,GAAO6B,EAAMC,EAEjB,IADA5oB,EAAW8mB,EAAKU,WACZ5jC,EAAQoc,GAAW,CAIrB,IAAK,GAFDkY,GAAW,GAEN3gC,EAAI,EAAGG,EAASsoB,EAAStoB,OAAYA,EAAJH,EAAYA,IACpD,GAAIyoB,EAASzoB,KAAOowC,GACjB3nB,EAASzoB,GAAGowC,UAAY3nB,EAASzoB,GAAGowC,WAAaA,GACjD3nB,EAASzoB,GAAG6wC,SAAWpoB,EAASzoB,GAAG6wC,UAAYT,EAAW,CAC3DzP,EAAW3gC,CACX,OAIJ,GAAe,EAAX2gC,EACF,MAAOt/B,KAGNA,MAAK6tC,SACNK,EAAKU,WAAWjhC,OAAO2xB,EAAU,GAGjCt/B,KAAKytC,QAAQ9nC,GAAMgI,OAAO2xB,EAAU,GAGd,IAApBlY,EAAStoB,SACRkB,KAAK6tC,eACCK,GAAKU,iBAGL5uC,MAAKytC,QAAQ9nC,SAIjByhB,IAAa2nB,GACnB3nB,EAAS2nB,UAAY3nB,EAAS2nB,WAAaA,GAC3C3nB,EAASooB,SAAWpoB,EAASooB,UAAYT,KACvC/uC,KAAK6tC,eACCK,GAAKU,iBAGL5uC,MAAKytC,QAAQ9nC,IAK1B,MAAO3F,OAGT+tC,EAAaruC,UAAUuwC,OAAS,SAASz7B,GACvC,GAAkB0H,GAAdvd,EAAI,EAAGiH,EAAI,CACf,IAAI4O,GAAMxU,KAAK2vC,MAAQ3vC,KAAK2vC,KAAK7wC,OAAS,GAExC,IADAod,EAAMlc,KAAK2vC,KACPhxC,EAAI,EAAGiH,EAAIsW,EAAIpd,OAAY8G,EAAJjH,EAAOA,IAChC,GAAG6V,IAAO0H,EAAIvd,GAEZ,MADAud,GAAIvO,OAAOhP,EAAG,GACPqB,SAIXA,MAAK2vC,OAEP,OAAO3vC,OAGT+tC,EAAaruC,UAAUwwC,eAAiBnC,EAAaruC,UAAU2Y,IAE/D01B,EAAaruC,UAAUywC,mBAAqB,SAASxqC,GACnD,GAAyB,IAArB6R,UAAU1Y,OAEZ,OADCkB,KAAKytC,SAAW56B,EAAKxT,KAAKW,MACpBA,IAGT,IAAGA,KAAK6tC,SAIN,IAAK,GAHD+B,GAAqB,gBAATjqC,GAAoBA,EAAKtD,MAAMrC,KAAK4tC,WAAajoC,EAAKpH,QAClEwxC,EAAQ/B,EAAmB3uC,KAAKW,KAAM,KAAM4vC,EAAI5vC,KAAK8tC,aAAc,GAE9DkC,EAAM,EAAGA,EAAMD,EAAMjxC,OAAQkxC,IAAS,CAC7C,GAAI9B,GAAO6B,EAAMC,EACjB9B,GAAKU,WAAa,SAGjB,CACH,IAAK5uC,KAAKytC,QAAQ9nC,GAAO,MAAO3F,KAChCA,MAAKytC,QAAQ9nC,GAAQ,KAEvB,MAAO3F,OAGT+tC,EAAaruC,UAAU8uC,UAAY,SAAS7oC,GAC1C,GAAG3F,KAAK6tC,SAAU,CAChB,GAAIzmB,MACAwoB,EAAqB,gBAATjqC,GAAoBA,EAAKtD,MAAMrC,KAAK4tC,WAAajoC,EAAKpH,OAEtE,OADAyvC,GAAmB3uC,KAAKW,KAAMonB,EAAUwoB,EAAI5vC,KAAK8tC,aAAc,GACxD1mB,EAST,MANApnB,MAAKytC,SAAW56B,EAAKxT,KAAKW,MAErBA,KAAKytC,QAAQ9nC,KAAO3F,KAAKytC,QAAQ9nC,OACjCqF,EAAQhL,KAAKytC,QAAQ9nC,MACxB3F,KAAKytC,QAAQ9nC,IAAS3F,KAAKytC,QAAQ9nC,KAE9B3F,KAAKytC,QAAQ9nC,IAGtBooC,EAAaruC,UAAU0wC,aAAe,WAEpC,MAAGpwC,MAAK2vC,KACC3vC,KAAK2vC,SAadryC,EAAQ+yC,cAAgBtC,GAGP,mBAAZuC,UAAoD,mBAAlBA,SAAQC,OAA4C,mBAAZjzC,SAA0BA,QAAUwE;;;;;;;;;;;;;;;;;;;;;;;;AA0BvH,SAAWA,EAAQ6C,EAAU8O,EAAUtF,EAAYqiC,EAAoBzO,GAoBvE,QAAS0O,GAAaxuC,EAAQ0jB,GAC1B,GAAIoB,SAAW9kB,GAAO0jB,EACtB,OAAY,YAALoB,KACE,UAALA,IAAiB9kB,EAAO0jB,KACvB,WAALoB,EAGJ,QAAS2pB,GAAazuC,EAAQ0jB,GAC1B,QAAsC,gBAArB1jB,GAAO0jB,KAA0B1jB,EAAO0jB,IAM7D,QAAS3a,GAAQi4B,GACb,MAA6C,mBAAtCxjC,OAAOC,UAAUpB,SAASe,KAAK4jC,GAI1C,QAAS0N,KACL,IACI,GAAIC,GAAU,GAAI3iC,eAAc,gCAIhC,OAHA4iC,GAAe98B,MAAMrU,UAAUnB,MAAMc,KAAKuxC,EAAQE,YAAY,YAAY96B,MAAM,2BAA4B,GAC5G+6B,EAA0BvrB,SAASqrB,EAAa,GAAI,IAAM,GAAKrrB,SAASqrB,EAAa,GAAI,IAAM,EAC/FD,EAAU,MACH,EAEX,MAAOI,GACH,OAAO,GA8Cf,QAASC,KACL,IAAIC,EAAJ,CAGAA,GAAa,CACb,KAAK,GAAIvyC,GAAI,EAAGA,EAAIwyC,EAAcryC,OAAQH,IACtCwyC,EAAcxyC,IAElBwyC,GAAcryC,OAAS,GA0C3B,QAASsyC,GAAU58B,EAAI68B,GACnB,MAAIH,OACA18B,GAAGnV,KAAKgyC,OAGZF,GAActxC,KAAK,WACf2U,EAAGnV,KAAKgyC,KAUhB,QAASC,KACL,GAAIjuC,GAAM4iB,MACV,IAAkB,KAAd2B,EACA,IAAK,GAAIjpB,GAAI,EAAG4yC,EAAK3pB,EAAUvlB,MAAM,KAAM1D,EAAI4yC,EAAGzyC,OAAQH,IACtD0E,EAAMA,EAAIkuC,EAAG5yC,GAGrB,OAAO0E,GAAImuC,QAWf,QAAS15B,GAAW83B,GAOhB,MALA9tC,GAAO0vC,QAAUC,EACjB7pB,EAAYgoB,EACRhoB,IACA8pB,EAAgB,WAAa9pB,EAAU3pB,QAAQ,IAAK,KAAO,KAExDuzC,EAYX,QAASG,GAAcxU,GACnB,MAAOA,GAAInnB,MAAM47B,GAAO,GAS5B,QAASC,GAAQ1U,GACb,MAAOA,GAAInnB,MAAM47B,GAAO,IAAM,GAQlC,QAASE,GAAY3U,GACjB,GAAIpP,GAAIoP,EAAIp6B,cAAciT,MAAM47B,GAC5BG,EAAQhkB,EAAE,GAAIikB,EAASjkB,EAAE,GAAIkkB,EAAOlkB,EAAE,IAAM,EAIhD,QAHc,SAATgkB,GAA4B,OAARE,GAA4B,UAATF,GAA6B,QAARE,KAC7DA,EAAO,IAEJF,EAAQ,KAAOC,EAASC,EAQnC,QAASC,GAAW/U,GAMhB,GAHAA,EAAMA,EAAIl/B,QAAQk0C,EAAe,QAG5BhV,EAAInnB,MAAM,uBAAwB,CAEnC,GAAIo8B,GAAgC,MAAxBjV,EAAI5b,UAAU,EAAG,GAAc,GAAK9N,EAAS4+B,QACjB,OAApCD,EAAK7wB,UAAU6wB,EAAKtzC,OAAS,KAC7BszC,EAAOA,EAAK7wB,UAAU,EAAG6wB,EAAKE,YAAY,KAAO,IAGrDnV,EAAM1pB,EAAS8+B,SAAW,KAAO9+B,EAAS++B,KAAOJ,EAAOjV,EAI5D,KAAOsV,EAASz0C,KAAKm/B,IACjBA,EAAMA,EAAIl/B,QAAQw0C,EAAU,GAGhC,OAAOtV,GAUX,QAASuV,GAAsBvV,EAAKwV,GAEhC,GAAIC,GAAO,GAAI1+B,EAAUipB,EAAIjpB,QAAQ,IACrB,MAAZA,IACA0+B,EAAOzV,EAAI5b,UAAUrN,GACrBipB,EAAMA,EAAI5b,UAAU,EAAGrN,GAE3B,IAAI2+B,KACJ,KAAK,GAAIp0C,KAAOk0C,GACRA,EAAW7yC,eAAerB,IAC1Bo0C,EAAEhzC,KAAKpB,EAAM,IAAMsjC,EAAmB4Q,EAAWl0C,IAGzD,OAAO0+B,IAAO2V,EAAU,IAA2B,IAApB3V,EAAIjpB,QAAQ,KAAa,IAAM,KAAQ2+B,EAAEjzC,KAAK,KAAOgzC,EAuBxF,QAASG,GAAMl0C,GACX,MAAoB,mBAANA,GAkDlB,QAASc,GAAMqzC,EAAat+B,EAAQu+B,GAChC,GAAIC,EACJ,KAAK,GAAIzkC,KAAQiG,GACTA,EAAO5U,eAAe2O,KAClBA,IAAQukC,IACRE,EAASx+B,EAAOjG,GACM,gBAAXykC,GACPvzC,EAAMqzC,EAAYvkC,GAAOykC,EAAQD,GAE3BA,IACND,EAAYvkC,GAAQiG,EAAOjG,KAI/BukC,EAAYvkC,GAAQiG,EAAOjG,GAIvC,OAAOukC,GAIX,QAASG,KACL,GAAIxmB,GAAOhoB,EAASsF,KAAK5E,YAAYV,EAASK,cAAc,SAAUsY,EAAQqP,EAAKtnB,YAAYV,EAASK,cAAc,SACtHsY,GAAMza,KAAO6uC,EAAgB,OAAS0B,EACtCC,EAAwB/1B,IAAUqP,EAAK3oB,SAASsZ,EAAMza,MACtD8B,EAASsF,KAAKW,YAAY+hB,GAe9B,QAAS2mB,GAAYC,GACbR,EAAMM,IACNF,GAEJ,IAAIK,EAIAH,GACAG,EAAQ7uC,EAASK,cAAc,iBAAoBuuC,EAAO/kC,MAAM3L,KAAO,QAGvE2wC,EAAQ7uC,EAASK,cAAc,UAC/BwuC,EAAM3wC,KAAO0wC,EAAO/kC,MAAM3L,MAG9B2wC,EAAM/8B,GAAK+8B,EAAM3wC,KAAO0wC,EAAO/kC,MAAM3L,WAC9B0wC,GAAO/kC,MAAM3L,KAEhB0wC,EAAOE,QACPzmB,EAAGwmB,EAAO,OAAQD,EAAOE,QAGE,gBAApBF,GAAO3zB,YACd2zB,EAAO3zB,UAAYjb,EAAS6R,eAAe+8B,EAAO3zB,YAGjD2zB,EAAO3zB,YAERjgB,EAAM6zC,EAAM9rC,OACR43B,SAAU,WACV5kB,IAAK,YAET64B,EAAO3zB,UAAYjb,EAASsF,KAMhC,IAAIzE,GAAM+tC,EAAO/kC,MAAMhJ,GAcvB,cAbO+tC,GAAO/kC,MAAMhJ,IAGpB7F,EAAM6zC,EAAOD,EAAO/kC,OAEpBglC,EAAMnS,OAASmS,EAAMppC,YAAc,EACnCopC,EAAME,mBAAoB,EAC1BH,EAAO3zB,UAAUva,YAAYmuC,GAG7BA,EAAMhuC,IAAMA,EACZ+tC,EAAO/kC,MAAMhJ,IAAMA,EAEZguC,EAWX,QAASG,GAASC,EAAK5B,GAED,gBAAP4B,KACPA,GAAOA,GAGX,KADA,GAAIC,GAAIl1C,EAAIi1C,EAAI90C,OACTH,KAGH,GAFAk1C,EAAKD,EAAIj1C,GACTk1C,EAAK,GAAI1rB,QAA0B,KAAnB0rB,EAAGpoC,OAAO,EAAG,GAAYooC,EAAM,IAAMA,EAAG51C,QAAQ,QAAS,OAAOA,QAAQ,MAAO,KAAO,KAClG41C,EAAG71C,KAAKg0C,GACR,OAAO,CAGf,QAAO,EAWX,QAAS8B,GAAsBP,GAC3B,GAAgCQ,GAA5BxB,EAAWgB,EAAOhB,QAOtB,IANAgB,EAAOS,OAAST,EAAOS,QAAUjB,EAAMkB,EAAMC,OAC7CpB,EAAUS,EAAOX,OAAQ,EAEpBW,EAAO/kC,QACR+kC,EAAO/kC,UAEN+kC,EAAOS,OAURT,EAAOhH,OAAS2F,EAAWqB,EAAOhH,QAClCgH,EAAOY,QAAUZ,EAAOY,SAAW,UAAYf,IAC/CG,EAAOa,OAASprC,KAAKyX,SAASniB,SAAS,IAAIijB,UAAU,GACjDwxB,EAAMR,KACFT,EAAYr+B,EAASgS,OAASqsB,EAAYyB,EAAOhH,QAIjDgG,EAAW,IAEN9B,EAAa3uC,EAAQ,gBAAkB2uC,EAAa9rC,EAAU,eAInE4tC,EAAW,IAENgB,EAAOc,KAAO5D,EAAa3uC,EAAQ,kBAAoB6uC,IAI5D4B,EAAW,IAEgB,UAAtB7+B,UAAU4gC,SAAuB,gBAAkBxyC,IAAmD,IAAzC4R,UAAU4qB,UAAUpqB,QAAQ,UAI9Fq+B,EAAW,IAENgB,EAAOgB,cAMZhB,EAAOgB,aAAerC,EAAWqB,EAAOgB,cACxChC,EAAW,KAQXA,EAAW,SAhDnB,IAJAgB,EAAOY,QAAUF,EAAMO,MACvBjB,EAAOa,OAASH,EAAMQ,MACtBlB,EAAOhH,OAAS0H,EAAMS,MACtBnC,EAAW0B,EAAMC,MACbX,EAAOK,MAAQD,EAASJ,EAAOK,IAAKL,EAAOhH,QAC3C,KAAM,IAAIlrC,OAAM,qBAAuBkyC,EAAOhH,OAoDtD,QADAgH,EAAOhB,SAAWA,EACVA,GACJ,IAAK,IAQD,GAPA5yC,EAAM4zC,GACFrJ,SAAU,IACVroB,MAAO,IACP8yB,WAAW,EACXC,WAAW,EACXC,YAAY,IACb,GACCtB,EAAOS,OAAQ,CACf,IAAKT,EAAOuB,MAAO,CAIf,IAFA,GAA2G7d,GAAvG+a,EAASv+B,EAAS8+B,SAAW,KAAO9+B,EAAS++B,KAAMuC,EAASpwC,EAASsF,KAAK7E,qBAAqB,OAC/FzG,EAAIo2C,EAAOj2C,OACRH,KAEH,GADAs4B,EAAQ8d,EAAOp2C,GACXs4B,EAAMzxB,IAAI+b,UAAU,EAAGywB,EAAOlzC,UAAYkzC,EAAQ,CAClDuB,EAAOuB,MAAQ7d,EAAMzxB,GACrB,OAGH+tC,EAAOuB,QAERvB,EAAOuB,MAAQhzC,GAIvB,GAAI6wC,IACA6B,MAAOjB,EAAOY,QACdD,MAAO,EAGPX,GAAOuB,QAAUhzC,GAEjByxC,EAAOsB,YAAa,EACpBtB,EAAOqB,WAAY,EACnBrB,EAAOuB,MAAQrhC,EAAS8+B,SAAW,KAAO9+B,EAAS++B,KAAO/+B,EAAS4+B,SAAW5+B,EAASuhC,OACvFrC,EAAW+B,MAAQnB,EAAOuB,MAC1BnC,EAAWsC,OAAS,GAGpBtC,EAAW+B,MAAQxC,EAAWqB,EAAOuB,OAGrCvB,EAAO3zB,YACP2zB,EAAOoB,WAAY,EACnBhC,EAAWuC,OAAS,GAExB3B,EAAOhH,OAASmG,EAAsBa,EAAOhH,OAAQoG,OAGrDhzC,GAAM4zC,GACFY,QAASF,EAAMO,MACfjI,OAAQ0H,EAAMS,MACdE,WAAY7B,EAAMkB,EAAMgB,QACxBJ,YAAa9B,EAAMkB,EAAMiB,QACzBP,UAAWpB,EAAOqB,WAAY,EAAQrB,EAAOoB,WAGrDZ,IAAY,GAAIvC,GAAQn2B,MAAM85B,cAAc5B,GAAS,GAAI/B,GAAQn2B,MAAM+5B,qBAAsB,GAAI5D,GAAQn2B,MAAMg6B,eAC3GC,QAAQ,EACRC,UAAW,IAAOhC,EAAOhH,OAAOztC,SAChC,GAAI0yC,GAAQn2B,MAAMm6B,gBAClBC,SAAUlC,EAAOS,SAErB,MACJ,KAAK,IACDD,GAAY,GAAIvC,GAAQn2B,MAAMq6B,qBAAqBnC,GACnD,MACJ,KAAK,IACDQ,GAAY,GAAIvC,GAAQn2B,MAAMs6B,cAAcpC,GAAS,GAAI/B,GAAQn2B,MAAMg6B,cAAiB,GAAI7D,GAAQn2B,MAAMm6B,gBACtGC,SAAUlC,EAAOS,SAErB,MACJ,KAAK,IACDD,GAAY,GAAIvC,GAAQn2B,MAAMu6B,aAAarC,GAC3C,MACJ,KAAK,IACDQ,GAAY,GAAIvC,GAAQn2B,MAAMw6B,oBAAoBtC,GAClD,MACJ,KAAK,IACDQ,GAAY,GAAIvC,GAAQn2B,MAAMy6B,sBAAsBvC,GACpD,MACJ,KAAK,IACI1C,GACDF,IAEJoD,GAAY,GAAIvC,GAAQn2B,MAAM06B,eAAexC,IAQrD,MAJAQ,GAASl0C,KAAK,GAAI2xC,GAAQn2B,MAAMg6B,eAC5BW,KAAMzC,EAAOyC,KACb9rC,QAAQ,KAEL6pC,EASX,QAASkC,GAAWC,GAkBhB,IAAK,GAjBDC,GAAS7I,GACT8I,SAAU,SAASC,EAASC,GACxBt2C,KAAKu2C,GAAGH,SAASC,EAASC,IAE9BE,SAAU,SAASH,EAASI,GACxBz2C,KAAK02C,KAAKF,SAASH,EAASI,IAEhCt/B,SAAU,SAASgsB,GACfnjC,KAAKu2C,GAAGp/B,SAASgsB,IAErBtwB,KAAM,WACF7S,KAAK02C,KAAK7jC,QAEd8jC,QAAS,WACL32C,KAAK02C,KAAKC,YAGTh4C,EAAI,EAAGkb,EAAMq8B,EAAcp3C,OAAY+a,EAAJlb,EAASA,IACjDw3C,EAAUD,EAAcv3C,GACxBgB,EAAMw2C,EAAS7I,GAAU,GACf,IAAN3uC,IACAw3C,EAAQO,KAAOR,EAAcv3C,EAAI,IAEjCA,IAAMkb,EAAM,IACZs8B,EAAQI,GAAKL,EAAcv3C,EAAI,GAGvC,OAAOw3C,GAOX,QAASS,GAAgBvK,GACrBA,EAAQkK,GAAGG,KAAOrK,EAAQqK,KAC1BrK,EAAQqK,KAAKH,GAAKlK,EAAQkK,GAC1BlK,EAAQkK,GAAKlK,EAAQqK,KAAO,KA1qBhC,GAUIrD,GAEAxC,EACAE,EAuCA/jB,EAAI6pB,EApDJ9uB,EAAS/nB,KACTozC,EAAYpqC,KAAK8tC,MAAsB,IAAhB9tC,KAAKyX,UAC5Bs2B,EAAUh+B,SAASrZ,UACnBkyC,EAAQ,qCACRa,EAAW,kBACXN,EAAgB,cAChBvqB,EAAY,GACZ4pB,KACAC,EAAW3vC,EAAO0vC,QAClBE,EAAgB,WAEhBoB,GAAU,CA0Cd,IAAIrC,EAAa3uC,EAAQ,oBACrBkrB,EAAK,SAAS7gB,EAAQxG,EAAMopC,GACxB5iC,EAAOsJ,iBAAiB9P,EAAMopC,GAAU,IAE5C8H,EAAK,SAAS1qC,EAAQxG,EAAMopC,GACxB5iC,EAAOuJ,oBAAoB/P,EAAMopC,GAAU,QAG9C,CAAA,IAAI0B,EAAa3uC,EAAQ,eAS1B,KAAM,IAAIT,OAAM,wBARhB2rB,GAAK,SAAS/qB,EAAQ+0C,EAAQC,GAC1Bh1C,EAAOwY,YAAY,KAAOu8B,EAAQC,IAEtCJ,EAAK,SAAS50C,EAAQ+0C,EAAQC,GAC1Bh1C,EAAO4T,YAAY,KAAOmhC,EAAQC,IAU1C,GAA4CrhC,GAAxCs7B,GAAa,EAAOC,IA2BxB,IA1BI,cAAgBxsC,IAIhBiR,EAAajR,EAASiR,WACtBs7B,EAA2B,YAAdt7B,IAA+BlC,UAAU4qB,UAAUpqB,QAAQ,kBAAkC,UAAd0B,GAAwC,eAAdA,IAMtHs7B,IAAevsC,EAASsF,MAevBinC,EAAY,CACb,GAAIT,EAAa3uC,EAAQ,oBACrBkrB,EAAGroB,EAAU,mBAAoBssC,OAQjC,IALAjkB,EAAGroB,EAAU,mBAAoB,WACF,YAAvBA,EAASiR,YACTq7B,MAGJtsC,EAAS2U,gBAAgBsB,UAAY9Y,IAAW4Y,IAAK,CACrD,GAAIG,GAAgB,WAChB,IAAIq2B,EAAJ,CAIA,IACIvsC,EAAS2U,gBAAgBsB,SAAS,QAEtC,MAAOzX,GAEH,WADAgL,GAAW0M,EAAe,GAG9Bo2B,KAEJp2B,KAKRmS,EAAGlrB,EAAQ,OAAQmvC,GA+IvB,GAAIgD,GAAS,SAAS32B,GAClBA,EAAQA,EAAMiE,UAAU,GAAGlf,MAAM,IAEjC,KADA,GAAe60C,GAAXv0C,KAAiBhE,EAAI2e,EAAMxe,OACxBH,KACHu4C,EAAO55B,EAAM3e,GAAG0D,MAAM,KACtBM,EAAKu0C,EAAK,IAAM1G,EAAmB0G,EAAK,GAE5C,OAAOv0C,IACT,SAAS3E,KAAKyV,EAASuhC,QAAUvhC,EAASuhC,OAASvhC,EAASm/B,MAkB1DvP,EAAU,WACV,GAAInU,MACA7rB,GACAnF,GAAI,EAAG,EAAG,IACX0lC,EAAO,eAEV,OAAmB,mBAARnmC,OAAiD,kBAAnBA,MAAKyD,WAA4BzD,KAAKyD,UAAUmC,GAAKpF,QAAQ,MAAS,MAAQ2lC,EAE5GnmC,MAEPgC,OAAON,QACHM,OAAON,OAAOkE,GAAKpF,QAAQ,MAAS,MAAQ2lC,IAE5C1U,EAAOhuB,UAAYzB,OAAON,QAIO,kBAA9BI,QAAOG,UAAUy3C,WACxB9zC,EAAMugC,EAAKuT,WACP9zC,EAAInF,GAAsB,IAAjBmF,EAAInF,EAAEY,QAA6B,IAAbuE,EAAInF,EAAE,KAErCgxB,EAAO5tB,MAAQ,SAAS9C,GACpB,MAAOA,GAAI24C,cAKnBjoB,EAAOhuB,WAAaguB,EAAO5tB,OAE3B+hC,EAAU,WACN,MAAOnU,IAEJA,GAEJ,MAsWXvvB,GAAM6xC,GAKFnT,QAAS,aAMT4V,MAAOA,EAIP54B,SAOA1b,MAAOA,EAMPy3C,cAAe/T,EAOf+N,UAAWA,EASXt5B,WAAYA,IA4DhB05B,EAAQ6F,WAOJrqB,GAAIA,EAOJ6pB,GAAIA,EAQJS,aAAc,SAASlF,GACd1B,EAAa5uC,EAAQ,SAGtB6C,EAAS+F,MAAM,uCAA8C0nC,EAAO,iBA8B/E,WAEG,GAAImF,KAQJ/F,GAAQgG,IAOJ5zB,IAAK,SAAS/gB,EAAM2R,GAChB+iC,EAAK10C,GAAQ2R,GASjBqC,IAAK,SAAShU,EAAM40C,GAChB,GAAIjjC,GAAK+iC,EAAK10C,EAKd,OAHI40C,UACOF,GAAK10C,GAET2R,OAoFnBg9B,EAAQkG,OAAS,SAASnE,GAGtB,GAAIl4B,GAAQ46B,EAAWnC,EAAsBP,GAAQ3kC,SACjDwnC,SAAU,SAASC,EAASC,GACxB/C,EAAOoE,UAAUtB,EAASC,IAE9Bn/B,SAAU,SAASgsB,GACXoQ,EAAOqE,SACPrE,EAAOqE,QAAQzU,QAGrBsT,EAAY3E,EAAYyB,EAAOhH,OAGrCvsC,MAAKs2C,OAASxE,EAAYyB,EAAOhH,QAKjCvsC,KAAK22C,QAAU,WACXt7B,EAAMs7B,WAOV32C,KAAK63C,YAAc,SAASxB,GACxBh7B,EAAMm7B,SAASH,EAASI,IAG5Bp7B,EAAMxI,QAmIV2+B,EAAQsG,IAAM,SAASvE,EAAQwE,GAG3B,GAAIA,EAAcjD,MACd,IAAK,GAAI5R,KAAU6U,GAAcjD,MAC7B,GAAIiD,EAAcjD,MAAMh1C,eAAeojC,GAAS,CAC5C,GAAIgQ,GAAS6E,EAAcjD,MAAM5R,EACX,mBAAXgQ,KACP6E,EAAcjD,MAAM5R,IAChBA,OAAQgQ,IAQ5B,GAAI73B,GAAQ46B,EAAWnC,EAAsBP,GAAQ3kC,QAAQ,GAAI4iC,GAAQn2B,MAAM28B,YAAYh4C,KAAM+3C,IAC7F5gC,SAAU,SAASgsB,GACXoQ,EAAOqE,SACPrE,EAAOqE,QAAQzU,OAM3BnjC,MAAKs2C,OAASxE,EAAYyB,EAAOhH,QAMjCvsC,KAAK22C,QAAU,WACXt7B,EAAMs7B,WAGVt7B,EAAMxI,QAqCV2+B,EAAQn2B,MAAMw6B,oBAAsB,SAAStC,GACzC,GAAI0E,GAAKzE,EAAOtN,EAAMgS,CAEtB,OAAQD,IACJzB,SAAU,SAASH,EAASrE,EAAQx9B,GAChC0xB,EAAKmQ,GACD7hC,GACAA,KAGRmiC,QAAS,WACDnD,IACAA,EAAM7vC,WAAWiH,YAAY4oC,GAC7BA,EAAQ,OAGhB2E,WAAY,WACRD,EAAepG,EAAYyB,EAAOhH,QAE9BgH,EAAOS,QAEPr0C,EAAM4zC,EAAO/kC,OACThJ,IAAKktC,EAAsBa,EAAOhH,QAC9BmI,MAAOjhC,EAAS8+B,SAAW,KAAO9+B,EAAS++B,KAAO/+B,EAAS4+B,SAC3DmC,MAAOjB,EAAOY,QACdD,MAAO,IAEXrxC,KAAM6uC,EAAgB6B,EAAOY,QAAU,cAE3CX,EAAQF,EAAYC,GACpB/B,EAAQgG,GAAG5zB,IAAI2vB,EAAOY,QAAS,SAASiE,GAKpC,MAJAlS,GAAOkS,EACPjqC,EAAW,WACP8pC,EAAI1B,GAAGp/B,UAAS,IACjB,GACI,SAASqB,GACZy/B,EAAI1B,GAAGH,SAAS59B,EAAK0/B,QAK7BhS,EAAOoL,IAAkBkG,GAAG3gC,IAAI08B,EAAOY,SAAS,GAAM,SAAS37B,GAC3Dy/B,EAAI1B,GAAGH,SAAS59B,EAAK0/B,KAEzB/pC,EAAW,WACP8pC,EAAI1B,GAAGp/B,UAAS,IACjB,KAGXtE,KAAM,WACFu+B,EAAU6G,EAAIE,WAAYF,MA0CtCzG,EAAQn2B,MAAM06B,eAAiB,SAASxC,GAIpC,QAASoE,GAAUtB,GACfloC,EAAW,WACP8pC,EAAI1B,GAAGH,SAASC,EAAS6B,IAC1B,GAMP,QAASG,GAAOrG,GAEZ,GAAI7U,GAAMoW,EAAOc,IAAM,SAAWd,EAAOS,OACrCv9B,EAAK,eAAiBzN,KAAK8tC,MAAsB,IAAhB9tC,KAAKyX,SAG1C+wB,GAAQgG,GAAG5zB,IAAI,eAAiBouB,EAAO/zC,QAAQ,SAAU,KAAM,WAC3DuzC,EAAQn2B,MAAM06B,eAAe/D,GAAQqC,IAAMA,EAAMiE,EAAax6B,UAE9D,KAAK,GADD9M,GAAQwgC,EAAQn2B,MAAM06B,eAAe/D,GAAQhhC,MACxCrS,EAAI,EAAGA,EAAIqS,EAAMlS,OAAQH,IAC9BqS,EAAMrS,IAEVqS,GAAMlS,OAAS,IAGfy0C,EAAO+E,aACPA,EAA8C,gBAAvB/E,GAAO+E,aAA4B3zC,EAAS6R,eAAe+8B,EAAO+E,cAAgB/E,EAAO+E,cAIhHA,EAAe3zC,EAASK,cAAc,OAKtCrF,EAAM24C,EAAa5wC,MAAOqpC,GAA2BwC,EAAOgF,eACxDjuC,OAAQ,OACRD,MAAO,OACPi1B,SAAU,QACVkZ,MAAO,EACP99B,IAAK,IAELpQ,OAAQ,MACRD,MAAO,MACPi1B,SAAU,WACVltB,SAAU,SACVomC,MAAO,EACP99B,IAAK,IAET/V,EAASsF,KAAK5E,YAAYizC,GAI9B,IAAIG,GAAY,wBAA0BzG,EAAO/zC,QAAQ,SAAU,KAAO,UAAY8pB,EAAOtU,SAAS8+B,SAAW,WAAaZ,EAAc5pB,EAAOtU,SAASgS,MAAQ,SAAWosB,EAAQ9pB,EAAOtU,SAASgS,MAAQ,OAASmC,CACxN0wB,GAAa1xC,UAAY,2EAA6E6P,EAAK,WAAa0mB,EAAM,+HAI9HA,EACA,4CAEAsb,EACA,oEAEAA,EACA,yDACAtb,EACA,2CArEJ,GAAI8a,GACPzE,EAAa0E,EAAc7D,EAAKiE,CAwE7B,OAAQL,IACJzB,SAAU,SAASH,EAASrE,EAAQx9B,GAChC6/B,EAAIwD,YAAYtE,EAAOY,QAASkC,EAAQ/3C,YACpCkW,GACAA,KAGRmiC,QAAS,WACL,IACItC,EAAIqE,eAAenF,EAAOY,SAE9B,MAAOhxC,IAEPkxC,EAAM,KACFb,IACAA,EAAM7vC,WAAWiH,YAAY4oC,GAC7BA,EAAQ,OAGhB2E,WAAY,WAERD,EAAe3E,EAAOhH,OAGtBiF,EAAQgG,GAAG5zB,IAAI,SAAW2vB,EAAOY,QAAU,QAAS,WAChDhmC,EAAW,WACP8pC,EAAI1B,GAAGp/B,UAAS,OAKxBq6B,EAAQgG,GAAG5zB,IAAI,SAAW2vB,EAAOY,QAAU,aAAcwD,GAEzDpE,EAAOc,IAAMnC,EAAWqB,EAAOc,IAC/B,IAAIsE,GAAYhH,EAAc4B,EAAOc,KACjC7/B,EAAK,WAELg9B,EAAQn2B,MAAM06B,eAAe4C,GAAW9lC,MAAO,EAC/CwhC,EAAM7C,EAAQn2B,MAAM06B,eAAe4C,GAAWtE,IAE9CA,EAAIuE,cAAcrF,EAAOY,QAASZ,EAAOa,OAAQtC,EAAYyB,EAAOhH,QAASgH,EAAOS,QAEhFT,EAAOS,SAEHjD,GAA2BwC,EAAOgF,eAClC54C,EAAM4zC,EAAO/kC,OACT8wB,SAAU,QACVkZ,MAAO,EACP99B,IAAK,EACLpQ,OAAQ,OACRD,MAAO,SAIf1K,EAAM4zC,EAAO/kC,OACThJ,IAAKktC,EAAsBa,EAAOhH,QAC9BmI,MAAO5C,EAAYr+B,EAASgS,MAC5B+uB,MAAOjB,EAAOY,QACdD,MAAO,EACPO,MAAOlB,EAAOa,SAElBvxC,KAAM6uC,EAAgB6B,EAAOY,QAAU,cAE3CX,EAAQF,EAAYC,IAIxB/B,GAAQn2B,MAAM06B,eAAe4C,IAAcnH,EAAQn2B,MAAM06B,eAAe4C,GAAW9lC,KAEnF2B,IAIKg9B,EAAQn2B,MAAM06B,eAAe4C,GAQ9BnH,EAAQn2B,MAAM06B,eAAe4C,GAAW3nC,MAAMnR,KAAK2U,IANnDg9B,EAAQn2B,MAAM06B,eAAe4C,IACzB3nC,OAAQwD,IAEZ6jC,EAAOM,KAOnB9lC,KAAM,WACFu+B,EAAU6G,EAAIE,WAAYF,MAwCtCzG,EAAQn2B,MAAMq6B,qBAAuB,SAASnC,GAW1C,QAASsF,GAAW3yC,GAChB,GAAIA,EAAMowC,OAEN,MAAOxE,GAAY5rC,EAAMowC,OAE7B,IAAIpwC,EAAM4yC,IAEN,MAAOhH,GAAY5rC,EAAM4yC,IAE7B,IAAI5yC,EAAM8rC,OAGN,MAAOv+B,GAAS8+B,SAAW,KAAOrsC,EAAM8rC,MAE5C,MAAM,6CASV,QAAS+G,GAAkB7yC,GACvB,GAAIowC,GAASuC,EAAW3yC,EACpBowC,IAAU4B,GAAgBhyC,EAAMvD,KAAK4e,UAAU,EAAGgyB,EAAOY,QAAQr1C,OAAS,IAAMy0C,EAAOY,QAAU,KACjG8D,EAAI1B,GAAGH,SAASlwC,EAAMvD,KAAK4e,UAAUgyB,EAAOY,QAAQr1C,OAAS,GAAIw3C,GApCzE,GAAI2B,GACPzE,EACAwF,EACAd,CAqCG,OAAQD,IACJzB,SAAU,SAASH,EAASrE,EAAQx9B,GAChCwkC,EAAanB,YAAYtE,EAAOY,QAAU,IAAMkC,EAASrE,GAAUkG,GAC/D1jC,GACAA,KAGRmiC,QAAS,WACLE,EAAG/0C,EAAQ,UAAWi3C,GAClBvF,IACAwF,EAAe,KACfxF,EAAM7vC,WAAWiH,YAAY4oC,GAC7BA,EAAQ,OAGhB2E,WAAY,WAER,GADAD,EAAepG,EAAYyB,EAAOhH,QAC9BgH,EAAOS,OAAQ,CAEf,GAAIiF,GAAe,SAAS/yC,GACpBA,EAAMvD,MAAQ4wC,EAAOY,QAAU,WAE/B6E,EAAgB,eAAiBxF,GAAMhpC,cAAiBgpC,EAAMhpC,cAAgBgpC,EAAMhpC,cAAc7F,SAClGkyC,EAAG/0C,EAAQ,UAAWm3C,GACtBjsB,EAAGlrB,EAAQ,UAAWi3C,GACtB5qC,EAAW,WACP8pC,EAAI1B,GAAGp/B,UAAS,IACjB,IAGX6V,GAAGlrB,EAAQ,UAAWm3C,GAGtBt5C,EAAM4zC,EAAO/kC,OACThJ,IAAKktC,EAAsBa,EAAOhH,QAC9BmI,MAAO5C,EAAYr+B,EAASgS,MAC5B+uB,MAAOjB,EAAOY,QACdD,MAAO,IAEXrxC,KAAM6uC,EAAgB6B,EAAOY,QAAU,cAE3CX,EAAQF,EAAYC,OAIpBvmB,GAAGlrB,EAAQ,UAAWi3C,GACtBC,EAAgB,eAAiBl3C,GAAOmkB,OAAUnkB,EAAOmkB,OAASnkB,EAAOmkB,OAAOthB,SAChFq0C,EAAanB,YAAYtE,EAAOY,QAAU,SAAU+D,GAEpD/pC,EAAW,WACP8pC,EAAI1B,GAAGp/B,UAAS,IACjB,IAGXtE,KAAM,WACFu+B,EAAU6G,EAAIE,WAAYF,MAuCtCzG,EAAQn2B,MAAMy6B,sBAAwB,SAASvC,GAC3C,GAAI0E,GAAKzE,EAAOtN,EAAMgS,CAEtB,OAAQD,IACJzB,SAAU,SAASH,EAASrE,EAAQx9B,GAChC0xB,EAAK7mC,KAAKW,KAAMq2C,GACZ7hC,GACAA,KAGRmiC,QAAS,WACDnD,IACAA,EAAM7vC,WAAWiH,YAAY4oC,GAC7BA,EAAQ,OAGhB2E,WAAY,WACRD,EAAepG,EAAYyB,EAAOhH,QAE9BgH,EAAOS,QAEPr0C,EAAM4zC,EAAO/kC,OACThJ,IAAKktC,EAAsBa,EAAOhH,QAC9BmI,MAAO5C,EAAYr+B,EAASgS,MAC5B+uB,MAAOjB,EAAOY,QACdD,MAAO,IAEXrxC,KAAM6uC,EAAgB6B,EAAOY,QAAU,cAE3CX,EAAQF,EAAYC,GACpBC,EAAMh/B,GAAK,SAAS4jC,GAOhB,aANO5E,GAAMh/B,GACb0xB,EAAOkS,EACPjqC,EAAW,WACP8pC,EAAI1B,GAAGp/B,UAAS,IACjB,GAEI,SAASqB,GACZy/B,EAAI1B,GAAGH,SAAS59B,EAAK0/B,OAMzBvzC,EAASu0C,UAAYpH,EAAYntC,EAASu0C,WAAajF,EAAMS,QAC7D5yC,EAAO4Y,IAAIjH,SAAWwgC,EAAMS,OAEhCxO,EAAOpkC,EAAO6Y,aAAanG,GAAG,SAASgE,GACnCy/B,EAAI1B,GAAGH,SAAS59B,EAAK0/B,KAEzBD,EAAI1B,GAAGp/B,UAAS,KAGxBtE,KAAM,WACFu+B,EAAU6G,EAAIE,WAAYF,MAwCtCzG,EAAQn2B,MAAMs6B,cAAgB,SAASpC,GAKnC,QAAS4F,GAAa9C,GAClB,GAAIlZ,GAAMoW,EAAOgB,cAAgBP,EAAS,MAAQ,OAAST,EAAOY,OAClE6E,GAAaxuC,cAAc4uC,YAAY/C,EAASlZ,GAGpD,QAASkc,KACDrF,EACqB,MAAfsF,GAAqBtF,GACvBiE,EAAI1B,GAAGp/B,UAAS,IAIpBgiC,EAAa,SACblB,EAAI1B,GAAGp/B,UAAS,IAIxB,QAASoiC,GAAWlD,GAChB4B,EAAI1B,GAAGH,SAASC,EAASmD,GAG7B,QAASC,KACDtiC,GACAhJ,EAAW,WACPgJ,GAAS,IACV,GA5BX,GAAI8gC,GACAjE,EAAQgF,EAAcU,EAAcJ,EAAYniC,EAAUqiC,EAAcG,CA+B5E,OAAQ1B,IACJzB,SAAU,SAASH,EAASrE,EAAQx9B,GAChC2C,EAAW3C,EACX2kC,EAAa9C,IAEjBM,QAAS,WACLqC,EAAar1C,WAAWiH,YAAYouC,GACpCA,EAAe,KACXhF,IACA0F,EAAa/1C,WAAWiH,YAAY8uC,GACpCA,EAAe,OAGvBvB,WAAY,WACRnE,EAAST,EAAOS,OAChBsF,EAAa,EACbE,EAAe1H,EAAYyB,EAAOhH,QAClCgH,EAAOuB,MAAQ5C,EAAWqB,EAAOuB,OAE7Bd,GAEAxC,EAAQgG,GAAG5zB,IAAI2vB,EAAOY,QAAS,SAASkC,GAChCrC,GAAsB,UAAZqC,IAEV7E,EAAQgG,GAAG5zB,IAAI2vB,EAAOY,QAASoF,GAC/BF,OAKRM,EAAYjH,EAAsBa,EAAOhH,QACrCmI,MAAOnB,EAAOuB,MACdN,MAAOjB,EAAOY,QACdD,MAAO,IAEXv0C,EAAM4zC,EAAO/kC,OACThJ,IAAKm0C,EAAY,IAAMpG,EAAOY,QAC9BtxC,KAAM6uC,EAAgB6B,EAAOY,QAAU,cAE3CuF,EAAepG,EAAYC,KAG3BA,EAAOgB,aAAehB,EAAOhH,OAC7BiF,EAAQgG,GAAG5zB,IAAI2vB,EAAOY,QAASoF,IAInCP,EAAe1F,GACX9kC,OACIhJ,IAAK+tC,EAAOuB,MAAQ,MAAQvB,EAAOY,SAEvCV,OAAQ,QAASA,KAEb,GAAImG,GAAIZ,GAAgBh5C,IACxB62C,GAAG+C,EAAG,OAAQnG,GACdjC,EAAQgG,GAAG5zB,IAAI2vB,EAAOY,QAAU,QAASsF,GACxC,QAASz7C,KACoC,kBAA/B47C,GAAEpvC,cAAc4uC,YACvBC,IAGAlrC,EAAWnQ,EAAM,WAMrC6U,KAAM,WACFu+B,EAAU6G,EAAIE,WAAYF,MAyCtCzG,EAAQn2B,MAAM85B,cAAgB,SAAS5B,GAKnC,QAAS4F,GAAa9C,GAClB,GAAKwD,EAAL,CAGA,GAAI1c,GAAMoW,EAAOhH,OAAS,IAAOuN,KAAY,IAAMzD,GACjDrC,IAAWY,EAAaiF,EAAcrvC,cAAgBqvC,GAAepmC,SAAW0pB,GAGtF,QAAS4c,GAAYnH,GACjBoH,EAAWpH,EACXqF,EAAI1B,GAAGH,SAAS4D,EAASz4B,UAAUy4B,EAAS9lC,QAAQ,KAAO,GAAI+lC,GAOnE,QAASC,KACL,GAAKC,EAAL,CAGA,GAAI10B,GAAO00B,EAAgB1mC,SAASgS,KAAMmtB,EAAO,GAAI1+B,EAAUuR,EAAKvR,QAAQ,IAC7D,KAAXA,IACA0+B,EAAOntB,EAAKlE,UAAUrN,IAEtB0+B,GAAQA,GAAQoH,GAChBD,EAAYnH,IAIpB,QAASwH,KACLC,EAASpQ,YAAYiQ,EAAWI,GAnCpC,GAAIrC,GACWjE,EAAQqG,EAAQC,EAAcN,EAAUF,EAAQK,EAAiBN,EAC5EjF,EAAWqF,CAoCf,OAAQhC,IACJzB,SAAU,SAASH,GACf8C,EAAa9C,IAEjBM,QAAS,WACL70C,EAAOqoC,cAAckQ,IACjBrG,IAAWY,IACXiF,EAAcl2C,WAAWiH,YAAYivC,GAEzCA,EAAgB,MAEpB1B,WAAY,WAOR,GANAnE,EAAST,EAAOS,OAChBsG,EAAe/G,EAAOrJ,SACtB8P,EAAW,IAAMzG,EAAOY,QACxB2F,EAAS,EACTlF,EAAYrB,EAAOqB,UACnBqF,EAAgBnI,EAAYyB,EAAOhH,QAC/ByH,EAAQ,CAKR,GAJAT,EAAO/kC,OACHhJ,IAAK+tC,EAAOhH,OACZ1pC,KAAM6uC,EAAgB6B,EAAOY,QAAU,aAEvCS,EACArB,EAAOE,OAAS,WACZ0G,EAAkBr4C,EAClBs4C,IACAnC,EAAI1B,GAAGp/B,UAAS,QAGnB,CACD,GAAIojC,GAAQ,EAAGtxC,EAAMsqC,EAAO1xB,MAAQ,IACnC,QAAS24B,KACN,KAAMD,EAAQtxC,EACV,KAAM,IAAI5H,OAAM,qCAEpB,KACI84C,EAAkBN,EAAcrvC,cAAciwC,OAAO/I,EAAgB6B,EAAOY,QAAU,aAE1F,MAAOuG,IAEHP,GACAC,IACAnC,EAAI1B,GAAGp/B,UAAS,IAGhBhJ,EAAWqsC,EAAQ,OAI/BX,EAAgBvG,EAAYC,OAG5B4G,GAAkBr4C,EAClBs4C,IACIxF,GACAiF,EAAgB5zB,OAChBgyB,EAAI1B,GAAGp/B,UAAS,KAGhBxX,EAAM4zC,GACF/kC,OACIhJ,IAAK+tC,EAAOhH,OAAS,IAAMgH,EAAOY,QAAU,GAAIp0C,MAChD8C,KAAM6uC,EAAgB6B,EAAOY,QAAU,aAE3CV,OAAQ,WACJwE,EAAI1B,GAAGp/B,UAAS,MAGxB0iC,EAAgBvG,EAAYC,KAIxC1gC,KAAM,WACFu+B,EAAU6G,EAAIE,WAAYF,MAqCtCzG,EAAQn2B,MAAM+5B,iBAAmB,WAC7B,GAAI6C,GACP9gC,EACOwjC,EAAQ,EAAGC,EAAO,EAAGC,EAAiB,EAE1C,OAAQ5C,IACJ7B,SAAU,SAASC,EAASC,GACxB,GAAIpiC,GAAUmiC,EAAQniC,QAAQ,KAAM4mC,EAAMzE,EAAQ90B,UAAU,EAAGrN,GAAS7R,MAAM,IAC9Eg0C,GAAUA,EAAQ90B,UAAUrN,EAAU,GAElC4mC,EAAI,IAAMH,IACVE,EAAiB,GACb1jC,GACAA,GAAS,IAGbk/B,EAAQv3C,OAAS,IACjBm5C,EAAIvB,KAAKF,SAASsE,EAAI,GAAK,IAAMH,EAAQ,IAAME,EAAgBvE,GAC3DsE,GAAQE,EAAI,KACZF,EAAOE,EAAI,GACX7C,EAAI1B,GAAGH,SAASC,EAASC,MAKrCE,SAAU,SAASH,EAASC,EAAQ9hC,GAChCqmC,EAAiBxE,EACjBl/B,EAAW3C,EACXyjC,EAAIvB,KAAKF,SAASoE,EAAO,OAASD,EAAS,IAAMtE,EAASC,MAyCtE9E,EAAQn2B,MAAMg6B,cAAgB,SAAS9B,GAGnC,QAASjsB,KACL,GAAIisB,EAAOrpC,QAA2B,IAAjB8G,EAAMlS,OAEvB,WADA83C,GAAgBqB,EAGpB,KAAI8C,GAA4B,IAAjB/pC,EAAMlS,SAAgBk8C,EAArC,CAGAD,GAAU,CACV,IAAI1E,GAAUrlC,EAAMjE,OAEpBkrC,GAAIvB,KAAKF,SAASH,EAAQ1zC,KAAM0zC,EAAQC,OAAQ,SAASnT,GACrD4X,GAAU,EACN1E,EAAQl/B,UACRhJ,EAAW,WACPkoC,EAAQl/B,SAASgsB,IAClB,GAEP7b,OApBR,GAAI2wB,GAAgD+C,EAA3ChqC,KAAY+pC,GAAU,EAAM3E,EAAW,GAAgBb,EAAY,EAAGS,GAAO,EAAOiF,GAAa,CAuB1G,OAAQhD,IACJplC,KAAM,WACEkgC,EAAMQ,KACNA,MAEAA,EAAOgC,YACPA,EAAYhC,EAAOgC,UACnB0F,GAAa,GAEb1H,EAAOyC,KACPA,GAAO,EAGPiC,EAAIvB,KAAK7jC,QAGjBsE,SAAU,SAASgsB,GACf4X,GAAU,CACV,IAAIxE,GAAK0B,EAAI1B,EACbjvB,KACAivB,EAAGp/B,SAASgsB,IAEhBiT,SAAU,SAASC,EAASC,GACxB,GAAI2E,EAAY,CACZ,GAAI/mC,GAAUmiC,EAAQniC,QAAQ,KAAMgnC,EAAM11B,SAAS6wB,EAAQ90B,UAAU,EAAGrN,GAAU,GAClFkiC,IAAYC,EAAQ90B,UAAUrN,EAAU,GAC5B,IAARgnC,IACI3H,EAAO+B,SACPc,EAAW5F,EAAmB4F,IAElC6B,EAAI1B,GAAGH,SAASA,EAAUE,GAC1BF,EAAW,QAIf6B,GAAI1B,GAAGH,SAASC,EAASC,IAGjCE,SAAU,SAASH,EAASC,EAAQ9hC,GAC5B++B,EAAO+B,SACPe,EAAUtU,EAAmBsU,GAEjC,IAAoBx9B,GAAhBykB,IACJ,IAAI2d,EAAY,CAEZ,KAA0B,IAAnB5E,EAAQv3C,QACX+Z,EAAWw9B,EAAQ90B,UAAU,EAAGg0B,GAChCc,EAAUA,EAAQ90B,UAAU1I,EAAS/Z,QACrCw+B,EAAUz9B,KAAKgZ,EAGnB,MAAQA,EAAWykB,EAAUvwB,SACzBiE,EAAMnR,MACF8C,KAAM26B,EAAUx+B,OAAS,IAAM+Z,EAC/By9B,OAAQA,EACRn/B,SAA+B,IAArBmmB,EAAUx+B,OAAe0V,EAAK,WAKhDxD,GAAMnR,MACF8C,KAAM0zC,EACNC,OAAQA,EACRn/B,SAAU3C,GAGdwhC,GACAiC,EAAIvB,KAAK7jC,OAGTyU,KAGRqvB,QAAS,WACLqE,GAAa,EACb/C,EAAIvB,KAAKC,aAuCrBnF,EAAQn2B,MAAMm6B,eAAiB,SAASjC,GAGpC,QAAS4H,KACLC,EAAWpyC,KAAKyX,SAASniB,SAAS,IAAIijB,UAAU,GAChD02B,EAAIvB,KAAKF,SAAS4E,GAJtB,GAAInD,GAAKmD,EAAUC,CAOnB,OAAQpD,IACJ7B,SAAU,SAASC,EAASC,GACxB,GAAIpiC,GAAUmiC,EAAQniC,QAAQ,IACd,MAAZA,EACImiC,IAAY+E,EACZnD,EAAI1B,GAAGp/B,UAAS,GAEVkkC,IACNA,EAAchF,EACT9C,EAAOkC,UACR0F,IAEJlD,EAAIvB,KAAKF,SAASH,IAIlBA,EAAQ90B,UAAU,EAAGrN,KAAamnC,GAClCpD,EAAI1B,GAAGH,SAASC,EAAQ90B,UAAUrN,EAAU,GAAIoiC,IAI5DE,SAAU,SAASH,EAASC,EAAQ9hC,GAChCyjC,EAAIvB,KAAKF,SAAS4E,EAAW,IAAM/E,EAASC,EAAQ9hC,IAExD2C,SAAU,WACFo8B,EAAOkC,UACP0F,OA2ChB3J,EAAQn2B,MAAM28B,YAAc,SAAS99B,EAAOq5B,GASxC,QAAS+H,GAAM34C,GACXA,EAAK44C,QAAU,MACftD,EAAIvB,KAAKF,SAASgF,EAAWt6C,UAAUyB,IAU3C,QAAS84C,GAAcC,EAAYxY,GAC/B,GAAI3kC,GAAQwV,MAAMrU,UAAUnB,KAE5B,OAAO,YACH,GAA0B4Y,GAAtBvR,EAAI4R,UAAU1Y,OAAkBu3C,GAChCnT,OAAQA,EAGRt9B,GAAI,GAAiC,kBAArB4R,WAAU5R,EAAI,IAE1BA,EAAI,GAAiC,kBAArB4R,WAAU5R,EAAI,IAE9BuR,GACIgsB,QAAS3rB,UAAU5R,EAAI,GACvBiI,MAAO2J,UAAU5R,EAAI,IAEzBywC,EAAQvT,OAASvkC,EAAMc,KAAKmY,UAAW,EAAG5R,EAAI,KAI9CuR,GACIgsB,QAAS3rB,UAAU5R,EAAI,IAE3BywC,EAAQvT,OAASvkC,EAAMc,KAAKmY,UAAW,EAAG5R,EAAI,IAElD+1C,EAAW,MAAQC,GAAqBzkC,EACxCk/B,EAAQ5/B,GAAKmlC,GAIbvF,EAAQvT,OAASvkC,EAAMc,KAAKmY,UAAW,GAEvCkkC,EAAWG,aAAyC,IAA1BxF,EAAQvT,OAAOhkC,SACzCu3C,EAAQvT,OAASuT,EAAQvT,OAAO,IAGpCwY,EAAMjF,IAYd,QAASyF,GAAe5Y,EAAQzsB,EAAIjC,EAAIsuB,GACpC,IAAKtuB,EAUD,YATIiC,GACA6kC,GACI7kC,GAAIA,EACJ5I,OACIkuC,KAAM,OACN1F,QAAS,0BAOzB,IAAIlT,GAASt1B,CACT4I,IACA0sB,EAAU,SAASp0B,GACfo0B,EAAU4T,EACVuE,GACI7kC,GAAIA,EACJ1H,OAAQA,KAGhBlB,EAAQ,SAASwoC,EAAS1zC,GACtBkL,EAAQkpC,CACR,IAAIv+B,IACA/B,GAAIA,EACJ5I,OACIkuC,KAAM,OACN1F,QAASA,GAGb1zC,KACA6V,EAAI3K,MAAMlL,KAAOA,GAErB24C,EAAM9iC,KAIV2qB,EAAUt1B,EAAQkpC,EAGjB/rC,EAAQ83B,KACTA,GAAUA,GAEd,KACI,GAAI/zB,GAASyF,EAAG0uB,OAAOvjC,MAAM6U,EAAG68B,MAAOvO,EAAOl0B,QAAQu0B,EAASt1B,IAC1DklC,GAAMhkC,IACPo0B,EAAQp0B,GAGhB,MAAOitC,GACHnuC,EAAMmuC,EAAI3F,UAxHlB,GAAI4B,GAAKuD,EAAajI,EAAOiI,YAAcnY,IACvCuY,EAAmB,EAAGD,IA2H1B,OAAQ1D,IACJ7B,SAAU,SAASC,GACf,GAAI1zC,GAAO64C,EAAWl6C,MAAM+0C,EAC5B,IAAI1zC,EAAKugC,OAEDqQ,EAAOttC,OACPstC,EAAOttC,OAAOtD,EAAM24C,GAGpBQ,EAAen5C,EAAKugC,OAAQvgC,EAAK8T,GAAI88B,EAAOuB,MAAMnyC,EAAKugC,QAASvgC,EAAKmgC,YAGxE,CAED,GAAI3rB,GAAWwkC,EAAWh5C,EAAK8T,GAC3B9T,GAAKkL,MACDsJ,EAAStJ,OACTsJ,EAAStJ,MAAMlL,EAAKkL,OAGnBsJ,EAASgsB,SACdhsB,EAASgsB,QAAQxgC,EAAKoM,cAEnB4sC,GAAWh5C,EAAK8T,MAG/B5D,KAAM,WACF,GAAI0gC,EAAOhH,OAEP,IAAK,GAAIrJ,KAAUqQ,GAAOhH,OAClBgH,EAAOhH,OAAOzsC,eAAeojC,KAC7BhpB,EAAMgpB,GAAUuY,EAAclI,EAAOhH,OAAOrJ,GAASA,GAIjE+U,GAAIvB,KAAK7jC,QAEb8jC,QAAS,WACL,IAAK,GAAIzT,KAAUqQ,GAAOhH,OAClBgH,EAAOhH,OAAOzsC,eAAeojC,IAAWhpB,EAAMpa,eAAeojC,UACtDhpB,GAAMgpB,EAGrB+U,GAAIvB,KAAKC,aAIrB5uB,EAAOypB,QAAUA,GACd1vC,OAAQ6C,SAAU8O,SAAU3R,OAAOqM,WAAYqiC,mBAAoBzO;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BtE,GAAIxkC,GAOJA,IAAK,WAYJ,GAAI0+C,GAAiB,SAASpsB,EAAMpK,GAEnC,QAASy2B,GAAkB5+B,GAC1B,GAAI6+B,KAWJ,OAVA7+B,GAAMrf,QAAQ,kBAAmB,IAC/BA,QAAQ,iBAAkB,KAC1BA,QAAQ,UAAW,QACnBA,QAAQ,aAAc,SAAU4rC,GACtB,QAANA,EACHsS,EAAOl3C,MAEPk3C,EAAOt8C,KAAKgqC,KAGRsS,EAAOv8C,KAAK,IAAI3B,QAAQ,MAA2B,MAApBqf,EAAM1V,OAAO,GAAa,IAAM,IAMvE,MAHA6d,GAAO22B,EAAU32B,GAAQ,IACzBoK,EAAOusB,EAAUvsB,GAAQ,IAEjBpK,GAASoK,GAAepK,EAAK8sB,UAAY1iB,EAAK0iB,WACpD9sB,EAAK8sB,UAAY9sB,EAAK42B,UAAY52B,EAAK42B,UAAYxsB,EAAKwsB,WACzDH,EAAkBz2B,EAAK8sB,UAAY9sB,EAAK42B,WAAyC,MAA5B52B,EAAK4sB,SAASzqC,OAAO,GAAa6d,EAAK4sB,SAAY5sB,EAAK4sB,UAAaxiB,EAAKwsB,YAAcxsB,EAAKwiB,SAAW,IAAM,IAAMxiB,EAAKwiB,SAAS9zC,MAAM,EAAGsxB,EAAKwiB,SAASC,YAAY,KAAO,GAAK7sB,EAAK4sB,SAAYxiB,EAAKwiB,WAC3P5sB,EAAK8sB,UAAY9sB,EAAK42B,WAAa52B,EAAK4sB,SAAW5sB,EAAKuvB,OAAUvvB,EAAKuvB,QAAUnlB,EAAKmlB,QACvFvvB,EAAKmtB,KAJkB,MAgBrBwJ,EAAY,SAASjf,GACxB,GAAIpP,GAAIxuB,OAAO49B,GAAKl/B,QAAQ,aAAc,IAAI+X,MAAM,qGAEpD,OAAQ+X,IACNtI,KAAWsI,EAAE,IAAM,GACnBwkB,SAAWxkB,EAAE,IAAM,GACnBsuB,UAAWtuB,EAAE,IAAM,GACnBykB,KAAWzkB,EAAE,IAAM,GACnBuuB,SAAWvuB,EAAE,IAAM,GACnBkkB,KAAWlkB,EAAE,IAAM,GACnBskB,SAAWtkB,EAAE,IAAM,GACnBinB,OAAWjnB,EAAE,IAAM,GACnB6kB,KAAW7kB,EAAE,IAAM,IAChB,KAGN,QAMCwuB,kBAAmB,SAAS99C,EAAKS,GAChC,MAAW,QAAPT,GAAwB,MAAPA,GAAsB,UAAPA,EAC5BiD,OAEAxC,GAsCTs9C,QAWAp2C,OAAQ,SAAUwpC,EAAIvsC,EAAKo5C,GAC1B,GAAIC,GAAwB,kBAARr5C,GAChB+d,EAAQwuB,EAAKA,EAAGvtC,MAAM,QACtB4jB,EAASjmB,IACbqD,GAAMA,MAGW,OAAb+d,EAAM,KACTA,EAAQA,EAAM7iB,MAAM,GAIrB,KAAK,GAAII,GAAI,EAAGkb,EAAMuH,EAAMtiB,OAAY+a,EAAJlb,EAASA,IACvCsnB,EAAO7E,EAAMziB,MACjBsnB,EAAO7E,EAAMziB,IAAM+9C,GAAU/9C,EAAI,GAAKkb,EAAMxW,MAE7C4iB,EAASA,EAAO7E,EAAMziB,GAIvB,KAAK+9C,EACJ,IAAK,GAAIjuC,KAAQpL,IACY,mBAAjB4iB,GAAOxX,IAAyBguC,KAC1Cx2B,EAAOxX,GAAQpL,EAAIoL,GAKtB,OAAOwX,IAQRhM,KAAM,WACL,GAAI0iC,GAAK,WACR,OAA2B,OAAjB,EAAE3zC,KAAKyX,UAAmB,GAAGniB,SAAS,IAAIijB,UAAU,GAE/D,OAAQo7B,KAAKA,IAAK,IAAIA,IAAK,IAAIA,IAAK,IAAIA,IAAK,IAAIA,IAAKA,IAAKA,KAS5Dl4C,QAAS,SAASvF,EAAO09C,GACxB,MAAOz6C,QAAOsC,QAAQvF,EAAO09C,GAAS,IASvCC,eAAgB,SAAS1f,GACxB,GAGC8E,GACAD,EAJGU,EAAO,8CACVoa,EAAW3f,EAAIp6B,cACfqe,EAAQshB,EAAK35B,KAAM+zC,EAIpB,KACC7a,EAAexuB,SAASgS,KACvB,MAAOtiB,GAGR8+B,EAAet9B,SAASK,cAAc,KACtCi9B,EAAaxc,KAAO,GACpBwc,EAAeA,EAAaxc,KAG7Bwc,EAAeA,EAAal/B,cAIvBqe,IACJ07B,EAAWb,EAAeha,EAAa6a,GAAU/5C,cACjDqe,EAAQshB,EAAK35B,KAAM+zC,IAIpB9a,EAAeU,EAAK35B,KAAMk5B,MAG1B,IAAIvY,KAAYtI,IACbA,EAAO,KAAQ4gB,EAAc,IAAO5gB,EAAO,KAAQ4gB,EAAc,KAChE5gB,EAAO,KAAuB,UAAfA,EAAO,GAAkB,KAAO,WAC9C4gB,EAAc,KAA8B,UAAtBA,EAAc,GAAkB,KAAO,SAElE,OAAOtY,IAQRqzB,gBAAiB,SAASC,GACzB,GAAIC,GACa,gBAATC,MAAoBF,YAAsBE,MACjDF,GAAoC,gBAAfA,IAA0D,gBAAxBA,GAAWp6C,UAAwD,gBAAxBo6C,GAAW12C,SAG1G62C,EACoB,gBAAhBC,aAA2BJ,YAAsBI,aACxDJ,GAAoC,gBAAfA,IAAmD,IAAxBA,EAAWp6C,UAAiD,gBAAxBo6C,GAAW12C,QAGhG,OAAQ22C,IAAWE,GAgBpBE,IAAK,WAeJ,IAdA,GAAIC,GAEApa,EAUA9rB,EAXAmmC,EAAa,MAEbhkC,EAAO,aACPikC,GACH,SAAU,QAAS,QAAS,QAAS,MAAO,SAAU,QACtD,YAAa,QAAS,iBAAkB,WAAY,OAAQ,MAC5D,eAAgB,UAAW,aAAc,QAAS,OAAQ,UAC1D,YAAa,QAAS,QAEnB1+C,EAAS0+C,EAAQ1+C,OACjBqwC,EAAWrtC,OAAOqtC,QAAUrtC,OAAOqtC,YAGhCrwC,KACNokC,EAASsa,EAAQ1+C,GAGZqwC,EAAQjM,KACZiM,EAAQjM,GAAU3pB,GAKf/B,WAAaA,UAAU1Y,OAAS,GAAK0Y,UAAU,IAAM0rB,IACxDqa,EAAara,EAEb9rB,EAAOrD,MAAMrU,UAAUnB,MAAMc,KAAKmY,UAAW,GAK9C8lC,GADGvkC,SAASrZ,UAAUwtB,KACfnU,SAASrZ,UAAUwtB,KAAK7tB,KAAK8vC,EAAQoO,GAAapO,GAElD,WACNp2B,SAASrZ,UAAUC,MAAMN,KAAK8vC,EAAQoO,GAAapO,EAAU/3B,GAAQI,YAIvE8lC,EAAK39C,MAAMK,KAAOoX,GAAQI,YAQ3BlW,MAAO,SAAS9C,GACf,MAAOf,MAAK6D,MAAM9C,IAoBnB0C,UAAW,SAAShC,EAAOiC,EAAUC,GACpC,MAAO3D,MAAKyD,UAAUhC,EAAOiC,EAAUC,IAOxCi9B,QAAS,WAAa,MAAO,aAwC/B9gC,GAAG6I,OAAO,cAAe,WAGxB,GAAIq3C,GAAMlgD,GAAG0c,OACTyjC,EAAOngD,GAAG0c,OAEV0jC,GACHC,iBACAC,mBACAC,oBACAC,kBACAC,mBACAC,aACAC,cACAC,wBAGGC,GACHH,UAAW,SAASI,EAAWC,GAE9B,GAAIC,GAAQ,IAGRhhD,IAAGw/C,gBAAgBsB,EAAUG,OAShCD,EAAQp8C,OAAOk8C,EAAUG,MAGzBD,EAAMxiB,OAAOuiB,KAVbD,EAAUG,KAAOr8C,OAAOm8C,GAASznC,IAAI,GAErC0nC,EAAQp8C,OAAOk8C,EAAUG,OAY1Br8C,OAAO,QAAQ45B,OAAOwiB,IAEvBL,WAAY,SAASO,GAGjBA,GAAeA,EAAYC,KAAOD,EAAYC,IAAI/H,SAA8C,kBAA5B8H,GAAYC,IAAW,QAE7FD,EAAYC,IAAI/H,UAGT8H,GAAeA,EAAYC,KAAOD,EAAYC,IAAI/H,SAEzDp5C,GAAG8/C,IAAIoB,EAAYlL,OAAOoL,MAAQ,kGAInCx8C,OAAOs8C,EAAYlL,OAAOiL,MAAM9U,QAAQ,IAAK,WAC5CvnC,OAAOnC,MAAMkK,aAKZ00C,EAAiB,SAASjsB,EAAOksB,EAAYC,EAAiBC,GAGjEC,EAAersB,EAGf,IAAI/L,IACHvb,KAAkCyzC,EAClCl3B,UAAWi3B,EACXI,QAAU1hD,GAAGw/C,gBAAgB+B,GAAoBA,EAAkB,KAGpE,KAAIl4B,EAAQvb,OAASub,EAAQq4B,QAE5B,KAAM,iIAGP,IAAGr4B,EAAQq4B,UAAYF,EAEtB,KAAM,wHAGP,OAAOn4B,IAGJo4B,EAAiB,SAASE,GAG7B,GAAGzB,GAAOyB,GAAUxB,GAAQwB,EAAU,KAAM,yHAGzCC,EAAiB,SAASD,EAAQE,EAAUP,GAK/C,GAFAG,EAAeE,GAEXL,GAAeO,EAKd,IAAIP,GAAcO,EAEtBzB,EAAmByB,UAGf,IAAGP,IAAeO,EACvB,CACCP,EAAaA,EAAW97C,aAExB,KAAI,GAAIs8C,KAAmB1B,GAC3B,CAIC,IAAI,GAHA2B,GAAkB3B,EAAmB0B,GACrCE,KAEI5gD,EAAI,EAAG6gD,EAAKF,EAAgBxgD,OAAY0gD,EAAJ7gD,EAAQA,IACpD,CACC,GAAI8gD,GAAsBH,EAAgB3gD,EACvC8gD,KAEEA,EAAoB73B,WAAa63B,EAAoB73B,UAAU7kB,eAAiB87C,GAEnFU,EAAU1/C,KAAK4/C,IAKlBH,EAAkBC,OAGf,IAAGV,GAAclB,EAAmByB,GACzC,CACCP,EAAaA,EAAW97C,aAIxB,KAAI,GAFA28C,MAEIC,EAAW,EAAGC,EAAKjC,EAAmByB,GAAUtgD,OAAmB8gD,EAAXD,EAAeA,IAC/E,CACC,GAAIE,GAAiBlC,EAAmByB,GAAUO,EAC/CE,KAEEA,EAAej4B,WAAai4B,EAAej4B,UAAU7kB,eAAiB87C,GAEzEa,EAAqB7/C,KAAKggD,IAK7BlC,EAAmByB,GAAYM,GAIjC,QAOCI,SAAU,WAMT,aAFO9/C,MAAK8/C,SAELrC,GASRsC,aAAc,WAMb,aAFO//C,MAAK+/C,aAELrC,GAURsC,UAAW,SAASrtB,EAAOysB,GAG1B,GAAGzsB,GAAS+qB,EAEX,KAAM,iFAGP,KAAGC,IAAsBA,EAAmByB,GA+C3C,KAAM,2DAzCN,KAAI,GAHAa,MAGIthD,EAAI,EAAGgD,EAAI6V,UAAU1Y,OAAY6C,EAAJhD,EAAOA,IAE3CshD,EAAapgD,KAAK2X,UAAU7Y,GAG7B,IAA2C,IAAxCg/C,EAAmByB,GAAUtgD,QAAgBs/C,EAAgBgB,GAG/D,MADAhB,GAAgBgB,GAAUz/C,MAAMpC,GAAI0iD,GAC7BjgD,IAEH,IAA2C,IAAxC29C,EAAmByB,GAAUtgD,SAAiB6+C,EAAmByB,GAExE,MAAOp/C,KAIR,KAAI,GAAI2/C,GAAW,EAAGO,EAAMvC,EAAmByB,GAAUtgD,OAAmBohD,EAAXP,EAAgBA,IACjF,CACC,GAAI/4B,GAAU+2B,EAAmByB,GAAUO,EAG3C,IAAI/4B,EAAQq4B,SAAWznC,UAAU,IAAMA,UAAU,GAAGgnC,MAAQhnC,UAAU,GACtE,CACC,GAAI2oC,GAAWh+C,OAAOqV,UAAU,GAAGgnC,MAAMziB,OAAOvkB,UAAU,GAC1DrV,QAAOykB,EAAQq4B,SAASljB,OAAOokB,OAEvBv5B,GAAQq4B,SAAWznC,UAAU,KAAOA,UAAU,GAAGgnC,MAAQhnC,UAAU,IAG3EA,UAAU,GAAGgnC,KAAOr8C,OAAOqV,UAAU,IAAIX,IAAI,GAE7C1U,OAAOykB,EAAQq4B,SAASljB,OAAOvkB,UAAU,GAAGgnC,OAI5C53B,EAAQvb,KAAK1L,MAAMpC,GAAI0iD,GAS1B,MAAOjgD,OAoDRgtB,GAAI,SAAS2F,EAAOysB,EAAUN,GAE7B,GAAID,GAAa,IAEjB,KAAIO,EAEH,KAAM,yGAIP,IAAGA,EAASlrC,QAAQ,KAAO,GAC3B,CACC,GAAIksC,GAAShB,EAAS/8C,MAAM,IAC5B+8C,GAAWgB,EAAO,GAClBvB,EAAauB,EAAO,GAGrB,IAAGzC,IAAsBA,EAAmByB,GAa3C,KAAM,2DAGP,OAdCzB,GAAmByB,GAAUv/C,KAC5B++C,EACCjsB,EACAksB,EACAC,EACa,aAAZM,IASGp/C,MAeRqY,IAAK,SAASsa,EAAOysB,GAEpB,GAAIP,GAAa,IAEjB,KAAIO,EAEH,KAAM,yGAIP,IAAGA,EAASlrC,QAAQ,KAAO,GAC3B,CACC,GAAIksC,GAAShB,EAAS/8C,MAAM,IAC5B+8C,GAAWgB,EAAO,GAClBvB,EAAauB,EAAO,GAGrB,IAAGzC,IAAsBA,EAAmByB,GAU3C,KAAM,2DAGP,OAXCD,GACCxsB,EACAysB,EACAP,GAQK7+C,WAKVzC,GAAG6I,OAAO,aAKTi6C,YAAa,WAEZ,OAsBCC,gBAAiB,gBAoBjBC,kBAAmB,kBAuCnBC,WAAY,YAoBZC,iBAAkB,iBAoBlBC,mBAAoB,mBAiCpBC,YAAa,aAoBbC,kBAAmB,kBAoBnBC,uBAAwB,4BAQ3BtjD,GAAG6I,OAAO,IAaT06C,IAAK,WACJ,OAOCjuC,KAAK,eAOPkuC,WAQCpC,MAAO,GAMPpqC,WAOAysC,qBAAqB,EAUrB12C,OAAQ,EASR22C,WAAY,GAWZC,UAAU,EAQVC,YAAa,GASbzgB,SAAU,EAUV0gB,YAAa,EAUb3gB,SAAU,IAOV59B,KAAM,GASN27C,KAAM98C,OASN2/C,GAAI3/C,OAYJ4/C,UAMDC,aAQCC,QAOAC,iBAOAhpC,WAOAipC,WAMDC,YAOCh/C,QAOAu5B,KAAM,GAON6G,OAAQ,IAOT6e,iBAYCC,eAAgB,aAchB5D,UAAW,aAWX6D,gBAAiB,aAOjBC,WAAW,EAOXC,mBAAoB,IAOpBC,iBAAiB,EASjBC,kBAAmB,GASnBC,kBAKAC,IAOCC,MAOCC,gBAAiB,OAMjBC,YAAa,GAObrvC,QAAS,GASTsvC,YAAY,EAOZpiB,OAAQ,IAkEVuH,KAsBCr8B,SAAU,aAsBV3F,KAAM,aAmBNw3B,IAAK,cAgBNslB,YAAa,aAebC,WAAY,gBAQdnlD,GAAG6I,OAAO,aAKTu8C,IAAK,WAGJ,GAAIC,GAAU,KAEd,QAWCC,IAAKD,EAAU,MASfE,cAAeF,EAAU,gBAUzBG,UAAWH,EAAU,YAYrBI,SAAUJ,EAAU,WAcpBK,iBAAkBL,EAAU,mBAU5BM,KAAMN,EAAU,OAShBO,eAAgBP,EAAU,qBAQ5BQ,OAAQ,WAEP,GAAIC,GAAoB,OAEpBC,EAA0B,YAE9B,QAaCC,kBAAmBF,EAAoB,eAcvCG,iBAAkBH,EAAoB,eActCI,wBAAyBH,EAA0B,eASnDI,uBAAwBJ,EAA0B,kBAIpDK,eAAgB,oBAOhBC,SASCC,MAAO,YAYPC,KAAM,iBASNC,IAAK,UASLC,aAAc,kBAQdC,OAAQ,aAWTC,OASCC,eAAgB,eAQhBC,MAAO,QAQPC,KAAM,OASNC,KAAM,OASNC,OAAQ,SASRC,SAAU,cAQZjnD,GAAG6I,OAAO,SAAU,WAEnB,GAAIqnC,GAAU,GAAI4C,gBACjBxC,UAAS,GAMV,OAFAJ,GAAQ4B,gBAAgB,IAWvBoV,YAAa,WACZ,MAAOpU,eAAc3wC,UAAU+vC,KAAK9vC,MAAM8tC,KAAYlvC,MAAMc,KAAKmY,aASlEi4B,KAAM,WAEL,MADAlyC,IAAGu6C,IAAI4M,UAAUnnD,GAAGonD,UAAUf,QAAQC,SAAUtlD,MAAMc,KAAKmY,YACpD64B,cAAc3wC,UAAU+vC,KAAK9vC,MAAM8tC,KAAYlvC,MAAMc,KAAKmY,aAalE83B,KAAM,SAASppC,EAAO0+C,EAAe7V,GACpC,MAAOtB,GAAQ6B,KAAKppC,EAAO0+C,EAAe7V,IAQ3C12B,IAAK,SAASnS,EAAO6oC,GACpB,MAAOtB,GAAQp1B,IAAInS,EAAO6oC,IAS3B/hB,GAAI,SAAS9mB,EAAO6oC,GACnB,MAAOtB,GAAQzgB,GAAG9mB,EAAO6oC,IAU1BzzB,KAAM,SAASpV,EAAO6oC,GACrB,MAAOtB,GAAQnyB,KAAKpV,EAAO6oC,SAQ9BxxC,GAAG6I,OAAO,MAAO,WAChB,GAAIu1C,MACAkJ,EAAqB,GACrBC,KACAC,EAAW,GAAI58B,QAAO,IAAM5qB,GAAGonD,UAAUf,QAAQC,OACjDmB,EAAQ,GAAI78B,QAAO,IAAM5qB,GAAGonD,UAAUf,QAAQG,KAC9CkB,EAAgB,GAAI98B,QAAO,IAAM5qB,GAAGonD,UAAUf,QAAQI,cACtDkB,EAAe,GAAI/8B,QAAO,IAAM5qB,GAAGonD,UAAUf,QAAQE,MACrDqB,EAAW,GAAIh9B,QAAO,IAAM5qB,GAAGonD,UAAUf,QAAQK,QAQjDmB,EAA8B,WAEjC,GAAI/G,GACAgH,GAAW,EAIXC,KAEAC,EAAS,GAAI/T,SAAQkG,QACxBC,UAAW,SAAStB,EAASC,GAG5B,IAAK+O,GAAYH,EAAalnD,KAAKq4C,GAAU,CAC5CA,EAAUA,EAAQp4C,QAAQinD,EAAc,GACxC,IAAIM,GAAWjoD,GAAG+D,MAAM+0C,EAGD,IAAnBmP,EAAS1mD,SACZu/C,EAAYmH,EAAS,GAGrBV,EAAMzG,EAAU4C,aACf1N,OAAO8K,EACPkH,OAAOA,GAIRhoD,GAAGkoD,cAAcpH,IAAamH,EAAS,KAGvCrjD,OAAOC,KAAKkjD,EAAiB,WAC5B/L,EAAW8E,EAAWhI,EAASC,KAGhC+O,GAAW,OAEFA,GAEV9L,EAAW8E,EAAWhI,EAASC,GAG/BgP,EAAgBzlD,KAAKw2C,OAcrBqP,EAA8B,SAASrH,EAAWsH,GAErD,GAAI/lC,GAAYzd,OAAOk8C,EAAUG,KAMjC,IAJK5+B,EAAU4Z,GAAG,IAAMj8B,GAAGonD,UAAUhC,IAAIG,gBACxCljC,EAAUzJ,KAAK,IAAM5Y,GAAGonD,UAAUhC,IAAIG,gBAGlCljC,EAAU9gB,OAEd,WADAvB,IAAG8/C,IAAI,gEAIR,IAAIuI,IACHC,UAAU,KACVn+C,OACC2C,MAAM,QAIJg0C,GAAU/zC,SACbs7C,EAAYl+C,MAAM4C,OAAS+zC,EAAU/zC,OAAS,KAG/C,IAAIi7C,GAAS,GAAI/T,SAAQkG,QACxBnL,OAAQsY,EACRjlC,UAAWA,EAAU/I,IAAI,GACzBrI,MAAMo3C,EACNjO,UAAW,SAAStB,EAASC,GAE5BiD,EAAW8E,EAAWhI,EAASC,IAEhCsB,QAAS,WACR2N,EAAO1N,YAAYt6C,GAAGonD,UAAUf,QAAQE,KAAOvmD,GAAG2D,WAAWm9C,EAAWsH,GAAcpoD,GAAGg/C,sBAI3F,OAAOgJ,IAUJO,EAAqB,SAAS7E,EAAY8E,GAC7C,MAAO,YACNxoD,GAAGu6C,IAAIz4C,KACN4hD,EACA1jD,GAAGonD,UAAUf,QAAQI,aACrB+B,KACGxnD,MAAMc,KAAKmY,WAAWjZ,MAAM,MAa9Bg7C,EAAa,SAAS8E,EAAWhI,GAIpC,QAAS2P,GAAc//B,EAAQggC,GAE9B,IAAK,GADD7T,GAAO7yC,OAAO0mD,GAAc5jD,MAAM,KAC7B1D,EAAI,EAAGA,EAAIyzC,EAAKtzC,OAAQH,IAAK,CACrC,GAAwB+C,SAApBukB,EAAOmsB,EAAKzzC,IAAmB,CAClCsnB,EAASvkB,MACT,OAEDukB,EAASA,EAAOmsB,EAAKzzC,IAEtB,MAAOsnB,GAGR,QAASigC,GAAaC,EAAO9P,EAAS4K,GACrC,GAAIhe,GAAI1lC,GAAG+D,MAAM+0C,EAAQp4C,QAAQkoD,EAAO,IAiBxC,OAVIljB,GAAEH,QAAUG,EAAEH,OAAOhkC,QAAUmkC,EAAEmjB,WAAanjB,EAAEmjB,UAAUtnD,QAC7DqD,OAAOC,KAAK6gC,EAAEmjB,UAAW,SAASznD,EAAGR,GACpCgE,OAAOC,KAAK6gC,EAAEH,OAAQ,SAASnkC,EAAGkrC,GAC7B1rC,GAAK0rC,IACR5G,EAAEH,OAAOnkC,GAAKmnD,EAAmB7E,EAAY9iD,QAM1C8kC,EAhCR,GAAI5/B,GAAKgI,CAoCL85C,GAASnnD,KAAKq4C,IACjBhzC,EAAM6iD,EAAaf,EAAU9O,EAASgI,EAAU4C,YAChD51C,EAAO26C,EAAc3H,EAAUgD,GAAIh+C,EAAI4iD,cAE1BvkD,SAAT2J,EACHA,EAAK1L,MAAM0+C,EAAUgD,GAAIh+C,EAAIy/B,QAE7BvlC,GAAG8/C,IAAI,qCAAuCh6C,EAAI4iD,eAIzCjB,EAAMhnD,KAAKq4C,IACrBhzC,EAAM6iD,EAAalB,EAAO3O,EAASgI,EAAU4C,YAC7C51C,EAAO26C,EAAclkD,OAAQuB,EAAI4iD,cACpBvkD,SAAT2J,EACHA,EAAK1L,MAAM0L,EAAMhI,EAAIy/B,QAErBvlC,GAAG8/C,IAAI,kCAAoCh6C,EAAI4iD,eAItChB,EAAcjnD,KAAKq4C,IAC7BhzC,EAAM6iD,EAAajB,EAAe5O,EAASgI,EAAU4C,YAChBv/C,SAAjCi6C,EAAWt4C,EAAI4iD,gBAClBtK,EAAWt4C,EAAI4iD,cAActmD,MAAMg8C,EAAWt4C,EAAI4iD,cAAe5iD,EAAIy/B,cAC9D6Y,GAAWt4C,EAAI4iD,gBAIblB,EAAS/mD,KAAKq4C,KACxBhzC,EAAM6iD,EAAanB,EAAU1O,EAASgI,EAAU4C,YAChD1jD,GAAG6lD,OAAOqB,YAAY9kD,MAAMpC,GAAG6lD,OAAQ//C,KAWrCgjD,EAAoB,SAASlvC,GAChC,GAAI4uC,GAAaxoD,GAAG0c,MAEpB,OADA0hC,GAAWoK,GAAc5uC,EAClB4uC,EAGR,QAOCrB,UAAW,SAAS4B,EAAaxjB,GAEhC,GAAIuT,GAAUiQ,EAAc/oD,GAAG2D,UAAU4hC,EACzC3gC,QAAOC,KAAK0iD,EAAO,SAASnmD,EAAGT,GAC9BA,EAAEqnD,OAAO1N,YAAYxB,MAavBh3C,KAAM,SAAS4hD,EAAYqF,EAAaL,EAAcnjB,GAErD,GAAIsjB,KACJjkD,QAAOC,KAAK0gC,EAAQ,SAASnkC,EAAGwE,GAC/B,GAAiB,kBAANA,GAAkB,CAC5B,GAAIojD,GAAMF,EAAkBljD,EAC5B2/B,GAAOnkC,GAAK4nD,EACZH,EAAUvmD,KAAK0mD,MAIjBzB,EAAM7D,GAAYsE,OAAO1N,YACxByO,EAAc/oD,GAAG2D,WAChB+kD,aAAaA,EACbnjB,OAAOA,EACPsjB,UAAUA,MAcbvzC,KAAM,SAASqvC,GACd2C,EAAqB3C,EAChB2C,GACJO,KAYFoB,SAAU,SAASvF,GAClB,MAEuBv/C,UAAtBojD,EAAM7D,IAEN6D,EAAM7D,GAAY1N,OAAO2N,UAEuC,IAAhE/+C,OAAO2iD,EAAM7D,GAAY1N,OAAOiL,MAAMroC,KAAK,UAAUrX,QAUvD2nD,SAAU,SAASpI,EAAWsH,GACvBtH,GAAesH,EACpBb,EAAMzG,EAAU4C,aACf1N,OAAO8K,EACPkH,OAAOG,EAA4BrH,EAAWsH,IAG/CpoD,GAAG8/C,IAAI,qFAKX9/C,GAAG6I,OAAO,KAAM,WAEf,GAAIsgD,GAQAC,EAAW,SAAStI,GAEvB,GAAIuI,GAAavI,EACbE,EAAQp8C,OAAOk8C,EAAUG,MAEzBqI,EAAgB,SAASv8C,GAC5BA,EAASA,GAAUnI,OAAOykD,EAAWpI,MAAMsI,cAEvCvpD,GAAGu6C,IAAI0O,SAASI,EAAW3F,YAC9B1jD,GAAGu6C,IAAIz4C,KACNunD,EAAW3F,WACX1jD,GAAGonD,UAAUf,QAAQK,OACrB,gBAEC35C,KAIFs8C,EAAWt8C,OAASA,EACpBi0C,EAAMpoC,KAAK,UAAU7L,OAAOs8C,EAAWt8C,SAIzC,QAOCy8C,SAAU,SAASzyC,GAClB/W,GAAG6kD,GAAG2E,SAASH,EAAW3F,WAAY3sC,IAOvC0yC,OAAQ,WAEP,GAAIC,GAAe,SAAS5Q,GAC3B,OACC,sBACC,gCACC,kBACD,YACA,2BACC,MACCA,EACD,OACD,SACA,6BACC,qDACD,SACD,UACCz2C,KAAK,KAGJsnD,EAAiB,SAAS7Q,GAC7B,OACC,sBACC,gCACC,mBACD,YACA,2BACC,MACCA,EACD,OACD,SACA,6BACC,mEACA,gEACD,SACD,UACCz2C,KAAK,IAGR,QASCunD,MAAO,SAAS9Q,EAASl/B,GAExB,MAAK5Z,IAAG6pD,cAKJ7pD,GAAGu6C,IAAI0O,SAASI,EAAW3F,YAC9B1jD,GAAGu6C,IAAIz4C,KACNunD,EAAW3F,WACX1jD,GAAGonD,UAAUf,QAAQK,OACrB,kBACG1lD,MAAMc,KAAKmY,YAIfrV,OAAO8kD,EAAa5Q,IAClBrpB,GAAG,OAAQ,WACX,GAAIogB,GAAQptC,IACZmC,QAAOirC,GAAOj3B,KAAK,gBAAgB6W,GAAG,QAAS,WAC9C7qB,OAAOirC,GAAOA,MAAM,QAAQljC,UAC3BiN,GAAYhV,OAAOoX,YAGrB6zB,OAAOT,UAAS,SArBlBpvC,IAAG8/C,IAAI,yDAkCTgK,QAAS,SAAShR,EAASiR,EAAYC,GAEtC,MAAKhqD,IAAG6pD,cAKJ7pD,GAAGu6C,IAAI0O,SAASI,EAAW3F,YAC9B1jD,GAAGu6C,IAAIz4C,KACNunD,EAAW3F,WACX1jD,GAAGonD,UAAUf,QAAQK,OACrB,oBACG1lD,MAAMc,KAAKmY,YAIfrV,OAAO+kD,EAAe7Q,IACpBrpB,GAAG,OAAQ,WACX,GAAIogB,GAAQptC,IAEZmC,QAAOirC,GAAOj3B,KAAK,WAAW6W,GAAG,QAAS,WACzC7qB,OAAOirC,GAAOA,MAAM,QAAQljC,UAC3Bo9C,GAAcnlD,OAAOoX,UAGvBpX,OAAOirC,GAAOj3B,KAAK,eAAe6W,GAAG,QAAS,WAC7C7qB,OAAOirC,GAAOA,MAAM,QAAQljC,UAC3Bq9C,GAAkBplD,OAAOoX,YAG3B6zB,OAAOT,UAAS,SA3BlBpvC,IAAG8/C,IAAI,+DAyCXmK,SAAU,SAASjX,GAEdhzC,GAAGu6C,IAAI0O,SAASI,EAAW3F,YAC9B1jD,GAAGu6C,IAAIz4C,KACNunD,EAAW3F,WACX1jD,GAAGonD,UAAUf,QAAQK,OACrB,YAEC1T,IAIFpuC,OAAOykD,EAAWpI,MAAMroC,KAAK,IAAM5Y,GAAGonD,UAAUhC,IAAII,WAAWxhD,KAAKgvC,IAUtEkX,SAAU,SAASnzC,EAAUozC,GAC5BnqD,GAAG6kD,GAAGqF,SAASb,EAAW3F,WAAY3sC,EAAUozC,IASjDC,aAAcd,EAMd3C,MAAO,WAEN,GAAIzW,GAAU,GAAI4C,eACduX,EAAgB,SAGpBna,GAAQ4B,gBAAgB,EAExB,IAAIwY,GAAW,SAAStqC,GACvB,MAAIqqC,GAAc5pD,KAAKuf,IACf,GAEPhgB,GAAG8/C,IAAI,IAAM9/B,EAAY,4CAClB,GAIT,QASCmC,OAAQ,SAASpC,GAEK,kBAAVA,GACVtd,KAAKgtB,GAAG,SAAU1P,GACS,gBAAVA,KAEbspC,EAAW1F,WAAa3jD,GAAGu6C,IAAI0O,SAASI,EAAW3F,YACtD1jD,GAAGu6C,IAAIz4C,KACNunD,EAAW3F,WACX1jD,GAAGonD,UAAUf,QAAQK,OACrB,kBACG1lD,MAAMc,KAAKmY,YAELja,GAAGkH,QAAQ6Y,EAAOspC,EAAWtF,SACvCn/C,OAAO,IAAM5E,GAAGonD,UAAUhC,IAAIK,SAAUzE,GACtCt7B,SAAS,QACTze,OAAO,kBAAoB8Y,EAAQ,KAAMihC,GACzCl7B,YAAY,QAEdwjC,IACApZ,EAAQgC,KAAK,SAAUnyB,MAW1BjF,IAAK,SAASnS,EAAO6oC,GAChB8Y,EAAS3hD,IACZunC,EAAQp1B,IAAInS,EAAO6oC,IAWrB/hB,GAAI,SAAS9mB,EAAO6oC,GACf8Y,EAAS3hD,IACZunC,EAAQzgB,GAAG9mB,EAAO6oC,SAyIxB,OAxHA4X,GAASI,SAAW,SAAS9F,EAAY3sC,GAExC,IAAK/W,GAAG6pD,SAEP,WADA7pD,IAAG8/C,IAAI,mDAIR,IAAI9/C,GAAGu6C,IAAI0O,SAASvF,KAAgB9+C,OAAOmS,GAAUklB,GAAG,IAAMj8B,GAAGonD,UAAUhC,IAAIE,KAC9EtlD,GAAGu6C,IAAIz4C,KACN4hD,EACA1jD,GAAGonD,UAAUf,QAAQG,IACrB,kBAEC9C,EAGA9+C,OAAOmS,GAAUA,eAGb,CAEN,GAAIsL,GAAYzd,OAAOmS,EACvBsL,GAAUzJ,KAAK,MAAQ5Y,GAAGonD,UAAUhC,IAAIO,MAAMh5C,SAC9C0V,EAAUyD,YAAY9lB,GAAGonD,UAAUhC,IAAIQ,gBAInCvjC,EAAUjd,KAAKpF,GAAGonD,UAAUhC,IAAIQ,iBACnCvjC,EAAU1X,KAAKo3B,SAAW,aAW7BqnB,EAAS9zC,KAAO,SAASi1C,GACxBpB,EAAmBoB,EAGnBpB,EAAiBtE,GAAKjgD,OAAOiE,QAAO,KAAU7I,GAAGqkD,gBAAgBQ,GAAIsE,EAAiBtE,SAYvFuE,EAASc,SAAW,SAASxG,EAAY3sC,EAAUyzC,GAElD,IAAKxqD,GAAG6pD,SAEP,WADA7pD,IAAG8/C,IAAI,mDAIR,IAAI9/C,GAAGu6C,IAAI0O,SAASvF,IAAe9+C,OAAOmS,GAAUklB,GAAG,IAAMj8B,GAAGonD,UAAUhC,IAAIE,KAC7EtlD,GAAGu6C,IAAIz4C,KACN4hD,EACA1jD,GAAGonD,UAAUf,QAAQG,IACrB,kBAEC9C,EAGA9+C,OAAOmS,GAAUA,SACjByzC,QAGI,CAEFA,IAAgBrB,EAAiBtE,GAAGC,KAAKE,aAC5ChlD,GAAG8/C,IAAI,4GAGR,IAAIz9B,GAAYzd,OAAOmS,GAAU2O,SAAS1lB,GAAGonD,UAAUhC,IAAIQ,gBACvD6E,EAAO7lD,OAAO,SAChBmI,OAAO,QACPD,MAAM,QACN4Y,SAAS1lB,GAAGonD,UAAUhC,IAAIO,KAGvBwD,GAAiBtE,GAAGC,KAAKG,YAC7BwF,EAAK9/C,KACJ+/C,mBAAmBvB,EAAiBtE,GAAGC,KAAKC,gBAC5C4F,mBAAsBxB,EAAiBtE,GAAGC,KAAKE,YAAe,OAASmE,EAAiBtE,GAAGC,KAAKE,YAAc,IAAO,GACrH4F,sBAAsB,UACtBC,oBAAoB,YACpB9/C,QAAU,QACVu4B,KAAO,EACPwnB,aAAa,GACbjnB,QAAU,EACV9B,SAAW,WACX5kB,IAAM,EACN4tC,UAAU5B,EAAiBtE,GAAGC,KAAKjiB,OAEnC57B,OAAS,iBAAuD,IAAnCkiD,EAAiBtE,GAAGC,KAAKnvC,QAAiB,IACvEA,QAAUwzC,EAAiBtE,GAAGC,KAAKnvC,UAKH,WAA9B0M,EAAU1X,IAAI,cACjB0X,EAAU1X,KAAKo3B,SAAW,aAG1B1f,EAAUjd,KAAKpF,GAAGonD,UAAUhC,IAAIQ,gBAAgB,IAIjDvjC,EAAUmc,OAAOisB,KAIZrB,MAORppD,GAAG6I,OAAO,GAAI,WAEb,GAAI0+C,UACAyD,SAAU,EACVC,mBAAoB,EACpBC,kBAAoBlrD,GAAG8iD,YAAYN,eAWnC2I,gBAAkB,SAASrK,EAAWniB,GAEzC,GAAItV,GAAU2hC,QAAQ1G,gBAAkB,SAASxD,EAAWniB,GAC1D,MAAO/5B,QAAO+5B,GAAMlyB,SAAS,SAE3B2+C,EAAe/hC,EAAQy3B,EAAWniB,EAEtC,OAAQqsB,SAAQ1G,iBAAmB8G,MAClCprD,IAAG8/C,IAAI,0FAKPl7C,OAAOwmD,GAAc1lC,SAAS1lB,GAAGonD,UAAUhC,IAAIE,KACxC8F,EAAa9xC,IAAI,KAYtB+xC,WAAa,SAASvK,EAAWniB,GAWpC,MARAA,GAAO2sB,WAAW1mD,OAAO+5B,GAAMjZ,SAAS1lB,GAAGonD,UAAUhC,IAAIG,cAAgB,IAAMzE,EAAUM,QAGrF4J,QAAQtK,YACX/hB,EAAOqsB,QAAQtK,UAAUI,EAAWniB,IAI9B2sB,WAAW3sB,IAYf4sB,iBAAmB,SAASzK,GAC/B,GAAIz3B,GAAU2hC,QAAQzG,iBAAmB3/C,OAAOoX,IAChD,OAAOqN,GAAQy3B,IAYZ0K,qBAAuB,SAAS1K,EAAW2K,GAC9C,GAAIpiC,GAAU2hC,QAAQpK,qBAAuBh8C,OAAOoX,IACpD,OAAOqN,GAAQy3B,EAAW2K,IAWvBC,iBAAmB,SAAS5K,GAc/B,MAXAA,GAAYl8C,OAAOiE,QAAO,KAAUi4C,GAGpCA,EAAU4C,WAAa5C,EAAU4C,YAAc1jD,GAAG0c,OAGlDokC,EAAUiD,MAAQjD,EAAUiD,UACvB/jD,GAAGkH,QAAQlH,GAAGonD,UAAUT,MAAMI,KAAMjG,EAAUiD,QAClDjD,EAAUiD,MAAMzhD,KAAKtC,GAAGonD,UAAUT,MAAMI,MAGlCjG,GASJ6K,wBAA0B,SAASpB,GACjCA,EAAgB9F,qBACpB8F,EAAgB9F,mBAAqBzkD,GAAGqkD,gBAAgBI,oBAGrD8F,EAAgB/F,aAAc,IACjC+F,EAAgB/F,UAAYxkD,GAAGqkD,gBAAgBG,YAS7CoH,eAAiB,SAAS9K,GAE7Bl8C,OAAOk8C,EAAUG,MAAMxxB,GAAG,QAAS,IAAMzvB,GAAGonD,UAAUhC,IAAIM,iBAAmB,IAAM1lD,GAAGonD,UAAUT,MAAMC,eAAiB,IAAK,SAASj+C,GAEpIA,EAAMmjB,gBAEN,IAAI+/B,GAAOjnD,OAAOnC,MAAMsW,KAAK/Y,GAAGonD,UAAUT,MAAMC,gBAAgBphD,aAG5DqmD,IAAQ7rD,GAAGonD,UAAUT,MAAMK,OAC9BhnD,GAAG8rD,UAAUhL,EAAU4C,YAGvB5C,EAAUgD,GAAG6C,MAAMxkC,OAAO0pC,MAUzBE,qBAAuB,WAE1B,GAAIC,GACAC,EAAgB,WACnBjsD,GAAG6lD,OAAO3T,KAAKlyC,GAAGonD,UAAUvB,OAAOM,wBAGpCvhD,QAAOL,QAAQkrB,GAAG,SAAU,WAC3B/K,aAAasnC,GACbA,EAAgBp7C,WAAWq7C,EAAe,QAUxCC,QAAU,WACb,QAASlB,SASNmB,mBAAqB,SAASrL,EAAWsL,GAE5CtL,EAAUgD,GAAK,GAAI9jD,IAAG6kD,GAAG/D,GAGQ38C,SAA7BnE,GAAGi/C,KAAK6B,EAAUM,SACmB,kBAA7BphD,IAAGi/C,KAAK6B,EAAUM,OAG5BxwC,WAAW,WACV22C,MAAMzG,EAAU4C,YAAYvC,IAAM,GAAInhD,IAAGi/C,KAAK6B,EAAUM,OAAON,EAAWsL,EAAYtL,EAAUG,MAChD98C,SAA5CojD,MAAMzG,EAAU4C,YAAYvC,IAAU,MACzCoG,MAAMzG,EAAU4C,YAAYvC,IAAI7rC,QAE/B,GAIHtV,GAAG8/C,IAAI,4DAA8DgB,EAAUM,MAAQ,OAatFiL,UAAY,SAASC,WAAYlE,aAIpC,GAHAkE,cAAgBj7C,OAAOi7C,YAGE,GAArBA,WAAW/qD,QAAe+qD,WAAW,GAAG3I,WAAaqH,QAAQtG,gBAEhE,WADA6H,gBAAeD,WAAW,GAAIlE,YAK/B,IAAIkE,WAAW/qD,QAAU6mD,YAAYnE,KAAK1iD,OAEzC,WADAvB,IAAG8/C,IAAI,mFAAoFsI,YAK5F,IAAIoE,aAAc,SAASrI,EAAQsI,GAElC,GAAIzB,QAAQ7F,WACX6F,QAAQ7F,WAAWhB,EAAQsI,OAEvB,CAEJ,GAAIC,GAAiB,KACpBC,IAAyBvlD,SAASwlD,gBAEnChoD,QAAOC,KAAKs/C,EAAQ,SAAS/iD,EAAGwE,GAC3B+mD,EACHvlD,SAASwlD,iBAAiBhnD,IAG1B8mD,EAAiBA,MACjBA,EAAepqD,KAAK,gDAAkDsD,EAAI,UAIxE8mD,GACH9nD,OAAO,QAAQ45B,OAAOkuB,EAAerqD,KAAK,KAG3CoqD,MAKEI,aAAe,SAAS3xC,EAASuxC,GAEpC,GAAIzB,QAAQ9F,YACX8F,QAAQ9F,YAAYhqC,EAASuxC,OAG7B,IAAIvxC,EAAQ3Z,OAAQ,CACnB,GAAIurD,GAAc5xC,EAAQ3Z,OACtBwrD,EAAgB,EAGhBC,EAAe,oBAAsBzoD,YACxC0oD,QAAU,EACVr5C,UAAY,GAITs5C,EAAS,SAAStnD,GACrBgL,WAAW,WACV,GAAIu8C,IACHllD,IAAKrC,EAAEgJ,OAAO3G,IACdm5C,MAAOkL,WAAW,GAAGlL,MAItBphD,IAAG8/C,IAAI,sBAAyBqN,EAAQ/L,MAAQ,qBAAyB+L,EAAQllD,IAAM,KAGvFjI,GAAG6lD,OAAO3T,KAAK,0BAA2Bib,GAErClC,kBAIJjrD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYQ,uBACzBgJ,WAAW,GACXa,EAAQllD,KAPTujD,qBAAqBc,WAAW,GAAIa,EAAQllD,MAU3C+iD,QAAQvG,oBAIZ7/C,QAAOC,KAAKqW,EAAS,SAAS9Z,EAAGwE,GAChC,GAAI8S,GAAMtR,SACTqiC,EAAS/wB,EAAIjR,cAAc,UAC3B2lD,EAAcxnD,CAGXolD,SAAQxG,YACX4I,GAAe,iBAAkB,GAAI5qD,OAAOya,WAI7CwsB,EAAO5tB,OAAQ,EAEf4tB,EAAOxhC,IAAMmlD,EACb3jB,EAAOrhC,KAAO,kBACdqhC,EAAOI,QAAU,QACjBJ,EAAO4jB,QAAUH,EAGjBzjB,EAAOK,OAASL,EAAOM,mBAAqB,SAASnkC,GACpDA,EAAIA,GAAKrB,OAAOoE,OAEF,QAAV/C,EAAEwC,MAAkB4kD,EAAYvjB,EAAOpxB,eAE1CoxB,EAAOK,OAASL,EAAOM,mBAAqBN,EAAO4jB,QAAU,KAG7D5jB,EAAS,OAGHsjB,IAAkBD,GACvBL,MAKH/zC,EAAIhM,KAAK5E,YAAY2hC,SAItBgjB,MAKCa,mBAAqB,SAASC,QAASd,IAE1C,GAAIzB,QAAQwC,kBACXxC,QAAQwC,kBAAkBD,QAASd,QAE/B,CACJ,IAAK,GAAIrrD,GAAI,EAAGkb,IAAMixC,QAAQhsD,OAAY+a,IAAJlb,EAASA,IAC9C,IACCiD,KAAKkpD,QAAQnsD,IAEd,MAAOqsD,WACNztD,GAAG8/C,IAAI,gCAAkC2N,UAAY,OAASF,QAAQnsD,IAEjE6pD,kBAIJjrD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYQ,uBACzBgJ,WAAW,GACXmB,WAPDjC,qBAAqBc,WAAW,GAAImB,WAYvChB,OAKEiB,kBAAoB,SAAS5e,GAChC,GAAIA,EACH,KAAOA,EAAQ1oC,YAGd,GAFA0oC,EAAUA,EAAQ1oC,WAEd0oC,IAAY1nC,SACf,OAAO,CAKV,QAAO,GAIJumD,UAAY,SAAS1J,GACxBr/C,OAAOC,KAAKo/C,EAAM,SAAS7iD,EAAGT,GAC7B,GAAKsqD,kBAIA,CACJjrD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYG,WACzBqJ,WAAWlrD,GACXkqD,WAAW3qD,EAAEg+B,MAGd,IAAIyiB,GAAQkL,WAAWlrD,GAAGggD,MACtBH,EAAOqL,WAAWlrD,GAAG6/C,IAEzB,KAAKA,EACJ,KAAO,YAAcG,EAAQ,yJAG9B,KAAKsM,kBAAkBzM,GACtB,KAAO,gBAAkBG,EAAQ,oHASlC,IANAphD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYI,iBACzBoJ,WAAWlrD,KAGPpB,GAAGw/C,gBAAgByB,GACvB,KAAO,gBAAkBG,EAAQ,yHAGlC9qC,GAAE2qC,GAAMv7B,SAAS1lB,GAAGonD,UAAUhC,IAAIG,cAAgB,IAAMnE,OA/BxDkL,YAAWlrD,GAAG6/C,KAAOkK,gBAAgBmB,WAAWlrD,GAAIiqD,WAAWiB,WAAWlrD,GAAIT,EAAEg+B,MAmCjFitB,gBAAeU,WAAWlrD,OAKxB8Z,QAAUktC,YAAYltC,YACtBipC,OAASiE,YAAYjE,WACrBoJ,QAAUnF,YAAYlE,kBACtBD,KAAOmE,YAAYnE,QAGvBuI,aAAYrI,OAAQ,WAEnBwJ,UAAU1J,MAEV4I,aAAa3xC,QAAS,WAErBoyC,mBAAmBC,QAAS,WAE3B3oD,OAAOC,KAAKynD,WAAY,SAASlrD,EAAGT,GACnCwrD,mBAAmBxrD,EAAGynD,YAAYnE,KAAK7iD,aAexCmrD,eAAiB,SAASzL,EAAWsH,GAGxC,GAAI4C,QAAQrG,kBAAmB,CAC9B,GAAKsG,kBAIA,CACJ,GAAIjK,GAAQp8C,OAAOk8C,EAAUG,KAS7B,IAPAjhD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYG,WACzBnC,EACAsH,EAAYzpB,MAG8B,IAAvCqiB,EAAM1kB,QAAQ,cAAc/6B,OAC/B,KAAM,iIASP,IANAvB,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYI,iBACzBpC,IAGIA,EAAUG,KACd,KAAM,mKAGP,KAAKjhD,GAAGw/C,gBAAgBsB,EAAUG,MACjC,KAAM,kIAGPr8C,QAAOk8C,EAAUG,MAAMv7B,SAAS1lB,GAAGonD,UAAUhC,IAAIG,cAAgB,IAAMzE,EAAUM,WA9BjFN,GAAUG,KAAOkK,gBAAgBrK,EAAWuK,WAAWvK,EAAW,eAkCnEA,GAAUgD,GAAK,GAAI9jD,IAAG6kD,GAAG/D,GAEzB8K,eAAe9K,GAEf9gD,GAAGu6C,IAAI2O,SAASpI,EAAWsH,OAG3BpoD,IAAG8/C,IAAI,yFAILwL,WAAa,SAAS3sB,GACzB,MAAO/5B,QAAO,eAAe45B,OAAOG,GAAMA,QAUvCivB,aAAe,SAAS9M,GAG3B,MAAKA,GAAUM,MAILN,EAAUG,MAASH,EAAU8C,aAKhC,GAJN5jD,GAAG8/C,IAAI,0CACA,IALP9/C,GAAG8/C,IAAI,oCACA,IAgBL+N,yBAA2B,WAE9B,GAAI7C,SACCA,QAAQ5gB,IAAK,CAChB,GAA6B,kBAAhB4gB,SAAQ5gB,KAA6C,gBAAhB4gB,SAAQ5gB,IACzD,KAAM,uDAEP,IAAI4gB,QAAQ5gB,IAAIr8B,UAA4C,kBAAzBi9C,SAAQ5gB,IAAIr8B,SAC9C,KAAM,mDAEP,IAAIi9C,QAAQ5gB,IAAIhiC,MAAoC,kBAArB4iD,SAAQ5gB,IAAIhiC,KAC1C,KAAM,+CAEP,IAAI4iD,QAAQ5gB,IAAIxK,KAAkC,kBAApBorB,SAAQ5gB,IAAIxK,IACzC,KAAM,+CAKT,OAAO,EAGR,QAMCkuB,kBAAmB,WAClB,MAAK5B,WAKEtnD,OAAOsV,IAAIqtC,MAAO,SAASpG,GACjC,OACCC,MAAOD,EAAInL,OAAOoL,aANnBphD,IAAG8/C,IAAI,2DAgBTxqC,KAAM,SAAS0gC,GACdgV,QAAUhV,MAEV6X,2BAEAlC,wBAAwBX,SAIxBC,oBAAsBD,QAAQzG,iBAAoByG,QAAQtK,WAAcsK,QAAQ1G,gBAAmB0G,QAAQpK,sBAGnGoK,QAAQrG,mBAAqBqG,QAAQtG,kBAC5C1kD,GAAGu6C,IAAIjlC,KAAS01C,QAAQrG,kBAAoBqG,QAAQrG,mBAAoB,GAGzE3kD,GAAG6kD,GAAGvvC,KAAK01C,SAENA,QAAQtG,iBACZqH,wBAQFlC,OAAQqC,QA0GRhE,aAAc,SAASoE,EAAYyB,GAElC,IAAK7B,UAEJ,WADAlsD,IAAG8/C,IAAI,oDAGH,KAAKwM,EAET,WADAtsD,IAAG8/C,IAAI,uEAIR,IAAIkO,MACAC,KACAC,KACAC,GAAgB,CAMpB,OALA7B,MAAgBj7C,OAAOi7C,GACvByB,KAAkB18C,OAAO08C,OACzBI,IAAmBJ,EAAaxsD,OAG3B+qD,EAAW/qD,OAKP+qD,EAAW/qD,QAAU4sD,GAAiB7B,EAAW/qD,QAAUwsD,EAAaxsD,WAChFvB,IAAG8/C,IAAI,qEAMRl7C,OAAOC,KAAKynD,EAAY,SAASlrD,EAAGT,GAUnC,GARAA,EAAI+qD,iBAAiB/qD,GAIrBA,EAAEsgD,KAAOtgD,EAAEsgD,MAAQ,KAId2M,aAAajtD,GAAlB,CAWA,GANA4mD,MAAM5mD,EAAE+iD,aACP1N,OAAQr1C,GAKLA,EAAEsgD,KAAM,CACX,IAAMtgD,EAAEsgD,MAA0B,gBAAXtgD,GAAM,OAAmBX,GAAGw/C,gBAAgB7+C,EAAEsgD,MAGpE,KAFAjhD,IAAG8/C,IAAI,uEACP9/C,GAAG8/C,IAAI,sBAAuBn/C,GACxB,iJAEF,IAA6B,GAAzBiE,OAAOjE,EAAEsgD,MAAM1/C,OAIvB,KAHAvB,IAAG8/C,IAAI,mDACP9/C,GAAG8/C,IAAI,sBAAuBn/C,GAC9BX,GAAG8/C,IAAI,gCAAiCl7C,OAAOjE,EAAEsgD,MAAM1/C,QACjD,0GAWP,OAPA4qD,oBAAmBxrD,OAGnBirD,gBAAejrD,GAOXsqD,mBAKJjrD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYC,gBACzBpiD,GAGDX,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYE,kBACzBriD,IAZDA,EAAEsgD,KAAOsK,iBAAiB5qD,GAiBvBwtD,EACH9B,UAAU1rD,EAAGotD,EAAa3sD,IAItBT,EAAE8iD,sBAAwB9iD,EAAEgjD,UAC/BsK,EAAQttD,EAAEijD,YAAYp+C,eAAiByoD,EAAQttD,EAAEijD,YAAYp+C,mBAC7DyoD,EAAQttD,EAAEijD,YAAYp+C,eAAelD,KAAK3B,IAG1CqtD,EAAS1rD,MACR2hD,MAAOtjD,GACPi/B,IAAKj/B,EAAEijD,sBAONuK,IAEJvpD,OAAOC,KAAKopD,EAAS,SAAS7sD,EAAG+vB,GAChC68B,EAAS1rD,MACRs9B,IAAKx+B,EACL6iD,KAAM9yB,MAURvsB,OAAOC,KAAKmpD,EAAU,SAAS5sD,EAAGgtD,GAEjC,GAAInlB,GAAgBjpC,GAAGonD,UAAUhB,eAAiBgI,EAAInK,KAAK,GAAG7C,KAG9D8M,GAAcjlB,GAAiBilB,EAAcjlB,OAC7CilB,EAAcjlB,GAAe3mC,KAAK8rD,KAMnCxpD,OAAOC,KAAKqpD,EAAe,SAAS9sD,EAAGitD,GAEtC,GAAIC,GAAkB,SAASrlB,EAAemlB,GAC7C,GAAKA,EAAL,CAKA,GAAIxuB,GAAMwuB,EAAIxuB,IACbx3B,EAAO,MACP2F,EAAW,QACXwgD,EAAe,WACdD,EAAgBltD,EAAGitD,EAAS3mD,QAE7B8mD,EAAY,WACX5pD,OAAOC,KAAKupD,EAAInK,KAAM,SAAShrB,EAAKw1B,GACnCzuD,GAAG8/C,IAAI,kBAAoB2O,EAAKnpD,KAAO,OAAQmpD,GAC/CzuD,GAAG8rD,UAAU2C,EAAK/K,eAGpBgL,EAAc,SAAStG,GACtBiE,UAAU+B,EAAInK,KAAMmE,GAItB,IAAI4C,QAAQ5gB,KAAO4gB,QAAQ5gB,IAAIr8B,WAC9BA,EAAWi9C,QAAQ5gB,IAAIr8B,SAASqgD,EAAIxuB,IAAKwuB,EAAInK,MACrB,gBAAbl2C,IACV,KAAM,qDAGR,IAAIi9C,QAAQ5gB,KAAO4gB,QAAQ5gB,IAAIhiC,OAC9BA,EAAO4iD,QAAQ5gB,IAAIhiC,KAAKgmD,EAAIxuB,IAAKwuB,EAAInK,MACjB,gBAAT77C,IACV,KAAM,iDAGR,IAAI4iD,QAAQ5gB,KAAO4gB,QAAQ5gB,IAAIxK,MAC9BA,EAAMorB,QAAQ5gB,IAAIxK,IAAIwuB,EAAIxuB,IAAKwuB,EAAInK,MAChB,gBAARrkB,IACV,KAAM,gDAKR,IAAI+uB,GAAc3D,QAAQ5gB,GACC,mBAAhBukB,KACVA,EAAc,SAAS/uB,EAAK0sB,EAAYsC,EAAiBC,EAAeC,GACvElqD,OAAO+6B,MACNC,IAAKA,EACLx3B,KAAMA,EACNhD,MACCmgC,OAAQvlC,GAAG2D,UAAUyqD,EAAInK,KAAMjkD,GAAGg/C,oBAEnChW,OAAO,EACPC,cAAeA,EACfl7B,SAAUA,EACV63B,QAASgpB,EACTt+C,MAAO,SAASy+C,EAAO/oB,EAAUynB,GAChCztD,GAAG8/C,IAAI,wBAAyB2N,EAAU1sD,WAAYqtD,EAAInK,MAC1D4K,KAEDj7C,SAAUk7C,MAKbH,EAAY/uB,EAAKwuB,EAAInK,KAAMyK,EAAaF,EAAWD,IAGpDD,GAAgBltD,EAAGitD,EAAS3mD,gBA/L7B1H,IAAG8/C,IAAI,yEAuMTkP,cAAe,WAEd,MAAK9C,eAKLtnD,QAAOC,KAAK0iD,MAAO,SAASnmD,EAAGT,GAC9BX,GAAG8rD,UAAUnrD,EAAEq1C,OAAO0N,kBALtB1jD,IAAG8/C,IAAI,uDAaTgM,UAAW,SAASpI,GAEnB,MAAKwI,gBAKD3E,MAAM7D,KACT1jD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYK,mBACzBoE,MAAM7D,IAGP1jD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYM,YACzBmE,MAAM7D,IAGP1jD,GAAG8iD,YAAYL,UACdyI,kBACAlrD,GAAGonD,UAAUtE,YAAYO,kBACzBkE,MAAM7D,UAGA6D,OAAM7D,SAvBb1jD,IAAG8/C,IAAI,wDA8BV//C,QAAQC,GAAKA,GAES,mBAAX2uC,SAA0BA,OAAOC,KAE3CD,OAAO,WACN,MAAO3uC,QAKY,mBAAZD,SAA0BA,QAAUwE"} \ No newline at end of file From d28ead8c92698e6f6f7f4bf14ca7dd85df085c02 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 11:34:02 -0700 Subject: [PATCH 24/61] Minor: comments --- src/lib/F2.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index c53f52ff..f9844b06 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -219,17 +219,17 @@ var F2 = (function() { @returns {bool} Whether the URL is local or not Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js */ - isLocalRequest: function(url) { + isLocalRequest: function(url){ + var urlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; var urlLower = url.toLowerCase(); - var relUrlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var parts = relUrlPattern.execute(urlLower); + var parts = urlPattern.exec(urlLower); var ajaxLocation; var ajaxLocParts; try { ajaxLocation = location.href; - } catch ( e ) { - // Use the href of an anchor since IE account for document.location + } catch (e) { + // Use the href of an anchor since IE accounts for document.location ajaxLocation = document.createElement('a'); ajaxLocation.href = ''; ajaxLocation = ajaxLocation.href; @@ -237,16 +237,16 @@ var F2 = (function() { ajaxLocation = ajaxLocation.toLowerCase(); - // The url is relative, so we'll fully qualify it and re-regex + // The url must be relative, so fully qualify it and re-regex url if (!parts) { urlLower = _absolutizeURI(ajaxLocation, urlLower).toLowerCase(); - parts = relUrlPattern.exec(urlLower); + parts = urlPattern.exec(urlLower); } // Segment location into parts - ajaxLocParts = relUrlPattern.exec(ajaxLocation) || []; + ajaxLocParts = urlPattern.exec(ajaxLocation) || []; - // Do hostname and protocol and port of manifest URL match location.href? + // Do hostname and protocol and port of manifest URL match location.href? (a "local" request on the same domain) var matched = !(parts && (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || (parts[3] || (parts[1] === 'http:' ? '80' : '443')) !== From 7cc187e689b1a441153b5ef768426060fdb5b23a Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 11:35:18 -0700 Subject: [PATCH 25/61] Minor refactor & boolean logic fix --- src/lib/container.js | 83 ++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/src/lib/container.js b/src/lib/container.js index 858b705e..df306126 100644 --- a/src/lib/container.js +++ b/src/lib/container.js @@ -130,30 +130,31 @@ F2.extend('', (function() { @return {F2.AppConfig} The new F2.AppConfig object */ function _getAppConfigFromElement(node) { - var appConfig; + if (!node) { + return; + } - if (node) { - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; + var appConfig; + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } catch (e) { - console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + F2.log('warn', 'F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); } } } @@ -414,7 +415,6 @@ F2.extend('', (function() { function _checkComplete() { // Are we done loading all scripts for this app? if (++scriptsLoaded === scriptCount) { - // success cb(); } } @@ -741,6 +741,28 @@ F2.extend('', (function() { return true; } + /** + Find app placeholders on the page + @method _getPlaceholders + @private + @param {Element} parentNode The element to search for placeholder apps + @returns {Array} The discovered placeholder elements + */ + function _getPlaceholders(parentNode) { + var elements = []; + + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); + } + + if (parentNode.querySelectorAll) { + var children = Array.prototype.slice.call(parentNode.querySelectorAll('[data-f2-appid]')); + elements = elements.concat(children); + } + + return elements; + } + return { /** Gets the current list of apps in the container. @@ -785,7 +807,7 @@ F2.extend('', (function() { // Dictates whether we use the old logic or the new logic. // TODO: Remove in v2.0 - _usesAppHandlers = (_config.beforeAppRender || _config.appRender || _config.afterAppRender || _config.appScriptLoadFailed); + _usesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); // Only establish RPC connection if the container supports the secure app page if (!!_config.secureAppPagePath || _config.isSecureAppPage) { @@ -816,22 +838,9 @@ F2.extend('', (function() { throw new Error('"parentNode" must be null or a DOM node'); } - var elements = []; + var elements = _getPlaceholders(parentNode || document.body); var appConfigs = []; - /** - If the passed in element has a data-f2-appid attribute add it to the - list of elements but to not search within that element for other - placeholders - */ - if (parentNode) { - if (parentNode.hasAttribute('data-f2-appid')) { - elements.push(parentNode); - } - } else if (document.querySelectorAll) { - elements = elements.concat(document.querySelectorAll('[data-f2-appid]')); - } - for (var i = 0, len = elements.length; i < len; i++) { var appConfig = _getAppConfigFromElement(elements[i]); appConfigs.push(appConfig); From 75a6702e5e4e5c41361e7a6c44c1ba10cefd9295 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 11:35:48 -0700 Subject: [PATCH 26/61] Adding compiled files --- dist/f2.debug.js | 101 +++++++++++++++++++++----------------- dist/f2.min.js | 4 +- dist/f2.min.js.map | 2 +- dist/f2.no-third-party.js | 101 +++++++++++++++++++++----------------- 4 files changed, 113 insertions(+), 95 deletions(-) diff --git a/dist/f2.debug.js b/dist/f2.debug.js index e8bf8f76..67a87f77 100644 --- a/dist/f2.debug.js +++ b/dist/f2.debug.js @@ -14021,17 +14021,17 @@ var F2 = (function() { @returns {bool} Whether the URL is local or not Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js */ - isLocalRequest: function(url) { + isLocalRequest: function(url){ + var urlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; var urlLower = url.toLowerCase(); - var relUrlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var parts = relUrlPattern.execute(urlLower); + var parts = urlPattern.exec(urlLower); var ajaxLocation; var ajaxLocParts; try { ajaxLocation = location.href; - } catch ( e ) { - // Use the href of an anchor since IE account for document.location + } catch (e) { + // Use the href of an anchor since IE accounts for document.location ajaxLocation = document.createElement('a'); ajaxLocation.href = ''; ajaxLocation = ajaxLocation.href; @@ -14039,16 +14039,16 @@ var F2 = (function() { ajaxLocation = ajaxLocation.toLowerCase(); - // The url is relative, so we'll fully qualify it and re-regex + // The url must be relative, so fully qualify it and re-regex url if (!parts) { urlLower = _absolutizeURI(ajaxLocation, urlLower).toLowerCase(); - parts = relUrlPattern.exec(urlLower); + parts = urlPattern.exec(urlLower); } // Segment location into parts - ajaxLocParts = relUrlPattern.exec(ajaxLocation) || []; + ajaxLocParts = urlPattern.exec(ajaxLocation) || []; - // Do hostname and protocol and port of manifest URL match location.href? + // Do hostname and protocol and port of manifest URL match location.href? (a "local" request on the same domain) var matched = !(parts && (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || (parts[3] || (parts[1] === 'http:' ? '80' : '443')) !== @@ -15560,30 +15560,31 @@ F2.extend('', (function() { @return {F2.AppConfig} The new F2.AppConfig object */ function _getAppConfigFromElement(node) { - var appConfig; + if (!node) { + return; + } - if (node) { - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; + var appConfig; + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } catch (e) { - console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + F2.log('warn', 'F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); } } } @@ -15844,7 +15845,6 @@ F2.extend('', (function() { function _checkComplete() { // Are we done loading all scripts for this app? if (++scriptsLoaded === scriptCount) { - // success cb(); } } @@ -16171,6 +16171,28 @@ F2.extend('', (function() { return true; } + /** + Find app placeholders on the page + @method _getPlaceholders + @private + @param {Element} parentNode The element to search for placeholder apps + @returns {Array} The discovered placeholder elements + */ + function _getPlaceholders(parentNode) { + var elements = []; + + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); + } + + if (parentNode.querySelectorAll) { + var children = Array.prototype.slice.call(parentNode.querySelectorAll('[data-f2-appid]')); + elements = elements.concat(children); + } + + return elements; + } + return { /** Gets the current list of apps in the container. @@ -16215,7 +16237,7 @@ F2.extend('', (function() { // Dictates whether we use the old logic or the new logic. // TODO: Remove in v2.0 - _usesAppHandlers = (_config.beforeAppRender || _config.appRender || _config.afterAppRender || _config.appScriptLoadFailed); + _usesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); // Only establish RPC connection if the container supports the secure app page if (!!_config.secureAppPagePath || _config.isSecureAppPage) { @@ -16246,22 +16268,9 @@ F2.extend('', (function() { throw new Error('"parentNode" must be null or a DOM node'); } - var elements = []; + var elements = _getPlaceholders(parentNode || document.body); var appConfigs = []; - /** - If the passed in element has a data-f2-appid attribute add it to the - list of elements but to not search within that element for other - placeholders - */ - if (parentNode) { - if (parentNode.hasAttribute('data-f2-appid')) { - elements.push(parentNode); - } - } else if (document.querySelectorAll) { - elements = elements.concat(document.querySelectorAll('[data-f2-appid]')); - } - for (var i = 0, len = elements.length; i < len; i++) { var appConfig = _getAppConfigFromElement(elements[i]); appConfigs.push(appConfig); diff --git a/dist/f2.min.js b/dist/f2.min.js index ab58a487..e31b7060 100644 --- a/dist/f2.min.js +++ b/dist/f2.min.js @@ -56,6 +56,6 @@ i&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||eb.removeEvent(a, }}}),cb.optSelected||(eb.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),eb.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){eb.propFix[this.toLowerCase()]=this}),cb.enctype||(eb.propFix.enctype="encoding");var Dc=/[\t\r\n\f]/g;eb.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(eb.isFunction(a))return this.each(function(b){eb(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(tb)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(Dc," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=eb.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(eb.isFunction(a))return this.each(function(b){eb(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(tb)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(Dc," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?eb.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(eb.isFunction(a)?function(c){eb(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c)for(var b,d=0,e=eb(this),f=a.match(tb)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===xb||"boolean"===c)&&(this.className&&eb._data(this,"__className__",this.className),this.className=this.className||a===!1?"":eb._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(Dc," ").indexOf(b)>=0)return!0;return!1}}),eb.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){eb.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),eb.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var Ec=eb.now(),Fc=/\?/,Gc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;eb.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=eb.trim(b+"");return e&&!eb.trim(e.replace(Gc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():eb.error("Invalid JSON: "+b)},eb.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||eb.error("Invalid XML: "+b),c};var Hc,Ic,Jc=/#.*$/,Kc=/([?&])_=[^&]*/,Lc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Mc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nc=/^(?:GET|HEAD)$/,Oc=/^\/\//,Pc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Qc={},Rc={},Sc="*/".concat("*");try{Ic=location.href}catch(Tc){Ic=ob.createElement("a"),Ic.href="",Ic=Ic.href}Hc=Pc.exec(Ic.toLowerCase())||[],eb.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ic,type:"GET",isLocal:Mc.test(Hc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Sc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":eb.parseJSON,"text xml":eb.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?P(P(a,eb.ajaxSettings),b):P(eb.ajaxSettings,a)},ajaxPrefilter:N(Qc),ajaxTransport:N(Rc),ajax:function(a,b){function c(a,b,c,d){var e,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),j=void 0,g=d||"",v.readyState=a>0?4:0,e=a>=200&&300>a||304===a,c&&(s=Q(l,v,c)),s=R(l,s,v,e),e?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(eb.lastModified[f]=u),u=v.getResponseHeader("etag"),u&&(eb.etag[f]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,e=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",e?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,i&&n.trigger(e?"ajaxSuccess":"ajaxError",[v,l,e?k:r]),p.fireWith(m,[v,w]),i&&(n.trigger("ajaxComplete",[v,l]),--eb.active||eb.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=eb.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?eb(m):eb.event,o=eb.Deferred(),p=eb.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!k)for(k={};b=Lc.exec(g);)k[b[1].toLowerCase()]=b[2];b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return j&&j.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||Ic)+"").replace(Jc,"").replace(Oc,Hc[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=eb.trim(l.dataType||"*").toLowerCase().match(tb)||[""],null==l.crossDomain&&(d=Pc.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Hc[1]&&d[2]===Hc[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Hc[3]||("http:"===Hc[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=eb.param(l.data,l.traditional)),O(Qc,l,b,v),2===t)return v;i=l.global,i&&0===eb.active++&&eb.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Nc.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fc.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Kc.test(f)?f.replace(Kc,"$1_="+Ec++):f+(Fc.test(f)?"&":"?")+"_="+Ec++)),l.ifModified&&(eb.lastModified[f]&&v.setRequestHeader("If-Modified-Since",eb.lastModified[f]),eb.etag[f]&&v.setRequestHeader("If-None-Match",eb.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Sc+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)v.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(e in{success:1,error:1,complete:1})v[e](l[e]);if(j=O(Rc,l,b,v)){v.readyState=1,i&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,j.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return eb.get(a,b,c,"json")},getScript:function(a,b){return eb.get(a,void 0,b,"script")}}),eb.each(["get","post"],function(a,b){eb[b]=function(a,c,d,e){return eb.isFunction(c)&&(e=e||d,d=c,c=void 0),eb.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),eb.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){eb.fn[b]=function(a){return this.on(b,a)}}),eb._evalUrl=function(a){return eb.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},eb.fn.extend({wrapAll:function(a){if(eb.isFunction(a))return this.each(function(b){eb(this).wrapAll(a.call(this,b))});if(this[0]){var b=eb(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(eb.isFunction(a)?function(b){eb(this).wrapInner(a.call(this,b))}:function(){var b=eb(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=eb.isFunction(a);return this.each(function(c){eb(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){eb.nodeName(this,"body")||eb(this).replaceWith(this.childNodes)}).end()}}),eb.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!cb.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||eb.css(a,"display"))},eb.expr.filters.visible=function(a){return!eb.expr.filters.hidden(a)};var Uc=/%20/g,Vc=/\[\]$/,Wc=/\r?\n/g,Xc=/^(?:submit|button|image|reset|file)$/i,Yc=/^(?:input|select|textarea|keygen)/i;eb.param=function(a,b){var c,d=[],e=function(a,b){b=eb.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=eb.ajaxSettings&&eb.ajaxSettings.traditional),eb.isArray(a)||a.jquery&&!eb.isPlainObject(a))eb.each(a,function(){e(this.name,this.value)});else for(c in a)S(c,a[c],b,e);return d.join("&").replace(Uc,"+")},eb.fn.extend({serialize:function(){return eb.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=eb.prop(this,"elements");return a?eb.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!eb(this).is(":disabled")&&Yc.test(this.nodeName)&&!Xc.test(a)&&(this.checked||!Eb.test(a))}).map(function(a,b){var c=eb(this).val();return null==c?null:eb.isArray(c)?eb.map(c,function(a){return{name:b.name,value:a.replace(Wc,"\r\n")}}):{name:b.name,value:c.replace(Wc,"\r\n")}}).get()}}),eb.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&T()||U()}:T;var Zc=0,$c={},_c=eb.ajaxSettings.xhr();a.ActiveXObject&&eb(a).on("unload",function(){for(var a in $c)$c[a](void 0,!0)}),cb.cors=!!_c&&"withCredentials"in _c,_c=cb.ajax=!!_c,_c&&eb.ajaxTransport(function(a){if(!a.crossDomain||cb.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Zc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete $c[g],b=void 0,f.onreadystatechange=eb.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=$c[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}}),eb.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return eb.globalEval(a),a}}}),eb.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),eb.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=ob.head||eb("head")[0]||ob.documentElement;return{send:function(d,e){b=ob.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;eb.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||eb.expando+"_"+Ec++;return this[a]=!0,a}}),eb.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=eb.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(Fc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||eb.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&eb.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),eb.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||ob;var d=lb.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=eb.buildFragment([a],b,e),e&&e.length&&eb(e).remove(),eb.merge([],d.childNodes))};var cd=eb.fn.load;eb.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=eb.trim(a.slice(h,a.length)),a=a.slice(0,h)),eb.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&eb.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?eb("
").append(eb.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},eb.expr.filters.animated=function(a){return eb.grep(eb.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;eb.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=eb.css(a,"position"),l=eb(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=eb.css(a,"top"),i=eb.css(a,"left"),j=("absolute"===k||"fixed"===k)&&eb.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),eb.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},eb.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){eb.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,eb.contains(b,e)?(typeof e.getBoundingClientRect!==xb&&(d=e.getBoundingClientRect()),c=V(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===eb.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),eb.nodeName(a[0],"html")||(c=a.offset()),c.top+=eb.css(a[0],"borderTopWidth",!0),c.left+=eb.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-eb.css(d,"marginTop",!0),left:b.left-c.left-eb.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||dd;a&&!eb.nodeName(a,"html")&&"static"===eb.css(a,"position");)a=a.offsetParent;return a||dd})}}),eb.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);eb.fn[a]=function(d){return Db(this,function(a,d,e){var f=V(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?eb(f).scrollLeft():e,c?e:eb(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),eb.each(["top","left"],function(a,b){eb.cssHooks[b]=A(cb.pixelPosition,function(a,c){return c?(c=bc(a,b),dc.test(c)?eb(a).position()[b]+"px":c):void 0})}),eb.each({Height:"height",Width:"width"},function(a,b){eb.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){eb.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Db(this,function(b,c,d){var e;return eb.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?eb.css(b,c,g):eb.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),eb.fn.size=function(){return this.length},eb.fn.andSelf=eb.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return eb});var ed=a.jQuery,fd=a.$;return eb.noConflict=function(b){return a.$===eb&&(a.$=fd),b&&a.jQuery===eb&&(a.jQuery=ed),eb},typeof b===xb&&(a.jQuery=a.$=eb),eb});/*! * This file creates $ and jQuery variables within the F2 closure scope */ -var $,jQuery=$=window.jQuery.noConflict(!0);+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('"].join("")}var d=a,e=jQuery(a.root);return{hideMask:function(a){F2.UI.hideMask(d.instanceId,a)},Modals:function(){function a(a){return c("Alert",a)}function b(a){return c("Confirm",a,!0)}return{alert:function(b,c){return F2.isInit()?void(F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.alert",[].slice.call(arguments)):jQuery(a(b)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-primary").on("click",function(){jQuery(a).modal("hide").remove(),(c||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.alert()")},confirm:function(a,c,e){return F2.isInit()?void(F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.confirm",[].slice.call(arguments)):jQuery(b(a)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-ok").on("click",function(){jQuery(a).modal("hide").remove(),(c||jQuery.noop)()}),jQuery(a).find(".btn-cancel").on("click",function(){jQuery(a).modal("hide").remove(),(e||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.confirm()")}}}(),setTitle:function(a){F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"setTitle",[a]):jQuery(d.root).find("."+F2.Constants.Css.APP_TITLE).text(a)},showMask:function(a,b){F2.UI.showMask(d.instanceId,a,b)},updateHeight:b,Views:function(){function a(a){return f.test(a)?!0:(F2.log('"'+a+'" is not a valid F2.UI.Views event name'),!1)}var c=new EventEmitter2,f=/change/i;return c.setMaxListeners(0),{change:function(a){"function"==typeof a?this.on("change",a):"string"==typeof a&&(d.isSecure&&!F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Views.change",[].slice.call(arguments)):F2.inArray(a,d.views)&&(jQuery("."+F2.Constants.Css.APP_VIEW,e).addClass("hide").filter('[data-f2-view="'+a+'"]',e).removeClass("hide"),b(),c.emit("change",a)))},off:function(b,d){a(b)&&c.off(b,d)},on:function(b,d){a(b)&&c.on(b,d)}}}()}}var b;return a.hideMask=function(a,b){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.hideMask()");if(F2.Rpc.isRemote(a)&&!jQuery(b).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.hideMask",[a,jQuery(b).selector]);else{var c=jQuery(b);c.find("> ."+F2.Constants.Css.MASK).remove(),c.removeClass(F2.Constants.Css.MASK_CONTAINER),c.data(F2.Constants.Css.MASK_CONTAINER)&&c.css({position:"static"})}},a.init=function(a){b=a,b.UI=jQuery.extend(!0,{},F2.ContainerConfig.UI,b.UI||{})},a.showMask=function(a,c,d){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.showMask()");if(F2.Rpc.isRemote(a)&&jQuery(c).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.showMask",[a,jQuery(c).selector,d]);else{d&&!b.UI.Mask.loadingIcon&&F2.log("Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();");var e=jQuery(c).addClass(F2.Constants.Css.MASK_CONTAINER),f=jQuery("
").height("100%").width("100%").addClass(F2.Constants.Css.MASK);b.UI.Mask.useClasses||f.css({"background-color":b.UI.Mask.backgroundColor,"background-image":b.UI.Mask.loadingIcon?"url("+b.UI.Mask.loadingIcon+")":"","background-position":"50% 50%","background-repeat":"no-repeat",display:"block",left:0,"min-height":30,padding:0,position:"absolute",top:0,"z-index":b.UI.Mask.zIndex,filter:"alpha(opacity="+100*b.UI.Mask.opacity+")",opacity:b.UI.Mask.opacity}),"static"===e.css("position")&&(e.css({position:"relative"}),e.data(F2.Constants.Css.MASK_CONTAINER,!0)),e.append(f)}},a}()),jQuery(function(){var a=[],b=function(b){b&&a.push(b)},c=function(a){if(a)for(var c=0,d=a.length;d>c;c++)b(a[c])};if(b(document.getElementById("f2-autoload")),document.querySelectorAll&&(c(document.querySelectorAll("[data-f2-autoload]")),c(document.querySelectorAll(".f2-autoload"))),a.length){F2.init();for(var d=0,e=a.length;e>d;d++)F2.loadPlaceholders(a[d])}}),exports.F2=F2,"undefined"!=typeof define&&define.amd&&define(function(){return F2})}}("undefined"!=typeof exports?exports:window); +var $,jQuery=$=window.jQuery.noConflict(!0);+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('"].join("")}var d=a,e=jQuery(a.root);return{hideMask:function(a){F2.UI.hideMask(d.instanceId,a)},Modals:function(){function a(a){return c("Alert",a)}function b(a){return c("Confirm",a,!0)}return{alert:function(b,c){return F2.isInit()?void(F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.alert",[].slice.call(arguments)):jQuery(a(b)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-primary").on("click",function(){jQuery(a).modal("hide").remove(),(c||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.alert()")},confirm:function(a,c,e){return F2.isInit()?void(F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Modals.confirm",[].slice.call(arguments)):jQuery(b(a)).on("show.bs.modal",function(){var a=this;jQuery(a).find(".btn-ok").on("click",function(){jQuery(a).modal("hide").remove(),(c||jQuery.noop)()}),jQuery(a).find(".btn-cancel").on("click",function(){jQuery(a).modal("hide").remove(),(e||jQuery.noop)()})}).modal({backdrop:!0})):void F2.log("F2.init() must be called before F2.UI.Modals.confirm()")}}}(),setTitle:function(a){F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"setTitle",[a]):jQuery(d.root).find("."+F2.Constants.Css.APP_TITLE).text(a)},showMask:function(a,b){F2.UI.showMask(d.instanceId,a,b)},updateHeight:b,Views:function(){function a(a){return f.test(a)?!0:(F2.log('"'+a+'" is not a valid F2.UI.Views event name'),!1)}var c=new EventEmitter2,f=/change/i;return c.setMaxListeners(0),{change:function(a){"function"==typeof a?this.on("change",a):"string"==typeof a&&(d.isSecure&&!F2.Rpc.isRemote(d.instanceId)?F2.Rpc.call(d.instanceId,F2.Constants.Sockets.UI_RPC,"Views.change",[].slice.call(arguments)):F2.inArray(a,d.views)&&(jQuery("."+F2.Constants.Css.APP_VIEW,e).addClass("hide").filter('[data-f2-view="'+a+'"]',e).removeClass("hide"),b(),c.emit("change",a)))},off:function(b,d){a(b)&&c.off(b,d)},on:function(b,d){a(b)&&c.on(b,d)}}}()}}var b;return a.hideMask=function(a,b){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.hideMask()");if(F2.Rpc.isRemote(a)&&!jQuery(b).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.hideMask",[a,jQuery(b).selector]);else{var c=jQuery(b);c.find("> ."+F2.Constants.Css.MASK).remove(),c.removeClass(F2.Constants.Css.MASK_CONTAINER),c.data(F2.Constants.Css.MASK_CONTAINER)&&c.css({position:"static"})}},a.init=function(a){b=a,b.UI=jQuery.extend(!0,{},F2.ContainerConfig.UI,b.UI||{})},a.showMask=function(a,c,d){if(!F2.isInit())return void F2.log("F2.init() must be called before F2.UI.showMask()");if(F2.Rpc.isRemote(a)&&jQuery(c).is("."+F2.Constants.Css.APP))F2.Rpc.call(a,F2.Constants.Sockets.RPC,"F2.UI.showMask",[a,jQuery(c).selector,d]);else{d&&!b.UI.Mask.loadingIcon&&F2.log("Unable to display loading icon. Please set F2.ContainerConfig.UI.Mask.loadingIcon when calling F2.init();");var e=jQuery(c).addClass(F2.Constants.Css.MASK_CONTAINER),f=jQuery("
").height("100%").width("100%").addClass(F2.Constants.Css.MASK);b.UI.Mask.useClasses||f.css({"background-color":b.UI.Mask.backgroundColor,"background-image":b.UI.Mask.loadingIcon?"url("+b.UI.Mask.loadingIcon+")":"","background-position":"50% 50%","background-repeat":"no-repeat",display:"block",left:0,"min-height":30,padding:0,position:"absolute",top:0,"z-index":b.UI.Mask.zIndex,filter:"alpha(opacity="+100*b.UI.Mask.opacity+")",opacity:b.UI.Mask.opacity}),"static"===e.css("position")&&(e.css({position:"relative"}),e.data(F2.Constants.Css.MASK_CONTAINER,!0)),e.append(f)}},a}()),jQuery(function(){var a=[],b=function(b){b&&a.push(b)},c=function(a){if(a)for(var c=0,d=a.length;d>c;c++)b(a[c])};if(b(document.getElementById("f2-autoload")),document.querySelectorAll&&(c(document.querySelectorAll("[data-f2-autoload]")),c(document.querySelectorAll(".f2-autoload"))),a.length){F2.init();for(var d=0,e=a.length;e>d;d++)F2.loadPlaceholders(a[d])}}),exports.F2=F2,"undefined"!=typeof define&&define.amd&&define(function(){return F2})}}("undefined"!=typeof exports?exports:window); //# sourceMappingURL=f2.min.js.map \ No newline at end of file diff --git a/dist/f2.min.js.map b/dist/f2.min.js.map index 18b48749..9b98b1f1 100644 --- a/dist/f2.min.js.map +++ b/dist/f2.min.js.map @@ -1 +1 @@ -{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","global","factory","module","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","Plugin","_relatedTarget","$this","Modal","DEFAULTS","element","$body","$element","$backdrop","isShown","scrollbarWidth","remote","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","that","checkScrollbar","setScrollbar","escape","transition","enforceFocus","emulateTransitionEnd","hideModal","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","measureScrollbar","bodyPad","clientWidth","innerWidth","scrollDiv","modal","Constructor","$target","showEvent","_events","_conf","configure","conf","delimiter","maxListeners","wildcard","newListener","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","property","isHostObject","o","hasFlash","undef","navigator","plugins","description","mimeTypes","enabledPlugin","flashVersion","flash","GetVariable","notSupportedException","major","minor","HAS_FLASH_THROTTLED_BUG","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","substring","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","q","useHash","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","frameBorder","allowTransparency","onLoad","usePost","action","checkAcl","acl","re","substr","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","userAgent","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","defaults","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","stringify","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","fragments","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","ex1","_isNode","Node","_isElement","HTMLElement","_absolutizeURI","removeDotSegments","output","_parseURI","authority","whitespacePattern","uriPattern","hostname","appConfigReplacer","Apps","overwrite","isFunc","s4","array","isLocalRequest","urlLower","relUrlPattern","execute","isNativeDOMNode","testObject","log","replacer","space","_createHandler","fnOrNode","domNodeAppropriate","_validateToken","domNode","_containerToken","_f2Token","_validateF2Token","_filterHandlersByNamespace","newHandlers","_removeHandler","eventKey","_handlerCollection","_parseEventKey","eventParts","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","appInstance","app","appId","getToken","__f2GetToken","__trigger","callbackArgs","isAppRender","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","containerLocale","localeSupport","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","locale","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","CONTAINER_LOCALE_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_afterAppRender","_config","_appConfig","_html","$appContainer","Constants","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_getAppConfigFromElement","hasAttribute","contextJson","warn","_hasNonTextChildNodes","hasNodes","hasChildNodes","_hydrateContainerConfig","containerConfig","_initAppEvents","elementFilter","view","removeApp","_initContainerEvents","resizeHandler","resizeTimeout","_isPlaceholderElement","_isInit","_createAppInstance","appContent","_apps","_loadApps","appConfigs","appManifest","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","resourceUrl","resourceKey","_loadedStyles","_loadScripts","_error","evtData","_usesAppHandlers","_appHandlerToken","_checkComplete","scriptsLoaded","scriptCount","_emptyWaitlist","errorEvt","waitlist","_loadingScripts","insertBeforeEl","readyStates","loaded","_loadedScripts","getTime","onerror","_loadInlineScripts","inlines","loadInlineScripts","eval","exception","elementInDocument","_loadHtml","_loadSecureApp","manifestScripts","manifestStyles","manifestInlines","manifestApps","$root","register","_validateApp","_validateContainerConfig","getContainerState","getContainerLocale","isInit","loadPlaceholders","registerApps","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps","_socketEmit","broadcast","timesToListen","_createAppToContainerSocket","isLoaded","messagePlayback","socket","_rSocketLoad","appParts","_createContainerToAppSocket","iframeProps","scrolling","_secureAppPagePath","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","rawMessage","callbacks","c","_rUiCall","_rRpc","_rRpcCallback","_rEvents","_registerCallback","messageType","cid","isRemote","appExists","appIsSecure","noFrameAccess","UIClass","_updateHeight","outerHeight","_modalHtml","showCancel","hideMask","Modals","_renderAlert","_renderConfirm","alert","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_isValid","eventsPattern","_containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","autoloadEls","addAll"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"f2.min.js","sources":["f2.debug.js"],"names":["exports","F2","F2_TESTING_MODE","global","factory","module","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","Plugin","_relatedTarget","$this","Modal","DEFAULTS","element","$body","$element","$backdrop","isShown","scrollbarWidth","remote","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","that","checkScrollbar","setScrollbar","escape","transition","enforceFocus","emulateTransitionEnd","hideModal","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","measureScrollbar","bodyPad","clientWidth","innerWidth","scrollDiv","modal","Constructor","$target","showEvent","_events","_conf","configure","conf","delimiter","maxListeners","wildcard","newListener","listenerTree","EventEmitter","searchListenerTree","tree","leaf","branch","xTree","xxTree","isolatedBranch","endReached","listeners","typeLength","currentType","nextType","_listeners","**","growListenerTree","listener","warned","defaultMaxListeners","console","trace","setMaxListeners","many","ttl","_origin","emit","_all","ns","onAny","addListener","leafs","iLeaf","offAny","removeListener","removeAllListeners","listenersAny","EventEmitter2","process","title","decodeURIComponent","isHostMethod","property","isHostObject","o","hasFlash","undef","navigator","plugins","description","mimeTypes","enabledPlugin","flashVersion","flash","GetVariable","notSupportedException","major","minor","HAS_FLASH_THROTTLED_BUG","dom_onReady","domIsReady","domReadyQueue","whenReady","scope","getParentObject","ii","easyXDM","_easyXDM","IFRAME_PREFIX","getDomainName","reURI","getPort","getLocation","proto","domain","port","resolveUrl","reDoubleSlash","path","substring","pathname","lastIndexOf","protocol","host","reParent","appendQueryParameters","parameters","q","useHash","destination","noOverwrite","member","testForNamePropertyBug","channelId","HAS_NAME_PROPERTY_BUG","createFrame","config","frame","frameBorder","allowTransparency","onLoad","usePost","action","checkAcl","acl","re","substr","prepareTransportStack","stackEls","isHost","query","xdm_p","channel","secret","swf","product","userAgent","remoteHelper","xdm_c","xdm_s","xdm_e","useResize","useParent","usePolling","local","images","search","xdm_pa","xdm_po","HashTransport","ReliableBehavior","QueueBehavior","encode","maxLength","VerifyBehavior","initiate","PostMessageTransport","NameTransport","NixTransport","SameOriginTransport","FrameElementTransport","FlashTransport","lazy","chainStack","stackElements","stackEl","defaults","incoming","message","origin","up","outgoing","recipient","down","destroy","removeFromStack","un","floor","emptyFn","sEvent","fpNotify","pair","stringify","evalJSON","getJSONObject","DomHelper","requiresJSON","_map","Fn","del","Socket","onMessage","onReady","postMessage","Rpc","jsonRpcConfig","RpcBehavior","pub","targetOrigin","onDOMReady","sendFn","addSwf","swfContainer","swfNoThrottle","right","flashVars","destroyChannel","swfdomain","createChannel","_getOrigin","uri","_window_onMessage","callerWindow","waitForReady","referrer","_sendMessage","sendMessage","_onReady","readyCount","_onMessage","remoteOrigin","_onLoad","remoteWindow","remoteUrl","_callerWindow","_msgNr","_handleHash","_lastMsg","_remoteOrigin","_pollHash","_listenerWindow","_attachListeners","_timer","pollInterval","tries","getRef","frames","ex","idOut","idIn","currentMessage","ack","waiting","destroying","doFragment","seq","fragments","startVerification","mySecret","theirSecret","_send","jsonrpc","serializer","_createMethod","definition","_callbacks","_callbackCounter","namedParams","_executeMethod","ex1","_isNode","Node","_isElement","HTMLElement","_absolutizeURI","removeDotSegments","output","_parseURI","authority","whitespacePattern","uriPattern","hostname","appConfigReplacer","Apps","overwrite","isFunc","s4","array","isLocalRequest","urlPattern","urlLower","isNativeDOMNode","testObject","log","replacer","space","_createHandler","fnOrNode","domNodeAppropriate","_validateToken","domNode","_containerToken","_f2Token","_validateF2Token","_filterHandlersByNamespace","newHandlers","_removeHandler","eventKey","_handlerCollection","_parseEventKey","eventParts","appCreateRoot","appRenderBefore","appDestroyBefore","appRenderAfter","appDestroyAfter","appRender","appDestroy","appScriptLoadFailed","_defaultMethods","appConfig","appHtml","appInstance","app","appId","getToken","__f2GetToken","__trigger","callbackArgs","isAppRender","AppHandlers","APP_CREATE_ROOT","APP_RENDER_BEFORE","APP_RENDER","APP_RENDER_AFTER","APP_DESTROY_BEFORE","APP_DESTROY","APP_DESTROY_AFTER","APP_SCRIPT_LOAD_FAILED","App","AppConfig","enableBatchRequests","instanceId","isSecure","containerLocale","localeSupport","manifestUrl","minGridSize","ui","views","AppManifest","apps","inlineScripts","AppContent","ContainerConfig","afterAppRender","beforeAppRender","debugMode","locale","scriptErrorTimeout","isSecureAppPage","secureAppPagePath","supportedViews","UI","Mask","backgroundColor","loadingIcon","useClasses","loadScripts","loadStyles","Css","APP","APP_CONTAINER","APP_TITLE","APP_VIEW","APP_VIEW_TRIGGER","MASK","MASK_CONTAINER","Events","APP_SYMBOL_CHANGE","APP_WIDTH_CHANGE","CONTAINER_SYMBOL_CHANGE","CONTAINER_WIDTH_CHANGE","CONTAINER_LOCALE_CHANGE","JSONP_CALLBACK","Sockets","EVENT","LOAD","RPC","RPC_CALLBACK","UI_RPC","Views","DATA_ATTRIBUTE","ABOUT","HELP","HOME","REMOVE","SETTINGS","_afterAppRender","_config","_appConfig","_html","$appContainer","Constants","_appRender","_outerHtml","_beforeAppRender","_appScriptLoadFailed","scriptInfo","_createAppConfig","_getAppConfigFromElement","hasAttribute","contextJson","_hasNonTextChildNodes","hasNodes","hasChildNodes","_hydrateContainerConfig","containerConfig","_initAppEvents","elementFilter","view","removeApp","_initContainerEvents","resizeHandler","resizeTimeout","_isPlaceholderElement","_isInit","_createAppInstance","appContent","_apps","_loadApps","appConfigs","appManifest","_loadStyles","cb","stylesFragment","useCreateStyleSheet","createStyleSheet","resourceUrl","resourceKey","_loadedStyles","_loadScripts","_error","evtData","_usesAppHandlers","_appHandlerToken","_checkComplete","scriptsLoaded","scriptCount","_emptyWaitlist","errorEvt","waitlist","_loadingScripts","insertBeforeEl","readyStates","loaded","_loadedScripts","getTime","onerror","_loadInlineScripts","inlines","loadInlineScripts","eval","exception","elementInDocument","_loadHtml","_loadSecureApp","manifestScripts","manifestStyles","manifestInlines","manifestApps","$root","register","_validateApp","_validateContainerConfig","_getPlaceholders","getContainerState","getContainerLocale","isInit","loadPlaceholders","registerApps","appManifests","appStack","batches","callbackStack","haveManifests","req","requests","manifestRequest","completeFunc","errorFunc","item","successFunc","requestFunc","successCallback","errorCallback","completeCallback","jqxhr","removeAllApps","_socketEmit","broadcast","timesToListen","_createAppToContainerSocket","isLoaded","messagePlayback","socket","_rSocketLoad","appParts","_createContainerToAppSocket","iframeProps","scrolling","_secureAppPagePath","_createRpcCallback","callbackId","parseFunction","functionName","parseMessage","regEx","rawMessage","callbacks","c","_rUiCall","_rRpc","_rRpcCallback","_rEvents","_registerCallback","messageType","cid","isRemote","appExists","appIsSecure","noFrameAccess","UIClass","_updateHeight","outerHeight","_modalHtml","showCancel","hideMask","Modals","_renderAlert","_renderConfirm","alert","confirm","okCallback","cancelCallback","setTitle","showMask","showLoader","updateHeight","_isValid","eventsPattern","_containerConfig","showLoading","mask","background-color","background-image","background-position","background-repeat","min-height","z-index","autoloadEls","addAll"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,SAAUA,SAEV,IAAIA,QAAQC,IAAOD,QAAQE,gBAA3B;;;;;;;;;;;;;CAkBA,SAAUC,EAAQC,GAEK,gBAAXC,SAAiD,gBAAnBA,QAAOL,QAQhDK,OAAOL,QAAUG,EAAOG,SACvBF,EAASD,GAAQ,GACjB,SAAUI,GACT,IAAMA,EAAED,SACP,KAAM,IAAIE,OAAO,2CAElB,OAAOJ,GAASG,IAGlBH,EAASD,IAIS,mBAAXM,QAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAohBnE,QAASC,GAAaC,GACrB,GAAIC,GAASD,EAAIC,OAChBC,EAAOC,GAAOD,KAAMF,EAErB,OAAc,aAATE,GAAuBC,GAAOC,SAAUJ,IACrC,EAGc,IAAjBA,EAAIK,UAAkBJ,GACnB,EAGQ,UAATC,GAA+B,IAAXD,GACR,gBAAXA,IAAuBA,EAAS,GAAOA,EAAS,IAAOD,GA4gEhE,QAASM,GAAQC,EAAUC,EAAWC,GACrC,GAAKN,GAAOO,WAAYF,GACvB,MAAOL,IAAOQ,KAAMJ,EAAU,SAAUK,EAAMC,GAE7C,QAASL,EAAUM,KAAMF,EAAMC,EAAGD,KAAWH,GAK/C,IAAKD,EAAUH,SACd,MAAOF,IAAOQ,KAAMJ,EAAU,SAAUK,GACvC,MAASA,KAASJ,IAAgBC,GAKpC,IAA0B,gBAAdD,GAAyB,CACpC,GAAKO,GAAUC,KAAMR,GACpB,MAAOL,IAAOc,OAAQT,EAAWD,EAAUE,EAG5CD,GAAYL,GAAOc,OAAQT,EAAWD,GAGvC,MAAOJ,IAAOQ,KAAMJ,EAAU,SAAUK,GACvC,MAAST,IAAOe,QAASN,EAAMJ,IAAe,IAAQC,IAiTxD,QAASU,GAASC,EAAKC,GACtB,EACCD,GAAMA,EAAKC,SACFD,GAAwB,IAAjBA,EAAIf,SAErB,OAAOe,GA8ER,QAASE,GAAeC,GACvB,GAAIC,GAASC,GAAcF,KAI3B,OAHApB,IAAOuB,KAAMH,EAAQI,MAAOC,QAAmB,SAAUC,EAAGC,GAC3DN,EAAQM,IAAS,IAEXN,EA2YR,QAASO,KACHtC,GAASuC,kBACbvC,GAASwC,oBAAqB,mBAAoBC,GAAW,GAC7DtC,EAAOqC,oBAAqB,OAAQC,GAAW,KAG/CzC,GAAS0C,YAAa,qBAAsBD,GAC5CtC,EAAOuC,YAAa,SAAUD,IAOhC,QAASA,MAEHzC,GAASuC,kBAAmC,SAAfI,MAAMlC,MAA2C,aAAxBT,GAAS4C,cACnEN,IACA5B,GAAOmC,SA+JT,QAASC,GAAU3B,EAAM4B,EAAKC,GAG7B,GAAcC,SAATD,GAAwC,IAAlB7B,EAAKP,SAAiB,CAEhD,GAAIsC,GAAO,QAAUH,EAAII,QAASC,GAAY,OAAQC,aAItD,IAFAL,EAAO7B,EAAKmC,aAAcJ,GAEL,gBAATF,GAAoB,CAC/B,IACCA,EAAgB,SAATA,GAAkB,EACf,UAATA,GAAmB,EACV,SAATA,EAAkB,MAEjBA,EAAO,KAAOA,GAAQA,EACvBO,GAAOhC,KAAMyB,GAAStC,GAAO8C,UAAWR,GACxCA,EACA,MAAOS,IAGT/C,GAAOsC,KAAM7B,EAAM4B,EAAKC,OAGxBA,GAAOC,OAIT,MAAOD,GAIR,QAASU,GAAmBnD,GAC3B,GAAI2C,EACJ,KAAMA,IAAQ3C,GAGb,IAAc,SAAT2C,IAAmBxC,GAAOiD,cAAepD,EAAI2C,MAGpC,WAATA,EACJ,OAAO,CAIT,QAAO,EAGR,QAASU,GAAczC,EAAM+B,EAAMF,EAAMa,GACxC,GAAMnD,GAAOoD,WAAY3C,GAAzB,CAIA,GAAI4C,GAAKC,EACRC,EAAcvD,GAAOwD,QAIrBC,EAAShD,EAAKP,SAIdwD,EAAQD,EAASzD,GAAO0D,MAAQjD,EAIhCkD,EAAKF,EAAShD,EAAM8C,GAAgB9C,EAAM8C,IAAiBA,CAI5D,IAAOI,GAAOD,EAAMC,KAASR,GAAQO,EAAMC,GAAIrB,OAAmBC,SAATD,GAAsC,gBAATE,GAgEtF,MA5DMmB,KAIJA,EADIF,EACChD,EAAM8C,GAAgBK,EAAWC,OAAS7D,GAAO8D,OAEjDP,GAIDG,EAAOC,KAGZD,EAAOC,GAAOF,MAAgBM,OAAQ/D,GAAOgE,QAKzB,gBAATxB,IAAqC,kBAATA,MAClCW,EACJO,EAAOC,GAAO3D,GAAOiE,OAAQP,EAAOC,GAAMnB,GAE1CkB,EAAOC,GAAKrB,KAAOtC,GAAOiE,OAAQP,EAAOC,GAAKrB,KAAME,IAItDc,EAAYI,EAAOC,GAKbR,IACCG,EAAUhB,OACfgB,EAAUhB,SAGXgB,EAAYA,EAAUhB,MAGTC,SAATD,IACJgB,EAAWtD,GAAOkE,UAAW1B,IAAWF,GAKpB,gBAATE,IAGXa,EAAMC,EAAWd,GAGL,MAAPa,IAGJA,EAAMC,EAAWtD,GAAOkE,UAAW1B,MAGpCa,EAAMC,EAGAD,GAGR,QAASc,GAAoB1D,EAAM+B,EAAMW,GACxC,GAAMnD,GAAOoD,WAAY3C,GAAzB,CAIA,GAAI6C,GAAW5C,EACd+C,EAAShD,EAAKP,SAGdwD,EAAQD,EAASzD,GAAO0D,MAAQjD,EAChCkD,EAAKF,EAAShD,EAAMT,GAAOwD,SAAYxD,GAAOwD,OAI/C,IAAME,EAAOC,GAAb,CAIA,GAAKnB,IAEJc,EAAYH,EAAMO,EAAOC,GAAOD,EAAOC,GAAKrB,MAE3B,CAGVtC,GAAOoE,QAAS5B,GAsBrBA,EAAOA,EAAK6B,OAAQrE,GAAOsE,IAAK9B,EAAMxC,GAAOkE,YAnBxC1B,IAAQc,GACZd,GAASA,IAITA,EAAOxC,GAAOkE,UAAW1B,GAExBA,EADIA,IAAQc,IACHd,GAEFA,EAAK+B,MAAM,MAarB7D,EAAI8B,EAAK1C,MACT,MAAQY,WACA4C,GAAWd,EAAK9B,GAKxB,IAAKyC,GAAOH,EAAkBM,IAActD,GAAOiD,cAAcK,GAChE,QAMGH,UACEO,GAAOC,GAAKrB,KAIbU,EAAmBU,EAAOC,QAM5BF,EACJzD,GAAOwE,WAAa/D,IAAQ,GAIjBgE,GAAQC,eAAiBhB,GAASA,EAAMjE,aAE5CiE,GAAOC,GAIdD,EAAOC,GAAO,QA+YhB,QAASgB,KACR,OAAO,EAGR,QAASC,KACR,OAAO,EAGR,QAASC,KACR,IACC,MAAOvF,IAASwF,cACf,MAAQC,KA8+BX,QAASC,GAAoB1F,GAC5B,GAAI2F,GAAOC,GAAUX,MAAO,KAC3BY,EAAW7F,EAAS8F,wBAErB,IAAKD,EAASE,cACb,KAAQJ,EAAKnF,QACZqF,EAASE,cACRJ,EAAKpB,MAIR,OAAOsB,GAyCR,QAASG,GAAQC,EAASC,GACzB,GAAIC,GAAOhF,EACVC,EAAI,EACJgF,QAAeH,GAAQI,uBAAyBC,GAAeL,EAAQI,qBAAsBH,GAAO,WAC5FD,GAAQM,mBAAqBD,GAAeL,EAAQM,iBAAkBL,GAAO,KACpFjD,MAEF,KAAMmD,EACL,IAAMA,KAAYD,EAAQF,EAAQO,YAAcP,EAA8B,OAApB9E,EAAOgF,EAAM/E,IAAaA,KAC7E8E,GAAOxF,GAAO+F,SAAUtF,EAAM+E,GACnCE,EAAMM,KAAMvF,GAEZT,GAAOiG,MAAOP,EAAOJ,EAAQ7E,EAAM+E,GAKtC,OAAejD,UAARiD,GAAqBA,GAAOxF,GAAO+F,SAAUR,EAASC,GAC5DxF,GAAOiG,OAASV,GAAWG,GAC3BA,EAIF,QAASQ,GAAmBzF,GACtB0F,GAAetF,KAAMJ,EAAKV,QAC9BU,EAAK2F,eAAiB3F,EAAK4F,SAM7B,QAASC,GAAoB7F,EAAM8F,GAClC,MAAOvG,IAAO+F,SAAUtF,EAAM,UAC7BT,GAAO+F,SAA+B,KAArBQ,EAAQrG,SAAkBqG,EAAUA,EAAQC,WAAY,MAEzE/F,EAAKkF,qBAAqB,SAAS,IAClClF,EAAKgG,YAAahG,EAAKiG,cAAcrB,cAAc,UACpD5E,EAIF,QAASkG,GAAelG,GAEvB,MADAA,GAAKV,MAA6C,OAArCC,GAAO4G,KAAKC,KAAMpG,EAAM,SAAqB,IAAMA,EAAKV,KAC9DU,EAER,QAASqG,GAAerG,GACvB,GAAIe,GAAQuF,GAAkBC,KAAMvG,EAAKV,KAMzC,OALKyB,GACJf,EAAKV,KAAOyB,EAAM,GAElBf,EAAKwG,gBAAgB,QAEfxG,EAIR,QAASyG,GAAezB,EAAO0B,GAG9B,IAFA,GAAI1G,GACHC,EAAI,EACwB,OAApBD,EAAOgF,EAAM/E,IAAaA,IAClCV,GAAOoH,MAAO3G,EAAM,cAAe0G,GAAenH,GAAOoH,MAAOD,EAAYzG,GAAI,eAIlF,QAAS2G,GAAgBC,EAAKC,GAE7B,GAAuB,IAAlBA,EAAKrH,UAAmBF,GAAOwH,QAASF,GAA7C,CAIA,GAAIvH,GAAMW,EAAG+G,EACZC,EAAU1H,GAAOoH,MAAOE,GACxBK,EAAU3H,GAAOoH,MAAOG,EAAMG,GAC9BE,EAASF,EAAQE,MAElB,IAAKA,EAAS,OACND,GAAQE,OACfF,EAAQC,SAER,KAAM7H,IAAQ6H,GACb,IAAMlH,EAAI,EAAG+G,EAAIG,EAAQ7H,GAAOD,OAAY2H,EAAJ/G,EAAOA,IAC9CV,GAAOiC,MAAM6F,IAAKP,EAAMxH,EAAM6H,EAAQ7H,GAAQW,IAM5CiH,EAAQrF,OACZqF,EAAQrF,KAAOtC,GAAOiE,UAAY0D,EAAQrF,QAI5C,QAASyF,GAAoBT,EAAKC,GACjC,GAAIxB,GAAUhD,EAAGT,CAGjB,IAAuB,IAAlBiF,EAAKrH,SAAV,CAOA,GAHA6F,EAAWwB,EAAKxB,SAASpD,eAGnB8B,GAAQuD,cAAgBT,EAAMvH,GAAOwD,SAAY,CACtDlB,EAAOtC,GAAOoH,MAAOG,EAErB,KAAMxE,IAAKT,GAAKsF,OACf5H,GAAOiI,YAAaV,EAAMxE,EAAGT,EAAKuF,OAInCN,GAAKN,gBAAiBjH,GAAOwD,SAIZ,WAAbuC,GAAyBwB,EAAKW,OAASZ,EAAIY,MAC/CvB,EAAeY,GAAOW,KAAOZ,EAAIY,KACjCpB,EAAeS,IAIS,WAAbxB,GACNwB,EAAKY,aACTZ,EAAKa,UAAYd,EAAIc,WAOjB3D,GAAQ4D,YAAgBf,EAAIgB,YAActI,GAAOuI,KAAKhB,EAAKe,aAC/Df,EAAKe,UAAYhB,EAAIgB,YAGE,UAAbvC,GAAwBI,GAAetF,KAAMyG,EAAIvH,OAK5DwH,EAAKnB,eAAiBmB,EAAKlB,QAAUiB,EAAIjB,QAIpCkB,EAAKiB,QAAUlB,EAAIkB,QACvBjB,EAAKiB,MAAQlB,EAAIkB,QAKM,WAAbzC,EACXwB,EAAKkB,gBAAkBlB,EAAKmB,SAAWpB,EAAImB,iBAInB,UAAb1C,GAAqC,aAAbA,KACnCwB,EAAKoB,aAAerB,EAAIqB,eAghB1B,QAASC,GAAepG,EAAMqG,GAC7B,GAAIC,GACHrI,EAAOT,GAAQ6I,EAAIxD,cAAe7C,IAASuG,SAAUF,EAAIG,MAGzDC,EAAUxJ,EAAOyJ,0BAA6BJ,EAAQrJ,EAAOyJ,wBAAyBzI,EAAM,KAI3FqI,EAAMG,QAAUjJ,GAAOmJ,IAAK1I,EAAM,GAAK,UAMzC,OAFAA,GAAKmB,SAEEqH,EAOR,QAASG,GAAgBrD,GACxB,GAAI8C,GAAMvJ,GACT2J,EAAUI,GAAatD,EA0BxB,OAxBMkD,KACLA,EAAUL,EAAe7C,EAAU8C,GAGlB,SAAZI,GAAuBA,IAG3BK,IAAUA,IAAUtJ,GAAQ,mDAAoD+I,SAAUF,EAAIU,iBAG9FV,GAAQS,GAAQ,GAAIE,eAAiBF,GAAQ,GAAIG,iBAAkBnK,SAGnEuJ,EAAIa,QACJb,EAAIc,QAEJV,EAAUL,EAAe7C,EAAU8C,GACnCS,GAAO1H,UAIRyH,GAAatD,GAAakD,GAGpBA,EAoKR,QAASW,GAAcC,EAAaC,GAEnC,OACCC,IAAK,WACJ,GAAIC,GAAYH,GAEhB,IAAkB,MAAbG,EAML,MAAKA,cAIGtK,MAAKqK,KAMLrK,KAAKqK,IAAMD,GAAQG,MAAOvK,KAAMwK,aA8L3C,QAASC,GAAgBrB,EAAOtG,GAG/B,GAAKA,IAAQsG,GACZ,MAAOtG,EAQR,KAJA,GAAI4H,GAAU5H,EAAK6H,OAAO,GAAGC,cAAgB9H,EAAK+H,MAAM,GACvDC,EAAWhI,EACX9B,EAAI+J,GAAY3K,OAETY,KAEP,GADA8B,EAAOiI,GAAa/J,GAAM0J,EACrB5H,IAAQsG,GACZ,MAAOtG,EAIT,OAAOgI,GAGR,QAASE,GAAUtK,EAAUuK,GAM5B,IALA,GAAI1B,GAASxI,EAAMmK,EAClBC,KACAC,EAAQ,EACRhL,EAASM,EAASN,OAEHA,EAARgL,EAAgBA,IACvBrK,EAAOL,EAAU0K,GACXrK,EAAKqI,QAIX+B,EAAQC,GAAU9K,GAAOoH,MAAO3G,EAAM,cACtCwI,EAAUxI,EAAKqI,MAAMG,QAChB0B,GAGEE,EAAQC,IAAuB,SAAZ7B,IACxBxI,EAAKqI,MAAMG,QAAU,IAMM,KAAvBxI,EAAKqI,MAAMG,SAAkB8B,GAAUtK,KAC3CoK,EAAQC,GAAU9K,GAAOoH,MAAO3G,EAAM,aAAc2I,EAAe3I,EAAKsF,cAGzE6E,EAASG,GAAUtK,IAEdwI,GAAuB,SAAZA,IAAuB2B,IACtC5K,GAAOoH,MAAO3G,EAAM,aAAcmK,EAAS3B,EAAUjJ,GAAOmJ,IAAK1I,EAAM,aAO1E,KAAMqK,EAAQ,EAAWhL,EAARgL,EAAgBA,IAChCrK,EAAOL,EAAU0K,GACXrK,EAAKqI,QAGL6B,GAA+B,SAAvBlK,EAAKqI,MAAMG,SAA6C,KAAvBxI,EAAKqI,MAAMG,UACzDxI,EAAKqI,MAAMG,QAAU0B,EAAOE,EAAQC,IAAW,GAAK,QAItD,OAAO1K,GAGR,QAAS4K,GAAmBvK,EAAM+H,EAAOyC,GACxC,GAAIC,GAAUC,GAAUnE,KAAMwB,EAC9B,OAAO0C,GAENE,KAAKC,IAAK,EAAGH,EAAS,IAAQD,GAAY,KAAUC,EAAS,IAAO,MACpE1C,EAGF,QAAS8C,GAAsB7K,EAAM+B,EAAM+I,EAAOC,EAAaC,GAS9D,IARA,GAAI/K,GAAI6K,KAAYC,EAAc,SAAW,WAE5C,EAES,UAAThJ,EAAmB,EAAI,EAEvBkJ,EAAM,EAEK,EAAJhL,EAAOA,GAAK,EAEJ,WAAV6K,IACJG,GAAO1L,GAAOmJ,IAAK1I,EAAM8K,EAAQI,GAAWjL,IAAK,EAAM+K,IAGnDD,GAEW,YAAVD,IACJG,GAAO1L,GAAOmJ,IAAK1I,EAAM,UAAYkL,GAAWjL,IAAK,EAAM+K,IAI7C,WAAVF,IACJG,GAAO1L,GAAOmJ,IAAK1I,EAAM,SAAWkL,GAAWjL,GAAM,SAAS,EAAM+K,MAIrEC,GAAO1L,GAAOmJ,IAAK1I,EAAM,UAAYkL,GAAWjL,IAAK,EAAM+K,GAG5C,YAAVF,IACJG,GAAO1L,GAAOmJ,IAAK1I,EAAM,SAAWkL,GAAWjL,GAAM,SAAS,EAAM+K,IAKvE,OAAOC,GAGR,QAASE,GAAkBnL,EAAM+B,EAAM+I,GAGtC,GAAIM,IAAmB,EACtBH,EAAe,UAATlJ,EAAmB/B,EAAKqL,YAAcrL,EAAKsL,aACjDN,EAASO,GAAWvL,GACpB+K,EAAc/G,GAAQwH,WAAgE,eAAnDjM,GAAOmJ,IAAK1I,EAAM,aAAa,EAAOgL,EAK1E,IAAY,GAAPC,GAAmB,MAAPA,EAAc,CAQ9B,GANAA,EAAMQ,GAAQzL,EAAM+B,EAAMiJ,IACf,EAANC,GAAkB,MAAPA,KACfA,EAAMjL,EAAKqI,MAAOtG,IAId2J,GAAUtL,KAAK6K,GACnB,MAAOA,EAKRG,GAAmBL,IAAiB/G,GAAQ2H,qBAAuBV,IAAQjL,EAAKqI,MAAOtG,IAGvFkJ,EAAMW,WAAYX,IAAS,EAI5B,MAASA,GACRJ,EACC7K,EACA+B,EACA+I,IAAWC,EAAc,SAAW,WACpCK,EACAJ,GAEE,KA2SL,QAASa,GAAO7L,EAAMW,EAASmL,EAAMC,EAAKC,GACzC,MAAO,IAAIH,GAAMI,UAAUC,KAAMlM,EAAMW,EAASmL,EAAMC,EAAKC,GAwK5D,QAASG,KAIR,MAHAC,YAAW,WACVC,GAAQvK,SAEAuK,GAAQ9M,GAAO+M,MAIzB,QAASC,GAAOjN,EAAMkN,GACrB,GAAIC,GACHC,GAAUC,OAAQrN,GAClBW,EAAI,CAKL,KADAuM,EAAeA,EAAe,EAAI,EACtB,EAAJvM,EAAQA,GAAK,EAAIuM,EACxBC,EAAQvB,GAAWjL,GACnByM,EAAO,SAAWD,GAAUC,EAAO,UAAYD,GAAUnN,CAO1D,OAJKkN,KACJE,EAAME,QAAUF,EAAMG,MAAQvN,GAGxBoN,EAGR,QAASI,GAAa/E,EAAO+D,EAAMiB,GAKlC,IAJA,GAAIC,GACHC,GAAeC,GAAUpB,QAAelI,OAAQsJ,GAAU,MAC1D7C,EAAQ,EACRhL,EAAS4N,EAAW5N,OACLA,EAARgL,EAAgBA,IACvB,GAAM2C,EAAQC,EAAY5C,GAAQnK,KAAM6M,EAAWjB,EAAM/D,GAGxD,MAAOiF,GAKV,QAASG,GAAkBnN,EAAMoN,EAAOC,GAEvC,GAAIvB,GAAM/D,EAAOuF,EAAQN,EAAOO,EAAOC,EAAShF,EAASiF,EACxDC,EAAOzO,KACP0O,KACAtF,EAAQrI,EAAKqI,MACb8B,EAASnK,EAAKP,UAAY6K,GAAUtK,GACpC4N,EAAWrO,GAAOoH,MAAO3G,EAAM,SAG1BqN,GAAKQ,QACVN,EAAQhO,GAAOuO,YAAa9N,EAAM,MACX,MAAlBuN,EAAMQ,WACVR,EAAMQ,SAAW,EACjBP,EAAUD,EAAMS,MAAMC,KACtBV,EAAMS,MAAMC,KAAO,WACZV,EAAMQ,UACXP,MAIHD,EAAMQ,WAENL,EAAKQ,OAAO,WAGXR,EAAKQ,OAAO,WACXX,EAAMQ,WACAxO,GAAOsO,MAAO7N,EAAM,MAAOX,QAChCkO,EAAMS,MAAMC,YAOO,IAAlBjO,EAAKP,WAAoB,UAAY2N,IAAS,SAAWA,MAK7DC,EAAKc,UAAa9F,EAAM8F,SAAU9F,EAAM+F,UAAW/F,EAAMgG,WAIzD7F,EAAUjJ,GAAOmJ,IAAK1I,EAAM,WAG5ByN,EAA2B,SAAZjF,EACdjJ,GAAOoH,MAAO3G,EAAM,eAAkB2I,EAAgB3I,EAAKsF,UAAakD,EAEnD,WAAjBiF,GAA6D,SAAhClO,GAAOmJ,IAAK1I,EAAM,WAI7CgE,GAAQsK,wBAA8D,WAApC3F,EAAgB3I,EAAKsF,UAG5D+C,EAAMkG,KAAO,EAFblG,EAAMG,QAAU,iBAOd6E,EAAKc,WACT9F,EAAM8F,SAAW,SACXnK,GAAQwK,oBACbd,EAAKQ,OAAO,WACX7F,EAAM8F,SAAWd,EAAKc,SAAU,GAChC9F,EAAM+F,UAAYf,EAAKc,SAAU,GACjC9F,EAAMgG,UAAYhB,EAAKc,SAAU,KAMpC,KAAMrC,IAAQsB,GAEb,GADArF,EAAQqF,EAAOtB,GACV2C,GAASlI,KAAMwB,GAAU,CAG7B,SAFOqF,GAAOtB,GACdwB,EAASA,GAAoB,WAAVvF,EACdA,KAAYoC,EAAS,OAAS,QAAW,CAG7C,GAAe,SAAVpC,IAAoB6F,GAAiC9L,SAArB8L,EAAU9B,GAG9C,QAFA3B,IAAS,EAKXwD,EAAM7B,GAAS8B,GAAYA,EAAU9B,IAAUvM,GAAO8I,MAAOrI,EAAM8L,OAInEtD,GAAU1G,MAIZ,IAAMvC,GAAOiD,cAAemL,GAwCqD,YAAxD,SAAZnF,EAAqBG,EAAgB3I,EAAKsF,UAAakD,KACnEH,EAAMG,QAAUA,OAzCoB,CAC/BoF,EACC,UAAYA,KAChBzD,EAASyD,EAASzD,QAGnByD,EAAWrO,GAAOoH,MAAO3G,EAAM,aAI3BsN,IACJM,EAASzD,QAAUA,GAEfA,EACJ5K,GAAQS,GAAOkK,OAEfwD,EAAKgB,KAAK,WACTnP,GAAQS,GAAO2O,SAGjBjB,EAAKgB,KAAK,WACT,GAAI5C,EACJvM,IAAOqP,YAAa5O,EAAM,SAC1B,KAAM8L,IAAQ6B,GACbpO,GAAO8I,MAAOrI,EAAM8L,EAAM6B,EAAM7B,KAGlC,KAAMA,IAAQ6B,GACbX,EAAQF,EAAa3C,EAASyD,EAAU9B,GAAS,EAAGA,EAAM4B,GAElD5B,IAAQ8B,KACfA,EAAU9B,GAASkB,EAAM6B,MACpB1E,IACJ6C,EAAMjB,IAAMiB,EAAM6B,MAClB7B,EAAM6B,MAAiB,UAAT/C,GAA6B,WAATA,EAAoB,EAAI,KAW/D,QAASgD,GAAY1B,EAAO2B,GAC3B,GAAI1E,GAAOtI,EAAMiK,EAAQjE,EAAOwF,CAGhC,KAAMlD,IAAS+C,GAed,GAdArL,EAAOxC,GAAOkE,UAAW4G,GACzB2B,EAAS+C,EAAehN,GACxBgG,EAAQqF,EAAO/C,GACV9K,GAAOoE,QAASoE,KACpBiE,EAASjE,EAAO,GAChBA,EAAQqF,EAAO/C,GAAUtC,EAAO,IAG5BsC,IAAUtI,IACdqL,EAAOrL,GAASgG,QACTqF,GAAO/C,IAGfkD,EAAQhO,GAAOyP,SAAUjN,GACpBwL,GAAS,UAAYA,GAAQ,CACjCxF,EAAQwF,EAAM0B,OAAQlH,SACfqF,GAAOrL,EAId,KAAMsI,IAAStC,GACNsC,IAAS+C,KAChBA,EAAO/C,GAAUtC,EAAOsC,GACxB0E,EAAe1E,GAAU2B,OAI3B+C,GAAehN,GAASiK,EAK3B,QAASkD,GAAWlP,EAAMmP,EAAYxO,GACrC,GAAIyO,GACHC,EACAhF,EAAQ,EACRhL,EAASiQ,GAAoBjQ,OAC7BkQ,EAAWhQ,GAAOiQ,WAAWtB,OAAQ,iBAE7BuB,GAAKzP,OAEbyP,EAAO,WACN,GAAKJ,EACJ,OAAO,CAUR,KARA,GAAIK,GAAcrD,IAASF,IAC1BwD,EAAYhF,KAAKC,IAAK,EAAGmC,EAAU6C,UAAY7C,EAAU8C,SAAWH,GAEpEI,EAAOH,EAAY5C,EAAU8C,UAAY,EACzCE,EAAU,EAAID,EACdzF,EAAQ,EACRhL,EAAS0N,EAAUiD,OAAO3Q,OAEXA,EAARgL,EAAiBA,IACxB0C,EAAUiD,OAAQ3F,GAAQ4F,IAAKF,EAKhC,OAFAR,GAASW,WAAYlQ,GAAQ+M,EAAWgD,EAASJ,IAElC,EAAVI,GAAe1Q,EACZsQ,GAEPJ,EAASY,YAAanQ,GAAQ+M,KACvB,IAGTA,EAAYwC,EAASa,SACpBpQ,KAAMA,EACNoN,MAAO7N,GAAOiE,UAAY2L,GAC1B9B,KAAM9N,GAAOiE,QAAQ,GAAQuL,kBAAqBpO,GAClD0P,mBAAoBlB,EACpBmB,gBAAiB3P,EACjBiP,UAAWvD,IAASF,IACpB0D,SAAUlP,EAAQkP,SAClBG,UACAlD,YAAa,SAAUhB,EAAMC,GAC5B,GAAIiB,GAAQzN,GAAOsM,MAAO7L,EAAM+M,EAAUM,KAAMvB,EAAMC,EACpDgB,EAAUM,KAAK0B,cAAejD,IAAUiB,EAAUM,KAAKrB,OAEzD,OADAe,GAAUiD,OAAOzK,KAAMyH,GAChBA,GAERuD,KAAM,SAAUC,GACf,GAAInG,GAAQ,EAGXhL,EAASmR,EAAUzD,EAAUiD,OAAO3Q,OAAS,CAC9C,IAAKgQ,EACJ,MAAOpQ,KAGR,KADAoQ,GAAU,EACMhQ,EAARgL,EAAiBA,IACxB0C,EAAUiD,OAAQ3F,GAAQ4F,IAAK,EAUhC,OALKO,GACJjB,EAASY,YAAanQ,GAAQ+M,EAAWyD,IAEzCjB,EAASkB,WAAYzQ,GAAQ+M,EAAWyD,IAElCvR,QAGTmO,EAAQL,EAAUK,KAInB,KAFA0B,EAAY1B,EAAOL,EAAUM,KAAK0B,eAElB1P,EAARgL,EAAiBA,IAExB,GADA+E,EAASE,GAAqBjF,GAAQnK,KAAM6M,EAAW/M,EAAMoN,EAAOL,EAAUM,MAE7E,MAAO+B,EAmBT,OAfA7P,IAAOsE,IAAKuJ,EAAON,EAAaC,GAE3BxN,GAAOO,WAAYiN,EAAUM,KAAKwB,QACtC9B,EAAUM,KAAKwB,MAAM3O,KAAMF,EAAM+M,GAGlCxN,GAAOmR,GAAGC,MACTpR,GAAOiE,OAAQiM,GACdzP,KAAMA,EACN0N,KAAMX,EACNc,MAAOd,EAAUM,KAAKQ,SAKjBd,EAAU6D,SAAU7D,EAAUM,KAAKuD,UACxClC,KAAM3B,EAAUM,KAAKqB,KAAM3B,EAAUM,KAAKwD,UAC1CC,KAAM/D,EAAUM,KAAKyD,MACrB5C,OAAQnB,EAAUM,KAAKa,QA6rC1B,QAAS6C,GAA6BC,GAGrC,MAAO,UAAUC,EAAoBC,GAED,gBAAvBD,KACXC,EAAOD,EACPA,EAAqB,IAGtB,IAAIE,GACHlR,EAAI,EACJmR,EAAYH,EAAmB/O,cAAcnB,MAAOC,OAErD,IAAKzB,GAAOO,WAAYoR,GAEvB,KAASC,EAAWC,EAAUnR,MAEC,MAAzBkR,EAASvH,OAAQ,IACrBuH,EAAWA,EAASrH,MAAO,IAAO,KACjCkH,EAAWG,GAAaH,EAAWG,QAAkBE,QAASH,KAI9DF,EAAWG,GAAaH,EAAWG,QAAkB5L,KAAM2L,IAQjE,QAASI,GAA+BN,EAAWrQ,EAAS2P,EAAiBiB,GAK5E,QAASC,GAASL,GACjB,GAAIlJ,EAYJ,OAXAwJ,GAAWN,IAAa,EACxB5R,GAAOuB,KAAMkQ,EAAWG,OAAkB,SAAUlQ,EAAGyQ,GACtD,GAAIC,GAAsBD,EAAoB/Q,EAAS2P,EAAiBiB,EACxE,OAAoC,gBAAxBI,IAAqCC,GAAqBH,EAAWE,GAIrEC,IACD3J,EAAW0J,GADf,QAHNhR,EAAQyQ,UAAUC,QAASM,GAC3BH,EAASG,IACF,KAKF1J,EAhBR,GAAIwJ,MACHG,EAAqBZ,IAAca,EAkBpC,OAAOL,GAAS7Q,EAAQyQ,UAAW,MAAUK,EAAW,MAASD,EAAS,KAM3E,QAASM,GAAYC,EAAQlL,GAC5B,GAAImL,GAAMpQ,EACTqQ,EAAc1S,GAAO2S,aAAaD,eAEnC,KAAMrQ,IAAOiF,GACQ/E,SAAf+E,EAAKjF,MACPqQ,EAAarQ,GAAQmQ,EAAWC,IAASA,OAAgBpQ,GAAQiF,EAAKjF,GAO1E,OAJKoQ,IACJzS,GAAOiE,QAAQ,EAAMuO,EAAQC,GAGvBD,EAOR,QAASI,GAAqBC,EAAGb,EAAOc,GAMvC,IALA,GAAIC,GAAeC,EAAIC,EAAelT,EACrCmT,EAAWL,EAAEK,SACbrB,EAAYgB,EAAEhB,UAGY,MAAnBA,EAAW,IAClBA,EAAUsB,QACE5Q,SAAPyQ,IACJA,EAAKH,EAAEO,UAAYpB,EAAMqB,kBAAkB,gBAK7C,IAAKL,EACJ,IAAMjT,IAAQmT,GACb,GAAKA,EAAUnT,IAAUmT,EAAUnT,GAAOc,KAAMmS,GAAO,CACtDnB,EAAUC,QAAS/R,EACnB,OAMH,GAAK8R,EAAW,IAAOiB,GACtBG,EAAgBpB,EAAW,OACrB,CAEN,IAAM9R,IAAQ+S,GAAY,CACzB,IAAMjB,EAAW,IAAOgB,EAAES,WAAYvT,EAAO,IAAM8R,EAAU,IAAO,CACnEoB,EAAgBlT,CAChB,OAEKgT,IACLA,EAAgBhT,GAIlBkT,EAAgBA,GAAiBF,EAMlC,MAAKE,IACCA,IAAkBpB,EAAW,IACjCA,EAAUC,QAASmB,GAEbH,EAAWG,IAJnB,OAWD,QAASM,GAAaV,EAAGW,EAAUxB,EAAOyB,GACzC,GAAIC,GAAOC,EAASC,EAAMC,EAAKC,EAC9BR,KAEAzB,EAAYgB,EAAEhB,UAAUtH,OAGzB,IAAKsH,EAAW,GACf,IAAM+B,IAAQf,GAAES,WACfA,EAAYM,EAAKjR,eAAkBkQ,EAAES,WAAYM,EAOnD,KAHAD,EAAU9B,EAAUsB,QAGZQ,GAcP,GAZKd,EAAEkB,eAAgBJ,KACtB3B,EAAOa,EAAEkB,eAAgBJ,IAAcH,IAIlCM,GAAQL,GAAaZ,EAAEmB,aAC5BR,EAAWX,EAAEmB,WAAYR,EAAUX,EAAEjB,WAGtCkC,EAAOH,EACPA,EAAU9B,EAAUsB,QAKnB,GAAiB,MAAZQ,EAEJA,EAAUG,MAGJ,IAAc,MAATA,GAAgBA,IAASH,EAAU,CAM9C,GAHAC,EAAON,EAAYQ,EAAO,IAAMH,IAAaL,EAAY,KAAOK,IAG1DC,EACL,IAAMF,IAASJ,GAId,GADAO,EAAMH,EAAMnP,MAAO,KACdsP,EAAK,KAAQF,IAGjBC,EAAON,EAAYQ,EAAO,IAAMD,EAAK,KACpCP,EAAY,KAAOO,EAAK,KACb,CAEND,KAAS,EACbA,EAAON,EAAYI,GAGRJ,EAAYI,MAAY,IACnCC,EAAUE,EAAK,GACfhC,EAAUC,QAAS+B,EAAK,IAEzB,OAOJ,GAAKD,KAAS,EAGb,GAAKA,GAAQf,EAAG,UACfW,EAAWI,EAAMJ,OAEjB,KACCA,EAAWI,EAAMJ,GAChB,MAAQzQ,GACT,OAASkR,MAAO,cAAeC,MAAON,EAAO7Q,EAAI,sBAAwB+Q,EAAO,OAASH,IAQ/F,OAASM,MAAO,UAAW3R,KAAMkR,GA+mBlC,QAASW,GAAaC,EAAQvU,EAAKwU,EAAavM,GAC/C,GAAItF,EAEJ,IAAKxC,GAAOoE,QAASvE,GAEpBG,GAAOuB,KAAM1B,EAAK,SAAUa,EAAG4T,GACzBD,GAAeE,GAAS1T,KAAMuT,GAElCtM,EAAKsM,EAAQE,GAIbH,EAAaC,EAAS,KAAqB,gBAANE,GAAiB5T,EAAI,IAAO,IAAK4T,EAAGD,EAAavM,SAIlF,IAAMuM,GAAsC,WAAvBrU,GAAOD,KAAMF,GAQxCiI,EAAKsM,EAAQvU,OANb,KAAM2C,IAAQ3C,GACbsU,EAAaC,EAAS,IAAM5R,EAAO,IAAK3C,EAAK2C,GAAQ6R,EAAavM,GA6PrE,QAAS0M,KACR,IACC,MAAO,IAAI/U,GAAOgV,eACjB,MAAO1R,KAGV,QAAS2R,KACR,IACC,MAAO,IAAIjV,GAAOkV,cAAe,qBAChC,MAAO5R,KAoSV,QAAS6R,GAAWnU,GACnB,MAAOT,IAAOC,SAAUQ,GACvBA,EACkB,IAAlBA,EAAKP,SACJO,EAAKoU,aAAepU,EAAKqU,cACzB,EArvTH,GAAIlR,MAEA2G,EAAQ3G,EAAW2G,MAEnBlG,EAAST,EAAWS,OAEpB2B,EAAOpC,EAAWoC,KAElB+O,EAAUnR,EAAWmR,QAErBC,KAEAC,GAAWD,EAAWC,SAEtBC,GAASF,EAAWG,eAEpB1Q,MAKH2Q,GAAU,SAGVpV,GAAS,SAAUqV,EAAU9P,GAG5B,MAAO,IAAIvF,IAAOsV,GAAG3I,KAAM0I,EAAU9P,IAKtCgQ,GAAQ,qCAGRC,GAAY,QACZC,GAAa,eAGbC,GAAa,SAAUC,EAAKC,GAC3B,MAAOA,GAAOtL,cAGhBtK,IAAOsV,GAAKtV,GAAO0M,WAElBmJ,OAAQT,GAERU,YAAa9V,GAGbqV,SAAU,GAGVvV,OAAQ,EAERiW,QAAS,WACR,MAAOxL,GAAM5J,KAAMjB,OAKpBqK,IAAK,SAAUiM,GACd,MAAc,OAAPA,EAGE,EAANA,EAAUtW,KAAMsW,EAAMtW,KAAKI,QAAWJ,KAAMsW,GAG9CzL,EAAM5J,KAAMjB,OAKduW,UAAW,SAAUxQ,GAGpB,GAAIpC,GAAMrD,GAAOiG,MAAOvG,KAAKoW,cAAerQ,EAO5C,OAJApC,GAAI6S,WAAaxW,KACjB2D,EAAIkC,QAAU7F,KAAK6F,QAGZlC,GAMR9B,KAAM,SAAU4U,EAAUC,GACzB,MAAOpW,IAAOuB,KAAM7B,KAAMyW,EAAUC,IAGrC9R,IAAK,SAAU6R,GACd,MAAOzW,MAAKuW,UAAWjW,GAAOsE,IAAI5E,KAAM,SAAUe,EAAMC,GACvD,MAAOyV,GAASxV,KAAMF,EAAMC,EAAGD,OAIjC8J,MAAO,WACN,MAAO7K,MAAKuW,UAAW1L,EAAMN,MAAOvK,KAAMwK,aAG3CmM,MAAO,WACN,MAAO3W,MAAK4W,GAAI,IAGjBC,KAAM,WACL,MAAO7W,MAAK4W,GAAI,KAGjBA,GAAI,SAAU5V,GACb,GAAI8V,GAAM9W,KAAKI,OACd2W,GAAK/V,GAAU,EAAJA,EAAQ8V,EAAM,EAC1B,OAAO9W,MAAKuW,UAAWQ,GAAK,GAASD,EAAJC,GAAY/W,KAAK+W,SAGnDjK,IAAK,WACJ,MAAO9M,MAAKwW,YAAcxW,KAAKoW,YAAY,OAK5C9P,KAAMA,EACN0Q,KAAM9S,EAAW8S,KACjBC,OAAQ/S,EAAW+S,QAGpB3W,GAAOiE,OAASjE,GAAOsV,GAAGrR,OAAS,WAClC,GAAIqD,GAAKsP,EAAaC,EAAMrU,EAAMpB,EAAS0V,EAC1CtE,EAAStI,UAAU,OACnBxJ,EAAI,EACJZ,EAASoK,UAAUpK,OACnB2S,GAAO,CAsBR,KAnBuB,iBAAXD,KACXC,EAAOD,EAGPA,EAAStI,UAAWxJ,OACpBA,KAIsB,gBAAX8R,IAAwBxS,GAAOO,WAAWiS,KACrDA,MAII9R,IAAMZ,IACV0S,EAAS9S,KACTgB,KAGWZ,EAAJY,EAAYA,IAEnB,GAAmC,OAA7BU,EAAU8I,UAAWxJ,IAE1B,IAAM8B,IAAQpB,GACbkG,EAAMkL,EAAQhQ,GACdqU,EAAOzV,EAASoB,GAGXgQ,IAAWqE,IAKXpE,GAAQoE,IAAU7W,GAAO+W,cAAcF,KAAUD,EAAc5W,GAAOoE,QAAQyS,MAC7ED,GACJA,GAAc,EACdE,EAAQxP,GAAOtH,GAAOoE,QAAQkD,GAAOA,MAGrCwP,EAAQxP,GAAOtH,GAAO+W,cAAczP,GAAOA,KAI5CkL,EAAQhQ,GAASxC,GAAOiE,OAAQwO,EAAMqE,EAAOD,IAGzBtU,SAATsU,IACXrE,EAAQhQ,GAASqU,GAOrB,OAAOrE,IAGRxS,GAAOiE,QAENT,QAAS,UAAa4R,GAAUhK,KAAK4L,UAAWvU,QAAS,MAAO,IAGhEwU,SAAS,EAET/C,MAAO,SAAUgD,GAChB,KAAM,IAAI1X,OAAO0X,IAGlBlT,KAAM,aAKNzD,WAAY,SAAUV,GACrB,MAA4B,aAArBG,GAAOD,KAAKF,IAGpBuE,QAAS+S,MAAM/S,SAAW,SAAUvE,GACnC,MAA4B,UAArBG,GAAOD,KAAKF,IAGpBI,SAAU,SAAUJ,GAEnB,MAAc,OAAPA,GAAeA,GAAOA,EAAIJ,QAGlC2X,UAAW,SAAUvX,GAIpB,OAAQG,GAAOoE,QAASvE,IAASA,EAAMwM,WAAYxM,IAAS,GAG7DoD,cAAe,SAAUpD,GACxB,GAAI2C,EACJ,KAAMA,IAAQ3C,GACb,OAAO,CAER,QAAO,GAGRkX,cAAe,SAAUlX,GACxB,GAAIwC,EAKJ,KAAMxC,GAA4B,WAArBG,GAAOD,KAAKF,IAAqBA,EAAIK,UAAYF,GAAOC,SAAUJ,GAC9E,OAAO,CAGR,KAEC,GAAKA,EAAIiW,cACPZ,GAAOvU,KAAKd,EAAK,iBACjBqV,GAAOvU,KAAKd,EAAIiW,YAAYpJ,UAAW,iBACxC,OAAO,EAEP,MAAQ3J,GAET,OAAO,EAKR,GAAK0B,GAAQ4S,QACZ,IAAMhV,IAAOxC,GACZ,MAAOqV,IAAOvU,KAAMd,EAAKwC,EAM3B,KAAMA,IAAOxC,IAEb,MAAe0C,UAARF,GAAqB6S,GAAOvU,KAAMd,EAAKwC,IAG/CtC,KAAM,SAAUF,GACf,MAAY,OAAPA,EACGA,EAAM,GAEQ,gBAARA,IAAmC,kBAARA,GACxCmV,EAAYC,GAAStU,KAAKd,KAAU,eAC7BA,IAMTyX,WAAY,SAAUhV,GAChBA,GAAQtC,GAAOuI,KAAMjG,KAIvB7C,EAAO8X,YAAc,SAAUjV,GAChC7C,EAAe,KAAEkB,KAAMlB,EAAQ6C,KAC3BA,IAMP4B,UAAW,SAAUsT,GACpB,MAAOA,GAAO/U,QAAS+S,GAAW,OAAQ/S,QAASgT,GAAYC,KAGhE3P,SAAU,SAAUtF,EAAM+B,GACzB,MAAO/B,GAAKsF,UAAYtF,EAAKsF,SAASpD,gBAAkBH,EAAKG,eAI9DpB,KAAM,SAAU1B,EAAKsW,EAAUC,GAC9B,GAAI5N,GACH9H,EAAI,EACJZ,EAASD,EAAIC,OACbsE,EAAUxE,EAAaC,EAExB,IAAKuW,GACJ,GAAKhS,EACJ,KAAYtE,EAAJY,IACP8H,EAAQ2N,EAASlM,MAAOpK,EAAKa,GAAK0V,GAE7B5N,KAAU,GAHI9H,SAQpB,KAAMA,IAAKb,GAGV,GAFA2I,EAAQ2N,EAASlM,MAAOpK,EAAKa,GAAK0V,GAE7B5N,KAAU,EACd,UAOH,IAAKpE,EACJ,KAAYtE,EAAJY,IACP8H,EAAQ2N,EAASxV,KAAMd,EAAKa,GAAKA,EAAGb,EAAKa,IAEpC8H,KAAU,GAHI9H,SAQpB,KAAMA,IAAKb,GAGV,GAFA2I,EAAQ2N,EAASxV,KAAMd,EAAKa,GAAKA,EAAGb,EAAKa,IAEpC8H,KAAU,EACd,KAMJ,OAAO3I,IAIR0I,KAAM,SAAUL,GACf,MAAe,OAARA,EACN,IACEA,EAAO,IAAKzF,QAAS8S,GAAO,KAIhCkC,UAAW,SAAUC,EAAKC,GACzB,GAAItU,GAAMsU,KAaV,OAXY,OAAPD,IACC9X,EAAagY,OAAOF,IACxB1X,GAAOiG,MAAO5C,EACE,gBAARqU,IACLA,GAAQA,GAGX1R,EAAKrF,KAAM0C,EAAKqU,IAIXrU,GAGRtC,QAAS,SAAUN,EAAMiX,EAAKhX,GAC7B,GAAI8V,EAEJ,IAAKkB,EAAM,CACV,GAAK3C,EACJ,MAAOA,GAAQpU,KAAM+W,EAAKjX,EAAMC,EAMjC,KAHA8V,EAAMkB,EAAI5X,OACVY,EAAIA,EAAQ,EAAJA,EAAQ0K,KAAKC,IAAK,EAAGmL,EAAM9V,GAAMA,EAAI,EAEjC8V,EAAJ9V,EAASA,IAEhB,GAAKA,IAAKgX,IAAOA,EAAKhX,KAAQD,EAC7B,MAAOC,GAKV,MAAO,IAGRuF,MAAO,SAAUoQ,EAAOwB,GAKvB,IAJA,GAAIrB,IAAOqB,EAAO/X,OACjB2W,EAAI,EACJ/V,EAAI2V,EAAMvW,OAEC0W,EAAJC,GACPJ,EAAO3V,KAAQmX,EAAQpB,IAKxB,IAAKD,IAAQA,EACZ,KAAsBjU,SAAdsV,EAAOpB,IACdJ,EAAO3V,KAAQmX,EAAQpB,IAMzB,OAFAJ,GAAMvW,OAASY,EAER2V,GAGR7V,KAAM,SAAUiF,EAAO0Q,EAAU2B,GAShC,IARA,GAAIC,GACH7M,KACAxK,EAAI,EACJZ,EAAS2F,EAAM3F,OACfkY,GAAkBF,EAIPhY,EAAJY,EAAYA,IACnBqX,GAAmB5B,EAAU1Q,EAAO/E,GAAKA,GACpCqX,IAAoBC,GACxB9M,EAAQlF,KAAMP,EAAO/E,GAIvB,OAAOwK,IAIR5G,IAAK,SAAUmB,EAAO0Q,EAAU8B,GAC/B,GAAIzP,GACH9H,EAAI,EACJZ,EAAS2F,EAAM3F,OACfsE,EAAUxE,EAAa6F,GACvBpC,IAGD,IAAKe,EACJ,KAAYtE,EAAJY,EAAYA,IACnB8H,EAAQ2N,EAAU1Q,EAAO/E,GAAKA,EAAGuX,GAEnB,MAATzP,GACJnF,EAAI2C,KAAMwC,OAMZ,KAAM9H,IAAK+E,GACV+C,EAAQ2N,EAAU1Q,EAAO/E,GAAKA,EAAGuX,GAEnB,MAATzP,GACJnF,EAAI2C,KAAMwC,EAMb,OAAOnE,GAAO4F,SAAW5G,IAI1BS,KAAM,EAINoU,MAAO,SAAU5C,EAAI/P,GACpB,GAAI6Q,GAAM8B,EAAOrE,CAUjB,OARwB,gBAAZtO,KACXsO,EAAMyB,EAAI/P,GACVA,EAAU+P,EACVA,EAAKzB,GAKA7T,GAAOO,WAAY+U,IAKzBc,EAAO7L,EAAM5J,KAAMuJ,UAAW,GAC9BgO,EAAQ,WACP,MAAO5C,GAAGrL,MAAO1E,GAAW7F,KAAM0W,EAAK/R,OAAQkG,EAAM5J,KAAMuJ,cAI5DgO,EAAMpU,KAAOwR,EAAGxR,KAAOwR,EAAGxR,MAAQ9D,GAAO8D,OAElCoU,GAZC3V,QAeTwK,IAAK,WACJ,OAAQ,GAAMoL,OAKf1T,QAASA,KAIVzE,GAAOuB,KAAK,gEAAgEgD,MAAM,KAAM,SAAS7D,EAAG8B,GACnGwS,EAAY,WAAaxS,EAAO,KAAQA,EAAKG,eAkB9C,IAAIyV;;;;;;;;;;AAWJ,SAAW3Y,GAiLX,QAAS2Y,GAAQ/C,EAAU9P,EAASoS,EAASU,GAC5C,GAAI7W,GAAOf,EAAM6X,EAAGpY,EAEnBQ,EAAG6X,EAAQC,EAAKC,EAAKC,EAAYC,CASlC,KAPOpT,EAAUA,EAAQmB,eAAiBnB,EAAUqT,KAAmBtZ,GACtEuZ,EAAatT,GAGdA,EAAUA,GAAWjG,EACrBqY,EAAUA,OAEJtC,GAAgC,gBAAbA,GACxB,MAAOsC,EAGR,IAAuC,KAAjCzX,EAAWqF,EAAQrF,WAAgC,IAAbA,EAC3C,QAGD,IAAK4Y,IAAmBT,EAAO,CAG9B,GAAM7W,EAAQuX,GAAW/R,KAAMqO,GAE9B,GAAMiD,EAAI9W,EAAM,IACf,GAAkB,IAAbtB,EAAiB,CAIrB,GAHAO,EAAO8E,EAAQyT,eAAgBV,IAG1B7X,IAAQA,EAAK0H,WAQjB,MAAOwP,EALP,IAAKlX,EAAKkD,KAAO2U,EAEhB,MADAX,GAAQ3R,KAAMvF,GACPkX,MAOT,IAAKpS,EAAQmB,gBAAkBjG,EAAO8E,EAAQmB,cAAcsS,eAAgBV,KAC3EW,EAAU1T,EAAS9E,IAAUA,EAAKkD,KAAO2U,EAEzC,MADAX,GAAQ3R,KAAMvF,GACPkX,MAKH,CAAA,GAAKnW,EAAM,GAEjB,MADAwE,GAAKiE,MAAO0N,EAASpS,EAAQI,qBAAsB0P,IAC5CsC,CAGD,KAAMW,EAAI9W,EAAM,KAAOiD,EAAQyU,wBAA0B3T,EAAQ2T,uBAEvE,MADAlT,GAAKiE,MAAO0N,EAASpS,EAAQ2T,uBAAwBZ,IAC9CX,EAKT,GAAKlT,EAAQ0U,OAASC,IAAcA,EAAUvY,KAAMwU,IAAc,CASjE,GARAoD,EAAMD,EAAMhV,EACZkV,EAAanT,EACboT,EAA2B,IAAbzY,GAAkBmV,EAMd,IAAbnV,GAAqD,WAAnCqF,EAAQQ,SAASpD,cAA6B,CAWpE,IAVA4V,EAASc,EAAUhE,IAEbmD,EAAMjT,EAAQ3C,aAAa,OAChC6V,EAAMD,EAAI/V,QAAS6W,GAAS,QAE5B/T,EAAQgU,aAAc,KAAMd,GAE7BA,EAAM,QAAUA,EAAM,MAEtB/X,EAAI6X,EAAOzY,OACHY,KACP6X,EAAO7X,GAAK+X,EAAMe,EAAYjB,EAAO7X,GAEtCgY,GAAae,GAAS5Y,KAAMwU,IAAcqE,EAAanU,EAAQ4C,aAAgB5C,EAC/EoT,EAAcJ,EAAOoB,KAAK,KAG3B,GAAKhB,EACJ,IAIC,MAHA3S,GAAKiE,MAAO0N,EACXe,EAAW7S,iBAAkB8S,IAEvBhB,EACN,MAAMiC,IACN,QACKpB,GACLjT,EAAQ0B,gBAAgB,QAQ7B,MAAO4S,GAAQxE,EAAS5S,QAAS8S,GAAO,MAAQhQ,EAASoS,EAASU,GASnE,QAASyB,KAGR,QAASpW,GAAOrB,EAAKmG,GAMpB,MAJKuR,GAAK/T,KAAM3D,EAAM,KAAQ2X,EAAKC,mBAE3BvW,GAAOqW,EAAK5G,SAEZzP,EAAOrB,EAAM,KAAQmG,EAR9B,GAAIuR,KAUJ,OAAOrW,GAOR,QAASwW,GAAc5E,GAEtB,MADAA,GAAI9R,IAAY,EACT8R,EAOR,QAAS6E,GAAQ7E,GAChB,GAAI8E,GAAM9a,EAAS+F,cAAc,MAEjC,KACC,QAASiQ,EAAI8E,GACZ,MAAOrX,GACR,OAAO,EACN,QAEIqX,EAAIjS,YACRiS,EAAIjS,WAAWkS,YAAaD,GAG7BA,EAAM,MASR,QAASE,GAAWnN,EAAOoN,GAI1B,IAHA,GAAI7C,GAAMvK,EAAM5I,MAAM,KACrB7D,EAAIyM,EAAMrN,OAEHY,KACPsZ,EAAKQ,WAAY9C,EAAIhX,IAAO6Z,EAU9B,QAASE,GAAcC,EAAGC,GACzB,GAAI1Z,GAAM0Z,GAAKD,EACdE,EAAO3Z,GAAsB,IAAfyZ,EAAExa,UAAiC,IAAfya,EAAEza,YAChCya,EAAEE,aAAeC,KACjBJ,EAAEG,aAAeC,EAGtB,IAAKF,EACJ,MAAOA,EAIR,IAAK3Z,EACJ,KAASA,EAAMA,EAAI8Z,aAClB,GAAK9Z,IAAQ0Z,EACZ,MAAO,EAKV,OAAOD,GAAI,EAAI,GAOhB,QAASM,GAAmBjb,GAC3B,MAAO,UAAUU,GAChB,GAAI+B,GAAO/B,EAAKsF,SAASpD,aACzB,OAAgB,UAATH,GAAoB/B,EAAKV,OAASA,GAQ3C,QAASkb,GAAoBlb,GAC5B,MAAO,UAAUU,GAChB,GAAI+B,GAAO/B,EAAKsF,SAASpD,aACzB,QAAiB,UAATH,GAA6B,WAATA,IAAsB/B,EAAKV,OAASA,GAQlE,QAASmb,GAAwB5F,GAChC,MAAO4E,GAAa,SAAUiB,GAE7B,MADAA,IAAYA,EACLjB,EAAa,SAAU7B,EAAMnN,GAMnC,IALA,GAAIuL,GACH2E,EAAe9F,KAAQ+C,EAAKvY,OAAQqb,GACpCza,EAAI0a,EAAatb,OAGVY,KACF2X,EAAO5B,EAAI2E,EAAa1a,MAC5B2X,EAAK5B,KAAOvL,EAAQuL,GAAK4B,EAAK5B,SAYnC,QAASiD,GAAanU,GACrB,MAAOA,UAAkBA,GAAQI,uBAAyBC,GAAgBL,EAo+B3E,QAAS8V,MAuET,QAAS7B,GAAY8B,GAIpB,IAHA,GAAI5a,GAAI,EACP8V,EAAM8E,EAAOxb,OACbuV,EAAW,GACAmB,EAAJ9V,EAASA,IAChB2U,GAAYiG,EAAO5a,GAAG8H,KAEvB,OAAO6M,GAGR,QAASkG,GAAeC,EAASC,EAAYC,GAC5C,GAAIxa,GAAMua,EAAWva,IACpBya,EAAmBD,GAAgB,eAARxa,EAC3B0a,EAAWzM,GAEZ,OAAOsM,GAAWpF,MAEjB,SAAU5V,EAAM8E,EAASsW,GACxB,KAASpb,EAAOA,EAAMS,IACrB,GAAuB,IAAlBT,EAAKP,UAAkByb,EAC3B,MAAOH,GAAS/a,EAAM8E,EAASsW,IAMlC,SAAUpb,EAAM8E,EAASsW,GACxB,GAAIC,GAAUC,EACbC,GAAaC,EAASL,EAGvB,IAAKC,GACJ,KAASpb,EAAOA,EAAMS,IACrB,IAAuB,IAAlBT,EAAKP,UAAkByb,IACtBH,EAAS/a,EAAM8E,EAASsW,GAC5B,OAAO,MAKV,MAASpb,EAAOA,EAAMS,IACrB,GAAuB,IAAlBT,EAAKP,UAAkByb,EAAmB,CAE9C,GADAI,EAAatb,EAAM+C,KAAc/C,EAAM+C,QACjCsY,EAAWC,EAAY7a,KAC5B4a,EAAU,KAAQG,GAAWH,EAAU,KAAQF,EAG/C,MAAQI,GAAU,GAAMF,EAAU,EAMlC,IAHAC,EAAY7a,GAAQ8a,EAGdA,EAAU,GAAMR,EAAS/a,EAAM8E,EAASsW,GAC7C,OAAO,IASf,QAASK,GAAgBC,GACxB,MAAOA,GAASrc,OAAS,EACxB,SAAUW,EAAM8E,EAASsW,GAExB,IADA,GAAInb,GAAIyb,EAASrc,OACTY,KACP,IAAMyb,EAASzb,GAAID,EAAM8E,EAASsW,GACjC,OAAO,CAGT,QAAO,GAERM,EAAS,GAGX,QAASC,GAAkB/G,EAAUgH,EAAU1E,GAG9C,IAFA,GAAIjX,GAAI,EACP8V,EAAM6F,EAASvc,OACJ0W,EAAJ9V,EAASA,IAChB0X,EAAQ/C,EAAUgH,EAAS3b,GAAIiX,EAEhC,OAAOA,GAGR,QAAS2E,GAAUC,EAAWjY,EAAKxD,EAAQyE,EAASsW,GAOnD,IANA,GAAIpb,GACH+b,KACA9b,EAAI,EACJ8V,EAAM+F,EAAUzc,OAChB2c,EAAgB,MAAPnY,EAEEkS,EAAJ9V,EAASA,KACVD,EAAO8b,EAAU7b,OAChBI,GAAUA,EAAQL,EAAM8E,EAASsW,MACtCW,EAAaxW,KAAMvF,GACdgc,GACJnY,EAAI0B,KAAMtF,GAMd,OAAO8b,GAGR,QAASE,GAAYC,EAAWtH,EAAUmG,EAASoB,EAAYC,EAAYC,GAO1E,MANKF,KAAeA,EAAYpZ,KAC/BoZ,EAAaF,EAAYE,IAErBC,IAAeA,EAAYrZ,KAC/BqZ,EAAaH,EAAYG,EAAYC,IAE/B5C,EAAa,SAAU7B,EAAMV,EAASpS,EAASsW,GACrD,GAAItL,GAAM7P,EAAGD,EACZsc,KACAC,KACAC,EAActF,EAAQ7X,OAGtB2F,EAAQ4S,GAAQ+D,EAAkB/G,GAAY,IAAK9P,EAAQrF,UAAaqF,GAAYA,MAGpF2X,GAAYP,IAAetE,GAAShD,EAEnC5P,EADA6W,EAAU7W,EAAOsX,EAAQJ,EAAWpX,EAASsW,GAG9CsB,EAAa3B,EAEZqB,IAAgBxE,EAAOsE,EAAYM,GAAeL,MAMjDjF,EACDuF,CAQF,IALK1B,GACJA,EAAS0B,EAAWC,EAAY5X,EAASsW,GAIrCe,EAMJ,IALArM,EAAO+L,EAAUa,EAAYH,GAC7BJ,EAAYrM,KAAUhL,EAASsW,GAG/Bnb,EAAI6P,EAAKzQ,OACDY,MACDD,EAAO8P,EAAK7P,MACjByc,EAAYH,EAAQtc,MAASwc,EAAWF,EAAQtc,IAAOD,GAK1D,IAAK4X,GACJ,GAAKwE,GAAcF,EAAY,CAC9B,GAAKE,EAAa,CAIjB,IAFAtM,KACA7P,EAAIyc,EAAWrd,OACPY,MACDD,EAAO0c,EAAWzc,KAEvB6P,EAAKvK,KAAOkX,EAAUxc,GAAKD,EAG7Boc,GAAY,KAAOM,KAAkB5M,EAAMsL,GAK5C,IADAnb,EAAIyc,EAAWrd,OACPY,MACDD,EAAO0c,EAAWzc,MACtB6P,EAAOsM,EAAa9H,GAAQpU,KAAM0X,EAAM5X,GAASsc,EAAOrc,IAAM,KAE/D2X,EAAK9H,KAAUoH,EAAQpH,GAAQ9P,SAOlC0c,GAAab,EACZa,IAAexF,EACdwF,EAAWxG,OAAQsG,EAAaE,EAAWrd,QAC3Cqd,GAEGN,EACJA,EAAY,KAAMlF,EAASwF,EAAYtB,GAEvC7V,EAAKiE,MAAO0N,EAASwF,KAMzB,QAASC,GAAmB9B,GAqB3B,IApBA,GAAI+B,GAAc7B,EAAS/E,EAC1BD,EAAM8E,EAAOxb,OACbwd,EAAkBtD,EAAKuD,SAAUjC,EAAO,GAAGvb,MAC3Cyd,EAAmBF,GAAmBtD,EAAKuD,SAAS,KACpD7c,EAAI4c,EAAkB,EAAI,EAG1BG,EAAelC,EAAe,SAAU9a,GACvC,MAAOA,KAAS4c,GACdG,GAAkB,GACrBE,EAAkBnC,EAAe,SAAU9a,GAC1C,MAAOsU,IAAQpU,KAAM0c,EAAc5c,GAAS,IAC1C+c,GAAkB,GACrBrB,GAAa,SAAU1b,EAAM8E,EAASsW,GACrC,OAAUyB,IAAqBzB,GAAOtW,IAAYoY,MAChDN,EAAe9X,GAASrF,SACxBud,EAAchd,EAAM8E,EAASsW,GAC7B6B,EAAiBjd,EAAM8E,EAASsW,MAGxBrF,EAAJ9V,EAASA,IAChB,GAAM8a,EAAUxB,EAAKuD,SAAUjC,EAAO5a,GAAGX,MACxCoc,GAAaZ,EAAcW,EAAgBC,GAAYX,QACjD,CAIN,GAHAA,EAAUxB,EAAKlZ,OAAQwa,EAAO5a,GAAGX,MAAOkK,MAAO,KAAMqR,EAAO5a,GAAGwK,SAG1DsQ,EAAShY,GAAY,CAGzB,IADAiT,IAAM/V,EACM8V,EAAJC,IACFuD,EAAKuD,SAAUjC,EAAO7E,GAAG1W,MADd0W,KAKjB,MAAOiG,GACNhc,EAAI,GAAKwb,EAAgBC,GACzBzb,EAAI,GAAK8Y,EAER8B,EAAO/Q,MAAO,EAAG7J,EAAI,GAAI2D,QAASmE,MAAgC,MAAzB8S,EAAQ5a,EAAI,GAAIX,KAAe,IAAM,MAC7E0C,QAAS8S,GAAO,MAClBiG,EACI/E,EAAJ/V,GAAS0c,EAAmB9B,EAAO/Q,MAAO7J,EAAG+V,IACzCD,EAAJC,GAAW2G,EAAoB9B,EAASA,EAAO/Q,MAAOkM,IAClDD,EAAJC,GAAW+C,EAAY8B,IAGzBa,EAASnW,KAAMwV,GAIjB,MAAOU,GAAgBC,GAGxB,QAASyB,GAA0BC,EAAiBC,GACnD,GAAIC,GAAQD,EAAYhe,OAAS,EAChCke,EAAYH,EAAgB/d,OAAS,EACrCme,EAAe,SAAU5F,EAAM9S,EAASsW,EAAKlE,EAASuG,GACrD,GAAIzd,GAAMgW,EAAG+E,EACZ2C,EAAe,EACfzd,EAAI,IACJ6b,EAAYlE,MACZ+F,KACAC,EAAgBV,EAEhBlY,EAAQ4S,GAAQ2F,GAAahE,EAAKpT,KAAU,IAAG,IAAKsX,GAEpDI,EAAiBrC,GAA4B,MAAjBoC,EAAwB,EAAIjT,KAAK4L,UAAY,GACzER,EAAM/Q,EAAM3F,MAUb,KARKoe,IACJP,EAAmBpY,IAAYjG,GAAYiG,GAOpC7E,IAAM8V,GAA4B,OAApB/V,EAAOgF,EAAM/E,IAAaA,IAAM,CACrD,GAAKsd,GAAavd,EAAO,CAExB,IADAgW,EAAI,EACK+E,EAAUqC,EAAgBpH,MAClC,GAAK+E,EAAS/a,EAAM8E,EAASsW,GAAQ,CACpClE,EAAQ3R,KAAMvF,EACd,OAGGyd,IACJjC,EAAUqC,GAKPP,KAEEtd,GAAQ+a,GAAW/a,IACxB0d,IAII9F,GACJkE,EAAUvW,KAAMvF,IAOnB,GADA0d,GAAgBzd,EACXqd,GAASrd,IAAMyd,EAAe,CAElC,IADA1H,EAAI,EACK+E,EAAUsC,EAAYrH,MAC9B+E,EAASe,EAAW6B,EAAY7Y,EAASsW,EAG1C,IAAKxD,EAAO,CAEX,GAAK8F,EAAe,EACnB,KAAQzd,KACA6b,EAAU7b,IAAM0d,EAAW1d,KACjC0d,EAAW1d,GAAKmD,EAAIlD,KAAMgX,GAM7ByG,GAAa9B,EAAU8B,GAIxBpY,EAAKiE,MAAO0N,EAASyG,GAGhBF,IAAc7F,GAAQ+F,EAAWte,OAAS,GAC5Cqe,EAAeL,EAAYhe,OAAW,GAExCsY,EAAOmG,WAAY5G,GAUrB,MALKuG,KACJjC,EAAUqC,EACVX,EAAmBU,GAGb9B,EAGT,OAAOwB,GACN7D,EAAc+D,GACdA,EArzDF,GAAIvd,GACH+D,EACAuV,EACAwE,EACAC,EACApF,EACAqF,EACA7E,EACA8D,EACAgB,EACAC,EAGA/F,EACAvZ,EACAuf,EACA/F,EACAM,EACA0F,EACA5T,EACA+N,EAGAzV,EAAU,UAAY,GAAK2U,MAC3BS,EAAenZ,EAAOH,SACtB2c,EAAU,EACV9M,EAAO,EACP4P,EAAajF,IACbkF,EAAalF,IACbmF,EAAgBnF,IAChBoF,EAAY,SAAUxE,EAAGC,GAIxB,MAHKD,KAAMC,IACViE,GAAe,GAET,GAIRhZ,EAAe,YACfkV,EAAe,GAAK,GAGpB5F,KAAcC,eACduC,KACA7T,EAAM6T,EAAI7T,IACVsb,EAAczH,EAAI1R,KAClBA,EAAO0R,EAAI1R,KACXuE,GAAQmN,EAAInN,MAEZwK,GAAU2C,EAAI3C,SAAW,SAAUtU,GAGlC,IAFA,GAAIC,GAAI,EACP8V,EAAM9W,KAAKI,OACA0W,EAAJ9V,EAASA,IAChB,GAAKhB,KAAKgB,KAAOD,EAChB,MAAOC,EAGT,OAAO,IAGR0e,GAAW,6HAKXC,GAAa,sBAEbC,GAAoB,mCAKpBC,GAAaD,GAAkB7c,QAAS,IAAK,MAG7C+c,GAAa,MAAQH,GAAa,KAAOC,GAAoB,OAASD,GAErE,gBAAkBA,GAElB,2DAA6DE,GAAa,OAASF,GACnF,OAEDI,GAAU,KAAOH,GAAoB,wFAKPE,GAAa,eAM3CjK,GAAQ,GAAImK,QAAQ,IAAML,GAAa,8BAAgCA,GAAa,KAAM,KAE1FM,GAAS,GAAID,QAAQ,IAAML,GAAa,KAAOA,GAAa,KAC5DO,GAAe,GAAIF,QAAQ,IAAML,GAAa,WAAaA,GAAa,IAAMA,GAAa,KAE3FQ,GAAmB,GAAIH,QAAQ,IAAML,GAAa,iBAAmBA,GAAa,OAAQ,KAE1FS,GAAU,GAAIJ,QAAQD,IACtBM,GAAc,GAAIL,QAAQ,IAAMH,GAAa,KAE7CS,IACCC,GAAM,GAAIP,QAAQ,MAAQJ,GAAoB,KAC9CY,MAAS,GAAIR,QAAQ,QAAUJ,GAAoB,KACnDa,IAAO,GAAIT,QAAQ,KAAOJ,GAAkB7c,QAAS,IAAK,MAAS,KACnE2d,KAAQ,GAAIV,QAAQ,IAAMF,IAC1Ba,OAAU,GAAIX,QAAQ,IAAMD,IAC5Ba,MAAS,GAAIZ,QAAQ,yDAA2DL,GAC/E,+BAAiCA,GAAa,cAAgBA,GAC9D,aAAeA,GAAa,SAAU,KACvCkB,KAAQ,GAAIb,QAAQ,OAASN,GAAW,KAAM,KAG9CoB,aAAgB,GAAId,QAAQ,IAAML,GAAa,mDAC9CA,GAAa,mBAAqBA,GAAa,mBAAoB,MAGrEoB,GAAU,sCACVC,GAAU,SAEVC,GAAU,yBAGV5H,GAAa,mCAEbU,GAAW,OACXH,GAAU,QAGVsH,GAAY,GAAIlB,QAAQ,qBAAuBL,GAAa,MAAQA,GAAa,OAAQ,MACzFwB,GAAY,SAAUnf,EAAGof,EAASC,GACjC,GAAIC,GAAO,KAAOF,EAAU,KAI5B,OAAOE,KAASA,GAAQD,EACvBD,EACO,EAAPE,EAECC,OAAOC,aAAcF,EAAO,OAE5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,OAI7D,KACChb,EAAKiE,MACHyN,EAAMnN,GAAM5J,KAAMiY,EAAa9S,YAChC8S,EAAa9S,YAId4R,EAAKkB,EAAa9S,WAAWhG,QAASI,SACrC,MAAQ6C,IACTiD,GAASiE,MAAOyN,EAAI5X,OAGnB,SAAU0S,EAAQ2O,GACjBhC,EAAYlV,MAAOuI,EAAQjI,GAAM5J,KAAKwgB,KAKvC,SAAU3O,EAAQ2O,GAIjB,IAHA,GAAI1K,GAAIjE,EAAO1S,OACdY,EAAI,EAEI8R,EAAOiE,KAAO0K,EAAIzgB,OAC3B8R,EAAO1S,OAAS2W,EAAI,IAqQvBhS,EAAU2T,EAAO3T,WAOjBga,EAAQrG,EAAOqG,MAAQ,SAAUhe,GAGhC,GAAI8I,GAAkB9I,IAASA,EAAKiG,eAAiBjG,GAAM8I,eAC3D,OAAOA,GAA+C,SAA7BA,EAAgBxD,UAAsB,GAQhE8S,EAAcT,EAAOS,YAAc,SAAUuI,GAC5C,GAAIC,GACHxY,EAAMuY,EAAOA,EAAK1a,eAAiB0a,EAAOxI,EAC1C0I,EAASzY,EAAIgM,WAGd,OAAKhM,KAAQvJ,GAA6B,IAAjBuJ,EAAI3I,UAAmB2I,EAAIU,iBAKpDjK,EAAWuJ,EACXgW,EAAUhW,EAAIU,gBAGduP,GAAkB2F,EAAO5V,GAMpByY,GAAUA,IAAWA,EAAOC,MAE3BD,EAAOzf,iBACXyf,EAAOzf,iBAAkB,SAAU,WAClCgX,MACE,GACQyI,EAAOE,aAClBF,EAAOE,YAAa,WAAY,WAC/B3I,OAUHpU,EAAQ+a,WAAarF,EAAO,SAAUC,GAErC,MADAA,GAAIqH,UAAY,KACRrH,EAAIxX,aAAa,eAO1B6B,EAAQkB,qBAAuBwU,EAAO,SAAUC,GAE/C,MADAA,GAAI3T,YAAaoC,EAAI6Y,cAAc,MAC3BtH,EAAIzU,qBAAqB,KAAK7F,SAIvC2E,EAAQyU,uBAAyByH,GAAQ9f,KAAMgI,EAAIqQ,yBAA4BiB,EAAO,SAAUC,GAQ/F,MAPAA,GAAI9R,UAAY,+CAIhB8R,EAAI5T,WAAWib,UAAY,IAGuB,IAA3CrH,EAAIlB,uBAAuB,KAAKpZ,SAOxC2E,EAAQkd,QAAUxH,EAAO,SAAUC,GAElC,MADAyE,GAAQpY,YAAa2T,GAAMzW,GAAKH,GACxBqF,EAAI+Y,oBAAsB/Y,EAAI+Y,kBAAmBpe,GAAU1D,SAI/D2E,EAAQkd,SACZ3H,EAAKpT,KAAS,GAAI,SAAUjD,EAAI4B,GAC/B,SAAYA,GAAQyT,iBAAmBpT,GAAgBkT,EAAiB,CACvE,GAAIR,GAAI/S,EAAQyT,eAAgBrV,EAGhC,OAAO2U,IAAKA,EAAEnQ,YAAemQ,QAG/B0B,EAAKlZ,OAAW,GAAI,SAAU6C,GAC7B,GAAIke,GAASle,EAAGlB,QAASme,GAAWC,GACpC,OAAO,UAAUpgB,GAChB,MAAOA,GAAKmC,aAAa,QAAUif,YAM9B7H,GAAKpT,KAAS,GAErBoT,EAAKlZ,OAAW,GAAK,SAAU6C,GAC9B,GAAIke,GAASle,EAAGlB,QAASme,GAAWC,GACpC,OAAO,UAAUpgB,GAChB,GAAI2gB,SAAc3gB,GAAKqhB,mBAAqBlc,GAAgBnF,EAAKqhB,iBAAiB,KAClF,OAAOV,IAAQA,EAAK5Y,QAAUqZ,KAMjC7H,EAAKpT,KAAU,IAAInC,EAAQkB,qBAC1B,SAAUH,EAAKD,GACd,aAAYA,GAAQI,uBAAyBC,EACrCL,EAAQI,qBAAsBH,GADtC,QAID,SAAUA,EAAKD,GACd,GAAI9E,GACHoT,KACAnT,EAAI,EACJiX,EAAUpS,EAAQI,qBAAsBH,EAGzC,IAAa,MAARA,EAAc,CAClB,KAAS/E,EAAOkX,EAAQjX,MACA,IAAlBD,EAAKP,UACT2T,EAAI7N,KAAMvF,EAIZ,OAAOoT,GAER,MAAO8D,IAITqC,EAAKpT,KAAY,MAAInC,EAAQyU,wBAA0B,SAAUuI,EAAWlc,GAC3E,aAAYA,GAAQ2T,yBAA2BtT,GAAgBkT,EACvDvT,EAAQ2T,uBAAwBuI,GADxC,QAWD3C,KAOA1F,MAEM3U,EAAQ0U,IAAMwH,GAAQ9f,KAAMgI,EAAIhD,qBAGrCsU,EAAO,SAAUC,GAMhBA,EAAI9R,UAAY,gEAMX8R,EAAIvU,iBAAiB,qBAAqB/F,QAC9CsZ,EAAUpT,KAAM,SAAWqZ,GAAa,gBAKnCjF,EAAIvU,iBAAiB,cAAc/F,QACxCsZ,EAAUpT,KAAM,MAAQqZ,GAAa,aAAeD,GAAW,KAM1DhF,EAAIvU,iBAAiB,YAAY/F,QACtCsZ,EAAUpT,KAAK,cAIjBmU,EAAO,SAAUC,GAGhB,GAAI2H,GAAQlZ,EAAIxD,cAAc,QAC9B0c,GAAMxI,aAAc,OAAQ,UAC5Ba,EAAI3T,YAAasb,GAAQxI,aAAc,OAAQ,KAI1Ca,EAAIvU,iBAAiB,YAAY/F,QACrCsZ,EAAUpT,KAAM,OAASqZ,GAAa,eAKjCjF,EAAIvU,iBAAiB,YAAY/F,QACtCsZ,EAAUpT,KAAM,WAAY,aAI7BoU,EAAIvU,iBAAiB,QACrBuT,EAAUpT,KAAK,YAIXvB,EAAQud,gBAAkBrB,GAAQ9f,KAAOqK,EAAU2T,EAAQ3T,SAChE2T,EAAQoD,uBACRpD,EAAQqD,oBACRrD,EAAQsD,kBACRtD,EAAQuD,qBAERjI,EAAO,SAAUC,GAGhB3V,EAAQ4d,kBAAoBnX,EAAQvK,KAAMyZ,EAAK,OAI/ClP,EAAQvK,KAAMyZ,EAAK,aACnB0E,EAAc9Y,KAAM,KAAMyZ,MAI5BrG,EAAYA,EAAUtZ,QAAU,GAAI4f,QAAQtG,EAAUO,KAAK,MAC3DmF,EAAgBA,EAAchf,QAAU,GAAI4f,QAAQZ,EAAcnF,KAAK,MAIvE0H,EAAaV,GAAQ9f,KAAMge,EAAQyD,yBAKnCrJ,EAAWoI,GAAcV,GAAQ9f,KAAMge,EAAQ5F,UAC9C,SAAUyB,EAAGC,GACZ,GAAI4H,GAAuB,IAAf7H,EAAExa,SAAiBwa,EAAEnR,gBAAkBmR,EAClD8H,EAAM7H,GAAKA,EAAExS,UACd,OAAOuS,KAAM8H,MAAWA,GAAwB,IAAjBA,EAAItiB,YAClCqiB,EAAMtJ,SACLsJ,EAAMtJ,SAAUuJ,GAChB9H,EAAE4H,yBAA8D,GAAnC5H,EAAE4H,wBAAyBE,MAG3D,SAAU9H,EAAGC,GACZ,GAAKA,EACJ,KAASA,EAAIA,EAAExS,YACd,GAAKwS,IAAMD,EACV,OAAO,CAIV,QAAO,GAOTwE,EAAYmC,EACZ,SAAU3G,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,MADAiE,IAAe,EACR,CAIR,IAAI6D,IAAW/H,EAAE4H,yBAA2B3H,EAAE2H,uBAC9C,OAAKG,GACGA,GAIRA,GAAY/H,EAAEhU,eAAiBgU,MAAUC,EAAEjU,eAAiBiU,GAC3DD,EAAE4H,wBAAyB3H,GAG3B,EAGc,EAAV8H,IACFhe,EAAQie,cAAgB/H,EAAE2H,wBAAyB5H,KAAQ+H,EAGxD/H,IAAM7R,GAAO6R,EAAEhU,gBAAkBkS,GAAgBK,EAASL,EAAc8B,GACrE,GAEHC,IAAM9R,GAAO8R,EAAEjU,gBAAkBkS,GAAgBK,EAASL,EAAc+B,GACrE,EAIDgE,EACJ5J,GAAQpU,KAAMge,EAAWjE,GAAM3F,GAAQpU,KAAMge,EAAWhE,GAC1D,EAGe,EAAV8H,EAAc,GAAK,IAE3B,SAAU/H,EAAGC,GAEZ,GAAKD,IAAMC,EAEV,MADAiE,IAAe,EACR,CAGR,IAAI3d,GACHP,EAAI,EACJiiB,EAAMjI,EAAEvS,WACRqa,EAAM7H,EAAExS,WACRya,GAAOlI,GACPmI,GAAOlI,EAGR,KAAMgI,IAAQH,EACb,MAAO9H,KAAM7R,EAAM,GAClB8R,IAAM9R,EAAM,EACZ8Z,EAAM,GACNH,EAAM,EACN7D,EACE5J,GAAQpU,KAAMge,EAAWjE,GAAM3F,GAAQpU,KAAMge,EAAWhE,GAC1D,CAGK,IAAKgI,IAAQH,EACnB,MAAO/H,GAAcC,EAAGC,EAKzB,KADA1Z,EAAMyZ,EACGzZ,EAAMA,EAAIkH,YAClBya,EAAG9Q,QAAS7Q,EAGb,KADAA,EAAM0Z,EACG1Z,EAAMA,EAAIkH,YAClB0a,EAAG/Q,QAAS7Q,EAIb,MAAQ2hB,EAAGliB,KAAOmiB,EAAGniB,IACpBA,GAGD,OAAOA,GAEN+Z,EAAcmI,EAAGliB,GAAImiB,EAAGniB,IAGxBkiB,EAAGliB,KAAOkY,EAAe,GACzBiK,EAAGniB,KAAOkY,EAAe,EACzB,GAGK/P,GAhWCvJ,GAmWT8Y,EAAOlN,QAAU,SAAU4X,EAAM1iB,GAChC,MAAOgY,GAAQ0K,EAAM,KAAM,KAAM1iB,IAGlCgY,EAAO4J,gBAAkB,SAAUvhB,EAAMqiB,GASxC,IAPOriB,EAAKiG,eAAiBjG,KAAWnB,GACvCuZ,EAAapY,GAIdqiB,EAAOA,EAAKrgB,QAASod,GAAkB,aAElCpb,EAAQud,kBAAmBlJ,GAC5BgG,GAAkBA,EAAcje,KAAMiiB,IACtC1J,GAAkBA,EAAUvY,KAAMiiB,IAErC,IACC,GAAIzf,GAAM6H,EAAQvK,KAAMF,EAAMqiB,EAG9B,IAAKzf,GAAOoB,EAAQ4d,mBAGlB5hB,EAAKnB,UAAuC,KAA3BmB,EAAKnB,SAASY,SAChC,MAAOmD,GAEP,MAAMN,IAGT,MAAOqV,GAAQ0K,EAAMxjB,EAAU,MAAQmB,IAASX,OAAS,GAG1DsY,EAAOa,SAAW,SAAU1T,EAAS9E,GAKpC,OAHO8E,EAAQmB,eAAiBnB,KAAcjG,GAC7CuZ,EAAatT,GAEP0T,EAAU1T,EAAS9E,IAG3B2X,EAAOvR,KAAO,SAAUpG,EAAM+B,IAEtB/B,EAAKiG,eAAiBjG,KAAWnB,GACvCuZ,EAAapY,EAGd,IAAI6U,GAAK0E,EAAKQ,WAAYhY,EAAKG,eAE9B+I,EAAM4J,GAAMJ,EAAOvU,KAAMqZ,EAAKQ,WAAYhY,EAAKG,eAC9C2S,EAAI7U,EAAM+B,GAAOsW,GACjBvW,MAEF,OAAeA,UAARmJ,EACNA,EACAjH,EAAQ+a,aAAe1G,EACtBrY,EAAKmC,aAAcJ,IAClBkJ,EAAMjL,EAAKqhB,iBAAiBtf,KAAUkJ,EAAIqX,UAC1CrX,EAAIlD,MACJ,MAGJ4P,EAAOlE,MAAQ,SAAUgD,GACxB,KAAM,IAAI1X,OAAO,0CAA4C0X,IAO9DkB,EAAOmG,WAAa,SAAU5G,GAC7B,GAAIlX,GACHuiB,KACAvM,EAAI,EACJ/V,EAAI,CAOL,IAJAke,GAAgBna,EAAQwe,iBACxBtE,GAAala,EAAQye,YAAcvL,EAAQpN,MAAO,GAClDoN,EAAQjB,KAAMwI,GAETN,EAAe,CACnB,KAASne,EAAOkX,EAAQjX,MAClBD,IAASkX,EAASjX,KACtB+V,EAAIuM,EAAWhd,KAAMtF,GAGvB,MAAQ+V,KACPkB,EAAQhB,OAAQqM,EAAYvM,GAAK,GAQnC,MAFAkI,GAAY,KAELhH,GAOR6G,EAAUpG,EAAOoG,QAAU,SAAU/d,GACpC,GAAI2gB,GACH/d,EAAM,GACN3C,EAAI,EACJR,EAAWO,EAAKP,QAEjB,IAAMA,GAMC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAGjE,GAAiC,gBAArBO,GAAK0iB,YAChB,MAAO1iB,GAAK0iB,WAGZ,KAAM1iB,EAAOA,EAAK+F,WAAY/F,EAAMA,EAAOA,EAAKsa,YAC/C1X,GAAOmb,EAAS/d,OAGZ,IAAkB,IAAbP,GAA+B,IAAbA,EAC7B,MAAOO,GAAK2iB,cAhBZ,MAAShC,EAAO3gB,EAAKC,MAEpB2C,GAAOmb,EAAS4C,EAkBlB,OAAO/d,IAGR2W,EAAO5B,EAAOiL,WAGbpJ,YAAa,GAEbqJ,aAAcpJ,EAEd1Y,MAAOwe,GAEPxF,cAEA5T,QAEA2W,UACCgG,KAAOriB,IAAK,aAAcmV,OAAO,GACjCmN,KAAOtiB,IAAK,cACZuiB,KAAOviB,IAAK,kBAAmBmV,OAAO,GACtCqN,KAAOxiB,IAAK,oBAGbyb,WACCyD,KAAQ,SAAU5e,GAUjB,MATAA,GAAM,GAAKA,EAAM,GAAGiB,QAASme,GAAWC,IAGxCrf,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAKiB,QAASme,GAAWC,IAExD,OAAbrf,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAM+I,MAAO,EAAG,IAGxB+V,MAAS,SAAU9e,GA6BlB,MAlBAA,GAAM,GAAKA,EAAM,GAAGmB,cAEY,QAA3BnB,EAAM,GAAG+I,MAAO,EAAG,IAEjB/I,EAAM,IACX4W,EAAOlE,MAAO1S,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjB4W,EAAOlE,MAAO1S,EAAM,IAGdA,GAGR6e,OAAU,SAAU7e,GACnB,GAAImiB,GACHC,GAAYpiB,EAAM,IAAMA,EAAM,EAE/B,OAAKwe,IAAiB,MAAEnf,KAAMW,EAAM,IAC5B,MAIHA,EAAM,GACVA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAGxBoiB,GAAY9D,GAAQjf,KAAM+iB,KAEpCD,EAAStK,EAAUuK,GAAU,MAE7BD,EAASC,EAAS7O,QAAS,IAAK6O,EAAS9jB,OAAS6jB,GAAWC,EAAS9jB,UAGvE0B,EAAM,GAAKA,EAAM,GAAG+I,MAAO,EAAGoZ,GAC9BniB,EAAM,GAAKoiB,EAASrZ,MAAO,EAAGoZ,IAIxBniB,EAAM+I,MAAO,EAAG,MAIzBzJ,QAECqf,IAAO,SAAU0D,GAChB,GAAI9d,GAAW8d,EAAiBphB,QAASme,GAAWC,IAAYle,aAChE,OAA4B,MAArBkhB,EACN,WAAa,OAAO,GACpB,SAAUpjB,GACT,MAAOA,GAAKsF,UAAYtF,EAAKsF,SAASpD,gBAAkBoD,IAI3Dma,MAAS,SAAUuB,GAClB,GAAIqC,GAAU/E,EAAY0C,EAAY,IAEtC,OAAOqC,KACLA,EAAU,GAAIpE,QAAQ,MAAQL,GAAa,IAAMoC,EAAY,IAAMpC,GAAa,SACjFN,EAAY0C,EAAW,SAAUhhB,GAChC,MAAOqjB,GAAQjjB,KAAgC,gBAAnBJ,GAAKghB,WAA0BhhB,EAAKghB,iBAAoBhhB,GAAKmC,eAAiBgD,GAAgBnF,EAAKmC,aAAa,UAAY,OAI3Jwd,KAAQ,SAAU5d,EAAMuhB,EAAUC,GACjC,MAAO,UAAUvjB,GAChB,GAAIoP,GAASuI,EAAOvR,KAAMpG,EAAM+B,EAEhC,OAAe,OAAVqN,EACgB,OAAbkU,EAEFA,GAINlU,GAAU,GAEU,MAAbkU,EAAmBlU,IAAWmU,EACvB,OAAbD,EAAoBlU,IAAWmU,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BnU,EAAOkF,QAASiP,GAChC,OAAbD,EAAoBC,GAASnU,EAAOkF,QAASiP,GAAU,GAC1C,OAAbD,EAAoBC,GAASnU,EAAOtF,OAAQyZ,EAAMlkB,UAAakkB,EAClD,OAAbD,GAAsB,IAAMlU,EAAS,KAAMkF,QAASiP,GAAU,GACjD,OAAbD,EAAoBlU,IAAWmU,GAASnU,EAAOtF,MAAO,EAAGyZ,EAAMlkB,OAAS,KAAQkkB,EAAQ,KACxF,IAZO,IAgBV1D,MAAS,SAAUvgB,EAAMkkB,EAAM9I,EAAU9E,EAAOE,GAC/C,GAAI2N,GAAgC,QAAvBnkB,EAAKwK,MAAO,EAAG,GAC3B4Z,EAA+B,SAArBpkB,EAAKwK,MAAO,IACtB6Z,EAAkB,YAATH,CAEV,OAAiB,KAAV5N,GAAwB,IAATE,EAGrB,SAAU9V,GACT,QAASA,EAAK0H,YAGf,SAAU1H,EAAM8E,EAASsW,GACxB,GAAInY,GAAOqY,EAAYqF,EAAMxG,EAAMyJ,EAAW/U,EAC7CpO,EAAMgjB,IAAWC,EAAU,cAAgB,kBAC3C7C,EAAS7gB,EAAK0H,WACd3F,EAAO4hB,GAAU3jB,EAAKsF,SAASpD,cAC/B2hB,GAAYzI,IAAQuI,CAErB,IAAK9C,EAAS,CAGb,GAAK4C,EAAS,CACb,KAAQhjB,GAAM,CAEb,IADAkgB,EAAO3gB,EACE2gB,EAAOA,EAAMlgB,IACrB,GAAKkjB,EAAShD,EAAKrb,SAASpD,gBAAkBH,EAAyB,IAAlB4e,EAAKlhB,SACzD,OAAO,CAIToP,GAAQpO,EAAe,SAATnB,IAAoBuP,GAAS,cAE5C,OAAO,EAMR,GAHAA,GAAU6U,EAAU7C,EAAO9a,WAAa8a,EAAOiD,WAG1CJ,GAAWG,GAQf,IANAvI,EAAauF,EAAQ9d,KAAc8d,EAAQ9d,OAC3CE,EAAQqY,EAAYhc,OACpBskB,EAAY3gB,EAAM,KAAOuY,GAAWvY,EAAM,GAC1CkX,EAAOlX,EAAM,KAAOuY,GAAWvY,EAAM,GACrC0d,EAAOiD,GAAa/C,EAAOxb,WAAYue,GAE9BjD,IAASiD,GAAajD,GAAQA,EAAMlgB,KAG3C0Z,EAAOyJ,EAAY,IAAM/U,EAAMzL,OAGhC,GAAuB,IAAlBud,EAAKlhB,YAAoB0a,GAAQwG,IAAS3gB,EAAO,CACrDsb,EAAYhc,IAAWkc,EAASoI,EAAWzJ,EAC3C,YAKI,IAAK0J,IAAa5gB,GAASjD,EAAM+C,KAAc/C,EAAM+C,QAAkBzD,KAAW2D,EAAM,KAAOuY,EACrGrB,EAAOlX,EAAM,OAKb,OAAS0d,IAASiD,GAAajD,GAAQA,EAAMlgB,KAC3C0Z,EAAOyJ,EAAY,IAAM/U,EAAMzL,UAEzBugB,EAAShD,EAAKrb,SAASpD,gBAAkBH,EAAyB,IAAlB4e,EAAKlhB,cAAsB0a,IAE5E0J,KACHlD,EAAM5d,KAAc4d,EAAM5d,QAAkBzD,IAAWkc,EAASrB,IAG7DwG,IAAS3gB,MASjB,MADAma,IAAQrE,EACDqE,IAASvE,GAAWuE,EAAOvE,IAAU,GAAKuE,EAAOvE,GAAS,KAKrEgK,OAAU,SAAUmE,EAAQrJ,GAK3B,GAAI/E,GACHd,EAAK0E,EAAKyF,QAAS+E,IAAYxK,EAAKqB,WAAYmJ,EAAO7hB,gBACtDyV,EAAOlE,MAAO,uBAAyBsQ,EAKzC,OAAKlP,GAAI9R,GACD8R,EAAI6F,GAIP7F,EAAGxV,OAAS,GAChBsW,GAASoO,EAAQA,EAAQ,GAAIrJ,GACtBnB,EAAKqB,WAAWlG,eAAgBqP,EAAO7hB,eAC7CuX,EAAa,SAAU7B,EAAMnN,GAI5B,IAHA,GAAIuZ,GACHC,EAAUpP,EAAI+C,EAAM8C,GACpBza,EAAIgkB,EAAQ5kB,OACLY,KACP+jB,EAAM1P,GAAQpU,KAAM0X,EAAMqM,EAAQhkB,IAClC2X,EAAMoM,KAAWvZ,EAASuZ,GAAQC,EAAQhkB,MAG5C,SAAUD,GACT,MAAO6U,GAAI7U,EAAM,EAAG2V,KAIhBd,IAITmK,SAECnf,IAAO4Z,EAAa,SAAU7E,GAI7B,GAAI0M,MACHpK,KACA6D,EAAUkD,EAASrJ,EAAS5S,QAAS8S,GAAO,MAE7C,OAAOiG,GAAShY,GACf0W,EAAa,SAAU7B,EAAMnN,EAAS3F,EAASsW,GAM9C,IALA,GAAIpb,GACH8b,EAAYf,EAASnD,EAAM,KAAMwD,MACjCnb,EAAI2X,EAAKvY,OAGFY,MACDD,EAAO8b,EAAU7b,MACtB2X,EAAK3X,KAAOwK,EAAQxK,GAAKD,MAI5B,SAAUA,EAAM8E,EAASsW,GAGxB,MAFAkG,GAAM,GAAKthB,EACX+a,EAASuG,EAAO,KAAMlG,EAAKlE,IACnBA,EAAQ9T,SAInB8gB,IAAOzK,EAAa,SAAU7E,GAC7B,MAAO,UAAU5U,GAChB,MAAO2X,GAAQ/C,EAAU5U,GAAOX,OAAS,KAI3CmZ,SAAYiB,EAAa,SAAUhS,GAClC,MAAO,UAAUzH,GAChB,OAASA,EAAK0iB,aAAe1iB,EAAKmkB,WAAapG,EAAS/d,IAASsU,QAAS7M,GAAS,MAWrF2c,KAAQ3K,EAAc,SAAU2K,GAM/B,MAJM9E,IAAYlf,KAAKgkB,GAAQ,KAC9BzM,EAAOlE,MAAO,qBAAuB2Q,GAEtCA,EAAOA,EAAKpiB,QAASme,GAAWC,IAAYle,cACrC,SAAUlC,GAChB,GAAIqkB,EACJ,GACC,IAAMA,EAAWhM,EAChBrY,EAAKokB,KACLpkB,EAAKmC,aAAa,aAAenC,EAAKmC,aAAa,QAGnD,MADAkiB,GAAWA,EAASniB,cACbmiB,IAAaD,GAA2C,IAAnCC,EAAS/P,QAAS8P,EAAO,YAE5CpkB,EAAOA,EAAK0H,aAAiC,IAAlB1H,EAAKP,SAC3C,QAAO,KAKTsS,OAAU,SAAU/R,GACnB,GAAIskB,GAAOtlB,EAAOulB,UAAYvlB,EAAOulB,SAASD,IAC9C,OAAOA,IAAQA,EAAKxa,MAAO,KAAQ9J,EAAKkD,IAGzCshB,KAAQ,SAAUxkB,GACjB,MAAOA,KAASoe,GAGjBqG,MAAS,SAAUzkB,GAClB,MAAOA,KAASnB,EAASwF,iBAAmBxF,EAAS6lB,UAAY7lB,EAAS6lB,gBAAkB1kB,EAAKV,MAAQU,EAAK2kB,OAAS3kB,EAAK4kB,WAI7HC,QAAW,SAAU7kB,GACpB,MAAOA,GAAK8kB,YAAa,GAG1BA,SAAY,SAAU9kB,GACrB,MAAOA,GAAK8kB,YAAa,GAG1Blf,QAAW,SAAU5F,GAGpB,GAAIsF,GAAWtF,EAAKsF,SAASpD,aAC7B,OAAqB,UAAboD,KAA0BtF,EAAK4F,SAA0B,WAAbN,KAA2BtF,EAAKiI,UAGrFA,SAAY,SAAUjI,GAOrB,MAJKA,GAAK0H,YACT1H,EAAK0H,WAAWqd,cAGV/kB,EAAKiI,YAAa,GAI1B+F,MAAS,SAAUhO,GAKlB,IAAMA,EAAOA,EAAK+F,WAAY/F,EAAMA,EAAOA,EAAKsa,YAC/C,GAAKta,EAAKP,SAAW,EACpB,OAAO,CAGT,QAAO,GAGRohB,OAAU,SAAU7gB,GACnB,OAAQuZ,EAAKyF,QAAe,MAAGhf,IAIhCglB,OAAU,SAAUhlB,GACnB,MAAOigB,IAAQ7f,KAAMJ,EAAKsF,WAG3Bgc,MAAS,SAAUthB,GAClB,MAAOggB,IAAQ5f,KAAMJ,EAAKsF,WAG3B2f,OAAU,SAAUjlB,GACnB,GAAI+B,GAAO/B,EAAKsF,SAASpD,aACzB,OAAgB,UAATH,GAAkC,WAAd/B,EAAKV,MAA8B,WAATyC,GAGtD0F,KAAQ,SAAUzH,GACjB,GAAIoG,EACJ,OAAuC,UAAhCpG,EAAKsF,SAASpD,eACN,SAAdlC,EAAKV,OAImC,OAArC8G,EAAOpG,EAAKmC,aAAa,UAA2C,SAAvBiE,EAAKlE,gBAIvD0T,MAAS6E,EAAuB,WAC/B,OAAS,KAGV3E,KAAQ2E,EAAuB,SAAUE,EAActb,GACtD,OAASA,EAAS,KAGnBwW,GAAM4E,EAAuB,SAAUE,EAActb,EAAQqb,GAC5D,OAAoB,EAAXA,EAAeA,EAAWrb,EAASqb,KAG7CwK,KAAQzK,EAAuB,SAAUE,EAActb,GAEtD,IADA,GAAIY,GAAI,EACIZ,EAAJY,EAAYA,GAAK,EACxB0a,EAAapV,KAAMtF,EAEpB,OAAO0a,KAGRwK,IAAO1K,EAAuB,SAAUE,EAActb,GAErD,IADA,GAAIY,GAAI,EACIZ,EAAJY,EAAYA,GAAK,EACxB0a,EAAapV,KAAMtF,EAEpB,OAAO0a,KAGRyK,GAAM3K,EAAuB,SAAUE,EAActb,EAAQqb,GAE5D,IADA,GAAIza,GAAe,EAAXya,EAAeA,EAAWrb,EAASqb,IACjCza,GAAK,GACd0a,EAAapV,KAAMtF,EAEpB,OAAO0a,KAGR0K,GAAM5K,EAAuB,SAAUE,EAActb,EAAQqb,GAE5D,IADA,GAAIza,GAAe,EAAXya,EAAeA,EAAWrb,EAASqb,IACjCza,EAAIZ,GACbsb,EAAapV,KAAMtF,EAEpB,OAAO0a,OAKVpB,EAAKyF,QAAa,IAAIzF,EAAKyF,QAAY,EAGvC,KAAM/e,KAAOqlB,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5EnM,EAAKyF,QAAS/e,GAAMsa,EAAmBta,EAExC,KAAMA,KAAO0lB,QAAQ,EAAMC,OAAO,GACjCrM,EAAKyF,QAAS/e,GAAMua,EAAoBva,EAylBzC,OAplBA2a,GAAW3O,UAAYsN,EAAKsM,QAAUtM,EAAKyF,QAC3CzF,EAAKqB,WAAa,GAAIA,GAEtBhC,EAAWjB,EAAOiB,SAAW,SAAUhE,EAAUkR,GAChD,GAAI7B,GAASljB,EAAO8Z,EAAQvb,EAC3BymB,EAAOjO,EAAQkO,EACfC,EAAS1H,EAAY3J,EAAW,IAEjC,IAAKqR,EACJ,MAAOH,GAAY,EAAIG,EAAOnc,MAAO,EAOtC,KAJAic,EAAQnR,EACRkD,KACAkO,EAAazM,EAAK2C,UAEV6J,GAAQ,GAGT9B,IAAYljB,EAAQme,GAAO3Y,KAAMwf,OACjChlB,IAEJglB,EAAQA,EAAMjc,MAAO/I,EAAM,GAAG1B,SAAY0mB,GAE3CjO,EAAOvS,KAAOsV,OAGfoJ,GAAU,GAGJljB,EAAQoe,GAAa5Y,KAAMwf,MAChC9B,EAAUljB,EAAM2R,QAChBmI,EAAOtV,MACNwC,MAAOkc,EAEP3kB,KAAMyB,EAAM,GAAGiB,QAAS8S,GAAO,OAEhCiR,EAAQA,EAAMjc,MAAOma,EAAQ5kB,QAI9B,KAAMC,IAAQia,GAAKlZ,SACZU,EAAQwe,GAAWjgB,GAAOiH,KAAMwf,KAAcC,EAAY1mB,MAC9DyB,EAAQilB,EAAY1mB,GAAQyB,MAC7BkjB,EAAUljB,EAAM2R,QAChBmI,EAAOtV,MACNwC,MAAOkc,EACP3kB,KAAMA,EACNmL,QAAS1J,IAEVglB,EAAQA,EAAMjc,MAAOma,EAAQ5kB,QAI/B,KAAM4kB,EACL,MAOF,MAAO6B,GACNC,EAAM1mB,OACN0mB,EACCpO,EAAOlE,MAAOmB,GAEd2J,EAAY3J,EAAUkD,GAAShO,MAAO,IAqWzCmU,EAAUtG,EAAOsG,QAAU,SAAUrJ,EAAU7T,GAC9C,GAAId,GACHod,KACAD,KACA6I,EAASzH,EAAe5J,EAAW,IAEpC,KAAMqR,EAAS,CAMd,IAJMllB,IACLA,EAAQ6X,EAAUhE,IAEnB3U,EAAIc,EAAM1B,OACFY,KACPgmB,EAAStJ,EAAmB5b,EAAMd,IAC7BgmB,EAAQljB,GACZsa,EAAY9X,KAAM0gB,GAElB7I,EAAgB7X,KAAM0gB,EAKxBA,GAASzH,EAAe5J,EAAUuI,EAA0BC,EAAiBC,IAG7E4I,EAAOrR,SAAWA,EAEnB,MAAOqR,IAYR7M,EAASzB,EAAOyB,OAAS,SAAUxE,EAAU9P,EAASoS,EAASU,GAC9D,GAAI3X,GAAG4a,EAAQqL,EAAO5mB,EAAM6G,EAC3BggB,EAA+B,kBAAbvR,IAA2BA,EAC7C7T,GAAS6W,GAAQgB,EAAWhE,EAAWuR,EAASvR,UAAYA,EAK7D,IAHAsC,EAAUA,MAGY,IAAjBnW,EAAM1B,OAAe,CAIzB,GADAwb,EAAS9Z,EAAM,GAAKA,EAAM,GAAG+I,MAAO,GAC/B+Q,EAAOxb,OAAS,GAAkC,QAA5B6mB,EAAQrL,EAAO,IAAIvb,MAC5C0E,EAAQkd,SAAgC,IAArBpc,EAAQrF,UAAkB4Y,GAC7CkB,EAAKuD,SAAUjC,EAAO,GAAGvb,MAAS,CAGnC,GADAwF,GAAYyU,EAAKpT,KAAS,GAAG+f,EAAMzb,QAAQ,GAAGzI,QAAQme,GAAWC,IAAYtb,QAAkB,IACzFA,EACL,MAAOoS,EAGIiP,KACXrhB,EAAUA,EAAQ4C,YAGnBkN,EAAWA,EAAS9K,MAAO+Q,EAAOnI,QAAQ3K,MAAM1I,QAKjD,IADAY,EAAIsf,GAAwB,aAAEnf,KAAMwU,GAAa,EAAIiG,EAAOxb,OACpDY,MACPimB,EAAQrL,EAAO5a,IAGVsZ,EAAKuD,SAAWxd,EAAO4mB,EAAM5mB,QAGlC,IAAM6G,EAAOoT,EAAKpT,KAAM7G,MAEjBsY,EAAOzR,EACZ+f,EAAMzb,QAAQ,GAAGzI,QAASme,GAAWC,IACrCpH,GAAS5Y,KAAMya,EAAO,GAAGvb,OAAU2Z,EAAanU,EAAQ4C,aAAgB5C,IACpE,CAKJ,GAFA+V,EAAO3E,OAAQjW,EAAG,GAClB2U,EAAWgD,EAAKvY,QAAU0Z,EAAY8B,IAChCjG,EAEL,MADArP,GAAKiE,MAAO0N,EAASU,GACdV,CAGR,QAeJ,OAPEiP,GAAYlI,EAASrJ,EAAU7T,IAChC6W,EACA9S,GACCuT,EACDnB,EACA8B,GAAS5Y,KAAMwU,IAAcqE,EAAanU,EAAQ4C,aAAgB5C,GAE5DoS,GAMRlT,EAAQye,WAAa1f,EAAQe,MAAM,IAAImS,KAAMwI,GAAYvF,KAAK,MAAQnW,EAItEiB,EAAQwe,mBAAqBrE,EAG7B/F,IAIApU,EAAQie,aAAevI,EAAO,SAAU0M,GAEvC,MAAuE,GAAhEA,EAAKvE,wBAAyBhjB,EAAS+F,cAAc,UAMvD8U,EAAO,SAAUC,GAEtB,MADAA,GAAI9R,UAAY,mBAC+B,MAAxC8R,EAAI5T,WAAW5D,aAAa,WAEnC0X,EAAW,yBAA0B,SAAU7Z,EAAM+B,EAAMic,GAC1D,MAAMA,GAAN,OACQhe,EAAKmC,aAAcJ,EAA6B,SAAvBA,EAAKG,cAA2B,EAAI,KAOjE8B,EAAQ+a,YAAerF,EAAO,SAAUC,GAG7C,MAFAA,GAAI9R,UAAY,WAChB8R,EAAI5T,WAAW+S,aAAc,QAAS,IACY,KAA3Ca,EAAI5T,WAAW5D,aAAc,YAEpC0X,EAAW,QAAS,SAAU7Z,EAAM+B,EAAMic,GACzC,MAAMA,IAAyC,UAAhChe,EAAKsF,SAASpD,cAA7B,OACQlC,EAAKkI,eAOTwR,EAAO,SAAUC,GACtB,MAAuC,OAAhCA,EAAIxX,aAAa,eAExB0X,EAAW8E,GAAU,SAAU3e,EAAM+B,EAAMic,GAC1C,GAAI/S,EACJ,OAAM+S,GAAN,OACQhe,EAAM+B,MAAW,EAAOA,EAAKG,eACjC+I,EAAMjL,EAAKqhB,iBAAkBtf,KAAWkJ,EAAIqX,UAC7CrX,EAAIlD,MACL,OAKG4P,GAEH3Y,EAIJO,IAAO4G,KAAOwR,GACdpY,GAAO8iB,KAAO1K,GAAOiL,UACrBrjB,GAAO8iB,KAAK,KAAO9iB,GAAO8iB,KAAKrD,QAC/Bzf,GAAO8mB,OAAS1O,GAAOmG,WACvBve,GAAOkI,KAAOkQ,GAAOoG,QACrBxe,GAAO+mB,SAAW3O,GAAOqG,MACzBze,GAAOiZ,SAAWb,GAAOa,QAIzB,IAAI+N,IAAgBhnB,GAAO8iB,KAAKthB,MAAMgf,aAElCyG,GAAa,6BAIbrmB,GAAY,gBAgChBZ,IAAOc,OAAS,SAAUgiB,EAAMrd,EAAOnF,GACtC,GAAIG,GAAOgF,EAAO,EAMlB,OAJKnF,KACJwiB,EAAO,QAAUA,EAAO,KAGD,IAAjBrd,EAAM3F,QAAkC,IAAlBW,EAAKP,SACjCF,GAAO4G,KAAKob,gBAAiBvhB,EAAMqiB,IAAWriB,MAC9CT,GAAO4G,KAAKsE,QAAS4X,EAAM9iB,GAAOQ,KAAMiF,EAAO,SAAUhF,GACxD,MAAyB,KAAlBA,EAAKP,aAIfF,GAAOsV,GAAGrR,QACT2C,KAAM,SAAUyO,GACf,GAAI3U,GACH2C,KACA6jB,EAAOxnB,KACP8W,EAAM0Q,EAAKpnB,MAEZ,IAAyB,gBAAbuV,GACX,MAAO3V,MAAKuW,UAAWjW,GAAQqV,GAAWvU,OAAO,WAChD,IAAMJ,EAAI,EAAO8V,EAAJ9V,EAASA,IACrB,GAAKV,GAAOiZ,SAAUiO,EAAMxmB,GAAKhB,MAChC,OAAO,IAMX,KAAMgB,EAAI,EAAO8V,EAAJ9V,EAASA,IACrBV,GAAO4G,KAAMyO,EAAU6R,EAAMxmB,GAAK2C,EAMnC,OAFAA,GAAM3D,KAAKuW,UAAWO,EAAM,EAAIxW,GAAO8mB,OAAQzjB,GAAQA,GACvDA,EAAIgS,SAAW3V,KAAK2V,SAAW3V,KAAK2V,SAAW,IAAMA,EAAWA,EACzDhS,GAERvC,OAAQ,SAAUuU,GACjB,MAAO3V,MAAKuW,UAAW9V,EAAOT,KAAM2V,OAAgB,KAErD/U,IAAK,SAAU+U,GACd,MAAO3V,MAAKuW,UAAW9V,EAAOT,KAAM2V,OAAgB,KAErD8R,GAAI,SAAU9R,GACb,QAASlV,EACRT,KAIoB,gBAAb2V,IAAyB2R,GAAcnmB,KAAMwU,GACnDrV,GAAQqV,GACRA,OACD,GACCvV,SASJ,IAAIsnB,IAGH9nB,GAAWG,EAAOH,SAKlByZ,GAAa,sCAEbpM,GAAO3M,GAAOsV,GAAG3I,KAAO,SAAU0I,EAAU9P,GAC3C,GAAI/D,GAAOf,CAGX,KAAM4U,EACL,MAAO3V,KAIR,IAAyB,gBAAb2V,GAAwB,CAUnC,GAPC7T,EAF2B,MAAvB6T,EAAShL,OAAO,IAAyD,MAA3CgL,EAAShL,OAAQgL,EAASvV,OAAS,IAAeuV,EAASvV,QAAU,GAE7F,KAAMuV,EAAU,MAGlB0D,GAAW/R,KAAMqO,IAIrB7T,IAAUA,EAAM,IAAO+D,EAsDrB,OAAMA,GAAWA,EAAQsQ,QACtBtQ,GAAW6hB,IAAaxgB,KAAMyO,GAKhC3V,KAAKoW,YAAavQ,GAAUqB,KAAMyO,EAzDzC,IAAK7T,EAAM,GAAK,CAYf,GAXA+D,EAAUA,YAAmBvF,IAASuF,EAAQ,GAAKA,EAInDvF,GAAOiG,MAAOvG,KAAMM,GAAOqnB,UAC1B7lB,EAAM,GACN+D,GAAWA,EAAQrF,SAAWqF,EAAQmB,eAAiBnB,EAAUjG,IACjE,IAII2nB,GAAWpmB,KAAMW,EAAM,KAAQxB,GAAO+W,cAAexR,GACzD,IAAM/D,IAAS+D,GAETvF,GAAOO,WAAYb,KAAM8B,IAC7B9B,KAAM8B,GAAS+D,EAAS/D,IAIxB9B,KAAKmH,KAAMrF,EAAO+D,EAAS/D,GAK9B,OAAO9B,MAQP,GAJAe,EAAOnB,GAAS0Z,eAAgBxX,EAAM,IAIjCf,GAAQA,EAAK0H,WAAa,CAG9B,GAAK1H,EAAKkD,KAAOnC,EAAM,GACtB,MAAO4lB,IAAWxgB,KAAMyO,EAIzB3V,MAAKI,OAAS,EACdJ,KAAK,GAAKe,EAKX,MAFAf,MAAK6F,QAAUjG,GACfI,KAAK2V,SAAWA,EACT3V,KAcH,MAAK2V,GAASnV,UACpBR,KAAK6F,QAAU7F,KAAK,GAAK2V,EACzB3V,KAAKI,OAAS,EACPJ,MAIIM,GAAOO,WAAY8U,GACK,mBAArB+R,IAAWjlB,MACxBilB,GAAWjlB,MAAOkT,GAElBA,EAAUrV,KAGeuC,SAAtB8S,EAASA,WACb3V,KAAK2V,SAAWA,EAASA,SACzB3V,KAAK6F,QAAU8P,EAAS9P,SAGlBvF,GAAOyX,UAAWpC,EAAU3V,OAIrCiN,IAAKD,UAAY1M,GAAOsV,GAGxB8R,GAAapnB,GAAQV,GAGrB,IAAIgoB,IAAe,iCAElBC,IACCC,UAAU,EACVtU,UAAU,EACVuU,MAAM,EACN3T,MAAM,EAGR9T,IAAOiE,QACN/C,IAAK,SAAUT,EAAMS,EAAKwmB,GAIzB,IAHA,GAAIhD,MACHzjB,EAAMR,EAAMS,GAELD,GAAwB,IAAjBA,EAAIf,WAA6BqC,SAAVmlB,GAAwC,IAAjBzmB,EAAIf,WAAmBF,GAAQiB,GAAMkmB,GAAIO,KAC/E,IAAjBzmB,EAAIf,UACRwkB,EAAQ1e,KAAM/E,GAEfA,EAAMA,EAAIC,EAEX,OAAOwjB,IAGR1jB,QAAS,SAAU2mB,EAAGlnB,GAGrB,IAFA,GAAImnB,MAEID,EAAGA,EAAIA,EAAE5M,YACI,IAAf4M,EAAEznB,UAAkBynB,IAAMlnB,GAC9BmnB,EAAE5hB,KAAM2hB,EAIV,OAAOC,MAIT5nB,GAAOsV,GAAGrR,QACT0gB,IAAK,SAAUnS,GACd,GAAI9R,GACHmnB,EAAU7nB,GAAQwS,EAAQ9S,MAC1B8W,EAAMqR,EAAQ/nB,MAEf,OAAOJ,MAAKoB,OAAO,WAClB,IAAMJ,EAAI,EAAO8V,EAAJ9V,EAASA,IACrB,GAAKV,GAAOiZ,SAAUvZ,KAAMmoB,EAAQnnB,IACnC,OAAO,KAMXonB,QAAS,SAAUzE,EAAW9d,GAS7B,IARA,GAAItE,GACHP,EAAI,EACJ+G,EAAI/H,KAAKI,OACT4kB,KACAqD,EAAMf,GAAcnmB,KAAMwiB,IAAoC,gBAAdA,GAC/CrjB,GAAQqjB,EAAW9d,GAAW7F,KAAK6F,SACnC,EAEUkC,EAAJ/G,EAAOA,IACd,IAAMO,EAAMvB,KAAKgB,GAAIO,GAAOA,IAAQsE,EAAStE,EAAMA,EAAIkH,WAEtD,GAAKlH,EAAIf,SAAW,KAAO6nB,EAC1BA,EAAIjd,MAAM7J,GAAO,GAGA,IAAjBA,EAAIf,UACHF,GAAO4G,KAAKob,gBAAgB/gB,EAAKoiB,IAAc,CAEhDqB,EAAQ1e,KAAM/E,EACd,OAKH,MAAOvB,MAAKuW,UAAWyO,EAAQ5kB,OAAS,EAAIE,GAAO8mB,OAAQpC,GAAYA,IAKxE5Z,MAAO,SAAUrK,GAGhB,MAAMA,GAKe,gBAATA,GACJT,GAAOe,QAASrB,KAAK,GAAIM,GAAQS,IAIlCT,GAAOe,QAEbN,EAAKoV,OAASpV,EAAK,GAAKA,EAAMf,MAXrBA,KAAK,IAAMA,KAAK,GAAGyI,WAAezI,KAAK2W,QAAQ2R,UAAUloB,OAAS,IAc7EgI,IAAK,SAAUuN,EAAU9P,GACxB,MAAO7F,MAAKuW,UACXjW,GAAO8mB,OACN9mB,GAAOiG,MAAOvG,KAAKqK,MAAO/J,GAAQqV,EAAU9P,OAK/C0iB,QAAS,SAAU5S,GAClB,MAAO3V,MAAKoI,IAAiB,MAAZuN,EAChB3V,KAAKwW,WAAaxW,KAAKwW,WAAWpV,OAAOuU,OAa5CrV,GAAOuB,MACN+f,OAAQ,SAAU7gB,GACjB,GAAI6gB,GAAS7gB,EAAK0H,UAClB,OAAOmZ,IAA8B,KAApBA,EAAOphB,SAAkBohB,EAAS,MAEpD4G,QAAS,SAAUznB,GAClB,MAAOT,IAAOkB,IAAKT,EAAM,eAE1B0nB,aAAc,SAAU1nB,EAAMC,EAAGgnB,GAChC,MAAO1nB,IAAOkB,IAAKT,EAAM,aAAcinB,IAExCD,KAAM,SAAUhnB,GACf,MAAOO,GAASP,EAAM,gBAEvBqT,KAAM,SAAUrT,GACf,MAAOO,GAASP,EAAM,oBAEvB2nB,QAAS,SAAU3nB,GAClB,MAAOT,IAAOkB,IAAKT,EAAM,gBAE1BunB,QAAS,SAAUvnB,GAClB,MAAOT,IAAOkB,IAAKT,EAAM,oBAE1B4nB,UAAW,SAAU5nB,EAAMC,EAAGgnB,GAC7B,MAAO1nB,IAAOkB,IAAKT,EAAM,cAAeinB,IAEzCY,UAAW,SAAU7nB,EAAMC,EAAGgnB,GAC7B,MAAO1nB,IAAOkB,IAAKT,EAAM,kBAAmBinB,IAE7Ca,SAAU,SAAU9nB,GACnB,MAAOT,IAAOgB,SAAWP,EAAK0H,gBAAmB3B,WAAY/F,IAE9D+mB,SAAU,SAAU/mB,GACnB,MAAOT,IAAOgB,QAASP,EAAK+F,aAE7B0M,SAAU,SAAUzS,GACnB,MAAOT,IAAO+F,SAAUtF,EAAM,UAC7BA,EAAKgJ,iBAAmBhJ,EAAK+I,cAAclK,SAC3CU,GAAOiG,SAAWxF,EAAKqF,cAEvB,SAAUtD,EAAM8S,GAClBtV,GAAOsV,GAAI9S,GAAS,SAAUklB,EAAOrS,GACpC,GAAIhS,GAAMrD,GAAOsE,IAAK5E,KAAM4V,EAAIoS,EAsBhC,OApB0B,UAArBllB,EAAK+H,MAAO,MAChB8K,EAAWqS,GAGPrS,GAAgC,gBAAbA,KACvBhS,EAAMrD,GAAOc,OAAQuU,EAAUhS,IAG3B3D,KAAKI,OAAS,IAEZynB,GAAkB/kB,KACvBa,EAAMrD,GAAO8mB,OAAQzjB,IAIjBikB,GAAazmB,KAAM2B,KACvBa,EAAMA,EAAImlB,YAIL9oB,KAAKuW,UAAW5S,KAGzB,IAAI5B,IAAY,OAKZH,KAiCJtB,IAAOyoB,UAAY,SAAUrnB,GAI5BA,EAA6B,gBAAZA,GACdE,GAAcF,IAAaD,EAAeC,GAC5CpB,GAAOiE,UAAY7C,EAEpB,IACCsnB,GAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEA9jB,KAEA+jB,GAAS5nB,EAAQ6nB,SAEjBva,EAAO,SAAUpM,GAOhB,IANAqmB,EAASvnB,EAAQunB,QAAUrmB,EAC3BsmB,GAAQ,EACRE,EAAcC,GAAe,EAC7BA,EAAc,EACdF,EAAe5jB,EAAKnF,OACpB4oB,GAAS,EACDzjB,GAAsB4jB,EAAdC,EAA4BA,IAC3C,GAAK7jB,EAAM6jB,GAAc7e,MAAO3H,EAAM,GAAKA,EAAM,OAAU,GAASlB,EAAQ8nB,YAAc,CACzFP,GAAS,CACT,OAGFD,GAAS,EACJzjB,IACC+jB,EACCA,EAAMlpB,QACV4O,EAAMsa,EAAM7V,SAEFwV,EACX1jB,KAEAiiB,EAAKiC,YAKRjC,GAECpf,IAAK,WACJ,GAAK7C,EAAO,CAEX,GAAIqK,GAAQrK,EAAKnF,QACjB,QAAUgI,GAAKsO,GACdpW,GAAOuB,KAAM6U,EAAM,SAAU1U,EAAGuW,GAC/B,GAAIlY,GAAOC,GAAOD,KAAMkY,EACV,cAATlY,EACEqB,EAAQ0lB,QAAWI,EAAKvC,IAAK1M,IAClChT,EAAKe,KAAMiS,GAEDA,GAAOA,EAAInY,QAAmB,WAATC,GAEhC+H,EAAKmQ,MAGJ/N,WAGCwe,EACJG,EAAe5jB,EAAKnF,OAGT6oB,IACXI,EAAczZ,EACdZ,EAAMia,IAGR,MAAOjpB,OAGR0pB,OAAQ,WAkBP,MAjBKnkB,IACJjF,GAAOuB,KAAM2I,UAAW,SAAUxI,EAAGuW,GAEpC,IADA,GAAInN,IACMA,EAAQ9K,GAAOe,QAASkX,EAAKhT,EAAM6F,IAAY,IACxD7F,EAAK0R,OAAQ7L,EAAO,GAEf4d,IACUG,GAAT/d,GACJ+d,IAEaC,GAAThe,GACJge,OAMEppB,MAIRilB,IAAK,SAAUrP,GACd,MAAOA,GAAKtV,GAAOe,QAASuU,EAAIrQ,GAAS,MAASA,IAAQA,EAAKnF,SAGhE2O,MAAO,WAGN,MAFAxJ,MACA4jB,EAAe,EACRnpB,MAGRypB,QAAS,WAER,MADAlkB,GAAO+jB,EAAQL,EAASpmB,OACjB7C,MAGR6lB,SAAU,WACT,OAAQtgB,GAGTokB,KAAM,WAKL,MAJAL,GAAQzmB,OACFomB,GACLzB,EAAKiC,UAECzpB,MAGR4pB,OAAQ,WACP,OAAQN,GAGTO,SAAU,SAAUhkB,EAAS6Q,GAU5B,OATKnR,GAAW2jB,IAASI,IACxB5S,EAAOA,MACPA,GAAS7Q,EAAS6Q,EAAK7L,MAAQ6L,EAAK7L,QAAU6L,GACzCsS,EACJM,EAAMhjB,KAAMoQ,GAEZ1H,EAAM0H,IAGD1W,MAGRgP,KAAM,WAEL,MADAwY,GAAKqC,SAAU7pB,KAAMwK,WACdxK,MAGRkpB,MAAO,WACN,QAASA,GAIZ,OAAO1B,IAIRlnB,GAAOiE,QAENgM,SAAU,SAAU0B,GACnB,GAAI6X,KAEA,UAAW,OAAQxpB,GAAOyoB,UAAU,eAAgB,aACpD,SAAU,OAAQzoB,GAAOyoB,UAAU,eAAgB,aACnD,SAAU,WAAYzoB,GAAOyoB,UAAU,YAE1CxU,EAAQ,UACRpD,GACCoD,MAAO,WACN,MAAOA,IAERtF,OAAQ,WAEP,MADAqB,GAASb,KAAMjF,WAAYqH,KAAMrH,WAC1BxK,MAER+pB,KAAM,WACL,GAAIC,GAAMxf,SACV,OAAOlK,IAAOiQ,SAAS,SAAU0Z,GAChC3pB,GAAOuB,KAAMioB,EAAQ,SAAU9oB,EAAGkpB,GACjC,GAAItU,GAAKtV,GAAOO,WAAYmpB,EAAKhpB,KAASgpB,EAAKhpB,EAE/CsP,GAAU4Z,EAAM,IAAK,WACpB,GAAIC,GAAWvU,GAAMA,EAAGrL,MAAOvK,KAAMwK,UAChC2f,IAAY7pB,GAAOO,WAAYspB,EAAShZ,SAC5CgZ,EAAShZ,UACP1B,KAAMwa,EAASG,SACfvY,KAAMoY,EAASI,QACf1Y,SAAUsY,EAASK,QAErBL,EAAUC,EAAO,GAAM,QAAUlqB,OAASmR,EAAU8Y,EAAS9Y,UAAYnR,KAAM4V,GAAOuU,GAAa3f,eAItGwf,EAAM,OACJ7Y,WAIJA,QAAS,SAAUhR,GAClB,MAAc,OAAPA,EAAcG,GAAOiE,OAAQpE,EAAKgR,GAAYA,IAGvDb,IAwCD,OArCAa,GAAQoZ,KAAOpZ,EAAQ4Y,KAGvBzpB,GAAOuB,KAAMioB,EAAQ,SAAU9oB,EAAGkpB,GACjC,GAAI3kB,GAAO2kB,EAAO,GACjBM,EAAcN,EAAO,EAGtB/Y,GAAS+Y,EAAM,IAAO3kB,EAAK6C,IAGtBoiB,GACJjlB,EAAK6C,IAAI,WAERmM,EAAQiW,GAGNV,EAAY,EAAJ9oB,GAAS,GAAIyoB,QAASK,EAAQ,GAAK,GAAIH,MAInDrZ,EAAU4Z,EAAM,IAAO,WAEtB,MADA5Z,GAAU4Z,EAAM,GAAK,QAAUlqB,OAASsQ,EAAWa,EAAUnR,KAAMwK,WAC5DxK,MAERsQ,EAAU4Z,EAAM,GAAK,QAAW3kB,EAAKskB,WAItC1Y,EAAQA,QAASb,GAGZ2B,GACJA,EAAKhR,KAAMqP,EAAUA,GAIfA,GAIRma,KAAM,SAAUC,GACf,GAwBCC,GAAgBC,EAAkBC,EAxB/B7pB,EAAI,EACP8pB,EAAgBjgB,EAAM5J,KAAMuJ,WAC5BpK,EAAS0qB,EAAc1qB,OAGvBsQ,EAAuB,IAAXtQ,GAAkBsqB,GAAepqB,GAAOO,WAAY6pB,EAAYvZ,SAAc/Q,EAAS,EAGnGkQ,EAAyB,IAAdI,EAAkBga,EAAcpqB,GAAOiQ,WAGlDwa,EAAa,SAAU/pB,EAAG2b,EAAUxR,GACnC,MAAO,UAAUrC,GAChB6T,EAAU3b,GAAMhB,KAChBmL,EAAQnK,GAAMwJ,UAAUpK,OAAS,EAAIyK,EAAM5J,KAAMuJ,WAAc1B,EAC1DqC,IAAWwf,EACfra,EAASW,WAAY0L,EAAUxR,KAEhBuF,GACfJ,EAASY,YAAayL,EAAUxR,IAQpC,IAAK/K,EAAS,EAIb,IAHAuqB,EAAiB,GAAIlT,OAAOrX,GAC5BwqB,EAAmB,GAAInT,OAAOrX,GAC9ByqB,EAAkB,GAAIpT,OAAOrX,GACjBA,EAAJY,EAAYA,IACd8pB,EAAe9pB,IAAOV,GAAOO,WAAYiqB,EAAe9pB,GAAImQ,SAChE2Z,EAAe9pB,GAAImQ,UACjB1B,KAAMsb,EAAY/pB,EAAG6pB,EAAiBC,IACtCjZ,KAAMvB,EAAS+Z,QACf1Y,SAAUoZ,EAAY/pB,EAAG4pB,EAAkBD,MAE3Cja,CAUL,OAJMA,IACLJ,EAASY,YAAa2Z,EAAiBC,GAGjCxa,EAASa,YAMlB,IAAI6Z,GAEJ1qB,IAAOsV,GAAGnT,MAAQ,SAAUmT,GAI3B,MAFAtV,IAAOmC,MAAM0O,UAAU1B,KAAMmG,GAEtB5V,MAGRM,GAAOiE,QAENgT,SAAS,EAIT0T,UAAW,EAGXC,UAAW,SAAUC,GACfA,EACJ7qB,GAAO2qB,YAEP3qB,GAAOmC,OAAO,IAKhBA,MAAO,SAAU2oB,GAGhB,GAAKA,KAAS,KAAS9qB,GAAO2qB,WAAY3qB,GAAOiX,QAAjD,CAKA,IAAM3X,GAAS0J,KACd,MAAO6D,YAAY7M,GAAOmC,MAI3BnC,IAAOiX,SAAU,EAGZ6T,KAAS,KAAU9qB,GAAO2qB,UAAY,IAK3CD,GAAU9Z,YAAatR,IAAYU,KAG9BA,GAAOsV,GAAGyV,iBACd/qB,GAAQV,IAAWyrB,eAAgB,SACnC/qB,GAAQV,IAAW0rB,IAAK,eA8B3BhrB,GAAOmC,MAAM0O,QAAU,SAAUhR,GAChC,IAAM6qB,GAOL,GALAA,GAAY1qB,GAAOiQ,WAKU,aAAxB3Q,GAAS4C,WAEb2K,WAAY7M,GAAOmC,WAGb,IAAK7C,GAASuC,iBAEpBvC,GAASuC,iBAAkB,mBAAoBE,GAAW,GAG1DtC,EAAOoC,iBAAkB,OAAQE,GAAW,OAGtC,CAENzC,GAASkiB,YAAa,qBAAsBzf,GAG5CtC,EAAO+hB,YAAa,SAAUzf,EAI9B,IAAIwf,IAAM,CAEV,KACCA,EAA6B,MAAvB9hB,EAAOwrB,cAAwB3rB,GAASiK,gBAC7C,MAAMxG,IAEHwe,GAAOA,EAAI2J,WACf,QAAUC,KACT,IAAMnrB,GAAOiX,QAAU,CAEtB,IAGCsK,EAAI2J,SAAS,QACZ,MAAMnoB,GACP,MAAO8J,YAAYse,EAAe,IAInCvpB,IAGA5B,GAAOmC,YAMZ,MAAOuoB,IAAU7Z,QAAShR,GAI3B,IAMIa,IANAkF,GAAe,WAOnB,KAAMlF,KAAKV,IAAQyE,IAClB,KAEDA,IAAQ4S,QAAgB,MAAN3W,GAIlB+D,GAAQsK,wBAAyB,EAGjC/O,GAAO,WAEN,GAAI0L,GAAK0O,EAAKpR,EAAMoiB,CAEpBpiB,GAAO1J,GAASqG,qBAAsB,QAAU,GAC1CqD,GAASA,EAAKF,QAMpBsR,EAAM9a,GAAS+F,cAAe,OAC9B+lB,EAAY9rB,GAAS+F,cAAe,OACpC+lB,EAAUtiB,MAAMuiB,QAAU,iEAC1BriB,EAAKvC,YAAa2kB,GAAY3kB,YAAa2T,SAE/BA,GAAItR,MAAMkG,OAASpJ,KAK9BwU,EAAItR,MAAMuiB,QAAU,gEAEpB5mB,GAAQsK,uBAAyBrD,EAA0B,IAApB0O,EAAItO,YACtCJ,IAIJ1C,EAAKF,MAAMkG,KAAO,IAIpBhG,EAAKqR,YAAa+Q,MAMnB,WACC,GAAIhR,GAAM9a,GAAS+F,cAAe,MAGlC,IAA6B,MAAzBZ,GAAQC,cAAuB,CAElCD,GAAQC,eAAgB,CACxB,WACQ0V,GAAIvZ,KACV,MAAOkC,GACR0B,GAAQC,eAAgB,GAK1B0V,EAAM,QAOPpa,GAAOoD,WAAa,SAAU3C,GAC7B,GAAI6qB,GAAStrB,GAAOsrB,QAAS7qB,EAAKsF,SAAW,KAAKpD,eACjDzC,GAAYO,EAAKP,UAAY,CAG9B,OAAoB,KAAbA,GAA+B,IAAbA,GACxB,GAGCorB,GAAUA,KAAW,GAAQ7qB,EAAKmC,aAAa,aAAe0oB,EAIjE,IAAIzoB,IAAS,gCACZH,GAAa,UAqOd1C,IAAOiE,QACNP,SAIA4nB,QACCC,WAAW,EACXC,UAAU,EAEVC,UAAW,8CAGZjkB,QAAS,SAAU/G,GAElB,MADAA,GAAOA,EAAKP,SAAWF,GAAO0D,MAAOjD,EAAKT,GAAOwD,UAAa/C,EAAMT,GAAOwD,WAClE/C,IAASuC,EAAmBvC,IAGtC6B,KAAM,SAAU7B,EAAM+B,EAAMF,GAC3B,MAAOY,GAAczC,EAAM+B,EAAMF,IAGlCopB,WAAY,SAAUjrB,EAAM+B,GAC3B,MAAO2B,GAAoB1D,EAAM+B,IAIlC4E,MAAO,SAAU3G,EAAM+B,EAAMF,GAC5B,MAAOY,GAAczC,EAAM+B,EAAMF,GAAM,IAGxC+M,YAAa,SAAU5O,EAAM+B,GAC5B,MAAO2B,GAAoB1D,EAAM+B,GAAM,MAIzCxC,GAAOsV,GAAGrR,QACT3B,KAAM,SAAUD,EAAKmG,GACpB,GAAI9H,GAAG8B,EAAMF,EACZ7B,EAAOf,KAAK,GACZyN,EAAQ1M,GAAQA,EAAK+e,UAMtB,IAAajd,SAARF,EAAoB,CACxB,GAAK3C,KAAKI,SACTwC,EAAOtC,GAAOsC,KAAM7B,GAEG,IAAlBA,EAAKP,WAAmBF,GAAOoH,MAAO3G,EAAM,gBAAkB,CAElE,IADAC,EAAIyM,EAAMrN,OACFY,KAIFyM,EAAOzM,KACX8B,EAAO2K,EAAOzM,GAAI8B,KACe,IAA5BA,EAAKuS,QAAS,WAClBvS,EAAOxC,GAAOkE,UAAW1B,EAAK+H,MAAM,IACpCnI,EAAU3B,EAAM+B,EAAMF,EAAME,KAI/BxC,IAAOoH,MAAO3G,EAAM,eAAe,GAIrC,MAAO6B,GAIR,MAAoB,gBAARD,GACJ3C,KAAK6B,KAAK,WAChBvB,GAAOsC,KAAM5C,KAAM2C,KAId6H,UAAUpK,OAAS,EAGzBJ,KAAK6B,KAAK,WACTvB,GAAOsC,KAAM5C,KAAM2C,EAAKmG,KAKzB/H,EAAO2B,EAAU3B,EAAM4B,EAAKrC,GAAOsC,KAAM7B,EAAM4B,IAAUE,QAG3DmpB,WAAY,SAAUrpB,GACrB,MAAO3C,MAAK6B,KAAK,WAChBvB,GAAO0rB,WAAYhsB,KAAM2C,QAM5BrC,GAAOiE,QACNqK,MAAO,SAAU7N,EAAMV,EAAMuC,GAC5B,GAAIgM,EAEJ,OAAK7N,IACJV,GAASA,GAAQ,MAAS,QAC1BuO,EAAQtO,GAAOoH,MAAO3G,EAAMV,GAGvBuC,KACEgM,GAAStO,GAAOoE,QAAQ9B,GAC7BgM,EAAQtO,GAAOoH,MAAO3G,EAAMV,EAAMC,GAAOyX,UAAUnV,IAEnDgM,EAAMtI,KAAM1D,IAGPgM,OAZR,QAgBDqd,QAAS,SAAUlrB,EAAMV,GACxBA,EAAOA,GAAQ,IAEf,IAAIuO,GAAQtO,GAAOsO,MAAO7N,EAAMV,GAC/B6rB,EAActd,EAAMxO,OACpBwV,EAAKhH,EAAM6E,QACXnF,EAAQhO,GAAOuO,YAAa9N,EAAMV,GAClC0nB,EAAO,WACNznB,GAAO2rB,QAASlrB,EAAMV,GAIZ,gBAAPuV,IACJA,EAAKhH,EAAM6E,QACXyY,KAGItW,IAIU,OAATvV,GACJuO,EAAMwD,QAAS,oBAIT9D,GAAMgD,KACbsE,EAAG3U,KAAMF,EAAMgnB,EAAMzZ,KAGhB4d,GAAe5d,GACpBA,EAAMS,MAAMC,QAKdH,YAAa,SAAU9N,EAAMV,GAC5B,GAAIsC,GAAMtC,EAAO,YACjB,OAAOC,IAAOoH,MAAO3G,EAAM4B,IAASrC,GAAOoH,MAAO3G,EAAM4B,GACvDoM,MAAOzO,GAAOyoB,UAAU,eAAe3gB,IAAI,WAC1C9H,GAAOqP,YAAa5O,EAAMV,EAAO,SACjCC,GAAOqP,YAAa5O,EAAM4B,UAM9BrC,GAAOsV,GAAGrR,QACTqK,MAAO,SAAUvO,EAAMuC,GACtB,GAAIupB,GAAS,CAQb,OANqB,gBAAT9rB,KACXuC,EAAOvC,EACPA,EAAO,KACP8rB,KAGI3hB,UAAUpK,OAAS+rB,EAChB7rB,GAAOsO,MAAO5O,KAAK,GAAIK,GAGfwC,SAATD,EACN5C,KACAA,KAAK6B,KAAK,WACT,GAAI+M,GAAQtO,GAAOsO,MAAO5O,KAAMK,EAAMuC,EAGtCtC,IAAOuO,YAAa7O,KAAMK,GAEZ,OAATA,GAA8B,eAAbuO,EAAM,IAC3BtO,GAAO2rB,QAASjsB,KAAMK,MAI1B4rB,QAAS,SAAU5rB,GAClB,MAAOL,MAAK6B,KAAK,WAChBvB,GAAO2rB,QAASjsB,KAAMK,MAGxB+rB,WAAY,SAAU/rB,GACrB,MAAOL,MAAK4O,MAAOvO,GAAQ,UAI5B8Q,QAAS,SAAU9Q,EAAMF,GACxB,GAAIgU,GACHkY,EAAQ,EACRC,EAAQhsB,GAAOiQ,WACf7P,EAAWV,KACXgB,EAAIhB,KAAKI,OACTgqB,EAAU,aACCiC,GACTC,EAAMpb,YAAaxQ,GAAYA,IAUlC,KANqB,gBAATL,KACXF,EAAME,EACNA,EAAOwC,QAERxC,EAAOA,GAAQ,KAEPW,KACPmT,EAAM7T,GAAOoH,MAAOhH,EAAUM,GAAKX,EAAO,cACrC8T,GAAOA,EAAIpF,QACfsd,IACAlY,EAAIpF,MAAM3G,IAAKgiB,GAIjB,OADAA,KACOkC,EAAMnb,QAAShR,KAGxB,IAAIosB,IAAO,sCAAwCC,OAE/CvgB,IAAc,MAAO,QAAS,SAAU,QAExCZ,GAAW,SAAUtK,EAAM0rB,GAI7B,MADA1rB,GAAO0rB,GAAM1rB,EAC4B,SAAlCT,GAAOmJ,IAAK1I,EAAM,aAA2BT,GAAOiZ,SAAUxY,EAAKiG,cAAejG,IAOvF2rB,GAASpsB,GAAOosB,OAAS,SAAU3mB,EAAO6P,EAAIjT,EAAKmG,EAAO6jB,EAAWC,EAAUC,GAClF,GAAI7rB,GAAI,EACPZ,EAAS2F,EAAM3F,OACf0sB,EAAc,MAAPnqB,CAGR,IAA4B,WAAvBrC,GAAOD,KAAMsC,GAAqB,CACtCgqB,GAAY,CACZ,KAAM3rB,IAAK2B,GACVrC,GAAOosB,OAAQ3mB,EAAO6P,EAAI5U,EAAG2B,EAAI3B,IAAI,EAAM4rB,EAAUC,OAIhD,IAAehqB,SAAViG,IACX6jB,GAAY,EAENrsB,GAAOO,WAAYiI,KACxB+jB,GAAM,GAGFC,IAECD,GACJjX,EAAG3U,KAAM8E,EAAO+C,GAChB8M,EAAK,OAILkX,EAAOlX,EACPA,EAAK,SAAU7U,EAAM4B,EAAKmG,GACzB,MAAOgkB,GAAK7rB,KAAMX,GAAQS,GAAQ+H,MAKhC8M,GACJ,KAAYxV,EAAJY,EAAYA,IACnB4U,EAAI7P,EAAM/E,GAAI2B,EAAKkqB,EAAM/jB,EAAQA,EAAM7H,KAAM8E,EAAM/E,GAAIA,EAAG4U,EAAI7P,EAAM/E,GAAI2B,IAK3E,OAAOgqB,GACN5mB,EAGA+mB,EACClX,EAAG3U,KAAM8E,GACT3F,EAASwV,EAAI7P,EAAM,GAAIpD,GAAQiqB,GAE9BnmB,GAAiB,yBAIrB,WAEC,GAAI4b,GAAQziB,GAAS+F,cAAe,SACnC+U,EAAM9a,GAAS+F,cAAe,OAC9BonB,EAAWntB,GAAS8F,wBAsDrB,IAnDAgV,EAAI9R,UAAY,qEAGhB7D,GAAQioB,kBAAgD,IAA5BtS,EAAI5T,WAAWtG,SAI3CuE,GAAQkoB,OAASvS,EAAIzU,qBAAsB,SAAU7F,OAIrD2E,GAAQmoB,gBAAkBxS,EAAIzU,qBAAsB,QAAS7F,OAI7D2E,GAAQ4D,WACyD,kBAAhE/I,GAAS+F,cAAe,OAAQwnB,WAAW,GAAOzkB,UAInD2Z,EAAMhiB,KAAO,WACbgiB,EAAM1b,SAAU,EAChBomB,EAAShmB,YAAasb,GACtBtd,GAAQqoB,cAAgB/K,EAAM1b,QAI9B+T,EAAI9R,UAAY,yBAChB7D,GAAQsoB,iBAAmB3S,EAAIyS,WAAW,GAAOtI,UAAU5b,aAG3D8jB,EAAShmB,YAAa2T,GACtBA,EAAI9R,UAAY,mDAIhB7D,GAAQuoB,WAAa5S,EAAIyS,WAAW,GAAOA,WAAW,GAAOtI,UAAUle,QAKvE5B,GAAQuD,cAAe,EAClBoS,EAAIoH,cACRpH,EAAIoH,YAAa,UAAW,WAC3B/c,GAAQuD,cAAe,IAGxBoS,EAAIyS,WAAW,GAAOI,SAIM,MAAzBxoB,GAAQC,cAAuB,CAElCD,GAAQC,eAAgB,CACxB,WACQ0V,GAAIvZ,KACV,MAAOkC,GACR0B,GAAQC,eAAgB,OAM3B,WACC,GAAIhE,GAAGwsB,EACN9S,EAAM9a,GAAS+F,cAAe,MAG/B,KAAM3E,KAAO0lB,QAAQ,EAAM+G,QAAQ,EAAMC,SAAS,GACjDF,EAAY,KAAOxsB,GAEZ+D,GAAS/D,EAAI,WAAcwsB,IAAaztB,MAE9C2a,EAAIb,aAAc2T,EAAW,KAC7BzoB,GAAS/D,EAAI,WAAc0Z,EAAIoF,WAAY0N,GAAY1pB,WAAY,EAKrE4W,GAAM,OAIP,IAAIiT,IAAa,+BAChBC,GAAY,OACZC,GAAc,uCACdC,GAAc,kCACdC,GAAiB,sBAoBlBztB,IAAOiC,OAEN9C,UAEA2I,IAAK,SAAUrH,EAAMitB,EAAOnT,EAASjY,EAAM+S,GAC1C,GAAIxB,GAAKjM,EAAQ+lB,EAAGC,EACnBC,EAASC,EAAaC,EACtBC,EAAUjuB,EAAMkuB,EAAYC,EAC5BC,EAAWnuB,GAAOoH,MAAO3G,EAG1B,IAAM0tB,EAAN,CAmCA,IA9BK5T,EAAQA,UACZqT,EAAcrT,EACdA,EAAUqT,EAAYrT,QACtBlF,EAAWuY,EAAYvY,UAIlBkF,EAAQzW,OACbyW,EAAQzW,KAAO9D,GAAO8D,SAIhB8D,EAASumB,EAASvmB,UACxBA,EAASumB,EAASvmB,YAEZkmB,EAAcK,EAAStmB,UAC7BimB,EAAcK,EAAStmB,OAAS,SAAU9E,GAGzC,aAAc/C,MAAW4F,IAAkB7C,GAAK/C,GAAOiC,MAAMmsB,YAAcrrB,EAAEhD,KAE5EwC,OADAvC,GAAOiC,MAAMosB,SAASpkB,MAAO6jB,EAAYrtB,KAAMyJ,YAIjD4jB,EAAYrtB,KAAOA,GAIpBitB,GAAUA,GAAS,IAAKlsB,MAAOC,MAAiB,IAChDksB,EAAID,EAAM5tB,OACF6tB,KACP9Z,EAAM4Z,GAAezmB,KAAM0mB,EAAMC,QACjC5tB,EAAOmuB,EAAWra,EAAI,GACtBoa,GAAepa,EAAI,IAAM,IAAKtP,MAAO,KAAMmS,OAGrC3W,IAKN8tB,EAAU7tB,GAAOiC,MAAM4rB,QAAS9tB,OAGhCA,GAASsV,EAAWwY,EAAQS,aAAeT,EAAQU,WAAcxuB,EAGjE8tB,EAAU7tB,GAAOiC,MAAM4rB,QAAS9tB,OAGhCguB,EAAY/tB,GAAOiE,QAClBlE,KAAMA,EACNmuB,SAAUA,EACV5rB,KAAMA,EACNiY,QAASA,EACTzW,KAAMyW,EAAQzW,KACduR,SAAUA,EACVmL,aAAcnL,GAAYrV,GAAO8iB,KAAKthB,MAAMgf,aAAa3f,KAAMwU,GAC/DmZ,UAAWP,EAAWtU,KAAK,MACzBiU,IAGII,EAAWpmB,EAAQ7H,MACzBiuB,EAAWpmB,EAAQ7H,MACnBiuB,EAASS,cAAgB,EAGnBZ,EAAQa,OAASb,EAAQa,MAAM/tB,KAAMF,EAAM6B,EAAM2rB,EAAYH,MAAkB,IAE/ErtB,EAAKoB,iBACTpB,EAAKoB,iBAAkB9B,EAAM+tB,GAAa,GAE/BrtB,EAAK+gB,aAChB/gB,EAAK+gB,YAAa,KAAOzhB,EAAM+tB,KAK7BD,EAAQ/lB,MACZ+lB,EAAQ/lB,IAAInH,KAAMF,EAAMstB,GAElBA,EAAUxT,QAAQzW,OACvBiqB,EAAUxT,QAAQzW,KAAOyW,EAAQzW,OAK9BuR,EACJ2Y,EAASrX,OAAQqX,EAASS,gBAAiB,EAAGV,GAE9CC,EAAShoB,KAAM+nB,GAIhB/tB,GAAOiC,MAAM9C,OAAQY,IAAS,EAI/BU,GAAO,OAIR2oB,OAAQ,SAAU3oB,EAAMitB,EAAOnT,EAASlF,EAAUsZ,GACjD,GAAIlY,GAAGsX,EAAWla,EACjB+a,EAAWjB,EAAG/lB,EACdimB,EAASG,EAAUjuB,EACnBkuB,EAAYC,EACZC,EAAWnuB,GAAOwH,QAAS/G,IAAUT,GAAOoH,MAAO3G,EAEpD,IAAM0tB,IAAcvmB,EAASumB,EAASvmB,QAAtC,CAOA,IAFA8lB,GAAUA,GAAS,IAAKlsB,MAAOC,MAAiB,IAChDksB,EAAID,EAAM5tB,OACF6tB,KAMP,GALA9Z,EAAM4Z,GAAezmB,KAAM0mB,EAAMC,QACjC5tB,EAAOmuB,EAAWra,EAAI,GACtBoa,GAAepa,EAAI,IAAM,IAAKtP,MAAO,KAAMmS,OAGrC3W,EAAN,CAcA,IAPA8tB,EAAU7tB,GAAOiC,MAAM4rB,QAAS9tB,OAChCA,GAASsV,EAAWwY,EAAQS,aAAeT,EAAQU,WAAcxuB,EACjEiuB,EAAWpmB,EAAQ7H,OACnB8T,EAAMA,EAAI,IAAM,GAAI6L,QAAQ,UAAYuO,EAAWtU,KAAK,iBAAmB,WAG3EiV,EAAYnY,EAAIuX,EAASluB,OACjB2W,KACPsX,EAAYC,EAAUvX,IAEfkY,GAAeT,IAAaH,EAAUG,UACzC3T,GAAWA,EAAQzW,OAASiqB,EAAUjqB,MACtC+P,IAAOA,EAAIhT,KAAMktB,EAAUS,YAC3BnZ,GAAYA,IAAa0Y,EAAU1Y,WAAyB,OAAbA,IAAqB0Y,EAAU1Y,YACjF2Y,EAASrX,OAAQF,EAAG,GAEfsX,EAAU1Y,UACd2Y,EAASS,gBAELZ,EAAQzE,QACZyE,EAAQzE,OAAOzoB,KAAMF,EAAMstB,GAOzBa;IAAcZ,EAASluB,SACrB+tB,EAAQgB,UAAYhB,EAAQgB,SAASluB,KAAMF,EAAMwtB,EAAYE,EAAStmB,WAAa,GACxF7H,GAAOiI,YAAaxH,EAAMV,EAAMouB,EAAStmB,cAGnCD,GAAQ7H,QAtCf,KAAMA,IAAQ6H,GACb5H,GAAOiC,MAAMmnB,OAAQ3oB,EAAMV,EAAO2tB,EAAOC,GAAKpT,EAASlF,GAAU,EA0C/DrV,IAAOiD,cAAe2E,WACnBumB,GAAStmB,OAIhB7H,GAAOqP,YAAa5O,EAAM,aAI5BquB,QAAS,SAAU7sB,EAAOK,EAAM7B,EAAMsuB,GACrC,GAAIlnB,GAAQmnB,EAAQ/tB,EACnBguB,EAAYpB,EAASha,EAAKnT,EAC1BwuB,GAAczuB,GAAQnB,IACtBS,EAAOmV,GAAOvU,KAAMsB,EAAO,QAAWA,EAAMlC,KAAOkC,EACnDgsB,EAAa/Y,GAAOvU,KAAMsB,EAAO,aAAgBA,EAAMusB,UAAUjqB,MAAM,OAKxE,IAHAtD,EAAM4S,EAAMpT,EAAOA,GAAQnB,GAGJ,IAAlBmB,EAAKP,UAAoC,IAAlBO,EAAKP,WAK5BstB,GAAY3sB,KAAMd,EAAOC,GAAOiC,MAAMmsB,aAItCruB,EAAKgV,QAAQ,MAAQ,IAEzBkZ,EAAaluB,EAAKwE,MAAM,KACxBxE,EAAOkuB,EAAW9a,QAClB8a,EAAWvX,QAEZsY,EAASjvB,EAAKgV,QAAQ,KAAO,GAAK,KAAOhV,EAGzCkC,EAAQA,EAAOjC,GAAOwD,SACrBvB,EACA,GAAIjC,IAAOmvB,MAAOpvB,EAAuB,gBAAVkC,IAAsBA,GAGtDA,EAAMmtB,UAAYL,EAAe,EAAI,EACrC9sB,EAAMusB,UAAYP,EAAWtU,KAAK,KAClC1X,EAAMotB,aAAeptB,EAAMusB,UAC1B,GAAI9O,QAAQ,UAAYuO,EAAWtU,KAAK,iBAAmB,WAC3D,KAGD1X,EAAM4N,OAAStN,OACTN,EAAMuQ,SACXvQ,EAAMuQ,OAAS/R,GAIhB6B,EAAe,MAARA,GACJL,GACFjC,GAAOyX,UAAWnV,GAAQL,IAG3B4rB,EAAU7tB,GAAOiC,MAAM4rB,QAAS9tB,OAC1BgvB,IAAgBlB,EAAQiB,SAAWjB,EAAQiB,QAAQ7kB,MAAOxJ,EAAM6B,MAAW,GAAjF,CAMA,IAAMysB,IAAiBlB,EAAQyB,WAAatvB,GAAOC,SAAUQ,GAAS,CAMrE,IAJAwuB,EAAapB,EAAQS,cAAgBvuB,EAC/BytB,GAAY3sB,KAAMouB,EAAalvB,KACpCkB,EAAMA,EAAIkH,YAEHlH,EAAKA,EAAMA,EAAIkH,WACtB+mB,EAAUlpB,KAAM/E,GAChB4S,EAAM5S,CAIF4S,MAASpT,EAAKiG,eAAiBpH,KACnC4vB,EAAUlpB,KAAM6N,EAAIgB,aAAehB,EAAIiB,cAAgBrV,GAMzD,IADAiB,EAAI,GACKO,EAAMiuB,EAAUxuB,QAAUuB,EAAMstB,wBAExCttB,EAAMlC,KAAOW,EAAI,EAChBuuB,EACApB,EAAQU,UAAYxuB,EAGrB8H,GAAW7H,GAAOoH,MAAOnG,EAAK,eAAoBgB,EAAMlC,OAAUC,GAAOoH,MAAOnG,EAAK,UAChF4G,GACJA,EAAOoC,MAAOhJ,EAAKqB,GAIpBuF,EAASmnB,GAAU/tB,EAAK+tB,GACnBnnB,GAAUA,EAAOoC,OAASjK,GAAOoD,WAAYnC,KACjDgB,EAAM4N,OAAShI,EAAOoC,MAAOhJ,EAAKqB,GAC7BL,EAAM4N,UAAW,GACrB5N,EAAMutB,iBAOT,IAHAvtB,EAAMlC,KAAOA,GAGPgvB,IAAiB9sB,EAAMwtB,wBAErB5B,EAAQ6B,UAAY7B,EAAQ6B,SAASzlB,MAAOilB,EAAUrrB,MAAOvB,MAAW,IAC9EtC,GAAOoD,WAAY3C,IAKduuB,GAAUvuB,EAAMV,KAAWC,GAAOC,SAAUQ,GAAS,CAGzDoT,EAAMpT,EAAMuuB,GAEPnb,IACJpT,EAAMuuB,GAAW,MAIlBhvB,GAAOiC,MAAMmsB,UAAYruB,CACzB,KACCU,EAAMV,KACL,MAAQgD,IAIV/C,GAAOiC,MAAMmsB,UAAY7rB,OAEpBsR,IACJpT,EAAMuuB,GAAWnb,GAMrB,MAAO5R,GAAM4N,SAGdwe,SAAU,SAAUpsB,GAGnBA,EAAQjC,GAAOiC,MAAM0tB,IAAK1tB,EAE1B,IAAIvB,GAAG2C,EAAK0qB,EAAWrJ,EAASjO,EAC/BmZ,KACAxZ,EAAO7L,EAAM5J,KAAMuJ,WACnB8jB,GAAahuB,GAAOoH,MAAO1H,KAAM,eAAoBuC,EAAMlC,UAC3D8tB,EAAU7tB,GAAOiC,MAAM4rB,QAAS5rB,EAAMlC,SAOvC,IAJAqW,EAAK,GAAKnU,EACVA,EAAM4tB,eAAiBnwB,MAGlBmuB,EAAQiC,aAAejC,EAAQiC,YAAYnvB,KAAMjB,KAAMuC,MAAY,EAAxE,CASA,IAJA2tB,EAAe5vB,GAAOiC,MAAM+rB,SAASrtB,KAAMjB,KAAMuC,EAAO+rB,GAGxDttB,EAAI,GACKgkB,EAAUkL,EAAclvB,QAAWuB,EAAMstB,wBAIjD,IAHAttB,EAAM8tB,cAAgBrL,EAAQjkB,KAE9BgW,EAAI,GACKsX,EAAYrJ,EAAQsJ,SAAUvX,QAAWxU,EAAM+tB,mCAIjD/tB,EAAMotB,cAAgBptB,EAAMotB,aAAaxuB,KAAMktB,EAAUS,cAE9DvsB,EAAM8rB,UAAYA,EAClB9rB,EAAMK,KAAOyrB,EAAUzrB,KAEvBe,IAASrD,GAAOiC,MAAM4rB,QAASE,EAAUG,eAAkBrmB,QAAUkmB,EAAUxT,SAC5EtQ,MAAOya,EAAQjkB,KAAM2V,GAEX7T,SAARc,IACEpB,EAAM4N,OAASxM,MAAS,IAC7BpB,EAAMutB,iBACNvtB,EAAMguB,mBAYX,OAJKpC,GAAQqC,cACZrC,EAAQqC,aAAavvB,KAAMjB,KAAMuC,GAG3BA,EAAM4N,SAGdme,SAAU,SAAU/rB,EAAO+rB,GAC1B,GAAImC,GAAKpC,EAAW7iB,EAASxK,EAC5BkvB,KACAnB,EAAgBT,EAASS,cACzBxtB,EAAMgB,EAAMuQ,MAKb,IAAKic,GAAiBxtB,EAAIf,YAAc+B,EAAMyjB,QAAyB,UAAfzjB,EAAMlC,MAG7D,KAAQkB,GAAOvB,KAAMuB,EAAMA,EAAIkH,YAAczI,KAK5C,GAAsB,IAAjBuB,EAAIf,WAAmBe,EAAIskB,YAAa,GAAuB,UAAftjB,EAAMlC,MAAoB,CAE9E,IADAmL,KACMxK,EAAI,EAAO+tB,EAAJ/tB,EAAmBA,IAC/BqtB,EAAYC,EAAUttB,GAGtByvB,EAAMpC,EAAU1Y,SAAW,IAEH9S,SAAnB2I,EAASilB,KACbjlB,EAASilB,GAAQpC,EAAUvN,aAC1BxgB,GAAQmwB,EAAKzwB,MAAOoL,MAAO7J,IAAS,EACpCjB,GAAO4G,KAAMupB,EAAKzwB,KAAM,MAAQuB,IAAQnB,QAErCoL,EAASilB,IACbjlB,EAAQlF,KAAM+nB,EAGX7iB,GAAQpL,QACZ8vB,EAAa5pB,MAAOvF,KAAMQ,EAAK+sB,SAAU9iB,IAW7C,MAJKujB,GAAgBT,EAASluB,QAC7B8vB,EAAa5pB,MAAOvF,KAAMf,KAAMsuB,SAAUA,EAASzjB,MAAOkkB,KAGpDmB,GAGRD,IAAK,SAAU1tB,GACd,GAAKA,EAAOjC,GAAOwD,SAClB,MAAOvB,EAIR,IAAIvB,GAAG6L,EAAMsK,EACZ9W,EAAOkC,EAAMlC,KACbqwB,EAAgBnuB,EAChBouB,EAAU3wB,KAAK4wB,SAAUvwB,EAa1B,KAXMswB,IACL3wB,KAAK4wB,SAAUvwB,GAASswB,EACvB9C,GAAY1sB,KAAMd,GAASL,KAAK6wB,WAChCjD,GAAUzsB,KAAMd,GAASL,KAAK8wB,aAGhC3Z,EAAOwZ,EAAQxiB,MAAQnO,KAAKmO,MAAMxJ,OAAQgsB,EAAQxiB,OAAUnO,KAAKmO,MAEjE5L,EAAQ,GAAIjC,IAAOmvB,MAAOiB,GAE1B1vB,EAAImW,EAAK/W,OACDY,KACP6L,EAAOsK,EAAMnW,GACbuB,EAAOsK,GAAS6jB,EAAe7jB,EAmBhC,OAdMtK,GAAMuQ,SACXvQ,EAAMuQ,OAAS4d,EAAcK,YAAcnxB,IAKb,IAA1B2C,EAAMuQ,OAAOtS,WACjB+B,EAAMuQ,OAASvQ,EAAMuQ,OAAOrK,YAK7BlG,EAAMyuB,UAAYzuB,EAAMyuB,QAEjBL,EAAQvvB,OAASuvB,EAAQvvB,OAAQmB,EAAOmuB,GAAkBnuB,GAIlE4L,MAAO,wHAAwHtJ,MAAM,KAErI+rB,YAEAE,UACC3iB,MAAO,4BAA4BtJ,MAAM,KACzCzD,OAAQ,SAAUmB,EAAO0uB,GAOxB,MAJoB,OAAf1uB,EAAMiL,QACVjL,EAAMiL,MAA6B,MAArByjB,EAASC,SAAmBD,EAASC,SAAWD,EAASE,SAGjE5uB,IAITsuB,YACC1iB,MAAO,mGAAmGtJ,MAAM,KAChHzD,OAAQ,SAAUmB,EAAO0uB,GACxB,GAAI3nB,GAAM8nB,EAAUjoB,EACnB6c,EAASiL,EAASjL,OAClBqL,EAAcJ,EAASI,WAuBxB,OApBoB,OAAf9uB,EAAM+uB,OAAqC,MAApBL,EAASM,UACpCH,EAAW7uB,EAAMuQ,OAAO9L,eAAiBpH,GACzCuJ,EAAMioB,EAASvnB,gBACfP,EAAO8nB,EAAS9nB,KAEhB/G,EAAM+uB,MAAQL,EAASM,SAAYpoB,GAAOA,EAAIqoB,YAAcloB,GAAQA,EAAKkoB,YAAc,IAAQroB,GAAOA,EAAIsoB,YAAcnoB,GAAQA,EAAKmoB,YAAc,GACnJlvB,EAAMmvB,MAAQT,EAASU,SAAYxoB,GAAOA,EAAIyoB,WAActoB,GAAQA,EAAKsoB,WAAc,IAAQzoB,GAAOA,EAAI0oB,WAAcvoB,GAAQA,EAAKuoB,WAAc,KAI9ItvB,EAAMuvB,eAAiBT,IAC5B9uB,EAAMuvB,cAAgBT,IAAgB9uB,EAAMuQ,OAASme,EAASc,UAAYV,GAKrE9uB,EAAMiL,OAAoB3K,SAAXmjB,IACpBzjB,EAAMiL,MAAmB,EAATwY,EAAa,EAAe,EAATA,EAAa,EAAe,EAATA,EAAa,EAAI,GAGjEzjB,IAIT4rB,SACC6D,MAECpC,UAAU,GAEXpK,OAEC4J,QAAS,WACR,GAAKpvB,OAASmF,KAAuBnF,KAAKwlB,MACzC,IAEC,MADAxlB,MAAKwlB,SACE,EACN,MAAQniB,MAOZurB,aAAc,WAEfqD,MACC7C,QAAS,WACR,MAAKpvB,QAASmF,KAAuBnF,KAAKiyB,MACzCjyB,KAAKiyB,QACE,GAFR,QAKDrD,aAAc,YAEfrB,OAEC6B,QAAS,WACR,MAAK9uB,IAAO+F,SAAUrG,KAAM,UAA2B,aAAdA,KAAKK,MAAuBL,KAAKutB,OACzEvtB,KAAKutB,SACE,GAFR,QAODyC,SAAU,SAAUztB,GACnB,MAAOjC,IAAO+F,SAAU9D,EAAMuQ,OAAQ,OAIxCof,cACC1B,aAAc,SAAUjuB,GAIDM,SAAjBN,EAAM4N,QAAwB5N,EAAMmuB,gBACxCnuB,EAAMmuB,cAAcyB,YAAc5vB,EAAM4N,WAM5CiiB,SAAU,SAAU/xB,EAAMU,EAAMwB,EAAO8vB,GAItC,GAAIhvB,GAAI/C,GAAOiE,OACd,GAAIjE,IAAOmvB,MACXltB,GAEClC,KAAMA,EACNiyB,aAAa,EACb5B,kBAGG2B,GACJ/xB,GAAOiC,MAAM6sB,QAAS/rB,EAAG,KAAMtC,GAE/BT,GAAOiC,MAAMosB,SAAS1tB,KAAMF,EAAMsC,GAE9BA,EAAE0sB,sBACNxtB,EAAMutB,mBAKTxvB,GAAOiI,YAAc3I,GAASwC,oBAC7B,SAAUrB,EAAMV,EAAM8H,GAChBpH,EAAKqB,qBACTrB,EAAKqB,oBAAqB/B,EAAM8H,GAAQ,IAG1C,SAAUpH,EAAMV,EAAM8H,GACrB,GAAIrF,GAAO,KAAOzC,CAEbU,GAAKuB,oBAIGvB,GAAM+B,KAAWoD,KAC5BnF,EAAM+B,GAAS,MAGhB/B,EAAKuB,YAAaQ,EAAMqF,KAI3B7H,GAAOmvB,MAAQ,SAAU7nB,EAAKuG,GAE7B,MAAOnO,gBAAgBM,IAAOmvB,OAKzB7nB,GAAOA,EAAIvH,MACfL,KAAK0wB,cAAgB9oB,EACrB5H,KAAKK,KAAOuH,EAAIvH,KAIhBL,KAAK+vB,mBAAqBnoB,EAAI2qB,kBACH1vB,SAAzB+E,EAAI2qB,kBAEJ3qB,EAAIuqB,eAAgB,EACrBltB,EACAC,GAIDlF,KAAKK,KAAOuH,EAIRuG,GACJ7N,GAAOiE,OAAQvE,KAAMmO,GAItBnO,KAAKwyB,UAAY5qB,GAAOA,EAAI4qB,WAAalyB,GAAO+M,WAGhDrN,KAAMM,GAAOwD,UAAY,IA/BjB,GAAIxD,IAAOmvB,MAAO7nB,EAAKuG,IAoChC7N,GAAOmvB,MAAMziB,WACZ+iB,mBAAoB7qB,EACpB2qB,qBAAsB3qB,EACtBorB,8BAA+BprB,EAE/B4qB,eAAgB,WACf,GAAIzsB,GAAIrD,KAAK0wB,aAEb1wB,MAAK+vB,mBAAqB9qB,EACpB5B,IAKDA,EAAEysB,eACNzsB,EAAEysB,iBAKFzsB,EAAE8uB,aAAc,IAGlB5B,gBAAiB,WAChB,GAAIltB,GAAIrD,KAAK0wB,aAEb1wB,MAAK6vB,qBAAuB5qB,EACtB5B,IAIDA,EAAEktB,iBACNltB,EAAEktB,kBAKHltB,EAAEovB,cAAe,IAElBC,yBAA0B,WACzB,GAAIrvB,GAAIrD,KAAK0wB,aAEb1wB,MAAKswB,8BAAgCrrB,EAEhC5B,GAAKA,EAAEqvB,0BACXrvB,EAAEqvB,2BAGH1yB,KAAKuwB,oBAKPjwB,GAAOuB,MACN8wB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUpkB,EAAMuhB,GAClB3vB,GAAOiC,MAAM4rB,QAASzf,IACrBkgB,aAAcqB,EACdpB,SAAUoB,EAEV9nB,OAAQ,SAAU5F,GACjB,GAAIoB,GACHmP,EAAS9S,KACT+yB,EAAUxwB,EAAMuvB,cAChBzD,EAAY9rB,EAAM8rB,SASnB,SALM0E,GAAYA,IAAYjgB,IAAWxS,GAAOiZ,SAAUzG,EAAQigB,MACjExwB,EAAMlC,KAAOguB,EAAUG,SACvB7qB,EAAM0qB,EAAUxT,QAAQtQ,MAAOvK,KAAMwK,WACrCjI,EAAMlC,KAAO4vB,GAEPtsB,MAMJoB,GAAQiuB,gBAEb1yB,GAAOiC,MAAM4rB,QAAQzH,QACpBsI,MAAO,WAEN,MAAK1uB,IAAO+F,SAAUrG,KAAM,SACpB,MAIRM,IAAOiC,MAAM6F,IAAKpI,KAAM,iCAAkC,SAAUqD,GAEnE,GAAItC,GAAOsC,EAAEyP,OACZmgB,EAAO3yB,GAAO+F,SAAUtF,EAAM,UAAaT,GAAO+F,SAAUtF,EAAM,UAAaA,EAAKkyB,KAAOpwB,MACvFowB,KAAS3yB,GAAOoH,MAAOurB,EAAM,mBACjC3yB,GAAOiC,MAAM6F,IAAK6qB,EAAM,iBAAkB,SAAU1wB,GACnDA,EAAM2wB,gBAAiB,IAExB5yB,GAAOoH,MAAOurB,EAAM,iBAAiB,OAMxCzC,aAAc,SAAUjuB,GAElBA,EAAM2wB,uBACH3wB,GAAM2wB,eACRlzB,KAAKyI,aAAelG,EAAMmtB,WAC9BpvB,GAAOiC,MAAM6vB,SAAU,SAAUpyB,KAAKyI,WAAYlG,GAAO,KAK5D4sB,SAAU,WAET,MAAK7uB,IAAO+F,SAAUrG,KAAM,SACpB,MAIRM,IAAOiC,MAAMmnB,OAAQ1pB,KAAM,eAMxB+E,GAAQouB,gBAEb7yB,GAAOiC,MAAM4rB,QAAQV,QAEpBuB,MAAO,WAEN,MAAKrB,IAAWxsB,KAAMnB,KAAKqG,YAIP,aAAdrG,KAAKK,MAAqC,UAAdL,KAAKK,QACrCC,GAAOiC,MAAM6F,IAAKpI,KAAM,yBAA0B,SAAUuC,GACjB,YAArCA,EAAMmuB,cAAc0C,eACxBpzB,KAAKqzB,eAAgB,KAGvB/yB,GAAOiC,MAAM6F,IAAKpI,KAAM,gBAAiB,SAAUuC,GAC7CvC,KAAKqzB,gBAAkB9wB,EAAMmtB,YACjC1vB,KAAKqzB,eAAgB,GAGtB/yB,GAAOiC,MAAM6vB,SAAU,SAAUpyB,KAAMuC,GAAO,OAGzC,OAGRjC,IAAOiC,MAAM6F,IAAKpI,KAAM,yBAA0B,SAAUqD,GAC3D,GAAItC,GAAOsC,EAAEyP,MAER6a,IAAWxsB,KAAMJ,EAAKsF,YAAe/F,GAAOoH,MAAO3G,EAAM,mBAC7DT,GAAOiC,MAAM6F,IAAKrH,EAAM,iBAAkB,SAAUwB,IAC9CvC,KAAKyI,YAAelG,EAAM+vB,aAAgB/vB,EAAMmtB,WACpDpvB,GAAOiC,MAAM6vB,SAAU,SAAUpyB,KAAKyI,WAAYlG,GAAO,KAG3DjC,GAAOoH,MAAO3G,EAAM,iBAAiB,OAKxCoH,OAAQ,SAAU5F,GACjB,GAAIxB,GAAOwB,EAAMuQ,MAGjB,OAAK9S,QAASe,GAAQwB,EAAM+vB,aAAe/vB,EAAMmtB,WAA4B,UAAd3uB,EAAKV,MAAkC,aAAdU,EAAKV,KACrFkC,EAAM8rB,UAAUxT,QAAQtQ,MAAOvK,KAAMwK,WAD7C,QAKD2kB,SAAU,WAGT,MAFA7uB,IAAOiC,MAAMmnB,OAAQ1pB,KAAM,aAEnB2tB,GAAWxsB,KAAMnB,KAAKqG,aAM3BtB,GAAQuuB,gBACbhzB,GAAOuB,MAAO2jB,MAAO,UAAWyM,KAAM,YAAc,SAAUvjB,EAAMuhB,GAGnE,GAAIpV,GAAU,SAAUtY,GACtBjC,GAAOiC,MAAM6vB,SAAUnC,EAAK1tB,EAAMuQ,OAAQxS,GAAOiC,MAAM0tB,IAAK1tB,IAAS,GAGvEjC,IAAOiC,MAAM4rB,QAAS8B,IACrBjB,MAAO,WACN,GAAI7lB,GAAMnJ,KAAKgH,eAAiBhH,KAC/BuzB,EAAWjzB,GAAOoH,MAAOyB,EAAK8mB,EAEzBsD,IACLpqB,EAAIhH,iBAAkBuM,EAAMmM,GAAS,GAEtCva,GAAOoH,MAAOyB,EAAK8mB,GAAOsD,GAAY,GAAM,IAE7CpE,SAAU,WACT,GAAIhmB,GAAMnJ,KAAKgH,eAAiBhH,KAC/BuzB,EAAWjzB,GAAOoH,MAAOyB,EAAK8mB,GAAQ,CAEjCsD,GAILjzB,GAAOoH,MAAOyB,EAAK8mB,EAAKsD,IAHxBpqB,EAAI/G,oBAAqBsM,EAAMmM,GAAS,GACxCva,GAAOqP,YAAaxG,EAAK8mB,QAS9B3vB,GAAOsV,GAAGrR,QAETivB,GAAI,SAAUxF,EAAOrY,EAAU/S,EAAMgT,EAAiB6d,GACrD,GAAIpzB,GAAMqzB,CAGV,IAAsB,gBAAV1F,GAAqB,CAEP,gBAAbrY,KAEX/S,EAAOA,GAAQ+S,EACfA,EAAW9S,OAEZ,KAAMxC,IAAQ2tB,GACbhuB,KAAKwzB,GAAInzB,EAAMsV,EAAU/S,EAAMorB,EAAO3tB,GAAQozB,EAE/C,OAAOzzB,MAmBR,GAhBa,MAAR4C,GAAsB,MAANgT,GAEpBA,EAAKD,EACL/S,EAAO+S,EAAW9S,QACD,MAAN+S,IACc,gBAAbD,IAEXC,EAAKhT,EACLA,EAAOC,SAGP+S,EAAKhT,EACLA,EAAO+S,EACPA,EAAW9S,SAGR+S,KAAO,EACXA,EAAK1Q,MACC,KAAM0Q,EACZ,MAAO5V,KAaR,OAVa,KAARyzB,IACJC,EAAS9d,EACTA,EAAK,SAAUrT,GAGd,MADAjC,MAASgrB,IAAK/oB,GACPmxB,EAAOnpB,MAAOvK,KAAMwK,YAG5BoL,EAAGxR,KAAOsvB,EAAOtvB,OAAUsvB,EAAOtvB,KAAO9D,GAAO8D,SAE1CpE,KAAK6B,KAAM,WACjBvB,GAAOiC,MAAM6F,IAAKpI,KAAMguB,EAAOpY,EAAIhT,EAAM+S,MAG3C8d,IAAK,SAAUzF,EAAOrY,EAAU/S,EAAMgT,GACrC,MAAO5V,MAAKwzB,GAAIxF,EAAOrY,EAAU/S,EAAMgT,EAAI,IAE5C0V,IAAK,SAAU0C,EAAOrY,EAAUC,GAC/B,GAAIyY,GAAWhuB,CACf,IAAK2tB,GAASA,EAAM8B,gBAAkB9B,EAAMK,UAQ3C,MANAA,GAAYL,EAAMK,UAClB/tB,GAAQ0tB,EAAMmC,gBAAiB7E,IAC9B+C,EAAUS,UAAYT,EAAUG,SAAW,IAAMH,EAAUS,UAAYT,EAAUG,SACjFH,EAAU1Y,SACV0Y,EAAUxT,SAEJ7a,IAER,IAAsB,gBAAVguB,GAAqB,CAEhC,IAAM3tB,IAAQ2tB,GACbhuB,KAAKsrB,IAAKjrB,EAAMsV,EAAUqY,EAAO3tB,GAElC,OAAOL,MAUR,OARK2V,KAAa,GAA6B,kBAAbA,MAEjCC,EAAKD,EACLA,EAAW9S,QAEP+S,KAAO,IACXA,EAAK1Q,GAEClF,KAAK6B,KAAK,WAChBvB,GAAOiC,MAAMmnB,OAAQ1pB,KAAMguB,EAAOpY,EAAID,MAIxCyZ,QAAS,SAAU/uB,EAAMuC,GACxB,MAAO5C,MAAK6B,KAAK,WAChBvB,GAAOiC,MAAM6sB,QAAS/uB,EAAMuC,EAAM5C,SAGpCqrB,eAAgB,SAAUhrB,EAAMuC,GAC/B,GAAI7B,GAAOf,KAAK,EAChB,OAAKe,GACGT,GAAOiC,MAAM6sB,QAAS/uB,EAAMuC,EAAM7B,GAAM,GADhD,SAqBF,IAAIyE,IAAY,6JAEfmuB,GAAgB,6BAChBC,GAAe,GAAI5T,QAAO,OAASxa,GAAY,WAAY,KAC3DquB,GAAqB,OACrBC,GAAY,0EACZC,GAAW,YACXC,GAAS,UACTC,GAAQ,YACRC,GAAe,0BAEfC,GAAW,oCACXC,GAAc,4BACd/sB,GAAoB,cACpBgtB,GAAe,2CAGfC,IACCC,QAAU,EAAG,+BAAgC,aAC7CC,QAAU,EAAG,aAAc,eAC3BC,MAAQ,EAAG,QAAS,UACpBC,OAAS,EAAG,WAAY,aACxBC,OAAS,EAAG,UAAW,YACvBC,IAAM,EAAG,iBAAkB,oBAC3BC,KAAO,EAAG,mCAAoC,uBAC9CC,IAAM,EAAG,qBAAsB,yBAI/B9E,SAAUjrB,GAAQmoB,eAAkB,EAAG,GAAI,KAAS,EAAG,SAAU,WAElE6H,GAAezvB,EAAoB1F,IACnCo1B,GAAcD,GAAahuB,YAAanH,GAAS+F,cAAc,OAEhE2uB,IAAQW,SAAWX,GAAQC,OAC3BD,GAAQrH,MAAQqH,GAAQY,MAAQZ,GAAQa,SAAWb,GAAQc,QAAUd,GAAQK,MAC7EL,GAAQe,GAAKf,GAAQQ,GAiKrBx0B,GAAOiE,QACN6S,MAAO,SAAUrW,EAAMu0B,EAAeC,GACrC,GAAIC,GAAc9T,EAAMtK,EAAOpW,EAAGy0B,EACjCC,EAASp1B,GAAOiZ,SAAUxY,EAAKiG,cAAejG,EAW/C,IATKgE,GAAQ4D,YAAcrI,GAAO+mB,SAAStmB,KAAU6yB,GAAazyB,KAAM,IAAMJ,EAAKsF,SAAW,KAC7F+Q,EAAQrW,EAAKosB,WAAW,IAIxB6H,GAAYpsB,UAAY7H,EAAK2H,UAC7BssB,GAAYra,YAAavD,EAAQ4d,GAAYluB,eAGvC/B,GAAQuD,cAAiBvD,GAAQsoB,gBACnB,IAAlBtsB,EAAKP,UAAoC,KAAlBO,EAAKP,UAAqBF,GAAO+mB,SAAStmB,IAOnE,IAJAy0B,EAAe5vB,EAAQwR,GACvBqe,EAAc7vB,EAAQ7E,GAGhBC,EAAI,EAA8B,OAA1B0gB,EAAO+T,EAAYz0B,MAAeA,EAE1Cw0B,EAAax0B,IACjBqH,EAAoBqZ,EAAM8T,EAAax0B,GAM1C,IAAKs0B,EACJ,GAAKC,EAIJ,IAHAE,EAAcA,GAAe7vB,EAAQ7E,GACrCy0B,EAAeA,GAAgB5vB,EAAQwR,GAEjCpW,EAAI,EAA8B,OAA1B0gB,EAAO+T,EAAYz0B,IAAaA,IAC7C2G,EAAgB+Z,EAAM8T,EAAax0B,QAGpC2G,GAAgB5G,EAAMqW,EAaxB,OARAoe,GAAe5vB,EAAQwR,EAAO,UACzBoe,EAAap1B,OAAS,GAC1BoH,EAAeguB,GAAeE,GAAU9vB,EAAQ7E,EAAM,WAGvDy0B,EAAeC,EAAc/T,EAAO,KAG7BtK,GAGRue,cAAe,SAAU5vB,EAAOF,EAAS+vB,EAASC,GAWjD,IAVA,GAAI9e,GAAGhW,EAAMwY,EACZpF,EAAKrO,EAAKmnB,EAAO6I,EACjB/tB,EAAIhC,EAAM3F,OAGV21B,EAAOzwB,EAAoBO,GAE3BmwB,KACAh1B,EAAI,EAEO+G,EAAJ/G,EAAOA,IAGd,GAFAD,EAAOgF,EAAO/E,GAETD,GAAiB,IAATA,EAGZ,GAA6B,WAAxBT,GAAOD,KAAMU,GACjBT,GAAOiG,MAAOyvB,EAAOj1B,EAAKP,UAAaO,GAASA,OAG1C,IAAMkzB,GAAM9yB,KAAMJ,GAIlB,CAWN,IAVAoT,EAAMA,GAAO4hB,EAAKhvB,YAAalB,EAAQF,cAAc,QAGrDG,GAAOiuB,GAASzsB,KAAMvG,KAAY,GAAI,KAAO,GAAIkC,cACjD6yB,EAAOxB,GAASxuB,IAASwuB,GAAQtE,SAEjC7b,EAAIvL,UAAYktB,EAAK,GAAK/0B,EAAKgC,QAAS+wB,GAAW,aAAgBgC,EAAK,GAGxE/e,EAAI+e,EAAK,GACD/e,KACP5C,EAAMA,EAAI0Q,SASX,KALM9f,GAAQioB,mBAAqB6G,GAAmB1yB,KAAMJ,IAC3Di1B,EAAM1vB,KAAMT,EAAQowB,eAAgBpC,GAAmBvsB,KAAMvG,GAAO,MAI/DgE,GAAQkoB,MAYb,IATAlsB,EAAe,UAAR+E,GAAoBkuB,GAAO7yB,KAAMJ,GAI3B,YAAZ+0B,EAAK,IAAqB9B,GAAO7yB,KAAMJ,GAEtC,EADAoT,EAJDA,EAAIrN,WAOLiQ,EAAIhW,GAAQA,EAAKqF,WAAWhG,OACpB2W,KACFzW,GAAO+F,SAAW4mB,EAAQlsB,EAAKqF,WAAW2Q,GAAK,WAAckW,EAAM7mB,WAAWhG,QAClFW,EAAK4Z,YAAasS,EAWrB,KANA3sB,GAAOiG,MAAOyvB,EAAO7hB,EAAI/N,YAGzB+N,EAAIsP,YAAc,GAGVtP,EAAIrN,YACXqN,EAAIwG,YAAaxG,EAAIrN,WAItBqN,GAAM4hB,EAAKlR,cAtDXmR,GAAM1vB,KAAMT,EAAQowB,eAAgBl1B,GAuEvC,KAXKoT,GACJ4hB,EAAKpb,YAAaxG,GAKbpP,GAAQqoB,eACb9sB,GAAOQ,KAAM8E,EAAQowB,EAAO,SAAWxvB,GAGxCxF,EAAI,EACKD,EAAOi1B,EAAOh1B,MAItB,KAAK60B,GAAmD,KAAtCv1B,GAAOe,QAASN,EAAM80B,MAIxCtc,EAAWjZ,GAAOiZ,SAAUxY,EAAKiG,cAAejG,GAGhDoT,EAAMvO,EAAQmwB,EAAKhvB,YAAahG,GAAQ,UAGnCwY,GACJ/R,EAAe2M,GAIXyhB,GAEJ,IADA7e,EAAI,EACKhW,EAAOoT,EAAK4C,MACfqd,GAAYjzB,KAAMJ,EAAKV,MAAQ,KACnCu1B,EAAQtvB,KAAMvF,EAQlB,OAFAoT,GAAM,KAEC4hB,GAGRjxB,UAAW,SAAUiB,EAAsBrC,GAQ1C,IAPA,GAAI3C,GAAMV,EAAM4D,EAAIrB,EACnB5B,EAAI,EACJ6C,EAAcvD,GAAOwD,QACrBE,EAAQ1D,GAAO0D,MACfgB,EAAgBD,GAAQC,cACxBmpB,EAAU7tB,GAAOiC,MAAM4rB,QAEK,OAApBptB,EAAOgF,EAAM/E,IAAaA,IAClC,IAAK0C,GAAcpD,GAAOoD,WAAY3C,MAErCkD,EAAKlD,EAAM8C,GACXjB,EAAOqB,GAAMD,EAAOC,IAER,CACX,GAAKrB,EAAKsF,OACT,IAAM7H,IAAQuC,GAAKsF,OACbimB,EAAS9tB,GACbC,GAAOiC,MAAMmnB,OAAQ3oB,EAAMV,GAI3BC,GAAOiI,YAAaxH,EAAMV,EAAMuC,EAAKuF,OAMnCnE,GAAOC,WAEJD,GAAOC,GAKTe,QACGjE,GAAM8C,SAEK9C,GAAKwG,kBAAoBrB,GAC3CnF,EAAKwG,gBAAiB1D,GAGtB9C,EAAM8C,GAAgB,KAGvBK,EAAWoC,KAAMrC,QAQvB3D,GAAOsV,GAAGrR,QACTiE,KAAM,SAAUM,GACf,MAAO4jB,IAAQ1sB,KAAM,SAAU8I,GAC9B,MAAiBjG,UAAViG,EACNxI,GAAOkI,KAAMxI,MACbA,KAAK+O,QAAQmnB,QAAUl2B,KAAK,IAAMA,KAAK,GAAGgH,eAAiBpH,IAAWq2B,eAAgBntB,KACrF,KAAMA,EAAO0B,UAAUpK,SAG3B81B,OAAQ,WACP,MAAOl2B,MAAKm2B,SAAU3rB,UAAW,SAAUzJ,GAC1C,GAAuB,IAAlBf,KAAKQ,UAAoC,KAAlBR,KAAKQ,UAAqC,IAAlBR,KAAKQ,SAAiB,CACzE,GAAIsS,GAASlM,EAAoB5G,KAAMe,EACvC+R,GAAO/L,YAAahG,OAKvBq1B,QAAS,WACR,MAAOp2B,MAAKm2B,SAAU3rB,UAAW,SAAUzJ,GAC1C,GAAuB,IAAlBf,KAAKQ,UAAoC,KAAlBR,KAAKQ,UAAqC,IAAlBR,KAAKQ,SAAiB,CACzE,GAAIsS,GAASlM,EAAoB5G,KAAMe,EACvC+R,GAAOujB,aAAct1B,EAAM+R,EAAOhM,gBAKrCwvB,OAAQ,WACP,MAAOt2B,MAAKm2B,SAAU3rB,UAAW,SAAUzJ,GACrCf,KAAKyI,YACTzI,KAAKyI,WAAW4tB,aAAct1B,EAAMf,SAKvCu2B,MAAO,WACN,MAAOv2B,MAAKm2B,SAAU3rB,UAAW,SAAUzJ,GACrCf,KAAKyI,YACTzI,KAAKyI,WAAW4tB,aAAct1B,EAAMf,KAAKqb,gBAK5CqO,OAAQ,SAAU/T,EAAU6gB,GAK3B,IAJA,GAAIz1B,GACHgF,EAAQ4P,EAAWrV,GAAOc,OAAQuU,EAAU3V,MAASA,KACrDgB,EAAI,EAEwB,OAApBD,EAAOgF,EAAM/E,IAAaA,IAE5Bw1B,GAA8B,IAAlBz1B,EAAKP,UACtBF,GAAOwE,UAAWc,EAAQ7E,IAGtBA,EAAK0H,aACJ+tB,GAAYl2B,GAAOiZ,SAAUxY,EAAKiG,cAAejG,IACrDyG,EAAe5B,EAAQ7E,EAAM,WAE9BA,EAAK0H,WAAWkS,YAAa5Z,GAI/B,OAAOf,OAGR+O,MAAO,WAIN,IAHA,GAAIhO,GACHC,EAAI,EAEuB,OAAnBD,EAAOf,KAAKgB,IAAaA,IAAM,CAOvC,IALuB,IAAlBD,EAAKP,UACTF,GAAOwE,UAAWc,EAAQ7E,GAAM,IAIzBA,EAAK+F,YACZ/F,EAAK4Z,YAAa5Z,EAAK+F,WAKnB/F,GAAKW,SAAWpB,GAAO+F,SAAUtF,EAAM,YAC3CA,EAAKW,QAAQtB,OAAS,GAIxB,MAAOJ,OAGRoX,MAAO,SAAUke,EAAeC,GAI/B,MAHAD,GAAiC,MAAjBA,GAAwB,EAAQA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDv1B,KAAK4E,IAAI,WACf,MAAOtE,IAAO8W,MAAOpX,KAAMs1B,EAAeC,MAI5CkB,KAAM,SAAU3tB,GACf,MAAO4jB,IAAQ1sB,KAAM,SAAU8I,GAC9B,GAAI/H,GAAOf,KAAM,OAChBgB,EAAI,EACJ+G,EAAI/H,KAAKI,MAEV,IAAeyC,SAAViG,EACJ,MAAyB,KAAlB/H,EAAKP,SACXO,EAAK6H,UAAU7F,QAAS4wB,GAAe,IACvC9wB,MAIF,MAAsB,gBAAViG,IAAuBorB,GAAa/yB,KAAM2H,KACnD/D,GAAQmoB,eAAkB0G,GAAazyB,KAAM2H,KAC7C/D,GAAQioB,mBAAsB6G,GAAmB1yB,KAAM2H,IACxDwrB,IAAUP,GAASzsB,KAAMwB,KAAa,GAAI,KAAO,GAAI7F,gBAAkB,CAExE6F,EAAQA,EAAM/F,QAAS+wB,GAAW,YAElC,KACC,KAAW/rB,EAAJ/G,EAAOA,IAEbD,EAAOf,KAAKgB,OACW,IAAlBD,EAAKP,WACTF,GAAOwE,UAAWc,EAAQ7E,GAAM,IAChCA,EAAK6H,UAAYE,EAInB/H,GAAO,EAGN,MAAMsC,KAGJtC,GACJf,KAAK+O,QAAQmnB,OAAQptB,IAEpB,KAAMA,EAAO0B,UAAUpK,SAG3Bs2B,YAAa,WACZ,GAAIne,GAAM/N,UAAW,EAcrB,OAXAxK,MAAKm2B,SAAU3rB,UAAW,SAAUzJ,GACnCwX,EAAMvY,KAAKyI,WAEXnI,GAAOwE,UAAWc,EAAQ5F,OAErBuY,GACJA,EAAIoe,aAAc51B,EAAMf,QAKnBuY,IAAQA,EAAInY,QAAUmY,EAAI/X,UAAYR,KAAOA,KAAK0pB,UAG1DxnB,OAAQ,SAAUyT,GACjB,MAAO3V,MAAK0pB,OAAQ/T,GAAU,IAG/BwgB,SAAU,SAAUzf,EAAMD,GAGzBC,EAAO/R,EAAO4F,SAAWmM,EAEzB,IAAIC,GAAO+K,EAAMkV,EAChBhB,EAASzsB,EAAK4jB,EACd/rB,EAAI,EACJ+G,EAAI/H,KAAKI,OACTy2B,EAAM72B,KACN82B,EAAW/uB,EAAI,EACfe,EAAQ4N,EAAK,GACb7V,EAAaP,GAAOO,WAAYiI,EAGjC,IAAKjI,GACDkH,EAAI,GAAsB,gBAAVe,KAChB/D,GAAQuoB,YAAc6G,GAAShzB,KAAM2H,GACxC,MAAO9I,MAAK6B,KAAK,SAAUuJ,GAC1B,GAAIoc,GAAOqP,EAAIjgB,GAAIxL,EACdvK,KACJ6V,EAAK,GAAK5N,EAAM7H,KAAMjB,KAAMoL,EAAOoc,EAAKiP,SAEzCjP,EAAK2O,SAAUzf,EAAMD,IAIvB,IAAK1O,IACJglB,EAAWzsB,GAAOq1B,cAAejf,EAAM1W,KAAM,GAAIgH,eAAe,EAAOhH,MACvE2W,EAAQoW,EAASjmB,WAEmB,IAA/BimB,EAAS3mB,WAAWhG,SACxB2sB,EAAWpW,GAGPA,GAAQ,CAMZ,IALAif,EAAUt1B,GAAOsE,IAAKgB,EAAQmnB,EAAU,UAAY9lB,GACpD2vB,EAAahB,EAAQx1B,OAIT2H,EAAJ/G,EAAOA,IACd0gB,EAAOqL,EAEF/rB,IAAM81B,IACVpV,EAAOphB,GAAO8W,MAAOsK,GAAM,GAAM,GAG5BkV,GACJt2B,GAAOiG,MAAOqvB,EAAShwB,EAAQ8b,EAAM,YAIvCjL,EAASxV,KAAMjB,KAAKgB,GAAI0gB,EAAM1gB,EAG/B,IAAK41B,EAOJ,IANAztB,EAAMysB,EAASA,EAAQx1B,OAAS,GAAI4G,cAGpC1G,GAAOsE,IAAKgxB,EAASxuB,GAGfpG,EAAI,EAAO41B,EAAJ51B,EAAgBA,IAC5B0gB,EAAOkU,EAAS50B,GACXozB,GAAYjzB,KAAMugB,EAAKrhB,MAAQ,MAClCC,GAAOoH,MAAOga,EAAM,eAAkBphB,GAAOiZ,SAAUpQ,EAAKuY,KAExDA,EAAK9Z,IAEJtH,GAAOy2B,UACXz2B,GAAOy2B,SAAUrV,EAAK9Z,KAGvBtH,GAAOsX,YAAc8J,EAAKlZ,MAAQkZ,EAAK+B,aAAe/B,EAAK9Y,WAAa,IAAK7F,QAASsxB,GAAc,KAOxGtH,GAAWpW,EAAQ,KAIrB,MAAO3W,SAITM,GAAOuB,MACNwH,SAAU,SACV2tB,UAAW,UACXX,aAAc,SACdY,YAAa,QACbC,WAAY,eACV,SAAUp0B,EAAMmuB,GAClB3wB,GAAOsV,GAAI9S,GAAS,SAAU6S,GAO7B,IANA,GAAI5P,GACH/E,EAAI,EACJ2C,KACAwzB,EAAS72B,GAAQqV,GACjBkB,EAAOsgB,EAAO/2B,OAAS,EAEXyW,GAAL7V,EAAWA,IAClB+E,EAAQ/E,IAAM6V,EAAO7W,KAAOA,KAAKoX,OAAM,GACvC9W,GAAQ62B,EAAOn2B,IAAMiwB,GAAYlrB,GAGjCO,EAAKiE,MAAO5G,EAAKoC,EAAMsE,MAGxB,OAAOrK,MAAKuW,UAAW5S,KAKzB,IAAIiG,IACHD,OA8DD,WACC,GAAIytB,EAEJryB,IAAQwK,iBAAmB,WAC1B,GAA4B,MAAvB6nB,EACJ,MAAOA,EAIRA,IAAsB,CAGtB,IAAI1c,GAAKpR,EAAMoiB,CAGf,OADApiB,GAAO1J,GAASqG,qBAAsB,QAAU,GAC1CqD,GAASA,EAAKF,OAMpBsR,EAAM9a,GAAS+F,cAAe,OAC9B+lB,EAAY9rB,GAAS+F,cAAe,OACpC+lB,EAAUtiB,MAAMuiB,QAAU,iEAC1BriB,EAAKvC,YAAa2kB,GAAY3kB,YAAa2T,SAI/BA,GAAItR,MAAMkG,OAASpJ,KAE9BwU,EAAItR,MAAMuiB,QAGT,iJAGDjR,EAAI3T,YAAanH,GAAS+F,cAAe,QAAUyD,MAAMwE,MAAQ,MACjEwpB,EAA0C,IAApB1c,EAAItO,aAG3B9C,EAAKqR,YAAa+Q,GAEX0L,GA3BP,UA+BF,IAMI9qB,IAAWE,GANX6qB,GAAU,UAEV5qB,GAAY,GAAIuT,QAAQ,KAAOuM,GAAO,kBAAmB,KAK5D+K,GAAY,2BAERv3B,GAAOw3B,kBACXjrB,GAAY,SAAUvL,GACrB,MAAOA,GAAKiG,cAAcmO,YAAYoiB,iBAAkBx2B,EAAM,OAG/DyL,GAAS,SAAUzL,EAAM+B,EAAM00B,GAC9B,GAAI5pB,GAAO6pB,EAAUC,EAAU/zB,EAC9ByF,EAAQrI,EAAKqI,KAqCd,OAnCAouB,GAAWA,GAAYlrB,GAAWvL,GAGlC4C,EAAM6zB,EAAWA,EAASG,iBAAkB70B,IAAU00B,EAAU10B,GAASD,OAEpE20B,IAES,KAAR7zB,GAAerD,GAAOiZ,SAAUxY,EAAKiG,cAAejG,KACxD4C,EAAMrD,GAAO8I,MAAOrI,EAAM+B,IAOtB2J,GAAUtL,KAAMwC,IAAS0zB,GAAQl2B,KAAM2B,KAG3C8K,EAAQxE,EAAMwE,MACd6pB,EAAWruB,EAAMquB,SACjBC,EAAWtuB,EAAMsuB,SAGjBtuB,EAAMquB,SAAWruB,EAAMsuB,SAAWtuB,EAAMwE,MAAQjK,EAChDA,EAAM6zB,EAAS5pB,MAGfxE,EAAMwE,MAAQA,EACdxE,EAAMquB,SAAWA,EACjBruB,EAAMsuB,SAAWA,IAMJ70B,SAARc,EACNA,EACAA,EAAM,KAEG/D,GAASiK,gBAAgB+tB,eACpCtrB,GAAY,SAAUvL,GACrB,MAAOA,GAAK62B,cAGbprB,GAAS,SAAUzL,EAAM+B,EAAM00B,GAC9B,GAAIK,GAAMC,EAAIC,EAAQp0B,EACrByF,EAAQrI,EAAKqI,KAyCd,OAvCAouB,GAAWA,GAAYlrB,GAAWvL,GAClC4C,EAAM6zB,EAAWA,EAAU10B,GAASD,OAIxB,MAAPc,GAAeyF,GAASA,EAAOtG,KACnCa,EAAMyF,EAAOtG,IAUT2J,GAAUtL,KAAMwC,KAAU2zB,GAAUn2B,KAAM2B,KAG9C+0B,EAAOzuB,EAAMyuB,KACbC,EAAK/2B,EAAKi3B,aACVD,EAASD,GAAMA,EAAGD,KAGbE,IACJD,EAAGD,KAAO92B,EAAK62B,aAAaC,MAE7BzuB,EAAMyuB,KAAgB,aAAT/0B,EAAsB,MAAQa,EAC3CA,EAAMyF,EAAM6uB,UAAY,KAGxB7uB,EAAMyuB,KAAOA,EACRE,IACJD,EAAGD,KAAOE,IAMGl1B,SAARc,EACNA,EACAA,EAAM,IAAM,SAmCf,WAkEC,QAASu0B,KAER,GAAIxd,GAAKpR,EAAMoiB,EAAWlY,CAE1BlK,GAAO1J,GAASqG,qBAAsB,QAAU,GAC1CqD,GAASA,EAAKF,QAMpBsR,EAAM9a,GAAS+F,cAAe,OAC9B+lB,EAAY9rB,GAAS+F,cAAe,OACpC+lB,EAAUtiB,MAAMuiB,QAAU,iEAC1BriB,EAAKvC,YAAa2kB,GAAY3kB,YAAa2T,GAE3CA,EAAItR,MAAMuiB,QAGT,uKAMDwM,EAAmBC,GAAuB,EAC1CC,GAAyB,EAGpBt4B,EAAOw3B,mBACXY,EAA0E,QAArDp4B,EAAOw3B,iBAAkB7c,EAAK,WAAemH,IAClEuW,EACwE,SAArEr4B,EAAOw3B,iBAAkB7c,EAAK,QAAY9M,MAAO,QAAUA,MAM9D4F,EAAWkH,EAAI3T,YAAanH,GAAS+F,cAAe,QAGpD6N,EAASpK,MAAMuiB,QAAUjR,EAAItR,MAAMuiB,QAGlC,8HAEDnY,EAASpK,MAAMkvB,YAAc9kB,EAASpK,MAAMwE,MAAQ,IACpD8M,EAAItR,MAAMwE,MAAQ,MAElByqB,GACE1rB,YAAc5M,EAAOw3B,iBAAkB/jB,EAAU,WAAe8kB,cAUnE5d,EAAI9R,UAAY,8CAChB4K,EAAWkH,EAAIzU,qBAAsB,MACrCuN,EAAU,GAAIpK,MAAMuiB,QAAU,2CAC9B4M,EAA0D,IAA/B/kB,EAAU,GAAInH,aACpCksB,IACJ/kB,EAAU,GAAIpK,MAAMG,QAAU,GAC9BiK,EAAU,GAAIpK,MAAMG,QAAU,OAC9BgvB,EAA0D,IAA/B/kB,EAAU,GAAInH,cAG1C/C,EAAKqR,YAAa+Q,IAtInB,GAAIhR,GAAKtR,EAAO4R,EAAGmd,EAAkBC,EACpCG,EAA0BF,CAG3B3d,GAAM9a,GAAS+F,cAAe,OAC9B+U,EAAI9R,UAAY,qEAChBoS,EAAIN,EAAIzU,qBAAsB,KAAO,GACrCmD,EAAQ4R,GAAKA,EAAE5R,MAGTA,IAINA,EAAMuiB,QAAU,wBAIhB5mB,GAAQ4I,QAA4B,QAAlBvE,EAAMuE,QAIxB5I,GAAQyzB,WAAapvB,EAAMovB,SAE3B9d,EAAItR,MAAMqvB,eAAiB,cAC3B/d,EAAIyS,WAAW,GAAO/jB,MAAMqvB,eAAiB,GAC7C1zB,GAAQ2zB,gBAA+C,gBAA7Bhe,EAAItR,MAAMqvB,eAIpC1zB,GAAQwH,UAAgC,KAApBnD,EAAMmD,WAA2C,KAAvBnD,EAAMuvB,cACzB,KAA1BvvB,EAAMwvB,gBAEPt4B,GAAOiE,OAAOQ,IACb8zB,sBAAuB,WAItB,MAHiC,OAA5BN,GACJL,IAEMK,GAGR7rB,kBAAmB,WAIlB,MAH6B,OAAxB0rB,GACJF,IAEME,GAGRU,cAAe,WAId,MAHyB,OAApBX,GACJD,IAEMC,GAIRY,oBAAqB,WAIpB,MAH+B,OAA1BV,GACJH,IAEMG,SAiFV/3B,GAAO04B,KAAO,SAAUj4B,EAAMW,EAAS+U,EAAUC,GAChD,GAAI/S,GAAKb,EACRgW,IAGD,KAAMhW,IAAQpB,GACboX,EAAKhW,GAAS/B,EAAKqI,MAAOtG,GAC1B/B,EAAKqI,MAAOtG,GAASpB,EAASoB,EAG/Ba,GAAM8S,EAASlM,MAAOxJ,EAAM2V,MAG5B,KAAM5T,IAAQpB,GACbX,EAAKqI,MAAOtG,GAASgW,EAAKhW,EAG3B,OAAOa,GAIR,IACEs1B,IAAS,kBACVC,GAAW,wBAIXC,GAAe,4BACf1tB,GAAY,GAAIuU,QAAQ,KAAOuM,GAAO,SAAU,KAChD6M,GAAU,GAAIpZ,QAAQ,YAAcuM,GAAO,IAAK,KAEhD8M,IAAYC,SAAU,WAAYC,WAAY,SAAUhwB,QAAS,SACjEiwB,IACCC,cAAe,IACfC,WAAY,OAGb3uB,IAAgB,SAAU,IAAK,MAAO,KAuKvCzK,IAAOiE,QAGNwL,UACCpC,SACCtD,IAAK,SAAUtJ,EAAMy2B,GACpB,GAAKA,EAAW,CAEf,GAAI7zB,GAAM6I,GAAQzL,EAAM,UACxB,OAAe,KAAR4C,EAAa,IAAMA,MAO9Bg2B,WACCC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdL,YAAc,EACdM,YAAc,EACdrsB,SAAW,EACXssB,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACV9qB,MAAQ,GAKT+qB,UAECC,QAASv1B,GAAQyzB,SAAW,WAAa,cAI1CpvB,MAAO,SAAUrI,EAAM+B,EAAMgG,EAAO+C,GAEnC,GAAM9K,GAA0B,IAAlBA,EAAKP,UAAoC,IAAlBO,EAAKP,UAAmBO,EAAKqI,MAAlE,CAKA,GAAIzF,GAAKtD,EAAMiO,EACdxD,EAAWxK,GAAOkE,UAAW1B,GAC7BsG,EAAQrI,EAAKqI,KASd,IAPAtG,EAAOxC,GAAO+5B,SAAUvvB,KAAgBxK,GAAO+5B,SAAUvvB,GAAaL,EAAgBrB,EAAO0B,IAI7FwD,EAAQhO,GAAOyP,SAAUjN,IAAUxC,GAAOyP,SAAUjF,GAGrCjI,SAAViG,EAsCJ,MAAKwF,IAAS,OAASA,IAAqDzL,UAA3Cc,EAAM2K,EAAMjE,IAAKtJ,GAAM,EAAO8K,IACvDlI,EAIDyF,EAAOtG,EAhCd,IAVAzC,QAAcyI,GAGA,WAATzI,IAAsBsD,EAAMy1B,GAAQ9xB,KAAMwB,MAC9CA,GAAUnF,EAAI,GAAK,GAAMA,EAAI,GAAKgJ,WAAYrM,GAAOmJ,IAAK1I,EAAM+B,IAEhEzC,EAAO,UAIM,MAATyI,GAAiBA,IAAUA,IAKlB,WAATzI,GAAsBC,GAAOq5B,UAAW7uB,KAC5ChC,GAAS,MAKJ/D,GAAQ2zB,iBAA6B,KAAV5vB,GAA+C,IAA/BhG,EAAKuS,QAAQ,gBAC7DjM,EAAOtG,GAAS,aAIXwL,GAAW,OAASA,IAAwDzL,UAA7CiG,EAAQwF,EAAMuoB,IAAK91B,EAAM+H,EAAO+C,MAIpE,IACCzC,EAAOtG,GAASgG,EACf,MAAMzF,OAcXoG,IAAK,SAAU1I,EAAM+B,EAAM+I,EAAOE,GACjC,GAAIuK,GAAKtK,EAAKsC,EACbxD,EAAWxK,GAAOkE,UAAW1B,EAyB9B,OAtBAA,GAAOxC,GAAO+5B,SAAUvvB,KAAgBxK,GAAO+5B,SAAUvvB,GAAaL,EAAgB1J,EAAKqI,MAAO0B,IAIlGwD,EAAQhO,GAAOyP,SAAUjN,IAAUxC,GAAOyP,SAAUjF,GAG/CwD,GAAS,OAASA,KACtBtC,EAAMsC,EAAMjE,IAAKtJ,GAAM,EAAM8K,IAIjBhJ,SAARmJ,IACJA,EAAMQ,GAAQzL,EAAM+B,EAAMiJ,IAId,WAARC,GAAoBlJ,IAAQ02B,MAChCxtB,EAAMwtB,GAAoB12B,IAIZ,KAAV+I,GAAgBA,GACpByK,EAAM3J,WAAYX,GACXH,KAAU,GAAQvL,GAAOoX,UAAWpB,GAAQA,GAAO,EAAItK,GAExDA,KAIT1L,GAAOuB,MAAO,SAAU,SAAW,SAAUb,EAAG8B,GAC/CxC,GAAOyP,SAAUjN,IAChBuH,IAAK,SAAUtJ,EAAMy2B,EAAU3rB,GAC9B,MAAK2rB,GAGG2B,GAAah4B,KAAMb,GAAOmJ,IAAK1I,EAAM,aAAsC,IAArBA,EAAKqL,YACjE9L,GAAO04B,KAAMj4B,EAAMs4B,GAAS,WAC3B,MAAOntB,GAAkBnL,EAAM+B,EAAM+I,KAEtCK,EAAkBnL,EAAM+B,EAAM+I,GAPhC,QAWDgrB,IAAK,SAAU91B,EAAM+H,EAAO+C,GAC3B,GAAIE,GAASF,GAASS,GAAWvL,EACjC,OAAOuK,GAAmBvK,EAAM+H,EAAO+C,EACtCD,EACC7K,EACA+B,EACA+I,EACA9G,GAAQwH,WAAgE,eAAnDjM,GAAOmJ,IAAK1I,EAAM,aAAa,EAAOgL,GAC3DA,GACG,OAMFhH,GAAQ4I,UACbrN,GAAOyP,SAASpC,SACftD,IAAK,SAAUtJ,EAAMy2B,GAEpB,MAAO0B,IAAS/3B,MAAOq2B,GAAYz2B,EAAK62B,aAAe72B,EAAK62B,aAAax2B,OAASL,EAAKqI,MAAMhI,SAAW,IACrG,IAAOuL,WAAYqT,OAAOua,IAAS,GACrC/C,EAAW,IAAM,IAGnBX,IAAK,SAAU91B,EAAM+H,GACpB,GAAIM,GAAQrI,EAAKqI,MAChBwuB,EAAe72B,EAAK62B,aACpBjqB,EAAUrN,GAAOoX,UAAW5O,GAAU,iBAA2B,IAARA,EAAc,IAAM,GAC7E1H,EAASw2B,GAAgBA,EAAax2B,QAAUgI,EAAMhI,QAAU,EAIjEgI,GAAMkG,KAAO,GAINxG,GAAS,GAAe,KAAVA,IAC6B,KAAhDxI,GAAOuI,KAAMzH,EAAO2B,QAASk2B,GAAQ,MACrC7vB,EAAM7B,kBAKP6B,EAAM7B,gBAAiB,UAGR,KAAVuB,GAAgB8uB,IAAiBA,EAAax2B,UAMpDgI,EAAMhI,OAAS63B,GAAO93B,KAAMC,GAC3BA,EAAO2B,QAASk2B,GAAQtrB,GACxBvM,EAAS,IAAMuM,MAKnBrN,GAAOyP,SAASuoB,YAAcpuB,EAAcnF,GAAQg0B,oBACnD,SAAUh4B,EAAMy2B,GACf,MAAKA,GAGGl3B,GAAO04B,KAAMj4B,GAAQwI,QAAW,gBACtCiD,IAAUzL,EAAM,gBAJlB,SAUFT,GAAOuB,MACN24B,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUhmB,EAAQimB,GACpBr6B,GAAOyP,SAAU2E,EAASimB,IACzB3qB,OAAQ,SAAUlH,GAOjB,IANA,GAAI9H,GAAI,EACP45B,KAGAC,EAAyB,gBAAV/xB,GAAqBA,EAAMjE,MAAM,MAASiE,GAE9C,EAAJ9H,EAAOA,IACd45B,EAAUlmB,EAASzI,GAAWjL,GAAM25B,GACnCE,EAAO75B,IAAO65B,EAAO75B,EAAI,IAAO65B,EAAO,EAGzC,OAAOD,KAIHvD,GAAQl2B,KAAMuT,KACnBpU,GAAOyP,SAAU2E,EAASimB,GAAS9D,IAAMvrB,KAI3ChL,GAAOsV,GAAGrR,QACTkF,IAAK,SAAU3G,EAAMgG,GACpB,MAAO4jB,IAAQ1sB,KAAM,SAAUe,EAAM+B,EAAMgG,GAC1C,GAAIiD,GAAQ+K,EACXlS,KACA5D,EAAI,CAEL,IAAKV,GAAOoE,QAAS5B,GAAS,CAI7B,IAHAiJ,EAASO,GAAWvL,GACpB+V,EAAMhU,EAAK1C,OAEC0W,EAAJ9V,EAASA,IAChB4D,EAAK9B,EAAM9B,IAAQV,GAAOmJ,IAAK1I,EAAM+B,EAAM9B,IAAK,EAAO+K,EAGxD,OAAOnH,GAGR,MAAiB/B,UAAViG,EACNxI,GAAO8I,MAAOrI,EAAM+B,EAAMgG,GAC1BxI,GAAOmJ,IAAK1I,EAAM+B,IACjBA,EAAMgG,EAAO0B,UAAUpK,OAAS,IAEpC6K,KAAM,WACL,MAAOD,GAAUhL,MAAM,IAExB0P,KAAM,WACL,MAAO1E,GAAUhL,OAElBqO,OAAQ,SAAUkG,GACjB,MAAsB,iBAAVA,GACJA,EAAQvU,KAAKiL,OAASjL,KAAK0P,OAG5B1P,KAAK6B,KAAK,WACXwJ,GAAUrL,MACdM,GAAQN,MAAOiL,OAEf3K,GAAQN,MAAO0P,YAUnBpP,GAAOsM,MAAQA,EAEfA,EAAMI,WACLoJ,YAAaxJ,EACbK,KAAM,SAAUlM,EAAMW,EAASmL,EAAMC,EAAKC,EAAQ+tB,GACjD96B,KAAKe,KAAOA,EACZf,KAAK6M,KAAOA,EACZ7M,KAAK+M,OAASA,GAAU,QACxB/M,KAAK0B,QAAUA,EACf1B,KAAK4P,MAAQ5P,KAAKqN,IAAMrN,KAAKuB,MAC7BvB,KAAK8M,IAAMA,EACX9M,KAAK86B,KAAOA,IAAUx6B,GAAOq5B,UAAW9sB,GAAS,GAAK,OAEvDtL,IAAK,WACJ,GAAI+M,GAAQ1B,EAAMmuB,UAAW/6B,KAAK6M,KAElC,OAAOyB,IAASA,EAAMjE,IACrBiE,EAAMjE,IAAKrK,MACX4M,EAAMmuB,UAAU/K,SAAS3lB,IAAKrK,OAEhCgR,IAAK,SAAUF,GACd,GAAIkqB,GACH1sB,EAAQ1B,EAAMmuB,UAAW/6B,KAAK6M,KAoB/B,OAjBC7M,MAAKqoB,IAAM2S,EADPh7B,KAAK0B,QAAQkP,SACEtQ,GAAOyM,OAAQ/M,KAAK+M,QACtC+D,EAAS9Q,KAAK0B,QAAQkP,SAAWE,EAAS,EAAG,EAAG9Q,KAAK0B,QAAQkP,UAG3CE,EAEpB9Q,KAAKqN,KAAQrN,KAAK8M,IAAM9M,KAAK4P,OAAUorB,EAAQh7B,KAAK4P,MAE/C5P,KAAK0B,QAAQu5B,MACjBj7B,KAAK0B,QAAQu5B,KAAKh6B,KAAMjB,KAAKe,KAAMf,KAAKqN,IAAKrN,MAGzCsO,GAASA,EAAMuoB,IACnBvoB,EAAMuoB,IAAK72B,MAEX4M,EAAMmuB,UAAU/K,SAAS6G,IAAK72B,MAExBA,OAIT4M,EAAMI,UAAUC,KAAKD,UAAYJ,EAAMI,UAEvCJ,EAAMmuB,WACL/K,UACC3lB,IAAK,SAAU0D,GACd,GAAIoC,EAEJ,OAAiC,OAA5BpC,EAAMhN,KAAMgN,EAAMlB,OACpBkB,EAAMhN,KAAKqI,OAA2C,MAAlC2E,EAAMhN,KAAKqI,MAAO2E,EAAMlB,OAQ/CsD,EAAS7P,GAAOmJ,IAAKsE,EAAMhN,KAAMgN,EAAMlB,KAAM,IAErCsD,GAAqB,SAAXA,EAAwBA,EAAJ,GAT9BpC,EAAMhN,KAAMgN,EAAMlB,OAW3BgqB,IAAK,SAAU9oB,GAGTzN,GAAOmR,GAAGwpB,KAAMltB,EAAMlB,MAC1BvM,GAAOmR,GAAGwpB,KAAMltB,EAAMlB,MAAQkB,GACnBA,EAAMhN,KAAKqI,QAAgE,MAArD2E,EAAMhN,KAAKqI,MAAO9I,GAAO+5B,SAAUtsB,EAAMlB,QAAoBvM,GAAOyP,SAAUhC,EAAMlB,OACrHvM,GAAO8I,MAAO2E,EAAMhN,KAAMgN,EAAMlB,KAAMkB,EAAMV,IAAMU,EAAM+sB,MAExD/sB,EAAMhN,KAAMgN,EAAMlB,MAASkB,EAAMV,OASrCT,EAAMmuB,UAAUnJ,UAAYhlB,EAAMmuB,UAAUvJ,YAC3CqF,IAAK,SAAU9oB,GACTA,EAAMhN,KAAKP,UAAYuN,EAAMhN,KAAK0H,aACtCsF,EAAMhN,KAAMgN,EAAMlB,MAASkB,EAAMV,OAKpC/M,GAAOyM,QACNmuB,OAAQ,SAAUC,GACjB,MAAOA,IAERC,MAAO,SAAUD,GAChB,MAAO,GAAMzvB,KAAK2vB,IAAKF,EAAIzvB,KAAK4vB,IAAO,IAIzCh7B,GAAOmR,GAAK7E,EAAMI,UAAUC,KAG5B3M,GAAOmR,GAAGwpB,OAKV,IACC7tB,IAAOmuB,GACP/rB,GAAW,yBACXgsB,GAAS,GAAIxb,QAAQ,iBAAmBuM,GAAO,cAAe,KAC9DkP,GAAO,cACPprB,IAAwBnC,GACxBD,IACCytB,KAAO,SAAU7uB,EAAM/D,GACtB,GAAIiF,GAAQ/N,KAAK6N,YAAahB,EAAM/D,GACnCgK,EAAS/E,EAAMxM,MACfs5B,EAAQW,GAAOl0B,KAAMwB,GACrBgyB,EAAOD,GAASA,EAAO,KAASv6B,GAAOq5B,UAAW9sB,GAAS,GAAK,MAGhE+C,GAAUtP,GAAOq5B,UAAW9sB,IAAmB,OAATiuB,IAAkBhoB,IACvD0oB,GAAOl0B,KAAMhH,GAAOmJ,IAAKsE,EAAMhN,KAAM8L,IACtC8uB,EAAQ,EACRC,EAAgB,EAEjB,IAAKhsB,GAASA,EAAO,KAAQkrB,EAAO,CAEnCA,EAAOA,GAAQlrB,EAAO,GAGtBirB,EAAQA,MAGRjrB,GAASkD,GAAU,CAEnB,GAGC6oB,GAAQA,GAAS,KAGjB/rB,GAAgB+rB,EAChBr7B,GAAO8I,MAAO2E,EAAMhN,KAAM8L,EAAM+C,EAAQkrB,SAI/Ba,KAAWA,EAAQ5tB,EAAMxM,MAAQuR,IAAqB,IAAV6oB,KAAiBC,GAaxE,MATKf,KACJjrB,EAAQ7B,EAAM6B,OAASA,IAAUkD,GAAU,EAC3C/E,EAAM+sB,KAAOA,EAEb/sB,EAAMjB,IAAM+tB,EAAO,GAClBjrB,GAAUirB,EAAO,GAAM,GAAMA,EAAO,IACnCA,EAAO,IAGH9sB,IA0UVzN,IAAO2P,UAAY3P,GAAOiE,OAAQ0L,GACjC4rB,QAAS,SAAU1tB,EAAOsI,GACpBnW,GAAOO,WAAYsN,IACvBsI,EAAWtI,EACXA,GAAU,MAEVA,EAAQA,EAAMtJ,MAAM,IAOrB,KAJA,GAAIgI,GACHzB,EAAQ,EACRhL,EAAS+N,EAAM/N,OAEAA,EAARgL,EAAiBA,IACxByB,EAAOsB,EAAO/C,GACd6C,GAAUpB,GAASoB,GAAUpB,OAC7BoB,GAAUpB,GAAOuF,QAASqE,IAI5BqlB,UAAW,SAAUrlB,EAAU2f,GACzBA,EACJ/lB,GAAoB+B,QAASqE,GAE7BpG,GAAoB/J,KAAMmQ,MAK7BnW,GAAOy7B,MAAQ,SAAUA,EAAOhvB,EAAQ6I,GACvC,GAAIomB,GAAMD,GAA0B,gBAAVA,GAAqBz7B,GAAOiE,UAAYw3B,IACjEnqB,SAAUgE,IAAOA,GAAM7I,GACtBzM,GAAOO,WAAYk7B,IAAWA,EAC/BnrB,SAAUmrB,EACVhvB,OAAQ6I,GAAM7I,GAAUA,IAAWzM,GAAOO,WAAYkM,IAAYA,EAwBnE,OArBAivB,GAAIprB,SAAWtQ,GAAOmR,GAAG6Z,IAAM,EAA4B,gBAAjB0Q,GAAIprB,SAAwBorB,EAAIprB,SACzEorB,EAAIprB,WAAYtQ,IAAOmR,GAAGwqB,OAAS37B,GAAOmR,GAAGwqB,OAAQD,EAAIprB,UAAatQ,GAAOmR,GAAGwqB,OAAOjM,UAGtE,MAAbgM,EAAIptB,OAAiBotB,EAAIptB,SAAU,KACvCotB,EAAIptB,MAAQ,MAIbotB,EAAIljB,IAAMkjB,EAAIpqB,SAEdoqB,EAAIpqB,SAAW,WACTtR,GAAOO,WAAYm7B,EAAIljB,MAC3BkjB,EAAIljB,IAAI7X,KAAMjB,MAGVg8B,EAAIptB,OACRtO,GAAO2rB,QAASjsB,KAAMg8B,EAAIptB,QAIrBotB,GAGR17B,GAAOsV,GAAGrR,QACT23B,OAAQ,SAAUH,EAAOI,EAAIpvB,EAAQ0J,GAGpC,MAAOzW,MAAKoB,OAAQiK,IAAW5B,IAAK,UAAW,GAAIwB,OAGjD6B,MAAMsvB,SAAUzuB,QAASwuB,GAAMJ,EAAOhvB,EAAQ0J,IAEjD2lB,QAAS,SAAUvvB,EAAMkvB,EAAOhvB,EAAQ0J,GACvC,GAAI1H,GAAQzO,GAAOiD,cAAesJ,GACjCwvB,EAAS/7B,GAAOy7B,MAAOA,EAAOhvB,EAAQ0J,GACtC6lB,EAAc,WAEb,GAAI7tB,GAAOwB,EAAWjQ,KAAMM,GAAOiE,UAAYsI,GAAQwvB,IAGlDttB,GAASzO,GAAOoH,MAAO1H,KAAM,YACjCyO,EAAK6C,MAAM,GAKd,OAFCgrB,GAAYC,OAASD,EAEfvtB,GAASstB,EAAOztB,SAAU,EAChC5O,KAAK6B,KAAMy6B,GACXt8B,KAAK4O,MAAOytB,EAAOztB,MAAO0tB,IAE5BhrB,KAAM,SAAUjR,EAAM+rB,EAAY7a,GACjC,GAAIirB,GAAY,SAAUluB,GACzB,GAAIgD,GAAOhD,EAAMgD,WACVhD,GAAMgD,KACbA,EAAMC,GAYP,OATqB,gBAATlR,KACXkR,EAAU6a,EACVA,EAAa/rB,EACbA,EAAOwC,QAEHupB,GAAc/rB,KAAS,GAC3BL,KAAK4O,MAAOvO,GAAQ,SAGdL,KAAK6B,KAAK,WAChB,GAAIoqB,IAAU,EACb7gB,EAAgB,MAAR/K,GAAgBA,EAAO,aAC/Bo8B,EAASn8B,GAAOm8B,OAChB75B,EAAOtC,GAAOoH,MAAO1H,KAEtB,IAAKoL,EACCxI,EAAMwI,IAAWxI,EAAMwI,GAAQkG,MACnCkrB,EAAW55B,EAAMwI,QAGlB,KAAMA,IAASxI,GACTA,EAAMwI,IAAWxI,EAAMwI,GAAQkG,MAAQmqB,GAAKt6B,KAAMiK,IACtDoxB,EAAW55B,EAAMwI,GAKpB,KAAMA,EAAQqxB,EAAOr8B,OAAQgL,KACvBqxB,EAAQrxB,GAAQrK,OAASf,MAAiB,MAARK,GAAgBo8B,EAAQrxB,GAAQwD,QAAUvO,IAChFo8B,EAAQrxB,GAAQqD,KAAK6C,KAAMC,GAC3B0a,GAAU,EACVwQ,EAAOxlB,OAAQ7L,EAAO,KAOnB6gB,IAAY1a,IAChBjR,GAAO2rB,QAASjsB,KAAMK,MAIzBk8B,OAAQ,SAAUl8B,GAIjB,MAHKA,MAAS,IACbA,EAAOA,GAAQ,MAETL,KAAK6B,KAAK,WAChB,GAAIuJ,GACHxI,EAAOtC,GAAOoH,MAAO1H,MACrB4O,EAAQhM,EAAMvC,EAAO,SACrBiO,EAAQ1L,EAAMvC,EAAO,cACrBo8B,EAASn8B,GAAOm8B,OAChBr8B,EAASwO,EAAQA,EAAMxO,OAAS,CAajC,KAVAwC,EAAK25B,QAAS,EAGdj8B,GAAOsO,MAAO5O,KAAMK,MAEfiO,GAASA,EAAMgD,MACnBhD,EAAMgD,KAAKrQ,KAAMjB,MAAM,GAIlBoL,EAAQqxB,EAAOr8B,OAAQgL,KACvBqxB,EAAQrxB,GAAQrK,OAASf,MAAQy8B,EAAQrxB,GAAQwD,QAAUvO,IAC/Do8B,EAAQrxB,GAAQqD,KAAK6C,MAAM,GAC3BmrB,EAAOxlB,OAAQ7L,EAAO,GAKxB,KAAMA,EAAQ,EAAWhL,EAARgL,EAAgBA,IAC3BwD,EAAOxD,IAAWwD,EAAOxD,GAAQmxB,QACrC3tB,EAAOxD,GAAQmxB,OAAOt7B,KAAMjB,YAKvB4C,GAAK25B,YAKfj8B,GAAOuB,MAAO,SAAU,OAAQ,QAAU,SAAUb,EAAG8B,GACtD,GAAI45B,GAAQp8B,GAAOsV,GAAI9S,EACvBxC,IAAOsV,GAAI9S,GAAS,SAAUi5B,EAAOhvB,EAAQ0J,GAC5C,MAAgB,OAATslB,GAAkC,iBAAVA,GAC9BW,EAAMnyB,MAAOvK,KAAMwK,WACnBxK,KAAKo8B,QAAS9uB,EAAOxK,GAAM,GAAQi5B,EAAOhvB,EAAQ0J,MAKrDnW,GAAOuB,MACN86B,UAAWrvB,EAAM,QACjBsvB,QAAStvB,EAAM,QACfuvB,YAAavvB,EAAM,UACnBwvB,QAAUnvB,QAAS,QACnBovB,SAAWpvB,QAAS,QACpBqvB,YAAcrvB,QAAS,WACrB,SAAU7K,EAAMqL,GAClB7N,GAAOsV,GAAI9S,GAAS,SAAUi5B,EAAOhvB,EAAQ0J,GAC5C,MAAOzW,MAAKo8B,QAASjuB,EAAO4tB,EAAOhvB,EAAQ0J,MAI7CnW,GAAOm8B,UACPn8B,GAAOmR,GAAGjB,KAAO,WAChB,GAAIkB,GACH+qB,EAASn8B,GAAOm8B,OAChBz7B,EAAI,CAIL,KAFAoM,GAAQ9M,GAAO+M,MAEPrM,EAAIy7B,EAAOr8B,OAAQY,IAC1B0Q,EAAQ+qB,EAAQz7B,GAEV0Q,KAAW+qB,EAAQz7B,KAAQ0Q,GAChC+qB,EAAOxlB,OAAQjW,IAAK,EAIhBy7B,GAAOr8B,QACZE,GAAOmR,GAAGH,OAEXlE,GAAQvK,QAGTvC,GAAOmR,GAAGC,MAAQ,SAAUA,GAC3BpR,GAAOm8B,OAAOn2B,KAAMoL,GACfA,IACJpR,GAAOmR,GAAG7B,QAEVtP,GAAOm8B,OAAOt4B,OAIhB7D,GAAOmR,GAAGwrB,SAAW,GAErB38B,GAAOmR,GAAG7B,MAAQ,WACX2rB,KACLA,GAAU2B,YAAa58B,GAAOmR,GAAGjB,KAAMlQ,GAAOmR,GAAGwrB,YAInD38B,GAAOmR,GAAGH,KAAO,WAChB6rB,cAAe5B,IACfA,GAAU,MAGXj7B,GAAOmR,GAAGwqB,QACTmB,KAAM,IACNC,KAAM,IAENrN,SAAU,KAMX1vB,GAAOsV,GAAG0nB,MAAQ,SAAUC,EAAMl9B,GAIjC,MAHAk9B,GAAOj9B,GAAOmR,GAAKnR,GAAOmR,GAAGwqB,OAAQsB,IAAUA,EAAOA,EACtDl9B,EAAOA,GAAQ,KAERL,KAAK4O,MAAOvO,EAAM,SAAU0nB,EAAMzZ,GACxC,GAAIkvB,GAAUrwB,WAAY4a,EAAMwV,EAChCjvB,GAAMgD,KAAO,WACZmsB,aAAcD,OAMjB,WAEC,GAAInb,GAAO3H,EAAKP,EAAQa,EAAGghB,CAG3BthB,GAAM9a,GAAS+F,cAAe,OAC9B+U,EAAIb,aAAc,YAAa,KAC/Ba,EAAI9R,UAAY,qEAChBoS,EAAIN,EAAIzU,qBAAqB,KAAM,GAGnCkU,EAASva,GAAS+F,cAAc,UAChCq2B,EAAM7hB,EAAOpT,YAAanH,GAAS+F,cAAc,WACjD0c,EAAQ3H,EAAIzU,qBAAqB,SAAU,GAE3C+U,EAAE5R,MAAMuiB,QAAU,UAGlB5mB,GAAQ24B,gBAAoC,MAAlBhjB,EAAIqH,UAI9Bhd,GAAQqE,MAAQ,MAAMjI,KAAM6Z,EAAE9X,aAAa,UAI3C6B,GAAQ44B,eAA4C,OAA3B3iB,EAAE9X,aAAa,QAGxC6B,GAAQ64B,UAAYvb,EAAMvZ,MAI1B/D,GAAQ84B,YAAc7B,EAAIhzB,SAG1BjE,GAAQ+4B,UAAYl+B,GAAS+F,cAAc,QAAQm4B,QAInD3jB,EAAO0L,UAAW,EAClB9gB,GAAQg5B,aAAe/B,EAAInW,SAI3BxD,EAAQziB,GAAS+F,cAAe,SAChC0c,EAAMxI,aAAc,QAAS,IAC7B9U,GAAQsd,MAA0C,KAAlCA,EAAMnf,aAAc,SAGpCmf,EAAMvZ,MAAQ,IACduZ,EAAMxI,aAAc,OAAQ,SAC5B9U,GAAQi5B,WAA6B,MAAhB3b,EAAMvZ,QAI5B,IAAIm1B,IAAU,KAEd39B,IAAOsV,GAAGrR,QACTyH,IAAK,SAAUlD,GACd,GAAIwF,GAAO3K,EAAK9C,EACfE,EAAOf,KAAK,EAEb,EAAA,GAAMwK,UAAUpK,OAsBhB,MAFAS,GAAaP,GAAOO,WAAYiI,GAEzB9I,KAAK6B,KAAK,SAAUb,GAC1B,GAAIgL,EAEmB,KAAlBhM,KAAKQ,WAKTwL,EADInL,EACEiI,EAAM7H,KAAMjB,KAAMgB,EAAGV,GAAQN,MAAOgM,OAEpClD,EAIK,MAAPkD,EACJA,EAAM,GACoB,gBAARA,GAClBA,GAAO,GACI1L,GAAOoE,QAASsH,KAC3BA,EAAM1L,GAAOsE,IAAKoH,EAAK,SAAUlD,GAChC,MAAgB,OAATA,EAAgB,GAAKA,EAAQ,MAItCwF,EAAQhO,GAAO49B,SAAUl+B,KAAKK,OAAUC,GAAO49B,SAAUl+B,KAAKqG,SAASpD,eAGjEqL,GAAW,OAASA,IAA8CzL,SAApCyL,EAAMuoB,IAAK72B,KAAMgM,EAAK,WACzDhM,KAAK8I,MAAQkD,KAjDd,IAAKjL,EAGJ,MAFAuN,GAAQhO,GAAO49B,SAAUn9B,EAAKV,OAAUC,GAAO49B,SAAUn9B,EAAKsF,SAASpD,eAElEqL,GAAS,OAASA,IAAgDzL,UAAtCc,EAAM2K,EAAMjE,IAAKtJ,EAAM,UAChD4C,GAGRA,EAAM5C,EAAK+H,MAEW,gBAARnF,GAEbA,EAAIZ,QAAQk7B,GAAS,IAEd,MAAPt6B,EAAc,GAAKA,OA0CxBrD,GAAOiE,QACN25B,UACC3J,QACClqB,IAAK,SAAUtJ,GACd,GAAIiL,GAAM1L,GAAO4G,KAAKC,KAAMpG,EAAM,QAClC,OAAc,OAAPiL,EACNA,EAGA1L,GAAOuI,KAAMvI,GAAOkI,KAAMzH,MAG7BoZ,QACC9P,IAAK,SAAUtJ,GAYd,IAXA,GAAI+H,GAAOyrB,EACV7yB,EAAUX,EAAKW,QACf0J,EAAQrK,EAAK+kB,cACb2N,EAAoB,eAAd1yB,EAAKV,MAAiC,EAAR+K,EACpCD,EAASsoB,EAAM,QACf9nB,EAAM8nB,EAAMroB,EAAQ,EAAI1J,EAAQtB,OAChCY,EAAY,EAARoK,EACHO,EACA8nB,EAAMroB,EAAQ,EAGJO,EAAJ3K,EAASA,IAIhB,GAHAuzB,EAAS7yB,EAASV,MAGXuzB,EAAOvrB,UAAYhI,IAAMoK,IAE5BrG,GAAQg5B,YAAexJ,EAAO1O,SAA+C,OAApC0O,EAAOrxB,aAAa,cAC5DqxB,EAAO9rB,WAAWod,UAAavlB,GAAO+F,SAAUkuB,EAAO9rB,WAAY,aAAiB,CAMxF,GAHAK,EAAQxI,GAAQi0B,GAASvoB,MAGpBynB,EACJ,MAAO3qB,EAIRqC,GAAO7E,KAAMwC,GAIf,MAAOqC,IAGR0rB,IAAK,SAAU91B,EAAM+H,GAMpB,IALA,GAAIq1B,GAAW5J,EACd7yB,EAAUX,EAAKW,QACfyJ,EAAS7K,GAAOyX,UAAWjP,GAC3B9H,EAAIU,EAAQtB,OAELY,KAGP,GAFAuzB,EAAS7yB,EAASV,GAEbV,GAAOe,QAASf,GAAO49B,SAAS3J,OAAOlqB,IAAKkqB,GAAUppB,IAAY,EAMtE,IACCopB,EAAOvrB,SAAWm1B,GAAY,EAE7B,MAAQn8B,GAGTuyB,EAAO6J,iBAIR7J,GAAOvrB,UAAW,CASpB,OAJMm1B,KACLp9B,EAAK+kB,cAAgB,IAGfpkB,OAOXpB,GAAOuB,MAAO,QAAS,YAAc,WACpCvB,GAAO49B,SAAUl+B,OAChB62B,IAAK,SAAU91B,EAAM+H,GACpB,MAAKxI,IAAOoE,QAASoE,GACX/H,EAAK4F,QAAUrG,GAAOe,QAASf,GAAOS,GAAMiL,MAAOlD,IAAW,EADxE,SAKI/D,GAAQ64B,UACbt9B,GAAO49B,SAAUl+B,MAAOqK,IAAM,SAAUtJ,GAGvC,MAAsC,QAA/BA,EAAKmC,aAAa,SAAoB,KAAOnC,EAAK+H,SAQ5D,IAAIu1B,IAAUC,GACbxjB,GAAaxa,GAAO8iB,KAAKtI,WACzByjB,GAAc,0BACdb,GAAkB34B,GAAQ24B,gBAC1Bc,GAAcz5B,GAAQsd,KAEvB/hB,IAAOsV,GAAGrR,QACT4C,KAAM,SAAUrE,EAAMgG,GACrB,MAAO4jB,IAAQ1sB,KAAMM,GAAO6G,KAAMrE,EAAMgG,EAAO0B,UAAUpK,OAAS,IAGnEq+B,WAAY,SAAU37B,GACrB,MAAO9C,MAAK6B,KAAK,WAChBvB,GAAOm+B,WAAYz+B,KAAM8C,QAK5BxC,GAAOiE,QACN4C,KAAM,SAAUpG,EAAM+B,EAAMgG,GAC3B,GAAIwF,GAAO3K,EACV+6B,EAAQ39B,EAAKP,QAGd,IAAMO,GAAkB,IAAV29B,GAAyB,IAAVA,GAAyB,IAAVA,EAK5C,aAAY39B,GAAKmC,eAAiBgD,GAC1B5F,GAAOuM,KAAM9L,EAAM+B,EAAMgG,IAKlB,IAAV41B,GAAgBp+B,GAAO+mB,SAAUtmB,KACrC+B,EAAOA,EAAKG,cACZqL,EAAQhO,GAAOq+B,UAAW77B,KACvBxC,GAAO8iB,KAAKthB,MAAM+e,KAAK1f,KAAM2B,GAASw7B,GAAWD,KAGtCx7B,SAAViG,EAaOwF,GAAS,OAASA,IAA6C,QAAnC3K,EAAM2K,EAAMjE,IAAKtJ,EAAM+B,IACvDa,GAGPA,EAAMrD,GAAO4G,KAAKC,KAAMpG,EAAM+B,GAGhB,MAAPa,EACNd,OACAc,GApBc,OAAVmF,EAGOwF,GAAS,OAASA,IAAoDzL,UAA1Cc,EAAM2K,EAAMuoB,IAAK91B,EAAM+H,EAAOhG,IAC9Da,GAGP5C,EAAK8Y,aAAc/W,EAAMgG,EAAQ,IAC1BA,OAPPxI,IAAOm+B,WAAY19B,EAAM+B,KAuB5B27B,WAAY,SAAU19B,EAAM+H,GAC3B,GAAIhG,GAAM87B,EACT59B,EAAI,EACJ69B,EAAY/1B,GAASA,EAAMhH,MAAOC,GAEnC,IAAK88B,GAA+B,IAAlB99B,EAAKP,SACtB,KAASsC,EAAO+7B,EAAU79B,MACzB49B,EAAWt+B,GAAOw+B,QAASh8B,IAAUA,EAGhCxC,GAAO8iB,KAAKthB,MAAM+e,KAAK1f,KAAM2B,GAE5B07B,IAAed,KAAoBa,GAAYp9B,KAAM2B,GACzD/B,EAAM69B,IAAa,EAInB79B,EAAMT,GAAOkE,UAAW,WAAa1B,IACpC/B,EAAM69B,IAAa,EAKrBt+B,GAAO6G,KAAMpG,EAAM+B,EAAM,IAG1B/B,EAAKwG,gBAAiBm2B,GAAkB56B,EAAO87B,IAKlDD,WACCt+B,MACCw2B,IAAK,SAAU91B,EAAM+H,GACpB,IAAM/D,GAAQi5B,YAAwB,UAAVl1B,GAAqBxI,GAAO+F,SAAStF,EAAM,SAAW,CAGjF,GAAIiL,GAAMjL,EAAK+H,KAKf,OAJA/H,GAAK8Y,aAAc,OAAQ/Q,GACtBkD,IACJjL,EAAK+H,MAAQkD,GAEPlD,QAQZw1B,IACCzH,IAAK,SAAU91B,EAAM+H,EAAOhG,GAa3B,MAZKgG,MAAU,EAEdxI,GAAOm+B,WAAY19B,EAAM+B,GACd07B,IAAed,KAAoBa,GAAYp9B,KAAM2B,GAEhE/B,EAAK8Y,cAAe6jB,IAAmBp9B,GAAOw+B,QAASh8B,IAAUA,EAAMA,GAIvE/B,EAAMT,GAAOkE,UAAW,WAAa1B,IAAW/B,EAAM+B,IAAS,EAGzDA,IAKTxC,GAAOuB,KAAMvB,GAAO8iB,KAAKthB,MAAM+e,KAAK2L,OAAO1qB,MAAO,QAAU,SAAUd,EAAG8B,GAExE,GAAIi8B,GAASjkB,GAAYhY,IAAUxC,GAAO4G,KAAKC,IAE/C2T,IAAYhY,GAAS07B,IAAed,KAAoBa,GAAYp9B,KAAM2B,GACzE,SAAU/B,EAAM+B,EAAMic,GACrB,GAAIpb,GAAKwE,CAUT,OATM4W,KAEL5W,EAAS2S,GAAYhY,GACrBgY,GAAYhY,GAASa,EACrBA,EAAqC,MAA/Bo7B,EAAQh+B,EAAM+B,EAAMic,GACzBjc,EAAKG,cACL,KACD6X,GAAYhY,GAASqF,GAEfxE,GAER,SAAU5C,EAAM+B,EAAMic,GACrB,MAAMA,GAAN,OACQhe,EAAMT,GAAOkE,UAAW,WAAa1B,IAC3CA,EAAKG,cACL,QAMCu7B,IAAgBd,KACrBp9B,GAAOq+B,UAAU71B,OAChB+tB,IAAK,SAAU91B,EAAM+H,EAAOhG,GAC3B,MAAKxC,IAAO+F,SAAUtF,EAAM,cAE3BA,EAAKkI,aAAeH,GAGbu1B,IAAYA,GAASxH,IAAK91B,EAAM+H,EAAOhG,MAO5C46B,KAILW,IACCxH,IAAK,SAAU91B,EAAM+H,EAAOhG,GAE3B,GAAIa,GAAM5C,EAAKqhB,iBAAkBtf,EAUjC,OATMa,IACL5C,EAAKi+B,iBACHr7B,EAAM5C,EAAKiG,cAAci4B,gBAAiBn8B,IAI7Ca,EAAImF,MAAQA,GAAS,GAGP,UAAThG,GAAoBgG,IAAU/H,EAAKmC,aAAcJ,GAC9CgG,EADR,SAOFgS,GAAW7W,GAAK6W,GAAWhY,KAAOgY,GAAWokB,OAC5C,SAAUn+B,EAAM+B,EAAMic,GACrB,GAAIpb,EACJ,OAAMob,GAAN,QACSpb,EAAM5C,EAAKqhB,iBAAkBtf,KAAyB,KAAda,EAAImF,MACnDnF,EAAImF,MACJ,MAKJxI,GAAO49B,SAASlY,QACf3b,IAAK,SAAUtJ,EAAM+B,GACpB,GAAIa,GAAM5C,EAAKqhB,iBAAkBtf,EACjC,OAAKa,IAAOA,EAAI0f,UACR1f,EAAImF,MADZ,QAID+tB,IAAKwH,GAASxH,KAKfv2B,GAAOq+B,UAAUQ,iBAChBtI,IAAK,SAAU91B,EAAM+H,EAAOhG,GAC3Bu7B,GAASxH,IAAK91B,EAAgB,KAAV+H,GAAe,EAAQA,EAAOhG,KAMpDxC,GAAOuB,MAAO,QAAS,UAAY,SAAUb,EAAG8B,GAC/CxC,GAAOq+B,UAAW77B,IACjB+zB,IAAK,SAAU91B,EAAM+H,GACpB,MAAe,KAAVA,GACJ/H,EAAK8Y,aAAc/W,EAAM,QAClBgG,GAFR,YASE/D,GAAQqE,QACb9I,GAAOq+B,UAAUv1B,OAChBiB,IAAK,SAAUtJ,GAId,MAAOA,GAAKqI,MAAMuiB,SAAW9oB,QAE9Bg0B,IAAK,SAAU91B,EAAM+H,GACpB,MAAS/H,GAAKqI,MAAMuiB,QAAU7iB,EAAQ,KAQzC,IAAIs2B,IAAa,6CAChBC,GAAa,eAEd/+B,IAAOsV,GAAGrR,QACTsI,KAAM,SAAU/J,EAAMgG,GACrB,MAAO4jB,IAAQ1sB,KAAMM,GAAOuM,KAAM/J,EAAMgG,EAAO0B,UAAUpK,OAAS,IAGnEk/B,WAAY,SAAUx8B,GAErB,MADAA,GAAOxC,GAAOw+B,QAASh8B,IAAUA,EAC1B9C,KAAK6B,KAAK,WAEhB,IACC7B,KAAM8C,GAASD,aACR7C,MAAM8C,GACZ,MAAOO,UAKZ/C,GAAOiE,QACNu6B,SACCS,MAAO,UACPC,QAAS,aAGV3yB,KAAM,SAAU9L,EAAM+B,EAAMgG,GAC3B,GAAInF,GAAK2K,EAAOmxB,EACff,EAAQ39B,EAAKP,QAGd,IAAMO,GAAkB,IAAV29B,GAAyB,IAAVA,GAAyB,IAAVA,EAY5C,MARAe,GAAmB,IAAVf,IAAgBp+B,GAAO+mB,SAAUtmB,GAErC0+B,IAEJ38B,EAAOxC,GAAOw+B,QAASh8B,IAAUA,EACjCwL,EAAQhO,GAAOy6B,UAAWj4B,IAGZD,SAAViG,EACGwF,GAAS,OAASA,IAAoDzL,UAA1Cc,EAAM2K,EAAMuoB,IAAK91B,EAAM+H,EAAOhG,IAChEa,EACE5C,EAAM+B,GAASgG,EAGXwF,GAAS,OAASA,IAA6C,QAAnC3K,EAAM2K,EAAMjE,IAAKtJ,EAAM+B,IACzDa,EACA5C,EAAM+B,IAITi4B,WACCpV,UACCtb,IAAK,SAAUtJ,GAId,GAAI2+B,GAAWp/B,GAAO4G,KAAKC,KAAMpG,EAAM,WAEvC,OAAO2+B,GACNC,SAAUD,EAAU,IACpBN,GAAWj+B,KAAMJ,EAAKsF,WAAcg5B,GAAWl+B,KAAMJ,EAAKsF,WAActF,EAAK2kB,KAC5E,EACA,QAQA3gB,GAAQ44B,gBAEbr9B,GAAOuB,MAAO,OAAQ,OAAS,SAAUb,EAAG8B,GAC3CxC,GAAOy6B,UAAWj4B,IACjBuH,IAAK,SAAUtJ,GACd,MAAOA,GAAKmC,aAAcJ,EAAM;KAS9BiC,GAAQ84B,cACbv9B,GAAOy6B,UAAU/xB,UAChBqB,IAAK,SAAUtJ,GACd,GAAI6gB,GAAS7gB,EAAK0H,UAUlB,OARKmZ,KACJA,EAAOkE,cAGFlE,EAAOnZ,YACXmZ,EAAOnZ,WAAWqd,eAGb,QAKVxlB,GAAOuB,MACN,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFvB,GAAOw+B,QAAS9+B,KAAKiD,eAAkBjD,OAIlC+E,GAAQ+4B,UACbx9B,GAAOw+B,QAAQhB,QAAU,WAM1B,IAAI8B,IAAS,aAEbt/B,IAAOsV,GAAGrR,QACTs7B,SAAU,SAAU/2B,GACnB,GAAIg3B,GAAS/+B,EAAMQ,EAAKw+B,EAAOhpB,EAAGipB,EACjCh/B,EAAI,EACJ8V,EAAM9W,KAAKI,OACX6/B,EAA2B,gBAAVn3B,IAAsBA,CAExC,IAAKxI,GAAOO,WAAYiI,GACvB,MAAO9I,MAAK6B,KAAK,SAAUkV,GAC1BzW,GAAQN,MAAO6/B,SAAU/2B,EAAM7H,KAAMjB,KAAM+W,EAAG/W,KAAK+hB,aAIrD,IAAKke,EAIJ,IAFAH,GAAYh3B,GAAS,IAAKhH,MAAOC,QAErB+U,EAAJ9V,EAASA,IAOhB,GANAD,EAAOf,KAAMgB,GACbO,EAAwB,IAAlBR,EAAKP,WAAoBO,EAAKghB,WACjC,IAAMhhB,EAAKghB,UAAY,KAAMhf,QAAS68B,GAAQ,KAChD,KAGU,CAEV,IADA7oB,EAAI,EACKgpB,EAAQD,EAAQ/oB,MACnBxV,EAAI8T,QAAS,IAAM0qB,EAAQ,KAAQ,IACvCx+B,GAAOw+B,EAAQ,IAKjBC,GAAa1/B,GAAOuI,KAAMtH,GACrBR,EAAKghB,YAAcie,IACvBj/B,EAAKghB,UAAYie,GAMrB,MAAOhgC,OAGRkgC,YAAa,SAAUp3B,GACtB,GAAIg3B,GAAS/+B,EAAMQ,EAAKw+B,EAAOhpB,EAAGipB,EACjCh/B,EAAI,EACJ8V,EAAM9W,KAAKI,OACX6/B,EAA+B,IAArBz1B,UAAUpK,QAAiC,gBAAV0I,IAAsBA,CAElE,IAAKxI,GAAOO,WAAYiI,GACvB,MAAO9I,MAAK6B,KAAK,SAAUkV,GAC1BzW,GAAQN,MAAOkgC,YAAap3B,EAAM7H,KAAMjB,KAAM+W,EAAG/W,KAAK+hB,aAGxD,IAAKke,EAGJ,IAFAH,GAAYh3B,GAAS,IAAKhH,MAAOC,QAErB+U,EAAJ9V,EAASA,IAQhB,GAPAD,EAAOf,KAAMgB,GAEbO,EAAwB,IAAlBR,EAAKP,WAAoBO,EAAKghB,WACjC,IAAMhhB,EAAKghB,UAAY,KAAMhf,QAAS68B,GAAQ,KAChD,IAGU,CAEV,IADA7oB,EAAI,EACKgpB,EAAQD,EAAQ/oB,MAExB,KAAQxV,EAAI8T,QAAS,IAAM0qB,EAAQ,MAAS,GAC3Cx+B,EAAMA,EAAIwB,QAAS,IAAMg9B,EAAQ,IAAK,IAKxCC,GAAal3B,EAAQxI,GAAOuI,KAAMtH,GAAQ,GACrCR,EAAKghB,YAAcie,IACvBj/B,EAAKghB,UAAYie,GAMrB,MAAOhgC,OAGRmgC,YAAa,SAAUr3B,EAAOs3B,GAC7B,GAAI//B,SAAcyI,EAElB,OAAyB,iBAAbs3B,IAAmC,WAAT//B,EAC9B+/B,EAAWpgC,KAAK6/B,SAAU/2B,GAAU9I,KAAKkgC,YAAap3B,GAItD9I,KAAK6B,KADRvB,GAAOO,WAAYiI,GACN,SAAU9H,GAC1BV,GAAQN,MAAOmgC,YAAar3B,EAAM7H,KAAKjB,KAAMgB,EAAGhB,KAAK+hB,UAAWqe,GAAWA,IAI5D,WAChB,GAAc,WAAT//B,EAOJ,IALA,GAAI0hB,GACH/gB,EAAI,EACJwmB,EAAOlnB,GAAQN,MACfqgC,EAAav3B,EAAMhH,MAAOC,QAElBggB,EAAYse,EAAYr/B,MAE3BwmB,EAAK8Y,SAAUve,GACnByF,EAAK0Y,YAAane,GAElByF,EAAKqY,SAAU9d,QAKN1hB,IAAS6F,IAAyB,YAAT7F,KAC/BL,KAAK+hB,WAETzhB,GAAOoH,MAAO1H,KAAM,gBAAiBA,KAAK+hB,WAO3C/hB,KAAK+hB,UAAY/hB,KAAK+hB,WAAajZ,KAAU,EAAQ,GAAKxI,GAAOoH,MAAO1H,KAAM,kBAAqB,OAKtGsgC,SAAU,SAAU3qB,GAInB,IAHA,GAAIoM,GAAY,IAAMpM,EAAW,IAChC3U,EAAI,EACJ+G,EAAI/H,KAAKI,OACE2H,EAAJ/G,EAAOA,IACd,GAA0B,IAArBhB,KAAKgB,GAAGR,WAAmB,IAAMR,KAAKgB,GAAG+gB,UAAY,KAAKhf,QAAQ68B,GAAQ,KAAKvqB,QAAS0M,IAAe,EAC3G,OAAO,CAIT,QAAO,KAUTzhB,GAAOuB,KAAM,0MAEqDgD,MAAM,KAAM,SAAU7D,EAAG8B,GAG1FxC,GAAOsV,GAAI9S,GAAS,SAAUF,EAAMgT,GACnC,MAAOpL,WAAUpK,OAAS,EACzBJ,KAAKwzB,GAAI1wB,EAAM,KAAMF,EAAMgT,GAC3B5V,KAAKovB,QAAStsB,MAIjBxC,GAAOsV,GAAGrR,QACTg8B,MAAO,SAAUC,EAAQC,GACxB,MAAOzgC,MAAK2yB,WAAY6N,GAAS5N,WAAY6N,GAASD,IAGvDE,KAAM,SAAU1S,EAAOprB,EAAMgT,GAC5B,MAAO5V,MAAKwzB,GAAIxF,EAAO,KAAMprB,EAAMgT,IAEpC+qB,OAAQ,SAAU3S,EAAOpY,GACxB,MAAO5V,MAAKsrB,IAAK0C,EAAO,KAAMpY,IAG/BgrB,SAAU,SAAUjrB,EAAUqY,EAAOprB,EAAMgT,GAC1C,MAAO5V,MAAKwzB,GAAIxF,EAAOrY,EAAU/S,EAAMgT,IAExCirB,WAAY,SAAUlrB,EAAUqY,EAAOpY,GAEtC,MAA4B,KAArBpL,UAAUpK,OAAeJ,KAAKsrB,IAAK3V,EAAU,MAAS3V,KAAKsrB,IAAK0C,EAAOrY,GAAY,KAAMC,KAKlG,IAAIkrB,IAAQxgC,GAAO+M,MAEf0zB,GAAS,KAITC,GAAe,kIAEnB1gC,IAAO8C,UAAY,SAAUR,GAE5B,GAAK7C,EAAOkhC,MAAQlhC,EAAOkhC,KAAKC,MAG/B,MAAOnhC,GAAOkhC,KAAKC,MAAOt+B,EAAO,GAGlC,IAAIu+B,GACHC,EAAQ,KACRC,EAAM/gC,GAAOuI,KAAMjG,EAAO,GAI3B,OAAOy+B,KAAQ/gC,GAAOuI,KAAMw4B,EAAIt+B,QAASi+B,GAAc,SAAU/Z,EAAOqa,EAAOC,EAAMt3B,GAQpF,MALKk3B,IAAmBG,IACvBF,EAAQ,GAIM,IAAVA,EACGna,GAIRka,EAAkBI,GAAQD,EAM1BF,IAAUn3B,GAASs3B,EAGZ,OAELC,SAAU,UAAYH,KACxB/gC,GAAOkU,MAAO,iBAAmB5R,IAKnCtC,GAAOmhC,SAAW,SAAU7+B,GAC3B,GAAIuZ,GAAKhI,CACT,KAAMvR,GAAwB,gBAATA,GACpB,MAAO,KAER,KACM7C,EAAO2hC,WACXvtB,EAAM,GAAIutB,WACVvlB,EAAMhI,EAAIwtB,gBAAiB/+B,EAAM,cAEjCuZ,EAAM,GAAIlH,eAAe,oBACzBkH,EAAIylB,MAAQ,QACZzlB,EAAI0lB,QAASj/B,IAEb,MAAOS,GACR8Y,EAAMtZ,OAKP,MAHMsZ,IAAQA,EAAItS,kBAAmBsS,EAAIlW,qBAAsB,eAAgB7F,QAC9EE,GAAOkU,MAAO,gBAAkB5R,GAE1BuZ,EAIR,IAEC2lB,IACAC,GAEAC,GAAQ,OACRC,GAAM,gBACNC,GAAW,gCAEXC,GAAiB,4DACjBC,GAAa,iBACbC,GAAY,QACZC,GAAO,4DAWPC,MAOA3vB,MAGA4vB,GAAW,KAAK79B,OAAO,IAIxB,KACCo9B,GAAezc,SAASI,KACvB,MAAOriB,IAGR0+B,GAAeniC,GAAS+F,cAAe,KACvCo8B,GAAarc,KAAO,GACpBqc,GAAeA,GAAarc,KAI7Boc,GAAeQ,GAAKh7B,KAAMy6B,GAAa9+B,mBAoOvC3C,GAAOiE,QAGNk+B,OAAQ,EAGRC,gBACAC,QAEA1vB,cACC2vB,IAAKb,GACL1hC,KAAM,MACNwiC,QAASV,GAAehhC,KAAM2gC,GAAc,IAC5CriC,QAAQ,EACRqjC,aAAa,EACblB,OAAO,EACPmB,YAAa,mDAabC,SACCtH,IAAK8G,GACLh6B,KAAM,aACNiuB,KAAM,YACNta,IAAK,4BACL8mB,KAAM,qCAGPzvB,UACC2I,IAAK,MACLsa,KAAM,OACNwM,KAAM,QAGP5uB,gBACC8H,IAAK,cACL3T,KAAM,eACNy6B,KAAM,gBAKPrvB,YAGCsvB,SAAU3hB,OAGV4hB,aAAa,EAGbC,YAAa9iC,GAAO8C,UAGpBigC,WAAY/iC,GAAOmhC,UAOpBzuB,aACC4vB,KAAK,EACL/8B,SAAS,IAOXy9B,UAAW,SAAUxwB,EAAQywB,GAC5B,MAAOA,GAGN1wB,EAAYA,EAAYC,EAAQxS,GAAO2S,cAAgBswB,GAGvD1wB,EAAYvS,GAAO2S,aAAcH,IAGnC0wB,cAAe1xB,EAA6BywB,IAC5CkB,cAAe3xB,EAA6Bc,IAG5C8wB,KAAM,SAAUd,EAAKlhC,GAmRpB,QAAS+N,GAAMk0B,EAAQC,EAAkBxwB,EAAWywB,GACnD,GAAI9vB,GAAW+vB,EAAStvB,EAAOV,EAAUiwB,EACxCC,EAAaJ,CAGC,KAAVrvB,IAKLA,EAAQ,EAGH0vB,GACJxG,aAAcwG,GAKfC,EAAYrhC,OAGZshC,EAAwBN,GAAW,GAGnCvxB,EAAM9P,WAAamhC,EAAS,EAAI,EAAI,EAGpC5vB,EAAY4vB,GAAU,KAAgB,IAATA,GAA2B,MAAXA,EAGxCvwB,IACJU,EAAWZ,EAAqBC,EAAGb,EAAOc,IAI3CU,EAAWD,EAAaV,EAAGW,EAAUxB,EAAOyB,GAGvCA,GAGCZ,EAAEixB,aACNL,EAAWzxB,EAAMqB,kBAAkB,iBAC9BowB,IACJzjC,GAAOoiC,aAAc2B,GAAaN,GAEnCA,EAAWzxB,EAAMqB,kBAAkB,QAC9BowB,IACJzjC,GAAOqiC,KAAM0B,GAAaN,IAKZ,MAAXJ,GAA6B,SAAXxwB,EAAE9S,KACxB2jC,EAAa,YAGS,MAAXL,EACXK,EAAa,eAIbA,EAAalwB,EAASS,MACtBuvB,EAAUhwB,EAASlR,KACnB4R,EAAQV,EAASU,MACjBT,GAAaS,KAKdA,EAAQwvB,GACHL,IAAWK,KACfA,EAAa,QACC,EAATL,IACJA,EAAS,KAMZrxB,EAAMqxB,OAASA,EACfrxB,EAAM0xB,YAAeJ,GAAoBI,GAAe,GAGnDjwB,EACJzD,EAASY,YAAaozB,GAAmBR,EAASE,EAAY1xB,IAE9DhC,EAASkB,WAAY8yB,GAAmBhyB,EAAO0xB,EAAYxvB,IAI5DlC,EAAMiyB,WAAYA,GAClBA,EAAa1hC,OAER2hC,GACJC,EAAmBrV,QAASrb,EAAY,cAAgB,aACrDzB,EAAOa,EAAGY,EAAY+vB,EAAUtvB,IAIpCkwB,EAAiB7a,SAAUya,GAAmBhyB,EAAO0xB,IAEhDQ,IACJC,EAAmBrV,QAAS,gBAAkB9c,EAAOa,MAE3C7S,GAAOmiC,QAChBniC,GAAOiC,MAAM6sB,QAAQ,cA3XJ,gBAARwT,KACXlhC,EAAUkhC,EACVA,EAAM//B,QAIPnB,EAAUA,KAEV,IACCm5B,GAEA75B,EAEAqjC,EAEAF,EAEAF,EAGAO,EAEAN,EAEAS,EAEAxxB,EAAI7S,GAAOgjC,aAAe5hC,GAE1B4iC,EAAkBnxB,EAAEtN,SAAWsN,EAE/BsxB,EAAqBtxB,EAAEtN,UAAay+B,EAAgB9jC,UAAY8jC,EAAgBnuB,QAC/E7V,GAAQgkC,GACRhkC,GAAOiC,MAER+N,EAAWhQ,GAAOiQ,WAClBm0B,EAAmBpkC,GAAOyoB,UAAU,eAEpCwb,EAAapxB,EAAEoxB,eAEfK,KACAC,KAEAtwB,EAAQ,EAERuwB,EAAW,WAEXxyB,GACC9P,WAAY,EAGZmR,kBAAmB,SAAUhR,GAC5B,GAAIb,EACJ,IAAe,IAAVyS,EAAc,CAClB,IAAMowB,EAEL,IADAA,KACS7iC,EAAQogC,GAAS56B,KAAM68B,IAC/BQ,EAAiB7iC,EAAM,GAAGmB,eAAkBnB,EAAO,EAGrDA,GAAQ6iC,EAAiBhiC,EAAIM,eAE9B,MAAgB,OAATnB,EAAgB,KAAOA,GAI/BijC,sBAAuB,WACtB,MAAiB,KAAVxwB,EAAc4vB,EAAwB,MAI9Ca,iBAAkB,SAAUliC,EAAMgG,GACjC,GAAIm8B,GAAQniC,EAAKG,aAKjB,OAJMsR,KACLzR,EAAO+hC,EAAqBI,GAAUJ,EAAqBI,IAAWniC,EACtE8hC,EAAgB9hC,GAASgG,GAEnB9I,MAIRklC,iBAAkB,SAAU7kC,GAI3B,MAHMkU,KACLpB,EAAEO,SAAWrT,GAEPL,MAIRukC,WAAY,SAAU3/B,GACrB,GAAIugC,EACJ,IAAKvgC,EACJ,GAAa,EAAR2P,EACJ,IAAM4wB,IAAQvgC,GAEb2/B,EAAYY,IAAWZ,EAAYY,GAAQvgC,EAAKugC,QAIjD7yB,GAAMrD,OAAQrK,EAAK0N,EAAMqxB,QAG3B,OAAO3jC,OAIRolC,MAAO,SAAUpB,GAChB,GAAIqB,GAAYrB,GAAcc,CAK9B,OAJKZ,IACJA,EAAUkB,MAAOC,GAElB51B,EAAM,EAAG41B,GACFrlC,MAwCV,IAnCAsQ,EAASa,QAASmB,GAAQV,SAAW8yB,EAAiBt8B,IACtDkK,EAAMwxB,QAAUxxB,EAAM7C,KACtB6C,EAAMkC,MAAQlC,EAAMT,KAMpBsB,EAAEyvB,MAAUA,GAAOzvB,EAAEyvB,KAAOb,IAAiB,IAAKh/B,QAASi/B,GAAO,IAAKj/B,QAASs/B,GAAWP,GAAc,GAAM,MAG/G3uB,EAAE9S,KAAOqB,EAAQ4jC,QAAU5jC,EAAQrB,MAAQ8S,EAAEmyB,QAAUnyB,EAAE9S,KAGzD8S,EAAEhB,UAAY7R,GAAOuI,KAAMsK,EAAEjB,UAAY,KAAMjP,cAAcnB,MAAOC,MAAiB,IAG/D,MAAjBoR,EAAEoyB,cACN1K,EAAQyH,GAAKh7B,KAAM6L,EAAEyvB,IAAI3/B,eACzBkQ,EAAEoyB,eAAkB1K,GACjBA,EAAO,KAAQiH,GAAc,IAAOjH,EAAO,KAAQiH,GAAc,KAChEjH,EAAO,KAAwB,UAAfA,EAAO,GAAkB,KAAO,WAC/CiH,GAAc,KAA+B,UAAtBA,GAAc,GAAkB,KAAO,UAK/D3uB,EAAEvQ,MAAQuQ,EAAE2vB,aAAiC,gBAAX3vB,GAAEvQ,OACxCuQ,EAAEvQ,KAAOtC,GAAOo0B,MAAOvhB,EAAEvQ,KAAMuQ,EAAEwB,cAIlCtC,EAA+BkwB,GAAYpvB,EAAGzR,EAAS4Q,GAGxC,IAAViC,EACJ,MAAOjC,EAIRkyB,GAAcrxB,EAAE1T,OAGX+kC,GAAmC,IAApBlkC,GAAOmiC,UAC1BniC,GAAOiC,MAAM6sB,QAAQ,aAItBjc,EAAE9S,KAAO8S,EAAE9S,KAAKuK,cAGhBuI,EAAEqyB,YAAcpD,GAAWjhC,KAAMgS,EAAE9S,MAInCgkC,EAAWlxB,EAAEyvB,IAGPzvB,EAAEqyB,aAGFryB,EAAEvQ,OACNyhC,EAAalxB,EAAEyvB,MAAS7B,GAAO5/B,KAAMkjC,GAAa,IAAM,KAAQlxB,EAAEvQ,WAE3DuQ,GAAEvQ,MAILuQ,EAAEnP,SAAU,IAChBmP,EAAEyvB,IAAMX,GAAI9gC,KAAMkjC,GAGjBA,EAASthC,QAASk/B,GAAK,OAASnB,MAGhCuD,GAAatD,GAAO5/B,KAAMkjC,GAAa,IAAM,KAAQ,KAAOvD,OAK1D3tB,EAAEixB,aACD9jC,GAAOoiC,aAAc2B,IACzB/xB,EAAM0yB,iBAAkB,oBAAqB1kC,GAAOoiC,aAAc2B,IAE9D/jC,GAAOqiC,KAAM0B,IACjB/xB,EAAM0yB,iBAAkB,gBAAiB1kC,GAAOqiC,KAAM0B,MAKnDlxB,EAAEvQ,MAAQuQ,EAAEqyB,YAAcryB,EAAE4vB,eAAgB,GAASrhC,EAAQqhC,cACjEzwB,EAAM0yB,iBAAkB,eAAgB7xB,EAAE4vB,aAI3CzwB,EAAM0yB,iBACL,SACA7xB,EAAEhB,UAAW,IAAOgB,EAAE6vB,QAAS7vB,EAAEhB,UAAU,IAC1CgB,EAAE6vB,QAAS7vB,EAAEhB,UAAU,KAA8B,MAArBgB,EAAEhB,UAAW,GAAc,KAAOqwB,GAAW,WAAa,IAC1FrvB,EAAE6vB,QAAS,KAIb,KAAMhiC,IAAKmS,GAAE0wB,QACZvxB,EAAM0yB,iBAAkBhkC,EAAGmS,EAAE0wB,QAAS7iC,GAIvC,IAAKmS,EAAEsyB,aAAgBtyB,EAAEsyB,WAAWxkC,KAAMqjC,EAAiBhyB,EAAOa,MAAQ,GAAmB,IAAVoB,GAElF,MAAOjC,GAAM8yB,OAIdN,GAAW,OAGX,KAAM9jC,KAAO8iC,QAAS,EAAGtvB,MAAO,EAAG5C,SAAU,GAC5CU,EAAOtR,GAAKmS,EAAGnS,GAOhB,IAHAkjC,EAAY7xB,EAA+BO,GAAYO,EAAGzR,EAAS4Q,GAK5D,CACNA,EAAM9P,WAAa,EAGdgiC,GACJC,EAAmBrV,QAAS,YAAc9c,EAAOa,IAG7CA,EAAEyuB,OAASzuB,EAAEqqB,QAAU,IAC3ByG,EAAe92B,WAAW,WACzBmF,EAAM8yB,MAAM,YACVjyB,EAAEqqB,SAGN,KACCjpB,EAAQ,EACR2vB,EAAUwB,KAAMd,EAAgBn1B,GAC/B,MAAQpM,GAET,KAAa,EAARkR,GAIJ,KAAMlR,EAHNoM,GAAM,GAAIpM,QArBZoM,GAAM,GAAI,eA8IX,OAAO6C,IAGRqzB,QAAS,SAAU/C,EAAKhgC,EAAM6T,GAC7B,MAAOnW,IAAO+J,IAAKu4B,EAAKhgC,EAAM6T,EAAU,SAGzCmvB,UAAW,SAAUhD,EAAKnsB,GACzB,MAAOnW,IAAO+J,IAAKu4B,EAAK//B,OAAW4T,EAAU,aAI/CnW,GAAOuB,MAAQ,MAAO,QAAU,SAAUb,EAAGskC,GAC5ChlC,GAAQglC,GAAW,SAAU1C,EAAKhgC,EAAM6T,EAAUpW,GAQjD,MANKC,IAAOO,WAAY+B,KACvBvC,EAAOA,GAAQoW,EACfA,EAAW7T,EACXA,EAAOC,QAGDvC,GAAOojC,MACbd,IAAKA,EACLviC,KAAMilC,EACNpzB,SAAU7R,EACVuC,KAAMA,EACNkhC,QAASrtB,OAMZnW,GAAOuB,MAAQ,YAAa,WAAY,eAAgB,YAAa,cAAe,YAAc,SAAUb,EAAGX,GAC9GC,GAAOsV,GAAIvV,GAAS,SAAUuV,GAC7B,MAAO5V,MAAKwzB,GAAInzB,EAAMuV,MAKxBtV,GAAOy2B,SAAW,SAAU6L,GAC3B,MAAOtiC,IAAOojC,MACbd,IAAKA,EACLviC,KAAM,MACN6R,SAAU,SACV0vB,OAAO,EACPniC,QAAQ,EACRomC,UAAU,KAKZvlC,GAAOsV,GAAGrR,QACTuhC,QAAS,SAAUrP,GAClB,GAAKn2B,GAAOO,WAAY41B,GACvB,MAAOz2B,MAAK6B,KAAK,SAASb,GACzBV,GAAON,MAAM8lC,QAASrP,EAAKx1B,KAAKjB,KAAMgB,KAIxC,IAAKhB,KAAK,GAAK,CAEd,GAAI81B,GAAOx1B,GAAQm2B,EAAMz2B,KAAK,GAAGgH,eAAgB4P,GAAG,GAAGQ,OAAM,EAExDpX,MAAK,GAAGyI,YACZqtB,EAAKO,aAAcr2B,KAAK,IAGzB81B,EAAKlxB,IAAI,WAGR,IAFA,GAAI7D,GAAOf,KAEHe,EAAK+F,YAA2C,IAA7B/F,EAAK+F,WAAWtG,UAC1CO,EAAOA,EAAK+F,UAGb,OAAO/F,KACLm1B,OAAQl2B,MAGZ,MAAOA,OAGR+lC,UAAW,SAAUtP,GACpB,MACQz2B,MAAK6B,KADRvB,GAAOO,WAAY41B,GACN,SAASz1B,GACzBV,GAAON,MAAM+lC,UAAWtP,EAAKx1B,KAAKjB,KAAMgB,KAIzB,WAChB,GAAIwmB,GAAOlnB,GAAQN,MAClBwT,EAAWgU,EAAKhU,UAEZA,GAASpT,OACboT,EAASsyB,QAASrP,GAGlBjP,EAAK0O,OAAQO,MAKhBX,KAAM,SAAUW,GACf,GAAI51B,GAAaP,GAAOO,WAAY41B,EAEpC,OAAOz2B,MAAK6B,KAAK,SAASb,GACzBV,GAAQN,MAAO8lC,QAASjlC,EAAa41B,EAAKx1B,KAAKjB,KAAMgB,GAAKy1B,MAI5DuP,OAAQ,WACP,MAAOhmC,MAAK4hB,SAAS/f,KAAK,WACnBvB,GAAO+F,SAAUrG,KAAM,SAC5BM,GAAQN,MAAO02B,YAAa12B,KAAKoG,cAEhC0G,SAKLxM,GAAO8iB,KAAKwD,QAAQ1b,OAAS,SAAUnK,GAGtC,MAAOA,GAAKqL,aAAe,GAAKrL,EAAKsL,cAAgB,IAClDtH,GAAQ8zB,yBACiE,UAAxE93B,EAAKqI,OAASrI,EAAKqI,MAAMG,SAAYjJ,GAAOmJ,IAAK1I,EAAM,aAG5DT,GAAO8iB,KAAKwD,QAAQqf,QAAU,SAAUllC,GACvC,OAAQT,GAAO8iB,KAAKwD,QAAQ1b,OAAQnK,GAMrC,IAAImlC,IAAM,OACTrxB,GAAW,QACXsxB,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,oCAgChB/lC,IAAOo0B,MAAQ,SAAU1Z,EAAGrG,GAC3B,GAAID,GACHvB,KACA/K,EAAM,SAAUzF,EAAKmG,GAEpBA,EAAQxI,GAAOO,WAAYiI,GAAUA,IAAqB,MAATA,EAAgB,GAAKA,EACtEqK,EAAGA,EAAE/S,QAAWkmC,mBAAoB3jC,GAAQ,IAAM2jC,mBAAoBx9B,GASxE,IALqBjG,SAAhB8R,IACJA,EAAcrU,GAAO2S,cAAgB3S,GAAO2S,aAAa0B,aAIrDrU,GAAOoE,QAASsW,IAASA,EAAE7E,SAAW7V,GAAO+W,cAAe2D,GAEhE1a,GAAOuB,KAAMmZ,EAAG,WACf5S,EAAKpI,KAAK8C,KAAM9C,KAAK8I,aAMtB,KAAM4L,IAAUsG,GACfvG,EAAaC,EAAQsG,EAAGtG,GAAUC,EAAavM,EAKjD,OAAO+K,GAAE8G,KAAM,KAAMlX,QAASmjC,GAAK,MAGpC5lC,GAAOsV,GAAGrR,QACTgiC,UAAW,WACV,MAAOjmC,IAAOo0B,MAAO10B,KAAKwmC,mBAE3BA,eAAgB,WACf,MAAOxmC,MAAK4E,IAAI,WAEf,GAAIlE,GAAWJ,GAAOuM,KAAM7M,KAAM,WAClC,OAAOU,GAAWJ,GAAOyX,UAAWrX,GAAaV,OAEjDoB,OAAO,WACP,GAAIf,GAAOL,KAAKK,IAEhB,OAAOL,MAAK8C,OAASxC,GAAQN,MAAOynB,GAAI,cACvC4e,GAAallC,KAAMnB,KAAKqG,YAAe+/B,GAAgBjlC,KAAMd,KAC3DL,KAAK2G,UAAYF,GAAetF,KAAMd,MAEzCuE,IAAI,SAAU5D,EAAGD,GACjB,GAAIiL,GAAM1L,GAAQN,MAAOgM,KAEzB,OAAc,OAAPA,EACN,KACA1L,GAAOoE,QAASsH,GACf1L,GAAOsE,IAAKoH,EAAK,SAAUA,GAC1B,OAASlJ,KAAM/B,EAAK+B,KAAMgG,MAAOkD,EAAIjJ,QAASojC,GAAO,YAEpDrjC,KAAM/B,EAAK+B,KAAMgG,MAAOkD,EAAIjJ,QAASojC,GAAO,WAC9C97B,SAOL/J,GAAO2S,aAAawzB,IAA+B5jC,SAAzB9C,EAAOkV,cAEhC,WAGC,OAAQjV,KAAK6iC,SAQZ,wCAAwC1hC,KAAMnB,KAAKK,OAEnDyU,KAAuBE,KAGzBF,CAED,IAAI4xB,IAAQ,EACXC,MACAC,GAAetmC,GAAO2S,aAAawzB,KAI/B1mC,GAAOkV,eACX3U,GAAQP,GAASyzB,GAAI,SAAU,WAC9B,IAAM,GAAI7wB,KAAOgkC,IAChBA,GAAchkC,GAAOE,QAAW,KAMnCkC,GAAQ8hC,OAASD,IAAkB,mBAAqBA,IACxDA,GAAe7hC,GAAQ2+B,OAASkD,GAG3BA,IAEJtmC,GAAOmjC,cAAc,SAAU/hC,GAE9B,IAAMA,EAAQ6jC,aAAexgC,GAAQ8hC,KAAO,CAE3C,GAAIpwB,EAEJ,QACCivB,KAAM,SAAU7B,EAASjyB,GACxB,GAAI5Q,GACHylC,EAAM/kC,EAAQ+kC,MACdxiC,IAAOyiC,EAMR,IAHAD,EAAIlF,KAAM7/B,EAAQrB,KAAMqB,EAAQkhC,IAAKlhC,EAAQkgC,MAAOlgC,EAAQolC,SAAUplC,EAAQ8kB,UAGzE9kB,EAAQqlC,UACZ,IAAM/lC,IAAKU,GAAQqlC,UAClBN,EAAKzlC,GAAMU,EAAQqlC,UAAW/lC,EAK3BU,GAAQgS,UAAY+yB,EAAIvB,kBAC5BuB,EAAIvB,iBAAkBxjC,EAAQgS,UAQzBhS,EAAQ6jC,aAAgB1B,EAAQ,sBACrCA,EAAQ,oBAAsB,iBAI/B,KAAM7iC,IAAK6iC,GAOYhhC,SAAjBghC,EAAS7iC,IACbylC,EAAIzB,iBAAkBhkC,EAAG6iC,EAAS7iC,GAAM,GAO1CylC,GAAIf,KAAQhkC,EAAQ8jC,YAAc9jC,EAAQkB,MAAU,MAGpD6T,EAAW,SAAUzU,EAAGglC,GACvB,GAAIrD,GAAQK,EAAY5wB,CAGxB,IAAKqD,IAAcuwB,GAA8B,IAAnBP,EAAIjkC,YAOjC,SALOmkC,IAAc1iC,GACrBwS,EAAW5T,OACX4jC,EAAIQ,mBAAqB3mC,GAAOgE,KAG3B0iC,EACoB,IAAnBP,EAAIjkC,YACRikC,EAAIrB,YAEC,CACNhyB,KACAuwB,EAAS8C,EAAI9C,OAKoB,gBAArB8C,GAAIS,eACf9zB,EAAU5K,KAAOi+B,EAAIS,aAKtB,KACClD,EAAayC,EAAIzC,WAChB,MAAO3gC,GAER2gC,EAAa,GAQRL,IAAUjiC,EAAQmhC,SAAYnhC,EAAQ6jC,YAGrB,OAAX5B,IACXA,EAAS,KAHTA,EAASvwB,EAAU5K,KAAO,IAAM,IAS9B4K,GACJxB,EAAU+xB,EAAQK,EAAY5wB,EAAWqzB,EAAI1B,0BAIzCrjC,EAAQkgC,MAGiB,IAAnB6E,EAAIjkC,WAGf2K,WAAYsJ,GAGZgwB,EAAIQ,mBAAqBN,GAAc1iC,GAAOwS,EAP9CA,KAWF2uB,MAAO,WACD3uB,GACJA,EAAU5T,QAAW,QAyB3BvC,GAAOgjC,WACNN,SACCmE,OAAQ,6FAET3zB,UACC2zB,OAAQ,uBAETvzB,YACCwzB,cAAe,SAAU5+B,GAExB,MADAlI,IAAOsX,WAAYpP,GACZA,MAMVlI,GAAOkjC,cAAe,SAAU,SAAUrwB,GACxBtQ,SAAZsQ,EAAEnP,QACNmP,EAAEnP,OAAQ,GAENmP,EAAEoyB,cACNpyB,EAAE9S,KAAO,MACT8S,EAAE1T,QAAS,KAKba,GAAOmjC,cAAe,SAAU,SAAStwB,GAGxC,GAAKA,EAAEoyB,YAAc,CAEpB,GAAI4B,GACHE,EAAOznC,GAASynC,MAAQ/mC,GAAO,QAAQ,IAAMV,GAASiK,eAEvD,QAEC67B,KAAM,SAAU1jC,EAAGyU,GAElB0wB,EAASvnC,GAAS+F,cAAc,UAEhCwhC,EAAOvF,OAAQ,EAEVzuB,EAAEm0B,gBACNH,EAAOI,QAAUp0B,EAAEm0B,eAGpBH,EAAOv/B,IAAMuL,EAAEyvB,IAGfuE,EAAOK,OAASL,EAAOF,mBAAqB,SAAUjlC,EAAGglC,IAEnDA,IAAYG,EAAO3kC,YAAc,kBAAkBrB,KAAMgmC,EAAO3kC,eAGpE2kC,EAAOK,OAASL,EAAOF,mBAAqB,KAGvCE,EAAO1+B,YACX0+B,EAAO1+B,WAAWkS,YAAawsB,GAIhCA,EAAS,KAGHH,GACLvwB,EAAU,IAAK,aAOlB4wB,EAAKhR,aAAc8Q,EAAQE,EAAKvgC,aAGjCs+B,MAAO,WACD+B,GACJA,EAAOK,OAAQ3kC,QAAW,OAU/B,IAAI4kC,OACHC,GAAS,mBAGVpnC,IAAOgjC,WACNqE,MAAO,WACPC,cAAe,WACd,GAAInxB,GAAWgxB,GAAatjC,OAAW7D,GAAOwD,QAAU,IAAQg9B,IAEhE,OADA9gC,MAAMyW,IAAa,EACZA,KAKTnW,GAAOkjC,cAAe,aAAc,SAAUrwB,EAAG00B,EAAkBv1B,GAElE,GAAIw1B,GAAcC,EAAaC,EAC9BC,EAAW90B,EAAEw0B,SAAU,IAAWD,GAAOvmC,KAAMgS,EAAEyvB,KAChD,MACkB,gBAAXzvB,GAAEvQ,QAAwBuQ,EAAE4vB,aAAe,IAAK1tB,QAAQ,sCAAwCqyB,GAAOvmC,KAAMgS,EAAEvQ,OAAU,OAIlI,OAAKqlC,IAAiC,UAArB90B,EAAEhB,UAAW,IAG7B21B,EAAe30B,EAAEy0B,cAAgBtnC,GAAOO,WAAYsS,EAAEy0B,eACrDz0B,EAAEy0B,gBACFz0B,EAAEy0B,cAGEK,EACJ90B,EAAG80B,GAAa90B,EAAG80B,GAAWllC,QAAS2kC,GAAQ,KAAOI,GAC3C30B,EAAEw0B,SAAU,IACvBx0B,EAAEyvB,MAAS7B,GAAO5/B,KAAMgS,EAAEyvB,KAAQ,IAAM,KAAQzvB,EAAEw0B,MAAQ,IAAMG,GAIjE30B,EAAES,WAAW,eAAiB,WAI7B,MAHMo0B,IACL1nC,GAAOkU,MAAOszB,EAAe,mBAEvBE,EAAmB,IAI3B70B,EAAEhB,UAAW,GAAM,OAGnB41B,EAAchoC,EAAQ+nC,GACtB/nC,EAAQ+nC,GAAiB,WACxBE,EAAoBx9B,WAIrB8H,EAAMrD,OAAO,WAEZlP,EAAQ+nC,GAAiBC,EAGpB50B,EAAG20B,KAEP30B,EAAEy0B,cAAgBC,EAAiBD,cAGnCH,GAAanhC,KAAMwhC,IAIfE,GAAqB1nC,GAAOO,WAAYknC,IAC5CA,EAAaC,EAAmB,IAGjCA,EAAoBD,EAAcllC,SAI5B,UAtDR,SAgEDvC,GAAOqnB,UAAY,SAAU/kB,EAAMiD,EAASqiC,GAC3C,IAAMtlC,GAAwB,gBAATA,GACpB,MAAO,KAEgB,kBAAZiD,KACXqiC,EAAcriC,EACdA,GAAU,GAEXA,EAAUA,GAAWjG,EAErB,IAAIuoC,GAAS5gB,GAAWjgB,KAAM1E,GAC7BgzB,GAAWsS,KAGZ,OAAKC,IACKtiC,EAAQF,cAAewiC,EAAO,MAGxCA,EAAS7nC,GAAOq1B,eAAiB/yB,GAAQiD,EAAS+vB,GAE7CA,GAAWA,EAAQx1B,QACvBE,GAAQs1B,GAAUlM,SAGZppB,GAAOiG,SAAW4hC,EAAO/hC,aAKjC,IAAIgiC,IAAQ9nC,GAAOsV,GAAGoc,IAKtB1xB,IAAOsV,GAAGoc,KAAO,SAAU4Q,EAAKyF,EAAQ5xB,GACvC,GAAoB,gBAARmsB,IAAoBwF,GAC/B,MAAOA,IAAM79B,MAAOvK,KAAMwK,UAG3B,IAAImL,GAAU7B,EAAUzT,EACvBmnB,EAAOxnB,KACPsrB,EAAMsX,EAAIvtB,QAAQ,IA+CnB,OA7CKiW,IAAO,IACX3V,EAAWrV,GAAOuI,KAAM+5B,EAAI/3B,MAAOygB,EAAKsX,EAAIxiC,SAC5CwiC,EAAMA,EAAI/3B,MAAO,EAAGygB,IAIhBhrB,GAAOO,WAAYwnC,IAGvB5xB,EAAW4xB,EACXA,EAASxlC,QAGEwlC,GAA4B,gBAAXA,KAC5BhoC,EAAO,QAIHmnB,EAAKpnB,OAAS,GAClBE,GAAOojC,MACNd,IAAKA,EAGLviC,KAAMA,EACN6R,SAAU,OACVtP,KAAMylC,IACJ54B,KAAK,SAAUy3B,GAGjBpzB,EAAWtJ,UAEXgd,EAAKiP,KAAM9gB,EAIVrV,GAAO,SAAS41B,OAAQ51B,GAAOqnB,UAAWuf,IAAiBhgC,KAAMyO,GAGjEuxB,KAECt1B,SAAU6E,GAAY,SAAUnE,EAAOqxB,GACzCnc,EAAK3lB,KAAM4U,EAAU3C,IAAcxB,EAAM40B,aAAcvD,EAAQrxB,MAI1DtS,MAMRM,GAAO8iB,KAAKwD,QAAQ0hB,SAAW,SAAUvnC,GACxC,MAAOT,IAAOQ,KAAKR,GAAOm8B,OAAQ,SAAU7mB,GAC3C,MAAO7U,KAAS6U,EAAG7U,OACjBX,OAOJ,IAAI+e,IAAUpf,EAAOH,SAASiK,eAa9BvJ,IAAOioC,QACNC,UAAW,SAAUznC,EAAMW,EAASV,GACnC,GAAIynC,GAAaC,EAASC,EAAWC,EAAQC,EAAWC,EAAYC,EACnEzP,EAAWh5B,GAAOmJ,IAAK1I,EAAM,YAC7BioC,EAAU1oC,GAAQS,GAClBoN,IAGiB,YAAbmrB,IACJv4B,EAAKqI,MAAMkwB,SAAW,YAGvBuP,EAAYG,EAAQT,SACpBI,EAAYroC,GAAOmJ,IAAK1I,EAAM,OAC9B+nC,EAAaxoC,GAAOmJ,IAAK1I,EAAM,QAC/BgoC,GAAmC,aAAbzP,GAAwC,UAAbA,IAChDh5B,GAAOe,QAAQ,QAAUsnC,EAAWG,IAAiB,GAGjDC,GACJN,EAAcO,EAAQ1P,WACtBsP,EAASH,EAAY5mB,IACrB6mB,EAAUD,EAAY5Q,OAEtB+Q,EAASj8B,WAAYg8B,IAAe,EACpCD,EAAU/7B,WAAYm8B,IAAgB,GAGlCxoC,GAAOO,WAAYa,KACvBA,EAAUA,EAAQT,KAAMF,EAAMC,EAAG6nC,IAGd,MAAfnnC,EAAQmgB,MACZ1T,EAAM0T,IAAQngB,EAAQmgB,IAAMgnB,EAAUhnB,IAAQ+mB,GAE1B,MAAhBlnC,EAAQm2B,OACZ1pB,EAAM0pB,KAASn2B,EAAQm2B,KAAOgR,EAAUhR,KAAS6Q,GAG7C,SAAWhnC,GACfA,EAAQunC,MAAMhoC,KAAMF,EAAMoN,GAE1B66B,EAAQv/B,IAAK0E,KAKhB7N,GAAOsV,GAAGrR,QACTgkC,OAAQ,SAAU7mC,GACjB,GAAK8I,UAAUpK,OACd,MAAmByC,UAAZnB,EACN1B,KACAA,KAAK6B,KAAK,SAAUb,GACnBV,GAAOioC,OAAOC,UAAWxoC,KAAM0B,EAASV,IAI3C,IAAIme,GAAS+pB,EACZC,GAAQtnB,IAAK,EAAGgW,KAAM,GACtB92B,EAAOf,KAAM,GACbmJ,EAAMpI,GAAQA,EAAKiG,aAEpB,IAAMmC,EAON,MAHAgW,GAAUhW,EAAIU,gBAGRvJ,GAAOiZ,SAAU4F,EAASpe,UAMpBA,GAAKqoC,wBAA0BljC,KAC1CijC,EAAMpoC,EAAKqoC,yBAEZF,EAAMh0B,EAAW/L,IAEhB0Y,IAAKsnB,EAAItnB,KAASqnB,EAAIG,aAAelqB,EAAQyS,YAAiBzS,EAAQ0S,WAAc,GACpFgG,KAAMsR,EAAItR,MAASqR,EAAII,aAAenqB,EAAQqS,aAAiBrS,EAAQsS,YAAc,KAX9E0X,GAeT7P,SAAU,WACT,GAAMt5B,KAAM,GAAZ,CAIA,GAAIupC,GAAchB,EACjBiB,GAAiB3nB,IAAK,EAAGgW,KAAM,GAC/B92B,EAAOf,KAAM,EAwBd,OArBwC,UAAnCM,GAAOmJ,IAAK1I,EAAM,YAEtBwnC,EAASxnC,EAAKqoC,yBAGdG,EAAevpC,KAAKupC,eAGpBhB,EAASvoC,KAAKuoC,SACRjoC,GAAO+F,SAAUkjC,EAAc,GAAK,UACzCC,EAAeD,EAAahB,UAI7BiB,EAAa3nB,KAAQvhB,GAAOmJ,IAAK8/B,EAAc,GAAK,kBAAkB,GACtEC,EAAa3R,MAAQv3B,GAAOmJ,IAAK8/B,EAAc,GAAK,mBAAmB,KAOvE1nB,IAAM0mB,EAAO1mB,IAAO2nB,EAAa3nB,IAAMvhB,GAAOmJ,IAAK1I,EAAM,aAAa,GACtE82B,KAAM0Q,EAAO1Q,KAAO2R,EAAa3R,KAAOv3B,GAAOmJ,IAAK1I,EAAM,cAAc,MAI1EwoC,aAAc,WACb,MAAOvpC,MAAK4E,IAAI,WAGf,IAFA,GAAI2kC,GAAevpC,KAAKupC,cAAgBpqB,GAEhCoqB,IAAmBjpC,GAAO+F,SAAUkjC,EAAc,SAAuD,WAA3CjpC,GAAOmJ,IAAK8/B,EAAc,aAC/FA,EAAeA,EAAaA,YAE7B,OAAOA,IAAgBpqB,QAM1B7e,GAAOuB,MAAQ2vB,WAAY,cAAeI,UAAW,eAAiB,SAAU0T,EAAQz4B,GACvF,GAAIgV,GAAM,IAAI1gB,KAAM0L,EAEpBvM,IAAOsV,GAAI0vB,GAAW,SAAUt5B,GAC/B,MAAO0gB,IAAQ1sB,KAAM,SAAUe,EAAMukC,EAAQt5B,GAC5C,GAAIk9B,GAAMh0B,EAAWnU,EAErB,OAAa8B,UAARmJ,EACGk9B,EAAOr8B,IAAQq8B,GAAOA,EAAKr8B,GACjCq8B,EAAItpC,SAASiK,gBAAiBy7B,GAC9BvkC,EAAMukC,QAGH4D,EACJA,EAAIO,SACF5nB,EAAYvhB,GAAQ4oC,GAAM1X,aAApBxlB,EACP6V,EAAM7V,EAAM1L,GAAQ4oC,GAAMtX,aAI3B7wB,EAAMukC,GAAWt5B,IAEhBs5B,EAAQt5B,EAAKxB,UAAUpK,OAAQ,SAQpCE,GAAOuB,MAAQ,MAAO,QAAU,SAAUb,EAAG6L,GAC5CvM,GAAOyP,SAAUlD,GAAS3C,EAAcnF,GAAQ+zB,cAC/C,SAAU/3B,EAAMy2B,GACf,MAAKA,IACJA,EAAWhrB,GAAQzL,EAAM8L,GAElBJ,GAAUtL,KAAMq2B,GACtBl3B,GAAQS,GAAOu4B,WAAYzsB,GAAS,KACpC2qB,GALF,WAaHl3B,GAAOuB,MAAQ6nC,OAAQ,SAAUC,MAAO,SAAW,SAAU7mC,EAAMzC,GAClEC,GAAOuB,MAAQ44B,QAAS,QAAU33B,EAAM+D,QAASxG,EAAM,GAAI,QAAUyC,GAAQ,SAAU8mC,EAAcC,GAEpGvpC,GAAOsV,GAAIi0B,GAAa,SAAUrP,EAAQ1xB,GACzC,GAAI6jB,GAAYniB,UAAUpK,SAAYwpC,GAAkC,iBAAXpP,IAC5D3uB,EAAQ+9B,IAAkBpP,KAAW,GAAQ1xB,KAAU,EAAO,SAAW,SAE1E,OAAO4jB,IAAQ1sB,KAAM,SAAUe,EAAMV,EAAMyI,GAC1C,GAAIK,EAEJ,OAAK7I,IAAOC,SAAUQ,GAIdA,EAAKnB,SAASiK,gBAAiB,SAAW/G,GAI3B,IAAlB/B,EAAKP,UACT2I,EAAMpI,EAAK8I,gBAIJ6B,KAAKC,IACX5K,EAAKuI,KAAM,SAAWxG,GAAQqG,EAAK,SAAWrG,GAC9C/B,EAAKuI,KAAM,SAAWxG,GAAQqG,EAAK,SAAWrG,GAC9CqG,EAAK,SAAWrG,KAIDD,SAAViG,EAENxI,GAAOmJ,IAAK1I,EAAMV,EAAMwL,GAGxBvL,GAAO8I,MAAOrI,EAAMV,EAAMyI,EAAO+C,IAChCxL,EAAMssB,EAAY6N,EAAS33B,OAAW8pB,EAAW,WAOvDrsB,GAAOsV,GAAGk0B,KAAO,WAChB,MAAO9pC,MAAKI,QAGbE,GAAOsV,GAAGm0B,QAAUzpC,GAAOsV,GAAG2S,QAkBP,kBAAXyhB,SAAyBA,OAAOC,KAC3CD,OAAQ,YAAc,WACrB,MAAO1pC,KAOT,IAEC4pC,IAAUnqC,EAAOO,OAGjB6pC,GAAKpqC,EAAOqqC,CAwBb,OAtBA9pC,IAAO+pC,WAAa,SAAUt3B,GAS7B,MARKhT,GAAOqqC,IAAM9pC,KACjBP,EAAOqqC,EAAID,IAGPp3B,GAAQhT,EAAOO,SAAWA,KAC9BP,EAAOO,OAAS4pC,IAGV5pC,UAMIL,KAAaiG,KACxBnG,EAAOO,OAASP,EAAOqqC,EAAI9pC,IAMrBA;;;AAMP,GAAI8pC,GAAG9pC,OAAS8pC,EAAIrqC,OAAOO,OAAO+pC,YAAW,IAW5C,SAAUD,GACT,YAgOA,SAASE,GAAO/V,EAAQgW,GACtB,MAAOvqC,MAAK6B,KAAK,WACf,GAAI2oC,GAAUJ,EAAEpqC,MACZ4C,EAAU4nC,EAAM5nC,KAAK,YACrBlB,EAAU0oC,EAAE7lC,UAAWkmC,EAAMC,SAAUF,EAAM5nC,OAAyB,gBAAV2xB,IAAsBA,EAEjF3xB,IAAM4nC,EAAM5nC,KAAK,WAAaA,EAAO,GAAI6nC,GAAMzqC,KAAM0B,IACrC,gBAAV6yB,GAAoB3xB,EAAK2xB,GAAQgW,GACnC7oC,EAAQuJ,MAAMrI,EAAKqI,KAAKs/B,KAnOrC,GAAIE,GAAQ,SAAUE,EAASjpC,GAC7B1B,KAAK0B,QAAiBA,EACtB1B,KAAK4qC,MAAiBR,EAAExqC,SAAS0J,MACjCtJ,KAAK6qC,SAAiBT,EAAEO,GACxB3qC,KAAK8qC,UACL9qC,KAAK+qC,QAAiB,KACtB/qC,KAAKgrC,eAAiB,EAElBhrC,KAAK0B,QAAQupC,QACfjrC,KAAK6qC,SACF3jC,KAAK,kBACL8qB,KAAKhyB,KAAK0B,QAAQupC,OAAQb,EAAE5xB,MAAM,WACjCxY,KAAK6qC,SAASzb,QAAQ,oBACrBpvB,OAITyqC,GAAMS,QAAW,QAEjBT,EAAMU,oBAAsB,IAC5BV,EAAMW,6BAA+B,IAErCX,EAAMC,UACJW,UAAU,EACVC,UAAU,EACVrgC,MAAM,GAGRw/B,EAAMz9B,UAAUqB,OAAS,SAAUk8B,GACjC,MAAOvqC,MAAK+qC,QAAU/qC,KAAK0P,OAAS1P,KAAKiL,KAAKs/B,IAGhDE,EAAMz9B,UAAU/B,KAAO,SAAUs/B,GAC/B,GAAIgB,GAAOvrC,KACPqD,EAAO+mC,EAAE3a,MAAM,iBAAmBqC,cAAeyY,GAErDvqC,MAAK6qC,SAASzb,QAAQ/rB,GAElBrD,KAAK+qC,SAAW1nC,EAAE0sB,uBAEtB/vB,KAAK+qC,SAAU,EAEf/qC,KAAKwrC,iBACLxrC,KAAK4qC,MAAM/K,SAAS,cAEpB7/B,KAAKyrC,eACLzrC,KAAK0rC,SAEL1rC,KAAK6qC,SAASrX,GAAG,yBAA0B,yBAA0B4W,EAAE5xB,MAAMxY,KAAK0P,KAAM1P,OAExFA,KAAKqrC,SAAS,WACZ,GAAIM,GAAavB,EAAErlC,QAAQ4mC,YAAcJ,EAAKV,SAASvK,SAAS,OAE3DiL,GAAKV,SAASjpB,SAASxhB,QAC1BmrC,EAAKV,SAASxhC,SAASkiC,EAAKX,OAG9BW,EAAKV,SACF5/B,OACA2mB,UAAU,GAET+Z,GACFJ,EAAKV,SAAS,GAAGz+B,YAGnBm/B,EAAKV,SACFhL,SAAS,MACT14B,KAAK,eAAe,GAEvBokC,EAAKK,cAEL,IAAIvoC,GAAI+mC,EAAE3a,MAAM,kBAAoBqC,cAAeyY,GAEnDoB,GACEJ,EAAKV,SAAS3jC,KAAK,iBAChBusB,IAAI,kBAAmB,WACtB8X,EAAKV,SAASzb,QAAQ,SAASA,QAAQ/rB,KAExCwoC,qBAAqBpB,EAAMU,qBAC9BI,EAAKV,SAASzb,QAAQ,SAASA,QAAQ/rB,OAI7ConC,EAAMz9B,UAAU0C,KAAO,SAAUrM,GAC3BA,GAAGA,EAAEysB,iBAETzsB,EAAI+mC,EAAE3a,MAAM,iBAEZzvB,KAAK6qC,SAASzb,QAAQ/rB,GAEjBrD,KAAK+qC,UAAW1nC,EAAE0sB,uBAEvB/vB,KAAK+qC,SAAU,EAEf/qC,KAAK0rC,SAELtB,EAAExqC,UAAU0rB,IAAI,oBAEhBtrB,KAAK6qC,SACF3K,YAAY,MACZ/4B,KAAK,eAAe,GACpBmkB,IAAI,0BAEP8e,EAAErlC,QAAQ4mC,YAAc3rC,KAAK6qC,SAASvK,SAAS,QAC7CtgC,KAAK6qC,SACFpX,IAAI,kBAAmB2W,EAAE5xB,MAAMxY,KAAK8rC,UAAW9rC,OAC/C6rC,qBAAqBpB,EAAMU,qBAC9BnrC,KAAK8rC,cAGTrB,EAAMz9B,UAAU4+B,aAAe,WAC7BxB,EAAExqC,UACC0rB,IAAI,oBACJkI,GAAG,mBAAoB4W,EAAE5xB,MAAM,SAAUnV,GACpCrD,KAAK6qC,SAAS,KAAOxnC,EAAEyP,QAAW9S,KAAK6qC,SAAS5lB,IAAI5hB,EAAEyP,QAAQ1S,QAChEJ,KAAK6qC,SAASzb,QAAQ,UAEvBpvB,QAGPyqC,EAAMz9B,UAAU0+B,OAAS,WACnB1rC,KAAK+qC,SAAW/qC,KAAK0B,QAAQ4pC,SAC/BtrC,KAAK6qC,SAASrX,GAAG,2BAA4B4W,EAAE5xB,MAAM,SAAUnV,GAClD,IAAXA,EAAEmK,OAAexN,KAAK0P,QACrB1P,OACOA,KAAK+qC,SACf/qC,KAAK6qC,SAASvf,IAAI,6BAItBmf,EAAMz9B,UAAU8+B,UAAY,WAC1B,GAAIP,GAAOvrC,IACXA,MAAK6qC,SAASn7B,OACd1P,KAAKqrC,SAAS,WACZE,EAAKX,MAAM1K,YAAY,cACvBqL,EAAKQ,iBACLR,EAAKV,SAASzb,QAAQ,sBAI1Bqb,EAAMz9B,UAAUg/B,eAAiB,WAC/BhsC,KAAK8qC,WAAa9qC,KAAK8qC,UAAUphB,SACjC1pB,KAAK8qC,UAAY,MAGnBL,EAAMz9B,UAAUq+B,SAAW,SAAU50B,GACnC,GAAI80B,GAAOvrC,KACPo8B,EAAUp8B,KAAK6qC,SAASvK,SAAS,QAAU,OAAS,EAExD,IAAItgC,KAAK+qC,SAAW/qC,KAAK0B,QAAQ2pC,SAAU,CACzC,GAAIY,GAAY7B,EAAErlC,QAAQ4mC,YAAcvP,CAgBxC,IAdAp8B,KAAK8qC,UAAYV,EAAE,8BAAgChO,EAAU,QAC1D/yB,SAASrJ,KAAK4qC,OAEjB5qC,KAAK6qC,SAASrX,GAAG,yBAA0B4W,EAAE5xB,MAAM,SAAUnV,GACvDA,EAAEyP,SAAWzP,EAAEgtB,gBACM,UAAzBrwB,KAAK0B,QAAQ2pC,SACTrrC,KAAK6qC,SAAS,GAAGrlB,MAAMvkB,KAAKjB,KAAK6qC,SAAS,IAC1C7qC,KAAK0P,KAAKzO,KAAKjB,QAClBA,OAECisC,GAAWjsC,KAAK8qC,UAAU,GAAG1+B,YAEjCpM,KAAK8qC,UAAUjL,SAAS,OAEnBppB,EAAU,MAEfw1B,GACEjsC,KAAK8qC,UACFrX,IAAI,kBAAmBhd,GACvBo1B,qBAAqBpB,EAAMW,8BAC9B30B,QAEG,KAAKzW,KAAK+qC,SAAW/qC,KAAK8qC,UAAW,CAC1C9qC,KAAK8qC,UAAU5K,YAAY,KAE3B,IAAIgM,GAAiB,WACnBX,EAAKS,iBACLv1B,GAAYA,IAEd2zB,GAAErlC,QAAQ4mC,YAAc3rC,KAAK6qC,SAASvK,SAAS,QAC7CtgC,KAAK8qC,UACFrX,IAAI,kBAAmByY,GACvBL,qBAAqBpB,EAAMW,8BAC9Bc,QAEOz1B,IACTA,KAIJg0B,EAAMz9B,UAAUw+B,eAAiB,WAC/BxrC,KAAKgrC,eAAiBhrC,KAAKmsC,oBAG7B1B,EAAMz9B,UAAUy+B,aAAe,WAC7B,GAAIW,GAAUzM,SAAU3/B,KAAK4qC,MAAMnhC,IAAI,kBAAoB,EAAI,GAC3DzJ,MAAKgrC,gBAAgBhrC,KAAK4qC,MAAMnhC,IAAI,gBAAiB2iC,EAAUpsC,KAAKgrC,iBAG1EP,EAAMz9B,UAAU++B,eAAiB,WAC/B/rC,KAAK4qC,MAAMnhC,IAAI,gBAAiB,KAGlCghC,EAAMz9B,UAAUm/B,iBAAmB,WACjC,GAAIvsC,SAAS0J,KAAK+iC,aAAetsC,OAAOusC,WAAY,MAAO,EAC3D,IAAIC,GAAY3sC,SAAS+F,cAAc,MACvC4mC,GAAUxqB,UAAY,0BACtB/hB,KAAK4qC,MAAM1U,OAAOqW,EAClB,IAAIvB,GAAiBuB,EAAUngC,YAAcmgC,EAAUF,WAEvD,OADArsC,MAAK4qC,MAAM,GAAGjwB,YAAY4xB,GACnBvB,EAmBT,IAAIlyB,GAAMsxB,EAAEx0B,GAAG42B,KAEfpC,GAAEx0B,GAAG42B,MAAoBlC,EACzBF,EAAEx0B,GAAG42B,MAAMC,YAAchC,EAMzBL,EAAEx0B,GAAG42B,MAAMnC,WAAa,WAEtB,MADAD,GAAEx0B,GAAG42B,MAAQ1zB,EACN9Y,MAOToqC,EAAExqC,UAAU4zB,GAAG,0BAA2B,wBAAyB,SAAUnwB,GAC3E,GAAImnC,GAAUJ,EAAEpqC,MACZ0lB,EAAU8kB,EAAMrjC,KAAK,QACrBulC,EAAUtC,EAAEI,EAAMrjC,KAAK,gBAAmBue,GAAQA,EAAK3iB,QAAQ,iBAAkB,KACjFwxB,EAAUmY,EAAQ9pC,KAAK,YAAc,SAAWwnC,EAAE7lC,QAAS0mC,QAAS,IAAI9pC,KAAKukB,IAASA,GAAQgnB,EAAQ9pC,OAAQ4nC,EAAM5nC,OAEpH4nC,GAAM/iB,GAAG,MAAMpkB,EAAEysB,iBAErB4c,EAAQjZ,IAAI,gBAAiB,SAAUkZ,GACjCA,EAAU5c,sBACd2c,EAAQjZ,IAAI,kBAAmB,WAC7B+W,EAAM/iB,GAAG,aAAe+iB,EAAMpb,QAAQ,aAG1Ckb,EAAOrpC,KAAKyrC,EAASnY,EAAQv0B,SAG/BM,SA0BC,SAAShB,GAOV,QAAS2N,KACPjN,KAAK4sC,WACD5sC,KAAK6sC,OACPC,EAAU7rC,KAAKjB,KAAMA,KAAK6sC,OAI9B,QAASC,GAAUC,GACbA,IAEF/sC,KAAK6sC,MAAQE,EAEbA,EAAKC,YAAchtC,KAAKgtC,UAAYD,EAAKC,WACzCD,EAAKE,eAAiBjtC,KAAK4sC,QAAQK,aAAeF,EAAKE,cACvDF,EAAKG,WAAaltC,KAAKktC,SAAWH,EAAKG,UACvCH,EAAKI,cAAgBntC,KAAKmtC,YAAcJ,EAAKI,aAEzCntC,KAAKktC,WACPltC,KAAKotC,kBAKX,QAASC,GAAaN,GACpB/sC,KAAK4sC,WACL5sC,KAAKmtC,aAAc,EACnBL,EAAU7rC,KAAKjB,KAAM+sC,GAQvB,QAASO,GAAmBhf,EAAUjuB,EAAMktC,EAAMvsC,GAChD,IAAKusC,EACH,QAEF,IAAkBC,GAAM12B,EAAK22B,EAAQC,EAAOC,EAAQC,EAAgBC,EAAhEC,KACAC,EAAa1tC,EAAKD,OAAQ4tC,EAAc3tC,EAAKW,GAAIitC,EAAW5tC,EAAKW,EAAE,EACvE,IAAIA,IAAM+sC,GAAcR,EAAKW,WAAY,CAKvC,GAA+B,kBAApBX,GAAKW,WAEd,MADA5f,IAAYA,EAAShoB,KAAKinC,EAAKW,aACvBX,EAER,KAAKC,EAAO,EAAG12B,EAAMy2B,EAAKW,WAAW9tC,OAAe0W,EAAP02B,EAAYA,IACvDlf,GAAYA,EAAShoB,KAAKinC,EAAKW,WAAWV,GAE5C,QAAQD,GAIZ,GAAqB,MAAhBS,GAAuC,OAAhBA,GAAyBT,EAAKS,GAAc,CAKtE,GAAoB,MAAhBA,EAAqB,CACvB,IAAKP,IAAUF,GACE,eAAXE,GAA2BF,EAAK93B,eAAeg4B,KACjDK,EAAYA,EAAUnpC,OAAO2oC,EAAmBhf,EAAUjuB,EAAMktC,EAAKE,GAASzsC,EAAE,IAGpF,OAAO8sC,GACF,GAAmB,OAAhBE,EAAsB,CAC9BH,EAAc7sC,EAAE,IAAM+sC,GAAe/sC,EAAE,IAAM+sC,GAA2B,MAAbE,EACxDJ,GAAcN,EAAKW,aAEpBJ,EAAYA,EAAUnpC,OAAO2oC,EAAmBhf,EAAUjuB,EAAMktC,EAAMQ,IAGxE,KAAKN,IAAUF,GACE,eAAXE,GAA2BF,EAAK93B,eAAeg4B,KACnC,MAAXA,GAA6B,OAAXA,GAChBF,EAAKE,GAAQS,aAAeL,IAC7BC,EAAYA,EAAUnpC,OAAO2oC,EAAmBhf,EAAUjuB,EAAMktC,EAAKE,GAASM,KAEhFD,EAAYA,EAAUnpC,OAAO2oC,EAAmBhf,EAAUjuB,EAAMktC,EAAKE,GAASzsC,KAE9E8sC,EAAYA,EAAUnpC,OADd8oC,IAAWQ,EACUX,EAAmBhf,EAAUjuB,EAAMktC,EAAKE,GAASzsC,EAAE,GAGnDssC,EAAmBhf,EAAUjuB,EAAMktC,EAAKE,GAASzsC,IAIpF,OAAO8sC,GAGTA,EAAYA,EAAUnpC,OAAO2oC,EAAmBhf,EAAUjuB,EAAMktC,EAAKS,GAAchtC,EAAE,IAavF,GAVA0sC,EAAQH,EAAK,KACTG,GAKFJ,EAAmBhf,EAAUjuB,EAAMqtC,EAAO1sC,EAAE,GAG9C2sC,EAASJ,EAAK,MAEZ,GAAOQ,EAAJ/sC,EAAgB,CACd2sC,EAAOO,YAERZ,EAAmBhf,EAAUjuB,EAAMstC,EAAQI,EAI7C,KAAIN,IAAUE,GACE,eAAXF,GAA2BE,EAAOl4B,eAAeg4B,KAC/CA,IAAWQ,EAEZX,EAAmBhf,EAAUjuB,EAAMstC,EAAOF,GAASzsC,EAAE,GAC7CysC,IAAWO,EAEnBV,EAAmBhf,EAAUjuB,EAAMstC,EAAOF,GAASzsC,EAAE,IAErD4sC,KACAA,EAAeH,GAAUE,EAAOF,GAChCH,EAAmBhf,EAAUjuB,GAAQ8tC,KAAMP,GAAkB5sC,EAAE,SAI7D2sC,GAAOO,WAEfZ,EAAmBhf,EAAUjuB,EAAMstC,EAAQI,GACnCJ,EAAO,MAAQA,EAAO,KAAKO,YACnCZ,EAAmBhf,EAAUjuB,EAAMstC,EAAO,KAAMI,EAIpD,OAAOD,GAGT,QAASM,GAAiB/tC,EAAMguC,GAE9BhuC,EAAuB,gBAATA,GAAoBA,EAAKwE,MAAM7E,KAAKgtC,WAAa3sC,EAAKwK,OAKpE,KAAI,GAAI7J,GAAI,EAAG8V,EAAMzW,EAAKD,OAAc0W,EAAN9V,EAAE,EAASA,IAC3C,GAAe,OAAZX,EAAKW,IAA6B,OAAdX,EAAKW,EAAE,GAC5B,MAOJ,KAHA,GAAIusC,GAAOvtC,KAAKotC,aACZtqC,EAAOzC,EAAKoT,QAET3Q,GAAM,CAQX,GANKyqC,EAAKzqC,KACRyqC,EAAKzqC,OAGPyqC,EAAOA,EAAKzqC,GAEQ,IAAhBzC,EAAKD,OAAc,CAErB,GAAKmtC,EAAKW,YAGL,GAA8B,kBAApBX,GAAKW,WAClBX,EAAKW,YAAcX,EAAKW,WAAYG,OAEjC,IAAI3pC,EAAQ6oC,EAAKW,cAEpBX,EAAKW,WAAW5nC,KAAK+nC,IAEhBd,EAAKW,WAAWI,QAAQ,CAE3B,GAAI11B,GAAI21B,CAEiC,oBAA9BvuC,MAAK4sC,QAAQK,eACtBr0B,EAAI5Y,KAAK4sC,QAAQK,cAGfr0B,EAAI,GAAK20B,EAAKW,WAAW9tC,OAASwY,IAEpC20B,EAAKW,WAAWI,QAAS,EACzBE,QAAQh6B,MAAM,mIAGA+4B,EAAKW,WAAW9tC,QAC9BouC,QAAQC,cAxBZlB,GAAKW,WAAaG,CA4BpB,QAAO,EAETvrC,EAAOzC,EAAKoT,QAEd,OAAO,EA5MT,GAAI/O,GAAU+S,MAAM/S,QAAU+S,MAAM/S,QAAU,SAAkBvE,GAC9D,MAA+C,mBAAxC+X,OAAOlL,UAAUuI,SAAStU,KAAKd,IAEpCouC,EAAsB,EAmN1BlB,GAAargC,UAAUggC,UAAY,IAEnCK,EAAargC,UAAU0hC,gBAAkB,SAASzmB,GAChDjoB,KAAK4sC,SAAW3/B,EAAKhM,KAAKjB,MAC1BA,KAAK4sC,QAAQK,aAAehlB,EACvBjoB,KAAK6sC,QAAO7sC,KAAK6sC,UACtB7sC,KAAK6sC,MAAMI,aAAehlB,GAG5BolB,EAAargC,UAAUzK,MAAQ,GAE/B8qC,EAAargC,UAAUuc,KAAO,SAAShnB,EAAOqT,GAE5C,MADA5V,MAAK2uC,KAAKpsC,EAAO,EAAGqT,GACb5V,MAGTqtC,EAAargC,UAAU2hC,KAAO,SAASpsC,EAAOqsC,EAAKh5B,GAOjD,QAASy4B,KACO,MAARO,GACJpnB,EAAK8D,IAAI/oB,EAAO8rC,GAElBz4B,EAAGrL,MAAMvK,KAAMwK,WAVjB,GAAIgd,GAAOxnB,IAEX,IAAkB,kBAAP4V,GACT,KAAM,IAAI9V,OAAM,0CAclB,OAJAuuC,GAASQ,QAAUj5B,EAEnB5V,KAAKwzB,GAAGjxB,EAAO8rC,GAER7mB,GAGT6lB,EAAargC,UAAU8hC,KAAO,WAE5B9uC,KAAK4sC,SAAW3/B,EAAKhM,KAAKjB,KAE1B,IAAIK,GAAOmK,UAAU,EAErB,IAAa,gBAATnK,IAA2BL,KAAKmtC,cAC7BntC,KAAK4sC,QAAQO,YAAe,OAAO,CAI1C,IAAIntC,KAAK+uC,KAAM,CAGb,IAAK,GAFDhnC,GAAIyC,UAAUpK,OACdsW,EAAO,GAAIe,OAAM1P,EAAI,GAChB/G,EAAI,EAAO+G,EAAJ/G,EAAOA,IAAK0V,EAAK1V,EAAI,GAAKwJ,UAAUxJ,EACpD,KAAKA,EAAI,EAAG+G,EAAI/H,KAAK+uC,KAAK3uC,OAAY2H,EAAJ/G,EAAOA,IACvChB,KAAKuC,MAAQlC,EACbL,KAAK+uC,KAAK/tC,GAAGuJ,MAAMvK,KAAM0W,GAK7B,GAAa,UAATrW,KAEGL,KAAK+uC,MACP/uC,KAAK4sC,QAAQp4B,OACZxU,KAAKktC,UAAYltC,KAAKotC,aAAa54B,OAErC,KAAIhK,WAAU,YAAc1K,OACpB0K,UAAU,GAEV,GAAI1K,OAAM,uCAMtB,IAAI+a,EAEJ,IAAG7a,KAAKktC,SAAU,CAChBryB,IACA,IAAIm0B,GAAqB,gBAAT3uC,GAAoBA,EAAKwE,MAAM7E,KAAKgtC,WAAa3sC,EAAKwK,OACtEyiC,GAAmBrsC,KAAKjB,KAAM6a,EAASm0B,EAAIhvC,KAAKotC,aAAc,OAG9DvyB,GAAU7a,KAAK4sC,QAAQvsC,EAGzB,IAAuB,kBAAZwa,GAAwB,CAEjC,GADA7a,KAAKuC,MAAQlC,EACY,IAArBmK,UAAUpK,OACZya,EAAQ5Z,KAAKjB,UAEV,IAAIwK,UAAUpK,OAAS,EAC1B,OAAQoK,UAAUpK,QAChB,IAAK,GACHya,EAAQ5Z,KAAKjB,KAAMwK,UAAU,GAC7B,MACF,KAAK,GACHqQ,EAAQ5Z,KAAKjB,KAAMwK,UAAU,GAAIA,UAAU,GAC3C,MAEF,SAGE,IAAK,GAFDzC,GAAIyC,UAAUpK,OACdsW,EAAO,GAAIe,OAAM1P,EAAI,GAChB/G,EAAI,EAAO+G,EAAJ/G,EAAOA,IAAK0V,EAAK1V,EAAI,GAAKwJ,UAAUxJ,EACpD6Z,GAAQtQ,MAAMvK,KAAM0W,GAE1B,OAAO,EAEJ,GAAImE,EAAS,CAGhB,IAAK,GAFD9S,GAAIyC,UAAUpK,OACdsW,EAAO,GAAIe,OAAM1P,EAAI,GAChB/G,EAAI,EAAO+G,EAAJ/G,EAAOA,IAAK0V,EAAK1V,EAAI,GAAKwJ,UAAUxJ,EAGpD,KAAK,GADD8sC,GAAYjzB,EAAQhQ,QACf7J,EAAI,EAAG+G,EAAI+lC,EAAU1tC,OAAY2H,EAAJ/G,EAAOA,IAC3ChB,KAAKuC,MAAQlC,EACbytC,EAAU9sC,GAAGuJ,MAAMvK,KAAM0W,EAE3B,OAAQo3B,GAAU1tC,OAAS,GAAMJ,KAAK+uC,KAGtC,MAAO/uC,MAAK+uC,MAKhB1B,EAAargC,UAAUwmB,GAAK,SAASnzB,EAAMguC,GAEzC,GAAoB,kBAAThuC,GAET,MADAL,MAAKivC,MAAM5uC,GACJL,IAGT,IAAwB,kBAAbquC,GACT,KAAM,IAAIvuC,OAAM,wCAQlB,IANAE,KAAK4sC,SAAW3/B,EAAKhM,KAAKjB,MAI1BA,KAAK8uC,KAAK,cAAezuC,EAAMguC,GAE5BruC,KAAKktC,SAEN,MADAkB,GAAiBntC,KAAKjB,KAAMK,EAAMguC,GAC3BruC,IAGT,IAAKA,KAAK4sC,QAAQvsC,IAIb,GAAiC,kBAAvBL,MAAK4sC,QAAQvsC,GAE1BL,KAAK4sC,QAAQvsC,IAASL,KAAK4sC,QAAQvsC,GAAOguC,OAEvC,IAAI3pC,EAAQ1E,KAAK4sC,QAAQvsC,MAE5BL,KAAK4sC,QAAQvsC,GAAMiG,KAAK+nC,IAGnBruC,KAAK4sC,QAAQvsC,GAAMiuC,QAAQ,CAE9B,GAAI11B,GAAI21B,CAEiC,oBAA9BvuC,MAAK4sC,QAAQK,eACtBr0B,EAAI5Y,KAAK4sC,QAAQK,cAGfr0B,EAAI,GAAK5Y,KAAK4sC,QAAQvsC,GAAMD,OAASwY,IAEvC5Y,KAAK4sC,QAAQvsC,GAAMiuC,QAAS,EAC5BE,QAAQh6B,MAAM,mIAGAxU,KAAK4sC,QAAQvsC,GAAMD,QACjCouC,QAAQC,cA1BZzuC,MAAK4sC,QAAQvsC,GAAQguC,CA8BvB,OAAOruC,OAGTqtC,EAAargC,UAAUiiC,MAAQ,SAASr5B,GAMtC,GAJI5V,KAAK+uC,OACP/uC,KAAK+uC,SAGW,kBAAPn5B,GACT,KAAM,IAAI9V,OAAM,2CAKlB,OADAE,MAAK+uC,KAAKzoC,KAAKsP,GACR5V,MAGTqtC,EAAargC,UAAUkiC,YAAc7B,EAAargC,UAAUwmB,GAE5D6Z,EAAargC,UAAUse,IAAM,SAASjrB,EAAMguC,GAC1C,GAAwB,kBAAbA,GACT,KAAM,IAAIvuC,OAAM,kDAGlB,IAAIwuB,GAAS6gB,IAEb,IAAGnvC,KAAKktC,SAAU,CAChB,GAAI8B,GAAqB,gBAAT3uC,GAAoBA,EAAKwE,MAAM7E,KAAKgtC,WAAa3sC,EAAKwK,OACtEskC,GAAQ7B,EAAmBrsC,KAAKjB,KAAM,KAAMgvC,EAAIhvC,KAAKotC,aAAc,OAEhE,CAEH,IAAKptC,KAAK4sC,QAAQvsC,GAAO,MAAOL,KAChCsuB,GAAWtuB,KAAK4sC,QAAQvsC,GACxB8uC,EAAM7oC,MAAM4nC,WAAW5f,IAGzB,IAAK,GAAI8gB,GAAM,EAAGA,EAAMD,EAAM/uC,OAAQgvC,IAAS,CAC7C,GAAI5B,GAAO2B,EAAMC,EAEjB,IADA9gB,EAAWkf,EAAKU,WACZxpC,EAAQ4pB,GAAW,CAIrB,IAAK,GAFDgL,GAAW,GAENt4B,EAAI,EAAGZ,EAASkuB,EAASluB,OAAYA,EAAJY,EAAYA,IACpD,GAAIstB,EAASttB,KAAOqtC,GACjB/f,EAASttB,GAAGqtC,UAAY/f,EAASttB,GAAGqtC,WAAaA,GACjD/f,EAASttB,GAAG6tC,SAAWvgB,EAASttB,GAAG6tC,UAAYR,EAAW,CAC3D/U,EAAWt4B,CACX,OAIJ,GAAe,EAAXs4B,EACF,QAkBF,OAfGt5B,MAAKktC,SACNM,EAAKU,WAAWj3B,OAAOqiB,EAAU,GAGjCt5B,KAAK4sC,QAAQvsC,GAAM4W,OAAOqiB,EAAU,GAGd,IAApBhL,EAASluB,SACRJ,KAAKktC,eACCM,GAAKU,iBAGLluC,MAAK4sC,QAAQvsC,IAGjBL,MAEAsuB,IAAa+f,GACnB/f,EAAS+f,UAAY/f,EAAS+f,WAAaA,GAC3C/f,EAASugB,SAAWvgB,EAASugB,UAAYR,KACvCruC,KAAKktC,eACCM,GAAKU,iBAGLluC,MAAK4sC,QAAQvsC,IAK1B,MAAOL,OAGTqtC,EAAargC,UAAUqiC,OAAS,SAASz5B,GACvC,GAAkBoU,GAAdhpB,EAAI,EAAG+G,EAAI,CACf,IAAI6N,GAAM5V,KAAK+uC,MAAQ/uC,KAAK+uC,KAAK3uC,OAAS,GAExC,IADA4pB,EAAMhqB,KAAK+uC,KACP/tC,EAAI,EAAG+G,EAAIiiB,EAAI5pB,OAAY2H,EAAJ/G,EAAOA,IAChC,GAAG4U,IAAOoU,EAAIhpB,GAEZ,MADAgpB,GAAI/S,OAAOjW,EAAG,GACPhB,SAIXA,MAAK+uC,OAEP,OAAO/uC,OAGTqtC,EAAargC,UAAUsiC,eAAiBjC,EAAargC,UAAUse,IAE/D+hB,EAAargC,UAAUuiC,mBAAqB,SAASlvC,GACnD,GAAyB,IAArBmK,UAAUpK,OAEZ,OADCJ,KAAK4sC,SAAW3/B,EAAKhM,KAAKjB,MACpBA,IAGT,IAAGA,KAAKktC,SAIN,IAAK,GAHD8B,GAAqB,gBAAT3uC,GAAoBA,EAAKwE,MAAM7E,KAAKgtC,WAAa3sC,EAAKwK,QAClEskC,EAAQ7B,EAAmBrsC,KAAKjB,KAAM,KAAMgvC,EAAIhvC,KAAKotC,aAAc,GAE9DgC,EAAM,EAAGA,EAAMD,EAAM/uC,OAAQgvC,IAAS,CAC7C,GAAI5B,GAAO2B,EAAMC,EACjB5B,GAAKU,WAAa,SAGjB,CACH,IAAKluC,KAAK4sC,QAAQvsC,GAAO,MAAOL,KAChCA,MAAK4sC,QAAQvsC,GAAQ,KAEvB,MAAOL,OAGTqtC,EAAargC,UAAU8gC,UAAY,SAASztC,GAC1C,GAAGL,KAAKktC,SAAU,CAChB,GAAI5e,MACA0gB,EAAqB,gBAAT3uC,GAAoBA,EAAKwE,MAAM7E,KAAKgtC,WAAa3sC,EAAKwK,OAEtE,OADAyiC,GAAmBrsC,KAAKjB,KAAMsuB,EAAU0gB,EAAIhvC,KAAKotC,aAAc,GACxD9e,EAST,MANAtuB,MAAK4sC,SAAW3/B,EAAKhM,KAAKjB,MAErBA,KAAK4sC,QAAQvsC,KAAOL,KAAK4sC,QAAQvsC,OACjCqE,EAAQ1E,KAAK4sC,QAAQvsC,MACxBL,KAAK4sC,QAAQvsC,IAASL,KAAK4sC,QAAQvsC,KAE9BL,KAAK4sC,QAAQvsC,IAGtBgtC,EAAargC,UAAUwiC,aAAe,WAEpC,MAAGxvC,MAAK+uC,KACC/uC,KAAK+uC,SAadzvC,EAAQmwC,cAAgBpC,GAGP,mBAAZqC,UAAoD,mBAAlBA,SAAQC,OAA4C,mBAAZrwC,SAA0BA,QAAUS,QA0BvH,SAAWA,EAAQH,EAAU0lB,EAAUnY,EAAYyiC,EAAoBtJ,GA4CvE,QAASuJ,GAAaluC,EAAQmuC,GAC1B,GAAI7hB,SAAWtsB,GAAOmuC,EACtB,OAAY,YAAL7hB,KACE,UAALA,IAAiBtsB,EAAOmuC,KACvB,WAAL7hB,EAGJ,QAAS8hB,GAAapuC,EAAQmuC,GAC1B,QAAsC,gBAArBnuC,GAAOmuC,KAA0BnuC,EAAOmuC,IAM7D,QAASprC,GAAQsrC,GACb,MAA6C,mBAAtC93B,OAAOlL,UAAUuI,SAAStU,KAAK+uC,GAI1C,QAASC,KACL,GAAIntC,GAAO,kBAAmB4Q,EAAW,+BAEzC,KAAKw8B,EAAMC,UAAUC,UAA8C,gBAA3BD,WAAUC,QAAQttC,GAAmB,CAEzE,GAAIutC,GAAcF,UAAUC,QAAQttC,GAAMutC,WACtCA,KAAgBH,EAAMC,UAAUG,YAAcH,UAAUG,UAAU58B,IAAay8B,UAAUG,UAAU58B,GAAU68B,gBAC7GC,EAAeH,EAAYvuC,MAAM,SAGzC,IAAK0uC,EAAc,CACf,GAAIC,EACJ,KACIA,EAAQ,GAAIx7B,eAAc,iCAC1Bu7B,EAAe/4B,MAAMzK,UAAUnC,MAAM5J,KAAKwvC,EAAMC,YAAY,YAAY5uC,MAAM,2BAA4B,GAC1G2uC,EAAQ,KAEZ,MAAOE,KAGX,IAAKH,EACD,OAAO,CAEX,IAAII,GAAQjR,SAAS6Q,EAAa,GAAI,IAAKK,EAAQlR,SAAS6Q,EAAa,GAAI,GAE7E,OADAM,GAA0BF,EAAQ,GAAKC,EAAQ,GACxC,EA6CX,QAASE,KACL,IAAIC,EAAJ,CAGAA,GAAa,CACb,KAAK,GAAIhwC,GAAI,EAAGA,EAAIiwC,EAAc7wC,OAAQY,IACtCiwC,EAAcjwC,IAElBiwC,GAAc7wC,OAAS,GA0C3B,QAAS8wC,GAAUt7B,EAAIu7B,GACnB,MAAIH,OACAp7B,GAAG3U,KAAKkwC,OAGZF,GAAc3qC,KAAK,WACfsP,EAAG3U,KAAKkwC,KAUhB,QAASC,KACL,GAAIjxC,GAAMyhB,MACV,IAAkB,KAAdkN,EACA,IAAK,GAAI9tB,GAAI,EAAGqwC,EAAKviB,EAAUjqB,MAAM,KAAM7D,EAAIqwC,EAAGjxC,OAAQY,IACtDb,EAAMA,EAAIkxC,EAAGrwC,GAGrB,OAAOb,GAAImxC,QAWf,QAASjH,GAAW2E,GAOhB,MALAjvC,GAAOuxC,QAAUC,EACjBziB,EAAYkgB,EACRlgB,IACA0iB,EAAgB,WAAa1iB,EAAU/rB,QAAQ,IAAK,KAAO,KAExDuuC,EAYX,QAASG,GAAc7O,GACnB,MAAOA,GAAI9gC,MAAM4vC,GAAO,GAS5B,QAASC,GAAQ/O,GACb,MAAOA,GAAI9gC,MAAM4vC,GAAO,IAAM,GAQlC,QAASE,GAAYhP,GACjB,GAAIhqB,GAAIgqB,EAAI3/B,cAAcnB,MAAM4vC,GAC5BG,EAAQj5B,EAAE,GAAIk5B,EAASl5B,EAAE,GAAIm5B,EAAOn5B,EAAE,IAAM,EAIhD,QAHc,SAATi5B,GAA4B,OAARE,GAA4B,UAATF,GAA6B,QAARE,KAC7DA,EAAO,IAEJF,EAAQ,KAAOC,EAASC,EAQnC,QAASC,GAAWpP,GAMhB,GAHAA,EAAMA,EAAI7/B,QAAQkvC,EAAe,QAG5BrP,EAAI9gC,MAAM,uBAAwB,CAEnC,GAAIowC,GAAgC,MAAxBtP,EAAIuP,UAAU,EAAG,GAAc,GAAK7sB,EAAS8sB,QACjB,OAApCF,EAAKC,UAAUD,EAAK9xC,OAAS,KAC7B8xC,EAAOA,EAAKC,UAAU,EAAGD,EAAKG,YAAY,KAAO,IAGrDzP,EAAMtd,EAASgtB,SAAW,KAAOhtB,EAASitB,KAAOL,EAAOtP,EAI5D,KAAO4P,EAASrxC,KAAKyhC,IACjBA,EAAMA,EAAI7/B,QAAQyvC,EAAU,GAGhC,OAAO5P,GAUX,QAAS6P,GAAsB7P,EAAK8P,GAEhC,GAAIrtB,GAAO,GAAIhQ,EAAUutB,EAAIvtB,QAAQ,IACrB,MAAZA,IACAgQ,EAAOud,EAAIuP,UAAU98B,GACrButB,EAAMA,EAAIuP,UAAU,EAAG98B,GAE3B,IAAIs9B,KACJ,KAAK,GAAIhwC,KAAO+vC,GACRA,EAAWj9B,eAAe9S,IAC1BgwC,EAAErsC,KAAK3D,EAAM,IAAM2jC,EAAmBoM,EAAW/vC,IAGzD,OAAOigC,IAAOgQ,EAAU,IAA2B,IAApBhQ,EAAIvtB,QAAQ,KAAa,IAAM,KAAQs9B,EAAE14B,KAAK,KAAOoL,EAuBxF,QAAS6qB,GAAMt7B,GACX,MAAoB,mBAANA,GAkDlB,QAASrK,GAAMsoC,EAAarmB,EAAQsmB,GAChC,GAAIC,EACJ,KAAK,GAAIlmC,KAAQ2f,GACTA,EAAO/W,eAAe5I,KAClBA,IAAQgmC,IACRE,EAASvmB,EAAO3f,GACM,gBAAXkmC,GACPxoC,EAAMsoC,EAAYhmC,GAAOkmC,EAAQD,GAE3BA,IACND,EAAYhmC,GAAQ2f,EAAO3f,KAI/BgmC,EAAYhmC,GAAQ2f,EAAO3f,GAIvC,OAAOgmC,GAIX,QAASG,KACL,GAAI/f,GAAOrzB,EAAS0J,KAAKvC,YAAYnH,EAAS+F,cAAc,SAAU0c,EAAQ4Q,EAAKlsB,YAAYnH,EAAS+F,cAAc,SACtH0c,GAAMvf,KAAO0uC,EAAgB,OAASyB,EACtCC,EAAwB7wB,IAAU4Q,EAAKvyB,SAAS2hB,EAAMvf,MACtDlD,EAAS0J,KAAKqR,YAAYsY,GAe9B,QAASkgB,GAAYC,GACblD,EAAMgD,IACNF,GAEJ,IAAIK,EAIAH,GACAG,EAAQzzC,EAAS+F,cAAc,iBAAoBytC,EAAOjlC,MAAMrL,KAAO,QAGvEuwC,EAAQzzC,EAAS+F,cAAc,UAC/B0tC,EAAMvwC,KAAOswC,EAAOjlC,MAAMrL,MAG9BuwC,EAAMpvC,GAAKovC,EAAMvwC,KAAOswC,EAAOjlC,MAAMrL,WAC9BswC,GAAOjlC,MAAMrL,KAEW,gBAApBswC,GAAO1nB,YACd0nB,EAAO1nB,UAAY9rB,EAAS0Z,eAAe85B,EAAO1nB,YAGjD0nB,EAAO1nB,YAERnhB,EAAM8oC,EAAMjqC,OACRkwB,SAAU,WACVzX,IAAK,UAELgW,KAAM,QAEVub,EAAO1nB,UAAY9rB,EAAS0J,KAQhC,IAAI1B,GAAMwrC,EAAOjlC,MAAMvG,GAgBvB,IAfAwrC,EAAOjlC,MAAMvG,IAAM,mBAGnB2C,EAAM8oC,EAAOD,EAAOjlC,OAEpBklC,EAAM3Y,OAAS2Y,EAAMC,YAAc,EACnCD,EAAME,mBAAoB,EAC1BH,EAAO1nB,UAAU3kB,YAAYssC,GAEzBD,EAAOI,QACPhgB,EAAG6f,EAAO,OAAQD,EAAOI,QAK1BJ,EAAOK,QAAS,CACf,GAAyEpxB,GAArE4Q,EAAOmgB,EAAO1nB,UAAU3kB,YAAYnH,EAAS+F,cAAc,QAI/D,IAHAstB,EAAKngB,OAASugC,EAAMvwC,KACpBmwB,EAAKygB,OAAS9rC,EACdqrB,EAAKqS,OAAS,OACiB,gBAApB8N,GAAc,QACrB,IAAK,GAAIpyC,KAAKoyC,GAAOK,QACbL,EAAOK,QAAQh+B,eAAezU,KAC1BkyC,EACA7wB,EAAQziB,EAAS+F,cAAc,gBAAkB3E,EAAI,QAErDqhB,EAAQziB,EAAS+F,cAAc,SAC/B0c,EAAMvf,KAAO9B,GAEjBqhB,EAAMvZ,MAAQsqC,EAAOK,QAAQzyC,GAC7BiyB,EAAKlsB,YAAYsb,GAI7B4Q,GAAKvM,SACLuM,EAAKxqB,WAAWkS,YAAYsY,OAE5BogB,GAAMzrC,IAAMA,CAIhB,OAFAwrC,GAAOjlC,MAAMvG,IAAMA,EAEZyrC,EAWX,QAASM,GAASC,EAAK9B,GAED,gBAAP8B,KACPA,GAAOA,GAGX,KADA,GAAIC,GAAI7yC,EAAI4yC,EAAIxzC,OACTY,KAGH,GAFA6yC,EAAKD,EAAI5yC,GACT6yC,EAAK,GAAI7zB,QAA0B,KAAnB6zB,EAAGC,OAAO,EAAG,GAAYD,EAAM,IAAMA,EAAG9wC,QAAQ,QAAS,OAAOA,QAAQ,MAAO,KAAO,KAClG8wC,EAAG1yC,KAAK2wC,GACR,OAAO,CAGf,QAAO,EAWX,QAASiC,GAAsBX,GAC3B,GAAgCY,GAA5B1B,EAAWc,EAAOd,QAOtB,IANAc,EAAOa,OAASb,EAAOa,QAAU/D,EAAMgE,EAAMC,OAC7CvB,EAAUQ,EAAO/tB,OAAQ,EAEpB+tB,EAAOjlC,QACRilC,EAAOjlC,UAENilC,EAAOa,OAWRb,EAAOnI,OAAS+G,EAAWoB,EAAOnI,QAClCmI,EAAOgB,QAAUhB,EAAOgB,SAAW,UAAYnB,IAC/CG,EAAOiB,OAAS3oC,KAAK4L,SAAS/B,SAAS,IAAI48B,UAAU,GACjDjC,EAAMoC,KAKFA,EAJAV,EAAYtsB,EAASI,OAASksB,EAAYwB,EAAOnI,QAItC,IAEN4E,EAAa9vC,EAAQ,gBAAkB8vC,EAAajwC,EAAU,eAIxD,IAENwzC,EAAOkB,KAAOzE,EAAa9vC,EAAQ,kBAAoBkwC,IAIjD,IAEgB,UAAtBE,UAAUoE,SAAuB,gBAAkBx0C,IAAmD,IAAzCowC,UAAUqE,UAAUn/B,QAAQ,UAInF,IAEN+9B,EAAOqB,aAMD,IAQA,SA/CnB,IALArB,EAAOgB,QAAUF,EAAMQ,MAAM3xC,QAAQ,YAAa,IAClDqwC,EAAOiB,OAASH,EAAMS,MACtBvB,EAAOnI,OAASiJ,EAAMU,MAAM7xC,QAAQ,YAAa,IAEjDuvC,EAAW4B,EAAMC,MACbf,EAAOQ,MAAQD,EAASP,EAAOQ,IAAKR,EAAOnI,QAC3C,KAAM,IAAInrC,OAAM,qBAAuBszC,EAAOnI,OAmDtD,QADAmI,EAAOd,SAAWA,EACVA,GACJ,IAAK,IAQD,GAPA/nC,EAAM6oC,GACFnW,SAAU,IACVK,MAAO,IACPuX,WAAW,EACXC,WAAW,EACXC,YAAY,IACb,GACC3B,EAAOa,OAAQ,CACf,IAAKb,EAAO4B,MAAO,CAIf,IAFA,GAA2GvuB,GAAvGqrB,EAASxsB,EAASgtB,SAAW,KAAOhtB,EAASitB,KAAM0C,EAASr1C,EAAS0J,KAAKrD,qBAAqB,OAC/FjF,EAAIi0C,EAAO70C,OACRY,KAEH,GADAylB,EAAQwuB,EAAOj0C,GACXylB,EAAM7e,IAAIuqC,UAAU,EAAGL,EAAO1xC,UAAY0xC,EAAQ,CAClDsB,EAAO4B,MAAQvuB,EAAM7e,GACrB,OAGHwrC,EAAO4B,QAER5B,EAAO4B,MAAQj1C,GAIvB,GAAI2yC,IACAgC,MAAOtB,EAAOgB,QACdD,MAAO,EAGPf,GAAO4B,QAAUj1C,GAEjBqzC,EAAO2B,YAAa,EACpB3B,EAAO0B,WAAY,EACnB1B,EAAO4B,MAAQ1vB,EAASgtB,SAAW,KAAOhtB,EAASitB,KAAOjtB,EAAS8sB,SAAW9sB,EAAS4vB,OACvFxC,EAAWkC,MAAQxB,EAAO4B,MAC1BtC,EAAWyC,OAAS,GAGpBzC,EAAWkC,MAAQ5C,EAAWoB,EAAO4B,OAGrC5B,EAAO1nB,YACP0nB,EAAOyB,WAAY,EACnBnC,EAAW0C,OAAS,GAExBhC,EAAOnI,OAASwH,EAAsBW,EAAOnI,OAAQyH,OAGrDnoC,GAAM6oC,GACFgB,QAASF,EAAMQ,MACfzJ,OAAQiJ,EAAMU,MACdE,WAAY5E,EAAMgE,EAAMiB,QACxBJ,YAAa7E,EAAMgE,EAAMkB,QACzBP,UAAWzB,EAAO0B,WAAY,EAAQ1B,EAAOyB,WAGrDb,IAAY,GAAI1C,GAAQhoB,MAAM+rB,cAAcjC,GAAS,GAAI9B,GAAQhoB,MAAMgsB,qBAAsB,GAAIhE,GAAQhoB,MAAMisB,eAC3GC,QAAQ,EACRC,UAAW,IAAOrC,EAAOnI,OAAO7qC,SAChC,GAAIkxC,GAAQhoB,MAAMosB,gBAClBC,SAAUvC,EAAOa,SAErB,MACJ,KAAK,IACDD,GAAY,GAAI1C,GAAQhoB,MAAMssB,qBAAqBxC,GACnD,MACJ,KAAK,IACGA,EAAOa,SACPb,EAAOqB,aAAezC,EAAWoB,EAAOqB,eAE5CT,GAAY,GAAI1C,GAAQhoB,MAAMusB,cAAczC,GAAS,GAAI9B,GAAQhoB,MAAMisB,cAAiB,GAAIjE,GAAQhoB,MAAMosB,gBACtGC,SAAUvC,EAAOa,SAErB,MACJ,KAAK,IACDD,GAAY,GAAI1C,GAAQhoB,MAAMwsB,aAAa1C,GAC3C,MACJ,KAAK,IACDY,GAAY,GAAI1C,GAAQhoB,MAAMysB,oBAAoB3C,GAClD,MACJ,KAAK,IACDY,GAAY,GAAI1C,GAAQhoB,MAAM0sB,sBAAsB5C,GACpD,MACJ,KAAK,IACI5C,GACDP,IAEJ+D,GAAY,GAAI1C,GAAQhoB,MAAM2sB,eAAe7C,IAQrD,MAJAY,GAAS1tC,KAAK,GAAIgrC,GAAQhoB,MAAMisB,eAC5BW,KAAM9C,EAAO8C,KACbxsB,QAAQ,KAELsqB,EASX,QAASmC,GAAWC,GAkBhB,IAAK,GAjBDC,GAASC,GACTC,SAAU,SAASC,EAASC,GACxBz2C,KAAK02C,GAAGH,SAASC,EAASC,IAE9BE,SAAU,SAASH,EAASI,GACxB52C,KAAK62C,KAAKF,SAASH,EAASI,IAEhCngC,SAAU,SAASqtB,GACf9jC,KAAK02C,GAAGjgC,SAASqtB,IAErB72B,KAAM,WACFjN,KAAK62C,KAAK5pC,QAEd6pC,QAAS,WACL92C,KAAK62C,KAAKC,YAGT91C,EAAI,EAAG8V,EAAMs/B,EAAch2C,OAAY0W,EAAJ9V,EAASA,IACjDq1C,EAAUD,EAAcp1C,GACxBuJ,EAAM8rC,EAASC,GAAU,GACf,IAANt1C,IACAq1C,EAAQQ,KAAOT,EAAcp1C,EAAI,IAEjCA,IAAM8V,EAAM,IACZu/B,EAAQK,GAAKN,EAAcp1C,EAAI,GAGvC,OAAOq1C,GAOX,QAASU,GAAgBpM,GACrBA,EAAQ+L,GAAGG,KAAOlM,EAAQkM,KAC1BlM,EAAQkM,KAAKH,GAAK/L,EAAQ+L,GAC1B/L,EAAQ+L,GAAK/L,EAAQkM,KAAO,KAxtBhC,GAUI3D,GAEA1C,EACAM,EAsDAtd,EAAIwjB,EAnEJv3C,EAASO,KACTizC,EAAYvnC,KAAKurC,MAAsB,IAAhBvrC,KAAK4L,UAC5B4/B,EAAU1V,SAASx0B,UACnB0kC,EAAQ,qCACRc,EAAW,kBACXP,EAAgB,cAChBnjB,EAAY,GACZwiB,KACAC,EAAWxxC,EAAOuxC,QAClBE,EAAgB,WAEhBoB,GAAU,CAyDd,IAAI/C,EAAa9vC,EAAQ,oBACrByzB,EAAK,SAAS1gB,EAAQzS,EAAMguC,GACxBv7B,EAAO3Q,iBAAiB9B,EAAMguC,GAAU,IAE5C2I,EAAK,SAASlkC,EAAQzS,EAAMguC,GACxBv7B,EAAO1Q,oBAAoB/B,EAAMguC,GAAU,QAG9C,CAAA,IAAIwB,EAAa9vC,EAAQ,eAS1B,KAAM,IAAID,OAAM,wBARhB0zB,GAAK,SAAS7xB,EAAQw1C,EAAQC,GAC1Bz1C,EAAOmgB,YAAY,KAAOq1B,EAAQC,IAEtCJ,EAAK,SAASr1C,EAAQw1C,EAAQC,GAC1Bz1C,EAAOW,YAAY,KAAO60C,EAAQC,IAU1C,GAA4C50C,GAAxCwuC,GAAa,EAAOC,IA2BxB,IA1BI,cAAgBrxC,IAIhB4C,EAAa5C,EAAS4C,WACtBwuC,EAA2B,YAAdxuC,IAA+B2tC,UAAUqE,UAAUn/B,QAAQ,kBAAkC,UAAd7S,GAAwC,eAAdA,IAMtHwuC,IAAepxC,EAAS0J,MAevB0nC,EAAY,CACb,GAAInB,EAAa9vC,EAAQ,oBACrByzB,EAAG5zB,EAAU,mBAAoBmxC,OAQjC,IALAvd,EAAG5zB,EAAU,mBAAoB,WACF,YAAvBA,EAAS4C,YACTuuC,MAGJnxC,EAASiK,gBAAgB2hB,UAAYzrB,IAAW8hB,IAAK,CACrD,GAAI4J,GAAgB,WAChB,IAAIulB,EAAJ,CAIA,IACIpxC,EAASiK,gBAAgB2hB,SAAS,QAEtC,MAAOnoB,GAEH,WADA8J,GAAWse,EAAe,GAG9BslB,KAEJtlB,KAKR+H,EAAGzzB,EAAQ,OAAQgxC,GA+IvB,GAAImD,GAAS,SAAS7xB,GAClBA,EAAQA,EAAM8vB,UAAU,GAAGttC,MAAM,IAEjC,KADA,GAAewyC,GAAXz0C,KAAiB5B,EAAIqhB,EAAMjiB,OACxBY,KACHq2C,EAAOh1B,EAAMrhB,GAAG6D,MAAM,KACtBjC,EAAKy0C,EAAK,IAAMzH,EAAmByH,EAAK,GAE5C,OAAOz0C,IACT,SAASzB,KAAKmkB,EAAS4vB,QAAU5vB,EAAS4vB,OAAS5vB,EAASD,MAkB1DsgB,EAAU,WACV,GAAI3e,MACA7mB,GACA6a,GAAI,EAAG,EAAG,IACXioB,EAAO,eAEV,OAAmB,mBAARhC,OAAiD,kBAAnBA,MAAKqW,WAA4BrW,KAAKqW,UAAUn3C,GAAK4C,QAAQ,MAAS,MAAQkgC,EAE5GhC,MAEP/oB,OAAO7T,QACH6T,OAAO7T,OAAOlE,GAAK4C,QAAQ,MAAS,MAAQkgC,IAE5Cjc,EAAOswB,UAAYp/B,OAAO7T,QAIO,kBAA9Bkd,QAAOvU,UAAUuqC,WACxBp3C,EAAM8iC,EAAKsU,WACPp3C,EAAI6a,GAAsB,IAAjB7a,EAAI6a,EAAE5a,QAA6B,IAAbD,EAAI6a,EAAE,KAErCgM,EAAOka,MAAQ,SAASG,GACpB,MAAOA,GAAIkW,cAKnBvwB,EAAOswB,WAAatwB,EAAOka,OAE3ByE,EAAU,WACN,MAAO3e,IAEJA,GAEJ,MAqYXzc,GAAM+mC,GAKF57B,QAAS,WAMTw+B,MAAOA,EAIP5qB,SAOA/e,MAAOA,EAMPitC,cAAe7R,EAOfuL,UAAWA,EASX7G,WAAYA,IA4DhBiH,EAAQmG,WAOJjkB,GAAIA,EAOJwjB,GAAIA,EAQJU,aAAc,SAASxF,GACdnC,EAAahwC,EAAQ,SAGtBH,EAASoK,MAAM,uCAA8CkoC,EAAO,iBA8B/E,WAEG,GAAIyF,KAQJrG,GAAQsG,IAOJ/gB,IAAK,SAAS/zB,EAAM8S,GAChB+hC,EAAK70C,GAAQ8S,GASjBvL,IAAK,SAASvH,EAAM+0C,GAChB,GAAKF,EAAKliC,eAAe3S,GAAzB,CAGA,GAAI8S,GAAK+hC,EAAK70C,EAKd,OAHI+0C,UACOF,GAAK70C,GAET8S,QAoFnB07B,EAAQwG,OAAS,SAAS1E,GAGtB,GAAI9pB,GAAQ6sB,EAAWpC,EAAsBX,GAAQzuC,SACjD4xC,SAAU,SAASC,EAASC,GACxBrD,EAAO2E,UAAUvB,EAASC,IAE9BhgC,SAAU,SAASqtB,GACXsP,EAAO4E,SACP5E,EAAO4E,QAAQlU,QAGrB8S,EAAYhF,EAAYwB,EAAOnI,OAGrCjrC,MAAKy2C,OAAS7E,EAAYwB,EAAOnI,QAKjCjrC,KAAK82C,QAAU,WACXxtB,EAAMwtB,WAOV92C,KAAKi4C,YAAc,SAASzB,GACxBltB,EAAMqtB,SAASH,EAASI,IAG5BttB,EAAMrc,QAmIVqkC,EAAQ4G,IAAM,SAAS9E,EAAQ+E,GAG3B,GAAIA,EAAcnD,MACd,IAAK,GAAI1P,KAAU6S,GAAcnD,MAC7B,GAAImD,EAAcnD,MAAMv/B,eAAe6vB,GAAS,CAC5C,GAAIyN,GAASoF,EAAcnD,MAAM1P,EACX,mBAAXyN,KACPoF,EAAcnD,MAAM1P,IAChBA,OAAQyN,IAQ5B,GAAIzpB,GAAQ6sB,EAAWpC,EAAsBX,GAAQzuC,QAAQ,GAAI2sC,GAAQhoB,MAAM8uB,YAAYp4C,KAAMm4C,IAC7F1hC,SAAU,SAASqtB,GACXsP,EAAO4E,SACP5E,EAAO4E,QAAQlU,OAM3B9jC,MAAKy2C,OAAS7E,EAAYwB,EAAOnI,QAMjCjrC,KAAK82C,QAAU,WACXxtB,EAAMwtB,WAGVxtB,EAAMrc,QAqCVqkC,EAAQhoB,MAAMysB,oBAAsB,SAAS3C,GACzC,GAAIiF,GAAKhF,EAAO3N,EAAM4S,CAEtB,OAAQD,IACJ1B,SAAU,SAASH,EAAS1E,EAAQl8B,GAChC8vB,EAAK8Q,GACD5gC,GACAA,KAGRkhC,QAAS,WACDzD,IACAA,EAAM5qC,WAAWkS,YAAY04B,GAC7BA,EAAQ,OAGhBkF,WAAY,WACRD,EAAe1G,EAAYwB,EAAOnI,QAE9BmI,EAAOa,QAEP1pC,EAAM6oC,EAAOjlC,OACTvG,IAAK6qC,EAAsBW,EAAOnI,QAC9B2J,MAAOtvB,EAASgtB,SAAW,KAAOhtB,EAASitB,KAAOjtB,EAAS8sB,SAC3DsC,MAAOtB,EAAOgB,QACdD,MAAO,IAEXrxC,KAAM0uC,EAAgB4B,EAAOgB,QAAU,cAE3Cf,EAAQF,EAAYC,GACpB9B,EAAQsG,GAAG/gB,IAAIuc,EAAOgB,QAAS,SAASoE,GAKpC,MAJA9S,GAAO8S,EACPrrC,EAAW,WACPkrC,EAAI3B,GAAGjgC,UAAS,IACjB,GACI,SAASe,GACZ6gC,EAAI3B,GAAGH,SAAS/+B,EAAK8gC,QAK7B5S,EAAO0L,IAAkBwG,GAAGvtC,IAAI+oC,EAAOgB,SAAS,GAAM,SAAS58B,GAC3D6gC,EAAI3B,GAAGH,SAAS/+B,EAAK8gC,KAEzBnrC,EAAW,WACPkrC,EAAI3B,GAAGjgC,UAAS,IACjB,KAGXxJ,KAAM,WACFikC,EAAUmH,EAAIE,WAAYF,MA0CtC/G,EAAQhoB,MAAM2sB,eAAiB,SAAS7C,GAIpC,QAAS2E,GAAUvB,GACfrpC,EAAW,WACPkrC,EAAI3B,GAAGH,SAASC,EAAS8B,IAC1B,GAMP,QAASG,GAAO3G,GAEZ,GAAIlP,GAAMwQ,EAAOkB,IAAM,SAAWlB,EAAOa,OACrChwC,EAAK,eAAiByH,KAAKurC,MAAsB,IAAhBvrC,KAAK4L,SAG1Cg6B,GAAQsG,GAAG/gB,IAAI,eAAiBib,EAAO/uC,QAAQ,SAAU,KAAM,WAC3DuuC,EAAQhoB,MAAM2sB,eAAenE,GAAQwC,IAAMA,EAAMoE,EAAa5xC,UAE9D,KAAK,GADD8H,GAAQ0iC,EAAQhoB,MAAM2sB,eAAenE,GAAQljC,MACxC5N,EAAI,EAAGA,EAAI4N,EAAMxO,OAAQY,IAC9B4N,EAAM5N,IAEV4N,GAAMxO,OAAS,IAGfgzC,EAAOsF,aACPA,EAA8C,gBAAvBtF,GAAOsF,aAA4B94C,EAAS0Z,eAAe85B,EAAOsF,cAAgBtF,EAAOsF,cAIhHA,EAAe94C,EAAS+F,cAAc,OAKtC4E,EAAMmuC,EAAatvC,MAAO0nC,GAA2BsC,EAAOuF,eACxDjrC,OAAQ,OACRE,MAAO,OACP0rB,SAAU,QACVsf,MAAO,EACP/2B,IAAK,IAELnU,OAAQ,MACRE,MAAO,MACP0rB,SAAU,WACVpqB,SAAU,SACV0pC,MAAO,EACP/2B,IAAK,IAETjiB,EAAS0J,KAAKvC,YAAY2xC,GAI9B,IAAIG,GAAY,wBAA0BvS,EAAmBwL,EAAO/uC,QAAQ,SAAU,MAChF,UAAYtD,EAAO6lB,SAASgtB,SAC5B,WAAahM,EAAmBmL,EAAchyC,EAAO6lB,SAASI,OAC9D,SAAW4gB,EAAmBqL,EAAQlyC,EAAO6lB,SAASI,OACtD,OAAS4gB,EAAmBxX,EAClC4pB,GAAa9vC,UAAY,2EAA6E3E,EAAK,WAAa2+B,EAAM,+HAI9HA,EACA,4CAEAiW,EACA,oEAEAA,EACA,yDACAjW,EACA,2CAzEJ,GAAIyV,GACPhF,EAAaiF,EAAchE,EAAKoE,CA4E7B,OAAQL,IACJ1B,SAAU,SAASH,EAAS1E,EAAQl8B,GAChC0+B,EAAI2D,YAAY7E,EAAOgB,QAASoC,EAAQjhC,YACpCK,GACAA,KAGRkhC,QAAS,WACL,IACIxC,EAAIwE,eAAe1F,EAAOgB,SAE9B,MAAO/wC,IAEPixC,EAAM,KACFjB,IACAA,EAAM5qC,WAAWkS,YAAY04B,GAC7BA,EAAQ,OAGhBkF,WAAY,WAERD,EAAelF,EAAOnI,OAGtBqG,EAAQsG,GAAG/gB,IAAI,SAAWuc,EAAOgB,QAAU,QAAS,WAChDjnC,EAAW,WACPkrC,EAAI3B,GAAGjgC,UAAS,OAKxB66B,EAAQsG,GAAG/gB,IAAI,SAAWuc,EAAOgB,QAAU,aAAc2D,GAEzD3E,EAAOkB,IAAMtC,EAAWoB,EAAOkB,IAC/B,IAAIyE,GAAYtH,EAAc2B,EAAOkB,KACjC1+B,EAAK,WAEL07B,EAAQhoB,MAAM2sB,eAAe8C,GAAW9rC,MAAO,EAC/CqnC,EAAMhD,EAAQhoB,MAAM2sB,eAAe8C,GAAWzE,IAE9CA,EAAI0E,cAAc5F,EAAOgB,QAAShB,EAAOiB,OAAQzC,EAAYwB,EAAOnI,QAASmI,EAAOa,QAEhFb,EAAOa,SAEHnD,GAA2BsC,EAAOuF,eAClCpuC,EAAM6oC,EAAOjlC,OACTmrB,SAAU,QACVsf,MAAO,EACP/2B,IAAK,EACLnU,OAAQ,OACRE,MAAO,SAIfrD,EAAM6oC,EAAOjlC,OACTvG,IAAK6qC,EAAsBW,EAAOnI,QAC9B2J,MAAOhD,EAAYtsB,EAASI,MAC5BgvB,MAAOtB,EAAOgB,QACdD,MAAO,EACPQ,MAAOvB,EAAOiB,SAElBvxC,KAAM0uC,EAAgB4B,EAAOgB,QAAU,cAE3Cf,EAAQF,EAAYC,IAIxB9B,GAAQhoB,MAAM2sB,eAAe8C,IAAczH,EAAQhoB,MAAM2sB,eAAe8C,GAAW9rC,KAEnF2I,IAIK07B,EAAQhoB,MAAM2sB,eAAe8C,GAQ9BzH,EAAQhoB,MAAM2sB,eAAe8C,GAAWnqC,MAAMtI,KAAKsP,IANnD07B,EAAQhoB,MAAM2sB,eAAe8C,IACzBnqC,OAAQgH,IAEZ6iC,EAAOM,KAOnB9rC,KAAM,WACFikC,EAAUmH,EAAIE,WAAYF,MAwCtC/G,EAAQhoB,MAAMssB,qBAAuB,SAASxC,GAW1C,QAAS6F,GAAW12C,GAChB,GAAIA,EAAMk0C,OAEN,MAAO7E,GAAYrvC,EAAMk0C,OAE7B,IAAIl0C,EAAM22C,IAEN,MAAOtH,GAAYrvC,EAAM22C,IAE7B,IAAI32C,EAAMuvC,OAGN,MAAOxsB,GAASgtB,SAAW,KAAO/vC,EAAMuvC,MAE5C,MAAM,6CASV,QAASqH,GAAkB52C,GACvB,GAAIk0C,GAASwC,EAAW12C,EACpBk0C,IAAU6B,GAAgB/1C,EAAMK,KAAKuvC,UAAU,EAAGiB,EAAOgB,QAAQh0C,OAAS,IAAMgzC,EAAOgB,QAAU,KACjGiE,EAAI3B,GAAGH,SAASh0C,EAAMK,KAAKuvC,UAAUiB,EAAOgB,QAAQh0C,OAAS,GAAIq2C,GApCzE,GAAI4B,GACPhF,EACA+F,EACAd,CAqCG,OAAQD,IACJ1B,SAAU,SAASH,EAAS1E,EAAQl8B,GAChCwjC,EAAanB,YAAY7E,EAAOgB,QAAU,IAAMoC,EAAS1E,GAAUwG,GAC/D1iC,GACAA,KAGRkhC,QAAS,WACLE,EAAGj3C,EAAQ,UAAWo5C,GAClB9F,IACA+F,EAAe,KACf/F,EAAM5qC,WAAWkS,YAAY04B,GAC7BA,EAAQ,OAGhBkF,WAAY,WAER,GADAD,EAAe1G,EAAYwB,EAAOnI,QAC9BmI,EAAOa,OAAQ,CAEf,GAAIoF,GAAe,SAAS92C,GACpBA,EAAMK,MAAQwwC,EAAOgB,QAAU,WAE/BgF,EAAgB,eAAiB/F,GAAMvpC,cAAiBupC,EAAMvpC,cAAgBupC,EAAMvpC,cAAclK,SAClGo3C,EAAGj3C,EAAQ,UAAWs5C,GACtB7lB,EAAGzzB,EAAQ,UAAWo5C,GACtBhsC,EAAW,WACPkrC,EAAI3B,GAAGjgC,UAAS,IACjB,IAGX+c,GAAGzzB,EAAQ,UAAWs5C,GAGtB9uC,EAAM6oC,EAAOjlC,OACTvG,IAAK6qC,EAAsBW,EAAOnI,QAC9B2J,MAAOhD,EAAYtsB,EAASI,MAC5BgvB,MAAOtB,EAAOgB,QACdD,MAAO,IAEXrxC,KAAM0uC,EAAgB4B,EAAOgB,QAAU,cAE3Cf,EAAQF,EAAYC,OAIpB5f,GAAGzzB,EAAQ,UAAWo5C,GACtBC,EAAgB,eAAiBr5C,GAAO6hB,OAAU7hB,EAAO6hB,OAAS7hB,EAAO6hB,OAAOhiB,SAChFw5C,EAAanB,YAAY7E,EAAOgB,QAAU,SAAUkE,GAEpDnrC,EAAW,WACPkrC,EAAI3B,GAAGjgC,UAAS,IACjB,IAGXxJ,KAAM,WACFikC,EAAUmH,EAAIE,WAAYF,MAuCtC/G,EAAQhoB,MAAM0sB,sBAAwB,SAAS5C,GAC3C,GAAIiF,GAAKhF,EAAO3N,EAAM4S,CAEtB,OAAQD,IACJ1B,SAAU,SAASH,EAAS1E,EAAQl8B,GAChC8vB,EAAKzkC,KAAKjB,KAAMw2C,GACZ5gC,GACAA,KAGRkhC,QAAS,WACDzD,IACAA,EAAM5qC,WAAWkS,YAAY04B,GAC7BA,EAAQ,OAGhBkF,WAAY,WACRD,EAAe1G,EAAYwB,EAAOnI,QAE9BmI,EAAOa,QAEP1pC,EAAM6oC,EAAOjlC,OACTvG,IAAK6qC,EAAsBW,EAAOnI,QAC9B2J,MAAOhD,EAAYtsB,EAASI,MAC5BgvB,MAAOtB,EAAOgB,QACdD,MAAO,IAEXrxC,KAAM0uC,EAAgB4B,EAAOgB,QAAU,cAE3Cf,EAAQF,EAAYC,GACpBC,EAAMz9B,GAAK,SAAS4iC,GAOhB,aANOnF,GAAMz9B,GACb8vB,EAAO8S,EACPrrC,EAAW,WACPkrC,EAAI3B,GAAGjgC,UAAS,IACjB,GAEI,SAASe,GACZ6gC,EAAI3B,GAAGH,SAAS/+B,EAAK8gC,OAMzB14C,EAAS05C,UAAY1H,EAAYhyC,EAAS05C,WAAapF,EAAMU,QAC7D70C,EAAO8hB,IAAIyD,SAAW4uB,EAAMU,OAEhClP,EAAO3lC,EAAOwrB,aAAa3V,GAAG,SAAS4B,GACnC6gC,EAAI3B,GAAGH,SAAS/+B,EAAK8gC,KAEzBD,EAAI3B,GAAGjgC,UAAS,KAGxBxJ,KAAM,WACFikC,EAAUmH,EAAIE,WAAYF,MAwCtC/G,EAAQhoB,MAAMusB,cAAgB,SAASzC,GAKnC,QAASmG,GAAa/C,GAClB,GAAI5T,GAAMwQ,EAAOqB,cAAgBR,EAAS,MAAQ,OAASb,EAAOgB,OAClEgF,GAAatvC,cAAc0vC,YAAYhD,EAAS5T,GAGpD,QAAS6W,KACDxF,EACqB,MAAfyF,GAAqBzF,GACvBoE,EAAI3B,GAAGjgC,UAAS,IAIpB8iC,EAAa,SACblB,EAAI3B,GAAGjgC,UAAS,IAIxB,QAASkjC,GAAWnD,GAChB6B,EAAI3B,GAAGH,SAASC,EAASoD,GAG7B,QAASC,KACDpjC,GACAtJ,EAAW,WACPsJ,GAAS,IACV,GA5BX,GAAI4hC,GACApE,EAAQmF,EAAcU,EAAcJ,EAAYjjC,EAAUmjC,EAAcG,CA+B5E,OAAQ1B,IACJ1B,SAAU,SAASH,EAAS1E,EAAQl8B,GAChCa,EAAWb,EACX2jC,EAAa/C,IAEjBM,QAAS,WACLsC,EAAa3wC,WAAWkS,YAAYy+B,GACpCA,EAAe,KACXnF,IACA6F,EAAarxC,WAAWkS,YAAYm/B,GACpCA,EAAe,OAGvBvB,WAAY,WACRtE,EAASb,EAAOa,OAChByF,EAAa,EACbE,EAAehI,EAAYwB,EAAOnI,QAClCmI,EAAO4B,MAAQhD,EAAWoB,EAAO4B,OAE7Bf,GAEA3C,EAAQsG,GAAG/gB,IAAIuc,EAAOgB,QAAS,SAASoC,GAChCvC,GAAsB,UAAZuC,IAEVlF,EAAQsG,GAAG/gB,IAAIuc,EAAOgB,QAASuF,GAC/BF,OAKRM,EAAYtH,EAAsBW,EAAOnI,QACrC2J,MAAOxB,EAAO4B,MACdN,MAAOtB,EAAOgB,QACdD,MAAO,IAEX5pC,EAAM6oC,EAAOjlC,OACTvG,IAAKmyC,EAAY,IAAM3G,EAAOgB,QAC9BtxC,KAAM0uC,EAAgB4B,EAAOgB,QAAU,cAE3C0F,EAAe3G,EAAYC,KAG3BA,EAAOqB,aAAerB,EAAOnI,OAC7BqG,EAAQsG,GAAG/gB,IAAIuc,EAAOgB,QAASuF,GAInC,IAAInG,GAAS,WAET,GAAI3zC,GAAIu5C,GAAgBp5C,IACxBg3C,GAAGn3C,EAAG,OAAQ2zC,GACdlC,EAAQsG,GAAG/gB,IAAIuc,EAAOgB,QAAU,QAASyF,GACxC,QAAS14C,KACoC,kBAA/BtB,GAAEiK,cAAc0vC,YACvBC,IAGAtsC,EAAWhM,EAAM,OAK7Bi4C,GAAejG,GACXhlC,OACIvG,IAAKwrC,EAAO4B,MAAQ,MAAQ5B,EAAOgB,SAEvCZ,OAAQA,KAGhBvmC,KAAM,WACFikC,EAAUmH,EAAIE,WAAYF,MAyCtC/G,EAAQhoB,MAAM+rB,cAAgB,SAASjC,GAKnC,QAASmG,GAAa/C,GAClB,GAAKwD,EAAL,CAGA,GAAIpX,GAAMwQ,EAAOnI,OAAS,IAAOgP,KAAY,IAAMzD,GACjDvC,IAAWa,EAAakF,EAAclwC,cAAgBkwC,GAAe10B,SAAWsd,GAGtF,QAASsX,GAAY70B,GACjB80B,EAAW90B,EACXgzB,EAAI3B,GAAGH,SAAS4D,EAAShI,UAAUgI,EAAS9kC,QAAQ,KAAO,GAAI+kC,GAOnE,QAASC,KACL,GAAKC,EAAL,CAGA,GAAI50B,GAAO40B,EAAgBh1B,SAASI,KAAML,EAAO,GAAIhQ,EAAUqQ,EAAKrQ,QAAQ,IAC7D,KAAXA,IACAgQ,EAAOK,EAAKysB,UAAU98B,IAEtBgQ,GAAQA,GAAQ80B,GAChBD,EAAY70B,IAIpB,QAASk1B,KACLC,EAAStd,YAAYmd,EAAWI,GAnCpC,GAAIpC,GACWpE,EAAQuG,EAAQC,EAAcN,EAAUF,EAAQK,EAAiBN,EAC5ElF,EAAWsF,CAoCf,OAAQ/B,IACJ1B,SAAU,SAASH,GACf+C,EAAa/C,IAEjBM,QAAS,WACL/2C,EAAOo9B,cAAcqd,IACjBvG,IAAWa,IACXkF,EAAcvxC,WAAWkS,YAAYq/B,GAEzCA,EAAgB,MAEpBzB,WAAY,WAOR,GANAtE,EAASb,EAAOa,OAChBwG,EAAerH,EAAOnW,SACtBkd,EAAW,IAAM/G,EAAOgB,QACxB6F,EAAS,EACTnF,EAAY1B,EAAO0B,UACnBsF,EAAgBxI,EAAYwB,EAAOnI,QAC/BgJ,EAAQ,CAKR,GAJA1pC,EAAM6oC,EAAOjlC,OACTvG,IAAKwrC,EAAOnI,OACZnoC,KAAM0uC,EAAgB4B,EAAOgB,QAAU,cAEvCU,EACA1B,EAAOI,OAAS,WACZ8G,EAAkBv6C,EAClBw6C,IACAlC,EAAI3B,GAAGjgC,UAAS,QAGnB,CACD,GAAIikC,GAAQ,EAAG/uC,EAAMynC,EAAO9V,MAAQ,IACnC,QAASqd,KACN,KAAMD,EAAQ/uC,EACV,KAAM,IAAI7L,OAAM,qCAEpB,KACIw6C,EAAkBN,EAAclwC,cAAc8wC,OAAOpJ,EAAgB4B,EAAOgB,QAAU,aAE1F,MAAOyG,IAEHP,GACAC,IACAlC,EAAI3B,GAAGjgC,UAAS,IAGhBtJ,EAAWwtC,EAAQ,OAI/BX,EAAgB7G,EAAYC,OAG5BkH,GAAkBv6C,EAClBw6C,IACIzF,GACAkF,EAAgBp4B,OAChBy2B,EAAI3B,GAAGjgC,UAAS,KAGhBlM,EAAM6oC,GACFjlC,OACIvG,IAAKwrC,EAAOnI,OAAS,IAAMmI,EAAOgB,QAAU,GAAI37B,MAChD3V,KAAM0uC,EAAgB4B,EAAOgB,QAAU,aAE3CZ,OAAQ,WACJ6E,EAAI3B,GAAGjgC,UAAS,MAGxBujC,EAAgB7G,EAAYC,KAIxCnmC,KAAM,WACFikC,EAAUmH,EAAIE,WAAYF,MAqCtC/G,EAAQhoB,MAAMgsB,iBAAmB,WAC7B,GAAI+C,GACP5hC,EACOqkC,EAAQ,EAAGC,EAAO,EAAGC,EAAiB,EAE1C,OAAQ3C,IACJ9B,SAAU,SAASC,EAASC,GACxB,GAAIphC,GAAUmhC,EAAQnhC,QAAQ,KAAM4lC,EAAMzE,EAAQrE,UAAU,EAAG98B,GAASxQ,MAAM,IAC9E2xC,GAAUA,EAAQrE,UAAU98B,EAAU,GAElC4lC,EAAI,IAAMH,IACVE,EAAiB,GACbvkC,GACAA,GAAS,IAGb+/B,EAAQp2C,OAAS,IACjBi4C,EAAIxB,KAAKF,SAASsE,EAAI,GAAK,IAAMH,EAAQ,IAAME,EAAgBvE,GAC3DsE,GAAQE,EAAI,KACZF,EAAOE,EAAI,GACX5C,EAAI3B,GAAGH,SAASC,EAASC,MAKrCE,SAAU,SAASH,EAASC,EAAQ7gC,GAChColC,EAAiBxE,EACjB//B,EAAWb,EACXyiC,EAAIxB,KAAKF,SAASoE,EAAO,OAASD,EAAS,IAAMtE,EAASC,MAyCtEnF,EAAQhoB,MAAMisB,cAAgB,SAASnC,GAGnC,QAASzkB,KACL,GAAIykB,EAAO1pB,QAA2B,IAAjB9a,EAAMxO,OAEvB,WADA22C,GAAgBsB,EAGpB,KAAI6C,GAA4B,IAAjBtsC,EAAMxO,SAAgB+6C,EAArC,CAGAD,GAAU,CACV,IAAI1E,GAAU5nC,EAAM6E,OAEpB4kC,GAAIxB,KAAKF,SAASH,EAAQ5zC,KAAM4zC,EAAQC,OAAQ,SAAS3S,GACrDoX,GAAU,EACN1E,EAAQ//B,UACRtJ,EAAW,WACPqpC,EAAQ//B,SAASqtB,IAClB,GAEPnV,OApBR,GAAI0pB,GAAgD8C,EAA3CvsC,KAAYssC,GAAU,EAAM3E,EAAW,GAAgBd,EAAY,EAAGS,GAAO,EAAOkF,GAAa,CAuB1G,OAAQ/C,IACJprC,KAAM,WACEijC,EAAMkD,KACNA,MAEAA,EAAOqC,YACPA,EAAYrC,EAAOqC,UACnB2F,GAAa,GAEbhI,EAAO8C,KACPA,GAAO,EAGPmC,EAAIxB,KAAK5pC,QAGjBwJ,SAAU,SAASqtB,GACfoX,GAAU,CACV,IAAIxE,GAAK2B,EAAI3B,EACb/nB,KACA+nB,EAAGjgC,SAASqtB,IAEhByS,SAAU,SAASC,EAASC,GACxB,GAAI2E,EAAY,CACZ,GAAI/lC,GAAUmhC,EAAQnhC,QAAQ,KAAMgmC,EAAM1b,SAAS6W,EAAQrE,UAAU,EAAG98B,GAAU,GAClFkhC,IAAYC,EAAQrE,UAAU98B,EAAU,GAC5B,IAARgmC,IACIjI,EAAOoC,SACPe,EAAW3G,EAAmB2G,IAElC8B,EAAI3B,GAAGH,SAASA,EAAUE,GAC1BF,EAAW,QAIf8B,GAAI3B,GAAGH,SAASC,EAASC,IAGjCE,SAAU,SAASH,EAASC,EAAQ7gC,GAC5Bw9B,EAAOoC,SACPgB,EAAUlQ,EAAmBkQ,GAEjC,IAAoBzpB,GAAhBuuB,IACJ,IAAIF,EAAY,CAEZ,KAA0B,IAAnB5E,EAAQp2C,QACX2sB,EAAWypB,EAAQrE,UAAU,EAAGsD,GAChCe,EAAUA,EAAQrE,UAAUplB,EAAS3sB,QACrCk7C,EAAUh1C,KAAKymB,EAGnB,MAAQA,EAAWuuB,EAAU7nC,SACzB7E,EAAMtI,MACF1D,KAAM04C,EAAUl7C,OAAS,IAAM2sB,EAC/B0pB,OAAQA,EACRhgC,SAA+B,IAArB6kC,EAAUl7C,OAAewV,EAAK,WAKhDhH,GAAMtI,MACF1D,KAAM4zC,EACNC,OAAQA,EACRhgC,SAAUb,GAGdsgC,GACAmC,EAAIxB,KAAK5pC,OAGT0hB,KAGRmoB,QAAS,WACLqE,GAAa,EACb9C,EAAIxB,KAAKC,aAuCrBxF,EAAQhoB,MAAMosB,eAAiB,SAAStC,GAGpC,QAASmI,KACLC,EAAW9vC,KAAK4L,SAAS/B,SAAS,IAAI48B,UAAU,GAChDkG,EAAIxB,KAAKF,SAAS6E,GAJtB,GAAInD,GAAKmD,EAAUC,CAOnB,OAAQpD,IACJ9B,SAAU,SAASC,EAASC,GACxB,GAAIphC,GAAUmhC,EAAQnhC,QAAQ,IACd,MAAZA,EACImhC,IAAYgF,EACZnD,EAAI3B,GAAGjgC,UAAS,GAEVglC,IACNA,EAAcjF,EACTpD,EAAOuC,UACR4F,IAEJlD,EAAIxB,KAAKF,SAASH,IAIlBA,EAAQrE,UAAU,EAAG98B,KAAaomC,GAClCpD,EAAI3B,GAAGH,SAASC,EAAQrE,UAAU98B,EAAU,GAAIohC,IAI5DE,SAAU,SAASH,EAASC,EAAQ7gC,GAChCyiC,EAAIxB,KAAKF,SAAS6E,EAAW,IAAMhF,EAASC,EAAQ7gC,IAExDa,SAAU,WACF28B,EAAOuC,UACP4F,OA2ChBjK,EAAQhoB,MAAM8uB,YAAc,SAAS5/B,EAAO46B,GASxC,QAASsI,GAAM94C,GACXA,EAAK+4C,QAAU,MACftD,EAAIxB,KAAKF,SAASiF,EAAWtE,UAAU10C,IAU3C,QAASi5C,GAAcC,EAAYxW,GAC/B,GAAIz6B,GAAQ4M,MAAMzK,UAAUnC,KAE5B,OAAO,YACH,GAA0B4L,GAAtB1O,EAAIyC,UAAUpK,OAAkBo2C,GAChClR,OAAQA,EAGRv9B,GAAI,GAAiC,kBAArByC,WAAUzC,EAAI,IAE1BA,EAAI,GAAiC,kBAArByC,WAAUzC,EAAI,IAE9B0O,GACIqtB,QAASt5B,UAAUzC,EAAI,GACvByM,MAAOhK,UAAUzC,EAAI,IAEzByuC,EAAQnO,OAASx9B,EAAM5J,KAAKuJ,UAAW,EAAGzC,EAAI,KAI9C0O,GACIqtB,QAASt5B,UAAUzC,EAAI,IAE3ByuC,EAAQnO,OAASx9B,EAAM5J,KAAKuJ,UAAW,EAAGzC,EAAI,IAElDg0C,EAAW,MAAQC,GAAqBvlC,EACxC+/B,EAAQvyC,GAAK+3C,GAIbxF,EAAQnO,OAASx9B,EAAM5J,KAAKuJ,UAAW,GAEvCsxC,EAAWG,aAAyC,IAA1BzF,EAAQnO,OAAOjoC,SACzCo2C,EAAQnO,OAASmO,EAAQnO,OAAO,IAGpCqT,EAAMlF,IAYd,QAAS0F,GAAe5W,EAAQrhC,EAAI2R,EAAIyyB,GACpC,IAAKzyB,EAUD,YATI3R,GACAy3C,GACIz3C,GAAIA,EACJuQ,OACI2wB,KAAM,OACNqR,QAAS,0BAOzB,IAAI1S,GAAStvB,CACTvQ,IACA6/B,EAAU,SAAS3zB,GACf2zB,EAAUoT,EACVwE,GACIz3C,GAAIA,EACJkM,OAAQA,KAGhBqE,EAAQ,SAASgiC,EAAS5zC,GACtB4R,EAAQ0iC,CACR,IAAI1/B,IACAvT,GAAIA,EACJuQ,OACI2wB,KAAM,OACNqR,QAASA,GAGb5zC,KACA4U,EAAIhD,MAAM5R,KAAOA,GAErB84C,EAAMlkC,KAIVssB,EAAUtvB,EAAQ0iC,EAGjBxyC,EAAQ2jC,KACTA,GAAUA,GAEd,KACI,GAAIl4B,GAASyF,EAAG0vB,OAAO/6B,MAAMqL,EAAGu7B,MAAO9I,EAAO1jC,QAAQm/B,EAAStvB,IAC1D07B,GAAM//B,IACP2zB,EAAQ3zB,GAGhB,MAAOgsC,GACH3nC,EAAM2nC,EAAI3F,UAxHlB,GAAI6B,GAAKuD,EAAaxI,EAAOwI,YAAcjW,IACvCqW,EAAmB,EAAGD,IA2H1B,OAAQ1D,IACJ9B,SAAU,SAASC,GACf,GAAI5zC,GAAOg5C,EAAW1a,MAAMsV,EAC5B,IAAI5zC,EAAK0iC,OAED8N,EAAOjrC,OACPirC,EAAOjrC,OAAOvF,EAAM84C,GAGpBQ,EAAet5C,EAAK0iC,OAAQ1iC,EAAKqB,GAAImvC,EAAO4B,MAAMpyC,EAAK0iC,QAAS1iC,EAAKylC,YAGxE,CAED,GAAI5xB,GAAWslC,EAAWn5C,EAAKqB,GAC3BrB,GAAK4R,MACDiC,EAASjC,OACTiC,EAASjC,MAAM5R,EAAK4R,OAGnBiC,EAASqtB,SACdrtB,EAASqtB,QAAQlhC,EAAKuN,cAEnB4rC,GAAWn5C,EAAKqB,MAG/BgJ,KAAM,WACF,GAAImmC,EAAOnI,OAEP,IAAK,GAAI3F,KAAU8N,GAAOnI,OAClBmI,EAAOnI,OAAOx1B,eAAe6vB,KAC7B9sB,EAAM8sB,GAAUuW,EAAczI,EAAOnI,OAAO3F,GAASA,GAIjE+S,GAAIxB,KAAK5pC,QAEb6pC,QAAS,WACL,IAAK,GAAIxR,KAAU8N,GAAOnI,OAClBmI,EAAOnI,OAAOx1B,eAAe6vB,IAAW9sB,EAAM/C,eAAe6vB,UACtD9sB,GAAM8sB,EAGrB+S,GAAIxB,KAAKC,aAIrBr3C,EAAO6xC,QAAUA,GACdvxC,OAAQH,SAAU0lB,SAAUvlB,OAAOoN,WAAYyiC,mBAAoBtJ,mBAOtE,IAAI/mC,IAAK,WAQP,QAAS68C,GAAQj7C,GACf,MAAoB,gBAATk7C,MACFl7C,YAAgBk7C,MAGlBl7C,GAAwB,gBAATA,IAA8C,gBAAlBA,GAAKX,UAAkD,gBAAlBW,GAAKkF,SAU9F,QAASi2C,GAAWn7C,GAClB,MAA2B,gBAAhBo7C,aACFp7C,YAAgBo7C,aAGlBp7C,GAAwB,gBAATA,IAAuC,IAAlBA,EAAKX,UAA2C,gBAAlBW,GAAKkF,SAahF,QAASm2C,GAAexgC,EAAM0J,GAC5B,QAAS+2B,GAAkBp6B,GACzB,GAAIq6B,KAWJ,OAVAr6B,GAAMtf,QAAQ,kBAAmB,IAC9BA,QAAQ,iBAAkB,KAC1BA,QAAQ,UAAW,QACnBA,QAAQ,aAAc,SAASo4B,GACpB,QAANA,EACFuhB,EAAOv4C,MAEPu4C,EAAOp2C,KAAK60B,KAGXuhB,EAAOziC,KAAK,IAAIlX,QAAQ,MAA2B,MAApBsf,EAAM1X,OAAO,GAAa,IAAM,IAMxE,MAHA+a,GAAOi3B,EAAUj3B,GAAQ,IACzB1J,EAAO2gC,EAAU3gC,GAAQ,IAEjB0J,GAAS1J,GAAe0J,EAAK4sB,UAAYt2B,EAAKs2B,WACnD5sB,EAAK4sB,UAAY5sB,EAAKk3B,UAAYl3B,EAAKk3B,UAAY5gC,EAAK4gC,WACzDH,EAAkB/2B,EAAK4sB,UAAY5sB,EAAKk3B,WAAyC,MAA5Bl3B,EAAK0sB,SAASznC,OAAO,GAAa+a,EAAK0sB,SAAY1sB,EAAK0sB,UAAap2B,EAAK4gC,YAAc5gC,EAAKo2B,SAAW,IAAM,IAAMp2B,EAAKo2B,SAASvnC,MAAM,EAAGmR,EAAKo2B,SAASC,YAAY,KAAO,GAAK3sB,EAAK0sB,SAAYp2B,EAAKo2B,WAC3P1sB,EAAK4sB,UAAY5sB,EAAKk3B,WAAal3B,EAAK0sB,SAAW1sB,EAAKwvB,OAAUxvB,EAAKwvB,QAAUl5B,EAAKk5B,QACvFxvB,EAAKL,KAJiB,KAgB1B,QAASs3B,GAAU/Z,GACjB,GAAIia,GAAoB,aACpBC,EAAa,qGACbh7C,EAAQyf,OAAOqhB,GAAK7/B,QAAQ85C,EAAmB,IAAI/6C,MAAMg7C,EAE7D,OAAIh7C,IAEA4jB,KAAM5jB,EAAM,IAAM,GAClBwwC,SAAUxwC,EAAM,IAAM,GACtB86C,UAAW96C,EAAM,IAAM,GACvBywC,KAAMzwC,EAAM,IAAM,GAClBi7C,SAAUj7C,EAAM,IAAM,GACtBiwC,KAAMjwC,EAAM,IAAM,GAClBswC,SAAUtwC,EAAM,IAAM,GACtBozC,OAAQpzC,EAAM,IAAM,GACpBujB,KAAMvjB,EAAM,IAAM,IAVtB,OAeF,OASEk7C,kBAAmB,SAASr6C,EAAKmG,GAC/B,MAAY,SAARnG,GAA0B,OAARA,GAAwB,WAARA,EAC7BE,OAEAiG,GAqCXm0C,QAWA14C,OAAQ,SAASyqC,EAAI7uC,EAAK+8C,GACxB,GAAIC,GAAwB,kBAARh9C,GAChB06B,EAAQmU,EAAKA,EAAGnqC,MAAM,QACtB+c,EAAS5hB,IACbG,GAAMA,MAGW,OAAb06B,EAAM,KACRA,EAAQA,EAAMhwB,MAAM,GAItB,KAAK,GAAI7J,GAAI,EAAG8V,EAAM+jB,EAAMz6B,OAAY0W,EAAJ9V,EAASA,IACtC4gB,EAAOiZ,EAAM75B,MAChB4gB,EAAOiZ,EAAM75B,IAAMm8C,GAAWn8C,EAAI,IAAM8V,EAAO3W,MAEjDyhB,EAASA,EAAOiZ,EAAM75B,GAIxB,KAAKm8C,EACH,IAAK,GAAItwC,KAAQ1M,IACM0C,SAAjB+e,EAAO/U,IAAuBqwC,KAChCt7B,EAAO/U,GAAQ1M,EAAI0M,GAKzB,OAAO+U,IAQTxd,KAAM,WACJ,QAASg5C,KACP,OAA+B,OAArB,EAAI1xC,KAAK4L,UAAuB,GAAG/B,SAAS,IAAI48B,UAAU,GAEtE,MAAQiL,KAAOA,IAAO,IAAMA,IAAO,IAAMA,IAAO,IAAMA,IAAO,IAAMA,IAAOA,IAAOA,KASnF/7C,QAAS,SAASyH,EAAOu0C,GACvB,MAAO/8C,QAAOe,QAAQyH,EAAOu0C,GAAS,IASxCC,eAAgB,SAAS1a,GACvB,GAGIb,GACAD,EAJAyb,EAAa,8CACbC,EAAW5a,EAAI3/B,cACf43B,EAAQ0iB,EAAWj2C,KAAKk2C,EAI5B,KACEzb,EAAezc,SAASI,KACxB,MAAOriB,GAEP0+B,EAAeniC,SAAS+F,cAAc,KACtCo8B,EAAarc,KAAO,GACpBqc,EAAeA,EAAarc,KAG9Bqc,EAAeA,EAAa9+B,cAGvB43B,IACH2iB,EAAWhB,EAAeza,EAAcyb,GAAUv6C,cAClD43B,EAAQ0iB,EAAWj2C,KAAKk2C,IAI1B1b,EAAeyb,EAAWj2C,KAAKy6B,MAG/B,IAAI/c,KAAY6V,IACbA,EAAM,KAAOiH,EAAa,IAAMjH,EAAM,KAAOiH,EAAa,KAC1DjH,EAAM,KAAoB,UAAbA,EAAM,GAAiB,KAAO,WAC3CiH,EAAa,KAA2B,UAApBA,EAAa,GAAiB,KAAO,SAE5D,OAAO9c,IAUTy4B,gBAAiB,SAASC,GACxB,MAAOtB,GAAQsB,IAAepB,EAAWoB,IAmB3CC,IAAK,WACH,GAAK59C,OAAOyuC,QAAZ,CAIA,GAAIlJ,GAAS,MACT5uB,EAAOe,MAAMzK,UAAUnC,MAAMN,MAAMC,UAEnCkM,GAAKtW,OAAS,GAAKsW,EAAK,IAAM3W,QAAOyuC,UACvClJ,EAAS5uB,EAAKjD,SAGZ1T,OAAOyuC,QAAQlJ,IACjBvlC,OAAOyuC,QAAQlJ,GAAQ/6B,MAAMxK,OAAOyuC,QAAS93B,KASjDwqB,MAAO,SAASG,GACd,MAAOJ,MAAKC,MAAMG;EAmBpBiW,UAAW,SAASxuC,EAAO80C,EAAUC,GACnC,MAAO5c,MAAKqW,UAAUxuC,EAAO80C,EAAUC,IAOzCnoC,QAAS,WACP,MAAO,YA0CbnW,IAAGgF,OAAO,cAAe,WA2CvB,QAASu5C,GAAe72B,EAAO6H,EAAWivB,EAAUC,GAClDC,EAAeh3B,EAEf,IAAIpM,IACFqjC,QAAS,KACTjsC,KAAM,KACN6c,UAAWA,EASb,IANIvvB,GAAGk+C,gBAAgBM,GACrBljC,EAAQqjC,QAAUH,EACW,kBAAbA,KAChBljC,EAAQ5I,KAAO8rC,IAGZljC,EAAQ5I,OAAS4I,EAAQqjC,QAC5B,KAAM,IAAIp+C,OAAM,kIAGlB,IAAI+a,EAAQqjC,UAAYF,EACtB,KAAM,IAAIl+C,OAAM,yHAGlB,OAAO+a,GAIT,QAASojC,GAAeh3B,GACtB,GAAIk3B,IAAoBl3B,GAASm3B,IAAan3B,EAC5C,KAAM,IAAInnB,OAAM,yHAKpB,QAASu+C,GAAiBp3B,GACxB,GAAIA,IAAUm3B,EACZ,KAAM,IAAIt+C,OAAM,mFAIpB,QAASw+C,GAA2BhwB,EAAUQ,GAG5C,IAAK,GAFDyvB,GAAcjwB,EAASzjB,QAElB7J,EAAIu9C,EAAYn+C,OAAQY,GAAK,EAAGA,MAClCu9C,EAAYv9C,IAAOu9C,EAAYv9C,GAAG8tB,WAAayvB,EAAYv9C,GAAG8tB,UAAU7rB,gBAAkB6rB,IAC7FyvB,EAAYtnC,OAAOjW,EAAG,EAI1B,OAAOu9C,GAGT,QAASC,GAAev3B,EAAOw3B,EAAU3vB,GAGvC,GAFAmvB,EAAeh3B,GAEX6H,EAGF,GAFAA,EAAYA,EAAU7rB,cAElBw7C,GAAYA,IAAYC,GAC1BA,EAAmBD,GAAYH,EAA2BI,EAAmBD,GAAW3vB,OAExF,KAAK,GAAInsB,KAAO+7C,GACdF,EAAev3B,EAAOtkB,EAAKmsB,OAGtB2vB,KACTC,EAAmBD,OAIvB,QAASE,GAAeF,GACtB,GAAI3vB,GAAY,EAEhB,IAA8B,KAA1B2vB,EAASppC,QAAQ,KAAa,CAChC,GAAIupC,GAAaH,EAAS55C,MAAM,IAChC45C,GAAWG,EAAW,GACtB9vB,EAAY8vB,EAAW,GAGzB,OACEj8C,IAAK87C,EACL3vB,UAAWA,GAzHf,GAAIqvB,GAAkB5+C,GAAG6E,OACrBg6C,EAAW7+C,GAAG6E,OAEds6C,GACFG,iBACAC,mBACAC,oBACAC,kBACAC,mBACAC,aACAC,cACAC,wBAGEC,GACFH,UAAW,SAASI,EAAWC,GAEzBhgD,GAAGk+C,gBAAgB6B,EAAU/5B,MAC/BjlB,OAAOg/C,EAAU/5B,MAAM2Q,OAAOqpB,GAE9BD,EAAU/5B,KAAOjlB,OAAOi/C,GAASl1C,IAAI,GAGvCzK,SAAS0J,KAAKvC,YAAYu4C,EAAU/5B,OAEtC45B,WAAY,SAASK,GACfA,EAAYC,KAAOD,EAAYC,IAAI3I,UACE,kBAA5B0I,GAAYC,IAAI3I,QACzB0I,EAAYC,IAAI3I,UAEhBv3C,GAAGo+C,IAAI6B,EAAYpM,OAAOsM,MAAQ,mGAItCp/C,OAAOk/C,EAAYpM,OAAO7tB,MAAMwX,QAAQ,IAAK,WAC3Cz8B,OAAON,MAAM0pB,YA0FnB,QASEi2B,SAAU,WAOR,aADO3/C,MAAK2/C,SACLxB,GAYTyB,aAAc,WAOZ,aADO5/C,MAAK4/C,aACLxB,GAYTyB,UAAW,SAAS54B,EAAOw3B,GAGzB,GAFAJ,EAAiBp3B,IAEZy3B,EAAmBD,GACtB,KAAM,IAAI3+C,OAAM,4DAGlB,IAAIggD,GAAeroC,MAAMzK,UAAUnC,MAAM5J,KAAKuJ,UAAW,EAEzD,KAAKk0C,EAAmBD,GAAUr+C,QAAUi/C,EAAgBZ,GAC1DY,EAAgBZ,GAAUl0C,MAAMhL,GAAIugD,OAEpC,KAAK,GAAI9+C,GAAI,EAAGA,EAAI09C,EAAmBD,GAAUr+C,OAAQY,IAAK,CAC5D,GAAI6Z,GAAU6jC,EAAmBD,GAAUz9C,EAG3C,IAAI6Z,EAAQqjC,SAAW1zC,UAAUpK,QAAU,EAAG,CAC5C,GAAIk/C,GAAY90C,UAAU,GACtB+0C,EAAU/0C,UAAU,EAEpB80C,GAAU/5B,KACZjlB,OAAOg/C,EAAU/5B,MAAM2Q,OAAOqpB,GAE9BD,EAAU/5B,KAAOjlB,OAAOi/C,GAASl1C,IAAI,GAGvC/J,OAAOua,EAAQqjC,SAAShoB,OAAOopB,EAAU/5B,UAEzC1K,GAAQ5I,KAAK1H,MAAMhL,GAAIugD,GAK7B,MAAO9/C,OAqCTwzB,GAAI,SAASvM,EAAOw3B,EAAUpQ,GAC5B,IAAKoQ,EACH,KAAM,IAAI3+C,OAAM,0GAGlB,IAAIyC,GAAQo8C,EAAeF,EAE3B,KAAKC,EAAmBn8C,EAAMI,KAC5B,KAAM,IAAI7C,OAAM,4DAGlB,IAAIigD,GAA6B,cAAdx9C,EAAMI,IACrBkY,EAAUijC,EAAe72B,EAAO1kB,EAAMusB,UAAWuf,EAAU0R,EAG/D,OAFArB,GAAmBn8C,EAAMI,KAAK2D,KAAKuU,GAE5B7a,MAgBTsrB,IAAK,SAASrE,EAAOw3B,GACnB,IAAKA,EACH,KAAM,IAAI3+C,OAAM,0GAGlB,IAAIyC,GAAQo8C,EAAeF,EAE3B,KAAKC,EAAmBn8C,EAAMI,KAC5B,KAAM,IAAI7C,OAAM,4DAKlB,OAFA0+C,GAAev3B,EAAO1kB,EAAMI,IAAKJ,EAAMusB,WAEhC9uB,WAKbT,GAAGgF,OAAO,aAKRy7C,aAuBEC,gBAAiB,gBAqBjBC,kBAAmB,kBAqCnBC,WAAY,YAoBZC,iBAAkB,iBAqBlBC,mBAAoB,mBA8BpBC,YAAa,aAqBbC,kBAAmB,kBAqBnBC,uBAAwB,yBAQ5BjhD,GAAGgF,OAAO,IAaRk8C,IAAK,WACH,OAOExzC,KAAM,eAOVyzC,WAQEhB,MAAO,GAMP75C,WAOA86C,qBAAqB,EASrBjzC,OAAQ,EAQRkzC,WAAY,GAWZC,UAAU,EAWVC,gBAAiB,KASjBC,iBAQAC,YAAa,GASbtpB,SAAU,EAUVupB,YAAa,EAUbxpB,SAAU,IAOV30B,KAAM,GAQNyiB,KAAM1iB,OAQNq+C,GAAIr+C,OASJs+C,UAMFC,aAQEC,QAOAC,iBAOA1rB,WAOA7pB,WAMFw1C,YAOE3+C,QAOA6zB,KAAM,GAONkN,OAAQ,IAOV6d,iBAaEC,eAAgB,KAehBvC,UAAW,KAYXwC,gBAAiB,KAQjBC,WAAW,EAWXC,OAAQ,KASRC,mBAAoB,IAMpBC,iBAAiB,EAQjBC,kBAAmB,GASnBC,kBAKAC,IAOEC,MAOEC,gBAAiB,OAMjBC,YAAa,GAObz0C,QAAS,GAST00C,YAAY,EAOZjoB,OAAQ,IAiBZqM,KAqBEv0B,SAAU,KAqBV7R,KAAM,KAkBNuiC,IAAK,MAiBP0f,YAAa,aAebC,WAAY,gBAShBhjD,GAAGgF,OAAO,aAKRi+C,KAWEC,IAAK,SASLC,cAAe,mBAUfC,UAAW,eAYXC,SAAU,cAcVC,iBAAkB,sBAUlBC,KAAM,UASNC,eAAgB,qBAMlBC,QAWEC,kBAAmB,mBAWnBC,iBAAkB,mBAWlBC,wBAAyB,yBASzBC,uBAAwB,wBAYxBC,wBAAyB,0BAE3BC,eAAgB,oBAMhBC,SASEC,MAAO,YASPC,KAAM,iBASNC,IAAK,UASLC,aAAc,kBAQdC,OAAQ,aAUVC,OASEC,eAAgB,eAQhBC,MAAO,QAQPC,KAAM,OASNC,KAAM,OASNC,OAAQ,SASRC,SAAU,cASd5kD,GAAGgF,OAAO,GAAI,WAoBZ,QAAS6/C,iBAAgB9E,EAAW7oB,GAClC,GAAI5b,GAAUwpC,QAAQ5C,gBAAkB,SAAS6C,EAAYC,GAC3D,MAAOjkD,QAAOikD,GAAOl7C,SAAS,SAE5Bm7C,EAAgB3pC,EAAQykC,EAAW7oB,EAEvC,OAAI4tB,SAAQ5C,iBAAmB+C,MAC7BjlD,IAAGo+C,IAAI,0FAITr9C,OAAOkkD,GAAe3kB,SAAStgC,GAAGklD,UAAUjC,IAAIC,KAEzC+B,EAAcn6C,IAAI,IAa3B,QAASq6C,YAAWpF,EAAW7oB,GAS7B,MAPAA,GAAOkuB,WAAWrkD,OAAOm2B,GAAMoJ,SAAStgC,GAAGklD,UAAUjC,IAAIE,cAAgB,IAAMpD,EAAUI,QAGrF2E,QAAQnF,YACVzoB,EAAO4tB,QAAQnF,UAAUI,EAAW7oB,IAG/BkuB,WAAWluB,GAapB,QAASmuB,kBAAiBtF,GACxB,GAAIzkC,GAAUwpC,QAAQ3C,iBAAmBphD,OAAOgE,IAChD,OAAOuW,GAAQykC,GAajB,QAASuF,sBAAqBvF,EAAWwF,GACnCT,QAAQjF,qBACViF,QAAQjF,oBAAoBE,EAAWwF,GAY3C,QAASC,kBAAiBzF,GAkBxB,MAhBAA,GAAYh/C,OAAOiE,QAAO,KAAU+6C,GAGpCA,EAAUsB,WAAatB,EAAUsB,YAAcrhD,GAAG6E,OAGlDk7C,EAAU6B,MAAQ7B,EAAU6B,UACvB5hD,GAAG8B,QAAQ9B,GAAGklD,UAAUZ,MAAMI,KAAM3E,EAAU6B,QACjD7B,EAAU6B,MAAM76C,KAAK/G,GAAGklD,UAAUZ,MAAMI,MAItC1kD,GAAGiiD,gBAAgBI,SACrBtC,EAAUwB,gBAAkBvhD,GAAGiiD,gBAAgBI,QAG1CtC,EAWT,QAAS0F,0BAAyBtjC,GAChC,GAAKA,EAAL,CAIA,GAAI49B,GACAI,EAAQh+B,EAAKxe,aAAa,iBAC1B89C,EAAct/B,EAAKxe,aAAa,sBAEpC,IAAIw8C,GAASsB,EAAa,CACxB1B,GACEI,MAAOA,EACPiB,oBAAqBj/B,EAAKujC,aAAa,+BACvCpE,SAAUn/B,EAAKujC,aAAa,oBAC5BjE,YAAaA,EACbz7B,KAAM7D,EAIR,IAAIwjC,GAAcxjC,EAAKxe,aAAa,kBAEpC,IAAIgiD,EACF,IACE5F,EAAUz5C,QAAUtG,GAAG2hC,MAAMgkB,GAC7B,MAAO7hD,GACP9D,GAAGo+C,IAAI,OAAQ,kDAAmD,IAAMt6C,EAAI,MAKlF,MAAOi8C,IAUT,QAAS6F,uBAAsBzjC,GAC7B,GAAI0jC,IAAW,CAEf,IAAI1jC,EAAK2jC,gBACP,IAAK,GAAIrkD,GAAI,EAAG8V,EAAM4K,EAAKtb,WAAWhG,OAAY0W,EAAJ9V,EAASA,IACrD,GAAoC,IAAhC0gB,EAAKtb,WAAWpF,GAAGR,SAAgB,CACrC4kD,GAAW,CACX,OAKN,MAAOA,GAST,QAASE,yBAAwBC,GAC1BA,EAAgB1D,qBACnB0D,EAAgB1D,mBAAqBtiD,GAAGiiD,gBAAgBK,oBAGtD0D,EAAgB5D,aAAc,IAChC4D,EAAgB5D,UAAYpiD,GAAGiiD,gBAAgBG,WAG7C4D,EAAgB3D,QAA4C,gBAA3B2D,GAAgB3D,SACnDriD,GAAGiiD,gBAAgBI,OAAS2D,EAAgB3D,QAUhD,QAAS4D,gBAAelG,GACtB,GAAImG,GAAgB,IAAMlmD,GAAGklD,UAAUjC,IAAIK,iBAAmB,IAAMtjD,GAAGklD,UAAUZ,MAAMC,eAAiB,GAExGxjD,QAAOg/C,EAAU/5B,MAAMiO,GAAG,QAASiyB,EAAe,SAASpiD,GACzDA,EAAEysB,gBAEF,IAAI41B,GAAOplD,OAAON,MAAMmH,KAAK5H,GAAGklD,UAAUZ,MAAMC,gBAAgB7gD,aAG5DyiD,KAASnmD,GAAGklD,UAAUZ,MAAMK,OAC9B3kD,GAAGomD,UAAUrG,EAAUsB,YAEvBtB,EAAU4B,GAAG2C,MAAMp2B,OAAOi4B,KAUhC,QAASE,wBACP,QAASC,KACPtmD,GAAGyjD,OAAOlU,KAAKvvC,GAAGklD,UAAUzB,OAAOI,wBAGrC,GAAI0C,EAEJxlD,QAAOP,QAAQyzB,GAAG,SAAU,WAC1BiK,aAAaqoB,GACbA,EAAgB34C,WAAW04C,EAAe,OAI5CtmD,GAAGyjD,OAAOxvB,GAAGj0B,GAAGklD,UAAUzB,OAAOK,wBAAyB,SAASzgD,GAC7DA,EAAKg/C,QAAiC,gBAAhBh/C,GAAKg/C,SAC7BriD,GAAGiiD,gBAAgBI,OAASh/C,EAAKg/C,UAYvC,QAASmE,uBAAsBrkC,GAC7B,MACEniB,IAAGk+C,gBAAgB/7B,KAClByjC,sBAAsBzjC,MACrBA,EAAKxe,aAAa,oBAClBwe,EAAKxe,aAAa,uBAUxB,QAAS8iD,WACP,QAAS3B,QAWX,QAAS4B,oBAAmB3G,EAAW4G,GACrC5G,EAAU4B,GAAK,GAAI3hD,IAAG0iD,GAAG3C,GAGQz8C,SAA7BtD,GAAG09C,KAAKqC,EAAUI,SACoB,kBAA7BngD,IAAG09C,KAAKqC,EAAUI,OAE3BvyC,WAAW,WACTg5C,MAAM7G,EAAUsB,YAAYnB,IAAM,GAAIlgD,IAAG09C,KAAKqC,EAAUI,OAAOJ,EAAW4G,EAAY5G,EAAU/5B,MAEnD1iB,SAAzCsjD,MAAM7G,EAAUsB,YAAYnB,IAAIxyC,MAClCk5C,MAAM7G,EAAUsB,YAAYnB,IAAIxyC,QAEjC,GAEH1N,GAAGo+C,IAAI,4DAA8D2B,EAAUI,MAAQ,MAa7F,QAAS0G,WAAUC,WAAYC,aAe7B,QAASC,aAAYx6C,EAAQy6C,GAC3B,GAAInC,QAAQ9B,WACV,MAAO8B,SAAQ9B,WAAWx2C,EAAQy6C,EAIpC,IAAIC,GACAC,IAAwB9mD,SAAS+mD,gBAErCrmD,QAAOuB,KAAKkK,EAAQ,SAAS/K,EAAGqC,GAC9B,GAAIujD,GAAcvjD,EACdwjD,EAAcxjD,EAAEJ,aAEhB6jD,eAAcD,KAIdH,EACF9mD,SAAS+mD,iBAAiBC,IAE1BH,EAAiBA,MACjBA,EAAengD,KAAK,gDAAkDsgD,EAAc,QAGtFE,cAAcD,IAAe,KAG3BJ,GACFnmD,OAAO,QAAQ41B,OAAOuwB,EAAexsC,KAAK,KAG5CusC,IAGF,QAASO,cAAanxB,EAAS4wB,GAuB7B,QAASQ,GAAO3jD,GACd8J,WAAW,WACT,GAAI85C,IACFr/C,IAAKvE,EAAEyP,OAAOlL,IACd83C,MAAO2G,WAAW,GAAG3G,MAIvBngD,IAAGo+C,IAAI,sBAAyBsJ,EAAQvH,MAAQ,qBAAyBuH,EAAQr/C,IAAM,KAGvFrI,GAAGyjD,OAAOlU,KAAK,0BAA2BmY,GAErCC,iBAGH3nD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYQ,uBACzB6F,WAAW,GACXY,EAAQr/C,KANVi9C,qBAAqBwB,WAAW,GAAIY,EAAQr/C,MAS7Cy8C,QAAQxC,oBAGb,QAASuF,OAEDC,IAAkBC,GACtBd,IAIJ,QAASe,GAAeV,EAAaW,GACnC,GAAItM,GACAuM,EAAWC,gBAAgBb,EAE/B,IAAKY,EAAL,CAIA,IAAK,GAAIzmD,GAAI,EAAGA,EAAIymD,EAASrnD,OAAQY,IACnCk6C,EAAUuM,EAAWzmD,GAEjBwmD,EACFtM,EAAQ1mC,MAAMgzC,GAEdtM,EAAQpX,SAIZ4jB,iBAAgBb,GAAe,MAzEjC,GAAIxC,QAAQ/B,YACV,MAAO+B,SAAQ/B,YAAY1sB,EAAS4wB,EAGtC,KAAK5wB,EAAQx1B,OACX,MAAOomD,IAGT,IAAIr9C,GAAMpJ,OAAOH,SACb0nD,EAAc1xB,EAAQx1B,OACtBinD,EAAgB,EAEhBhgB,EAAOl+B,IAAQA,EAAIk+B,MAAQl+B,EAAIlD,qBAAqB,QAAQ,IAE5D0hD,EAAiBtgB,GAAQA,EAAKphC,qBAAqB,QAAQ,IAAM,KAEjE2hD,EAAe7nD,OAAuB,qBACxC8nD,QAAU,EACVj2C,UAAY,EA2DdtR,QAAOuB,KAAK+zB,EAAS,SAAS50B,EAAG4hC,GAC/B,GAAIuE,GAASh+B,EAAIxD,cAAc,UAC3BihD,EAAchkB,EACdikB,EAAcD,EAAY3jD,aAG9B,OAAI6kD,gBAAejB,GACVO,IAILM,gBAAgBb,OAClBa,iBAAgBb,GAAavgD,MAC3Bw9B,QAASsjB,EACT5yC,MAAOwyC,KAOXU,gBAAgBb,MAGZxC,QAAQ1C,YACViF,GAAe,iBAAkB,GAAInuC,OAAOsvC,WAK9C5gB,EAAOvF,OAAQ,EACfuF,EAAO9mC,KAAO,kBACd8mC,EAAOI,QAAU,QAEjBJ,EAAO6gB,QAAU,SAAS3kD,GACxB2jD,EAAO3jD,GACPkkD,EAAeV,EAAaxjD,IAI9B8jC,EAAOK,OAASL,EAAOF,mBAAqB,SAAS5jC,GACnDA,EAAIA,GAAKtD,OAAOwC,OAMD,SAAXc,EAAEhD,MAAmBunD,EAAYzgB,EAAO3kC,eAE1C2kC,EAAOK,OAASL,EAAOF,mBAAqBE,EAAO6gB,QAAU,GAE7DF,eAAejB,IAAe,EAE9BO,IAEAG,EAAeV,GAEf1f,EAAS,OAKbA,EAAOv/B,IAAMg/C,MAGbvf,GAAKhR,aAAa8Q,EAAQwgB,MAI9B,QAASM,oBAAmBC,QAAS1B,IAEnC,GAAInC,QAAQ8D,kBACV9D,QAAQ8D,kBAAkBD,QAAS1B,QAC9B,CACL,IAAK,GAAIxlD,GAAI,EAAG8V,IAAMoxC,QAAQ9nD,OAAY0W,IAAJ9V,EAASA,IAC7C,IACEonD,KAAKF,QAAQlnD,IACb,MAAQqnD,WACR9oD,GAAGo+C,IAAI,gCAAkC0K,UAAY,OAASH,QAAQlnD,IAGtEzB,GAAGyjD,OAAOlU,KAAK,2BACb4Q,MAAO2G,WAAW,GAAG3G,MACrB93C,IAAKsgD,QAAQlnD,GACbqE,IAAKgjD,YAGFnB,iBAGH3nD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYQ,uBACzB6F,WAAW,GACXgC,WANFxD,qBAAqBwB,WAAW,GAAIgC,WAW1C7B,MAKJ,QAAS8B,mBAAkB3d,GACzB,GAAIA,EACF,KAAOA,EAAQliC,YAGb,GAFAkiC,EAAUA,EAAQliC,WAEdkiC,IAAY/qC,SACd,OAAO,CAKb,QAAO,EAGT,QAAS2oD,WAAUlH,GACjB/gD,OAAOuB,KAAKw/C,EAAM,SAASrgD,EAAGga,GAC5B,GAAI+qC,sBAAsBM,WAAWrlD,GAAGukB,MACtCjlB,OAAO+lD,WAAWrlD,GAAGukB,MAClBsa,SAAStgC,GAAGklD,UAAUjC,IAAIC,KAC1BvsB,OAAO51B,OAAO0a,EAAEyb,MAAMoJ,SAAStgC,GAAGklD,UAAUjC,IAAIE,cAAgB,IAAM2D,WAAWrlD,GAAG0+C,YAClF,IAAKwH,iBAGL,CACL3nD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYG,WACzBkG,WAAWrlD,GACX2jD,WAAWrkD,OAAO0a,EAAEyb,MAAMoJ,SAAStgC,GAAGklD,UAAUjC,IAAIE,cAAgB,IAAM2D,WAAWrlD,GAAG0+C,QAG1F,IAAIA,GAAQ2G,WAAWrlD,GAAG0+C,MACtBn6B,EAAO8gC,WAAWrlD,GAAGukB,IAEzB,KAAKA,EACH,KAAM,IAAIzlB,OAAM,YAAc4/C,EAAQ,0JAGxC,KAAK4I,kBAAkB/iC,GACrB,KAAM,IAAIzlB,OAAM,gBAAkB4/C,EAAQ,qHAS5C,IANAngD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYI,iBACzBiG,WAAWrlD,KAGRzB,GAAGk+C,gBAAgBl4B,GACtB,KAAM,IAAIzlB,OAAM,gBAAkB4/C,EAAQ,+HA3B5C2G,YAAWrlD,GAAGukB,KAAO6+B,gBAAgBiC,WAAWrlD,GAAI0jD,WAAW2B,WAAWrlD,GAAIga,EAAEyb,MAgClF+uB,gBAAea,WAAWrlD,MAzR9B,GAHAqlD,cAAgB1hD,OAAO0hD,YAGG,IAAtBA,WAAWjmD,QAAgBimD,WAAW,GAAGxF,WAAawD,QAAQvC,gBAEhE,WADA0G,gBAAenC,WAAW,GAAIC,YAKhC,IAAID,WAAWjmD,SAAWkmD,YAAYjF,KAAKjhD,OAEzC,WADAb,IAAGo+C,IAAI,mFAAoF2I,YAuR7F,IAAImC,iBAAkBnC,YAAY1wB,YAC9B8yB,eAAiBpC,YAAYv6C,WAC7B48C,gBAAkBrC,YAAYhF,kBAC9BsH,aAAetC,YAAYjF,QAG/BkF,aAAYmC,eAAgB,WAC1BH,UAAUK,cACV7B,aAAa0B,gBAAiB,WAExBpC,WAAW,IACb9mD,GAAGyjD,OAAOlU,KAAK,sBACb4Q,MAAO2G,WAAW,GAAG3G,MACrB9pB,QAAS6yB,kBAIbR,mBAAmBU,gBAAiB,WAElCroD,OAAOuB,KAAKwkD,WAAY,SAASrlD,EAAGga,GAClCirC,mBAAmBjrC,EAAG4tC,aAAa5nD,YAe7C,QAASwnD,gBAAelJ,EAAWgH,GAEjC,GAAIjC,QAAQtC,kBAAmB,CAC7B,GAAIgE,sBAAsBzG,EAAU/5B,MAClCjlB,OAAOg/C,EAAU/5B,MACdsa,SAAStgC,GAAGklD,UAAUjC,IAAIC,KAC1BvsB,OAAO51B,OAAO,eACdu/B,SAAStgC,GAAGklD,UAAUjC,IAAIE,cAAgB,IAAMpD,EAAUI,YACxD,IAAKwH,iBAGL,CACL,GAAI2B,GAAQvoD,OAAOg/C,EAAU/5B,KAS7B,IAPAhmB,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYG,WACzBb,EACAqF,WAAWrkD,OAAOgmD,EAAY7vB,MAAMoJ,SAAStgC,GAAGklD,UAAUjC,IAAIE,cAAgB,IAAMpD,EAAUI,SAGrD,IAAvCmJ,EAAMrgC,QAAQ,cAAcpoB,OAC9B,KAAM,IAAIN,OAAM,kIASlB,IANAP,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYI,iBACzBd,IAGGA,EAAU/5B,KACb,KAAM,IAAIzlB,OAAM,oKAGlB,KAAKP,GAAGk+C,gBAAgB6B,EAAU/5B,MAChC,KAAM,IAAIzlB,OAAM,wIA1BlBw/C,GAAU/5B,KAAO6+B,gBAAgB9E,EAAWoF,WAAWpF,EAAW,eA+BpEA,GAAU4B,GAAK,GAAI3hD,IAAG0iD,GAAG3C,GAEzBkG,eAAelG,GAEf//C,GAAG24C,IAAI4Q,SAASxJ,EAAWgH,OAE3B/mD,IAAGo+C,IAAI,wFAIX,QAASgH,YAAWluB,GAClB,MAAOn2B,QAAO,eAAe41B,OAAOO,GAAMA,OAU5C,QAASsyB,cAAazJ,GAEpB,MAAKA,GAAUI,MAGHJ,EAAU/5B,MAAS+5B,EAAU0B,aAKlC,GAJLzhD,GAAGo+C,IAAI,0CACA,IAJPp+C,GAAGo+C,IAAI,oCACA,GAeX,QAASqL,4BACP,GAAI3E,SACEA,QAAQ5d,IAAK,CACf,GAA6B,kBAAhB4d,SAAQ5d,KAA6C,gBAAhB4d,SAAQ5d,IACxD,KAAM,IAAI3mC,OAAM,wDAElB,IAAIukD,QAAQ5d,IAAIv0B,UAA4C,kBAAzBmyC,SAAQ5d,IAAIv0B,SAC7C,KAAM,IAAIpS,OAAM,oDAElB,IAAIukD,QAAQ5d,IAAIpmC,MAAoC,kBAArBgkD,SAAQ5d,IAAIpmC,KACzC,KAAM,IAAIP,OAAM,gDAElB,IAAIukD,QAAQ5d,IAAI7D,KAAkC,kBAApByhB,SAAQ5d,IAAI7D,IACxC,KAAM,IAAI9iC,OAAM,gDAKtB,OAAO,EAUT,QAASmpD,kBAAiBxgD,GACxB,GAAI/H,KAMJ,IAJI+H,EAAWw8C,aAAa,kBAC1BvkD,EAAS4F,KAAKmC,GAGZA,EAAWtC,iBAAkB,CAC/B,GAAI2hB,GAAWrQ,MAAMzK,UAAUnC,MAAM5J,KAAKwH,EAAWtC,iBAAiB,mBACtEzF,GAAWA,EAASiE,OAAOmjB,GAG7B,MAAOpnB,GAnvBT,GAAIylD,UACA9B,SAAU,EACV6C,kBAAmB,EACnBC,iBAAmB5nD,GAAGygD,YAAYJ,eAClCkI,kBACAhB,iBACAY,kBAgvBJ,QAMEwB,kBAAmB,WACjB,MAAKlD,WAKE1lD,OAAOsE,IAAIuhD,MAAO,SAAS1G,GAChC,OACEC,MAAOD,EAAIrM,OAAOsM,aANpBngD,IAAGo+C,IAAI,2DAeXwL,mBAAoB,WAClB,MAAKnD,WAKEzmD,GAAGiiD,gBAAgBI,WAJxBriD,IAAGo+C,IAAI,4DAYX1wC,KAAM,SAASmmC,GACbiR,QAAUjR,MACV4V,2BACA1D,wBAAwBjB,SAIxB6C,mBAAqB7C,QAAQ3C,iBAAoB2C,QAAQnF,WAAcmF,QAAQ5C,gBAAmB4C,QAAQjF,sBAGpGiF,QAAQtC,mBAAqBsC,QAAQvC,kBACzCviD,GAAG24C,IAAIjrC,KAAKo3C,QAAQtC,kBAAoBsC,QAAQtC,mBAAoB,GAGtExiD,GAAG0iD,GAAGh1C,KAAKo3C,SAENA,QAAQvC,iBACX8D,wBAQJwD,OAAQpD,QAQRqD,iBAAkB,SAAS5gD,GACzB,GAAIA,IAAelJ,GAAGk+C,gBAAgBh1C,GACpC,KAAM,IAAI3I,OAAM,0CAMlB,KAAK,GAHDY,GAAWuoD,iBAAiBxgD,GAAc7I,SAAS0J,MACnD+8C,KAEKrlD,EAAI,EAAG8V,EAAMpW,EAASN,OAAY0W,EAAJ9V,EAASA,IAAK,CACnD,GAAIs+C,GAAY0F,yBAAyBtkD,EAASM,GAClDqlD,GAAW//C,KAAKg5C,GAGd+G,EAAWjmD,QACbb,GAAG+pD,aAAajD,IAyFpBiD,aAAc,SAASjD,EAAYkD,GACjC,IAAKvD,UAEH,WADAzmD,IAAGo+C,IAAI,oDAEF,KAAK0I,EAEV,WADA9mD,IAAGo+C,IAAI,uEAIT,IAAI6L,MACAC,KACAC,KACAC,GAAgB,CAMpB,OALAtD,MAAgB1hD,OAAO0hD,GACvBkD,KAAkB5kD,OAAO4kD,OACzBI,IAAkBJ,EAAanpD,OAG1BimD,EAAWjmD,OAGLimD,EAAWjmD,QAAUupD,GAAiBtD,EAAWjmD,SAAWmpD,EAAanpD,WAElFb,IAAGo+C,IAAI,qEAKTr9C,OAAOuB,KAAKwkD,EAAY,SAASrlD,EAAGga,GAQlC,GANAA,EAAI+pC,iBAAiB/pC,GAGrBA,EAAEuK,KAAOvK,EAAEuK,MAAQ,KAGdwjC,aAAa/tC,GAAlB,CASA,GALAmrC,MAAMnrC,EAAE4lC,aACNxN,OAAQp4B,GAINA,EAAEuK,OAASwgC,sBAAsB/qC,EAAEuK,MAAO,CAC5C,IAAMvK,EAAEuK,MAA0B,gBAAXvK,GAAEuK,OAAuBhmB,GAAGk+C,gBAAgBziC,EAAEuK,MAGnE,KAFAhmB,IAAGo+C,IAAI,uEACPp+C,GAAGo+C,IAAI,sBAAuB3iC,GACxB,GAAIlb,OAAM,kJACX,IAA8B,IAA1BQ,OAAO0a,EAAEuK,MAAMnlB,OAIxB,KAHAb,IAAGo+C,IAAI,mDACPp+C,GAAGo+C,IAAI,sBAAuB3iC,GAC9Bzb,GAAGo+C,IAAI,gCAAiCr9C,OAAO0a,EAAEuK,MAAMnlB,QACjD,GAAIN,OAAM,2GAOlB,OAHAmmD,oBAAmBjrC,OACnBwqC,gBAAexqC,GAKZ+qC,sBAAsB/qC,EAAEuK,QACtB2hC,kBAGH3nD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYC,gBACzBjlC,GAGFzb,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYE,kBACzBllC,IAXFA,EAAEuK,KAAOq/B,iBAAiB5pC,IAiB1B2uC,EACFvD,UAAUprC,EAAGuuC,EAAavoD,IAGtBga,EAAE2lC,sBAAwB3lC,EAAE6lC,UAC9B4I,EAAQzuC,EAAEgmC,YAAY/9C,eAAiBwmD,EAAQzuC,EAAEgmC,YAAY/9C,mBAC7DwmD,EAAQzuC,EAAEgmC,YAAY/9C,eAAeqD,KAAK0U,IAE1CwuC,EAASljD,MACP+6C,MAAOrmC,GACP4nB,IAAK5nB,EAAEgmC,sBAMV2I,IAEHrpD,OAAOuB,KAAK4nD,EAAS,SAASzoD,EAAGia,GAC/BuuC,EAASljD,MACPs8B,IAAK5hC,EACLqgD,KAAMpmC,MAYV3a,OAAOuB,KAAK2nD,EAAU,SAASxoD,EAAG4oD,GAEhC,GAAIhiB,GAAgBroC,GAAGklD,UAAUnB,eAAiBsG,EAAIvI,KAAK,GAAG3B,KAG9DgK,GAAc9hB,GAAiB8hB,EAAc9hB,OAC7C8hB,EAAc9hB,GAAethC,KAAKsjD,KAQpCtpD,OAAOuB,KAAK6nD,EAAe,SAAS1oD,EAAG6oD,GACrC,QAASC,GAAgBliB,EAAegiB,GAStC,QAASG,KACPD,EAAgB9oD,EAAG6oD,EAAS1lD,OAG9B,QAAS6lD,KACP1pD,OAAOuB,KAAK+nD,EAAIvI,KAAM,SAASt8B,EAAKklC,GAClCA,EAAKnnD,KAAOmnD,EAAKnnD,MAAQmnD,EAAKvK,MAC9BngD,GAAGo+C,IAAI,kBAAoBsM,EAAKnnD,KAAO,OAAQmnD,GAC/C1qD,GAAGomD,UAAUsE,EAAKrJ,cAItB,QAASsJ,GAAY5D,GACnBF,UAAUwD,EAAIvI,KAAMiF,GArBtB,GAAKsD,EAAL,CAKA,GAAIvpD,GAAO,MACP6R,EAAW,OAmBf,IAAImyC,QAAQ5d,IAAK,CACf,GAAI4d,QAAQ5d,IAAIv0B,WACdA,EAAWmyC,QAAQ5d,IAAIv0B,SAAS03C,EAAIhnB,IAAKgnB,EAAIvI,MAErB,gBAAbnvC,IACT,KAAM,IAAIpS,OAAM,sDAIpB,IAAIukD,QAAQ5d,IAAIpmC,OACdA,EAAOgkD,QAAQ5d,IAAIpmC,KAAKupD,EAAIhnB,IAAKgnB,EAAIvI,MAEjB,gBAAThhD,IACT,KAAM,IAAIP,OAAM,kDAIpB,IAAIukD,QAAQ5d,IAAI7D,MACdgnB,EAAIhnB,IAAMyhB,QAAQ5d,IAAI7D,IAAIgnB,EAAIhnB,IAAKgnB,EAAIvI,MAEhB,gBAAZuI,GAAIhnB,KACb,KAAM,IAAI9iC,OAAM,kDAMtB,GAAIqqD,GAAc9F,QAAQ5d,GAEC,mBAAhB0jB,KACTA,EAAc,SAASvnB,EAAKye,EAAM+I,EAAiBC,EAAeC,GAChEhqD,OAAOojC,MACLd,IAAKA,EACLviC,KAAMA,EACNuC,MACEylC,OAAQ9oC,GAAG+3C,UAAUsS,EAAIvI,KAAM9hD,GAAGy9C,oBAEpCrV,OAAO,EACPC,cAAeA,EACf11B,SAAUA,EACV4xB,QAASsmB,EACT51C,MAAO,SAAS+1C,EAAOhnB,EAAU8kB,GAC/B9oD,GAAGo+C,IAAI,wBAAyB0K,EAAU9yC,WAAYq0C,EAAIvI,MAC1DgJ,KAEFz4C,SAAU04C,MAKhBH,EAAYP,EAAIhnB,IAAKgnB,EAAIvI,KAAM6I,EAAaF,EAAWD,IAGzDD,EAAgB9oD,EAAG6oD,EAAS1lD,gBA/L9B5E,IAAGo+C,IAAI,yEAuMX6M,cAAe,WACb,MAAKxE,eAKL1lD,QAAOuB,KAAKskD,MAAO,SAASnlD,EAAGga,GAC7Bzb,GAAGomD,UAAU3qC,EAAEo4B,OAAOwN,kBALtBrhD,IAAGo+C,IAAI,uDAaXgI,UAAW,SAAS/E,GAClB,MAAKoF,gBAKDG,MAAMvF,KACRrhD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYK,mBACzB8F,MAAMvF,IAGRrhD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYM,YACzB6F,MAAMvF,IAGRrhD,GAAGygD,YAAYH,UACbsH,iBACA5nD,GAAGklD,UAAUzE,YAAYO,kBACzB4F,MAAMvF,UAGDuF,OAAMvF,SAvBbrhD,IAAGo+C,IAAI,wDAkCfp+C,GAAGgF,OAAO,SAAU,WAClB,GAAIqoC,GAAU,GAAI6C,gBAChBvC,UAAU,GAMZ,OAFAN,GAAQ8B,gBAAgB,IAYtB+b,YAAa,WACX,MAAOhb,eAAcziC,UAAU8hC,KAAKvkC,MAAMqiC,KAAY/hC,MAAM5J,KAAKuJ,aAUnEskC,KAAM,WAEJ,MADAvvC,IAAG24C,IAAIwS,UAAUnrD,GAAGklD,UAAUlB,QAAQC,SAAU34C,MAAM5J,KAAKuJ,YACpDilC,cAAcziC,UAAU8hC,KAAKvkC,MAAMqiC,KAAY/hC,MAAM5J,KAAKuJ,aAcnEmkC,KAAM,SAASpsC,EAAOooD,EAAetc,GACnC,MAAOzB,GAAQ+B,KAAKpsC,EAAOooD,EAAetc,IAS5C/iB,IAAK,SAAS/oB,EAAO8rC,GACnB,MAAOzB,GAAQthB,IAAI/oB,EAAO8rC,IAU5B7a,GAAI,SAASjxB,EAAO8rC,GAClB,MAAOzB,GAAQpZ,GAAGjxB,EAAO8rC,IAW3B9kB,KAAM,SAAShnB,EAAO8rC,GACpB,MAAOzB,GAAQrjB,KAAKhnB,EAAO8rC,SASjC9uC,GAAGgF,OAAO,MAAO,WAgBf,QAASqmD,KACP,GAAItL,GACAuL,GAAW,EAMXC,KAEAC,EAAS,GAAIzZ,SAAQwG,QACvBC,UAAW,SAASvB,EAASC,GAE3B,IAAKoU,GAAYG,EAAa7pD,KAAKq1C,GAAU,CAC3CA,EAAUA,EAAQzzC,QAAQioD,EAAc,GACxC,IAAIC,GAAW1rD,GAAG2hC,MAAMsV,EAGA,KAApByU,EAAS7qD,SACXk/C,EAAY2L,EAAS,GAGrB9E,EAAM7G,EAAUsB,aACdxN,OAAQkM,EACRyL,OAAQA,GAGVxrD,GAAG+pD,cAAchK,IAAa2L,EAAS,KAGvC3qD,OAAOuB,KAAKipD,EAAiB,WAC3BnR,EAAW2F,EAAW9I,EAASC,KAGjCoU,GAAW,OAEJA,GAETlR,EAAW2F,EAAW9I,EAASC,GAE/BqU,EAAgBxkD,KAAKkwC,MAe7B,QAAS0U,GAA4B5L,EAAWgH,GAC9C,GAAI56B,GAAYprB,OAAOg/C,EAAU/5B,KAEjC,KAAKmG,EAAUtrB,OAEb,WADAb,IAAGo+C,IAAI,gEAIT,IAAIwN,IACFC,UAAW,KACXhiD,OACEwE,MAAO,QAIP0xC,GAAU5xC,SACZy9C,EAAY/hD,MAAMsE,OAAS4xC,EAAU5xC,OAAS,KAGhD,IAAIq9C,GAAS,GAAIzZ,SAAQwG,QACvB7M,OAAQogB,EACR3/B,UAAWA,EAAUrhB,IAAI,GACzB8D,MAAOg9C,EACPpT,UAAW,SAASvB,EAASC,GAC3BkD,EAAW2F,EAAW9I,EAASC,IAEjCuB,QAAS,WACP+S,EAAO9S,YAAY14C,GAAGklD,UAAUlB,QAAQE,KAAOlkD,GAAG+3C,WAAWgI,EAAWgH,GAAc/mD,GAAGy9C,sBAI7F,OAAO+N,GAUT,QAASO,GAAmB1K,EAAY2K,GACtC,MAAO,YACLhsD,GAAG24C,IAAIj3C,KACL2/C,EACArhD,GAAGklD,UAAUlB,QAAQI,aACrB4H,KACG1gD,MAAM5J,KAAKuJ,WAAWK,MAAM,KAarC,QAAS8uC,GAAW2F,EAAW9I,GAI7B,QAASgV,GAAc5pC,EAAQ6pC,GAE7B,IAAK,GADDvZ,GAAO3wB,OAAOkqC,GAAc5mD,MAAM,KAC7B7D,EAAI,EAAGA,EAAIkxC,EAAK9xC,OAAQY,IAAK,CACpC,GAAwB6B,SAApB+e,EAAOswB,EAAKlxC,IAAmB,CACjC4gB,EAAS/e,MACT,OAEF+e,EAASA,EAAOswB,EAAKlxC,IAEvB,MAAO4gB,GAGT,QAAS8pC,GAAaC,EAAOC,EAAYhL,GACvC,GAAI5Q,GAAIzwC,GAAG2hC,MAAM0qB,EAAW7oD,QAAQ4oD,EAAO,IAiB3C,OAVI3b,GAAE3H,QAAU2H,EAAE3H,OAAOjoC,QAAU4vC,EAAE6b,WAAa7b,EAAE6b,UAAUzrD,QAC5DE,OAAOuB,KAAKmuC,EAAE6b,UAAW,SAAS7qD,EAAG8qD,GACnCxrD,OAAOuB,KAAKmuC,EAAE3H,OAAQ,SAAStxB,EAAGokB,GAC5B2wB,IAAM3wB,IACR6U,EAAE3H,OAAOtxB,GAAKu0C,EAAmB1K,EAAYkL,QAM9C9b,EAjCT,GAAI7vC,GACA8R,CAoCA85C,GAAS5qD,KAAKq1C,IAChBr2C,EAAMurD,EAAaK,EAAUvV,EAAS8I,EAAUsB,YAChD3uC,EAAOu5C,EAAclM,EAAU4B,GAAI/gD,EAAIsrD,cAE1B5oD,SAAToP,EACFA,EAAK1H,MAAM+0C,EAAU4B,GAAI/gD,EAAIkoC,QAE7B9oC,GAAGo+C,IAAI,qCAAuCx9C,EAAIsrD,eAE3CO,EAAM7qD,KAAKq1C,IACpBr2C,EAAMurD,EAAaM,EAAOxV,EAAS8I,EAAUsB,YAC7C3uC,EAAOu5C,EAAczrD,OAAQI,EAAIsrD,cAEpB5oD,SAAToP,EACFA,EAAK1H,MAAM0H,EAAM9R,EAAIkoC,QAErB9oC,GAAGo+C,IAAI,kCAAoCx9C,EAAIsrD,eAExCQ,EAAc9qD,KAAKq1C,IAC5Br2C,EAAMurD,EAAaO,EAAezV,EAAS8I,EAAUsB,YAEhB/9C,SAAjCk5C,EAAW57C,EAAIsrD,gBACjB1P,EAAW57C,EAAIsrD,cAAclhD,MAAMwxC,EAAW57C,EAAIsrD,cAAetrD,EAAIkoC,cAC9D0T,GAAW57C,EAAIsrD,gBAEfS,EAAS/qD,KAAKq1C,KACvBr2C,EAAMurD,EAAaQ,EAAU1V,EAAS8I,EAAUsB,YAChDrhD,GAAGyjD,OAAOyH,YAAYlgD,MAAMhL,GAAGyjD,OAAQ7iD,IAW3C,QAASgsD,GAAkB11C,GACzB,GAAI80C,GAAahsD,GAAG6E,MAEpB,OADA23C,GAAWwP,GAAc90C,EAClB80C,EAjNT,GAAIxP,MACAsP,EAAqB,GACrBlF,KACA+F,EAAW,GAAIlsC,QAAO,IAAMzgB,GAAGklD,UAAUlB,QAAQC,OACjDwI,EAAQ,GAAIhsC,QAAO,IAAMzgB,GAAGklD,UAAUlB,QAAQG,KAC9CuI,EAAgB,GAAIjsC,QAAO,IAAMzgB,GAAGklD,UAAUlB,QAAQI,cACtDqH,EAAe,GAAIhrC,QAAO,IAAMzgB,GAAGklD,UAAUlB,QAAQE,MACrDsI,EAAW,GAAI/rC,QAAO,IAAMzgB,GAAGklD,UAAUlB,QAAQK,OA6MrD,QAOE8G,UAAW,SAAS0B,EAAa/jB,GAC/B,GAAImO,GAAU4V,EAAc7sD,GAAG+3C,UAAUjP,EAEzC/nC,QAAOuB,KAAKskD,EAAO,SAASnlD,EAAGga,GAC7BA,EAAE+vC,OAAO9S,YAAYzB,MAazBv1C,KAAM,SAAS2/C,EAAYwL,EAAaX,EAAcpjB,GAEpD,GAAIwjB,KAEJvrD,QAAOuB,KAAKwmC,EAAQ,SAASrnC,EAAGqC,GAC9B,GAAiB,kBAANA,GAAkB,CAC3B,GAAIgpD,GAAMF,EAAkB9oD,EAC5BglC,GAAOrnC,GAAKqrD,EACZR,EAAUvlD,KAAK+lD,MAInBlG,EAAMvF,GAAYmK,OAAO9S,YACvBmU,EAAc7sD,GAAG+3C,WACfmU,aAAcA,EACdpjB,OAAQA,EACRwjB,UAAWA,MAcjB5+C,KAAM,SAAS80C,GACbsJ,EAAqBtJ,EAEhBsJ,GACHT,KAYJ0B,SAAU,SAAS1L,GACjB,GAAI2L,GAAkC1pD,SAAtBsjD,EAAMvF,GAClB4L,EAAcrG,EAAMvF,GAAYxN,OAAOyN,SACvC4L,GAAiBnsD,OAAO6lD,EAAMvF,GAAYxN,OAAO7tB,MAAMre,KAAK,UAAU9G,MAE1E,OAAOmsD,IAAaC,GAAeC,GASrC3D,SAAU,SAASxJ,EAAWgH,GACxBhH,GAAagH,EACfH,EAAM7G,EAAUsB,aACdxN,OAAQkM,EACRyL,OAAQG,EAA4B5L,EAAWgH,IAGjD/mD,GAAGo+C,IAAI,qFAMfp+C,GAAGgF,OAAO,KAAM,WAUd,QAASmoD,GAAQpN,GAIf,QAASqN,GAAcj/C,GACrBA,EAASA,GAAUpN,OAAOgkD,EAAW/+B,MAAMqnC,cAEvCrtD,GAAG24C,IAAIoU,SAAShI,EAAW1D,YAC7BrhD,GAAG24C,IAAIj3C,KACLqjD,EAAW1D,WACXrhD,GAAGklD,UAAUlB,QAAQK,OACrB,gBAEEl2C,KAIJ42C,EAAW52C,OAASA,EACpBm7C,EAAM3hD,KAAK,UAAUwG,OAAO42C,EAAW52C,SAK3C,QAASm/C,GAAWxsD,EAAMm2C,EAASsW,GACjC,OACE,sBACE,6BACE,8BACE,6BACE,8IACA,2BAA4BzsD,EAAM,QACpC,SACA,8BAA+Bm2C,EAAS,aACxC,6BACG,EAAe,oFAAsF,GACtG,mEACF,SACF,SACF,SACF,UACAv8B,KAAK,IAvCT,GAAIqqC,GAAahF,EACbuJ,EAAQvoD,OAAOg/C,EAAU/5B,KAyC7B,QAOEwnC,SAAU,SAASp3C,GACjBpW,GAAG0iD,GAAG8K,SAASzI,EAAW1D,WAAYjrC,IAOxCq3C,OAAQ,WACN,QAASC,GAAazW,GACpB,MAAOqW,GAAW,QAASrW,GAG7B,QAAS0W,GAAe1W,GACtB,MAAOqW,GAAW,UAAWrW,GAAS,GAGxC,OASE2W,MAAO,SAAS3W,EAAS//B,GACvB,MAAKlX,IAAG6pD,cAKJ7pD,GAAG24C,IAAIoU,SAAShI,EAAW1D,YAC7BrhD,GAAG24C,IAAIj3C,KACLqjD,EAAW1D,WACXrhD,GAAGklD,UAAUlB,QAAQK,OACrB,kBACG/4C,MAAM5J,KAAKuJ,YAIhBlK,OAAO2sD,EAAazW,IACjBhjB,GAAG,gBAAiB,WACnB,GAAIgZ,GAAQxsC,IACZM,QAAOksC,GAAOtlC,KAAK,gBAAgBssB,GAAG,QAAS,WAC7ClzB,OAAOksC,GAAOA,MAAM,QAAQ9iB,UAC3BjT,GAAYnW,OAAOgE,YAGvBkoC,OACCnB,UAAU,SAtBd9rC,IAAGo+C,IAAI,yDAoCXyP,QAAS,SAAS5W,EAAS6W,EAAYC,GACrC,MAAK/tD,IAAG6pD,cAKJ7pD,GAAG24C,IAAIoU,SAAShI,EAAW1D,YAC7BrhD,GAAG24C,IAAIj3C,KACLqjD,EAAW1D,WACXrhD,GAAGklD,UAAUlB,QAAQK,OACrB,oBACG/4C,MAAM5J,KAAKuJ,YAIhBlK,OAAO4sD,EAAe1W,IACnBhjB,GAAG,gBAAiB,WACnB,GAAIgZ,GAAQxsC,IAEZM,QAAOksC,GAAOtlC,KAAK,WAAWssB,GAAG,QAAS,WACxClzB,OAAOksC,GAAOA,MAAM,QAAQ9iB,UAC3B2jC,GAAc/sD,OAAOgE,UAGxBhE,OAAOksC,GAAOtlC,KAAK,eAAessB,GAAG,QAAS,WAC5ClzB,OAAOksC,GAAOA,MAAM,QAAQ9iB,UAC3B4jC,GAAkBhtD,OAAOgE,YAG7BkoC,OACCnB,UAAU,SA5Bd9rC,IAAGo+C,IAAI,+DA2Cf4P,SAAU,SAAS5d,GACbpwC,GAAG24C,IAAIoU,SAAShI,EAAW1D,YAC7BrhD,GAAG24C,IAAIj3C,KACLqjD,EAAW1D,WACXrhD,GAAGklD,UAAUlB,QAAQK,OACrB,YACCjU,IAGHrvC,OAAOgkD,EAAW/+B,MAAMre,KAAK,IAAM3H,GAAGklD,UAAUjC,IAAIG,WAAWn6C,KAAKmnC,IAUxE6d,SAAU,SAAS73C,EAAU83C,GAC3BluD,GAAG0iD,GAAGuL,SAASlJ,EAAW1D,WAAYjrC,EAAU83C,IASlDC,aAAcf,EAMd9I,MAAO,WAOL,QAAS8J,GAASngC,GAChB,MAAKogC,GAAczsD,KAAKqsB,IAKjB,GAJLjuB,GAAGo+C,IAAI,IAAMnwB,EAAY,4CAClB,GATX,GAAIof,GAAU,GAAI6C,eACdme,EAAgB,SAcpB,OAXAhhB,GAAQ8B,gBAAgB,IAoBtBjhB,OAAQ,SAASpL,GACM,kBAAVA,GACTriB,KAAKwzB,GAAG,SAAUnR,GACQ,gBAAVA,KACZiiC,EAAWzD,WAAathD,GAAG24C,IAAIoU,SAAShI,EAAW1D,YACrDrhD,GAAG24C,IAAIj3C,KACLqjD,EAAW1D,WACXrhD,GAAGklD,UAAUlB,QAAQK,OACrB,kBACG/4C,MAAM5J,KAAKuJ,YAEPjL,GAAG8B,QAAQghB,EAAOiiC,EAAWnD,SACtC7gD,OAAO,IAAMf,GAAGklD,UAAUjC,IAAII,SAAUiG,GACrChpB,SAAS,QACTz+B,OAAO,kBAAoBihB,EAAQ,KAAMwmC,GACzC3oB,YAAY,QAEfysB,IACA/f,EAAQkC,KAAK,SAAUzsB,MAW7BiJ,IAAK,SAAS/oB,EAAO8rC,GACfsf,EAASprD,IACXqqC,EAAQthB,IAAI/oB,EAAO8rC,IAWvB7a,GAAI,SAASjxB,EAAO8rC,GACdsf,EAASprD,IACXqqC,EAAQpZ,GAAGjxB,EAAO8rC,SA/Q9B,GAAIwf,EA4YJ,OA5GAnB,GAAQK,SAAW,SAASnM,EAAYjrC,GACtC,IAAKpW,GAAG6pD,SAEN,WADA7pD,IAAGo+C,IAAI,mDAIT,IAAIp+C,GAAG24C,IAAIoU,SAAS1L,KAAgBtgD,OAAOqV,GAAU8R,GAAG,IAAMloB,GAAGklD,UAAUjC,IAAIC,KAC7EljD,GAAG24C,IAAIj3C,KACL2/C,EACArhD,GAAGklD,UAAUlB,QAAQG,IACrB,kBAEE9C,EAEAtgD,OAAOqV,GAAUA,eAGhB,CACL,GAAI+V,GAAYprB,OAAOqV,EACvB+V,GAAUxkB,KAAK,MAAQ3H,GAAGklD,UAAUjC,IAAIM,MAAMp5B,SAC9CgC,EAAUwU,YAAY3gC,GAAGklD,UAAUjC,IAAIO,gBAGnCr3B,EAAU9oB,KAAKrD,GAAGklD,UAAUjC,IAAIO,iBAClCr3B,EAAUjiB,KAAM6vB,SAAY,aAWlCozB,EAAQz/C,KAAO,SAASs4C,GACtBsI,EAAmBtI,EACnBsI,EAAiB5L,GAAK3hD,OAAOiE,QAAO,KAAUhF,GAAGiiD,gBAAgBS,GAAI4L,EAAiB5L,SAYxFyK,EAAQc,SAAW,SAAS5M,EAAYjrC,EAAUm4C,GAChD,IAAKvuD,GAAG6pD,SAEN,WADA7pD,IAAGo+C,IAAI,mDAIT,IAAIp+C,GAAG24C,IAAIoU,SAAS1L,IAAetgD,OAAOqV,GAAU8R,GAAG,IAAMloB,GAAGklD,UAAUjC,IAAIC,KAC5EljD,GAAG24C,IAAIj3C,KACL2/C,EACArhD,GAAGklD,UAAUlB,QAAQG,IACrB,kBAEE9C,EAEAtgD,OAAOqV,GAAUA,SACjBm4C,QAGC,CACDA,IAAgBD,EAAiB5L,GAAGC,KAAKE,aAC3C7iD,GAAGo+C,IAAI,4GAGT,IAAIjyB,GAAYprB,OAAOqV,GAAUkqB,SAAStgC,GAAGklD,UAAUjC,IAAIO,gBACvDgL,EAAOztD,OAAO,SACfoN,OAAO,QACPE,MAAM,QACNiyB,SAAStgC,GAAGklD,UAAUjC,IAAIM,KAGxB+K,GAAiB5L,GAAGC,KAAKG,YAC5B0L,EAAKtkD,KACHukD,mBAAoBH,EAAiB5L,GAAGC,KAAKC,gBAC7C8L,mBAAoBJ,EAAiB5L,GAAGC,KAAKE,YAAe,OAASyL,EAAiB5L,GAAGC,KAAKE,YAAc,IAAO,GACnH8L,sBAAuB,UACvBC,oBAAqB,YACrB5kD,QAAW,QACXsuB,KAAQ,EACRu2B,aAAc,GACd3zB,QAAW,EACXnB,SAAY,WACZzX,IAAO,EACPwsC,UAAWR,EAAiB5L,GAAGC,KAAK9nB,OACpCh5B,OAAU,iBAAuD,IAAnCysD,EAAiB5L,GAAGC,KAAKv0C,QAAiB,IACxEA,QAAWkgD,EAAiB5L,GAAGC,KAAKv0C,UAIN,WAA9B+d,EAAUjiB,IAAI,cAChBiiB,EAAUjiB,KAAM6vB,SAAY,aAG5B5N,EAAU9oB,KAAKrD,GAAGklD,UAAUjC,IAAIO,gBAAgB,IAGlDr3B,EAAUwK,OAAO63B,KAIdrB,MAGRpsD,OAAO,WACN,GAAIguD,MACHlmD,EAAM,SAAS/E,GACTA,GACLirD,EAAYhoD,KAAKjD,IAElBkrD,EAAS,SAAS9sC,GACjB,GAAKA,EACL,IAAK,GAAIzgB,GAAI,EAAG8V,EAAM2K,EAAIrhB,OAAY0W,EAAJ9V,EAASA,IAC1CoH,EAAIqZ,EAAIzgB,IAcX,IATAoH,EAAIxI,SAAS0Z,eAAe,gBAGxB1Z,SAASuG,mBACZooD,EAAO3uD,SAASuG,iBAAiB,uBACjCooD,EAAO3uD,SAASuG,iBAAiB,kBAI9BmoD,EAAYluD,OAAQ,CACvBb,GAAG0N,MACH,KAAK,GAAIjM,GAAI,EAAG8V,EAAMw3C,EAAYluD,OAAY0W,EAAJ9V,EAASA,IAClDzB,GAAG8pD,iBAAiBiF,EAAYttD,OAKnC1B,QAAQC,GAAKA,GAES,mBAAXyqC,SAA0BA,OAAOC,KAE3CD,OAAO,WACN,MAAOzqC,QAKY,mBAAZD,SAA0BA,QAAUS"} \ No newline at end of file diff --git a/dist/f2.no-third-party.js b/dist/f2.no-third-party.js index 3561f506..89099977 100644 --- a/dist/f2.no-third-party.js +++ b/dist/f2.no-third-party.js @@ -253,17 +253,17 @@ var F2 = (function() { @returns {bool} Whether the URL is local or not Derived from: https://github.com/jquery/jquery/blob/master/src/ajax.js */ - isLocalRequest: function(url) { + isLocalRequest: function(url){ + var urlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; var urlLower = url.toLowerCase(); - var relUrlPattern = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var parts = relUrlPattern.execute(urlLower); + var parts = urlPattern.exec(urlLower); var ajaxLocation; var ajaxLocParts; try { ajaxLocation = location.href; - } catch ( e ) { - // Use the href of an anchor since IE account for document.location + } catch (e) { + // Use the href of an anchor since IE accounts for document.location ajaxLocation = document.createElement('a'); ajaxLocation.href = ''; ajaxLocation = ajaxLocation.href; @@ -271,16 +271,16 @@ var F2 = (function() { ajaxLocation = ajaxLocation.toLowerCase(); - // The url is relative, so we'll fully qualify it and re-regex + // The url must be relative, so fully qualify it and re-regex url if (!parts) { urlLower = _absolutizeURI(ajaxLocation, urlLower).toLowerCase(); - parts = relUrlPattern.exec(urlLower); + parts = urlPattern.exec(urlLower); } // Segment location into parts - ajaxLocParts = relUrlPattern.exec(ajaxLocation) || []; + ajaxLocParts = urlPattern.exec(ajaxLocation) || []; - // Do hostname and protocol and port of manifest URL match location.href? + // Do hostname and protocol and port of manifest URL match location.href? (a "local" request on the same domain) var matched = !(parts && (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || (parts[3] || (parts[1] === 'http:' ? '80' : '443')) !== @@ -1792,30 +1792,31 @@ F2.extend('', (function() { @return {F2.AppConfig} The new F2.AppConfig object */ function _getAppConfigFromElement(node) { - var appConfig; + if (!node) { + return; + } - if (node) { - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; + var appConfig; + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } catch (e) { - console.warn('F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + F2.log('warn', 'F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); } } } @@ -2076,7 +2077,6 @@ F2.extend('', (function() { function _checkComplete() { // Are we done loading all scripts for this app? if (++scriptsLoaded === scriptCount) { - // success cb(); } } @@ -2403,6 +2403,28 @@ F2.extend('', (function() { return true; } + /** + Find app placeholders on the page + @method _getPlaceholders + @private + @param {Element} parentNode The element to search for placeholder apps + @returns {Array} The discovered placeholder elements + */ + function _getPlaceholders(parentNode) { + var elements = []; + + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); + } + + if (parentNode.querySelectorAll) { + var children = Array.prototype.slice.call(parentNode.querySelectorAll('[data-f2-appid]')); + elements = elements.concat(children); + } + + return elements; + } + return { /** Gets the current list of apps in the container. @@ -2447,7 +2469,7 @@ F2.extend('', (function() { // Dictates whether we use the old logic or the new logic. // TODO: Remove in v2.0 - _usesAppHandlers = (_config.beforeAppRender || _config.appRender || _config.afterAppRender || _config.appScriptLoadFailed); + _usesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); // Only establish RPC connection if the container supports the secure app page if (!!_config.secureAppPagePath || _config.isSecureAppPage) { @@ -2478,22 +2500,9 @@ F2.extend('', (function() { throw new Error('"parentNode" must be null or a DOM node'); } - var elements = []; + var elements = _getPlaceholders(parentNode || document.body); var appConfigs = []; - /** - If the passed in element has a data-f2-appid attribute add it to the - list of elements but to not search within that element for other - placeholders - */ - if (parentNode) { - if (parentNode.hasAttribute('data-f2-appid')) { - elements.push(parentNode); - } - } else if (document.querySelectorAll) { - elements = elements.concat(document.querySelectorAll('[data-f2-appid]')); - } - for (var i = 0, len = elements.length; i < len; i++) { var appConfig = _getAppConfigFromElement(elements[i]); appConfigs.push(appConfig); From 14677038c2e5181295f244542911028a8c48827b Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 12:25:02 -0700 Subject: [PATCH 27/61] Fixing test whitespace --- tests/css/override.css | 12 +- tests/css/page.css | 12 +- tests/css/test.css | 1 + tests/index-amd.html | 165 +- tests/index.html | 168 +- tests/js/initialize.js | 24 +- tests/js/preloadedTest-amd.js | 55 +- tests/js/preloadedTest.js | 51 +- tests/js/test.js | 41 +- tests/server.js | 164 +- tests/spec/amd-spec.js | 30 +- tests/spec/app-handlers-spec.js | 1929 +++++++++--------- tests/spec/console-test.js | 19 +- tests/spec/container-spec.js | 3344 ++++++++++++++++--------------- tests/spec/misc-spec.js | 16 +- tests/spec/preamble-spec.js | 84 +- tests/spec/spec-helpers.js | 140 +- 17 files changed, 3112 insertions(+), 3143 deletions(-) diff --git a/tests/css/override.css b/tests/css/override.css index 98bfa4a5..71b02412 100644 --- a/tests/css/override.css +++ b/tests/css/override.css @@ -1,9 +1,7 @@ -#TrivialReporter -{ - display: none; +#TrivialReporter { + display: none; } -.f2-app-container -{ - display: none; -} \ No newline at end of file +.f2-app-container { + display: none; +} diff --git a/tests/css/page.css b/tests/css/page.css index 98bfa4a5..71b02412 100644 --- a/tests/css/page.css +++ b/tests/css/page.css @@ -1,9 +1,7 @@ -#TrivialReporter -{ - display: none; +#TrivialReporter { + display: none; } -.f2-app-container -{ - display: none; -} \ No newline at end of file +.f2-app-container { + display: none; +} diff --git a/tests/css/test.css b/tests/css/test.css index e69de29b..c0b88506 100644 --- a/tests/css/test.css +++ b/tests/css/test.css @@ -0,0 +1 @@ +/* This file exists simply to test loading styles */ diff --git a/tests/index-amd.html b/tests/index-amd.html index 2c375eee..367e6a1b 100644 --- a/tests/index-amd.html +++ b/tests/index-amd.html @@ -1,89 +1,90 @@ - F2 (AMD) - Jasmine Unit Tests - - - + F2 (AMD) - Jasmine Unit Tests + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/index.html b/tests/index.html index 9d32c087..fdce220d 100644 --- a/tests/index.html +++ b/tests/index.html @@ -1,91 +1,91 @@ + "http://www.w3.org/TR/html4/loose.dtd"> - F2 - Jasmine Unit Tests - - - - + F2 - Jasmine Unit Tests + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/js/initialize.js b/tests/js/initialize.js index 95fc18e6..2b0846aa 100644 --- a/tests/js/initialize.js +++ b/tests/js/initialize.js @@ -1,18 +1,16 @@ (function(window) { - // set a variable so that the index page knows the server is up and running - window.F2_NODE_TEST_SERVER = {}; + // Set a variable so that the index page knows the server is up and running + window.F2_NODE_TEST_SERVER = {}; - // pick apart the url to verify that we're running on the node server - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, - url = window.location.href.toLowerCase(), - parts = rurl.exec(url); - //console.log(parts); + // Verify that we're running on the node server + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var url = window.location.href.toLowerCase(); + var parts = rurl.exec(url); - // run the tests on the node server if it is running so that the port numbers - // will match - if (parts[1] != 'http:' || parts[2] != 'localhost' || parts[3] != '8080') { - window.location = 'http://localhost:8080/tests' + /\/[\w.+-]+\.html$/.exec(window.location.pathname)[0]; - } + // run the tests on the server if it's running so that the port numbers match + if (parts[1] != 'http:' || parts[2] != 'localhost' || parts[3] != '8080') { + window.location = 'http://localhost:8080/tests' + /\/[\w.+-]+\.html$/.exec(window.location.pathname)[0]; + } -})(window); \ No newline at end of file +})(window); diff --git a/tests/js/preloadedTest-amd.js b/tests/js/preloadedTest-amd.js index dca8f888..dba32d0f 100644 --- a/tests/js/preloadedTest-amd.js +++ b/tests/js/preloadedTest-amd.js @@ -1,29 +1,36 @@ -require(['../dist/f2.min.js'], function () { - F2.Apps[TEST_APP_ID] = (function() { +require(['../dist/f2.min.js'], function() { - var App_Class = function (appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = appConfig.ui; - this.$root = $(root); - this.doNotCallAgain = false; - }; + F2.Apps[TEST_APP_ID] = (function() { + var App_Class = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = appConfig.ui; + this.$root = $(root); + this.doNotCallAgain = false; + }; - App_Class.prototype.init = function () { - F2.PreloadAppInitializedCounter++; - var context = this; - F2.Events.on('PreloadAppCommuncation', function(){ if(!context.doNotCallAgain) { context._handleEmit(); } }); - F2.PreloadAppInitialized = true; - }; + App_Class.prototype.init = function() { + var context = this; + F2.PreloadAppInitializedCounter++; - App_Class.prototype._handleEmit = function (bArg) { - F2.PreloadRetrievedEmit = true; - F2.PreloadRetrievedEmitCounter++; - F2.PreloadTestCompleteCounter++; - F2.PreloadTestComplete = true; - this.doNotCallAgain = true; - }; + F2.Events.on('PreloadAppCommuncation', function() { + if (!context.doNotCallAgain) { + context._handleEmit(); + } + }); + + F2.PreloadAppInitialized = true; + }; + + App_Class.prototype._handleEmit = function() { + F2.PreloadRetrievedEmit = true; + F2.PreloadRetrievedEmitCounter++; + F2.PreloadTestCompleteCounter++; + F2.PreloadTestComplete = true; + this.doNotCallAgain = true; + }; + + return App_Class; + })(); - return App_Class; - })(); }); diff --git a/tests/js/preloadedTest.js b/tests/js/preloadedTest.js index 52eb0f94..5d3c9d2b 100644 --- a/tests/js/preloadedTest.js +++ b/tests/js/preloadedTest.js @@ -1,27 +1,34 @@ F2.Apps[TEST_APP_ID] = (function() { - var App_Class = function (appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = appConfig.ui; - this.$root = $(root); - this.doNotCallAgain = false; - }; + var App_Class = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = appConfig.ui; + this.$root = $(root); + this.doNotCallAgain = false; + }; - App_Class.prototype.init = function () { - F2.PreloadAppInitializedCounter++; - var context = this; - F2.Events.on("PreloadAppCommuncation", function(){ if(!context.doNotCallAgain) { context._handleEmit(); } }); - F2.PreloadAppInitialized = true; - }; + App_Class.prototype.init = function() { + var context = this; + F2.PreloadAppInitializedCounter++; - App_Class.prototype._handleEmit = function (bArg) { - F2.PreloadRetrievedEmit = true; - F2.PreloadRetrievedEmitCounter++; - F2.PreloadTestCompleteCounter++; - F2.PreloadTestComplete = true; - this.doNotCallAgain = true; - }; + F2.Events.on("PreloadAppCommuncation", function() { + if (!context.doNotCallAgain) { + context._handleEmit(); + } + }); - return App_Class; -})(); \ No newline at end of file + F2.PreloadAppInitialized = true; + }; + + App_Class.prototype._handleEmit = function() { + F2.PreloadRetrievedEmit = true; + F2.PreloadRetrievedEmitCounter++; + F2.PreloadTestCompleteCounter++; + F2.PreloadTestComplete = true; + this.doNotCallAgain = true; + }; + + return App_Class; + +})(); diff --git a/tests/js/test.js b/tests/js/test.js index e5a8ebe5..b9f8a49c 100644 --- a/tests/js/test.js +++ b/tests/js/test.js @@ -1,25 +1,26 @@ F2.Apps["com_openf2_tests_helloworld"] = (function() { - - F2.testAppInitialized = false; - var App_Class = function (appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = appConfig.ui; - }; + F2.testAppInitialized = false; - App_Class.prototype.init = function () { - F2.destroyAppMethodCalled = false; - F2.testAppInstanceID = this.appConfig.instanceId; - F2.testAppInitialized = true; - F2.testLocaleFromAppConfig = this.appConfig.containerLocale; - F2.testLocaleSupportFromAppConfig = this.appConfig.localeSupport; - F2.HightChartsIsDefined = window.Highcharts; - }; + var App_Class = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = appConfig.ui; + }; - App_Class.prototype.destroy = function () { - F2.destroyAppMethodCalled = true; - }; + App_Class.prototype.init = function() { + F2.destroyAppMethodCalled = false; + F2.testAppInstanceID = this.appConfig.instanceId; + F2.testAppInitialized = true; + F2.testLocaleFromAppConfig = this.appConfig.containerLocale; + F2.testLocaleSupportFromAppConfig = this.appConfig.localeSupport; + F2.HightChartsIsDefined = window.Highcharts; + }; - return App_Class; -})(); \ No newline at end of file + App_Class.prototype.destroy = function() { + F2.destroyAppMethodCalled = true; + }; + + return App_Class; + +})(); diff --git a/tests/server.js b/tests/server.js index f6e18d7b..834641ca 100644 --- a/tests/server.js +++ b/tests/server.js @@ -2,97 +2,99 @@ var express = require('express'); var app = express(); app.set('json spaces', 2); -//wrap up AppManifest response -var getResponse = function(req,id,manifest){ - var body = JSON.stringify(manifest); - if (req.method == 'POST'){ - return body; - } else { - return 'F2_jsonpCallback_' + id + '(' + body + ');'; - } -}; +// Wrap up AppManifest response +function getResponse(req, id, manifest) { + var body = JSON.stringify(manifest); + + if (req.method == 'POST') { + return body; + } else { + return 'F2_jsonpCallback_' + id + '(' + body + ');'; + } +} /** - * Checks whether a GET or a POST was used when making the request. This method - * will output an AppManifest with an AppClass that will log some data. - * See container-spec.js and search for httpPostTest - */ + Checks whether a GET or a POST was used when making the request. This method + will output an AppManifest with an AppClass that will log some data. + See container-spec.js and search for httpPostTest. +*/ app.use('/F2/apps/test/http-post', function(req, res) { - res.setHeader('Content-Type', 'text/javascript'); - res.send(getResponse(req,'com_test_app',{ - inlineScripts: [ - [ - 'F2.Apps["com_test_app"] = function(appConfig, appContent, root) {', - 'F2.log(appContent.data.method == "POST");', - '};' - ].join('') - ], - apps: [ - { - data: { - method: req.method - }, - html: '
' - } - ] - })); + res.setHeader('Content-Type', 'text/javascript'); + res.send(getResponse(req, 'com_test_app', { + inlineScripts: [ + [ + 'F2.Apps["com_test_app"] = function(appConfig, appContent, root) {', + 'F2.log(appContent.data.method == "POST");', + '};' + ].join('') + ], + apps: [{ + data: { + method: req.method + }, + html: '
' + }] + })); }); -app.all('/F2/apps/test/hello-world', function(req,res){ - var manifest = { - inlineScripts: [], - scripts: [], - styles: [], - apps: [{ - html: '
Hello world!
', - status: 'success' - }] - }; - res.setHeader('Content-Type', 'text/javascript'); - res.send(getResponse(req,'com_openf2_examples_javascript_helloworld',manifest)); +app.all('/F2/apps/test/hello-world', function(req, res) { + var manifest = { + inlineScripts: [], + scripts: [], + styles: [], + apps: [{ + html: '
Hello world!
', + status: 'success' + }] + }; + + res.setHeader('Content-Type', 'text/javascript'); + res.send(getResponse(req, 'com_openf2_examples_javascript_helloworld', manifest)); }); -app.all('/F2/apps/test/market-news', function(req,res){ - var manifest = { - inlineScripts: [], - scripts: [], - styles: [], - apps: [{ - html: '
Hello market news!
', - status: 'success' - }] - }; - res.setHeader('Content-Type', 'text/javascript'); - res.send(getResponse(req,'com_openf2_examples_csharp_marketnews',manifest)); +app.all('/F2/apps/test/market-news', function(req, res) { + var manifest = { + inlineScripts: [], + scripts: [], + styles: [], + apps: [{ + html: '
Hello market news!
', + status: 'success' + }] + }; + + res.setHeader('Content-Type', 'text/javascript'); + res.send(getResponse(req, 'com_openf2_examples_csharp_marketnews', manifest)); }); -app.all('/F2/apps/test/com_openf2_tests_helloworld', function(req,res){ - var manifest = { - inlineScripts: [], - scripts: [], - styles: [], - apps: [{ - html: '
Hello world test!
', - status: 'success' - }] - }; - res.setHeader('Content-Type', 'text/javascript'); - res.send(getResponse(req,'com_openf2_tests_helloworld',manifest)); +app.all('/F2/apps/test/com_openf2_tests_helloworld', function(req, res) { + var manifest = { + inlineScripts: [], + scripts: [], + styles: [], + apps: [{ + html: '
Hello world test!
', + status: 'success' + }] + }; + + res.setHeader('Content-Type', 'text/javascript'); + res.send(getResponse(req, 'com_openf2_tests_helloworld', manifest)); }); -app.all('/F2/apps/test/hello-world-node', function(req,res){ - var manifest = { - inlineScripts: [], - scripts: ['http://www.openf2.org/apps/com_openf2_examples_nodejs_helloworld/appclass.js'], - styles: ['http://www.openf2.org/apps/com_openf2_examples_nodejs_helloworld/app.css'], - apps: [{ - html: "

Hello, World!

This demonstrates a simple \"Hello World\" F2 App.

Container Developers

If you're a Container Provider and want to learn how to integrate F2 into your website, browse to the Container docs.

App Developers

If you're an App Provider and want to learn how to build F2 apps, browse to the App docs.


Get your hands on an example F2 Container and Apps!

", - status: 'success' - }] - }; - res.setHeader('Content-Type', 'text/javascript'); - res.send(getResponse(req,'com_openf2_examples_nodejs_helloworld',manifest)); +app.all('/F2/apps/test/hello-world-node', function(req, res) { + var manifest = { + inlineScripts: [], + scripts: ['http://www.openf2.org/apps/com_openf2_examples_nodejs_helloworld/appclass.js'], + styles: ['http://www.openf2.org/apps/com_openf2_examples_nodejs_helloworld/app.css'], + apps: [{ + html: "

Hello, World!

This demonstrates a simple \"Hello World\" F2 App.

Container Developers

If you're a Container Provider and want to learn how to integrate F2 into your website, browse to the Container docs.

App Developers

If you're an App Provider and want to learn how to build F2 apps, browse to the App docs.


Get your hands on an example F2 Container and Apps!

", + status: 'success' + }] + }; + + res.setHeader('Content-Type', 'text/javascript'); + res.send(getResponse(req, 'com_openf2_examples_nodejs_helloworld', manifest)); }); -// export the module for use with grunt -module.exports = app; \ No newline at end of file +module.exports = app; diff --git a/tests/spec/amd-spec.js b/tests/spec/amd-spec.js index db6d56a8..3b2f7650 100644 --- a/tests/spec/amd-spec.js +++ b/tests/spec/amd-spec.js @@ -1,23 +1,23 @@ describe('AMD', function() { - it('should define F2', function() { + it('should define F2', function() { + var isLoaded = false; - var isLoaded = false; + require(["../dist/f2.min.js"], function(nonGlobalF2) { + isLoaded = typeof nonGlobalF2 !== "undefined"; + }); - require(["../dist/f2.min.js"], function (nonGlobalF2) { - isLoaded = typeof nonGlobalF2 !== "undefined"; - }); + waitsFor(function() { + return isLoaded; + }, 'F2-AMD never loaded', 1000); - waitsFor(function() { - //console.log('ping'); - return isLoaded; - }, 'F2-AMD never loaded', 10000); + runs(function() { + expect(isLoaded).toBe(true); + }); + }); - runs(function() { }); - }); + it('should still globally define F2', function() { + expect(F2).toBeDefined(); + }); - it('should still globally define F2', function() { - expect(F2).toBeDefined(); - }); - }); diff --git a/tests/spec/app-handlers-spec.js b/tests/spec/app-handlers-spec.js index d1260d87..30920c6f 100644 --- a/tests/spec/app-handlers-spec.js +++ b/tests/spec/app-handlers-spec.js @@ -1,992 +1,945 @@ describe('F2.AppHandlers', function() { - var containerToken; - - var async = new AsyncSpec(this); - async.beforeEachReloadF2(function() { - if (F2.AppHandlers.getToken) { - containerToken = F2.AppHandlers.getToken(); - } - - // Set a low timeout for testing - F2.ContainerConfig.scriptErrorTimeout = 100; - }); - - function appConfig() { - return { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }; - }; - - function appManifest() { - return { - apps: [{ - html: '
Testing
' - }], - inlineScripts: [], - scripts: [], - styles: [] - } - }; - - it('should not be required to load apps', function() { - expect(function() { - F2.init(); - F2.registerApps(appConfig(), appManifest()); - }).not.toThrow(); - }); - - it('should use AppHandlers if container config handlers are defined', function() { - var afterFired = false; - var beforeFired = false; - var renderFired = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - throw new Error("I should not fire!"); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - function(appConfig) { - throw new Error("I should not fire!"); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - throw new Error("I should not fire!"); - } - ); - - F2.init({ - afterAppRender: function() { - afterFired = true; - }, - appRender: function() { - renderFired = true; - }, - beforeAppRender: function() { - beforeFired = true; - } - }); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return afterFired; - }, 1000); - - runs(function() { - expect(afterFired).toBe(true); - expect(beforeFired).toBe(true); - expect(renderFired).toBe(true); - }); - }); - - it('should fire if container config handlers are not defined', function() { - var afterFired = false; - var beforeFired = false; - var renderFired = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - beforeFired = true; - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - function(appConfig) { - appConfig.root = document.body; - renderFired = true; - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - afterFired = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return afterFired; - }, 1000); - - runs(function() { - expect(afterFired).toBe(true); - expect(beforeFired).toBe(true); - expect(renderFired).toBe(true); - }); - }); - - it('should fire in order', function() { - var afterFired = false; - var order = []; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - function(appConfig) { - appConfig.root = document.body; - order.push(F2.Constants.AppHandlers.APP_CREATE_ROOT); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - order.push(F2.Constants.AppHandlers.APP_RENDER_BEFORE); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - function(appConfig) { - order.push(F2.Constants.AppHandlers.APP_RENDER); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - order.push(F2.Constants.AppHandlers.APP_RENDER_AFTER); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - function(appConfig) { - order.push(F2.Constants.AppHandlers.APP_DESTROY_BEFORE); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY, - function(appConfig) { - order.push(F2.Constants.AppHandlers.APP_DESTROY); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - function(appConfig) { - order.push(F2.Constants.AppHandlers.APP_DESTROY_AFTER); - afterFired = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - setTimeout(function() { - F2.removeAllApps(); - }, 0); - - waitsFor(function() { - return afterFired; - }, 1000); - - runs(function() { - expect(order).toEqual([ - F2.Constants.AppHandlers.APP_CREATE_ROOT, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - F2.Constants.AppHandlers.APP_RENDER, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - F2.Constants.AppHandlers.APP_DESTROY, - F2.Constants.AppHandlers.APP_DESTROY_AFTER - ]); - }); - }); - - it('should allow multiple callbacks per handler and fire them in FIFO order', function() { - var done = false; - var order = []; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - order.push(1); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - order.push(2); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(order).toEqual([1, 2]); - }); - }); - - it('should automatically render app root using the apps html', function() { - var done = false; - var rootOnPage = false; - var appHtmlInRoot = false; - var hasTestAppClass = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - var $root = $(appConfig.root); - rootOnPage = $root.parents('body:first').length > 0; - hasTestAppClass = $root.hasClass('test-app'); - appHtmlInRoot = $root.text() === 'Testing'; - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(hasTestAppClass).toBe(true); - expect(rootOnPage).toBe(true); - expect(appHtmlInRoot).toBe(true); - }); - }); - - it('should only append app html if root exists', function() { - var done = false; - var nodeIsCorrect = false; - var htmlWasAppended = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - appConfig.root = $('').get(0); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - var $root = $(appConfig.root); - nodeIsCorrect = $root.is('app'); - htmlWasAppended = $root.text() === 'Testing'; - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(nodeIsCorrect).toBe(true); - expect(htmlWasAppended).toBe(true); - }); - }); - - describe('on', function() { - - it('should throw without valid token', function() { - expect(function() { - F2.AppHandlers.on( - '', - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) {} - ); - }).toThrow(); - }); - - it('should throw without a recognized handler name', function() { - expect(function() { - F2.AppHandlers.on( - containerToken, - 'asdf', - function(appConfig) {} - ); - }).toThrow(); - }); - - it('should allow a handler name to have a trailing namespace', function() { - expect(function() { - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE + '.testing', - function(appConfig) {} - ); - }).not.toThrow(); - }); - - }); - - describe('off', function() { - - it('should throw without valid token', function() { - expect(function() { - F2.AppHandlers.off( - '', - F2.Constants.AppHandlers.APP_RENDER_BEFORE - ); - }).toThrow(); - }); - - it('should throw without a recognized handler name', function() { - expect(function() { - F2.AppHandlers.off( - containerToken, - 'asdf', - function(appConfig) {} - ); - }).toThrow(); - }); - - it('should remove all type handlers if no namespace is specified', function() { - var root; - var handler1Called = false; - var handler2Called = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - function() { - handler1Called = true; - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE + ".specialNamespace", - function() { - handler2Called = true; - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - root = appConfig.root; - F2.AppHandlers.off(containerToken, F2.Constants.AppHandlers.APP_DESTROY_BEFORE); - F2.removeApp(appConfig.instanceId); - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor( function() { - return $(root).parents('body:first').length === 0; - }, 1000); - - runs(function() { - expect(handler1Called).toBe(false); - expect(handler2Called).toBe(false); - }); - }); - - it('should remove only type handlers of a given namespace if specified', function() { - var root; - var handler1Called = false; - var handler2Called = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - function() { - handler1Called = true; - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE + '.specialNamespace', - function() { - handler2Called = true; - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - root = appConfig.root; - F2.AppHandlers.off(containerToken, F2.Constants.AppHandlers.APP_DESTROY_BEFORE + '.specialNamespace'); - F2.removeApp(appConfig.instanceId); - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - // Wait for app to be removed - return $(root).parents('body:first').length === 0; - }, 1000); - - runs(function() { - expect(handler1Called).toBe(true); - expect(handler2Called).toBe(false); - }); - }); - - }); - - describe('getToken', function() { - - it('should be destroyed after first call', function() { - // F2.AppHandlers.getToken is called above in the async.beforeEachReloadF2 - expect(F2.AppHandlers.getToken).toBeFalsy(); - }); - - }); - - describe('__f2GetToken', function() { - - it('should be destroyed after first call', function() { - // F2.AppHandlers.__f2GetToken is called internally and should no longer exist - expect(F2.AppHandlers.__f2GetToken).toBeFalsy(); - }); - - }); - - describe('__trigger', function() { - - it('should not accept container token', function() { - expect(function() { - F2.AppHandlers.__trigger(containerToken, F2.Constants.AppHandlers.APP_RENDER_BEFORE); - }).toThrow(); - }); - - }); - - describe('APP_CREATE_ROOT', function() { - - it('should pass appConfig to callback', function() { - var done = false; - var passedConfig = false; - var config = appConfig(); - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - function(appConfig) { - passedConfig = appConfig; - done = true; - } - ); - - F2.init(); - F2.registerApps(config, appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(passedConfig.appId).toEqual(config.appId); - expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); - }); - }); - - it('should allow appConfig root to be redefined between callbacks', function() { - var done = false; - var rootIsCorrect = false; - var htmlWasAppended = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - function(appConfig) { - appConfig.root = $('
').get(0); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - function(appConfig) { - appConfig.root = $('').get(0); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - var $root = $(appConfig.root); - rootIsCorrect = $root.is('app'); - htmlWasAppended = $root.text() === 'Testing'; - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor( function() { - return done; - }, 1000); - - runs(function() { - expect(rootIsCorrect).toBe(true); - expect(htmlWasAppended).toBe(true); - }); - }); - - }); - - describe('APP_RENDER_BEFORE', function() { - - it('should pass appConfig to callback', function() { - var done = false; - var passedConfig = false; - var config = appConfig(); - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - passedConfig = appConfig; - done = true; - } - ); - - F2.init(); - F2.registerApps(config, appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(passedConfig.appId).toEqual(config.appId); - expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); - }); - }); - - }); - - describe('APP_RENDER', function() { - - var $testContainer = $('
'); - - beforeEach(function() { - $(document.body).append($testContainer); - }); - - afterEach(function() { - $testContainer.remove(); - }); - - it('should pass appConfig and app html to callback', function() { - var done = false; - var passedConfig; - var passedHtml; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - function(appConfig, appHtml) { - appConfig.root = document.body; - - passedConfig = appConfig; - passedHtml = appHtml; - done = true; - } - ); - - var config = appConfig(); - var manifest = appManifest(); - F2.init(); - F2.registerApps(config, manifest); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(passedConfig.appId).toEqual(config.appId); - expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); - expect(passedHtml.indexOf('Testing') !== -1).toBe(true); - }); - }); - - it('should not automatically append root to DOM if added manually in callback', function() { - var done = false; - var rootParentId = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - function(appConfig) { - appConfig.root = $('').get(0); - $testContainer.append(appConfig.root); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - rootParentId = $(appConfig.root).parent().attr('id'); - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(rootParentId).toEqual($testContainer.attr('id')); - }); - }); - - it('should allow root container to be specified instead of callback', function() { - var done = false; - var rootParentId; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - function(appConfig) { - appConfig.root = $('').get(0); - } - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - $testContainer.get(0) - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - rootParentId = $(appConfig.root).parent().attr('id'); - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(rootParentId).toEqual($testContainer.attr('id')); - }); - }); - - it('throws if callback is specified, but appConfig.root is not set', function() { - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER, - function() {} - ); - - expect(function() { - F2.init(); - F2.registerApps(appConfig(), appManifest()); - }).toThrow(); - }); - - }); - - describe('APP_RENDER_AFTER', function() { - - it('should pass appConfig and app html to callback', function() { - var done = false; - var passedConfig; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - appConfig.root = document.body; - passedConfig = appConfig; - done = true; - } - ); - - var config = appConfig(); - F2.init(); - F2.registerApps(config, appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(passedConfig.appId).toEqual(config.appId); - expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); - }); - }); - - it('should fire after app is in DOM', function() { - var done = false; - var rootOnPage = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - rootOnPage = $(appConfig.root).parents('body:first').length > 0; - done = true; - } - ); - - F2.init(); - F2.registerApps(appConfig(), appManifest()); - - waitsFor(function() { - return done; - }, 1000); - - runs(function() { - expect(rootOnPage).toBe(true); - }); - }); - - }); - - describe('APP_DESTROY_BEFORE', function() { - - it('should run before app\'s "destroy" method is called', function() { - var appDestroyCalled = false; - var destroyHandlerCalled = false; - - F2.Apps['test-app'] = (function() { - var AppClass = function() {}; - - AppClass.prototype = { - destroy: function() { - appDestroyCalled = true; - } - }; - - return AppClass; - })(); - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - function() { - destroyHandlerCalled = true; - expect(appDestroyCalled).toBe(false); - } - ); - - F2.init(); - F2.registerApps({ - appId: 'test-app', - root: $('').appendTo(document.body).get(0) - }); - - // TODO: remove need for setTimeout - setTimeout(function() { - F2.removeAllApps(); - }, 0); - - waitsFor(function() { - return destroyHandlerCalled; - }, 1000); - }); - - }); - - describe('APP_DESTROY', function() { - - it('should prevent app\'s "destroy" method from being called automatically', function() { - var appDestroyCalled = false; - var destroyHandlerCalled = false; - - F2.Apps['test-app'] = (function() { - var AppClass = function() {}; - - AppClass.prototype = { - destroy: function() { - appDestroyCalled = true; - } - }; - - return AppClass; - })(); - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY, - function() {} - ); - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - function() { - destroyHandlerCalled = true; - } - ); - - F2.init(); - F2.registerApps({ - appId: 'test-app', - root: $('').appendTo(document.body).get(0) - }); - - // I don't know why this needs to be in a setTimeout - // TODO: remove need for setTimeout - setTimeout(function() { - F2.removeAllApps(); - }, 0); - - waitsFor(function() { - return destroyHandlerCalled; - }, 3000); - - runs(function() { - expect(appDestroyCalled).toBe(false); - }); - }); - - }); - - describe('APP_DESTROY_AFTER', function() { - - it('should run after app\'s "destroy" method is called', function() { - var appDestroyCalled = false; - var destroyHandlerCalled = false; - - F2.Apps['test-app'] = (function() { - var AppClass = function() {}; - - AppClass.prototype = { - destroy: function() { - appDestroyCalled = true; - } - }; - - return AppClass; - })(); - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - function() { - destroyHandlerCalled = true; - expect(appDestroyCalled).toBe(true); - } - ); - - F2.init(); - F2.registerApps({ - appId: 'test-app', - root: $('').appendTo(document.body).get(0) - }); - - // TODO: remove need for setTimeout - setTimeout(function() { - F2.removeAllApps(); - }, 0); - - waitsFor(function() { - return destroyHandlerCalled; - }, 1000); - }); - - }); - - describe('APP_SCRIPT_LOAD_FAILED',function() { - - function appManifest() { - return { - scripts: [], - styles: [], - inlineScripts: [], - apps: [{ - html: '
Testing
' - }] - }; - }; - - it('should fire with invalid script path', function() { - var errorHandlerFired = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - function(appConfig, scriptInfo) { - errorHandlerFired = true; - } - ); - - var manifest = appManifest(); - manifest.scripts.push('http://localhost:8080/doesNotExist.js'); - - F2.init(); - F2.registerApps(appConfig(), manifest); - - waitsFor(function() { - return errorHandlerFired; - }, 1000); - - runs(function() { - expect(errorHandlerFired).toBe(true); - }); - }); - - it('should fire with invalid inline scripts', function() { - var errorHandlerFired = false; - - F2.AppHandlers.on( - containerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - function(appConfig, scriptInfo) { - errorHandlerFired = true; - } - ); - - var manifest = appManifest(); - manifest.inlineScripts.push('asdf()'); - - F2.init(); - F2.registerApps(appConfig(), manifest); - - waitsFor(function() { - return errorHandlerFired; - }, 1000); - - runs(function() { - expect(errorHandlerFired).toBe(true); - }); - }); - - }); + var containerToken; + var async = new AsyncSpec(this); + + async.beforeEachReloadF2(function() { + if (F2.AppHandlers.getToken) { + containerToken = F2.AppHandlers.getToken(); + } + + // Set a low timeout for testing + F2.ContainerConfig.scriptErrorTimeout = 100; + }); + + function appConfig() { + return { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }; + } + + function appManifest() { + return { + apps: [{ + html: '
Testing
' + }], + inlineScripts: [], + scripts: [], + styles: [] + } + } + + it('should not be required to load apps', function() { + expect(function() { + F2.init(); + F2.registerApps(appConfig(), appManifest()); + }).not.toThrow(); + }); + + it('should use AppHandlers if container config handlers are defined', function() { + var afterFired = false; + var beforeFired = false; + var renderFired = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + throw new Error("I should not fire!"); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, function(appConfig) { + throw new Error("I should not fire!"); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + throw new Error("I should not fire!"); + } + ); + + F2.init({ + afterAppRender: function() { + afterFired = true; + }, + appRender: function() { + renderFired = true; + }, + beforeAppRender: function() { + beforeFired = true; + } + }); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return afterFired; + }, 1000); + + runs(function() { + expect(afterFired).toBe(true); + expect(beforeFired).toBe(true); + expect(renderFired).toBe(true); + }); + }); + + it('should fire if container config handlers are not defined', function() { + var afterFired = false; + var beforeFired = false; + var renderFired = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + beforeFired = true; + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, function(appConfig) { + appConfig.root = document.body; + renderFired = true; + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + afterFired = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return afterFired; + }, 1000); + + runs(function() { + expect(afterFired).toBe(true); + expect(beforeFired).toBe(true); + expect(renderFired).toBe(true); + }); + }); + + it('should fire in order', function() { + var afterFired = false; + var order = []; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, function(appConfig) { + appConfig.root = document.body; + order.push(F2.Constants.AppHandlers.APP_CREATE_ROOT); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + order.push(F2.Constants.AppHandlers.APP_RENDER_BEFORE); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, function(appConfig) { + order.push(F2.Constants.AppHandlers.APP_RENDER); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + order.push(F2.Constants.AppHandlers.APP_RENDER_AFTER); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, function(appConfig) { + order.push(F2.Constants.AppHandlers.APP_DESTROY_BEFORE); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY, function(appConfig) { + order.push(F2.Constants.AppHandlers.APP_DESTROY); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, function(appConfig) { + order.push(F2.Constants.AppHandlers.APP_DESTROY_AFTER); + afterFired = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + setTimeout(function() { + F2.removeAllApps(); + }, 0); + + waitsFor(function() { + return afterFired; + }, 1000); + + runs(function() { + expect(order).toEqual([ + F2.Constants.AppHandlers.APP_CREATE_ROOT, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + F2.Constants.AppHandlers.APP_RENDER, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + F2.Constants.AppHandlers.APP_DESTROY, + F2.Constants.AppHandlers.APP_DESTROY_AFTER + ]); + }); + }); + + it('should allow multiple callbacks per handler and fire them in FIFO order', function() { + var done = false; + var order = []; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + order.push(1); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + order.push(2); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(order).toEqual([1, 2]); + }); + }); + + it('should automatically render app root using the apps html', function() { + var done = false; + var rootOnPage = false; + var appHtmlInRoot = false; + var hasTestAppClass = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + var $root = $(appConfig.root); + rootOnPage = $root.parents('body:first').length > 0; + hasTestAppClass = $root.hasClass('test-app'); + appHtmlInRoot = $root.text() === 'Testing'; + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(hasTestAppClass).toBe(true); + expect(rootOnPage).toBe(true); + expect(appHtmlInRoot).toBe(true); + }); + }); + + it('should only append app html if root exists', function() { + var done = false; + var nodeIsCorrect = false; + var htmlWasAppended = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + appConfig.root = $('').get(0); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + var $root = $(appConfig.root); + nodeIsCorrect = $root.is('app'); + htmlWasAppended = $root.text() === 'Testing'; + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(nodeIsCorrect).toBe(true); + expect(htmlWasAppended).toBe(true); + }); + }); + + describe('on', function() { + + it('should throw without valid token', function() { + expect(function() { + F2.AppHandlers.on( + '', + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) {} + ); + }).toThrow(); + }); + + it('should throw without a recognized handler name', function() { + expect(function() { + F2.AppHandlers.on( + containerToken, + 'asdf', function(appConfig) {} + ); + }).toThrow(); + }); + + it('should allow a handler name to have a trailing namespace', function() { + expect(function() { + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE + '.testing', function(appConfig) {} + ); + }).not.toThrow(); + }); + + }); + + describe('off', function() { + + it('should throw without valid token', function() { + expect(function() { + F2.AppHandlers.off( + '', + F2.Constants.AppHandlers.APP_RENDER_BEFORE + ); + }).toThrow(); + }); + + it('should throw without a recognized handler name', function() { + expect(function() { + F2.AppHandlers.off( + containerToken, + 'asdf', function(appConfig) {} + ); + }).toThrow(); + }); + + it('should remove all type handlers if no namespace is specified', function() { + var root; + var handler1Called = false; + var handler2Called = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, function() { + handler1Called = true; + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE + ".specialNamespace", function() { + handler2Called = true; + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + root = appConfig.root; + F2.AppHandlers.off(containerToken, F2.Constants.AppHandlers.APP_DESTROY_BEFORE); + F2.removeApp(appConfig.instanceId); + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return $(root).parents('body:first').length === 0; + }, 1000); + + runs(function() { + expect(handler1Called).toBe(false); + expect(handler2Called).toBe(false); + }); + }); + + it('should remove only type handlers of a given namespace if specified', function() { + var root; + var handler1Called = false; + var handler2Called = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, function() { + handler1Called = true; + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE + '.specialNamespace', function() { + handler2Called = true; + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + root = appConfig.root; + F2.AppHandlers.off(containerToken, F2.Constants.AppHandlers.APP_DESTROY_BEFORE + '.specialNamespace'); + F2.removeApp(appConfig.instanceId); + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + // Wait for app to be removed + return $(root).parents('body:first').length === 0; + }, 1000); + + runs(function() { + expect(handler1Called).toBe(true); + expect(handler2Called).toBe(false); + }); + }); + + }); + + describe('getToken', function() { + + it('should be destroyed after first call', function() { + // F2.AppHandlers.getToken is called above in the async.beforeEachReloadF2 + expect(F2.AppHandlers.getToken).toBeFalsy(); + }); + + }); + + describe('__f2GetToken', function() { + + it('should be destroyed after first call', function() { + // F2.AppHandlers.__f2GetToken is called internally and should no longer exist + expect(F2.AppHandlers.__f2GetToken).toBeFalsy(); + }); + + }); + + describe('__trigger', function() { + + it('should not accept container token', function() { + expect(function() { + F2.AppHandlers.__trigger(containerToken, F2.Constants.AppHandlers.APP_RENDER_BEFORE); + }).toThrow(); + }); + + }); + + describe('APP_CREATE_ROOT', function() { + + it('should pass appConfig to callback', function() { + var done = false; + var passedConfig = false; + var config = appConfig(); + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, function(appConfig) { + passedConfig = appConfig; + done = true; + } + ); + + F2.init(); + F2.registerApps(config, appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(passedConfig.appId).toEqual(config.appId); + expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); + }); + }); + + it('should allow appConfig root to be redefined between callbacks', function() { + var done = false; + var rootIsCorrect = false; + var htmlWasAppended = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, function(appConfig) { + appConfig.root = $('
').get(0); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, function(appConfig) { + appConfig.root = $('').get(0); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + var $root = $(appConfig.root); + rootIsCorrect = $root.is('app'); + htmlWasAppended = $root.text() === 'Testing'; + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(rootIsCorrect).toBe(true); + expect(htmlWasAppended).toBe(true); + }); + }); + + }); + + describe('APP_RENDER_BEFORE', function() { + + it('should pass appConfig to callback', function() { + var done = false; + var passedConfig = false; + var config = appConfig(); + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, function(appConfig) { + passedConfig = appConfig; + done = true; + } + ); + + F2.init(); + F2.registerApps(config, appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(passedConfig.appId).toEqual(config.appId); + expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); + }); + }); + + }); + + describe('APP_RENDER', function() { + + var $testContainer = $('
'); + + beforeEach(function() { + $(document.body).append($testContainer); + }); + + afterEach(function() { + $testContainer.remove(); + }); + + it('should pass appConfig and app html to callback', function() { + var done = false; + var passedConfig; + var passedHtml; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, function(appConfig, appHtml) { + appConfig.root = document.body; + + passedConfig = appConfig; + passedHtml = appHtml; + done = true; + } + ); + + var config = appConfig(); + var manifest = appManifest(); + F2.init(); + F2.registerApps(config, manifest); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(passedConfig.appId).toEqual(config.appId); + expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); + expect(passedHtml.indexOf('Testing') !== -1).toBe(true); + }); + }); + + it('should not automatically append root to DOM if added manually in callback', function() { + var done = false; + var rootParentId = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, function(appConfig) { + appConfig.root = $('').get(0); + $testContainer.append(appConfig.root); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + rootParentId = $(appConfig.root).parent().attr('id'); + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(rootParentId).toEqual($testContainer.attr('id')); + }); + }); + + it('should allow root container to be specified instead of callback', function() { + var done = false; + var rootParentId; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_CREATE_ROOT, function(appConfig) { + appConfig.root = $('').get(0); + } + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, + $testContainer.get(0) + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + rootParentId = $(appConfig.root).parent().attr('id'); + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(rootParentId).toEqual($testContainer.attr('id')); + }); + }); + + it('throws if callback is specified, but appConfig.root is not set', function() { + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER, function() {} + ); + + expect(function() { + F2.init(); + F2.registerApps(appConfig(), appManifest()); + }).toThrow(); + }); + + }); + + describe('APP_RENDER_AFTER', function() { + + it('should pass appConfig and app html to callback', function() { + var done = false; + var passedConfig; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + appConfig.root = document.body; + passedConfig = appConfig; + done = true; + } + ); + + var config = appConfig(); + F2.init(); + F2.registerApps(config, appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(passedConfig.appId).toEqual(config.appId); + expect(passedConfig.manifestUrl).toEqual(config.manifestUrl); + }); + }); + + it('should fire after app is in DOM', function() { + var done = false; + var rootOnPage = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_RENDER_AFTER, function(appConfig) { + rootOnPage = $(appConfig.root).parents('body:first').length > 0; + done = true; + } + ); + + F2.init(); + F2.registerApps(appConfig(), appManifest()); + + waitsFor(function() { + return done; + }, 1000); + + runs(function() { + expect(rootOnPage).toBe(true); + }); + }); + + }); + + describe('APP_DESTROY_BEFORE', function() { + + it('should run before app\'s "destroy" method is called', function() { + var appDestroyCalled = false; + var destroyHandlerCalled = false; + + F2.Apps['test-app'] = (function() { + var AppClass = function() {}; + + AppClass.prototype = { + destroy: function() { + appDestroyCalled = true; + } + }; + + return AppClass; + })(); + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, function() { + destroyHandlerCalled = true; + expect(appDestroyCalled).toBe(false); + } + ); + + F2.init(); + F2.registerApps({ + appId: 'test-app', + root: $('').appendTo(document.body).get(0) + }); + + // TODO: remove need for setTimeout + setTimeout(function() { + F2.removeAllApps(); + }, 0); + + waitsFor(function() { + return destroyHandlerCalled; + }, 1000); + }); + + }); + + describe('APP_DESTROY', function() { + + it('should prevent app\'s "destroy" method from being called automatically', function() { + var appDestroyCalled = false; + var destroyHandlerCalled = false; + + F2.Apps['test-app'] = (function() { + var AppClass = function() {}; + + AppClass.prototype = { + destroy: function() { + appDestroyCalled = true; + } + }; + + return AppClass; + })(); + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY, function() {} + ); + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, function() { + destroyHandlerCalled = true; + } + ); + + F2.init(); + F2.registerApps({ + appId: 'test-app', + root: $('').appendTo(document.body).get(0) + }); + + // I don't know why this needs to be in a setTimeout + // TODO: remove need for setTimeout + setTimeout(function() { + F2.removeAllApps(); + }, 0); + + waitsFor(function() { + return destroyHandlerCalled; + }, 3000); + + runs(function() { + expect(appDestroyCalled).toBe(false); + }); + }); + + }); + + describe('APP_DESTROY_AFTER', function() { + + it('should run after app\'s "destroy" method is called', function() { + var appDestroyCalled = false; + var destroyHandlerCalled = false; + + F2.Apps['test-app'] = (function() { + var AppClass = function() {}; + + AppClass.prototype = { + destroy: function() { + appDestroyCalled = true; + } + }; + + return AppClass; + })(); + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, function() { + destroyHandlerCalled = true; + expect(appDestroyCalled).toBe(true); + } + ); + + F2.init(); + F2.registerApps({ + appId: 'test-app', + root: $('').appendTo(document.body).get(0) + }); + + // TODO: remove need for setTimeout + setTimeout(function() { + F2.removeAllApps(); + }, 0); + + waitsFor(function() { + return destroyHandlerCalled; + }, 1000); + }); + + }); + + describe('APP_SCRIPT_LOAD_FAILED', function() { + + function appManifest() { + return { + scripts: [], + styles: [], + inlineScripts: [], + apps: [{ + html: '
Testing
' + }] + }; + } + ; + + it('should fire with invalid script path', function() { + var errorHandlerFired = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, function(appConfig, scriptInfo) { + errorHandlerFired = true; + } + ); + + var manifest = appManifest(); + manifest.scripts.push('http://localhost:8080/doesNotExist.js'); + + F2.init(); + F2.registerApps(appConfig(), manifest); + + waitsFor(function() { + return errorHandlerFired; + }, 1000); + + runs(function() { + expect(errorHandlerFired).toBe(true); + }); + }); + + it('should fire with invalid inline scripts', function() { + var errorHandlerFired = false; + + F2.AppHandlers.on( + containerToken, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, function(appConfig, scriptInfo) { + errorHandlerFired = true; + } + ); + + var manifest = appManifest(); + manifest.inlineScripts.push('asdf()'); + + F2.init(); + F2.registerApps(appConfig(), manifest); + + waitsFor(function() { + return errorHandlerFired; + }, 1000); + + runs(function() { + expect(errorHandlerFired).toBe(true); + }); + }); + + }); }); diff --git a/tests/spec/console-test.js b/tests/spec/console-test.js index 10fa3699..2b59d7e8 100644 --- a/tests/spec/console-test.js +++ b/tests/spec/console-test.js @@ -1,14 +1,7 @@ -describe("Console", function() { - it ("should fail", function() { - expect(false).toBeFalsy(); +describe("Console", function() { + + it("jQuery exists", function() { + expect(jQuery).toBeTruthy(); }); - - it ("should succeed", function() { - expect(true).toBeTruthy(); - }); - - it ("jQuery exists", function() { - expect(!!jQuery).toBeTruthy(); - }); - -}); \ No newline at end of file + +}); diff --git a/tests/spec/container-spec.js b/tests/spec/container-spec.js index 8ae76363..cbad2bb6 100644 --- a/tests/spec/container-spec.js +++ b/tests/spec/container-spec.js @@ -1,1719 +1,1721 @@ describe('F2.registerApps - pre-load', function() { - it('should throw exception if F2.init() is not called prior', function() { - expect(function() { - - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL, - root: $("body").find("div." + TEST_APP_ID + ":first").get(0) - }; - - F2.registerApps([appConfig]); - }).toLog('F2.init() must be called before F2.registerApps()'); - }); - - it('should throw exception if no appConfigs are passed.', function() { - expect(function() { - F2.init(); - F2.registerApps(); - }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); - }); - - it('should allow you to pass single appConfig as object to F2.registerApps', function() { - expect(function() { - F2.init(); - var appConfig = { - appId: TEST_APP_ID, - root: $("body").find("div." + TEST_APP_ID + ":first").get(0) - }; - F2.registerApps(appConfig); - }).not.toThrow(); - }); - - it('should not require appConfig.manifestUrl when passing pre-load appConfig to F2.registerApps', function() { - expect(function() { - F2.init(); - var appConfig = { - appId: TEST_APP_ID, - root: $("body").find("div." + TEST_APP_ID + ":first").get(0) - }; - F2.registerApps(appConfig); - }).not.toLog('"manifestUrl" missing from app object'); - }); - - it('should throw exception if you pass an invalid appConfig to F2.registerApps', function() { - expect(function() { - F2.init(); - F2.registerApps({}); - }).toLog('"appId" missing from app object'); - }); - - it('should request apps without valid root property and auto init pre-load apps with root when passing mix to F2.registerApps', function() { - var bAfterFired = false - F2.PreloadTestComplete = false; - F2.PreloadAppInitialized = false; - F2.PreloadRetrievedEmit = false; - - var appConfigs = [{ - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }, { - appId: TEST_APP_ID, - root: $("body").find('div.' + TEST_APP_ID + ':first').get(0) - }]; - - F2.init(); - - F2.AppHandlers.on(F2.AppHandlers.getToken(), F2.Constants.AppHandlers.APP_RENDER_AFTER, function() { - bAfterFired = true; - }); - - F2.registerApps(appConfigs); - - waitsFor( - function() { - return bAfterFired; - }, - 'appRenderAfter was never fired', - 10000 - ); - - runs(function() { - F2.Events.emit("PreloadAppCommuncation", [true]); - expect(bAfterFired).toBeTruthy(); - expect(F2.PreloadTestComplete).toBe(true); - //expect(F2.PreloadRetrievedEmit).toBe(true); - }); - }); - - it('should allow you to init/register apps that are already on the page.', function() { - - F2.PreloadTestComplete = false; - F2.PreloadAppInitialized = false; - F2.PreloadRetrievedEmit = false; - - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL, - root: $("body").find("div." + TEST_APP_ID + ":first").get(0) - }; - - F2.init(); - - // init is called above - F2.registerApps([appConfig]); - - waitsFor( - function() { - return F2.PreloadAppInitialized; - }, - 'Emit retrieve was never fired', - 10000 - ); - - runs(function() { - // fires the emit to make sure the app is actually listening - F2.Events.emit("PreloadAppCommuncation", [true]); - expect(F2.PreloadTestComplete).toBe(true); - expect(F2.PreloadRetrievedEmit).toBe(true); - F2.removeApp(appConfig.removeApp); - }); - }); - - it('should allow you to init/register multiple of the same app that are already on the page.', function() { - - F2.PreloadTestComplete = false; - F2.PreloadAppInitialized = false; - F2.PreloadRetrievedEmit = false; - F2.PreloadTestCompleteCounter = 0; - F2.PreloadAppInitializedCounter = 0; - F2.PreloadRetrievedEmitCounter = 0; - - var $appsOnPage = $("body").find("div." + TEST_APP_ID); - var appConfigs = [{ - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL, - root: $appsOnPage.get(0) - }, { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL, - root: $appsOnPage.get(1) - }]; - - // init is called above - F2.registerApps(appConfigs); - - waitsFor( - function() { - return (F2.PreloadAppInitializedCounter == 2); - }, - 'Emit retrieve was never fired', - 10000 - ); - - runs(function() { - // fires the emit to make sure the app is actually listening - F2.Events.emit("PreloadAppCommuncation", [true]); - expect(F2.PreloadTestCompleteCounter).toBe(2); - expect(F2.PreloadRetrievedEmitCounter).toBe(2); - }); - }); + it('should throw exception if F2.init() is not called prior', function() { + expect(function() { + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL, + root: $("body").find("div." + TEST_APP_ID + ":first").get(0) + }; + + F2.registerApps([appConfig]); + }).toLog('F2.init() must be called before F2.registerApps()'); + }); + + it('should throw exception if no appConfigs are passed.', function() { + expect(function() { + F2.init(); + F2.registerApps(); + }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); + }); + + it('should allow you to pass single appConfig as object to F2.registerApps', function() { + expect(function() { + F2.init(); + + F2.registerApps({ + appId: TEST_APP_ID, + root: $("body").find("div." + TEST_APP_ID + ":first").get(0) + }); + }).not.toThrow(); + }); + + it('should not require appConfig.manifestUrl when passing pre-load appConfig to F2.registerApps', function() { + expect(function() { + F2.init(); + + F2.registerApps({ + appId: TEST_APP_ID, + root: $("body").find("div." + TEST_APP_ID + ":first").get(0) + }); + }).not.toLog('"manifestUrl" missing from app object'); + }); + + it('should throw exception if you pass an invalid appConfig to F2.registerApps', function() { + expect(function() { + F2.init(); + F2.registerApps({}); + }).toLog('"appId" missing from app object'); + }); + + it('should request apps without valid root property and auto init pre-load apps with root when passing mix to F2.registerApps', function() { + var bAfterFired = false + F2.PreloadTestComplete = false; + F2.PreloadAppInitialized = false; + F2.PreloadRetrievedEmit = false; + + var appConfigs = [{ + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }, { + appId: TEST_APP_ID, + root: $("body").find('div.' + TEST_APP_ID + ':first').get(0) + }]; + + F2.init(); + + F2.AppHandlers.on(F2.AppHandlers.getToken(), F2.Constants.AppHandlers.APP_RENDER_AFTER, function() { + bAfterFired = true; + }); + + F2.registerApps(appConfigs); + + waitsFor(function() { + return bAfterFired; + }, 'appRenderAfter was never fired', 10000); + + runs(function() { + F2.Events.emit("PreloadAppCommuncation", [true]); + expect(bAfterFired).toBeTruthy(); + expect(F2.PreloadTestComplete).toBe(true); + }); + }); + + it('should allow you to init/register apps that are already on the page.', function() { + F2.PreloadTestComplete = false; + F2.PreloadAppInitialized = false; + F2.PreloadRetrievedEmit = false; + + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL, + root: $("body").find("div." + TEST_APP_ID + ":first").get(0) + }; + + F2.init(); + F2.registerApps([appConfig]); + + waitsFor(function() { + return F2.PreloadAppInitialized; + }, 'Emit retrieve was never fired', 10000); + + runs(function() { + // fires the emit to make sure the app is actually listening + F2.Events.emit("PreloadAppCommuncation", [true]); + expect(F2.PreloadTestComplete).toBe(true); + expect(F2.PreloadRetrievedEmit).toBe(true); + F2.removeApp(appConfig.removeApp); + }); + }); + + it('should allow you to init/register multiple of the same app that are already on the page.', function() { + F2.PreloadTestComplete = false; + F2.PreloadAppInitialized = false; + F2.PreloadRetrievedEmit = false; + F2.PreloadTestCompleteCounter = 0; + F2.PreloadAppInitializedCounter = 0; + F2.PreloadRetrievedEmitCounter = 0; + + var $appsOnPage = $("body").find("div." + TEST_APP_ID); + var appConfigs = [{ + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL, + root: $appsOnPage.get(0) + }, { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL, + root: $appsOnPage.get(1) + }]; + + F2.registerApps(appConfigs); + + waitsFor(function() { + return (F2.PreloadAppInitializedCounter == 2); + }, + 'Emit retrieve was never fired', + 10000 + ); + + runs(function() { + // fires the emit to make sure the app is actually listening + F2.Events.emit("PreloadAppCommuncation", [true]); + expect(F2.PreloadTestCompleteCounter).toBe(2); + expect(F2.PreloadRetrievedEmitCounter).toBe(2); + }); + }); }); describe('F2.init', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); - it('should allow for no parameters', function() { - F2.init(); - }); + it('should allow for no parameters', function() { + F2.init(); + }); - it('should allow for an empty object parameter', function() { - F2.init({}); - }); + it('should allow for an empty object parameter', function() { + F2.init({}); + }); }); describe('F2.init - loader overrides', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }; - - var appManifest = { - scripts: [], - styles: [], - inlineScripts: [], - apps: [{ - html: '
Testing
' - }] - }; - - it('should allow the container to provide a custom "loadScripts", "loadInlineScripts", "loadStyles" function', function() { - var didCallScripts = false; - var didCallInlineScripts = false; - var didCallStyles = false; - var didRender = false; - - F2.init({ - loadScripts: function(scripts, cb) { - didCallScripts = true; - cb(); - }, - loadInlineScripts: function(inlines, cb) { - didCallInlineScripts = true; - cb(); - }, - loadStyles: function(styles, cb) { - didCallStyles = true; - cb(); - }, - beforeAppRender: function() { - didRender = true; - } - }); - - F2.registerApps([appConfig], [appManifest]); - - waitsFor(function() { - return didRender; - }, 3000); - - runs(function() { - expect(didCallScripts && didCallInlineScripts && didCallStyles).toBe(true); - }); - }); - - it('should not load scripts, inlines, or styles if the user provides overrides', function() { - var didRender = false; - var didLoadScripts = false; - var didLoadInlineScripts = false; - var didLoadStyles = false; - - F2.init({ - loadScripts: function(scripts, cb) { - cb(); - }, - loadInlineScripts: function(inlines, cb) { - cb(); - }, - loadStyles: function(styles, cb) { - cb(); - }, - beforeAppRender: function() { - didRender = true; - } - }); - - F2.registerApps([appConfig], [{ - 'inlineScripts': ['window.inlinesLoaded = true;'], - 'scripts': ['js/test_global.js'], - 'styles': ['css/test.css'], - 'apps': [{ - 'html': '
' - }] - }]); - - waitsFor(function() { - return didRender; - }, 3000); - - // See if the script exists - if (window.test_global) { - didLoadScripts = true; - } - - // See if the inlines exist - if (window.inlinesLoaded) { - didLoadInlineScripts = true; - } - - // See if the styles exist - $("head link[rel=stylesheet]").each(function(i, link) { - if (link.href.indexOf("test.css") != -1) { - didLoadStyles = true; - return false; - } - }); - - runs(function() { - expect(didLoadScripts && didLoadInlineScripts && didLoadStyles).toBe(false); - }); - }); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }; + + var appManifest = { + scripts: [], + styles: [], + inlineScripts: [], + apps: [{ + html: '
Testing
' + }] + }; + + it('should allow the container to provide a custom "loadScripts", "loadInlineScripts", "loadStyles" function', function() { + var didCallScripts = false; + var didCallInlineScripts = false; + var didCallStyles = false; + var didRender = false; + + F2.init({ + loadScripts: function(scripts, cb) { + didCallScripts = true; + cb(); + }, + loadInlineScripts: function(inlines, cb) { + didCallInlineScripts = true; + cb(); + }, + loadStyles: function(styles, cb) { + didCallStyles = true; + cb(); + }, + beforeAppRender: function() { + didRender = true; + } + }); + + F2.registerApps([appConfig], [appManifest]); + + waitsFor(function() { + return didRender; + }, 3000); + + runs(function() { + expect(didCallScripts && didCallInlineScripts && didCallStyles).toBe(true); + }); + }); + + it('should not load scripts, inlines, or styles if the user provides overrides', function() { + var didRender = false; + var didLoadScripts = false; + var didLoadInlineScripts = false; + var didLoadStyles = false; + + F2.init({ + loadScripts: function(scripts, cb) { + cb(); + }, + loadInlineScripts: function(inlines, cb) { + cb(); + }, + loadStyles: function(styles, cb) { + cb(); + }, + beforeAppRender: function() { + didRender = true; + } + }); + + F2.registerApps([appConfig], [{ + 'inlineScripts': ['window.inlinesLoaded = true;'], + 'scripts': ['js/test_global.js'], + 'styles': ['css/test.css'], + 'apps': [{ + 'html': '
' + }] + }]); + + waitsFor(function() { + return didRender; + }, 3000); + + // See if the script exists + if (window.test_global) { + didLoadScripts = true; + } + + // See if the inlines exist + if (window.inlinesLoaded) { + didLoadInlineScripts = true; + } + + // See if the styles exist + $("head link[rel=stylesheet]").each(function(i, link) { + if (link.href.indexOf("test.css") != -1) { + didLoadStyles = true; + return false; + } + }); + + runs(function() { + expect(didLoadScripts && didLoadInlineScripts && didLoadStyles).toBe(false); + }); + }); }); describe('F2.init - xhr overrides', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(function() { - // nothing to do after reload - }); - - it('should throw an exception when ContainerConfig.xhr is not an object or function', function() { - expect(function() { - F2.init({ - xhr: true - }); - }).toThrow('ContainerConfig.xhr should be a function or an object'); - }); - - it('should throw an exception when xhr.dataType is not a function', function() { - expect(function() { - F2.init({ - xhr: { - dataType: true - } - }); - }).toThrow(new Error('ContainerConfig.xhr.dataType should be a function')); - }); - - it('should throw an exception when xhr.type is not a function', function() { - expect(function() { - F2.init({ - xhr: { - type: true - } - }); - F2.registerApps(appConfig); - }).toThrow(new Error('ContainerConfig.xhr.type should be a function')); - }); - - it('should throw an exception when xhr.url is not a function', function() { - expect(function() { - F2.init({ - xhr: { - url: true - } - }); - F2.registerApps(appConfig); - }).toThrow(new Error('ContainerConfig.xhr.url should be a function')); - }); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(function() { + // nothing to do after reload + }); + + it('should throw an exception when ContainerConfig.xhr is not an object or function', function() { + expect(function() { + F2.init({ + xhr: true + }); + }).toThrow('ContainerConfig.xhr should be a function or an object'); + }); + + it('should throw an exception when xhr.dataType is not a function', function() { + expect(function() { + F2.init({ + xhr: { + dataType: true + } + }); + }).toThrow(new Error('ContainerConfig.xhr.dataType should be a function')); + }); + + it('should throw an exception when xhr.type is not a function', function() { + expect(function() { + F2.init({ + xhr: { + type: true + } + }); + F2.registerApps(appConfig); + }).toThrow(new Error('ContainerConfig.xhr.type should be a function')); + }); + + it('should throw an exception when xhr.url is not a function', function() { + expect(function() { + F2.init({ + xhr: { + url: true + } + }); + F2.registerApps(appConfig); + }).toThrow(new Error('ContainerConfig.xhr.url should be a function')); + }); }); describe('F2.isInit', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); - it('should return false when F2.init has not been called', function() { - expect(F2.isInit()).toBeFalsy(); - }); + it('should return false when F2.init has not been called', function() { + expect(F2.isInit()).toBeFalsy(); + }); - it('should return true when F2.init has been called', function() { - F2.init(); - expect(F2.isInit()).toBeTruthy(); - }); + it('should return true when F2.init has been called', function() { + F2.init(); + expect(F2.isInit()).toBeTruthy(); + }); }); describe('F2.init - internationalization', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL, - localeSupport: ['en-us','de-de'] - }; - - var appManifest = { - scripts: [], - styles: [], - inlineScripts: [], - apps: [{ - html: '
Testing
' - }] - }; - - it('should not fail F2.init when locale is undefined', function() { - F2.init(); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(F2.isInit()).toBeTruthy(); - }); - }); - - it('F2.getContainerLocale() should return null when locale is undefined', function() { - F2.init(); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(F2.getContainerLocale()).toBe(null); - }); - }); - - it('F2.getContainerLocale() should return current locale', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(F2.getContainerLocale()).toBe('en-us'); - }); - }); - - it('F2.getContainerLocale() should be a string', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(typeof F2.getContainerLocale() == 'string').toBeTruthy(); - }); - }); - - it('F2.getContainerLocale() should be a valid IETF tag', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - //see http://www.w3.org/TR/xmlschema11-2/#language - expect( /[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*/.test( F2.getContainerLocale() ) ).toBeTruthy(); - }); - }); - - it('should not modify original appConfig', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(appConfig.containerLocale).toBeFalsy(); - expect(appConfig.locale).toBeFalsy(); - }); - }); - - it('app should receive locale as "containerLocale" in appConfig', function() { - F2.testLocaleFromAppConfig = false; - F2.init({ - locale: 'en-us' - }); - F2.registerApps([{appId:'com_openf2_tests_helloworld', manifestUrl:'/F2/apps/test/com_openf2_tests_helloworld'}], [{"inlineScripts": [], "scripts":["js/test.js"],"apps":[{ html: '
Testing
' }]}]); - - waitsFor( - function(){ - return F2.testLocaleFromAppConfig; - }, - 'containerLocale not defined in AppClass', - 3000 - ); - - runs(function() { - expect(F2.testLocaleFromAppConfig == F2.getContainerLocale()).toBeTruthy(); - }); - }); - - it('app should not receive locale as "containerLocale" in appConfig when locale is not defined', function() { - F2.init(); - F2.registerApps([{appId:'com_openf2_tests_helloworld', manifestUrl:'/F2/apps/test/com_openf2_tests_helloworld'}], [{"inlineScripts": [], "scripts":["js/test.js"],"apps":[{ html: '
Testing
' }]}]); - - waitsFor( - function(){ - return !F2.testLocaleFromAppConfig; - }, - 'containerLocale is defined in AppClass', - 3000 - ); - - runs(function() { - expect(F2.testLocaleFromAppConfig).toBeFalsy(); - }); - }); - - it('should update containerLocale when CONTAINER_LOCALE_CHANGE is fired', function() { - var _locale; - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - //listen for changes - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(data){ - _locale = data.locale; - }); - //nothing should be changed - expect(F2.getContainerLocale() == 'en-us').toBeTruthy(); - //now change locale - F2.Events.emit(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,{ - locale: 'de-de' - }); - //now locale should be changed - expect(F2.getContainerLocale() == 'de-de').toBeTruthy(); - }); - }); - - it('should update containerLocale when CONTAINER_LOCALE_CHANGE is fired after being undefined', function() { - var _locale; - F2.init(); - F2.registerApps(appConfig,appManifest); - runs(function() { - //listen for changes - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,function(data){ - _locale = data.locale; - }); - //locale was not defined, should be null - expect(F2.getContainerLocale()).toBe(null); - //now change locale - F2.Events.emit(F2.Constants.Events.CONTAINER_LOCALE_CHANGE,{ - locale: 'de-de' - }); - //now locale should be changed - expect(F2.getContainerLocale() == 'de-de').toBeTruthy(); - }); - }); - - it('AppManifest should support localeSupport property', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(appConfig.localeSupport).toBeTruthy(); - }); - }); - - it('AppManifest\'s localeSupport property should be an array', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(typeof appConfig.localeSupport == 'object').toBeTruthy(); - }); - }); - - it('AppManifest\'s localeSupport property should have 2 items', function() { - F2.init({ - locale: 'en-us' - }); - F2.registerApps(appConfig,appManifest); - runs(function() { - expect(appConfig.localeSupport.length == 2).toBeTruthy(); - }); - }); - - it('app should receive localeSupport in appConfig', function() { - F2.testLocaleSupportFromAppConfig = false; - F2.init({ - locale: 'en-us' - }); - F2.registerApps([{appId:'com_openf2_tests_helloworld', manifestUrl:'/F2/apps/test/com_openf2_tests_helloworld',localeSupport:['en-us','de-de']}], [{"inlineScripts": [], "scripts":["js/test.js"],"apps":[{ html: '
Testing
' }]}]); - - waitsFor( - function(){ - return F2.testLocaleSupportFromAppConfig; - }, - 'localeSupport not defined in AppClass', - 3000 - ); - - runs(function() { - expect(F2.testLocaleSupportFromAppConfig).toBeTruthy(); - }); - }); - - it('app should receive localeSupport in appConfig and have 2 items', function() { - F2.testLocaleSupportFromAppConfig = false; - F2.init({ - locale: 'en-us' - }); - F2.registerApps([{appId:'com_openf2_tests_helloworld', manifestUrl:'/F2/apps/test/com_openf2_tests_helloworld',localeSupport:['en-us','de-de']}], [{"inlineScripts": [], "scripts":["js/test.js"],"apps":[{ html: '
Testing
' }]}]); - - waitsFor( - function(){ - return F2.testLocaleSupportFromAppConfig; - }, - 'localeSupport not defined in AppClass', - 3000 - ); - - runs(function() { - expect(F2.testLocaleSupportFromAppConfig.length == 2).toBeTruthy(); - }); - }); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL, + localeSupport: ['en-us', 'de-de'] + }; + + var appManifest = { + scripts: [], + styles: [], + inlineScripts: [], + apps: [{ + html: '
Testing
' + }] + }; + + it('should not fail F2.init when locale is undefined', function() { + F2.init(); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(F2.isInit()).toBeTruthy(); + }); + }); + + it('F2.getContainerLocale() should return null when locale is undefined', function() { + F2.init(); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(F2.getContainerLocale()).toBe(null); + }); + }); + + it('F2.getContainerLocale() should return current locale', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(F2.getContainerLocale()).toBe('en-us'); + }); + }); + + it('F2.getContainerLocale() should be a string', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(typeof F2.getContainerLocale() == 'string').toBeTruthy(); + }); + }); + + it('F2.getContainerLocale() should be a valid IETF tag', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + //see http://www.w3.org/TR/xmlschema11-2/#language + expect(/[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*/.test(F2.getContainerLocale())).toBeTruthy(); + }); + }); + + it('should not modify original appConfig', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(appConfig.containerLocale).toBeFalsy(); + expect(appConfig.locale).toBeFalsy(); + }); + }); + + it('app should receive locale as "containerLocale" in appConfig', function() { + F2.testLocaleFromAppConfig = false; + F2.init({ + locale: 'en-us' + }); + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/F2/apps/test/com_openf2_tests_helloworld' + }], [{ + "inlineScripts": [], + "scripts": ["js/test.js"], + "apps": [{ + html: '
Testing
' + }] + }]); + + waitsFor(function() { + return F2.testLocaleFromAppConfig; + }, + 'containerLocale not defined in AppClass', + 3000 + ); + + runs(function() { + expect(F2.testLocaleFromAppConfig == F2.getContainerLocale()).toBeTruthy(); + }); + }); + + it('app should not receive locale as "containerLocale" in appConfig when locale is not defined', function() { + F2.init(); + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/F2/apps/test/com_openf2_tests_helloworld' + }], [{ + "inlineScripts": [], + "scripts": ["js/test.js"], + "apps": [{ + html: '
Testing
' + }] + }]); + + waitsFor(function() { + return !F2.testLocaleFromAppConfig; + }, + 'containerLocale is defined in AppClass', + 3000 + ); + + runs(function() { + expect(F2.testLocaleFromAppConfig).toBeFalsy(); + }); + }); + + it('should update containerLocale when CONTAINER_LOCALE_CHANGE is fired', function() { + var _locale; + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + //listen for changes + F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { + _locale = data.locale; + }); + //nothing should be changed + expect(F2.getContainerLocale() == 'en-us').toBeTruthy(); + //now change locale + F2.Events.emit(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, { + locale: 'de-de' + }); + //now locale should be changed + expect(F2.getContainerLocale() == 'de-de').toBeTruthy(); + }); + }); + + it('should update containerLocale when CONTAINER_LOCALE_CHANGE is fired after being undefined', function() { + var _locale; + F2.init(); + F2.registerApps(appConfig, appManifest); + runs(function() { + //listen for changes + F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { + _locale = data.locale; + }); + //locale was not defined, should be null + expect(F2.getContainerLocale()).toBe(null); + //now change locale + F2.Events.emit(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, { + locale: 'de-de' + }); + //now locale should be changed + expect(F2.getContainerLocale() == 'de-de').toBeTruthy(); + }); + }); + + it('AppManifest should support localeSupport property', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(appConfig.localeSupport).toBeTruthy(); + }); + }); + + it('AppManifest\'s localeSupport property should be an array', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(typeof appConfig.localeSupport == 'object').toBeTruthy(); + }); + }); + + it('AppManifest\'s localeSupport property should have 2 items', function() { + F2.init({ + locale: 'en-us' + }); + F2.registerApps(appConfig, appManifest); + runs(function() { + expect(appConfig.localeSupport.length == 2).toBeTruthy(); + }); + }); + + it('app should receive localeSupport in appConfig', function() { + F2.testLocaleSupportFromAppConfig = false; + F2.init({ + locale: 'en-us' + }); + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/F2/apps/test/com_openf2_tests_helloworld', + localeSupport: ['en-us', 'de-de'] + }], [{ + "inlineScripts": [], + "scripts": ["js/test.js"], + "apps": [{ + html: '
Testing
' + }] + }]); + + waitsFor(function() { + return F2.testLocaleSupportFromAppConfig; + }, + 'localeSupport not defined in AppClass', + 3000 + ); + + runs(function() { + expect(F2.testLocaleSupportFromAppConfig).toBeTruthy(); + }); + }); + + it('app should receive localeSupport in appConfig and have 2 items', function() { + F2.testLocaleSupportFromAppConfig = false; + F2.init({ + locale: 'en-us' + }); + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/F2/apps/test/com_openf2_tests_helloworld', + localeSupport: ['en-us', 'de-de'] + }], [{ + "inlineScripts": [], + "scripts": ["js/test.js"], + "apps": [{ + html: '
Testing
' + }] + }]); + + waitsFor(function() { + return F2.testLocaleSupportFromAppConfig; + }, + 'localeSupport not defined in AppClass', + 3000 + ); + + runs(function() { + expect(F2.testLocaleSupportFromAppConfig.length == 2).toBeTruthy(); + }); + }); }); describe('F2.registerApps - basic', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(function() { - F2.init(); - }); - - it('should fail on empty parameters', function() { - expect(function() { - F2.registerApps(); - }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); - }); - - it('should fail when passed an empty array', function() { - expect(function() { - F2.registerApps([]); - }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); - }); - - it('should fail when the parameters are invalid', function() { - expect(function() { - F2.registerApps(null, []); - }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); - }); - - it('should fail when the AppConfig is invalid', function() { - expect(function() { - F2.registerApps({}); - }).toLog('"appId" missing from app object'); - - expect(function() { - F2.registerApps({ - appId: TEST_APP_ID - }); - }).toLog('"manifestUrl" missing from app object'); - }); - - it('should fail when the parameter lengths do not match', function() { - expect(function() { - F2.registerApps({ - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }, [{}, {}]); - }).toLog('The length of "apps" does not equal the length of "appManifests"'); - }); - - it('should not fail when a single appManifest is passed (#55)', function() { - - var passedMessage = false; - F2.log = function(message) { - passedMessage = true; - }; - - runs(function() { - F2.registerApps({ - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }, { - apps: [{ - html: '
' - }] - }); - }); - - // wait long enough for registerApps to have failed - waits(1000); - - // F2.log should not have run - runs(function() { - expect(passedMessage).toBeFalsy(); - }); - }); - - it('should not modify the original AppConfig that was passed in', function() { - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }; - F2.registerApps(appConfig); - - // original appConfig object should remain clean - expect(appConfig.instanceId).toBeFalsy(); - }); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(function() { + F2.init(); + }); + + it('should fail on empty parameters', function() { + expect(function() { + F2.registerApps(); + }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); + }); + + it('should fail when passed an empty array', function() { + expect(function() { + F2.registerApps([]); + }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); + }); + + it('should fail when the parameters are invalid', function() { + expect(function() { + F2.registerApps(null, []); + }).toLog('At least one AppConfig must be passed when calling F2.registerApps()'); + }); + + it('should fail when the AppConfig is invalid', function() { + expect(function() { + F2.registerApps({}); + }).toLog('"appId" missing from app object'); + + expect(function() { + F2.registerApps({ + appId: TEST_APP_ID + }); + }).toLog('"manifestUrl" missing from app object'); + }); + + it('should fail when the parameter lengths do not match', function() { + expect(function() { + F2.registerApps({ + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }, [{}, {}]); + }).toLog('The length of "apps" does not equal the length of "appManifests"'); + }); + + it('should not fail when a single appManifest is passed (#55)', function() { + + var passedMessage = false; + F2.log = function(message) { + passedMessage = true; + }; + + runs(function() { + F2.registerApps({ + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }, { + apps: [{ + html: '
' + }] + }); + }); + + // wait long enough for registerApps to have failed + waits(1000); + + // F2.log should not have run + runs(function() { + expect(passedMessage).toBeFalsy(); + }); + }); + + it('should not modify the original AppConfig that was passed in', function() { + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }; + F2.registerApps(appConfig); + + // original appConfig object should remain clean + expect(appConfig.instanceId).toBeFalsy(); + }); }); describe('F2.registerApps - xhr overrides', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(function() { - // nothing to do after reload - }); - - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }; - - it('should call xhr if it is defined', function() { - var isFired = false; - runs(function() { - F2.init({ - xhr: function(url, apps, success, error, complete) { - $.ajax({ - url: url, - type: 'POST', - data: { - params: F2.stringify(apps[0], F2.appConfigReplacer) - }, - jsonp: false, // do not put 'callback=' in the query string - jsonpCallback: F2.Constants.JSONP_CALLBACK + apps[0].appId, // Unique function name - dataType: 'json', - success: function(appManifest) { - // custom success logic - success(appManifest); // fire success callback - }, - error: function() { - // custom error logic - error(); // fire error callback - }, - complete: function() { - // custom complete logic - complete(); // fire complete callback - } - }); - isFired = true; - } - }); - F2.registerApps(appConfig); - }); - waitsFor(function() { - return isFired; - }); - runs(function() { - expect(isFired).toBeTruthy(); - }) - }); - - it('should pass 5 parameters to xhr', function() { - var isFired = false, - numArgs = 0, - urlParam, appConfigsParam, successParam, errorParam, completeParam; - - runs(function() { - F2.init({ - xhr: function(url, appConfigs, success, error, complete) { - numArgs = arguments.length; - urlParam = url; - appConfigsParam = appConfigs; - successParam = success; - errorParam = error; - completeParam = complete; - - isFired = true; - } - }); - F2.registerApps(appConfig); - }); - - waitsFor(function() { - return isFired; - }); - - runs(function() { - expect(numArgs).toBe(5); - expect(typeof urlParam).toBe('string'); - expect(appConfigsParam instanceof Array).toBeTruthy(); - expect(typeof successParam).toBe('function'); - expect(typeof errorParam).toBe('function'); - expect(typeof completeParam).toBe('function'); - }) - }); - - it('should call xhr.dataType', function() { - var isFired = false; - runs(function() { - F2.init({ - xhr: { - dataType: function() { - isFired = true; - return 'jsonp'; - } - } - }); - F2.registerApps(appConfig); - }); - waitsFor(function() { - return isFired; - }, 'xhr.dataType was not fired', 10000); - runs(function() { - expect(isFired).toBeTruthy(); - }); - }); - - it('should throw an exception when xhr.dataType does not return a string', function() { - expect(function() { - F2.init({ - xhr: { - dataType: function() {} - } - }); - F2.registerApps(appConfig); - }).toThrow(new Error('ContainerConfig.xhr.dataType should return a string')); - }); - - it('should call xhr.type', function() { - var isFired = false; - F2.init({ - xhr: { - type: function() { - isFired = true; - return 'GET'; - } - } - }); - F2.registerApps(appConfig); - waitsFor(function() { - return isFired; - }, 'xhr.type was not fired', 10000); - runs(function() { - expect(isFired).toBeTruthy(); - }); - }); - - it('should throw an exception when xhr.type does not return a string', function() { - expect(function() { - F2.init({ - xhr: { - type: function() {} - } - }); - F2.registerApps(appConfig); - }).toThrow(new Error('ContainerConfig.xhr.type should return a string')); - }); - - it('should call xhr.url', function() { - var isFired = false; - F2.init({ - xhr: { - url: function() { - isFired = true; - return '/F2/apps/test/hello-world'; - } - } - }); - F2.registerApps(appConfig); - waitsFor(function() { - return isFired; - }, 'xhr.url was not fired', 10000); - runs(function() { - expect(isFired).toBeTruthy(); - }); - }); - - it('should throw an exception when xhr.url does not return a string', function() { - expect(function() { - F2.init({ - xhr: { - url: function() {} - } - }); - F2.registerApps(appConfig); - }).toThrow(new Error('ContainerConfig.xhr.url should return a string')); - }); - - itConditionally(window.F2_NODE_TEST_SERVER, 'should use POST when the domain of the container matches that of the app (#41, #59)', function() { - - var isPost = false, - hasReturned = false; - F2.log = function(message) { - hasReturned = true; - isPost = message; - }; - - runs(function() { - F2.init({ - xhr: { - dataType: function(url) { - return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - }, - type: function(url) { - return F2.isLocalRequest(url) ? 'POST' : 'GET'; - } - } - }); - F2.registerApps({ - appId: 'com_test_app', - manifestUrl: TEST_MANIFEST_URL_HTTP_POST - }); - }); - - // wait for registerApps to complete and load the app - waitsFor(function() { - return hasReturned; - }, 'test app was never loaded', 10000); - - runs(function() { - expect(isPost).toBeTruthy(); - }); - }); - - itConditionally(window.F2_NODE_TEST_SERVER, 'should use GET when the domain of the container does not match that of the app (#41, #59)', function() { - - var isPost = false, - hasReturned = false; - F2.log = function(message) { - hasReturned = true; - isPost = message; - }; - - runs(function() { - F2.init({ - xhr: { - dataType: function(url) { - return F2.isLocalRequest(url) ? 'json' : 'jsonp'; - }, - type: function(url) { - return F2.isLocalRequest(url) ? 'POST' : 'GET'; - } - } - }); - F2.registerApps({ - appId: 'com_test_app', - manifestUrl: 'http://www.openf2.org/httpPostTest' - }); - }); - - // wait for registerApps to complete and load the app - waitsFor(function() { - return hasReturned; - }, 'test app was never loaded', 10000); - - runs(function() { - expect(isPost).toBeFalsy(); - }); - }); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(function() { + // nothing to do after reload + }); + + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }; + + it('should call xhr if it is defined', function() { + var isFired = false; + runs(function() { + F2.init({ + xhr: function(url, apps, success, error, complete) { + $.ajax({ + url: url, + type: 'POST', + data: { + params: F2.stringify(apps[0], F2.appConfigReplacer) + }, + jsonp: false, // do not put 'callback=' in the query string + jsonpCallback: F2.Constants.JSONP_CALLBACK + apps[0].appId, // Unique function name + dataType: 'json', + success: function(appManifest) { + // custom success logic + success(appManifest); // fire success callback + }, + error: function() { + // custom error logic + error(); // fire error callback + }, + complete: function() { + // custom complete logic + complete(); // fire complete callback + } + }); + isFired = true; + } + }); + F2.registerApps(appConfig); + }); + waitsFor(function() { + return isFired; + }); + runs(function() { + expect(isFired).toBeTruthy(); + }) + }); + + it('should pass 5 parameters to xhr', function() { + var isFired = false, + numArgs = 0, + urlParam, appConfigsParam, successParam, errorParam, completeParam; + + runs(function() { + F2.init({ + xhr: function(url, appConfigs, success, error, complete) { + numArgs = arguments.length; + urlParam = url; + appConfigsParam = appConfigs; + successParam = success; + errorParam = error; + completeParam = complete; + + isFired = true; + } + }); + F2.registerApps(appConfig); + }); + + waitsFor(function() { + return isFired; + }); + + runs(function() { + expect(numArgs).toBe(5); + expect(typeof urlParam).toBe('string'); + expect(appConfigsParam instanceof Array).toBeTruthy(); + expect(typeof successParam).toBe('function'); + expect(typeof errorParam).toBe('function'); + expect(typeof completeParam).toBe('function'); + }) + }); + + it('should call xhr.dataType', function() { + var isFired = false; + runs(function() { + F2.init({ + xhr: { + dataType: function() { + isFired = true; + return 'jsonp'; + } + } + }); + F2.registerApps(appConfig); + }); + waitsFor(function() { + return isFired; + }, 'xhr.dataType was not fired', 10000); + runs(function() { + expect(isFired).toBeTruthy(); + }); + }); + + it('should throw an exception when xhr.dataType does not return a string', function() { + expect(function() { + F2.init({ + xhr: { + dataType: function() {} + } + }); + F2.registerApps(appConfig); + }).toThrow(new Error('ContainerConfig.xhr.dataType should return a string')); + }); + + it('should call xhr.type', function() { + var isFired = false; + F2.init({ + xhr: { + type: function() { + isFired = true; + return 'GET'; + } + } + }); + F2.registerApps(appConfig); + waitsFor(function() { + return isFired; + }, 'xhr.type was not fired', 10000); + runs(function() { + expect(isFired).toBeTruthy(); + }); + }); + + it('should throw an exception when xhr.type does not return a string', function() { + expect(function() { + F2.init({ + xhr: { + type: function() {} + } + }); + F2.registerApps(appConfig); + }).toThrow(new Error('ContainerConfig.xhr.type should return a string')); + }); + + it('should call xhr.url', function() { + var isFired = false; + F2.init({ + xhr: { + url: function() { + isFired = true; + return '/F2/apps/test/hello-world'; + } + } + }); + F2.registerApps(appConfig); + waitsFor(function() { + return isFired; + }, 'xhr.url was not fired', 10000); + runs(function() { + expect(isFired).toBeTruthy(); + }); + }); + + it('should throw an exception when xhr.url does not return a string', function() { + expect(function() { + F2.init({ + xhr: { + url: function() {} + } + }); + F2.registerApps(appConfig); + }).toThrow(new Error('ContainerConfig.xhr.url should return a string')); + }); + + itConditionally(window.F2_NODE_TEST_SERVER, 'should use POST when the domain of the container matches that of the app (#41, #59)', function() { + + var isPost = false, + hasReturned = false; + F2.log = function(message) { + hasReturned = true; + isPost = message; + }; + + runs(function() { + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + F2.registerApps({ + appId: 'com_test_app', + manifestUrl: TEST_MANIFEST_URL_HTTP_POST + }); + }); + + // wait for registerApps to complete and load the app + waitsFor(function() { + return hasReturned; + }, 'test app was never loaded', 10000); + + runs(function() { + expect(isPost).toBeTruthy(); + }); + }); + + itConditionally(window.F2_NODE_TEST_SERVER, 'should use GET when the domain of the container does not match that of the app (#41, #59)', function() { + + var isPost = false, + hasReturned = false; + F2.log = function(message) { + hasReturned = true; + isPost = message; + }; + + runs(function() { + F2.init({ + xhr: { + dataType: function(url) { + return F2.isLocalRequest(url) ? 'json' : 'jsonp'; + }, + type: function(url) { + return F2.isLocalRequest(url) ? 'POST' : 'GET'; + } + } + }); + F2.registerApps({ + appId: 'com_test_app', + manifestUrl: 'http://www.openf2.org/httpPostTest' + }); + }); + + // wait for registerApps to complete and load the app + waitsFor(function() { + return hasReturned; + }, 'test app was never loaded', 10000); + + runs(function() { + expect(isPost).toBeFalsy(); + }); + }); }); describe('F2.registerApps - rendering', function() { - var async = new AsyncSpec(this); - async.beforeEachReloadF2(function() { - // nothing to do after reload - }); - - var appConfig = { - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }; - var appManifest = { - scripts: [], - styles: [], - inlineScripts: [], - apps: [{ - html: '
Testing
' - }] - }; - - it('should fire beforeAppRender when it is defined', function() { - var isFired = false; - F2.init({ - beforeAppRender: function() { - isFired = true; - } - }); - F2.registerApps(appConfig, [appManifest]); - waitsFor(function() { - return isFired; - }, 'beforeAppRender was never fired', 10000); - runs(function() { - expect(isFired).toBe(true); - }); - }); - - it('should allow beforeAppRender to return null', function() { - F2.init({ - beforeAppRender: function() { - return null; - } - }); - - F2.registerApps(appConfig, [appManifest]); - }); - - - it('should eval AppManifest.inlineScripts when AppManifest.scripts are defined', function() { - F2.inlineScriptsEvaluated = false; - F2.init(); - F2.registerApps([{ - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }], [{ - 'inlineScripts': ['(function(){F2.inlineScriptsEvaluated=true;})()'], - 'scripts': ['js/test.js'], - 'apps': [{ - 'html': '
Testing
' - }] - }]); - - waitsFor( - function() { - return F2.inlineScriptsEvaluated; - }, - 'Inline scripts were never evaluated', - 10000 - ); - - runs(function() { - expect(F2.inlineScriptsEvaluated).toBe(true); - }); - }); - - it('should eval AppManifest.inlineScripts when AppManifest.scripts are not defined', function() { - F2.inlineScriptsEvaluated = false; - F2.init(); - F2.registerApps([{ - appId: TEST_APP_ID, - manifestUrl: TEST_MANIFEST_URL - }], [{ - 'inlineScripts': ['(function(){F2.inlineScriptsEvaluated=true;})()'], - 'apps': [{ - 'html': '
Testing
' - }] - }]); - waitsFor( - function() { - return F2.inlineScriptsEvaluated; - }, - 'Inline scripts were never evaluated', - 10000 - ); - - runs(function() { - expect(F2.inlineScriptsEvaluated).toBe(true); - }); - }); - - it('should add cache buster to AppManifest.scripts when F2.ContainerConfig.debugMode is true', function() { - var bustedCache = false; - F2.init({ - debugMode: true - }); - F2.registerApps([{ - appId:'com_openf2_tests_helloworld', - manifestUrl:'/' - }], [{ - 'scripts': ['js/test.js'], - 'apps': [{ - 'html': '
Testing
' - }] - }]); - - // wait for registerApps to complete loading - waits(2000); - - runs(function() { - - $('script').each(function(idx, item) { - var src = $(item).attr('src'); - //find script, test for cachebuster string - if (/test.js\?cachebuster/.test(src)) { - bustedCache = true; - return false; //break from $.each - } - }); - - expect(bustedCache).toBe(true); - }); - }); - - it('should not add cache buster to AppManifest.scripts when F2.ContainerConfig.debugMode is undefined or false', function() { - var bustedCache = false; - F2.init(); - F2.registerApps([{ - appId:'com_openf2_tests_helloworld', - manifestUrl:'/' - }], [{ - 'scripts': ['js/test.js'], - 'apps': [{ - 'html': '
Testing
' - }] - }]); - - waits(2000); - - runs(function() { - - $('script').each(function(idx, item) { - var src = $(item).attr('src'); - //find script - if (/cacheBusterNotAdded.js/.test(src)) { - bustedCache = /cachebuster/.test(src); - return false; //break from $.each - } - }); - - expect(bustedCache).toBe(false); - }); - }); - - it('should not inject an app\'s dependencies (scripts nor styles) more than one time', function() { - var appsRendered = 0; - var loadedJS = loadedCSS = 0; - F2.init(); - //notify when apps have been rendered - F2.AppHandlers.on(F2.AppHandlers.getToken(),F2.Constants.AppHandlers.APP_RENDER_AFTER,function(){ appsRendered++; }); - //load same app twice - F2.registerApps([ - { - appId: TEST_APP_ID3, - manifestUrl: TEST_MANIFEST_URL3 - }, - { - appId: TEST_APP_ID3, - manifestUrl: TEST_MANIFEST_URL3 - } - ]); - - // wait for registerApps to complete and load both apps - waitsFor(function() { - return appsRendered === 2; - }, 'test apps were never loaded', 15000); - - runs(function() { - - //ensure this script only exists one time - $('script').each(function(idx, item) { - var src = $(item).attr('src'); - if (/com_openf2_examples_nodejs_helloworld\/appclass.js/.test(src)){ - loadedJS++; - } - }); - - //ensure this stylesheet only exists one time - $('link').each(function(idx, item) { - var src = $(item).attr('href'); - if (/com_openf2_examples_nodejs_helloworld\/app.css/.test(src)){ - loadedCSS++; - } - }); - - expect(loadedJS).toBe(1); - expect(loadedCSS).toBe(1); - }); - }); - - it('should load and execute scripts in order', function() { - var scriptsLoaded = false; - F2.init(); - //load 1 app with 2 script files, the 2nd one defines F2.HightChartsIsDefined global. - F2.registerApps([{ - appId: 'com_openf2_tests_helloworld', - manifestUrl: '/' - }], [{ - 'scripts': ['http://cdnjs.cloudflare.com/ajax/libs/highcharts/4.0.3/highcharts.js','js/test.js'], - 'apps': [{ - 'html': '
Testing
' - }] - }]); - - //notify when dependencies have been loaded - F2.Events.on('APP_SCRIPTS_LOADED', function(data){ - scriptsLoaded = true; - console.log('APP_SCRIPTS_LOADED',data); - }); - - // wait for registerApps to complete and load both apps - waitsFor(function() { - return scriptsLoaded && F2.HightChartsIsDefined; - }, 'test apps to load', 10000); - - runs(function() { - expect(F2.HightChartsIsDefined).toBeTruthy(); - }); - }); + var async = new AsyncSpec(this); + async.beforeEachReloadF2(function() { + // nothing to do after reload + }); + + var appConfig = { + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }; + var appManifest = { + scripts: [], + styles: [], + inlineScripts: [], + apps: [{ + html: '
Testing
' + }] + }; + + it('should fire beforeAppRender when it is defined', function() { + var isFired = false; + F2.init({ + beforeAppRender: function() { + isFired = true; + } + }); + F2.registerApps(appConfig, [appManifest]); + waitsFor(function() { + return isFired; + }, 'beforeAppRender was never fired', 10000); + runs(function() { + expect(isFired).toBe(true); + }); + }); + + it('should allow beforeAppRender to return null', function() { + F2.init({ + beforeAppRender: function() { + return null; + } + }); + + F2.registerApps(appConfig, [appManifest]); + }); + + + it('should eval AppManifest.inlineScripts when AppManifest.scripts are defined', function() { + F2.inlineScriptsEvaluated = false; + F2.init(); + F2.registerApps([{ + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }], [{ + 'inlineScripts': ['(function(){F2.inlineScriptsEvaluated=true;})()'], + 'scripts': ['js/test.js'], + 'apps': [{ + 'html': '
Testing
' + }] + }]); + + waitsFor(function() { + return F2.inlineScriptsEvaluated; + }, + 'Inline scripts were never evaluated', + 10000 + ); + + runs(function() { + expect(F2.inlineScriptsEvaluated).toBe(true); + }); + }); + + it('should eval AppManifest.inlineScripts when AppManifest.scripts are not defined', function() { + F2.inlineScriptsEvaluated = false; + F2.init(); + F2.registerApps([{ + appId: TEST_APP_ID, + manifestUrl: TEST_MANIFEST_URL + }], [{ + 'inlineScripts': ['(function(){F2.inlineScriptsEvaluated=true;})()'], + 'apps': [{ + 'html': '
Testing
' + }] + }]); + waitsFor(function() { + return F2.inlineScriptsEvaluated; + }, + 'Inline scripts were never evaluated', + 10000 + ); + + runs(function() { + expect(F2.inlineScriptsEvaluated).toBe(true); + }); + }); + + it('should add cache buster to AppManifest.scripts when F2.ContainerConfig.debugMode is true', function() { + var bustedCache = false; + F2.init({ + debugMode: true + }); + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/' + }], [{ + 'scripts': ['js/test.js'], + 'apps': [{ + 'html': '
Testing
' + }] + }]); + + // wait for registerApps to complete loading + waits(2000); + + runs(function() { + + $('script').each(function(idx, item) { + var src = $(item).attr('src'); + //find script, test for cachebuster string + if (/test.js\?cachebuster/.test(src)) { + bustedCache = true; + return false; //break from $.each + } + }); + + expect(bustedCache).toBe(true); + }); + }); + + it('should not add cache buster to AppManifest.scripts when F2.ContainerConfig.debugMode is undefined or false', function() { + var bustedCache = false; + F2.init(); + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/' + }], [{ + 'scripts': ['js/test.js'], + 'apps': [{ + 'html': '
Testing
' + }] + }]); + + waits(2000); + + runs(function() { + + $('script').each(function(idx, item) { + var src = $(item).attr('src'); + //find script + if (/cacheBusterNotAdded.js/.test(src)) { + bustedCache = /cachebuster/.test(src); + return false; //break from $.each + } + }); + + expect(bustedCache).toBe(false); + }); + }); + + it('should not inject an app\'s dependencies (scripts nor styles) more than one time', function() { + var appsRendered = 0; + var loadedJS = loadedCSS = 0; + F2.init(); + //notify when apps have been rendered + F2.AppHandlers.on(F2.AppHandlers.getToken(), F2.Constants.AppHandlers.APP_RENDER_AFTER, function() { + appsRendered++; + }); + //load same app twice + F2.registerApps([ + { + appId: TEST_APP_ID3, + manifestUrl: TEST_MANIFEST_URL3 + }, + { + appId: TEST_APP_ID3, + manifestUrl: TEST_MANIFEST_URL3 + } + ]); + + // wait for registerApps to complete and load both apps + waitsFor(function() { + return appsRendered === 2; + }, 'test apps were never loaded', 15000); + + runs(function() { + + //ensure this script only exists one time + $('script').each(function(idx, item) { + var src = $(item).attr('src'); + if (/com_openf2_examples_nodejs_helloworld\/appclass.js/.test(src)) { + loadedJS++; + } + }); + + //ensure this stylesheet only exists one time + $('link').each(function(idx, item) { + var src = $(item).attr('href'); + if (/com_openf2_examples_nodejs_helloworld\/app.css/.test(src)) { + loadedCSS++; + } + }); + + expect(loadedJS).toBe(1); + expect(loadedCSS).toBe(1); + }); + }); + + it('should load and execute scripts in order', function() { + var scriptsLoaded = false; + F2.init(); + //load 1 app with 2 script files, the 2nd one defines F2.HightChartsIsDefined global. + F2.registerApps([{ + appId: 'com_openf2_tests_helloworld', + manifestUrl: '/' + }], [{ + 'scripts': ['http://cdnjs.cloudflare.com/ajax/libs/highcharts/4.0.3/highcharts.js', 'js/test.js'], + 'apps': [{ + 'html': '
Testing
' + }] + }]); + + //notify when dependencies have been loaded + F2.Events.on('APP_SCRIPTS_LOADED', function(data) { + scriptsLoaded = true; + console.log('APP_SCRIPTS_LOADED', data); + }); + + // wait for registerApps to complete and load both apps + waitsFor(function() { + return scriptsLoaded && F2.HightChartsIsDefined; + }, 'test apps to load', 10000); + + runs(function() { + expect(F2.HightChartsIsDefined).toBeTruthy(); + }); + }); }); describe('F2.loadPlaceholders - auto', function() { - describe('single app by id', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append( - '
' - ); - }); - - it('should automatically auto-init F2 when f2-autoload id is on the page', function() { - // need to wait for dom ready before F2.init() will be called - waitsFor( - function() { - return F2.isInit(); - }, - 'F2.init() never called', - 3000 - ); - runs(function() { - expect(F2.isInit()).toBe(true); - }); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - }); - - describe('single app by id, with children', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append( - '
', - '
', - '
' - ); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - - it('should ignore apps within apps', function() { - - var proceed = false; - var timeout; - - waitsFor( - function() { - // wait an arbitrary 5 seconds for the apps to load - timeout = timeout || setTimeout(function() { proceed = true; }, 5000); - return proceed; - }, - 'placeholder app to load', - 10000 - ); - - runs(function() { - expect($('#f2-autoload').children().length).toEqual(1); - expect($('#f2-autoload [data-f2-appid]').length).toEqual(0); - }); - }); - }); - - describe('single app by attribute', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append( - '
' - ); - }); - - it('should automatically auto-init F2 when data-f2-autoload attribute is on the page', function() { - // need to wait for dom ready before F2.init() will be called - waitsFor( - function() { - return F2.isInit(); - }, - 'F2.init() never called', - 3000 - ); - runs(function() { - expect(F2.isInit()).toBe(true); - }); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#test-fixture [data-f2-appid]').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - }); - - describe('single app by class', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append( - '
' - ); - }); - - it('should automatically auto-init F2 when f2-autoload class is on the page', function() { - // need to wait for dom ready before F2.init() will be called - waitsFor( - function() { - return F2.isInit(); - }, - 'F2.init() never called', - 3000 - ); - runs(function() { - expect(F2.isInit()).toBe(true); - }); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#test-fixture [data-f2-appid]').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - }); - - describe('single app by id, nested', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
' - ].join('')); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload [data-f2-appid]').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - }); - - describe('single app by attribute, nested', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
' - ].join('')); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload-single [data-f2-appid]').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - }); - - describe('single app by class, nested', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
' - ].join('')); - }); - - it('should automatically find and register apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload-single [data-f2-appid]').children().length; - return children; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - }); - - describe('many apps by id', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
', - '
' - ].join('')); - }); - - it('should automatically find and register multiple apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload [data-f2-appid]').children().length; - return children == 2; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(2); - }); - }); - }); - - describe('many apps by attribute', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
', - '
' - ].join('')); - }); - - it('should automatically find and register multiple apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload-many [data-f2-appid]').children().length; - return children == 2; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(2); - }); - }); - }); - - describe('many apps by class', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
', - '
' - ].join('')); - }); - - it('should automatically find and register multiple apps', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload-many [data-f2-appid]').children().length; - return children == 2; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(2); - }); - }); - }); - - describe('many placeholders by attribute', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
', - '
', - '
', - '
', - ].join('')); - }); - - it('should automatically find and register apps within multiple placeholders', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#test-fixture [data-f2-appid]').children().length; - return children == 2; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(2); - }); - }); - }); - - describe('many placeholders by class', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - beforeEach(function() { - $('#test-fixture').append([ - '
', - '
', - '
', - '
', - '
', - '
', - ].join('')); - }); - - it('should automatically find and register apps within multiple placeholders', function() { - - var children = 0; - - waitsFor( - function() { - children = $('#test-fixture [data-f2-appid]').children().length; - return children == 2; - }, - 'placeholder app to load', - 3000 - ); - - runs(function() { - expect(children).toEqual(2); - }); - }); - }); + describe('single app by id', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append( + '
' + ); + }); + + it('should automatically auto-init F2 when f2-autoload id is on the page', function() { + // need to wait for dom ready before F2.init() will be called + waitsFor(function() { + return F2.isInit(); + }, + 'F2.init() never called', + 3000 + ); + runs(function() { + expect(F2.isInit()).toBe(true); + }); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + }); + + describe('single app by id, with children', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append( + '
', + '
', + '
' + ); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + + it('should ignore apps within apps', function() { + + var proceed = false; + var timeout; + + waitsFor(function() { + // wait an arbitrary 5 seconds for the apps to load + timeout = timeout || setTimeout(function() { + proceed = true; + }, 5000); + return proceed; + }, + 'placeholder app to load', + 10000 + ); + + runs(function() { + expect($('#f2-autoload').children().length).toEqual(1); + expect($('#f2-autoload [data-f2-appid]').length).toEqual(0); + }); + }); + }); + + describe('single app by attribute', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append( + '
' + ); + }); + + it('should automatically auto-init F2 when data-f2-autoload attribute is on the page', function() { + // need to wait for dom ready before F2.init() will be called + waitsFor(function() { + return F2.isInit(); + }, + 'F2.init() never called', + 3000 + ); + runs(function() { + expect(F2.isInit()).toBe(true); + }); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#test-fixture [data-f2-appid]').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + }); + + describe('single app by class', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append( + '
' + ); + }); + + it('should automatically auto-init F2 when f2-autoload class is on the page', function() { + // need to wait for dom ready before F2.init() will be called + waitsFor(function() { + return F2.isInit(); + }, + 'F2.init() never called', + 3000 + ); + runs(function() { + expect(F2.isInit()).toBe(true); + }); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#test-fixture [data-f2-appid]').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + }); + + describe('single app by id, nested', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
' + ].join('')); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload [data-f2-appid]').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + }); + + describe('single app by attribute, nested', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
' + ].join('')); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload-single [data-f2-appid]').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + }); + + describe('single app by class, nested', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
' + ].join('')); + }); + + it('should automatically find and register apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload-single [data-f2-appid]').children().length; + return children; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + }); + + describe('many apps by id', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
', + '
' + ].join('')); + }); + + it('should automatically find and register multiple apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload [data-f2-appid]').children().length; + return children == 2; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(2); + }); + }); + }); + + describe('many apps by attribute', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
', + '
' + ].join('')); + }); + + it('should automatically find and register multiple apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload-many [data-f2-appid]').children().length; + return children == 2; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(2); + }); + }); + }); + + describe('many apps by class', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
', + '
' + ].join('')); + }); + + it('should automatically find and register multiple apps', function() { + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload-many [data-f2-appid]').children().length; + return children == 2; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(2); + }); + }); + }); + + describe('many placeholders by attribute', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
', + '
', + '
', + '
', + ].join('')); + }); + + it('should automatically find and register apps within multiple placeholders', function() { + + var children = 0; + + waitsFor(function() { + children = $('#test-fixture [data-f2-appid]').children().length; + return children == 2; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(2); + }); + }); + }); + + describe('many placeholders by class', function() { + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + beforeEach(function() { + $('#test-fixture').append([ + '
', + '
', + '
', + '
', + '
', + '
', + ].join('')); + }); + + it('should automatically find and register apps within multiple placeholders', function() { + + var children = 0; + + waitsFor(function() { + children = $('#test-fixture [data-f2-appid]').children().length; + return children == 2; + }, + 'placeholder app to load', + 3000 + ); + + runs(function() { + expect(children).toEqual(2); + }); + }); + }); }); describe('F2.loadPlaceholders - manual', function() { - // force F2 to be reloaded - var async = new AsyncSpec(this); - async.beforeEachReloadF2(); - - // add the f2-autoload element to the test fixture for use in each - // test - beforeEach(function() { - $('#test-fixture').append('
'); - }); - - it('should require the presence of data-f2-manifesturl', function() { - // add the invalid placeholder - $('#f2-autoload').append('
'); - - // even though the manifesturl is missing, the message is generic because a null AppConfig was generated - expect(function() { - F2.init(); - F2.loadPlaceholders(); - }).toLog('"appId" missing from app object'); - }); - - it('should find and register apps', function() { - - // add the placeholder - var $f2Autoload = $('
'); - $f2Autoload.append('
'); - $('#test-fixture').append($f2Autoload); - - F2.init(); - F2.loadPlaceholders(); - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload [data-f2-appid]').children().length; - return children; - }, - 'app never loaded', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); - - it('should find and register multiple apps', function() { - // add the placeholder - var $f2Autoload = $('
'); - $f2Autoload - .append('
') - .append('
'); - $('#test-fixture').append($f2Autoload); - - F2.init(); - F2.loadPlaceholders(); - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload [data-f2-appid]').children().length; - return children == 2; - }, - 'app never loaded', - 10000 - ); - - runs(function() { - expect(children).toEqual(2); - }); - }); - - it('should throw an exception when an invalid parentNode is passed', function() { - expect(function() { - F2.init(); - F2.loadPlaceholders('foo'); - }).toThrow('"parentNode" must be null or a DOM node'); - }); - - it('should find and register apps within a given scope', function() { - // add the placeholder - var $f2Autoload = $('
'); - $f2Autoload - .append('
'); - $('#test-fixture').append($f2Autoload); - - F2.init(); - F2.loadPlaceholders(document.getElementById('test-fixture')); - - var children = 0; - - waitsFor( - function() { - children = $('#f2-autoload [data-f2-appid]').children().length; - return children; - }, - 'app never loaded', - 3000 - ); - - runs(function() { - expect(children).toEqual(1); - }); - }); + // force F2 to be reloaded + var async = new AsyncSpec(this); + async.beforeEachReloadF2(); + + // add the f2-autoload element to the test fixture for use in each + // test + beforeEach(function() { + $('#test-fixture').append('
'); + }); + + it('should require the presence of data-f2-manifesturl', function() { + // add the invalid placeholder + $('#f2-autoload').append('
'); + + // even though the manifesturl is missing, the message is generic because a null AppConfig was generated + expect(function() { + F2.init(); + F2.loadPlaceholders(); + }).toLog('"appId" missing from app object'); + }); + + it('should find and register apps', function() { + + // add the placeholder + var $f2Autoload = $('
'); + $f2Autoload.append('
'); + $('#test-fixture').append($f2Autoload); + + F2.init(); + F2.loadPlaceholders(); + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload [data-f2-appid]').children().length; + return children; + }, + 'app never loaded', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); + + it('should find and register multiple apps', function() { + // add the placeholder + var $f2Autoload = $('
'); + $f2Autoload + .append('
') + .append('
'); + $('#test-fixture').append($f2Autoload); + + F2.init(); + F2.loadPlaceholders(); + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload [data-f2-appid]').children().length; + return children == 2; + }, + 'app never loaded', + 10000 + ); + + runs(function() { + expect(children).toEqual(2); + }); + }); + + it('should throw an exception when an invalid parentNode is passed', function() { + expect(function() { + F2.init(); + F2.loadPlaceholders('foo'); + }).toThrow('"parentNode" must be null or a DOM node'); + }); + + it('should find and register apps within a given scope', function() { + // add the placeholder + var $f2Autoload = $('
'); + $f2Autoload + .append('
'); + $('#test-fixture').append($f2Autoload); + + F2.init(); + F2.loadPlaceholders(document.getElementById('test-fixture')); + + var children = 0; + + waitsFor(function() { + children = $('#f2-autoload [data-f2-appid]').children().length; + return children; + }, + 'app never loaded', + 3000 + ); + + runs(function() { + expect(children).toEqual(1); + }); + }); }); + diff --git a/tests/spec/misc-spec.js b/tests/spec/misc-spec.js index 9f26f5f8..4f5f2407 100644 --- a/tests/spec/misc-spec.js +++ b/tests/spec/misc-spec.js @@ -1,11 +1,11 @@ describe('misc', function() { - it('should not overwrite existing jQuery versions', function() { - // the AMD test page does not include jquery - if (typeof $ !== 'undefined') { - // the jasmine test page loads 1.11.1 while 1.10.2 is bundled with F2 - expect($.fn.jquery).toEqual('1.11.1'); - } - }); + it('should not overwrite existing jQuery versions', function() { + // The AMD test page does not include jquery + if (typeof $ !== 'undefined') { + // The jasmine test page loads 1.11.1 while 1.10.2 is bundled with F2 + expect($.fn.jquery).toEqual('1.11.1'); + } + }); -}); \ No newline at end of file +}); diff --git a/tests/spec/preamble-spec.js b/tests/spec/preamble-spec.js index 1f231c60..30cea84d 100644 --- a/tests/spec/preamble-spec.js +++ b/tests/spec/preamble-spec.js @@ -1,56 +1,76 @@ describe('F2.extend', function() { - it('should ignore extra F2 namespace', function() { - F2.extend('F2.TestObj', { foo: 'bar' }); - expect(F2.TestObj).toEqual({ foo: 'bar' }) - }); - - it('should not overwrite properties by default', function() { - F2.extend('F2.TestObj', { foo: 'bar' }); - F2.extend('F2.TestObj', { foo: 'foo' }); - expect(F2.TestObj).toEqual({ foo: 'bar' }); - }); - - it('should overwrite properties', function() { - F2.extend('F2.TestObj', { foo: 'bar' }); - F2.extend('F2.TestObj', { foo: 'foo' }, true); - expect(F2.TestObj).toEqual({ foo: 'foo' }); - }); + it('should ignore extra F2 namespace', function() { + F2.extend('F2.TestObj', { + foo: 'bar' + }); + expect(F2.TestObj).toEqual({ + foo: 'bar' + }) + }); + + it('should not overwrite properties by default', function() { + F2.extend('F2.TestObj', { + foo: 'bar' + }); + F2.extend('F2.TestObj', { + foo: 'foo' + }); + expect(F2.TestObj).toEqual({ + foo: 'bar' + }); + }); + + it('should overwrite properties', function() { + F2.extend('F2.TestObj', { + foo: 'bar' + }); + F2.extend('F2.TestObj', { + foo: 'foo' + }, true); + expect(F2.TestObj).toEqual({ + foo: 'foo' + }); + }); }); describe('F2.guid', function() { - it('should not produce equal guids', function() { - expect(F2.guid()).not.toMatch(F2.guid()); - }); + it('should not produce equal guids', function() { + expect(F2.guid()).not.toMatch(F2.guid()); + }); }); describe('F2.inArray', function() { - it('returns true if an item is in the array', function() { - expect(F2.inArray(1, [3, 2, 1])).toBeTruthy(); - }); + it('returns true if an item is in the array', function() { + expect(F2.inArray(1, [3, 2, 1])).toBeTruthy(); + }); - it('returns false if an item is not in the array', function() { - expect(F2.inArray(1, [7, 8, 9])).toBeFalsy(); - }); + it('returns false if an item is not in the array', function() { + expect(F2.inArray(1, [7, 8, 9])).toBeFalsy(); + }); }); describe('F2.parse', function() { - it('should parse a json object', function() { - expect(F2.parse('{"foo":"bar"}')).toEqual({ foo: 'bar' }); - }); + it('should parse a json object', function() { + expect(F2.parse('{"foo":"bar"}')).toEqual({ + foo: 'bar' + }); + }); }); describe('F2.stringify', function() { - it('should convert an object to a json string', function() { - expect(F2.stringify({ foo: 'bar' })).toMatch('{"foo":"bar"}'); - }); + it('should convert an object to a json string', function() { + expect(F2.stringify({ + foo: 'bar' + })).toMatch('{"foo":"bar"}'); + }); -}); \ No newline at end of file +}); diff --git a/tests/spec/spec-helpers.js b/tests/spec/spec-helpers.js index 6b77bf31..e4b73bde 100644 --- a/tests/spec/spec-helpers.js +++ b/tests/spec/spec-helpers.js @@ -1,92 +1,80 @@ -var TEST_MANIFEST_URL = 'http://localhost:8080/F2/apps/test/hello-world', - TEST_APP_ID = 'com_openf2_examples_javascript_helloworld', - TEST_MANIFEST_URL2 = 'http://localhost:8080/F2/apps/test/market-news', - TEST_APP_ID2 = 'com_openf2_examples_csharp_marketnews', - TEST_MANIFEST_URL_HTTP_POST = 'http://localhost:8080/F2/apps/test/http-post' - TEST_MANIFEST_URL3 = 'http://localhost:8080/F2/apps/test/hello-world-node', - TEST_APP_ID3 = 'com_openf2_examples_nodejs_helloworld' -; +var TEST_MANIFEST_URL = 'http://localhost:8080/F2/apps/test/hello-world'; +var TEST_APP_ID = 'com_openf2_examples_javascript_helloworld'; +var TEST_MANIFEST_URL2 = 'http://localhost:8080/F2/apps/test/market-news'; +var TEST_APP_ID2 = 'com_openf2_examples_csharp_marketnews'; +var TEST_MANIFEST_URL_HTTP_POST = 'http://localhost:8080/F2/apps/test/http-post'; +var TEST_MANIFEST_URL3 = 'http://localhost:8080/F2/apps/test/hello-world-node'; +var TEST_APP_ID3 = 'com_openf2_examples_nodejs_helloworld'; -/** - * Addition to Jasmine Async that reloads F2 - */ +// Addition to Jasmine Async that reloads F2 AsyncSpec.prototype.beforeEachReloadF2 = function(callback) { - this.beforeEach(function(done) { - window.F2 = null; - window.F2 = window.F2 || { Apps:{} }; - $.ajax({ - url: '../dist/f2.min.js', - dataType: 'script', - complete: function() { - callback && callback(); - done(); - } - }); - }); + this.beforeEach(function(done) { + window.F2 = null; + window.F2 = window.F2 || { + Apps: {} + }; + $.ajax({ + url: '../dist/f2.min.js', + dataType: 'script', + complete: function() { + callback && callback(); + done(); + } + }); + }); }; -/** - * - */ -itConditionally = function(condition, desc, func) { - if (condition) { - return jasmine.getEnv().it(desc, func); - } else { - var el = document.getElementById('tests-skipped'); - var count = Number(el.getAttribute('data-count')) + 1; - el.innerHTML = 'Skipping ' + count + ' spec' + ((count > 1) ? 's' : ''); - el.setAttribute('data-count', count); - el.style.display = 'block'; - return jasmine.getEnv().xit(desc, func); - } -}; +function itConditionally(condition, desc, func) { + if (condition) { + return jasmine.getEnv().it(desc, func); + } else { + var el = document.getElementById('tests-skipped'); + var count = Number(el.getAttribute('data-count')) + 1; + el.innerHTML = 'Skipping ' + count + ' spec' + ((count > 1) ? 's' : ''); + el.setAttribute('data-count', count); + el.style.display = 'block'; + return jasmine.getEnv().xit(desc, func); + } +} -/** - * Clean out the test fixture before each spec - */ +// Clean out the test fixture before each spec beforeEach(function() { - $('#test-fixture').empty(); + $('#test-fixture').empty(); }); -/** - * Adds .toLog matcher for checking for F2.log messages - */ +// Adds .toLog matcher for checking for F2.log messages beforeEach(function() { + this.addMatchers({ + toLog: function(expectedMessage) { + // Copy F2.log before overriding + var log = F2.log; + var result = false; + var suite = this; + var passedMessage; - this.addMatchers({ - - toLog: function(expectedMessage) { - - // copy F2.log before overriding - var log = F2.log; - var result = false; - var suite = this; - var passedMessage; - - F2.log = function(message) { - passedMessage = message; - }; - - // fire the test function which should call the F2.log override above - suite.actual(); + F2.log = function(message) { + passedMessage = message; + }; - result = passedMessage == expectedMessage; + // Fire the test function which should call the F2.log override above + suite.actual(); - if (!result) { - suite.message = function() { - if (!passedMessage) { - return 'Expected function ' + (suite.isNot ? 'not' : '') + 'to pass \'' + expectedMessage + '\' to F2.log, but nothing was passed.'; - } else { - return 'Expected function ' + (suite.isNot ? 'not' : '') + 'to pass \'' + expectedMessage + '\' to F2.log, but \'' + passedMessage + '\' was passed.'; - } - }; - } + result = passedMessage == expectedMessage; - // return F2.log to its original state - F2.log = log; + if (!result) { + suite.message = function() { + if (!passedMessage) { + return 'Expected function ' + (suite.isNot ? 'not' : '') + 'to pass \'' + expectedMessage + '\' to F2.log, but nothing was passed.'; + } else { + return 'Expected function ' + (suite.isNot ? 'not' : '') + 'to pass \'' + expectedMessage + '\' to F2.log, but \'' + passedMessage + '\' was passed.'; + } + }; + } - return result; - } + // Return F2.log to its original state + F2.log = log; - }); + return result; + } + }); }); From e7ad105491afcdc9413fd13aba9d38a0b3923ab7 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 12:25:24 -0700 Subject: [PATCH 28/61] Fixing test whitespace & formatting --- examples/apps/JavaScript/CDS/app.css | 28 +- examples/apps/JavaScript/CDS/appclass.js | 487 ++++++----- examples/apps/JavaScript/CDS/manifest.js | 64 +- examples/apps/JavaScript/Chart/app.css | 6 +- examples/apps/JavaScript/Chart/appclass.js | 652 +++++++------- examples/apps/JavaScript/Chart/manifest.js | 34 +- .../apps/JavaScript/CompareTool/appclass.js | 28 +- .../JavaScript/CompareTool/css/compare.css | 100 +-- .../apps/JavaScript/CompareTool/js/compare.js | 357 ++++---- .../apps/JavaScript/CompareTool/manifest.js | 102 +-- .../apps/JavaScript/HelloWorld/appclass.js | 116 ++- .../apps/JavaScript/HelloWorld/manifest.js | 36 +- .../JavaScript/HelloWorldLocale/appclass.js | 105 ++- .../JavaScript/HelloWorldLocale/manifest.js | 40 +- examples/apps/JavaScript/Quote/app.css | 20 +- examples/apps/JavaScript/Quote/appclass.js | 558 ++++++------ examples/apps/JavaScript/Quote/manifest.js | 126 +-- .../apps/JavaScript/Watchlist/appclass.js | 795 +++++++++--------- .../apps/JavaScript/Watchlist/manifest.js | 88 +- .../apps/JavaScript/Watchlist/watchlist.css | 16 +- examples/container-amd/js/appSelector.js | 189 ++--- examples/container-amd/js/main.js | 451 +++++----- examples/container-amd/js/sampleApps.js | 158 ++-- examples/container-amd/js/secure.js | 95 ++- examples/container-amd/js/storage.js | 137 +-- examples/container-amd/secure.html | 52 +- examples/container-autoload/index.html | 108 +-- examples/container-locale/js/examples.js | 189 ++--- examples/container-locale/js/sampleApps.js | 174 ++-- examples/container-locale/js/storage.js | 160 ++-- examples/container-locale/secure.html | 92 +- examples/container/js/container.js | 354 ++++---- examples/container/js/examples.js | 184 ++-- examples/container/js/sampleApps.js | 158 ++-- examples/container/js/storage.js | 122 +-- examples/index.html | 6 +- 36 files changed, 3222 insertions(+), 3165 deletions(-) diff --git a/examples/apps/JavaScript/CDS/app.css b/examples/apps/JavaScript/CDS/app.css index a83c739a..c215700e 100644 --- a/examples/apps/JavaScript/CDS/app.css +++ b/examples/apps/JavaScript/CDS/app.css @@ -1,29 +1,39 @@ -.com_openf2_examples_javascript_cds h5 {margin-bottom: 0;} +.com_openf2_examples_javascript_cds h5 { + margin-bottom: 0; +} + +.com_openf2_examples_javascript_cds .table th { + white-space: nowrap; + line-height: 13px; +} -.com_openf2_examples_javascript_cds .table th{white-space: nowrap; line-height: 13px;} .com_openf2_examples_javascript_cds .table th, .com_openf2_examples_javascript_cds .table td { - text-align: right; + text-align: right; } .com_openf2_examples_javascript_cds .table th.first, .com_openf2_examples_javascript_cds .table td.first { - text-align: left; + text-align: left; } .com_openf2_examples_javascript_cds .pos { - color:green; + color:green; } .com_openf2_examples_javascript_cds .neg { - color:red; + color:red; } .com_openf2_examples_javascript_cds table table { - font-size: 85%; + font-size: 85%; } .com_openf2_examples_javascript_cds table table tr { - cursor: text; + cursor: text; +} + +.com_openf2_examples_javascript_cds p { + line-height: 13px; + color: #8F8F8F; } -.com_openf2_examples_javascript_cds p {line-height: 13px; color: #8F8F8F;} \ No newline at end of file diff --git a/examples/apps/JavaScript/CDS/appclass.js b/examples/apps/JavaScript/CDS/appclass.js index b017fe3d..1cb92f8d 100644 --- a/examples/apps/JavaScript/CDS/appclass.js +++ b/examples/apps/JavaScript/CDS/appclass.js @@ -1,247 +1,244 @@ -F2.Apps['com_openf2_examples_javascript_cds'] = (function (appConfig, appContent, root) { - - (function(){ - //http://javascript.crockford.com/remedial.html - String.prototype.supplant = function(o) { - return this.replace(/{([^{}]*)}/g, - function(a, b) { - var r = o[b]; - return typeof r === 'string' || typeof r === 'number' ? r : a; - } - ); - }; - })(); - - var App = function(appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.root = root; - this.$root = $(root); - this.$settings = $('form[data-f2-view="settings"]', this.$root); - this.ui = this.appConfig.ui; - this.settings = { - allowExternalAdd: false - }; +F2.Apps['com_openf2_examples_javascript_cds'] = (function(appConfig, appContent, root) { + + (function() { + // http://javascript.crockford.com/remedial.html + String.prototype.supplant = function(o) { + return this.replace(/{([^{}]*)}/g, function(a, b) { + var r = o[b]; + return typeof r === 'string' || typeof r === 'number' ? r : a; + }); }; - - App.prototype.init = function() { - this.ui.showMask(this.root); - this.getData(); - this.initEvents(); + })(); + + var App = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.root = root; + this.$root = $(root); + this.$settings = $('form[data-f2-view="settings"]', this.$root); + this.ui = this.appConfig.ui; + this.settings = { + allowExternalAdd: false }; - - App.prototype.COOKIE_NAME = "F2_Examples_CDS"; - - App.prototype.ROW = [ - '', - '', - '{name}', - '', - '{spread}', - '{changePct}', - '' - ].join(''); - - App.prototype.data = []; - - App.prototype.initEvents = function(){ - - // bind save settings - this.$root.on("click", "button.save", $.proxy(function(){ - this._saveSettings(); - },this)); - - this.ui.Views.change($.proxy(function(view) { - if (view === F2.Constants.Views.SETTINGS) { - this._populateSettings(); - } - },this)); - }; - - App.prototype._saveSettings = function(){ - this.settings.allowExternalAdd = $('input[name=allowExternalAdd]', this.$settings).is(':checked'); - this.ui.Views.change(F2.Constants.Views.HOME); - }; - - App.prototype._populateSettings = function(){ - $('input[name=allowExternalAdd]', this.$settings).attr('checked', this.settings.alltableswithkeys); - } - - App.prototype._supportsLocalStorage = function(){ - return (typeof(Storage) !== "undefined"); - }; - - App.prototype.drawTable = function(rTighteners, rWideners){ - var TightenerTable = [], WidenerTable = [], TableHeading = [], self = this; - - TableHeading.push( - '', - '', - '', - '', - '', - '', - '', - '', - '' - ); - - TightenerTable = TightenerTable.concat(TableHeading); - TightenerTable.push( - rTighteners, - '', - '
NameSpread (bps)1 Day
% Change
' - ); - WidenerTable = WidenerTable.concat(TableHeading); - WidenerTable.push( - rWideners, - '', - '' - ); - - $("div.cdsMovers", this.root).html([ - '
Global Daily Tighteners (five-year CDS)
', - TightenerTable.join(''), - '
Global Daily Wideners (five-year CDS)
', - WidenerTable.join('')].join('') - ); - - this.ui.updateHeight(); - this.ui.hideMask(this.root); - }; - - App.prototype.drawCDSList = function(bTighteners, cdsData){ - - var label = bTighteners ? "Tightener" : "Widener"; - var rRows = [], self = this; - - if (cdsData.length < 1){ - rRows.push('CDS '+label+' data unavailable.') - } else { - $.each(cdsData, function(idx,item){ - - item = item || {}; - - if(self.CloseDate == null && item.PrettyDate != null){ - self.CloseDate = item.PrettyDate; - $('p.cdsDate span', self.root).html(self.CloseDate); - } - - var cdsData = { - name: item.LongName, - spread: CDSAppFormat.bps(item.ConvSpread), - changePct: CDSAppFormat.addColorPercent(item.DailyPercentChange) - }; - - rRows.push(self.ROW.supplant(cdsData)); - }); - } - - return rRows.join(''); - }; - - App.prototype.CloseDate = null; - - App.prototype.getData = function(){ - - var rTightenerData = [], rWidenerData = []; - var _url = "http://dev.markitondemand.com/Api/SovereignCDSMovers/jsonp"; - $.ajax({ - url: _url, - data: { - tightenersOnly: 1 - }, - dataType: "jsonp", - context: this - }).done(function(jqxhr){ - rTightenerData.push(this.drawCDSList(true, jqxhr.Data || [])); - $.ajax({ - url: _url, - data: { - tightenersOnly: 0 - }, - dataType: "jsonp", - context: this - }).done(function(jqxhr2){ - rWidenerData.push(this.drawCDSList(false, jqxhr2.Data || [])); - }).fail(function(jqxh2r){ - F2.log("OOPS. CDS Wideners data was unavailable."); - rWidenerData.push(this.drawCDSList(false, [])); - }).always(function(){ - this.drawTable(rTightenerData,rWidenerData); - }); - }).fail(function(jqxhr){ - F2.log("OOPS. CDS Tighteners data was unavailable."); - rTightenerData.push(this.drawCDSList(true,[])); - rWidenerData.push(this.drawCDSList(false, [])); - this.drawTable(rTightenerData,rWidenerData); - }); - }; - - /** - * Number format helpers - */ - CDSAppFormat = function(){ - this.magnitudes = { - shortcap : ["", "K", "M", "B", "T"] - }; - } - - CDSAppFormat.prototype.getMagnitude = function(numDigits,value,type) { - value = Math.abs(value); - var c = 0; - while (value >= 1000 && c < 4) { - value /= 1000; - c++; - } - value = value.toFixed(numDigits); - return value + this.magnitudes[type][c]; - } - - CDSAppFormat.prototype.lastPrice = function(value){ - value = Number(value); - value = value.toFixed(2); - return "$" + value; - } - - CDSAppFormat.prototype.bps = function(value){ - value = Number(value); - value = value.toFixed(2); - return value; - } - - CDSAppFormat.prototype.addColorPercent = function(value){ - if(value && !isNaN(value) && isFinite(value)){ - if (value > 0){ - return "" + value.toFixed(2) + "%"; - } else { - return "" + value.toFixed(2) + "%"; - } - } - return value.toFixed(2) + '%'; - } - - CDSAppFormat.prototype.comma = function(value) { - value = String(value); - if (value.length < 6 && value.indexOf(".") > -1) { - return value; - } else { - x = value.split('.'); - x1 = x[0]; - x2 = x.length > 1 ? '.' + x[1] : ''; - var rgx = /(\d+)(\d{3})/; - while (rgx.test(x1)) { - x1 = x1.replace(rgx, '$1' + ',' + '$2'); - } - return x1 + x2; - } - } - - CDSAppFormat = new CDSAppFormat(); - /** - * end number formatting helpers - */ - - return App; - -})(); \ No newline at end of file + }; + + App.prototype.init = function() { + this.ui.showMask(this.root); + this.getData(); + this.initEvents(); + }; + + App.prototype.COOKIE_NAME = "F2_Examples_CDS"; + + App.prototype.ROW = [ + '', + '', + '{name}', + '', + '{spread}', + '{changePct}', + '' + ].join(''); + + App.prototype.data = []; + + App.prototype.initEvents = function() { + // bind save settings + this.$root.on("click", "button.save", $.proxy(function() { + this._saveSettings(); + }, this)); + + this.ui.Views.change($.proxy(function(view) { + if (view === F2.Constants.Views.SETTINGS) { + this._populateSettings(); + } + }, this)); + }; + + App.prototype._saveSettings = function() { + this.settings.allowExternalAdd = $('input[name=allowExternalAdd]', this.$settings).is(':checked'); + this.ui.Views.change(F2.Constants.Views.HOME); + }; + + App.prototype._populateSettings = function() { + $('input[name=allowExternalAdd]', this.$settings).attr('checked', this.settings.alltableswithkeys); + } + + App.prototype._supportsLocalStorage = function() { + return (typeof (Storage) !== "undefined"); + }; + + App.prototype.drawTable = function(rTighteners, rWideners) { + var TightenerTable = [], + WidenerTable = [], + TableHeading = [], + self = this; + + TableHeading.push( + '', + '', + '', + '', + '', + '', + '', + '', + '' + ); + + TightenerTable = TightenerTable.concat(TableHeading); + TightenerTable.push( + rTighteners, + '', + '
NameSpread (bps)1 Day
% Change
' + ); + WidenerTable = WidenerTable.concat(TableHeading); + WidenerTable.push( + rWideners, + '', + '' + ); + + $("div.cdsMovers", this.root).html([ + '
Global Daily Tighteners (five-year CDS)
', + TightenerTable.join(''), + '
Global Daily Wideners (five-year CDS)
', + WidenerTable.join('') + ].join('')); + + this.ui.updateHeight(); + this.ui.hideMask(this.root); + }; + + App.prototype.drawCDSList = function(bTighteners, cdsData) { + var label = bTighteners ? "Tightener" : "Widener"; + var rRows = []; + var self = this; + + if (cdsData.length < 1) { + rRows.push('CDS ' + label + ' data unavailable.') + } else { + $.each(cdsData, function(idx, item) { + + item = item || {}; + + if (self.CloseDate == null && item.PrettyDate != null) { + self.CloseDate = item.PrettyDate; + $('p.cdsDate span', self.root).html(self.CloseDate); + } + + var cdsData = { + name: item.LongName, + spread: CDSAppFormat.bps(item.ConvSpread), + changePct: CDSAppFormat.addColorPercent(item.DailyPercentChange) + }; + + rRows.push(self.ROW.supplant(cdsData)); + }); + } + + return rRows.join(''); + }; + + App.prototype.CloseDate = null; + + App.prototype.getData = function() { + + var rTightenerData = []; + var rWidenerData = []; + var _url = "http://dev.markitondemand.com/Api/SovereignCDSMovers/jsonp"; + + $.ajax({ + url: _url, + data: { + tightenersOnly: 1 + }, + dataType: "jsonp", + context: this + }).done(function(jqxhr) { + rTightenerData.push(this.drawCDSList(true, jqxhr.Data || [])); + $.ajax({ + url: _url, + data: { + tightenersOnly: 0 + }, + dataType: "jsonp", + context: this + }).done(function(jqxhr2) { + rWidenerData.push(this.drawCDSList(false, jqxhr2.Data || [])); + }).fail(function(jqxh2r) { + F2.log("OOPS. CDS Wideners data was unavailable."); + rWidenerData.push(this.drawCDSList(false, [])); + }).always(function() { + this.drawTable(rTightenerData, rWidenerData); + }); + }).fail(function(jqxhr) { + F2.log("OOPS. CDS Tighteners data was unavailable."); + rTightenerData.push(this.drawCDSList(true, [])); + rWidenerData.push(this.drawCDSList(false, [])); + this.drawTable(rTightenerData, rWidenerData); + }); + }; + + CDSAppFormat = function() { + this.magnitudes = { + shortcap: ["", "K", "M", "B", "T"] + }; + } + + CDSAppFormat.prototype.getMagnitude = function(numDigits, value, type) { + value = Math.abs(value); + var c = 0; + while (value >= 1000 && c < 4) { + value /= 1000; + c++; + } + value = value.toFixed(numDigits); + return value + this.magnitudes[type][c]; + } + + CDSAppFormat.prototype.lastPrice = function(value) { + value = Number(value); + value = value.toFixed(2); + return "$" + value; + } + + CDSAppFormat.prototype.bps = function(value) { + value = Number(value); + value = value.toFixed(2); + return value; + } + + CDSAppFormat.prototype.addColorPercent = function(value) { + if (value && !isNaN(value) && isFinite(value)) { + if (value > 0) { + return "" + value.toFixed(2) + "%"; + } else { + return "" + value.toFixed(2) + "%"; + } + } + return value.toFixed(2) + '%'; + } + + CDSAppFormat.prototype.comma = function(value) { + value = String(value); + + if (value.length < 6 && value.indexOf(".") > -1) { + return value; + } else { + x = value.split('.'); + x1 = x[0]; + x2 = x.length > 1 ? '.' + x[1] : ''; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(x1)) { + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + } + return x1 + x2; + } + } + + CDSAppFormat = new CDSAppFormat(); + + return App; + +})(); diff --git a/examples/apps/JavaScript/CDS/manifest.js b/examples/apps/JavaScript/CDS/manifest.js index f5566430..84581e5d 100644 --- a/examples/apps/JavaScript/CDS/manifest.js +++ b/examples/apps/JavaScript/CDS/manifest.js @@ -1,33 +1,33 @@ F2_jsonpCallback_com_openf2_examples_javascript_cds({ - "scripts":[ - "../apps/JavaScript/CDS/appclass.js" - ], - "styles":[ - "../apps/JavaScript/CDS/app.css" - ], - "apps":[ - { - "html":[ - '
', - '
', - '

', - '', - '

', - '
', - '

', - 'Falling (or narrowing) spreads indicate the perceived risk of default is falling. Rising (or widening) spreads indicate the perceived risk of default is rising.', - '

', - '

', - 'All CDS are denominated in U.S. Dollars except U.S. sovereigns, which are in Euros.', - '

', - '
', - '
', - '

About

', - '

CDS Sovereign Big Movers v 1.0

', - '

« Back', - '

', - '
' - ].join("") - } - ] -}) \ No newline at end of file + "scripts":[ + "../apps/JavaScript/CDS/appclass.js" + ], + "styles":[ + "../apps/JavaScript/CDS/app.css" + ], + "apps":[ + { + "html":[ + '
', + '
', + '

', + '', + '

', + '
', + '

', + 'Falling (or narrowing) spreads indicate the perceived risk of default is falling. Rising (or widening) spreads indicate the perceived risk of default is rising.', + '

', + '

', + 'All CDS are denominated in U.S. Dollars except U.S. sovereigns, which are in Euros.', + '

', + '
', + '
', + '

About

', + '

CDS Sovereign Big Movers v 1.0

', + '

« Back', + '

', + '
' + ].join("") + } + ] +}) diff --git a/examples/apps/JavaScript/Chart/app.css b/examples/apps/JavaScript/Chart/app.css index 33a63594..9d249030 100644 --- a/examples/apps/JavaScript/Chart/app.css +++ b/examples/apps/JavaScript/Chart/app.css @@ -1,7 +1,7 @@ .com_openf2_examples_javascript_chart .btn-group { - margin-bottom: 10px; + margin-bottom: 10px; } .com_openf2_examples_javascript_chart #f2-1year-chart { - height:234px; -} \ No newline at end of file + height:234px; +} diff --git a/examples/apps/JavaScript/Chart/appclass.js b/examples/apps/JavaScript/Chart/appclass.js index 0e2a41a5..b8875c6f 100644 --- a/examples/apps/JavaScript/Chart/appclass.js +++ b/examples/apps/JavaScript/Chart/appclass.js @@ -1,351 +1,349 @@ -F2.Apps["com_openf2_examples_javascript_chart"] = (function(){ +F2.Apps["com_openf2_examples_javascript_chart"] = (function() { - var app = function (appConfig, appContent, root) { - this.symbol = "MSFT"; - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = this.appConfig.ui; - this.root = root; - this.$root = $(root); - this.$app = $("#f2-1year-chart", this.$root); - //set configuration - this.config(); - }; + var app = function(appConfig, appContent, root) { + this.symbol = "MSFT"; + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = this.appConfig.ui; + this.root = root; + this.$root = $(root); + this.$app = $("#f2-1year-chart", this.$root); + this.config(); + }; - app.prototype.config = function() { + app.prototype.config = function() { - var defaults = { - backgroundColor: '#fff', - lineColor: '#428bca', - lineWidth: 1.5, - gridColor: '#DDDDDD', - gridAltColor: '#F7F7F7', - fontColor: '#444444', - fontFamily: 'Arial, sans-serif', - fontSize: 12, - lineHeight: 1.2, - greenBar: '#2EA94F', - redBar: '#DB411C' - }, - styleImport = (this.appConfig.context && this.appConfig.context.style)?this.appConfig.context.style:{}; + var defaults = { + backgroundColor: '#fff', + lineColor: '#428bca', + lineWidth: 1.5, + gridColor: '#DDDDDD', + gridAltColor: '#F7F7F7', + fontColor: '#444444', + fontFamily: 'Arial, sans-serif', + fontSize: 12, + lineHeight: 1.2, + greenBar: '#2EA94F', + redBar: '#DB411C' + }; + var styleImport = (this.appConfig.context && this.appConfig.context.style) ? this.appConfig.context.style : {}; - /** for example purposes*/ - console.group('Chart app'); - console.info('The chart app (com_openf2_examples_javascript_chart) has configuration options which can be overriden by using Context. Set a "style" property in the AppConfig\'s Context property. The current AppConfig is on the next line.'); - console.info(this.appConfig); - console.info('The chart\'s configuration parameters (defaults) are found in the following hash'); - console.info(defaults); - console.groupEnd(); + /** for example purposes*/ + console.group('Chart app'); + console.info('The chart app (com_openf2_examples_javascript_chart) has configuration options which can be overriden by using Context. Set a "style" property in the AppConfig\'s Context property. The current AppConfig is on the next line.'); + console.info(this.appConfig); + console.info('The chart\'s configuration parameters (defaults) are found in the following hash'); + console.info(defaults); + console.groupEnd(); - this.CHT_CONTAINER = 'f2-1year-chart'; - this.CHART_STYLES = $.extend({},defaults,styleImport); - }; + this.CHT_CONTAINER = 'f2-1year-chart'; + this.CHART_STYLES = $.extend({}, defaults, styleImport); + }; - app.prototype.redraw = function(data) { - this.hc = null; - this.symbol = data.symbol; - this.getData(); - }; + app.prototype.redraw = function(data) { + this.hc = null; + this.symbol = data.symbol; + this.getData(); + }; - app.prototype.init = function() { - - this.getData(); + app.prototype.init = function() { - //setup container symbol change listener to draw new chart. - F2.Events.on(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, $.proxy(function(symbolData){ - this.redraw(symbolData); - },this) - ); - }; + this.getData(); - app.prototype.getData = function() { + //setup container symbol change listener to draw new chart. + F2.Events.on(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, $.proxy(function(symbolData) { + this.redraw(symbolData); + }, this)); + }; - this.ui.showMask(this.$root,true); + app.prototype.getData = function() { - $.ajax({ - beforeSend:function () { - this.ui.setTitle('Loading chart...'); - }, - data: { - symbol: this.symbol, - duration: 365 // Fixed to one year - }, - url: 'http://dev.markitondemand.com/Api/Timeseries/jsonp', - dataType: 'jsonp', - context: this - - }).done(function(jqxhr,txtStatus){ - //Catch errors - if ( !jqxhr.Data || jqxhr.Message ) { - if ( typeof console == 'object' ) console.error('Error: ', jqxhr.Message); - this._chartError(jqxhr); - return; - } - this.HandleAPIData(jqxhr); + this.ui.showMask(this.$root, true); - }).fail(function(jqxhr,txtStatus){ - F2.log('Could not generate chart.', jqxhr); - this._chartError(jqxhr); - }); - }; + $.ajax({ + beforeSend: function() { + this.ui.setTitle('Loading chart...'); + }, + data: { + symbol: this.symbol, + duration: 365 // Fixed to one year + }, + url: 'http://dev.markitondemand.com/Api/Timeseries/jsonp', + dataType: 'jsonp', + context: this - app.prototype._chartError = function(jqxhr) { - F2.log("Price Chart Error", jqxhr); - this.ui.setTitle("Chart Error"); - this.$app.html("

An error occurred loading price data for " +this.symbol+ ".

"); - this.ui.hideMask(this.$root); - this.ui.updateHeight(); - }; + }).done(function(jqxhr, txtStatus) { + //Catch errors + if (!jqxhr.Data || jqxhr.Message) { + if (typeof console == 'object') { + console.error('Error: ', jqxhr.Message); + } + this._chartError(jqxhr); + return; + } + this.HandleAPIData(jqxhr); - + }).fail(function(jqxhr, txtStatus) { + F2.log('Could not generate chart.', jqxhr); + this._chartError(jqxhr); + }); + }; - // Parses API data to provide HighCharts-ready data series for close values, - // additionally deriving up/down month indicators. - // - app.prototype.HandleAPIData = function (json) { + app.prototype._chartError = function(jqxhr) { + F2.log("Price Chart Error", jqxhr); + this.ui.setTitle("Chart Error"); + this.$app.html("

An error occurred loading price data for " + this.symbol + ".

"); + this.ui.hideMask(this.$root); + this.ui.updateHeight(); + }; - $(this.CHT_CONTAINER).empty(); + // Parses API data to provide HighCharts-ready data series for close values, + // additionally deriving up/down month indicators. + app.prototype.HandleAPIData = function(json) { - // Set up vars for first data series - var apiDates = json.Data.SeriesDates, - apiValues = json.Data.Series.close.values, - closeSeriesData = [ ]; - - // Translate API JSON into a HighCharts-format data series - for ( var i = 0; i < apiDates.length; i++ ) { - var dat = new Date(apiDates[i]); - var dateIn = Date.UTC(dat.getFullYear(), dat.getMonth(), dat.getDate()); - var val = apiValues[i]; - closeSeriesData.push([dateIn,val]); - } + $(this.CHT_CONTAINER).empty(); - // Instantiate a new chart with base configuration options (everything but the data) - var hcChartObj = new Highcharts.Chart(this.getBaselineOptions()); - hcChartObj.series[0].setData(closeSeriesData, true); // Set close-values series data - //hcChartObj.setTitle({ text: ('One-year price movement for ' + json.Data.Name).toUpperCase() }); // Set title - hcChartObj.setTitle({ text:'' }); + // Set up vars for first data series + var apiDates = json.Data.SeriesDates; + var apiValues = json.Data.Series.close.values; + var closeSeriesData = []; - this.ui.hideMask(this.$root); - this.ui.setTitle("One-Year Price Movement " + this.symbol); - - // No options setting is available for this, so force the price line to be rounded - $('.highcharts-series path:first', this.root).attr('stroke-linejoin', 'round').attr('stroke-linecap', 'round'); - - // Set up vars for up/down month data series - var currentMonthName, currentJSDate, currentJSUTCDate, currentVal, - upSeriesData = [ ], - downSeriesData = [ ]; - var dataRanges = hcChartObj.yAxis[0].getExtremes(); // Will need to reset to this later - minVal = dataRanges.min, // Will set red/green indicators to this value - apiValues = json.Data.Series.close.values, - apiDates = json.Data.SeriesDates, - firstMonthName = apiDates[0].substr(4, 3), // First! - prevMonthName = firstMonthName, - prevJSDate = new Date(prevMonthName + ' 1, ' + apiDates[0].substr(-4)), - prevJSUTCDate = Date.UTC(prevJSDate.getFullYear(), prevJSDate.getMonth(), prevJSDate.getDate()), - prevVal = apiValues[0]; - - // Now walk through all data points again (had to do it once before to get the ranges), - // looking for month boundaries and deciding if the previous month ended up or down over - // the preceding month's close - for ( var i = 1; i < apiDates.length; i++ ) { - currentMonthName = apiDates[i].substr(4, 3); - if ( currentMonthName != prevMonthName ) { // Into a new month in the data - currentVal = apiValues[i - 1]; // Last close in the preceding month - currentJSDate = new Date(currentMonthName + ' 1, ' + apiDates[i].substr(-4)); - currentJSUTCDate = Date.UTC(currentJSDate.getFullYear(), currentJSDate.getMonth(), currentJSDate.getDate()); - if ( prevMonthName != firstMonthName ) { // Skip the first month, it's incomplete - if ( currentVal >= prevVal ) { - upSeriesData.push( [ prevJSUTCDate, minVal ], [ currentJSUTCDate, minVal ] ); - downSeriesData.push( [ currentJSUTCDate, null ] ); - } - else { - downSeriesData.push( [ prevJSUTCDate, minVal ], [ currentJSUTCDate, minVal ] ); - upSeriesData.push( [ currentJSUTCDate, null ] ); - } - } - prevVal = currentVal; - prevMonthName = currentMonthName; - prevJSUTCDate = currentJSUTCDate; - } - } - // Add one last interval for the partial month-to-date - currentVal = apiValues[i - 1]; // Last close value in the data - currentJSDate = new Date(apiDates[i - 1]); - currentJSUTCDate = Date.UTC(currentJSDate.getFullYear(), currentJSDate.getMonth(), currentJSDate.getDate()); - if ( currentVal >= prevVal ) upSeriesData.push( [ prevJSUTCDate, minVal ], [ currentJSUTCDate, minVal ] ); - else downSeriesData.push( [ prevJSUTCDate, minVal ], [ currentJSUTCDate, minVal ] ); + // Translate API JSON into a HighCharts-format data series + for (var i = 0; i < apiDates.length; i++) { + var dat = new Date(apiDates[i]); + var dateIn = Date.UTC(dat.getFullYear(), dat.getMonth(), dat.getDate()); + var val = apiValues[i]; + closeSeriesData.push([dateIn, val]); + } - // Add the up month/down month data to the chart's series - hcChartObj.series[1].setData(upSeriesData, false); - hcChartObj.series[2].setData(downSeriesData, false); - - hcChartObj.yAxis[0].setExtremes(dataRanges.dataMin, dataRanges.dataMax, true, false); + // Instantiate a new chart with base configuration options (everything but the data) + var hcChartObj = new Highcharts.Chart(this.getBaselineOptions()); + hcChartObj.series[0].setData(closeSeriesData, true); // Set close-values series data + //hcChartObj.setTitle({ text: ('One-year price movement for ' + json.Data.Name).toUpperCase() }); // Set title + hcChartObj.setTitle({ + text: '' + }); - this.ui.updateHeight(); - }; + this.ui.hideMask(this.$root); + this.ui.setTitle("One-Year Price Movement " + this.symbol); - // Defines the HighCharts configuration options. - // - app.prototype.getBaselineOptions = function () { - return { - chart: { - borderColor: 'rgba(255, 255, 255, 0.0)', - borderRadius: 0, - defaultSeriesType: 'line', - renderTo: this.CHT_CONTAINER, - spacingBottom: 25, - spacingLeft: 1, - spacingRight: 1, - backgroundColor: this.CHART_STYLES.backgroundColor - }, - credits: { - enabled: false - }, - legend: { - enabled: false - }, - plotOptions: { - line: { - animation: false, - lineWidth: this.CHART_STYLES.lineWidth - }, - series: { - marker: { - enabled: false - }, - shadow: false, - states: { - hover: { - enabled: false - } - } - } - }, - series: [{ - color: this.CHART_STYLES.lineColor, - name: 'Close price' - }, - { - color: this.CHART_STYLES.greenBar, - lineWidth: 6, - name: 'Up months' - }, - { - color: this.CHART_STYLES.redBar, - lineWidth: 6, - name: 'Down months' - }], - title: { - align: 'left', - style: { - color: '#666', - fontFamily: this.CHART_STYLES.fontFamily, - fontSize: 14, - fontWeight: 'bold', - lineHeight: this.CHART_STYLES.lineHeight - } - }, - tooltip: { - borderRadius: 1, - crosshairs: true, - formatter: function () { - if ( this.series.name == 'Close price' ) { - return '
' + Highcharts.dateFormat('%b %e %Y', this.x) + ': $' + Highcharts.numberFormat(this.y, 2) + '
'; - } - else return false; - }, - style: { - color: this.CHART_STYLES.fontColor, - fontFamily: this.CHART_STYLES.fontFamily, - fontSize: this.CHART_STYLES.fontSize, - lineHeight: this.CHART_STYLES.lineHeight, - padding: this.CHART_STYLES.fontSize - } - }, - xAxis: [{ // Bottom datetime axis (short intervals) - dateTimeLabelFormats: { - minute: '%l:%M%P', - hour: '%l%P', - day: '%a', - day: '%b %e', - week: '%b %e', - month: '%b', - year: '%Y' - }, - gridLineDashStyle: 'shortdot', - gridLineColor: this.CHART_STYLES.gridAltColor, - gridLineWidth: 1, - labels: { - align: 'left', - style: { - color: this.CHART_STYLES.fontColor, - fontFamily: this.CHART_STYLES.fontFamily, - fontSize: this.CHART_STYLES.fontSize - }, - x: (this.CHART_STYLES.fontSize / 2), - y: (this.CHART_STYLES.fontSize * this.CHART_STYLES.lineHeight * 1.5) - }, - lineColor: this.CHART_STYLES.gridColor, - tickColor: this.CHART_STYLES.gridColor, - tickInterval: (30 * 24 * 3600 * 1000), // One month - tickLength: (this.CHART_STYLES.fontSize * this.CHART_STYLES.lineHeight * 1.5), - type: 'datetime' - },{ // Top datetime axis (longer intervals) - dateTimeLabelFormats: { - day: '%a', // Default - week: '%a', - month: '%b %Y', - year: '%Y' - }, - gridLineWidth: 1, - gridLineColor: this.CHART_STYLES.gridColor, - labels: { - align: 'left', - style: { - color: this.CHART_STYLES.fontColor, - fontFamily: this.CHART_STYLES.fontFamily, - fontSize: this.CHART_STYLES.fontSize - }, - x: (this.CHART_STYLES.fontSize / 2) - }, - lineColor: this.CHART_STYLES.gridColor, - linkedTo: 0, - opposite: true, - tickColor: this.CHART_STYLES.gridColor, - tickInterval: (365 * 24 * 3600 * 1000), // One year - tickLength: (this.CHART_STYLES.fontSize * this.CHART_STYLES.lineHeight), - type: 'datetime' - }], - yAxis: [{ - gridLineColor: this.CHART_STYLES.gridColor, - labels: { - align: 'left', - formatter: function () { - return Highcharts.numberFormat(this.value, 2); - }, - style: { - color: this.CHART_STYLES.fontColor, - fontFamily: this.CHART_STYLES.fontFamily, - fontSize: this.CHART_STYLES.fontSize - }, - x: 0, - y: (this.CHART_STYLES.fontSize + 3) - }, - maxPadding: 0, - minPadding: 0, - opposite: true, - showFirstLabel: false, - tickColor: this.CHART_STYLES.gridColor, - tickLength: 100, // Cropped at left of chart - tickWidth: 1, - title: { - text: '' - } - }] - }; - }; + // No options setting is available for this, so force the price line to be rounded + $('.highcharts-series path:first', this.root).attr('stroke-linejoin', 'round').attr('stroke-linecap', 'round'); - return app; + // Set up vars for up/down month data series + var currentMonthName, currentJSDate, currentJSUTCDate, currentVal; + var upSeriesData = []; + var downSeriesData = []; + var dataRanges = hcChartObj.yAxis[0].getExtremes(); // Will need to reset to this later + minVal = dataRanges.min, // Will set red/green indicators to this value + apiValues = json.Data.Series.close.values, + apiDates = json.Data.SeriesDates, + firstMonthName = apiDates[0].substr(4, 3), // First! + prevMonthName = firstMonthName, + prevJSDate = new Date(prevMonthName + ' 1, ' + apiDates[0].substr(-4)), + prevJSUTCDate = Date.UTC(prevJSDate.getFullYear(), prevJSDate.getMonth(), prevJSDate.getDate()), + prevVal = apiValues[0]; -})(); \ No newline at end of file + // Now walk through all data points again (had to do it once before to get the ranges), + // looking for month boundaries and deciding if the previous month ended up or down over + // the preceding month's close + for (var i = 1; i < apiDates.length; i++) { + currentMonthName = apiDates[i].substr(4, 3); + if (currentMonthName != prevMonthName) { // Into a new month in the data + currentVal = apiValues[i - 1]; // Last close in the preceding month + currentJSDate = new Date(currentMonthName + ' 1, ' + apiDates[i].substr(-4)); + currentJSUTCDate = Date.UTC(currentJSDate.getFullYear(), currentJSDate.getMonth(), currentJSDate.getDate()); + if (prevMonthName != firstMonthName) { // Skip the first month, it's incomplete + if (currentVal >= prevVal) { + upSeriesData.push([prevJSUTCDate, minVal], [currentJSUTCDate, minVal]); + downSeriesData.push([currentJSUTCDate, null]); + } else { + downSeriesData.push([prevJSUTCDate, minVal], [currentJSUTCDate, minVal]); + upSeriesData.push([currentJSUTCDate, null]); + } + } + prevVal = currentVal; + prevMonthName = currentMonthName; + prevJSUTCDate = currentJSUTCDate; + } + } + // Add one last interval for the partial month-to-date + currentVal = apiValues[i - 1]; // Last close value in the data + currentJSDate = new Date(apiDates[i - 1]); + currentJSUTCDate = Date.UTC(currentJSDate.getFullYear(), currentJSDate.getMonth(), currentJSDate.getDate()); + if (currentVal >= prevVal) { + upSeriesData.push([prevJSUTCDate, minVal], [currentJSUTCDate, minVal]); + } else { + downSeriesData.push([prevJSUTCDate, minVal], [currentJSUTCDate, minVal]); + } + + // Add the up month/down month data to the chart's series + hcChartObj.series[1].setData(upSeriesData, false); + hcChartObj.series[2].setData(downSeriesData, false); + + hcChartObj.yAxis[0].setExtremes(dataRanges.dataMin, dataRanges.dataMax, true, false); + + this.ui.updateHeight(); + }; + + // Defines the HighCharts configuration options. + app.prototype.getBaselineOptions = function() { + return { + chart: { + borderColor: 'rgba(255, 255, 255, 0.0)', + borderRadius: 0, + defaultSeriesType: 'line', + renderTo: this.CHT_CONTAINER, + spacingBottom: 25, + spacingLeft: 1, + spacingRight: 1, + backgroundColor: this.CHART_STYLES.backgroundColor + }, + credits: { + enabled: false + }, + legend: { + enabled: false + }, + plotOptions: { + line: { + animation: false, + lineWidth: this.CHART_STYLES.lineWidth + }, + series: { + marker: { + enabled: false + }, + shadow: false, + states: { + hover: { + enabled: false + } + } + } + }, + series: [{ + color: this.CHART_STYLES.lineColor, + name: 'Close price' + }, { + color: this.CHART_STYLES.greenBar, + lineWidth: 6, + name: 'Up months' + }, { + color: this.CHART_STYLES.redBar, + lineWidth: 6, + name: 'Down months' + }], + title: { + align: 'left', + style: { + color: '#666', + fontFamily: this.CHART_STYLES.fontFamily, + fontSize: 14, + fontWeight: 'bold', + lineHeight: this.CHART_STYLES.lineHeight + } + }, + tooltip: { + borderRadius: 1, + crosshairs: true, + formatter: function() { + if (this.series.name == 'Close price') { + return '
' + Highcharts.dateFormat('%b %e %Y', this.x) + ': $' + Highcharts.numberFormat(this.y, 2) + '
'; + } + else return false; + }, + style: { + color: this.CHART_STYLES.fontColor, + fontFamily: this.CHART_STYLES.fontFamily, + fontSize: this.CHART_STYLES.fontSize, + lineHeight: this.CHART_STYLES.lineHeight, + padding: this.CHART_STYLES.fontSize + } + }, + xAxis: [{ // Bottom datetime axis (short intervals) + dateTimeLabelFormats: { + minute: '%l:%M%P', + hour: '%l%P', + day: '%a', + day: '%b %e', + week: '%b %e', + month: '%b', + year: '%Y' + }, + gridLineDashStyle: 'shortdot', + gridLineColor: this.CHART_STYLES.gridAltColor, + gridLineWidth: 1, + labels: { + align: 'left', + style: { + color: this.CHART_STYLES.fontColor, + fontFamily: this.CHART_STYLES.fontFamily, + fontSize: this.CHART_STYLES.fontSize + }, + x: (this.CHART_STYLES.fontSize / 2), + y: (this.CHART_STYLES.fontSize * this.CHART_STYLES.lineHeight * 1.5) + }, + lineColor: this.CHART_STYLES.gridColor, + tickColor: this.CHART_STYLES.gridColor, + tickInterval: (30 * 24 * 3600 * 1000), // One month + tickLength: (this.CHART_STYLES.fontSize * this.CHART_STYLES.lineHeight * 1.5), + type: 'datetime' + }, { // Top datetime axis (longer intervals) + dateTimeLabelFormats: { + day: '%a', // Default + week: '%a', + month: '%b %Y', + year: '%Y' + }, + gridLineWidth: 1, + gridLineColor: this.CHART_STYLES.gridColor, + labels: { + align: 'left', + style: { + color: this.CHART_STYLES.fontColor, + fontFamily: this.CHART_STYLES.fontFamily, + fontSize: this.CHART_STYLES.fontSize + }, + x: (this.CHART_STYLES.fontSize / 2) + }, + lineColor: this.CHART_STYLES.gridColor, + linkedTo: 0, + opposite: true, + tickColor: this.CHART_STYLES.gridColor, + tickInterval: (365 * 24 * 3600 * 1000), // One year + tickLength: (this.CHART_STYLES.fontSize * this.CHART_STYLES.lineHeight), + type: 'datetime' + }], + yAxis: [{ + gridLineColor: this.CHART_STYLES.gridColor, + labels: { + align: 'left', + formatter: function() { + return Highcharts.numberFormat(this.value, 2); + }, + style: { + color: this.CHART_STYLES.fontColor, + fontFamily: this.CHART_STYLES.fontFamily, + fontSize: this.CHART_STYLES.fontSize + }, + x: 0, + y: (this.CHART_STYLES.fontSize + 3) + }, + maxPadding: 0, + minPadding: 0, + opposite: true, + showFirstLabel: false, + tickColor: this.CHART_STYLES.gridColor, + tickLength: 100, // Cropped at left of chart + tickWidth: 1, + title: { + text: '' + } + }] + }; + }; + + return app; + +})(); diff --git a/examples/apps/JavaScript/Chart/manifest.js b/examples/apps/JavaScript/Chart/manifest.js index 214b3754..4a27ac6c 100644 --- a/examples/apps/JavaScript/Chart/manifest.js +++ b/examples/apps/JavaScript/Chart/manifest.js @@ -1,18 +1,18 @@ F2_jsonpCallback_com_openf2_examples_javascript_chart({ - "scripts":[ - "http://code.highcharts.com/highcharts.js", - "../apps/JavaScript/Chart/appclass.js" - ], - "styles":[ - "../apps/JavaScript/Chart/app.css" - ], - "apps":[{ - "html":[ - '
', - '
', - '
', - '
', - '
' - ].join("") - }] -}) \ No newline at end of file + "scripts":[ + "http://code.highcharts.com/highcharts.js", + "../apps/JavaScript/Chart/appclass.js" + ], + "styles":[ + "../apps/JavaScript/Chart/app.css" + ], + "apps":[{ + "html":[ + '
', + '
', + '
', + '
', + '
' + ].join("") + }] +}); diff --git a/examples/apps/JavaScript/CompareTool/appclass.js b/examples/apps/JavaScript/CompareTool/appclass.js index bceaaec8..85d34839 100644 --- a/examples/apps/JavaScript/CompareTool/appclass.js +++ b/examples/apps/JavaScript/CompareTool/appclass.js @@ -1,20 +1,20 @@ F2.Apps["com_openf2_examples_javascript_compareTool"] = (function() { - var App_Class = function(appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = appConfig.ui; - this.$root = $(root); - }; + var App_Class = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = appConfig.ui; + this.$root = $(root); + }; - App_Class.prototype.init = function() { - this.ui.setTitle("Compare Tool (AngularJS)"); - this.ui.updateHeight(); + App_Class.prototype.init = function() { + this.ui.setTitle("Compare Tool (AngularJS)"); + this.ui.updateHeight(); - // Manually bootstrap angular - angular.bootstrap(this.$root, ["compareTool"]); - }; + // Manually bootstrap angular + angular.bootstrap(this.$root, ["compareTool"]); + }; - return App_Class; + return App_Class; -})(); \ No newline at end of file +})(); diff --git a/examples/apps/JavaScript/CompareTool/css/compare.css b/examples/apps/JavaScript/CompareTool/css/compare.css index 5f53e7be..96afa0b8 100644 --- a/examples/apps/JavaScript/CompareTool/css/compare.css +++ b/examples/apps/JavaScript/CompareTool/css/compare.css @@ -1,58 +1,58 @@ .compare form { - margin: 0; + margin: 0; } .compare table { - table-layout: fixed; - margin-bottom: 10px; + table-layout: fixed; + margin-bottom: 10px; } - .compare th, - .compare td { - text-align: right; - } - - .compare th { - font-size: 14px; - font-weight: bold; - width: 17%; - } - - .compare th:first-child { - width: 15% - } - - .compare th span { - display: block; - } - - .compare th a { - font-size: 11px; - } - - .compare th input[type=text] { - font-size: 12px; - margin-bottom: 7px; - width: 85%; - } - - .compare th input[type=submit] { - cursor: pointer; - font-size: 12px; - line-height: 18px; - } - - .compare td { - border: 1px solid #ccc; - } - - .compare td:first-child { - font-weight: bold; - text-align: left; - } + .compare th, + .compare td { + text-align: right; + } + + .compare th { + font-size: 14px; + font-weight: bold; + width: 17%; + } + + .compare th:first-child { + width: 15% + } + + .compare th span { + display: block; + } + + .compare th a { + font-size: 11px; + } + + .compare th input[type=text] { + font-size: 12px; + margin-bottom: 7px; + width: 85%; + } + + .compare th input[type=submit] { + cursor: pointer; + font-size: 12px; + line-height: 18px; + } + + .compare td { + border: 1px solid #ccc; + } + + .compare td:first-child { + font-weight: bold; + text-align: left; + } .compare input[type=text].loading { - background-image: url(../img/ajax_spinner.gif); - background-position: 107px; - background-repeat: no-repeat; -} \ No newline at end of file + background-image: url(../img/ajax_spinner.gif); + background-position: 107px; + background-repeat: no-repeat; +} diff --git a/examples/apps/JavaScript/CompareTool/js/compare.js b/examples/apps/JavaScript/CompareTool/js/compare.js index b92adf3b..9487b3e7 100644 --- a/examples/apps/JavaScript/CompareTool/js/compare.js +++ b/examples/apps/JavaScript/CompareTool/js/compare.js @@ -1,161 +1,200 @@ (function() { - // Filters - // -------------------- - - angular.module("filters", []). - // Add a range of indexes to a collection - // e.g., ng-repeat="indexes in [] | range:10" - filter("range", function() { - return function(input, num) { - for (var i = 0; i < num; i++) { - input.push(i); - } - return input; - }; - }); - - // Services - // -------------------- - - angular.module("services", ["ngResource"]). - // Retrieve quote data for a symbol - service("companyService", function($resource) { - var defaultCallbacks = { success: function() {}, error: function() {}, complete: function() {} }; - - return { - getBySymbol: function(symbol, cbs) { - cbs = angular.extend({}, defaultCallbacks, cbs); - - var query = $resource( - "http://dev.markitondemand.com/Api/Quote/:action", - { action: "jsonp", callback: "JSON_CALLBACK", symbol: symbol }, - { get: { method: "jsonp" } } - ); - - query.get( - function(response) { - if (response.Data) { - cbs.success(response.Data); - } - else { - cbs.error("Invalid symbol"); - } - - cbs.complete(); - }, - function() { - cbs.error(); - cbs.complete(); - } - ); - } - }; - }); - - // Controller - // -------------------- - - var app = angular.module("compareTool", ["filters", "services"]); - - // Compare Controller - app.controller("CompareCtrl", function($scope, $filter, companyService) { - - // The max number of companies the user can compare - var maxSymbols = 5; - - // Define what will be displayed - $scope.dataPoints = [ - { label: "Last Price", field: "LastPrice", format: "currency" }, - { label: "High", field: "High", format: "currency" }, - { label: "Low", field: "Low", format: "currency" }, - { label: "Open", field: "Open", format: "currency" }, - { label: "Market Cap", field: "MarketCap", format: "number" }, - { label: "Volume", field: "Volume", format: "number" }, - { label: "Change", field: "Change", format: "currency" }, - { label: "Change %", field: "ChangePercent", format: "percent:2" }, - { label: "Change YTD", field: "ChangeYTD", format: "currency" }, - { label: "Change % YTD", field: "ChangePercentYTD", format: "percent:2" }, - { label: "Data Refreshed On", field: "Timestamp", format: "date" } - ]; - - // List of symbols we're comparing - // Sample: http://dev.markitondemand.com/Api/Quote/jsonp?symbol=aapl - $scope.issues = []; - - // Get the number of empty compare slots - $scope.numRemaining = function() { - return maxSymbols - $scope.issues.length; - }; - - // Lookup the specified company - $scope.addCompany = function(ticker) { - if ($scope.issues.length < maxSymbols) { - var self = this; - - // Use THIS instead of $scope, because we're actually in the scope - // of the clicked dom element - self.isLoading = true; - - // Grab the symbol data from the service - companyService.getBySymbol(ticker, { - success: function(data) { - $scope.issues.push(data); - self.searchSymbol = ""; - }, - error: function(msg) { - msg = msg || "Sorry, that didn't work for some reason"; - alert(msg); - }, - complete: function() { - self.isLoading = false; - } - }); - } - else { - alert("You're already comparing the maximum number of companies"); - } - }; - - // Pull the company out of comparison - $scope.removeCompany = function(ticker) { - // Remove the symbol - for (var i = 0; i < $scope.issues.length; i++) { - if ($scope.issues[i].Symbol === ticker) { - $scope.issues.splice(i, 1); - break; - } - } - }; - - // Multi-purpose format func - $scope.format = function(value, type) { - var out = value; - - if (type) { - var params = type.split(":"); - type = params[0]; - - switch (type) { - case "percent": - out = value.toFixed(params[1] || 0) + "%"; - break; - case "number": - out = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - break; - case "date": - out = moment(value).format("M/DD/YYYY h:mm:ss A"); - break; - default: - // Use the default angular filter - out = $filter(type)(value); - break; - } - } - - return out; - }; - - }); - -})(); \ No newline at end of file + // Filters + + angular.module("filters", []). + // Add a range of indexes to a collection + // e.g., ng-repeat="indexes in [] | range:10" + filter("range", function() { + return function(input, num) { + for (var i = 0; i < num; i++) { + input.push(i); + } + return input; + }; + }); + + // Services + + angular.module("services", ["ngResource"]). + // Retrieve quote data for a symbol + service("companyService", function($resource) { + var defaultCallbacks = { + success: function() {}, + error: function() {}, + complete: function() {} + }; + + return { + getBySymbol: function(symbol, cbs) { + cbs = angular.extend({}, defaultCallbacks, cbs); + + var query = $resource( + "http://dev.markitondemand.com/Api/Quote/:action", + { + action: "jsonp", + callback: "JSON_CALLBACK", + symbol: symbol + }, + { + get: { + method: "jsonp" + } + } + ); + + query.get(function(response) { + if (response.Data) { + cbs.success(response.Data); + } else { + cbs.error("Invalid symbol"); + } + + cbs.complete(); + }, function() { + cbs.error(); + cbs.complete(); + } + ); + } + }; + }); + + // Controller + + var app = angular.module("compareTool", ["filters", "services"]); + + // Compare Controller + app.controller("CompareCtrl", function($scope, $filter, companyService) { + + // The max number of companies the user can compare + var maxSymbols = 5; + + // Define what will be displayed + $scope.dataPoints = [ + { + label: "Last Price", + field: "LastPrice", + format: "currency" + }, { + label: "High", + field: "High", + format: "currency" + }, { + label: "Low", + field: "Low", + format: "currency" + }, { + label: "Open", + field: "Open", + format: "currency" + }, { + label: "Market Cap", + field: "MarketCap", + format: "number" + }, { + label: "Volume", + field: "Volume", + format: "number" + }, { + label: "Change", + field: "Change", + format: "currency" + }, { + label: "Change %", + field: "ChangePercent", + format: "percent:2" + }, { + label: "Change YTD", + field: "ChangeYTD", + format: "currency" + }, { + label: "Change % YTD", + field: "ChangePercentYTD", + format: "percent:2" + }, { + label: "Data Refreshed On", + field: "Timestamp", + format: "date" + } + ]; + + // List of symbols we're comparing + // Sample: http://dev.markitondemand.com/Api/Quote/jsonp?symbol=aapl + $scope.issues = []; + + // Get the number of empty compare slots + $scope.numRemaining = function() { + return maxSymbols - $scope.issues.length; + }; + + // Lookup the specified company + $scope.addCompany = function(ticker) { + if ($scope.issues.length < maxSymbols) { + var self = this; + + // Use THIS instead of $scope, because we're actually in the scope + // of the clicked dom element + self.isLoading = true; + + // Grab the symbol data from the service + companyService.getBySymbol(ticker, { + success: function(data) { + $scope.issues.push(data); + self.searchSymbol = ""; + }, + error: function(msg) { + msg = msg || "Sorry, that didn't work for some reason"; + alert(msg); + }, + complete: function() { + self.isLoading = false; + } + }); + } else { + alert("You're already comparing the maximum number of companies"); + } + }; + + // Pull the company out of comparison + $scope.removeCompany = function(ticker) { + // Remove the symbol + for (var i = 0; i < $scope.issues.length; i++) { + if ($scope.issues[i].Symbol === ticker) { + $scope.issues.splice(i, 1); + break; + } + } + }; + + // Multi-purpose format func + $scope.format = function(value, type) { + var out = value; + + if (type) { + var params = type.split(":"); + type = params[0]; + + switch (type) { + case "percent": + out = value.toFixed(params[1] || 0) + "%"; + break; + case "number": + out = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + break; + case "date": + out = moment(value).format("M/DD/YYYY h:mm:ss A"); + break; + default: + // Use the default angular filter + out = $filter(type)(value); + break; + } + } + + return out; + }; + + }); + +})(); diff --git a/examples/apps/JavaScript/CompareTool/manifest.js b/examples/apps/JavaScript/CompareTool/manifest.js index b4ab9807..3d06a4b6 100644 --- a/examples/apps/JavaScript/CompareTool/manifest.js +++ b/examples/apps/JavaScript/CompareTool/manifest.js @@ -1,52 +1,52 @@ F2_jsonpCallback_com_openf2_examples_javascript_compareTool({ - "scripts":[ - "../apps/JavaScript/CompareTool/js/angular.min.js", - "../apps/JavaScript/CompareTool/js/angular-resource.min.js", - "../apps/JavaScript/CompareTool/js/moment.min.js", - "../apps/JavaScript/CompareTool/js/compare.js", - "../apps/JavaScript/CompareTool/appclass.js" - ], - "styles":[ - "../apps/JavaScript/CompareTool/css/compare.css" - ], - "apps":[ - { - "html": [ - '
', - '

', - 'Examples: ', - '', - '{{symbol | uppercase}}{{$last && " " || ", "}}', - '', - '

', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '
', - '{{issue.Name}}', - '{{issue.Symbol}}', - 'Remove', - '', - '
', - '', - '', - '
', - '
{{point.label}}{{format(issue[point.field], point.format)}}
', - '

Quotes provided by http://dev.markitondemand.com/

', - '
' - ].join('') - } - ] -}); \ No newline at end of file + "scripts":[ + "../apps/JavaScript/CompareTool/js/angular.min.js", + "../apps/JavaScript/CompareTool/js/angular-resource.min.js", + "../apps/JavaScript/CompareTool/js/moment.min.js", + "../apps/JavaScript/CompareTool/js/compare.js", + "../apps/JavaScript/CompareTool/appclass.js" + ], + "styles":[ + "../apps/JavaScript/CompareTool/css/compare.css" + ], + "apps":[ + { + "html": [ + '
', + '

', + 'Examples: ', + '', + '{{symbol | uppercase}}{{$last && " " || ", "}}', + '', + '

', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
', + '{{issue.Name}}', + '{{issue.Symbol}}', + 'Remove', + '', + '
', + '', + '', + '
', + '
{{point.label}}{{format(issue[point.field], point.format)}}
', + '

Quotes provided by http://dev.markitondemand.com/

', + '
' + ].join('') + } + ] +}); diff --git a/examples/apps/JavaScript/HelloWorld/appclass.js b/examples/apps/JavaScript/HelloWorld/appclass.js index 0c9ac406..39183c2f 100644 --- a/examples/apps/JavaScript/HelloWorld/appclass.js +++ b/examples/apps/JavaScript/HelloWorld/appclass.js @@ -1,62 +1,58 @@ F2.Apps["com_openf2_examples_javascript_helloworld"] = (function() { - var App_Class = function (appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = appConfig.ui; - this.$root = $(root); - }; - - App_Class.prototype.init = function () { - - this.$root - .on('click', 'a.testAlert', $.proxy(function() { - this.ui.Modals.alert("Hello World!", function() { - F2.log('callback fired!'); - }); - }, this)) - .on('click', 'a.testConfirm', $.proxy(function() { - this.ui.Modals.confirm( - "Hello World!", - function() { - F2.log('ok callback fired!'); - }, - function() { - F2.log('cancel callback fired!'); - } - ); - }, this)) - ; - - this.ui.setTitle((this.appConfig.isSecure ? 'Secure' : '') + this.appConfig.name); - this.ui.updateHeight(); - - // bind symbol change event - F2.Events.on(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, $.proxy(this._handleSymbolChange, this)); - }; - - App_Class.prototype._handleSymbolChange = function (data) { - - var symbolAlert = $("div.symbolAlert", this.$root); - symbolAlert = (symbolAlert.length) - ? symbolAlert - : this._renderSymbolAlert(); - - $("span:first", symbolAlert).text("The symbol has been changed to " + data.symbol); - - this.ui.updateHeight(); - }; - - App_Class.prototype._renderSymbolAlert = function() { - - return $([ - '
', - '', - '', - '
' - ].join('')) - .prependTo($("." + F2.Constants.Css.APP_CONTAINER,this.$root)); - }; - - return App_Class; -})(); \ No newline at end of file + var App_Class = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = appConfig.ui; + this.$root = $(root); + }; + + App_Class.prototype.init = function() { + + this.$root + .on('click', 'a.testAlert', $.proxy(function() { + this.ui.Modals.alert("Hello World!", function() { + F2.log('callback fired!'); + }); + }, this)) + .on('click', 'a.testConfirm', $.proxy(function() { + this.ui.Modals.confirm( + "Hello World!", function() { + F2.log('ok callback fired!'); + }, function() { + F2.log('cancel callback fired!'); + } + ); + }, this)); + + this.ui.setTitle((this.appConfig.isSecure ? 'Secure' : '') + this.appConfig.name); + this.ui.updateHeight(); + + // Bind symbol change event + F2.Events.on(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, $.proxy(this._handleSymbolChange, this)); + }; + + App_Class.prototype._handleSymbolChange = function(data) { + + var symbolAlert = $("div.symbolAlert", this.$root); + symbolAlert = (symbolAlert.length) + ? symbolAlert + : this._renderSymbolAlert(); + + $("span:first", symbolAlert).text("The symbol has been changed to " + data.symbol); + + this.ui.updateHeight(); + }; + + App_Class.prototype._renderSymbolAlert = function() { + return $([ + '
', + '', + '', + '
' + ].join('')).prependTo($("." + F2.Constants.Css.APP_CONTAINER, this.$root)); + }; + + return App_Class; + +})(); diff --git a/examples/apps/JavaScript/HelloWorld/manifest.js b/examples/apps/JavaScript/HelloWorld/manifest.js index 042e406c..5d1d2380 100644 --- a/examples/apps/JavaScript/HelloWorld/manifest.js +++ b/examples/apps/JavaScript/HelloWorld/manifest.js @@ -1,19 +1,19 @@ F2_jsonpCallback_com_openf2_examples_javascript_helloworld({ - "scripts":[ - "../apps/JavaScript/HelloWorld/appclass.js" - ], - "styles":[], - "apps":[ - { - "html":[ - '
', - '
', - '

Hello World! Test modals:

', - 'Alert Modal ', - 'Confirm Modal', - '
', - '
' - ].join("") - } - ] -}) \ No newline at end of file + "scripts":[ + "../apps/JavaScript/HelloWorld/appclass.js" + ], + "styles":[], + "apps":[ + { + "html":[ + '
', + '
', + '

Hello World! Test modals:

', + 'Alert Modal ', + 'Confirm Modal', + '
', + '
' + ].join("") + } + ] +}); diff --git a/examples/apps/JavaScript/HelloWorldLocale/appclass.js b/examples/apps/JavaScript/HelloWorldLocale/appclass.js index 1a4014eb..4f28bb93 100644 --- a/examples/apps/JavaScript/HelloWorldLocale/appclass.js +++ b/examples/apps/JavaScript/HelloWorldLocale/appclass.js @@ -1,66 +1,65 @@ F2.Apps["com_openf2_examples_javascript_helloworldlocale"] = (function() { - var App_Class = function (appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.ui = appConfig.ui; - this.$root = $(root); - }; + var App_Class = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.ui = appConfig.ui; + this.$root = $(root); + }; - App_Class.prototype.init = function () { - //set current locale - $('#current_locale',this.$root).html( this.appConfig.containerLocale || 'Not defined in F2.init()' ); - $('#current_locale_date',this.$root).text( this._setCurrentDate(this.appConfig.containerLocale) ); + App_Class.prototype.init = function() { + // Set current locale + $('#current_locale', this.$root).html(this.appConfig.containerLocale || 'Not defined in F2.init()'); + $('#current_locale_date', this.$root).text(this._setCurrentDate(this.appConfig.containerLocale)); - // bind symbol change event - F2.Events.on(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, $.proxy(this._handleSymbolChange, this)); - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, $.proxy(this._handleLocaleChange, this)); - }; + // Bind symbol change event + F2.Events.on(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, $.proxy(this._handleSymbolChange, this)); + F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, $.proxy(this._handleLocaleChange, this)); + }; - App_Class.prototype._handleSymbolChange = function (data) { - - var symbolAlert = $("div.symbolAlert", this.$root); - symbolAlert = (symbolAlert.length) - ? symbolAlert - : this._renderSymbolAlert(); + App_Class.prototype._handleSymbolChange = function(data) { + var symbolAlert = $("div.symbolAlert", this.$root); + symbolAlert = (symbolAlert.length) + ? symbolAlert + : this._renderSymbolAlert(); - $("span:first", symbolAlert).text("The symbol has been changed to " + data.symbol); + $("span:first", symbolAlert).text("The symbol has been changed to " + data.symbol); - this.ui.updateHeight(); - }; + this.ui.updateHeight(); + }; - App_Class.prototype._handleLocaleChange = function (data) { - - //set current locale - $('#current_locale',this.$root).text( data.locale ); + App_Class.prototype._handleLocaleChange = function(data) { + // Set current locale + $('#current_locale', this.$root).text(data.locale); + $('#current_locale_date', this.$root).text(this._setCurrentDate(data.locale)); - $('#current_locale_date',this.$root).text( this._setCurrentDate(data.locale) ); + this.ui.updateHeight(); + }; - this.ui.updateHeight(); - }; + App_Class.prototype._setCurrentDate = function(locale) { + var d = new Date(), formattedDate, + month = []; + month[0] = 'January'; + month[1] = 'February'; + month[2] = 'March'; + month[3] = 'April'; + month[4] = 'May'; + month[5] = 'June'; + month[6] = 'July'; + month[7] = 'August'; + month[8] = 'September'; + month[9] = 'October'; + month[10] = 'November'; + month[11] = 'December'; - App_Class.prototype._setCurrentDate = function(locale) { - var d = new Date(), formattedDate, month = []; - month[0] = 'January'; - month[1] = 'February'; - month[2] = 'March'; - month[3] = 'April'; - month[4] = 'May'; - month[5] = 'June'; - month[6] = 'July'; - month[7] = 'August'; - month[8] = 'September'; - month[9] = 'October'; - month[10] = 'November'; - month[11] = 'December'; + if ('en-gb' == locale) { + formattedDate = d.getDate() + ' ' + month[d.getMonth()] + ' ' + d.getFullYear(); + } else { + formattedDate = month[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear(); + } + return formattedDate; + }; - if ('en-gb' == locale){ - formattedDate = d.getDate() + ' ' + month[ d.getMonth() ] + ' ' + d.getFullYear(); - } else { - formattedDate = month[ d.getMonth() ] + ' ' + d.getDate() + ', ' + d.getFullYear(); - } - return formattedDate; - }; + return App_Class; - return App_Class; -})(); \ No newline at end of file +})(); diff --git a/examples/apps/JavaScript/HelloWorldLocale/manifest.js b/examples/apps/JavaScript/HelloWorldLocale/manifest.js index 18f60e20..9e3e8265 100644 --- a/examples/apps/JavaScript/HelloWorldLocale/manifest.js +++ b/examples/apps/JavaScript/HelloWorldLocale/manifest.js @@ -1,21 +1,21 @@ F2_jsonpCallback_com_openf2_examples_javascript_helloworldlocale({ - "scripts":[ - "../apps/JavaScript/HelloWorldLocale/appclass.js" - ], - "styles":[], - "apps":[ - { - "html":[ - '
', - '
', - '

A simple app demonstrating internationalization (i18n) support in F2.

', - '', - '

Today\'s date—properly formatted for the current locale—is:

', - '', - '

Change region in the "locale" dropdown in the menubar.

', - '
', - '
' - ].join("") - } - ] -}) \ No newline at end of file + "scripts":[ + "../apps/JavaScript/HelloWorldLocale/appclass.js" + ], + "styles":[], + "apps":[ + { + "html":[ + '
', + '
', + '

A simple app demonstrating internationalization (i18n) support in F2.

', + '', + '

Today\'s date—properly formatted for the current locale—is:

', + '', + '

Change region in the "locale" dropdown in the menubar.

', + '
', + '
' + ].join("") + } + ] +}); diff --git a/examples/apps/JavaScript/Quote/app.css b/examples/apps/JavaScript/Quote/app.css index b0c632ae..b9cb2566 100644 --- a/examples/apps/JavaScript/Quote/app.css +++ b/examples/apps/JavaScript/Quote/app.css @@ -1,27 +1,27 @@ .com_openf2_examples_javascript_quote table { - margin:0; + margin:0; } .com_openf2_examples_javascript_quote .table th { - width: 75px; + width: 75px; } .com_openf2_examples_javascript_quote .table td { - text-align: right; - white-space: nowrap; + text-align: right; + white-space: nowrap; } .com_openf2_examples_javascript_quote .last { } .com_openf2_examples_javascript_quote .last-change { - font-size:80%; + font-size:80%; } .com_openf2_examples_javascript_quote .positive { - color: green; + color: green; } .com_openf2_examples_javascript_quote .negative { - color: red; + color: red; } .com_openf2_examples_javascript_quote .input-append { - padding-bottom:7px; - padding-top:7px; -} \ No newline at end of file + padding-bottom:7px; + padding-top:7px; +} diff --git a/examples/apps/JavaScript/Quote/appclass.js b/examples/apps/JavaScript/Quote/appclass.js index 3d0eef27..d2596d13 100644 --- a/examples/apps/JavaScript/Quote/appclass.js +++ b/examples/apps/JavaScript/Quote/appclass.js @@ -1,271 +1,287 @@ -F2.Apps['com_openf2_examples_javascript_quote'] = function (appConfig, appContent, root) { - - var $root = $(root); - var $caption = $('caption', $root); - var $tbody = $('tbody', $root); - var $addToWatchlist = $('a[data-watchlist-add]', $root); - var $settings = $('form[data-f2-view="settings"]', $root); - var _config = { - refreshMode: 'page', - autoRefresh: false - }; - var _autoRefreshInterval = false; - - var _getQuote = function(symbolData) { - - appConfig.ui.showMask($root, true); - - appConfig.context = appConfig.context || {}; - - if (!!symbolData){ - appConfig.context.symbol = symbolData.symbol; - } else if(appConfig.context.symbol) { - appConfig.context.symbol = appConfig.context.symbol; - } else { - appConfig.context.symbol = 'MSFT';//default to Microsoft - } - - $.ajax({ - url: 'http://dev.markitondemand.com/Api/Quote/jsonp', - data: { symbol: appConfig.context.symbol }, - dataType: 'jsonp', - success: _renderQuote, - error: function() { - - }, - complete: function() { - appConfig.ui.hideMask($root); - } - }); - - _getWatchListSymbols() - }; - - var _hasWatchListApp = function() { - return !!$("div.com_openf2_examples_javascript_watchlist").length; - }; - - var _watchListHasSymbol = function(){ - return F2.inArray(appConfig.context.symbol, _getWatchListSymbols()); - }; - - var _getWatchListSymbols = function(){ - var list = []; - $('div.com_openf2_examples_javascript_watchlist tr[data-row]').each(function(idx,item){ - list.push($(item).attr('data-row')) - }); - return list; - } - - var _initTypeahead = function() { - - $('input[name=lookup]', $root) - .autocomplete({ - autoFocus:true, - minLength: 0, - select: function (event, ui) { - //F2.Events.emit(F2.Constants.Events.APP_SYMBOL_CHANGE, { symbol: ui.item.value, name: ui.item.label }); - _getQuote({ symbol: ui.item.value }); - }, - source: function (request, response) { - - $.ajax({ - url: '//dev.markitondemand.com/api/Lookup/jsonp', - dataType: 'jsonp', - data: { - input: request.term - }, - success: function (data) { - response($.map(data, function (item) { - return { - label: item.Symbol + ' - ' + item.Name + ' (' + item.Exchange + ')', - value: item.Symbol - } - })); - } - }); - } - }); - }; - - var _populateSettings = function() { - $('input[name=refreshMode][value=' + _config.refreshMode + ']', $settings).prop('checked', true); - $('input[name=autoRefresh]', $settings).prop('checked', _config.autoRefresh); - }; - - var _renderQuote = function(quoteData) { - - if (quoteData && quoteData.Data && quoteData.Data.Status == 'SUCCESS') { - appConfig.ui.setTitle(quoteData.Data.Name); - - $caption.promise().done(function() { - $(this) - .empty() - .append([ - '

', - '', Format.number(quoteData.Data.LastPrice, 2), '', - '', Format.number(quoteData.Data.Change, {precision:2, withColors:true}), ' ', Format.number(quoteData.Data.ChangePercent, {precision:2, withColors:true, prefix:'(', suffix:'%)'}), '', - '

' - ].join('')); - }); - - $tbody.promise().done(function() { - $(this) - .empty() - .append([ - '', - 'Range', - '', Format.number(quoteData.Data.Low), ' - ', Format.number(quoteData.Data.High), '', - '', - '', - 'Open', - '', Format.number(quoteData.Data.Open), '', - '', - '', - 'Volume', - '', Format.number(quoteData.Data.Volume, {withMagnitude:true,precision:1}), '', - '', - '', - 'Market Cap', - '', Format.number(quoteData.Data.MarketCap, {withMagnitude:true,precision:1}), '', - '' - ].join('')); - }); - - $('span', $addToWatchlist).text(quoteData.Data.Symbol); - $addToWatchlist - .data('watchlist-add', quoteData.Data.Symbol) - .closest('tr').toggleClass('hide', (!_hasWatchListApp() || _watchListHasSymbol())); - - } else { - F2.log('Un problemo!'); - } - }; - - var _saveSettings = function() { - - clearInterval(_autoRefreshInterval); - - _config.refreshMode = $('input[name=refreshMode]:checked', $settings).val(); - _config.autoRefresh = $('input[name=autoRefresh]', $settings).prop('checked'); - - if (_config.autoRefresh) { - F2.log('beginning refresh'); - _autoRefreshInterval = setInterval(function() { - F2.log('refreshed'); - _getQuote(); - }, 30000); - } - - appConfig.ui.Views.change(F2.Constants.Views.HOME); - }; - - /** - * @class Format - * @static - */ - var Format = (function() { - var _defaultOptions = { - precision: 2, - withColors: false, - withMagnitude: false, - prefix: '', - suffix: '' - }; - var _magnitudes = { - 'shortcap': ['', 'K', 'M', 'B', 'T'] - }; - - return { - /** - * Formats a number - * @method number - * @param {number} raw The number to format - * @param {object|int} [options] If int, formats to X precision. If - * object, formats according to options passed - */ - number:function(raw, options) { - if (!raw) { return '--'; } - - options = typeof options === 'number' ? { precision: options } : options; - options = $.extend({}, _defaultOptions, options); - - var val; - - if (options.withMagnitude) { - var c = 0; - raw = Math.abs(raw); - while (raw >= 1000 && c < 4) { - raw /= 1000; - c++; - } - options.magnitudeType = options.magnitudeType || 'shortcap'; - options.suffix = _magnitudes[options.magnitudeType][c]; - } - - val = raw.toFixed(options.precision); - val = options.prefix + val + options.suffix; - - return !!options.withColors - ? ('' + val + '') - : val; - } - }; - })(); - - return { - init: function() { - // bind container symbol change - F2.Events.on( - F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, - function(symbolData) { - if (_config.refreshMode == 'page') { - _getQuote(symbolData); - } - } - ); - - // bind app symbol change - F2.Events.on( - F2.Constants.Events.APP_SYMBOL_CHANGE, - function(symbolData) { - if (_config.refreshMode == 'app') { - _getQuote(symbolData); - } - } - ); - - // bind view change - appConfig.ui.Views.change(function(view) { - if (view === F2.Constants.Views.SETTINGS) { - _populateSettings(); - } - }); - - //Talk to External Watchlist App - $root.on("click", "a[data-watchlist-add]", function(e){ - - if (!_hasWatchListApp()){ - appConfig.ui.Modals.alert("The Watchlist App is not on this container."); - } else { - - F2.Events.emit( - "F2_Examples_Watchlist_Add", - { symbol: $(this).data("watchlist-add") } - ); - - $(this).closest('tr').addClass('hide'); - } - }); - - // bind save settings - $root.on("click", "button.save", _saveSettings); - - // init typeahead - _initTypeahead(); - - // get quote - _getQuote(); - } - }; -}; \ No newline at end of file +F2.Apps['com_openf2_examples_javascript_quote'] = function(appConfig, appContent, root) { + + var $root = $(root); + var $caption = $('caption', $root); + var $tbody = $('tbody', $root); + var $addToWatchlist = $('a[data-watchlist-add]', $root); + var $settings = $('form[data-f2-view="settings"]', $root); + var _config = { + refreshMode: 'page', + autoRefresh: false + }; + var _autoRefreshInterval = false; + + function _getQuote(symbolData) { + appConfig.ui.showMask($root, true); + appConfig.context = appConfig.context || {}; + + if (!!symbolData) { + appConfig.context.symbol = symbolData.symbol; + } else if (appConfig.context.symbol) { + appConfig.context.symbol = appConfig.context.symbol; + } else { + appConfig.context.symbol = 'MSFT'; //default to Microsoft + } + + $.ajax({ + url: 'http://dev.markitondemand.com/Api/Quote/jsonp', + data: { + symbol: appConfig.context.symbol + }, + dataType: 'jsonp', + success: _renderQuote, + error: function() {}, + complete: function() { + appConfig.ui.hideMask($root); + } + }); + + _getWatchListSymbols() + } + + function _hasWatchListApp() { + return !!$("div.com_openf2_examples_javascript_watchlist").length; + } + + function _watchListHasSymbol() { + return F2.inArray(appConfig.context.symbol, _getWatchListSymbols()); + } + + function _getWatchListSymbols() { + var list = []; + + $('div.com_openf2_examples_javascript_watchlist tr[data-row]').each(function(idx, item) { + list.push($(item).attr('data-row')) + }); + + return list; + } + + function _initTypeahead() { + $('input[name=lookup]', $root).autocomplete({ + autoFocus: true, + minLength: 0, + select: function(event, ui) { + //F2.Events.emit(F2.Constants.Events.APP_SYMBOL_CHANGE, { symbol: ui.item.value, name: ui.item.label }); + _getQuote({ + symbol: ui.item.value + }); + }, + source: function(request, response) { + + $.ajax({ + url: '//dev.markitondemand.com/api/Lookup/jsonp', + dataType: 'jsonp', + data: { + input: request.term + }, + success: function(data) { + response($.map(data, function(item) { + return { + label: item.Symbol + ' - ' + item.Name + ' (' + item.Exchange + ')', + value: item.Symbol + } + })); + } + }); + } + }); + }; + + function _populateSettings() { + $('input[name=refreshMode][value=' + _config.refreshMode + ']', $settings).prop('checked', true); + $('input[name=autoRefresh]', $settings).prop('checked', _config.autoRefresh); + } + + function _renderQuote(quoteData) { + if (quoteData && quoteData.Data && quoteData.Data.Status == 'SUCCESS') { + appConfig.ui.setTitle(quoteData.Data.Name); + + $caption.promise().done(function() { + $(this) + .empty() + .append([ + '

', + '', Format.number(quoteData.Data.LastPrice, 2), '', + '', Format.number(quoteData.Data.Change, { + precision: 2, + withColors: true + }), ' ', Format.number(quoteData.Data.ChangePercent, { + precision: 2, + withColors: true, + prefix: '(', + suffix: '%)' + }), '', + '

' + ].join('')); + }); + + $tbody.promise().done(function() { + $(this) + .empty() + .append([ + '', + 'Range', + '', Format.number(quoteData.Data.Low), ' - ', Format.number(quoteData.Data.High), '', + '', + '', + 'Open', + '', Format.number(quoteData.Data.Open), '', + '', + '', + 'Volume', + '', Format.number(quoteData.Data.Volume, { + withMagnitude: true, + precision: 1 + }), '', + '', + '', + 'Market Cap', + '', Format.number(quoteData.Data.MarketCap, { + withMagnitude: true, + precision: 1 + }), '', + '' + ].join('')); + }); + + $('span', $addToWatchlist).text(quoteData.Data.Symbol); + $addToWatchlist + .data('watchlist-add', quoteData.Data.Symbol) + .closest('tr').toggleClass('hide', (!_hasWatchListApp() || _watchListHasSymbol())); + + } else { + F2.log('Un problemo!'); + } + }; + + function _saveSettings() { + clearInterval(_autoRefreshInterval); + + _config.refreshMode = $('input[name=refreshMode]:checked', $settings).val(); + _config.autoRefresh = $('input[name=autoRefresh]', $settings).prop('checked'); + + if (_config.autoRefresh) { + F2.log('beginning refresh'); + _autoRefreshInterval = setInterval(function() { + F2.log('refreshed'); + _getQuote(); + }, 30000); + } + + appConfig.ui.Views.change(F2.Constants.Views.HOME); + } + + /** + * @class Format + * @static + */ + var Format = (function() { + var _defaultOptions = { + precision: 2, + withColors: false, + withMagnitude: false, + prefix: '', + suffix: '' + }; + var _magnitudes = { + 'shortcap': ['', 'K', 'M', 'B', 'T'] + }; + + return { + /** + * Formats a number + * @method number + * @param {number} raw The number to format + * @param {object|int} [options] If int, formats to X precision. If + * object, formats according to options passed + */ + number: function(raw, options) { + if (!raw) { + return '--'; + } + + options = typeof options === 'number' ? { + precision: options + } : options; + options = $.extend({}, _defaultOptions, options); + + var val; + + if (options.withMagnitude) { + var c = 0; + raw = Math.abs(raw); + while (raw >= 1000 && c < 4) { + raw /= 1000; + c++; + } + options.magnitudeType = options.magnitudeType || 'shortcap'; + options.suffix = _magnitudes[options.magnitudeType][c]; + } + + val = raw.toFixed(options.precision); + val = options.prefix + val + options.suffix; + + return !!options.withColors + ? ('' + val + '') + : val; + } + }; + })(); + + return { + init: function() { + // bind container symbol change + F2.Events.on( + F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, function(symbolData) { + if (_config.refreshMode == 'page') { + _getQuote(symbolData); + } + } + ); + + // bind app symbol change + F2.Events.on( + F2.Constants.Events.APP_SYMBOL_CHANGE, function(symbolData) { + if (_config.refreshMode == 'app') { + _getQuote(symbolData); + } + } + ); + + // bind view change + appConfig.ui.Views.change(function(view) { + if (view === F2.Constants.Views.SETTINGS) { + _populateSettings(); + } + }); + + //Talk to External Watchlist App + $root.on("click", "a[data-watchlist-add]", function(e) { + + if (!_hasWatchListApp()) { + appConfig.ui.Modals.alert("The Watchlist App is not on this container."); + } else { + + F2.Events.emit( + "F2_Examples_Watchlist_Add", + { + symbol: $(this).data("watchlist-add") + } + ); + + $(this).closest('tr').addClass('hide'); + } + }); + + // bind save settings + $root.on("click", "button.save", _saveSettings); + + // init typeahead + _initTypeahead(); + + // get quote + _getQuote(); + } + }; +}; diff --git a/examples/apps/JavaScript/Quote/manifest.js b/examples/apps/JavaScript/Quote/manifest.js index 5cd3f546..2822fff8 100644 --- a/examples/apps/JavaScript/Quote/manifest.js +++ b/examples/apps/JavaScript/Quote/manifest.js @@ -1,64 +1,64 @@ F2_jsonpCallback_com_openf2_examples_javascript_quote({ - "scripts":[ - "../apps/JavaScript/Quote/appclass.js" - ], - "styles":[ - "../apps/JavaScript/Quote/app.css" - ], - "apps":[ - { - "html":[ - '
', - '
', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '
', - '+Add to Watchlist', - '
', - '
', - '', - '', - '
', - '
', - '
', - '
', - '

Settings

', - 'This App can listen for symbol changes from nearby Apps or the page as a whole and automatically request a quote for the symbol.', - 'Symbol Change Mode', - '
', - '
', - '
', - 'This App can also refresh the quote every 30 seconds', - '
', - '
', - ' ', - '', - '
', - '
', - '
', - '

About

', - '

Quick Quote App v0.12.3

', - '

« Back', - '

', - '
' - ].join("") - } - ] -}) \ No newline at end of file + "scripts":[ + "../apps/JavaScript/Quote/appclass.js" + ], + "styles":[ + "../apps/JavaScript/Quote/app.css" + ], + "apps":[ + { + "html":[ + '
', + '
', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
', + '+Add to Watchlist', + '
', + '
', + '', + '', + '
', + '
', + '
', + '
', + '

Settings

', + 'This App can listen for symbol changes from nearby Apps or the page as a whole and automatically request a quote for the symbol.', + 'Symbol Change Mode', + '
', + '
', + '
', + 'This App can also refresh the quote every 30 seconds', + '
', + '
', + ' ', + '', + '
', + '
', + '
', + '

About

', + '

Quick Quote App v0.12.3

', + '

« Back', + '

', + '
' + ].join("") + } + ] +}); diff --git a/examples/apps/JavaScript/Watchlist/appclass.js b/examples/apps/JavaScript/Watchlist/appclass.js index aa88a391..09af079b 100644 --- a/examples/apps/JavaScript/Watchlist/appclass.js +++ b/examples/apps/JavaScript/Watchlist/appclass.js @@ -1,403 +1,400 @@ -F2.Apps['com_openf2_examples_javascript_watchlist'] = (function (appConfig, appContent, root) { - - (function(){ - //http://javascript.crockford.com/remedial.html - String.prototype.supplant = function(o) { - return this.replace(/{([^{}]*)}/g, - function(a, b) { - var r = o[b]; - return typeof r === 'string' || typeof r === 'number' ? r : a; - } - ); - }; - })(); - - var App = function(appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.root = root; - this.$root = $(root); - this.$settings = $('form[data-f2-view="settings"]', this.$root); - this.ui = this.appConfig.ui; - this.settings = { - allowExternalAdd: true - }; +F2.Apps['com_openf2_examples_javascript_watchlist'] = (function(appConfig, appContent, root) { + + (function() { + //http://javascript.crockford.com/remedial.html + String.prototype.supplant = function(o) { + return this.replace(/{([^{}]*)}/g, function(a, b) { + var r = o[b]; + return typeof r === 'string' || typeof r === 'number' ? r : a; + } + ); + }; + })(); + + var App = function(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.root = root; + this.$root = $(root); + this.$settings = $('form[data-f2-view="settings"]', this.$root); + this.ui = this.appConfig.ui; + this.settings = { + allowExternalAdd: true + }; + } + + App.prototype.init = function() { + this.ui.showMask(this.root); + this.initLocalStorage(); + this.getData(); + this.initEvents(); + } + + App.prototype.DEFAULT_SYMBOLS = ["BA", "BAC", "GE", "GS", "INTC", "CSCO"]; + App.prototype.COOKIE_NAME = "F2_Examples_Watchlist"; + + App.prototype.ROW = [ + "", + "", + "{symbol}", + "", + "{price}", + "{change} ({changePct})", + "{volume}", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "
BidAskMkt CapLast Trade
{bid}{ask}{cap}{asOfDate} {asOf}
", + "", + "" + ].join(""); + + App.prototype.data = []; + + App.prototype.initEvents = function() { + + //remove sym + this.$root.on("click", "a[data-remove]", $.proxy(function(e) { + e.preventDefault(); + this.deleteSymbol($(e.currentTarget).attr("data-remove")); + }, this)); + + //add sym + this.$root.on("click", "button.add", $.proxy(function(e) { + this.addSymbol($("input[name='lookup']", this.$root).val()); + }, this)); + + //expand row + this.$root.on("click", "tr[data-row]", $.proxy(function(e) { + var $this = $(e.currentTarget); + $this.next().toggle(); + }, this)); + + //change container context + this.$root.on("click", "a[data-context]", $.proxy(function(e) { + e.preventDefault(); + F2.Events.emit( + F2.Constants.Events.APP_SYMBOL_CHANGE, { + symbol: $(e.currentTarget).attr("data-context"), + name: $(e.currentTarget).attr("data-context-name") + } + ); + }, this)); + + //listen for this event from other apps who may send symbols + if (this.settings.allowExternalAdd) { + F2.Events.on("F2_Examples_Watchlist_Add", $.proxy(function(data) { + var symbolAlert = $("div.symbolAlert", this.$root); + symbolAlert = (symbolAlert.length) + ? symbolAlert + : this._renderSymbolAlert(); + + $("span:first", symbolAlert).text(data.symbol + " has been added."); + + this.addSymbol(data.symbol); + }, this)); } - App.prototype.init = function() { - this.ui.showMask(this.root); - this.initLocalStorage(); - this.getData(); - this.initEvents(); + // bind save settings + this.$root.on("click", "button.save", $.proxy(function() { + this._saveSettings(); + }, this)); + + this.ui.Views.change($.proxy(function(view) { + if (view === F2.Constants.Views.SETTINGS) { + this._populateSettings(); + } + }, this)); + } + + App.prototype._saveSettings = function() { + this.settings.allowExternalAdd = $('input[name=allowExternalAdd]', this.$settings).is(':checked'); + this.ui.Views.change(F2.Constants.Views.HOME); + } + + App.prototype._populateSettings = function() { + $('input[name=allowExternalAdd]', this.$settings).attr('checked', this.settings.alltableswithkeys); + } + + App.prototype.getSymbols = function() { + return this._retrieveStoredSymbols(); + } + + App.prototype.setSymbols = function(syms) { + this._storeSymbols(syms); + } + + App.prototype.addSymbol = function(sym) { + if (sym) { + this.ui.showMask(this.root); + var s = this.getSymbols(); + s.push(sym.toUpperCase()); + this.setSymbols(s); + + $("input[name='lookup']", this.$root).val("").focus(); + this.getData(); + } else { + this.ui.Modals.alert("Please enter a symbol."); } + } + + App.prototype.deleteSymbol = function(sym) { + this.ui.showMask(this.root); + + var curr = this.getSymbols(), + updated = []; + $.each(curr, function(idx, item) { + if (sym != item) { + updated.push(item); + } + }); + + if (!updated.length) { + this.ui.Modals.alert("You have deleted all the symbols in your watchlist. For the purposes of this example app, the default symbols have been re-added to your list.") + updated = this.DEFAULT_SYMBOLS; + } + + this.setSymbols(updated); + + this.data = []; + this.getData(); + } + + App.prototype._supportsLocalStorage = function() { + return (typeof (Storage) !== "undefined"); + } + + App.prototype.initLocalStorage = function() { + if (this._supportsLocalStorage()) { + + if (localStorage.F2_Examples_Watchlist == undefined || localStorage.F2_Examples_Watchlist == "" || !localStorage.F2_Examples_Watchlist) { + localStorage.F2_Examples_Watchlist = this.DEFAULT_SYMBOLS.join(","); + } + + } else { + if (!$.cookie(this.COOKIE_NAME) || $.cookie(this.COOKIE_NAME) == undefined || $.cookie(this.COOKIE_NAME) == "") { + $.cookie(this.COOKIE_NAME, this.DEFAULT_SYMBOLS.join(","), { + expires: 10 + }); + } + } + + } + + App.prototype._storeSymbols = function(syms) { + + if (this._supportsLocalStorage()) { + localStorage.F2_Examples_Watchlist = syms.join(","); + } else { + $.cookie(this.COOKIE_NAME, syms.join(","), { + expires: 10 + }); + } + } + + App.prototype._retrieveStoredSymbols = function() { + if (this._supportsLocalStorage()) { + return localStorage.F2_Examples_Watchlist.split(",") || []; + } else { + return $.cookie(this.COOKIE_NAME).split(",") || []; + } + } + + App.prototype.drawSymbolList = function() { + + var table = []; + table.push( + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '' + ); + + if (this.data.length < 1) { + table.push('') + } else { + $.each(this.data, $.proxy(function(idx, item) { + + item = item || {}; + + var quoteData = { + name: item.Name, + symbol: item.Symbol, + price: AppFormat.lastPrice(item.LastTradePriceOnly), + change: AppFormat.addColor(item.Change), + changePct: AppFormat.addColor(item.ChangeinPercent), + volume: AppFormat.getMagnitude(1, item.Volume, "shortcap"), + asOf: item.LastTradeTime, + asOfDate: item.LastTradeDate, + bid: AppFormat.lastPrice(item.BidRealtime), + ask: AppFormat.lastPrice(item.AskRealtime), + cap: item.MarketCapitalization + }; + + table.push(this.ROW.supplant(quoteData)); + + }, this)); + } + + table.push( + '', + '
SymbolLastChange / PctVolume 
No symbols (or the Yahoo! API failed).
' + ); + + $("div.watchlist", this.root).html(table.join('')); + + this.ui.updateHeight(); + this.ui.hideMask(this.root); + } + + App.prototype._renderSymbolAlert = function() { + + return $([ + '
', + '', + '', + '
' + ].join('')) + .prependTo($("." + F2.Constants.Css.APP_CONTAINER, this.root)); + }; + + App.prototype.getData = function() { + + var symInput = [], oData; + + //no symbols? bail out. + if (!this.getSymbols().length) { + this.drawSymbolList(); + return; + } + + $.each(this.getSymbols(), function(idx, item) { + symInput.push('"' + item + '"'); + }); + + oData = { + q: 'select * from yahoo.finance.quotes where symbol in (' + symInput.join(",") + ')', + format: 'json', + env: 'store://datatables.org/alltableswithkeys' + } + + //F2.log("data requested = ", oData); + + $.ajax({ + url: "http://query.yahooapis.com/v1/public/yql", + data: oData, + dataType: "jsonp", + context: this + }).done(function(jqxhr, txtStatus) { + + //pretty bad response from yahoo when it fails. + //jqxhr = {"query":{"count":0,"created":"2012-10-15T21:23:19Z","lang":"en-US","results":null}}; + + //trap failed yahoo api + if (jqxhr.query.results === null) { + jqxhr.query.results = { + quote: {} + } + } + + this.data = []; + + //yahoo's API returns an array of objects if you ask for multiple symbols + //but a single object if you only ask for 1 symbol + if (jqxhr.query.count !== 0) { + if (jqxhr.query.count < 2) { + this.data = [jqxhr.query.results.quote] || this.data; + } else { + this.data = jqxhr.query.results.quote || this.data; + } + } + + this.drawSymbolList(); + + }).fail(function(jqxhr, txtStatus) { + + F2.log("OOPS. Yahoo! didn't work."); + this.ui.Modals.alert("Your watchlist failed to load. Refresh."); + + }); + } + + AppFormat = function() { + this.magnitudes = { + shortcap: ["", "K", "M", "B", "T"] + }; + } + + AppFormat.prototype.getMagnitude = function(numDigits, value, type) { + value = Math.abs(value); + var c = 0; + while (value >= 1000 && c < 4) { + value /= 1000; + c++; + } + value = value.toFixed(numDigits); + return value + this.magnitudes[type][c]; + } + + AppFormat.prototype.lastPrice = function(value) { + value = Number(value); + value = value.toFixed(2); + return "$" + value; + } + + AppFormat.prototype.addColor = function(value) { + if (value && value.length && value.charAt(0) == "+") { + return "" + value + ""; + } else if (value && value.length && value.charAt(0) == "-") { + return "" + value + ""; + } else { + return value; + } + } + + AppFormat.prototype.comma = function(value) { + value = String(value); + if (value.length < 6 && value.indexOf(".") > -1) { + return value; + } else { + x = value.split('.'); + x1 = x[0]; + x2 = x.length > 1 ? '.' + x[1] : ''; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(x1)) { + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + } + return x1 + x2; + } + } + + AppFormat = new AppFormat(); + + return App; - App.prototype.DEFAULT_SYMBOLS = ["BA","BAC","GE","GS","INTC","CSCO"]; - App.prototype.COOKIE_NAME = "F2_Examples_Watchlist"; - - App.prototype.ROW = ["", - "", - "{symbol}", - "", - "{price}", - "{change} ({changePct})", - "{volume}", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "
BidAskMkt CapLast Trade
{bid}{ask}{cap}{asOfDate} {asOf}
", - "", - "" - ].join(""); - - App.prototype.data = []; - - App.prototype.initEvents = function(){ - - //remove sym - this.$root.on("click", "a[data-remove]", $.proxy(function(e){ - e.preventDefault(); - this.deleteSymbol($(e.currentTarget).attr("data-remove")); - }, this)); - - //add sym - this.$root.on("click", "button.add", $.proxy(function(e){ - this.addSymbol($("input[name='lookup']", this.$root).val()); - }, this)); - - //expand row - this.$root.on("click", "tr[data-row]", $.proxy(function(e){ - var $this = $(e.currentTarget); - $this.next().toggle(); - }, this)); - - //change container context - this.$root.on("click", "a[data-context]", $.proxy(function(e){ - e.preventDefault(); - F2.Events.emit( - F2.Constants.Events.APP_SYMBOL_CHANGE, { - symbol: $(e.currentTarget).attr("data-context"), - name: $(e.currentTarget).attr("data-context-name") - } - ); - }, this)); - - //listen for this event from other apps who may send symbols - if (this.settings.allowExternalAdd){ - F2.Events.on("F2_Examples_Watchlist_Add", $.proxy(function(data){ - var symbolAlert = $("div.symbolAlert", this.$root); - symbolAlert = (symbolAlert.length) - ? symbolAlert - : this._renderSymbolAlert(); - - $("span:first", symbolAlert).text(data.symbol + " has been added."); - - this.addSymbol(data.symbol); - },this)); - } - - // bind save settings - this.$root.on("click", "button.save", $.proxy(function(){ - this._saveSettings(); - },this)); - - this.ui.Views.change($.proxy(function(view) { - if (view === F2.Constants.Views.SETTINGS) { - this._populateSettings(); - } - },this)); - } - - App.prototype._saveSettings = function(){ - this.settings.allowExternalAdd = $('input[name=allowExternalAdd]', this.$settings).is(':checked'); - this.ui.Views.change(F2.Constants.Views.HOME); - } - - App.prototype._populateSettings = function(){ - $('input[name=allowExternalAdd]', this.$settings).attr('checked', this.settings.alltableswithkeys); - } - - App.prototype.getSymbols = function(){ - return this._retrieveStoredSymbols(); - } - - App.prototype.setSymbols = function(syms){ - this._storeSymbols(syms); - } - - App.prototype.addSymbol = function(sym){ - if (sym){ - this.ui.showMask(this.root); - var s = this.getSymbols(); - s.push(sym.toUpperCase()); - this.setSymbols(s); - - $("input[name='lookup']", this.$root).val("").focus(); - this.getData(); - } else { - this.ui.Modals.alert("Please enter a symbol."); - } - } - - App.prototype.deleteSymbol = function(sym){ - this.ui.showMask(this.root); - - var curr = this.getSymbols(), updated = []; - $.each(curr,function(idx,item){ - if (sym != item){ - updated.push(item); - } - }); - - if (!updated.length) { - this.ui.Modals.alert("You have deleted all the symbols in your watchlist. For the purposes of this example app, the default symbols have been re-added to your list.") - updated = this.DEFAULT_SYMBOLS; - } - - this.setSymbols(updated); - - this.data = []; - this.getData(); - } - - App.prototype._supportsLocalStorage = function(){ - return (typeof(Storage) !== "undefined"); - } - - App.prototype.initLocalStorage = function(){ - if(this._supportsLocalStorage()){ - - if (localStorage.F2_Examples_Watchlist == undefined || localStorage.F2_Examples_Watchlist == "" || !localStorage.F2_Examples_Watchlist){ - localStorage.F2_Examples_Watchlist = this.DEFAULT_SYMBOLS.join(","); - } - - } else { - if (!$.cookie(this.COOKIE_NAME) || $.cookie(this.COOKIE_NAME) == undefined || $.cookie(this.COOKIE_NAME) == ""){ - $.cookie(this.COOKIE_NAME, this.DEFAULT_SYMBOLS.join(","), { expires: 10 }); - } - } - - } - - App.prototype._storeSymbols = function(syms){ - - if(this._supportsLocalStorage()){ - localStorage.F2_Examples_Watchlist = syms.join(","); - } else { - $.cookie(this.COOKIE_NAME, syms.join(","), { expires: 10 }); - } - } - - App.prototype._retrieveStoredSymbols = function(){ - if(this._supportsLocalStorage()){ - return localStorage.F2_Examples_Watchlist.split(",") || []; - } - else { - return $.cookie(this.COOKIE_NAME).split(",") || []; - } - } - - App.prototype.drawSymbolList = function(){ - - var table = []; - table.push( - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '' - ); - - if (this.data.length < 1){ - table.push('') - } else { - $.each(this.data, $.proxy(function(idx,item){ - - item = item || {}; - - var quoteData = { - name: item.Name, - symbol: item.Symbol, - price: AppFormat.lastPrice(item.LastTradePriceOnly), - change: AppFormat.addColor(item.Change), - changePct: AppFormat.addColor(item.ChangeinPercent), - volume: AppFormat.getMagnitude(1,item.Volume,"shortcap"), - asOf: item.LastTradeTime, - asOfDate: item.LastTradeDate, - bid: AppFormat.lastPrice(item.BidRealtime), - ask: AppFormat.lastPrice(item.AskRealtime), - cap: item.MarketCapitalization - }; - - table.push(this.ROW.supplant(quoteData)); - - },this)); - } - - table.push( - '', - '
SymbolLastChange / PctVolume 
No symbols (or the Yahoo! API failed).
' - ); - - $("div.watchlist", this.root).html(table.join('')); - - this.ui.updateHeight(); - this.ui.hideMask(this.root); - } - - App.prototype._renderSymbolAlert = function() { - - return $([ - '
', - '', - '', - '
' - ].join('')) - .prependTo($("." + F2.Constants.Css.APP_CONTAINER,this.root)); - }; - - App.prototype.getData = function(){ - - var symInput = [], oData; - - //no symbols? bail out. - if (!this.getSymbols().length){ - this.drawSymbolList(); - return; - } - - $.each(this.getSymbols(),function(idx,item){ - symInput.push('"'+item+'"'); - }); - - oData = { - q: 'select * from yahoo.finance.quotes where symbol in ('+ symInput.join(",") +')', - format: 'json', - env: 'store://datatables.org/alltableswithkeys' - } - - //F2.log("data requested = ", oData); - - $.ajax({ - url: "http://query.yahooapis.com/v1/public/yql", - data: oData, - dataType: "jsonp", - context: this - }).done(function(jqxhr,txtStatus){ - - //pretty bad response from yahoo when it fails. - //jqxhr = {"query":{"count":0,"created":"2012-10-15T21:23:19Z","lang":"en-US","results":null}}; - - //trap failed yahoo api - if (jqxhr.query.results === null){ - jqxhr.query.results = { - quote:{} - } - } - - this.data = []; - - //yahoo's API returns an array of objects if you ask for multiple symbols - //but a single object if you only ask for 1 symbol - if (jqxhr.query.count !== 0){ - if (jqxhr.query.count < 2){ - this.data = [jqxhr.query.results.quote] || this.data; - } else { - this.data = jqxhr.query.results.quote || this.data; - } - } - - this.drawSymbolList(); - - }).fail(function(jqxhr,txtStatus){ - - F2.log("OOPS. Yahoo! didn't work."); - this.ui.Modals.alert("Your watchlist failed to load. Refresh."); - - }); - } - - - /** - * Number format helpers - */ - AppFormat = function(){ - this.magnitudes = { - shortcap : ["", "K", "M", "B", "T"] - }; - } - - AppFormat.prototype.getMagnitude = function(numDigits,value,type) { - value = Math.abs(value); - var c = 0; - while (value >= 1000 && c < 4) { - value /= 1000; - c++; - } - value = value.toFixed(numDigits); - return value + this.magnitudes[type][c]; - } - - AppFormat.prototype.lastPrice = function(value){ - value = Number(value); - value = value.toFixed(2); - return "$" + value; - } - - AppFormat.prototype.addColor = function(value){ - if (value && value.length && value.charAt(0) == "+"){ - return "" + value + ""; - } else if (value && value.length && value.charAt(0) == "-"){ - return "" + value + ""; - } else { - return value; - } - } - - AppFormat.prototype.comma = function(value) { - value = String(value); - if (value.length < 6 && value.indexOf(".") > -1) { - return value; - } else { - x = value.split('.'); - x1 = x[0]; - x2 = x.length > 1 ? '.' + x[1] : ''; - var rgx = /(\d+)(\d{3})/; - while (rgx.test(x1)) { - x1 = x1.replace(rgx, '$1' + ',' + '$2'); - } - return x1 + x2; - } - } - - AppFormat = new AppFormat(); - /** - * end number formatting helpers - */ - - return App; - -})(); \ No newline at end of file +})(); diff --git a/examples/apps/JavaScript/Watchlist/manifest.js b/examples/apps/JavaScript/Watchlist/manifest.js index 9a2577f1..e09d88bf 100644 --- a/examples/apps/JavaScript/Watchlist/manifest.js +++ b/examples/apps/JavaScript/Watchlist/manifest.js @@ -1,45 +1,45 @@ F2_jsonpCallback_com_openf2_examples_javascript_watchlist({ - "scripts":[ - "../apps/JavaScript/Watchlist/jquery.cookie.js", - "../apps/JavaScript/Watchlist/moment.1.7.0.min.js", - "../apps/JavaScript/Watchlist/appclass.js" - ], - "styles":[ - "../apps/JavaScript/Watchlist/watchlist.css" - ], - "apps":[ - { - "html":[ - '
', - '
', - '
', - '
', - '', - '', - '
', - '

', - 'Market data delayed at least 15 minutes. By Yahoo!', - '

', - '
', - '
', - '

Settings

', - 'This App can listen for symbols from nearby Apps which allows other apps to add symbols to this watchlist.', - 'Allow Symbols from Nearby Apps', - '
', - '
', - ' ', - '', - '
', - '
', - '
', - '

About

', - '

Quick Quote App v0.12.3

', - '

« Back', - '

', - '
' - ].join("") - } - ] -}) \ No newline at end of file + "scripts":[ + "../apps/JavaScript/Watchlist/jquery.cookie.js", + "../apps/JavaScript/Watchlist/moment.1.7.0.min.js", + "../apps/JavaScript/Watchlist/appclass.js" + ], + "styles":[ + "../apps/JavaScript/Watchlist/watchlist.css" + ], + "apps":[ + { + "html":[ + '
', + '
', + '
', + '
', + '', + '', + '
', + '

', + 'Market data delayed at least 15 minutes. By Yahoo!', + '

', + '
', + '
', + '

Settings

', + 'This App can listen for symbols from nearby Apps which allows other apps to add symbols to this watchlist.', + 'Allow Symbols from Nearby Apps', + '
', + '
', + ' ', + '', + '
', + '
', + '
', + '

About

', + '

Quick Quote App v0.12.3

', + '

« Back', + '

', + '
' + ].join("") + } + ] +}); diff --git a/examples/apps/JavaScript/Watchlist/watchlist.css b/examples/apps/JavaScript/Watchlist/watchlist.css index ed8da78f..87b0f038 100644 --- a/examples/apps/JavaScript/Watchlist/watchlist.css +++ b/examples/apps/JavaScript/Watchlist/watchlist.css @@ -1,29 +1,29 @@ .com_openf2_examples_javascript_watchlist .table th, .com_openf2_examples_javascript_watchlist .table td { - text-align: right; + text-align: right; } .com_openf2_examples_javascript_watchlist .table th.first, .com_openf2_examples_javascript_watchlist .table td.first { - text-align: left; + text-align: left; } .com_openf2_examples_javascript_watchlist .pos { - color:green; + color:green; } .com_openf2_examples_javascript_watchlist .neg { - color:red; + color:red; } .com_openf2_examples_javascript_watchlist table table { - font-size: 85%; + font-size: 85%; } .com_openf2_examples_javascript_watchlist table tr { - cursor: pointer; + cursor: pointer; } .com_openf2_examples_javascript_watchlist table table tr { - cursor: text; -} \ No newline at end of file + cursor: text; +} diff --git a/examples/container-amd/js/appSelector.js b/examples/container-amd/js/appSelector.js index 546866b5..25b9fa1b 100644 --- a/examples/container-amd/js/appSelector.js +++ b/examples/container-amd/js/appSelector.js @@ -1,99 +1,90 @@ -define( - [ - 'jquery', - 'F2', - 'storage', - 'bootstrap' - ], - function($, F2, Storage) { - - return function() { - - // grab apps from storage - var requestedApps = Storage.getItem('requestedApps') || []; - - // setup modal - var $modal = $('#languageSelect').modal({ - backdrop: 'static', - keyboard: false, - show: false - }); - - // bind select apps - $('#btnSelectApps').on('click', function() { - $modal.modal('show'); - }); - - // bind checkbox events - $modal.on('change', 'input:checkbox', function() { - if ($('input:checkbox:checked', $modal).length) { - $('button.btn-primary', $modal).removeClass('disabled'); - } else { - $('button.btn-primary', $modal).addClass('disabled'); - } - }); - - // bind save button - $modal.on('click', 'button.btn-primary:not(.disabled)', function() { - var apps = []; - var storageItems = []; - - $('input:checked', $modal).map(function(i, el) { - apps.push($(el).data('f2-app')); - storageItems.push($(el).val()); - }); - - $modal.modal('hide'); - - // save apps to storage - Storage.setItem('requestedApps', storageItems); - - // remove all apps and add only the selected ones - F2.removeAllApps(); - F2.registerApps(apps); - }); - - // show a loading mask and the modal if there were no requested apps - if (!requestedApps.length) { - F2.UI.showMask('', $('#languageSelect'), true); - $modal.modal('show'); - } - - // load in app json - $.getJSON('./js/sampleApps.js', function(allApps) { - $.each(allApps, function(language, apps) { - $('[data-language="' + language + '"]', $modal).append( - $.map(apps, function(app, i) { - var $d = $('
'), - $lbl = $(''), - $ck = $('').data('f2-app', app), - name = ' ' + app.name + (app.isSecure ? ' (Secure)' : '') - ; - - $lbl.append($ck).append(name); - - return $d.append($lbl); - }) - ); - }) - - // if no requested apps, hide the loader, otherwise register the apps - if (!requestedApps.length) { - F2.UI.hideMask('', $modal); - - } else { - // check the appropriate boxes - $.each(requestedApps, function(i, a) { - $('input[name="app"][value="' + a + '"]', $modal).prop('checked', true); - }); - - // fire change event which should enable the Save button - $('input:checkbox:first', $modal).change(); - - // click the Save button - $('button.btn-primary', $modal).click(); - } - }); - }; - } -); \ No newline at end of file +define(['jquery', 'F2', 'storage', 'bootstrap'], function($, F2, Storage) { + + return function() { + + // grab apps from storage + var requestedApps = Storage.getItem('requestedApps') || []; + + // setup modal + var $modal = $('#languageSelect').modal({ + backdrop: 'static', + keyboard: false, + show: false + }); + + // bind select apps + $('#btnSelectApps').on('click', function() { + $modal.modal('show'); + }); + + // bind checkbox events + $modal.on('change', 'input:checkbox', function() { + if ($('input:checkbox:checked', $modal).length) { + $('button.btn-primary', $modal).removeClass('disabled'); + } else { + $('button.btn-primary', $modal).addClass('disabled'); + } + }); + + // bind save button + $modal.on('click', 'button.btn-primary:not(.disabled)', function() { + var apps = []; + var storageItems = []; + + $('input:checked', $modal).map(function(i, el) { + apps.push($(el).data('f2-app')); + storageItems.push($(el).val()); + }); + + $modal.modal('hide'); + + // save apps to storage + Storage.setItem('requestedApps', storageItems); + + // remove all apps and add only the selected ones + F2.removeAllApps(); + F2.registerApps(apps); + }); + + // show a loading mask and the modal if there were no requested apps + if (!requestedApps.length) { + F2.UI.showMask('', $('#languageSelect'), true); + $modal.modal('show'); + } + + // load in app json + $.getJSON('./js/sampleApps.js', function(allApps) { + $.each(allApps, function(language, apps) { + $('[data-language="' + language + '"]', $modal).append( + $.map(apps, function(app, i) { + var $d = $('
'), + $lbl = $(''), + $ck = $('').data('f2-app', app), + name = ' ' + app.name + (app.isSecure ? ' (Secure)' : ''); + + $lbl.append($ck).append(name); + + return $d.append($lbl); + }) + ); + }) + + // if no requested apps, hide the loader, otherwise register the apps + if (!requestedApps.length) { + F2.UI.hideMask('', $modal); + + } else { + // check the appropriate boxes + $.each(requestedApps, function(i, a) { + $('input[name="app"][value="' + a + '"]', $modal).prop('checked', true); + }); + + // fire change event which should enable the Save button + $('input:checkbox:first', $modal).change(); + + // click the Save button + $('button.btn-primary', $modal).click(); + } + }); + } +}); diff --git a/examples/container-amd/js/main.js b/examples/container-amd/js/main.js index e2dce3d3..292a2b89 100644 --- a/examples/container-amd/js/main.js +++ b/examples/container-amd/js/main.js @@ -1,224 +1,231 @@ require( - { - basePath: 'js', - paths: { - 'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min', - 'jquery-ui': '//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min', - 'bootstrap': '//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min', - 'F2': '../../../sdk/f2.debug' - }, - shim: { - 'bootstrap': ['jquery'], - 'jquery-ui': ['jquery'] - } - }, - [ - 'jquery', - 'F2', - 'appSelector', - 'jquery-ui', - 'bootstrap' - ], - function($, F2, AppSelector) { - - //simple console log helper for IE - var log = $.noop; //function() { }; - if (!window["console"]) { - window.console = {}; - } - - var logFns = { - log: log, - warn: log, - error: log, - info: log, - group: log, - groupEnd: log - }; - - for (var i in logFns) { - if (!window.console[i]) { - window.console[i] = logFns[i]; - } - } - - // wait for DOM ready - $(function() { - - //can't run this container from a file:// protocol - if (location.protocol === "file:"){ - var $m = $("#notice").modal(); - // bind save button - $m.on('click', 'button.btn', function() { - $m.modal('hide'); - window.close(); - }); - return; - } - - // init the app selector - new AppSelector(); - - var containerAppHandlerToken = F2.AppHandlers.getToken(); - - var appCreateRootFunc = function(appConfig) { - var hasSettings = F2.inArray(F2.Constants.Views.SETTINGS, appConfig.views); - var hasHelp = F2.inArray(F2.Constants.Views.HELP, appConfig.views); - var hasAbout = F2.inArray(F2.Constants.Views.ABOUT, appConfig.views); - var showDivider = hasSettings || hasHelp || hasAbout; - var gridWidth = appConfig.minGridSize || 3; - - var cogMenu = [ - '' - ].join(''); - - appConfig.root = $([ - '
', - '
', - '
', - '

', appConfig.name, '

', - cogMenu, - '
', - '
', - '
' - ].join('')).get(0); - }; - - var appRenderFunc = function(appConfig, app) { - - var gridWidth = appConfig.minGridSize || 3; - - // find a row that can fit this app - var row; - $('#mainContent div.row').each(function(i, el) { - var span = 0; - $('.f2-app', el).each(function(j, app) { - span += Number($(app).data('gridWidth')); - }); - if (span <= (12 - gridWidth)) { - row = el; - return false; - } - }); - // create a new row if one wasn't found - if (row === undefined) { - row = $('
').appendTo('#mainContent'); - } - - // append app to app root and also to row - $(appConfig.root) - .addClass(F2.Constants.Css.APP) - .find('.f2-app-wrapper') - .append(app) - .parent() - .appendTo(row); - }; - - var appRenderCompleteFunc = function(appConfig) { - F2.UI.hideMask(appConfig.instanceId, appConfig.root); - }; - - var appDestroyFunc = function(appInstance) { - if(!appInstance) { return; } - - // call the apps destroy method, if it has one - if(appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function'){ - appInstance.app.destroy(); - } - // warn the container developer/app developer that even though they have a destroy method it hasn't been called - else if(appInstance.app && appInstance.app.destroy){ - F2.log(appInstance.appId + ' has a Destroy property, but Destroy is not of type function and as such will not be executed.'); - } - - // fade out and remove the root - $(appInstance.config.root).fadeOut(250, function() { - $(this).remove(); - }); - }; - /** - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - */ - - /** - * Init Container - */ - F2.init({ - UI:{ - Mask:{ - loadingIcon:'./img/ajax-loader.gif' - } - }, - supportedViews: [F2.Constants.Views.HOME, F2.Constants.Views.SETTINGS, F2.Constants.Views.REMOVE], - secureAppPagePath: 'secure.html' // this should go on a separate domain from index.html - }); - - // Define these prior to calling F2.registerApps - F2.AppHandlers - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_CREATE_ROOT, appCreateRootFunc) - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER, appRenderFunc) - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER_AFTER, appRenderCompleteFunc) - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_DESTROY, appDestroyFunc) - ; - - //listen for app symbol change events and re-broadcast - F2.Events.on( - F2.Constants.Events.APP_SYMBOL_CHANGE, - function(data){ - F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { symbol: data.symbol, name: data.name || "" }); - } - ); - - /** - * init symbol lookup in navbar - */ - $("#symbolLookup") - .on('keypress', function(event) { - if (event.keyCode == 13) { - event.preventDefault(); - } - }) - .autocomplete({ - autoFocus:true, - minLength: 0, - select: function (event, ui) { - F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { symbol: ui.item.value, name: ui.item.label }); - }, - source: function (request, response) { - - $.ajax({ - url: "http://dev.markitondemand.com/api/Lookup/jsonp", - dataType: "jsonp", - data: { - input: request.term - }, - success: function (data) { - response($.map(data, function (item) { - return { - label: item.Name + " (" + item.Exchange + ")", - value: item.Symbol - } - })); - }, - open: function() { - $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); - }, - close: function() { - $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); - } - }); - } - }); - }); - } + { + basePath: 'js', + paths: { + 'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min', + 'jquery-ui': '//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min', + 'bootstrap': '//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min', + 'F2': '../../../sdk/f2.debug' + }, + shim: { + 'bootstrap': ['jquery'], + 'jquery-ui': ['jquery'] + } + }, + [ + 'jquery', + 'F2', + 'appSelector', + 'jquery-ui', + 'bootstrap' + ], function($, F2, AppSelector) { + + //simple console log helper for IE + var log = $.noop; //function() { }; + if (!window["console"]) { + window.console = {}; + } + + var logFns = { + log: log, + warn: log, + error: log, + info: log, + group: log, + groupEnd: log + }; + + for (var i in logFns) { + if (!window.console[i]) { + window.console[i] = logFns[i]; + } + } + + // wait for DOM ready + $(function() { + + //can't run this container from a file:// protocol + if (location.protocol === "file:") { + var $m = $("#notice").modal(); + // bind save button + $m.on('click', 'button.btn', function() { + $m.modal('hide'); + window.close(); + }); + return; + } + + // init the app selector + new AppSelector(); + + var containerAppHandlerToken = F2.AppHandlers.getToken(); + + var appCreateRootFunc = function(appConfig) { + var hasSettings = F2.inArray(F2.Constants.Views.SETTINGS, appConfig.views); + var hasHelp = F2.inArray(F2.Constants.Views.HELP, appConfig.views); + var hasAbout = F2.inArray(F2.Constants.Views.ABOUT, appConfig.views); + var showDivider = hasSettings || hasHelp || hasAbout; + var gridWidth = appConfig.minGridSize || 3; + + var cogMenu = [ + '' + ].join(''); + + appConfig.root = $([ + '
', + '
', + '
', + '

', appConfig.name, '

', + cogMenu, + '
', + '
', + '
' + ].join('')).get(0); + }; + + var appRenderFunc = function(appConfig, app) { + + var gridWidth = appConfig.minGridSize || 3; + + // find a row that can fit this app + var row; + $('#mainContent div.row').each(function(i, el) { + var span = 0; + $('.f2-app', el).each(function(j, app) { + span += Number($(app).data('gridWidth')); + }); + if (span <= (12 - gridWidth)) { + row = el; + return false; + } + }); + // create a new row if one wasn't found + if (row === undefined) { + row = $('
').appendTo('#mainContent'); + } + + // append app to app root and also to row + $(appConfig.root) + .addClass(F2.Constants.Css.APP) + .find('.f2-app-wrapper') + .append(app) + .parent() + .appendTo(row); + }; + + var appRenderCompleteFunc = function(appConfig) { + F2.UI.hideMask(appConfig.instanceId, appConfig.root); + }; + + var appDestroyFunc = function(appInstance) { + if (!appInstance) { + return; + } + + // call the apps destroy method, if it has one + if (appInstance.app && appInstance.app.destroy && typeof (appInstance.app.destroy) == 'function') { + appInstance.app.destroy(); + } + // warn the container developer/app developer that even though they have a destroy method it hasn't been called + else if (appInstance.app && appInstance.app.destroy) { + F2.log(appInstance.appId + ' has a Destroy property, but Destroy is not of type function and as such will not be executed.'); + } + + // fade out and remove the root + $(appInstance.config.root).fadeOut(250, function() { + $(this).remove(); + }); + }; + /** + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + + /** + * Init Container + */ + F2.init({ + UI: { + Mask: { + loadingIcon: './img/ajax-loader.gif' + } + }, + supportedViews: [F2.Constants.Views.HOME, F2.Constants.Views.SETTINGS, F2.Constants.Views.REMOVE], + secureAppPagePath: 'secure.html' // this should go on a separate domain from index.html + }); + + // Define these prior to calling F2.registerApps + F2.AppHandlers + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_CREATE_ROOT, appCreateRootFunc) + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER, appRenderFunc) + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER_AFTER, appRenderCompleteFunc) + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_DESTROY, appDestroyFunc) + ; + + //listen for app symbol change events and re-broadcast + F2.Events.on( + F2.Constants.Events.APP_SYMBOL_CHANGE, function(data) { + F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { + symbol: data.symbol, + name: data.name || "" + }); + } + ); + + /** + * init symbol lookup in navbar + */ + $("#symbolLookup") + .on('keypress', function(event) { + if (event.keyCode == 13) { + event.preventDefault(); + } + }) + .autocomplete({ + autoFocus: true, + minLength: 0, + select: function(event, ui) { + F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { + symbol: ui.item.value, + name: ui.item.label + }); + }, + source: function(request, response) { + + $.ajax({ + url: "http://dev.markitondemand.com/api/Lookup/jsonp", + dataType: "jsonp", + data: { + input: request.term + }, + success: function(data) { + response($.map(data, function(item) { + return { + label: item.Name + " (" + item.Exchange + ")", + value: item.Symbol + } + })); + }, + open: function() { + $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); + }, + close: function() { + $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); + } + }); + } + }); + }); + } ); + diff --git a/examples/container-amd/js/sampleApps.js b/examples/container-amd/js/sampleApps.js index 89a738c8..0d431293 100644 --- a/examples/container-amd/js/sampleApps.js +++ b/examples/container-amd/js/sampleApps.js @@ -1,82 +1,82 @@ { - "csharp": [ - { - "appId": "com_openf2_examples_csharp_helloworld", - "manifestUrl": "../apps/CSharp/Apps/HelloWorld", - "name": "Hello World (C#)" - } - ], + "csharp": [ + { + "appId": "com_openf2_examples_csharp_helloworld", + "manifestUrl": "../apps/CSharp/Apps/HelloWorld", + "name": "Hello World (C#)" + } + ], - "js": [ - { - "appId": "com_openf2_examples_javascript_chart", - "height": 300, - "minGridSize": 6, - "isSecure": false, - "manifestUrl": "../apps/JavaScript/Chart/manifest.js", - "name": "Price Movement Chart" - }, - { - "appId": "com_openf2_examples_javascript_quote", - "manifestUrl": "../apps/JavaScript/Quote/manifest.js", - "name": "Quote", - "views": ["home", "settings", "about"], - "minGridSize": 4 - }, - { - "appId": "com_openf2_examples_javascript_watchlist", - "manifestUrl": "../apps/JavaScript/Watchlist/manifest.js", - "name": "Watchlist", - "views": ["home", "settings"], - "minGridSize": 4 - }, - { - "appId": "com_openf2_examples_javascript_cds", - "manifestUrl": "../apps/JavaScript/CDS/manifest.js", - "name": "CDS Sovereign Big Movers", - "views": ["home", "about"], - "minGridSize": 5 - }, - { - "appId": "com_openf2_examples_javascript_compareTool", - "manifestUrl": "../apps/JavaScript/CompareTool/manifest.js", - "name": "Compare Tool", - "minGridSize": 12 - }, - { - "appId": "com_openf2_examples_javascript_helloworld", - "manifestUrl": "../apps/JavaScript/HelloWorld/manifest.js", - "name": "Hello World (JS)" - } - ], + "js": [ + { + "appId": "com_openf2_examples_javascript_chart", + "height": 300, + "minGridSize": 6, + "isSecure": false, + "manifestUrl": "../apps/JavaScript/Chart/manifest.js", + "name": "Price Movement Chart" + }, + { + "appId": "com_openf2_examples_javascript_quote", + "manifestUrl": "../apps/JavaScript/Quote/manifest.js", + "name": "Quote", + "views": ["home", "settings", "about"], + "minGridSize": 4 + }, + { + "appId": "com_openf2_examples_javascript_watchlist", + "manifestUrl": "../apps/JavaScript/Watchlist/manifest.js", + "name": "Watchlist", + "views": ["home", "settings"], + "minGridSize": 4 + }, + { + "appId": "com_openf2_examples_javascript_cds", + "manifestUrl": "../apps/JavaScript/CDS/manifest.js", + "name": "CDS Sovereign Big Movers", + "views": ["home", "about"], + "minGridSize": 5 + }, + { + "appId": "com_openf2_examples_javascript_compareTool", + "manifestUrl": "../apps/JavaScript/CompareTool/manifest.js", + "name": "Compare Tool", + "minGridSize": 12 + }, + { + "appId": "com_openf2_examples_javascript_helloworld", + "manifestUrl": "../apps/JavaScript/HelloWorld/manifest.js", + "name": "Hello World (JS)" + } + ], - "php": [ - { - "appId": "com_openf2_examples_php_f2wits", - "height": 200, - "minGridSize": 6, - "manifestUrl": "../apps/PHP/F2wits/manifest.js", - "name": "F2wits", - "views": ["home","about"] - }, - { - "appId": "com_openf2_examples_php_news", - "manifestUrl": "../apps/PHP/News/news.php", - "name": "Stock News", - "views": ["home", "settings"], - "minGridSize": 6 - }, - { - "appId": "com_openf2_examples_php_marketnews", - "manifestUrl": "../apps/PHP/MarketNews/marketnews.php", - "name": "Market News", - "views": ["home", "settings"], - "minGridSize": 6 - }, - { - "appId": "com_openf2_examples_php_helloworld", - "manifestUrl": "../apps/PHP/HelloWorld/helloworld.php", - "name": "Hello World (PHP)" - } - ] -} \ No newline at end of file + "php": [ + { + "appId": "com_openf2_examples_php_f2wits", + "height": 200, + "minGridSize": 6, + "manifestUrl": "../apps/PHP/F2wits/manifest.js", + "name": "F2wits", + "views": ["home","about"] + }, + { + "appId": "com_openf2_examples_php_news", + "manifestUrl": "../apps/PHP/News/news.php", + "name": "Stock News", + "views": ["home", "settings"], + "minGridSize": 6 + }, + { + "appId": "com_openf2_examples_php_marketnews", + "manifestUrl": "../apps/PHP/MarketNews/marketnews.php", + "name": "Market News", + "views": ["home", "settings"], + "minGridSize": 6 + }, + { + "appId": "com_openf2_examples_php_helloworld", + "manifestUrl": "../apps/PHP/HelloWorld/helloworld.php", + "name": "Hello World (PHP)" + } + ] +} diff --git a/examples/container-amd/js/secure.js b/examples/container-amd/js/secure.js index 2316f294..d5dc1c53 100644 --- a/examples/container-amd/js/secure.js +++ b/examples/container-amd/js/secure.js @@ -1,50 +1,49 @@ require( - { - basePath: 'js', - paths: { - 'bootstrap': 'bootstrap.min', - 'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', - 'F2': '../../../sdk/f2.debug' - }, - shim: { - 'bootstrap': { - deps: ['jquery'], - exports: 'jQuery' - } - } - }, - [ - 'jquery', - 'F2', - 'bootstrap' - ], - function($, F2) { + { + basePath: 'js', + paths: { + 'bootstrap': 'bootstrap.min', + 'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', + 'F2': '../../../sdk/f2.debug' + }, + shim: { + 'bootstrap': { + deps: ['jquery'], + exports: 'jQuery' + } + } + }, + [ + 'jquery', + 'F2', + 'bootstrap' + ], function($, F2) { - // wait for DOM ready - $(function() { - //get AppHandler token - var _token = F2.AppHandlers.getToken(); - //create & assign a "root" element for the App - F2.AppHandlers.on(_token,F2.Constants.AppHandlers.APP_CREATE_ROOT,function(appConfig) { - appConfig.root = $('div.row','#mainContent').addClass(F2.Constants.Css.APP).get(0); - }); - //render the App - F2.AppHandlers.on(_token,F2.Constants.AppHandlers.APP_RENDER,function(appConfig, html) { - var gridSize = appConfig.minGridSize || 4; - gridSize = 'span' + gridSize; - $(appConfig.root).append('
'+html+'
'); - }); - // init Container - F2.init({ - isSecureAppPage:true, - debugMode: true, - UI:{ - Mask:{ - loadingIcon:'./img/ajax-loader.gif' - } - }, - supportedViews:[F2.Constants.Views.HOME] - }); - }); - } -); \ No newline at end of file + // wait for DOM ready + $(function() { + //get AppHandler token + var _token = F2.AppHandlers.getToken(); + //create & assign a "root" element for the App + F2.AppHandlers.on(_token, F2.Constants.AppHandlers.APP_CREATE_ROOT, function(appConfig) { + appConfig.root = $('div.row', '#mainContent').addClass(F2.Constants.Css.APP).get(0); + }); + //render the App + F2.AppHandlers.on(_token, F2.Constants.AppHandlers.APP_RENDER, function(appConfig, html) { + var gridSize = appConfig.minGridSize || 4; + gridSize = 'span' + gridSize; + $(appConfig.root).append('
' + html + '
'); + }); + // init Container + F2.init({ + isSecureAppPage: true, + debugMode: true, + UI: { + Mask: { + loadingIcon: './img/ajax-loader.gif' + } + }, + supportedViews: [F2.Constants.Views.HOME] + }); + }); + } +); diff --git a/examples/container-amd/js/storage.js b/examples/container-amd/js/storage.js index 324d3455..ce8a870e 100644 --- a/examples/container-amd/js/storage.js +++ b/examples/container-amd/js/storage.js @@ -1,82 +1,85 @@ define( + [ + 'F2' + ], function(F2) { + var _hasLocalStorage = typeof Storage !== 'undefined' && !!window.localStorage; + var _getKey = function(key) { + return 'F2-' + key; + }; - [ - 'F2' - ], + return { + /** + * @method getItem + * @param {string} key The key of the item to retrieve + */ + getItem: function(key) { - function(F2) { - var _hasLocalStorage = typeof Storage !== 'undefined' && !!window.localStorage; - var _getKey = function(key) { - return 'F2-' + key; - }; + var value = null; - return { - /** - * @method getItem - * @param {string} key The key of the item to retrieve - */ - getItem:function(key) { + if (!key) { + return; + } - var value = null; + key = _getKey(key); - if (!key) { return; } + if (_hasLocalStorage) { + value = localStorage.getItem(key); + } else { + var cookies = document.cookie.split(/\s*;\s*/); + for (var i = 0, len = cookies.length; i < len; i++) { + var parts = cookies[i].split(/\s*=\s*/); + if (parts.length > 1 && unescape(parts[0]) == key) { + value = unescape(parts[1]); + } + } + } - key = _getKey(key); + if (!!value) { + value = F2.parse(value); + } - if (_hasLocalStorage) { - value = localStorage.getItem(key); - } else { - var cookies = document.cookie.split(/\s*;\s*/); - for (var i = 0, len = cookies.length; i < len; i++) { - var parts = cookies[i].split(/\s*=\s*/); - if (parts.length > 1 && unescape(parts[0]) == key) { - value = unescape(parts[1]); - } - } - } + return value; + }, + /** + * @method removeItem + * @param {string} key The key of the item to remove + */ + removeItem: function(key) { - if (!!value) { - value = F2.parse(value); - } + if (!key) { + return; + } - return value; - }, - /** - * @method removeItem - * @param {string} key The key of the item to remove - */ - removeItem:function(key) { + key = _getKey(key); - if (!key) { return; } + if (_hasLocalStorage) { + localStorage.removeItem(key); + } else { + document.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; + } + }, + /** + * @method setItem + * @param {string} key The key of the item to set + * @param {object} value The value to be stored + */ + setItem: function(key, value) { - key = _getKey(key); + if (!key || !value) { + return; + } - if (_hasLocalStorage) { - localStorage.removeItem(key); - } else { - document.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; - } - }, - /** - * @method setItem - * @param {string} key The key of the item to set - * @param {object} value The value to be stored - */ - setItem:function(key, value) { + key = _getKey(key); + value = F2.stringify(value); - if (!key || !value) { return; } - - key = _getKey(key); - value = F2.stringify(value); - - if (_hasLocalStorage) { - localStorage.setItem(key, value); - } else { - var exp = new Date(); - exp.setFullYear((new Date()).getFullYear() + 100); - document.cookie = escape(key) + '=' + escape(value) + '; expires=' + exp.toUTCString() + '; path=/'; - } - } - }; - } + if (_hasLocalStorage) { + localStorage.setItem(key, value); + } else { + var exp = new Date(); + exp.setFullYear((new Date()).getFullYear() + 100); + document.cookie = escape(key) + '=' + escape(value) + '; expires=' + exp.toUTCString() + '; path=/'; + } + } + }; + } ); diff --git a/examples/container-amd/secure.html b/examples/container-amd/secure.html index 7ee7f7cc..0094cbcb 100644 --- a/examples/container-amd/secure.html +++ b/examples/container-amd/secure.html @@ -1,33 +1,33 @@ - F2 - HTML Container Example - - - - - - - + F2 - HTML Container Example + + + + + + + -
-
-
+
+
+
- + - \ No newline at end of file + diff --git a/examples/container-autoload/index.html b/examples/container-autoload/index.html index 8bbfd3c7..798da860 100644 --- a/examples/container-autoload/index.html +++ b/examples/container-autoload/index.html @@ -20,58 +20,58 @@ - - -
-
-
-
-
-

Compare Tool

- -
-
-
-
-
-
+ + +
+
+
+
+
+

Compare Tool

+ +
+
+
+
+
+
- - - - - \ No newline at end of file + + + + + diff --git a/examples/container-locale/js/examples.js b/examples/container-locale/js/examples.js index 860aad20..e096a623 100644 --- a/examples/container-locale/js/examples.js +++ b/examples/container-locale/js/examples.js @@ -1,94 +1,95 @@ -$(function(){ - - //ensure this is run from http://localhost - if (location.protocol === "file:"){ - return; - } - - // grab apps from storage - var requestedApps = F2.Storage.getItem('requestedApps') || []; - - // setup modal - var $modal = $('#languageSelect').modal({ - backdrop: 'static', - keyboard: false, - show: false - }); - - // bind select apps - $('#btnSelectApps').on('click', function() { - $modal.modal('show'); - }); - - // bind checkbox events - $modal.on('change', 'input:checkbox', function() { - if ($('input:checkbox:checked', $modal).length) { - $('button.btn-primary', $modal).removeClass('disabled'); - } else { - $('button.btn-primary', $modal).addClass('disabled'); - } - }); - - // bind save button - $modal.on('click', 'button.btn-primary:not(.disabled)', function() { - var apps = []; - var storageItems = []; - - $('input:checked', $modal).map(function(i, el) { - apps.push($(el).data('f2-app')); - storageItems.push($(el).val()); - }); - - $modal.modal('hide'); - - // save apps to storage - F2.Storage.setItem('requestedApps', storageItems); - - // remove all apps and add only the selected ones - F2.removeAllApps(); - F2.registerApps(apps); - }); - - // show a loading mask and the modal if there were no requested apps - if (!requestedApps.length) { - F2.UI.showMask('', $('#languageSelect'), true); - $modal.modal('show'); - } - - // load in app json - $.getJSON('./js/sampleApps.js', function(allApps) { - $.each(allApps, function(language, apps) { - $('[data-language="' + language + '"]', $modal).append( - $.map(apps, function(app, i) { - var $d = $('
'), - $lbl = $(''), - $ck = $('').data('f2-app', app), - name = ' ' + app.name + (app.isSecure ? ' (Secure)' : '') - ; - - $lbl.append($ck).append(name); - - return $d.append($lbl); - }) - ); - }) - - // if no requested apps, hide the loader, otherwise register the apps - if (!requestedApps.length) { - F2.UI.hideMask('', $modal); - - } else { - // check the appropriate boxes - $.each(requestedApps, function(i, a) { - $('input[name="app"][value="' + a + '"]', $modal).prop('checked', true); - }); - - // fire change event which should enable the Save button - $('input:checkbox:first', $modal).change(); - - // click the Save button - $('button.btn-primary', $modal).click(); - } - }); - -}); \ No newline at end of file +$(function() { + + //ensure this is run from http://localhost + if (location.protocol === "file:") { + return; + } + + // grab apps from storage + var requestedApps = F2.Storage.getItem('requestedApps') || []; + + // setup modal + var $modal = $('#languageSelect').modal({ + backdrop: 'static', + keyboard: false, + show: false + }); + + // bind select apps + $('#btnSelectApps').on('click', function() { + $modal.modal('show'); + }); + + // bind checkbox events + $modal.on('change', 'input:checkbox', function() { + if ($('input:checkbox:checked', $modal).length) { + $('button.btn-primary', $modal).removeClass('disabled'); + } else { + $('button.btn-primary', $modal).addClass('disabled'); + } + }); + + // bind save button + $modal.on('click', 'button.btn-primary:not(.disabled)', function() { + var apps = []; + var storageItems = []; + + $('input:checked', $modal).map(function(i, el) { + apps.push($(el).data('f2-app')); + storageItems.push($(el).val()); + }); + + $modal.modal('hide'); + + // save apps to storage + F2.Storage.setItem('requestedApps', storageItems); + + // remove all apps and add only the selected ones + F2.removeAllApps(); + F2.registerApps(apps); + }); + + // show a loading mask and the modal if there were no requested apps + if (!requestedApps.length) { + F2.UI.showMask('', $('#languageSelect'), true); + $modal.modal('show'); + } + + // load in app json + $.getJSON('./js/sampleApps.js', function(allApps) { + $.each(allApps, function(language, apps) { + $('[data-language="' + language + '"]', $modal).append( + $.map(apps, function(app, i) { + var $d = $('
'), + $lbl = $(''), + $ck = $('').data('f2-app', app), + name = ' ' + app.name + (app.isSecure ? ' (Secure)' : '') + ; + + $lbl.append($ck).append(name); + + return $d.append($lbl); + }) + ); + }) + + // if no requested apps, hide the loader, otherwise register the apps + if (!requestedApps.length) { + F2.UI.hideMask('', $modal); + + } else { + // check the appropriate boxes + $.each(requestedApps, function(i, a) { + $('input[name="app"][value="' + a + '"]', $modal).prop('checked', true); + }); + + // fire change event which should enable the Save button + $('input:checkbox:first', $modal).change(); + + // click the Save button + $('button.btn-primary', $modal).click(); + } + }); + + }); + diff --git a/examples/container-locale/js/sampleApps.js b/examples/container-locale/js/sampleApps.js index b907f34d..99d8915e 100644 --- a/examples/container-locale/js/sampleApps.js +++ b/examples/container-locale/js/sampleApps.js @@ -1,90 +1,90 @@ { - "csharp": [ - { - "appId": "com_openf2_examples_csharp_helloworld", - "manifestUrl": "../apps/CSharp/Apps/HelloWorld", - "name": "Hello World (C#)" - } - ], + "csharp": [ + { + "appId": "com_openf2_examples_csharp_helloworld", + "manifestUrl": "../apps/CSharp/Apps/HelloWorld", + "name": "Hello World (C#)" + } + ], - "js": [ - { - "appId": "com_openf2_examples_javascript_chart", - "height": 300, - "minGridSize": 6, - "isSecure": false, - "manifestUrl": "../apps/JavaScript/Chart/manifest.js", - "name": "Price Movement Chart" - }, - { - "appId": "com_openf2_examples_javascript_quote", - "manifestUrl": "../apps/JavaScript/Quote/manifest.js", - "name": "Quote", - "views": ["home", "settings", "about"], - "minGridSize": 4, - "localeSupport": ["en-us","en-gb"] - }, - { - "appId": "com_openf2_examples_javascript_watchlist", - "manifestUrl": "../apps/JavaScript/Watchlist/manifest.js", - "name": "Watchlist", - "views": ["home", "settings"], - "minGridSize": 4 - }, - { - "appId": "com_openf2_examples_javascript_cds", - "manifestUrl": "../apps/JavaScript/CDS/manifest.js", - "name": "CDS Sovereign Big Movers", - "views": ["home", "about"], - "minGridSize": 5 - }, - { - "appId": "com_openf2_examples_javascript_compareTool", - "manifestUrl": "../apps/JavaScript/CompareTool/manifest.js", - "name": "Compare Tool", - "minGridSize": 12 - }, - { - "appId": "com_openf2_examples_javascript_helloworld", - "manifestUrl": "../apps/JavaScript/HelloWorld/manifest.js", - "name": "Hello World (JS)" - }, - { - "appId": "com_openf2_examples_javascript_helloworldlocale", - "manifestUrl": "../apps/JavaScript/HelloWorldLocale/manifest.js", - "name": "Hello World Locale (JS)", - "minGridSize": 5, - "localeSupport": ["en-us","en-gb"] - } - ], + "js": [ + { + "appId": "com_openf2_examples_javascript_chart", + "height": 300, + "minGridSize": 6, + "isSecure": false, + "manifestUrl": "../apps/JavaScript/Chart/manifest.js", + "name": "Price Movement Chart" + }, + { + "appId": "com_openf2_examples_javascript_quote", + "manifestUrl": "../apps/JavaScript/Quote/manifest.js", + "name": "Quote", + "views": ["home", "settings", "about"], + "minGridSize": 4, + "localeSupport": ["en-us","en-gb"] + }, + { + "appId": "com_openf2_examples_javascript_watchlist", + "manifestUrl": "../apps/JavaScript/Watchlist/manifest.js", + "name": "Watchlist", + "views": ["home", "settings"], + "minGridSize": 4 + }, + { + "appId": "com_openf2_examples_javascript_cds", + "manifestUrl": "../apps/JavaScript/CDS/manifest.js", + "name": "CDS Sovereign Big Movers", + "views": ["home", "about"], + "minGridSize": 5 + }, + { + "appId": "com_openf2_examples_javascript_compareTool", + "manifestUrl": "../apps/JavaScript/CompareTool/manifest.js", + "name": "Compare Tool", + "minGridSize": 12 + }, + { + "appId": "com_openf2_examples_javascript_helloworld", + "manifestUrl": "../apps/JavaScript/HelloWorld/manifest.js", + "name": "Hello World (JS)" + }, + { + "appId": "com_openf2_examples_javascript_helloworldlocale", + "manifestUrl": "../apps/JavaScript/HelloWorldLocale/manifest.js", + "name": "Hello World Locale (JS)", + "minGridSize": 5, + "localeSupport": ["en-us","en-gb"] + } + ], - "php": [ - { - "appId": "com_openf2_examples_php_f2wits", - "height": 200, - "minGridSize": 6, - "manifestUrl": "../apps/PHP/F2wits/manifest.js", - "name": "F2wits", - "views": ["home","about"] - }, - { - "appId": "com_openf2_examples_php_news", - "manifestUrl": "../apps/PHP/News/news.php", - "name": "Stock News", - "views": ["home", "settings"], - "minGridSize": 6 - }, - { - "appId": "com_openf2_examples_php_marketnews", - "manifestUrl": "../apps/PHP/MarketNews/marketnews.php", - "name": "Market News", - "views": ["home", "settings"], - "minGridSize": 6 - }, - { - "appId": "com_openf2_examples_php_helloworld", - "manifestUrl": "../apps/PHP/HelloWorld/helloworld.php", - "name": "Hello World (PHP)" - } - ] -} \ No newline at end of file + "php": [ + { + "appId": "com_openf2_examples_php_f2wits", + "height": 200, + "minGridSize": 6, + "manifestUrl": "../apps/PHP/F2wits/manifest.js", + "name": "F2wits", + "views": ["home","about"] + }, + { + "appId": "com_openf2_examples_php_news", + "manifestUrl": "../apps/PHP/News/news.php", + "name": "Stock News", + "views": ["home", "settings"], + "minGridSize": 6 + }, + { + "appId": "com_openf2_examples_php_marketnews", + "manifestUrl": "../apps/PHP/MarketNews/marketnews.php", + "name": "Market News", + "views": ["home", "settings"], + "minGridSize": 6 + }, + { + "appId": "com_openf2_examples_php_helloworld", + "manifestUrl": "../apps/PHP/HelloWorld/helloworld.php", + "name": "Hello World (PHP)" + } + ] +} diff --git a/examples/container-locale/js/storage.js b/examples/container-locale/js/storage.js index 231eea63..0fd6bbd4 100644 --- a/examples/container-locale/js/storage.js +++ b/examples/container-locale/js/storage.js @@ -1,80 +1,84 @@ -/** - * - */ F2.extend('Storage', (function() { - var _hasLocalStorage = typeof Storage !== 'undefined' && !!window.localStorage; - - var _getKey = function(key) { - return 'F2-' + key; - }; - - return { - /** - * @method getItem - * @param {string} key The key of the item to retrieve - */ - getItem:function(key) { - - var value = null; - - if (!key) { return; } - - key = _getKey(key); - - if (_hasLocalStorage) { - value = localStorage.getItem(key); - } else { - var cookies = document.cookie.split(/\s*;\s*/); - for (var i = 0, len = cookies.length; i < len; i++) { - var parts = cookies[i].split(/\s*=\s*/); - if (parts.length > 1 && unescape(parts[0]) == key) { - value = unescape(parts[1]); - } - } - } - - if (!!value) { - value = F2.parse(value); - } - - return value; - }, - /** - * @method removeItem - * @param {string} key The key of the item to remove - */ - removeItem:function(key) { - - if (!key) { return; } - - key = _getKey(key); - - if (_hasLocalStorage) { - localStorage.removeItem(key); - } else { - document.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; - } - }, - /** - * @method setItem - * @param {string} key The key of the item to set - * @param {object} value The value to be stored - */ - setItem:function(key, value) { - - if (!key || !value) { return; } - - key = _getKey(key); - value = F2.stringify(value); - - if (_hasLocalStorage) { - localStorage.setItem(key, value); - } else { - var exp = new Date(); - exp.setFullYear((new Date()).getFullYear() + 100); - document.cookie = escape(key) + '=' + escape(value) + '; expires=' + exp.toUTCString() + '; path=/'; - } - } - }; -})()); \ No newline at end of file + var _hasLocalStorage = typeof Storage !== 'undefined' && !!window.localStorage; + + var _getKey = function(key) { + return 'F2-' + key; + }; + + return { + /** + * @method getItem + * @param {string} key The key of the item to retrieve + */ + getItem: function(key) { + + var value = null; + + if (!key) { + return; + } + + key = _getKey(key); + + if (_hasLocalStorage) { + value = localStorage.getItem(key); + } else { + var cookies = document.cookie.split(/\s*;\s*/); + for (var i = 0, len = cookies.length; i < len; i++) { + var parts = cookies[i].split(/\s*=\s*/); + if (parts.length > 1 && unescape(parts[0]) == key) { + value = unescape(parts[1]); + } + } + } + + if (!!value) { + value = F2.parse(value); + } + + return value; + }, + /** + * @method removeItem + * @param {string} key The key of the item to remove + */ + removeItem: function(key) { + + if (!key) { + return; + } + + key = _getKey(key); + + if (_hasLocalStorage) { + localStorage.removeItem(key); + } else { + document.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; + } + }, + /** + * @method setItem + * @param {string} key The key of the item to set + * @param {object} value The value to be stored + */ + setItem: function(key, value) { + + if (!key || !value) { + return; + } + + key = _getKey(key); + value = F2.stringify(value); + + if (_hasLocalStorage) { + localStorage.setItem(key, value); + } else { + var exp = new Date(); + exp.setFullYear((new Date()).getFullYear() + 100); + document.cookie = escape(key) + '=' + escape(value) + '; expires=' + exp.toUTCString() + '; path=/'; + } + } + }; +})()); + diff --git a/examples/container-locale/secure.html b/examples/container-locale/secure.html index f6fca353..0f1b6bf7 100644 --- a/examples/container-locale/secure.html +++ b/examples/container-locale/secure.html @@ -19,27 +19,27 @@ - + -
-
-
+
+
+
- @@ -48,32 +48,32 @@ - + - \ No newline at end of file + diff --git a/examples/container/js/container.js b/examples/container/js/container.js index b1acd4a2..11dc4265 100644 --- a/examples/container/js/container.js +++ b/examples/container/js/container.js @@ -20,180 +20,180 @@ for (var i in logFns) { } $(function() { - - var containerAppHandlerToken = F2.AppHandlers.getToken(); - - var appCreateRootFunc = function(appConfig) { - var hasSettings = F2.inArray(F2.Constants.Views.SETTINGS, appConfig.views); - var hasHelp = F2.inArray(F2.Constants.Views.HELP, appConfig.views); - var hasAbout = F2.inArray(F2.Constants.Views.ABOUT, appConfig.views); - var showDivider = hasSettings || hasHelp || hasAbout; - var gridWidth = appConfig.minGridSize || 3; - - var cogMenu = [ - '' - ].join(''); - - appConfig.root = $([ - '
', - '
', - '
', - '

', appConfig.name, '

', - cogMenu, - '
', - '
', - '
' - ].join('')).get(0); - }; - - var appRenderFunc = function(appConfig, app) { - - var gridWidth = appConfig.minGridSize || 3; - - // find a row that can fit this app - var row; - $('#mainContent div.row').each(function(i, el) { - var span = 0; - $('.f2-app', el).each(function(j, app) { - span += Number($(app).data('gridWidth')); - }); - if (span <= (12 - gridWidth)) { - row = el; - return false; - } - }); - // create a new row if one wasn't found - if (row === undefined) { - row = $('
').appendTo('#mainContent'); - } - - // append app to app root and also to row - $(appConfig.root) - .addClass(F2.Constants.Css.APP) - .find('.f2-app-wrapper') - .append(app) - .parent() - .appendTo(row); - }; - - var appRenderCompleteFunc = function(appConfig) { - F2.UI.hideMask(appConfig.instanceId, appConfig.root); - }; - - var appDestroyFunc = function(appInstance) { - if(!appInstance) { return; } - - // call the apps destroy method, if it has one - if(appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function'){ - appInstance.app.destroy(); - } - // warn the container developer/app developer that even though they have a destroy method it hasn't been called - else if(appInstance.app && appInstance.app.destroy){ - F2.log(appInstance.appId + ' has a Destroy property, but Destroy is not of type function and as such will not be executed.'); - } - - // fade out and remove the root - jQuery(appInstance.config.root).fadeOut(250, function() { - jQuery(this).remove(); - }); - }; - /** - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - */ - - /** - * Init Container - */ - F2.init({ - debugMode: true, - UI:{ - Mask:{ - loadingIcon:'./img/ajax-loader.gif' - } - }, - supportedViews: [F2.Constants.Views.HOME, F2.Constants.Views.SETTINGS, F2.Constants.Views.REMOVE], - secureAppPagePath: 'secure.html' // this should go on a separate domain from index.html - }); - - // Define these prior to calling F2.registerApps - F2.AppHandlers - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_CREATE_ROOT, appCreateRootFunc) - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER, appRenderFunc) - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER_AFTER, appRenderCompleteFunc) - .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_DESTROY, appDestroyFunc) - ; - - //listen for app symbol change events and re-broadcast - F2.Events.on(F2.Constants.Events.APP_SYMBOL_CHANGE,function(data) { - F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { symbol: data.symbol, name: data.name || '' }); - }); - - //listen for any failed resources and display alert (demo purposes only) - F2.Events.on('RESOURCE_FAILED_TO_LOAD', function(data){ - var error = ['
', - '
', - '
', - 'A script resource defined in "'+data.appId+'" failed to load.', - '
', - '
', - '
']; - $('#mainContent').prepend(error.join('')); - }); - - /** - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - */ - - /** - * init symbol lookup in navbar - */ - $('#symbolLookup') - .on('keypress', function(event) { - if (event.keyCode == 13) { - event.preventDefault(); - } - }) - .autocomplete({ - autoFocus:true, - minLength: 0, - select: function (event, ui) { - F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { symbol: ui.item.value, name: ui.item.label }); - }, - source: function (request, response) { - - $.ajax({ - url: 'http://dev.markitondemand.com/api/Lookup/jsonp', - dataType: 'jsonp', - data: { - input: request.term - }, - success: function (data) { - response($.map(data, function (item) { - return { - label: item.Name + ' (' + item.Exchange + ')', - value: item.Symbol - }; - })); - }, - open: function() { - $(this).removeClass('ui-corner-all').addClass('ui-corner-top'); - }, - close: function() { - $(this).removeClass('ui-corner-top').addClass('ui-corner-all'); - } - }); - } - }); - -}); \ No newline at end of file + + var containerAppHandlerToken = F2.AppHandlers.getToken(); + + var appCreateRootFunc = function(appConfig) { + var hasSettings = F2.inArray(F2.Constants.Views.SETTINGS, appConfig.views); + var hasHelp = F2.inArray(F2.Constants.Views.HELP, appConfig.views); + var hasAbout = F2.inArray(F2.Constants.Views.ABOUT, appConfig.views); + var showDivider = hasSettings || hasHelp || hasAbout; + var gridWidth = appConfig.minGridSize || 3; + + var cogMenu = [ + '' + ].join(''); + + appConfig.root = $([ + '
', + '
', + '
', + '

', appConfig.name, '

', + cogMenu, + '
', + '
', + '
' + ].join('')).get(0); + }; + + var appRenderFunc = function(appConfig, app) { + + var gridWidth = appConfig.minGridSize || 3; + + // find a row that can fit this app + var row; + $('#mainContent div.row').each(function(i, el) { + var span = 0; + $('.f2-app', el).each(function(j, app) { + span += Number($(app).data('gridWidth')); + }); + if (span <= (12 - gridWidth)) { + row = el; + return false; + } + }); + // create a new row if one wasn't found + if (row === undefined) { + row = $('
').appendTo('#mainContent'); + } + + // append app to app root and also to row + $(appConfig.root) + .addClass(F2.Constants.Css.APP) + .find('.f2-app-wrapper') + .append(app) + .parent() + .appendTo(row); + }; + + var appRenderCompleteFunc = function(appConfig) { + F2.UI.hideMask(appConfig.instanceId, appConfig.root); + }; + + var appDestroyFunc = function(appInstance) { + if(!appInstance) { return; } + + // call the apps destroy method, if it has one + if(appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function'){ + appInstance.app.destroy(); + } + // warn the container developer/app developer that even though they have a destroy method it hasn't been called + else if(appInstance.app && appInstance.app.destroy){ + F2.log(appInstance.appId + ' has a Destroy property, but Destroy is not of type function and as such will not be executed.'); + } + + // fade out and remove the root + jQuery(appInstance.config.root).fadeOut(250, function() { + jQuery(this).remove(); + }); + }; + /** + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + + /** + * Init Container + */ + F2.init({ + debugMode: true, + UI:{ + Mask:{ + loadingIcon:'./img/ajax-loader.gif' + } + }, + supportedViews: [F2.Constants.Views.HOME, F2.Constants.Views.SETTINGS, F2.Constants.Views.REMOVE], + secureAppPagePath: 'secure.html' // this should go on a separate domain from index.html + }); + + // Define these prior to calling F2.registerApps + F2.AppHandlers + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_CREATE_ROOT, appCreateRootFunc) + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER, appRenderFunc) + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_RENDER_AFTER, appRenderCompleteFunc) + .on(containerAppHandlerToken, F2.Constants.AppHandlers.APP_DESTROY, appDestroyFunc) + ; + + //listen for app symbol change events and re-broadcast + F2.Events.on(F2.Constants.Events.APP_SYMBOL_CHANGE,function(data) { + F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { symbol: data.symbol, name: data.name || '' }); + }); + + //listen for any failed resources and display alert (demo purposes only) + F2.Events.on('RESOURCE_FAILED_TO_LOAD', function(data){ + var error = ['
', + '
', + '
', + 'A script resource defined in "'+data.appId+'" failed to load.', + '
', + '
', + '
']; + $('#mainContent').prepend(error.join('')); + }); + + /** + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + + /** + * init symbol lookup in navbar + */ + $('#symbolLookup') + .on('keypress', function(event) { + if (event.keyCode == 13) { + event.preventDefault(); + } + }) + .autocomplete({ + autoFocus:true, + minLength: 0, + select: function (event, ui) { + F2.Events.emit(F2.Constants.Events.CONTAINER_SYMBOL_CHANGE, { symbol: ui.item.value, name: ui.item.label }); + }, + source: function (request, response) { + + $.ajax({ + url: 'http://dev.markitondemand.com/api/Lookup/jsonp', + dataType: 'jsonp', + data: { + input: request.term + }, + success: function (data) { + response($.map(data, function (item) { + return { + label: item.Name + ' (' + item.Exchange + ')', + value: item.Symbol + }; + })); + }, + open: function() { + $(this).removeClass('ui-corner-all').addClass('ui-corner-top'); + }, + close: function() { + $(this).removeClass('ui-corner-top').addClass('ui-corner-all'); + } + }); + } + }); + +}); diff --git a/examples/container/js/examples.js b/examples/container/js/examples.js index 860aad20..89e00d19 100644 --- a/examples/container/js/examples.js +++ b/examples/container/js/examples.js @@ -1,94 +1,94 @@ $(function(){ - //ensure this is run from http://localhost - if (location.protocol === "file:"){ - return; - } - - // grab apps from storage - var requestedApps = F2.Storage.getItem('requestedApps') || []; - - // setup modal - var $modal = $('#languageSelect').modal({ - backdrop: 'static', - keyboard: false, - show: false - }); - - // bind select apps - $('#btnSelectApps').on('click', function() { - $modal.modal('show'); - }); - - // bind checkbox events - $modal.on('change', 'input:checkbox', function() { - if ($('input:checkbox:checked', $modal).length) { - $('button.btn-primary', $modal).removeClass('disabled'); - } else { - $('button.btn-primary', $modal).addClass('disabled'); - } - }); - - // bind save button - $modal.on('click', 'button.btn-primary:not(.disabled)', function() { - var apps = []; - var storageItems = []; - - $('input:checked', $modal).map(function(i, el) { - apps.push($(el).data('f2-app')); - storageItems.push($(el).val()); - }); - - $modal.modal('hide'); - - // save apps to storage - F2.Storage.setItem('requestedApps', storageItems); - - // remove all apps and add only the selected ones - F2.removeAllApps(); - F2.registerApps(apps); - }); - - // show a loading mask and the modal if there were no requested apps - if (!requestedApps.length) { - F2.UI.showMask('', $('#languageSelect'), true); - $modal.modal('show'); - } - - // load in app json - $.getJSON('./js/sampleApps.js', function(allApps) { - $.each(allApps, function(language, apps) { - $('[data-language="' + language + '"]', $modal).append( - $.map(apps, function(app, i) { - var $d = $('
'), - $lbl = $(''), - $ck = $('').data('f2-app', app), - name = ' ' + app.name + (app.isSecure ? ' (Secure)' : '') - ; - - $lbl.append($ck).append(name); - - return $d.append($lbl); - }) - ); - }) - - // if no requested apps, hide the loader, otherwise register the apps - if (!requestedApps.length) { - F2.UI.hideMask('', $modal); - - } else { - // check the appropriate boxes - $.each(requestedApps, function(i, a) { - $('input[name="app"][value="' + a + '"]', $modal).prop('checked', true); - }); - - // fire change event which should enable the Save button - $('input:checkbox:first', $modal).change(); - - // click the Save button - $('button.btn-primary', $modal).click(); - } - }); - -}); \ No newline at end of file + //ensure this is run from http://localhost + if (location.protocol === "file:"){ + return; + } + + // grab apps from storage + var requestedApps = F2.Storage.getItem('requestedApps') || []; + + // setup modal + var $modal = $('#languageSelect').modal({ + backdrop: 'static', + keyboard: false, + show: false + }); + + // bind select apps + $('#btnSelectApps').on('click', function() { + $modal.modal('show'); + }); + + // bind checkbox events + $modal.on('change', 'input:checkbox', function() { + if ($('input:checkbox:checked', $modal).length) { + $('button.btn-primary', $modal).removeClass('disabled'); + } else { + $('button.btn-primary', $modal).addClass('disabled'); + } + }); + + // bind save button + $modal.on('click', 'button.btn-primary:not(.disabled)', function() { + var apps = []; + var storageItems = []; + + $('input:checked', $modal).map(function(i, el) { + apps.push($(el).data('f2-app')); + storageItems.push($(el).val()); + }); + + $modal.modal('hide'); + + // save apps to storage + F2.Storage.setItem('requestedApps', storageItems); + + // remove all apps and add only the selected ones + F2.removeAllApps(); + F2.registerApps(apps); + }); + + // show a loading mask and the modal if there were no requested apps + if (!requestedApps.length) { + F2.UI.showMask('', $('#languageSelect'), true); + $modal.modal('show'); + } + + // load in app json + $.getJSON('./js/sampleApps.js', function(allApps) { + $.each(allApps, function(language, apps) { + $('[data-language="' + language + '"]', $modal).append( + $.map(apps, function(app, i) { + var $d = $('
'), + $lbl = $(''), + $ck = $('').data('f2-app', app), + name = ' ' + app.name + (app.isSecure ? ' (Secure)' : '') + ; + + $lbl.append($ck).append(name); + + return $d.append($lbl); + }) + ); + }) + + // if no requested apps, hide the loader, otherwise register the apps + if (!requestedApps.length) { + F2.UI.hideMask('', $modal); + + } else { + // check the appropriate boxes + $.each(requestedApps, function(i, a) { + $('input[name="app"][value="' + a + '"]', $modal).prop('checked', true); + }); + + // fire change event which should enable the Save button + $('input:checkbox:first', $modal).change(); + + // click the Save button + $('button.btn-primary', $modal).click(); + } + }); + +}); diff --git a/examples/container/js/sampleApps.js b/examples/container/js/sampleApps.js index 89a738c8..0d431293 100644 --- a/examples/container/js/sampleApps.js +++ b/examples/container/js/sampleApps.js @@ -1,82 +1,82 @@ { - "csharp": [ - { - "appId": "com_openf2_examples_csharp_helloworld", - "manifestUrl": "../apps/CSharp/Apps/HelloWorld", - "name": "Hello World (C#)" - } - ], + "csharp": [ + { + "appId": "com_openf2_examples_csharp_helloworld", + "manifestUrl": "../apps/CSharp/Apps/HelloWorld", + "name": "Hello World (C#)" + } + ], - "js": [ - { - "appId": "com_openf2_examples_javascript_chart", - "height": 300, - "minGridSize": 6, - "isSecure": false, - "manifestUrl": "../apps/JavaScript/Chart/manifest.js", - "name": "Price Movement Chart" - }, - { - "appId": "com_openf2_examples_javascript_quote", - "manifestUrl": "../apps/JavaScript/Quote/manifest.js", - "name": "Quote", - "views": ["home", "settings", "about"], - "minGridSize": 4 - }, - { - "appId": "com_openf2_examples_javascript_watchlist", - "manifestUrl": "../apps/JavaScript/Watchlist/manifest.js", - "name": "Watchlist", - "views": ["home", "settings"], - "minGridSize": 4 - }, - { - "appId": "com_openf2_examples_javascript_cds", - "manifestUrl": "../apps/JavaScript/CDS/manifest.js", - "name": "CDS Sovereign Big Movers", - "views": ["home", "about"], - "minGridSize": 5 - }, - { - "appId": "com_openf2_examples_javascript_compareTool", - "manifestUrl": "../apps/JavaScript/CompareTool/manifest.js", - "name": "Compare Tool", - "minGridSize": 12 - }, - { - "appId": "com_openf2_examples_javascript_helloworld", - "manifestUrl": "../apps/JavaScript/HelloWorld/manifest.js", - "name": "Hello World (JS)" - } - ], + "js": [ + { + "appId": "com_openf2_examples_javascript_chart", + "height": 300, + "minGridSize": 6, + "isSecure": false, + "manifestUrl": "../apps/JavaScript/Chart/manifest.js", + "name": "Price Movement Chart" + }, + { + "appId": "com_openf2_examples_javascript_quote", + "manifestUrl": "../apps/JavaScript/Quote/manifest.js", + "name": "Quote", + "views": ["home", "settings", "about"], + "minGridSize": 4 + }, + { + "appId": "com_openf2_examples_javascript_watchlist", + "manifestUrl": "../apps/JavaScript/Watchlist/manifest.js", + "name": "Watchlist", + "views": ["home", "settings"], + "minGridSize": 4 + }, + { + "appId": "com_openf2_examples_javascript_cds", + "manifestUrl": "../apps/JavaScript/CDS/manifest.js", + "name": "CDS Sovereign Big Movers", + "views": ["home", "about"], + "minGridSize": 5 + }, + { + "appId": "com_openf2_examples_javascript_compareTool", + "manifestUrl": "../apps/JavaScript/CompareTool/manifest.js", + "name": "Compare Tool", + "minGridSize": 12 + }, + { + "appId": "com_openf2_examples_javascript_helloworld", + "manifestUrl": "../apps/JavaScript/HelloWorld/manifest.js", + "name": "Hello World (JS)" + } + ], - "php": [ - { - "appId": "com_openf2_examples_php_f2wits", - "height": 200, - "minGridSize": 6, - "manifestUrl": "../apps/PHP/F2wits/manifest.js", - "name": "F2wits", - "views": ["home","about"] - }, - { - "appId": "com_openf2_examples_php_news", - "manifestUrl": "../apps/PHP/News/news.php", - "name": "Stock News", - "views": ["home", "settings"], - "minGridSize": 6 - }, - { - "appId": "com_openf2_examples_php_marketnews", - "manifestUrl": "../apps/PHP/MarketNews/marketnews.php", - "name": "Market News", - "views": ["home", "settings"], - "minGridSize": 6 - }, - { - "appId": "com_openf2_examples_php_helloworld", - "manifestUrl": "../apps/PHP/HelloWorld/helloworld.php", - "name": "Hello World (PHP)" - } - ] -} \ No newline at end of file + "php": [ + { + "appId": "com_openf2_examples_php_f2wits", + "height": 200, + "minGridSize": 6, + "manifestUrl": "../apps/PHP/F2wits/manifest.js", + "name": "F2wits", + "views": ["home","about"] + }, + { + "appId": "com_openf2_examples_php_news", + "manifestUrl": "../apps/PHP/News/news.php", + "name": "Stock News", + "views": ["home", "settings"], + "minGridSize": 6 + }, + { + "appId": "com_openf2_examples_php_marketnews", + "manifestUrl": "../apps/PHP/MarketNews/marketnews.php", + "name": "Market News", + "views": ["home", "settings"], + "minGridSize": 6 + }, + { + "appId": "com_openf2_examples_php_helloworld", + "manifestUrl": "../apps/PHP/HelloWorld/helloworld.php", + "name": "Hello World (PHP)" + } + ] +} diff --git a/examples/container/js/storage.js b/examples/container/js/storage.js index 231eea63..93c89dc6 100644 --- a/examples/container/js/storage.js +++ b/examples/container/js/storage.js @@ -3,78 +3,78 @@ */ F2.extend('Storage', (function() { - var _hasLocalStorage = typeof Storage !== 'undefined' && !!window.localStorage; + var _hasLocalStorage = typeof Storage !== 'undefined' && !!window.localStorage; - var _getKey = function(key) { - return 'F2-' + key; - }; + var _getKey = function(key) { + return 'F2-' + key; + }; - return { - /** - * @method getItem - * @param {string} key The key of the item to retrieve - */ - getItem:function(key) { + return { + /** + * @method getItem + * @param {string} key The key of the item to retrieve + */ + getItem:function(key) { - var value = null; + var value = null; - if (!key) { return; } + if (!key) { return; } - key = _getKey(key); + key = _getKey(key); - if (_hasLocalStorage) { - value = localStorage.getItem(key); - } else { - var cookies = document.cookie.split(/\s*;\s*/); - for (var i = 0, len = cookies.length; i < len; i++) { - var parts = cookies[i].split(/\s*=\s*/); - if (parts.length > 1 && unescape(parts[0]) == key) { - value = unescape(parts[1]); - } - } - } + if (_hasLocalStorage) { + value = localStorage.getItem(key); + } else { + var cookies = document.cookie.split(/\s*;\s*/); + for (var i = 0, len = cookies.length; i < len; i++) { + var parts = cookies[i].split(/\s*=\s*/); + if (parts.length > 1 && unescape(parts[0]) == key) { + value = unescape(parts[1]); + } + } + } - if (!!value) { - value = F2.parse(value); - } + if (!!value) { + value = F2.parse(value); + } - return value; - }, - /** - * @method removeItem - * @param {string} key The key of the item to remove - */ - removeItem:function(key) { + return value; + }, + /** + * @method removeItem + * @param {string} key The key of the item to remove + */ + removeItem:function(key) { - if (!key) { return; } + if (!key) { return; } - key = _getKey(key); + key = _getKey(key); - if (_hasLocalStorage) { - localStorage.removeItem(key); - } else { - document.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; - } - }, - /** - * @method setItem - * @param {string} key The key of the item to set - * @param {object} value The value to be stored - */ - setItem:function(key, value) { + if (_hasLocalStorage) { + localStorage.removeItem(key); + } else { + document.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; + } + }, + /** + * @method setItem + * @param {string} key The key of the item to set + * @param {object} value The value to be stored + */ + setItem:function(key, value) { - if (!key || !value) { return; } + if (!key || !value) { return; } - key = _getKey(key); - value = F2.stringify(value); + key = _getKey(key); + value = F2.stringify(value); - if (_hasLocalStorage) { - localStorage.setItem(key, value); - } else { - var exp = new Date(); - exp.setFullYear((new Date()).getFullYear() + 100); - document.cookie = escape(key) + '=' + escape(value) + '; expires=' + exp.toUTCString() + '; path=/'; - } - } - }; -})()); \ No newline at end of file + if (_hasLocalStorage) { + localStorage.setItem(key, value); + } else { + var exp = new Date(); + exp.setFullYear((new Date()).getFullYear() + 100); + document.cookie = escape(key) + '=' + escape(value) + '; expires=' + exp.toUTCString() + '; path=/'; + } + } + }; +})()); diff --git a/examples/index.html b/examples/index.html index 1beb614c..22638cd1 100644 --- a/examples/index.html +++ b/examples/index.html @@ -1,9 +1,9 @@ - F2 - Examples - + F2 - Examples + - \ No newline at end of file + From e636b737fe4ac0994461c5386033f8c55bb3e9b0 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Fri, 9 Jan 2015 12:25:45 -0700 Subject: [PATCH 29/61] Removing jshint --- .jshintrc | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 .jshintrc diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index a5fa8161..00000000 --- a/.jshintrc +++ /dev/null @@ -1,33 +0,0 @@ -{ - "browser": true, - "curly": true, - "evil": true, - "globals": { - "console": true, - "define": true, - "exports": true, - "require": true, - "module": true, - "describe": true, - "xdescribe": true, - "it": true, - "xit": true, - "expect": true, - "runs": true, - "waits": true, - "waitsFor": true, - "itConditionally": true, - "easyXDM": true, - "EventEmitter2": true, - "F2": true, - "jQuery": true, - "$": true - }, - "latedef": true, - "noarg": true, - "quotmark": "single", - "shadow": false, - "sub": true, - "undef": true, - "unused": false -} From 4c8ab9e0cc949823f1d24751cfbbe4a196cc1e6b Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 12 Jan 2015 09:56:42 -0700 Subject: [PATCH 30/61] Adding back missing IFFE parens --- tests/index-amd.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/index-amd.html b/tests/index-amd.html index 367e6a1b..0c7b95f0 100644 --- a/tests/index-amd.html +++ b/tests/index-amd.html @@ -84,7 +84,7 @@ jasmineEnv.execute(); } - }); + })(); From 61eea9b52434466d4bc3839f6b4fd102818421e7 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 12 Jan 2015 15:49:18 -0700 Subject: [PATCH 31/61] Refactoring CDS example to match styling --- examples/apps/JavaScript/CDS/appclass.js | 244 ------------------ examples/apps/JavaScript/CDS/manifest.js | 59 +++-- .../apps/JavaScript/CDS/scripts/appclass.js | 170 ++++++++++++ .../JavaScript/CDS/scripts/cdsformatter.js | 69 +++++ .../apps/JavaScript/CDS/{ => styles}/app.css | 0 5 files changed, 268 insertions(+), 274 deletions(-) delete mode 100644 examples/apps/JavaScript/CDS/appclass.js create mode 100644 examples/apps/JavaScript/CDS/scripts/appclass.js create mode 100644 examples/apps/JavaScript/CDS/scripts/cdsformatter.js rename examples/apps/JavaScript/CDS/{ => styles}/app.css (100%) diff --git a/examples/apps/JavaScript/CDS/appclass.js b/examples/apps/JavaScript/CDS/appclass.js deleted file mode 100644 index 1cb92f8d..00000000 --- a/examples/apps/JavaScript/CDS/appclass.js +++ /dev/null @@ -1,244 +0,0 @@ -F2.Apps['com_openf2_examples_javascript_cds'] = (function(appConfig, appContent, root) { - - (function() { - // http://javascript.crockford.com/remedial.html - String.prototype.supplant = function(o) { - return this.replace(/{([^{}]*)}/g, function(a, b) { - var r = o[b]; - return typeof r === 'string' || typeof r === 'number' ? r : a; - }); - }; - })(); - - var App = function(appConfig, appContent, root) { - this.appConfig = appConfig; - this.appContent = appContent; - this.root = root; - this.$root = $(root); - this.$settings = $('form[data-f2-view="settings"]', this.$root); - this.ui = this.appConfig.ui; - this.settings = { - allowExternalAdd: false - }; - }; - - App.prototype.init = function() { - this.ui.showMask(this.root); - this.getData(); - this.initEvents(); - }; - - App.prototype.COOKIE_NAME = "F2_Examples_CDS"; - - App.prototype.ROW = [ - '', - '', - '{name}', - '', - '{spread}', - '{changePct}', - '' - ].join(''); - - App.prototype.data = []; - - App.prototype.initEvents = function() { - // bind save settings - this.$root.on("click", "button.save", $.proxy(function() { - this._saveSettings(); - }, this)); - - this.ui.Views.change($.proxy(function(view) { - if (view === F2.Constants.Views.SETTINGS) { - this._populateSettings(); - } - }, this)); - }; - - App.prototype._saveSettings = function() { - this.settings.allowExternalAdd = $('input[name=allowExternalAdd]', this.$settings).is(':checked'); - this.ui.Views.change(F2.Constants.Views.HOME); - }; - - App.prototype._populateSettings = function() { - $('input[name=allowExternalAdd]', this.$settings).attr('checked', this.settings.alltableswithkeys); - } - - App.prototype._supportsLocalStorage = function() { - return (typeof (Storage) !== "undefined"); - }; - - App.prototype.drawTable = function(rTighteners, rWideners) { - var TightenerTable = [], - WidenerTable = [], - TableHeading = [], - self = this; - - TableHeading.push( - '', - '', - '', - '', - '', - '', - '', - '', - '' - ); - - TightenerTable = TightenerTable.concat(TableHeading); - TightenerTable.push( - rTighteners, - '', - '
NameSpread (bps)1 Day
% Change
' - ); - WidenerTable = WidenerTable.concat(TableHeading); - WidenerTable.push( - rWideners, - '', - '' - ); - - $("div.cdsMovers", this.root).html([ - '
Global Daily Tighteners (five-year CDS)
', - TightenerTable.join(''), - '
Global Daily Wideners (five-year CDS)
', - WidenerTable.join('') - ].join('')); - - this.ui.updateHeight(); - this.ui.hideMask(this.root); - }; - - App.prototype.drawCDSList = function(bTighteners, cdsData) { - var label = bTighteners ? "Tightener" : "Widener"; - var rRows = []; - var self = this; - - if (cdsData.length < 1) { - rRows.push('CDS ' + label + ' data unavailable.') - } else { - $.each(cdsData, function(idx, item) { - - item = item || {}; - - if (self.CloseDate == null && item.PrettyDate != null) { - self.CloseDate = item.PrettyDate; - $('p.cdsDate span', self.root).html(self.CloseDate); - } - - var cdsData = { - name: item.LongName, - spread: CDSAppFormat.bps(item.ConvSpread), - changePct: CDSAppFormat.addColorPercent(item.DailyPercentChange) - }; - - rRows.push(self.ROW.supplant(cdsData)); - }); - } - - return rRows.join(''); - }; - - App.prototype.CloseDate = null; - - App.prototype.getData = function() { - - var rTightenerData = []; - var rWidenerData = []; - var _url = "http://dev.markitondemand.com/Api/SovereignCDSMovers/jsonp"; - - $.ajax({ - url: _url, - data: { - tightenersOnly: 1 - }, - dataType: "jsonp", - context: this - }).done(function(jqxhr) { - rTightenerData.push(this.drawCDSList(true, jqxhr.Data || [])); - $.ajax({ - url: _url, - data: { - tightenersOnly: 0 - }, - dataType: "jsonp", - context: this - }).done(function(jqxhr2) { - rWidenerData.push(this.drawCDSList(false, jqxhr2.Data || [])); - }).fail(function(jqxh2r) { - F2.log("OOPS. CDS Wideners data was unavailable."); - rWidenerData.push(this.drawCDSList(false, [])); - }).always(function() { - this.drawTable(rTightenerData, rWidenerData); - }); - }).fail(function(jqxhr) { - F2.log("OOPS. CDS Tighteners data was unavailable."); - rTightenerData.push(this.drawCDSList(true, [])); - rWidenerData.push(this.drawCDSList(false, [])); - this.drawTable(rTightenerData, rWidenerData); - }); - }; - - CDSAppFormat = function() { - this.magnitudes = { - shortcap: ["", "K", "M", "B", "T"] - }; - } - - CDSAppFormat.prototype.getMagnitude = function(numDigits, value, type) { - value = Math.abs(value); - var c = 0; - while (value >= 1000 && c < 4) { - value /= 1000; - c++; - } - value = value.toFixed(numDigits); - return value + this.magnitudes[type][c]; - } - - CDSAppFormat.prototype.lastPrice = function(value) { - value = Number(value); - value = value.toFixed(2); - return "$" + value; - } - - CDSAppFormat.prototype.bps = function(value) { - value = Number(value); - value = value.toFixed(2); - return value; - } - - CDSAppFormat.prototype.addColorPercent = function(value) { - if (value && !isNaN(value) && isFinite(value)) { - if (value > 0) { - return "" + value.toFixed(2) + "%"; - } else { - return "" + value.toFixed(2) + "%"; - } - } - return value.toFixed(2) + '%'; - } - - CDSAppFormat.prototype.comma = function(value) { - value = String(value); - - if (value.length < 6 && value.indexOf(".") > -1) { - return value; - } else { - x = value.split('.'); - x1 = x[0]; - x2 = x.length > 1 ? '.' + x[1] : ''; - var rgx = /(\d+)(\d{3})/; - while (rgx.test(x1)) { - x1 = x1.replace(rgx, '$1' + ',' + '$2'); - } - return x1 + x2; - } - } - - CDSAppFormat = new CDSAppFormat(); - - return App; - -})(); diff --git a/examples/apps/JavaScript/CDS/manifest.js b/examples/apps/JavaScript/CDS/manifest.js index 84581e5d..28e5580a 100644 --- a/examples/apps/JavaScript/CDS/manifest.js +++ b/examples/apps/JavaScript/CDS/manifest.js @@ -1,33 +1,32 @@ F2_jsonpCallback_com_openf2_examples_javascript_cds({ - "scripts":[ - "../apps/JavaScript/CDS/appclass.js" + 'scripts': [ + '../apps/javascript/cds/scripts/appclass.js', + '../apps/javascript/cds/scripts/cdsformatter.js' ], - "styles":[ - "../apps/JavaScript/CDS/app.css" + 'styles': [ + '../apps/javascript/cds/styles/app.css' ], - "apps":[ - { - "html":[ - '
', - '
', - '

', - '', - '

', - '
', - '

', - 'Falling (or narrowing) spreads indicate the perceived risk of default is falling. Rising (or widening) spreads indicate the perceived risk of default is rising.', - '

', - '

', - 'All CDS are denominated in U.S. Dollars except U.S. sovereigns, which are in Euros.', - '

', - '
', - '
', - '

About

', - '

CDS Sovereign Big Movers v 1.0

', - '

« Back', - '

', - '
' - ].join("") - } - ] -}) + 'apps': [{ + 'html': [ + '
', + '
', + '

', + '', + '

', + '
', + '

', + 'Falling (or narrowing) spreads indicate the perceived risk of default is falling. Rising (or widening) spreads indicate the perceived risk of default is rising.', + '

', + '

', + 'All CDS are denominated in U.S. Dollars except U.S. sovereigns, which are in Euros.', + '

', + '
', + '
', + '

About

', + '

CDS Sovereign Big Movers v 1.0

', + '

« Back', + '

', + '
' + ].join('') + }] +}); diff --git a/examples/apps/JavaScript/CDS/scripts/appclass.js b/examples/apps/JavaScript/CDS/scripts/appclass.js new file mode 100644 index 00000000..9e4543fc --- /dev/null +++ b/examples/apps/JavaScript/CDS/scripts/appclass.js @@ -0,0 +1,170 @@ +/* global cdsFormatter */ + +F2.Apps['com_openf2_examples_javascript_cds'] = (function() { + + var CDS_API_URL = 'http://dev.markitondemand.com/Api/SovereignCDSMovers/jsonp'; + + var TABLE_ROW = [ + '', + '', + '{name}', + '', + '{spread}', + '{changePct}', + '' + ].join(''); + + function supplant(text, params) { + return text.replace(/{([^{}]*)}/g, function(a, b) { + var r = params[b]; + return typeof r === 'string' || typeof r === 'number' ? r : a; + }); + } + + function AppClass(appConfig, appContent, root) { + this.appConfig = appConfig; + this.appContent = appContent; + this.root = root; + this.$root = $(root); + this.$settings = $('form[data-f2-view=settings]', this.$root); + this.ui = this.appConfig.ui; + this.settings = { + allowExternalAdd: false + }; + + this.closeDate = null; + } + + AppClass.prototype.init = function() { + this.ui.showMask(this.root); + this.getData(); + this.initEvents(); + }; + + AppClass.prototype.initEvents = function() { + this.$root.on('click', 'button.save', $.proxy(function() { + this._saveSettings(); + }, this)); + + this.ui.Views.change($.proxy(function(view) { + if (view === F2.Constants.Views.SETTINGS) { + this._populateSettings(); + } + }, this)); + }; + + AppClass.prototype._saveSettings = function() { + this.settings.allowExternalAdd = $('input[name=allowExternalAdd]', this.$settings).is(':checked'); + this.ui.Views.change(F2.Constants.Views.HOME); + }; + + AppClass.prototype._populateSettings = function() { + $('input[name=allowExternalAdd]', this.$settings).attr('checked', this.settings.alltableswithkeys); + }; + + AppClass.prototype.drawTable = function(tightenerRows, widenerRows) { + var tableHeading = [ + '', + '', + '', + '', + '', + '', + '', + '', + '' + ].join(''); + + var tightenerTable = [ + tableHeading, + tightenerRows, + '', + '
NameSpread (bps)1 Day
% Change
' + ].join(''); + + var widenerTable = [ + tableHeading, + widenerRows, + '', + '' + ].join(''); + + var tables = [ + '
Global Daily Tighteners (five-year CDS)
', + tightenerTable, + '
Global Daily Wideners (five-year CDS)
', + widenerTable + ].join(''); + + $('div.cdsMovers', this.root).html(tables); + + this.ui.updateHeight(); + this.ui.hideMask(this.root); + }; + + AppClass.prototype.drawCdsList = function(useTighteners, cdsData) { + var label = useTighteners ? 'Tightener' : 'Widener'; + + if (!cdsData.length) { + return 'CDS ' + label + ' data unavailable.'; + } + + // Update the "last updated" date + if (!this.closeDate && cdsData[0].PrettyDate) { + this.closeDate = cdsData[0].PrettyDate; + $('p.cdsDate span', this.root).html(this.closeDate); + } + + return $.map(cdsData, this.drawCdsListRow).join(''); + }; + + AppClass.prototype.drawCdsListRow = function(item) { + item = item || {}; + + return supplant(TABLE_ROW, { + name: item.LongName, + spread: cdsFormatter.bps(item.ConvSpread), + changePct: cdsFormatter.addColorPercent(item.DailyPercentChange) + }); + }; + + AppClass.prototype.getData = function() { + var tightenerData = []; + var widenerData = []; + + $.ajax({ + url: CDS_API_URL, + data: { + tightenersOnly: 1 + }, + dataType: 'jsonp', + context: this + }).done(function(jqxhr) { + tightenerData.push(this.drawCdsList(true, jqxhr.Data || [])); + + $.ajax({ + url: CDS_API_URL, + data: { + tightenersOnly: 0 + }, + dataType: 'jsonp', + context: this + }).done(function(jqxhr2) { + widenerData.push(this.drawCdsList(false, jqxhr2.Data || [])); + }).fail(function(jqxh2r) { + F2.log('OOPS. CDS Wideners data was unavailable.'); + widenerData.push(this.drawCdsList(false, [])); + }).always(function() { + this.drawTable(tightenerData, widenerData); + }); + }).fail(function(jqxhr) { + F2.log('OOPS. CDS Tighteners data was unavailable.'); + tightenerData.push(this.drawCdsList(true, [])); + widenerData.push(this.drawCdsList(false, [])); + this.drawTable(tightenerData, widenerData); + }); + }; + + return AppClass; + +})(); diff --git a/examples/apps/JavaScript/CDS/scripts/cdsformatter.js b/examples/apps/JavaScript/CDS/scripts/cdsformatter.js new file mode 100644 index 00000000..98eb160e --- /dev/null +++ b/examples/apps/JavaScript/CDS/scripts/cdsformatter.js @@ -0,0 +1,69 @@ +(function(exports) { + + function CdsFormatter() { + this.magnitudes = { + shortcap: ['', 'K', 'M', 'B', 'T'] + }; + } + + CdsFormatter.prototype.getMagnitude = function(numDigits, value, type) { + value = Math.abs(value); + var c = 0; + + while (value >= 1000 && c < 4) { + value /= 1000; + c++; + } + + value = value.toFixed(numDigits); + + return value + this.magnitudes[type][c]; + }; + + CdsFormatter.prototype.lastPrice = function(value) { + value = Number(value); + value = value.toFixed(2); + + return '$' + value; + }; + + CdsFormatter.prototype.bps = function(value) { + value = Number(value); + value = value.toFixed(2); + return value; + }; + + CdsFormatter.prototype.addColorPercent = function(value) { + if (value && !isNaN(value) && isFinite(value)) { + if (value > 0) { + return '' + value.toFixed(2) + '%'; + } else { + return '' + value.toFixed(2) + '%'; + } + } + + return value.toFixed(2) + '%'; + }; + + CdsFormatter.prototype.comma = function(value) { + value = String(value); + + if (value.length < 6 && value.indexOf('.') > -1) { + return value; + } else { + var x = value.split('.'); + var x1 = x[0]; + var x2 = x.length > 1 ? '.' + x[1] : ''; + var rgx = /(\d+)(\d{3})/; + + while (rgx.test(x1)) { + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + } + + return x1 + x2; + } + }; + + exports.cdsFormatter = new CdsFormatter(); + +}(window)); diff --git a/examples/apps/JavaScript/CDS/app.css b/examples/apps/JavaScript/CDS/styles/app.css similarity index 100% rename from examples/apps/JavaScript/CDS/app.css rename to examples/apps/JavaScript/CDS/styles/app.css From a8e898a87a604094de489d91d29ae6244fb8eb80 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 12 Jan 2015 15:49:54 -0700 Subject: [PATCH 32/61] Updating with CDS example caveats --- .eslintrc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.eslintrc b/.eslintrc index 32127646..dc069a6b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,16 +7,18 @@ "globals": { "console": true, "F2": true, - // Vendor "$": true, "jQuery": true, "EventEmitter2": true, "easyXDM": true, - // Testing "runs": true, - "itConditionally": true + "itConditionally": true, + // Examples + "F2_jsonpCallback_com_openf2_examples_javascript_cds": true }, "rules": { + "dot-notation": false, + "new-cap": false, "no-eval": false, "no-comma-dangle": true, "no-cond-assign": true, From 1e645251fbc053674ca7f2a6b60bb1270c7d7f8a Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 12 Jan 2015 15:50:11 -0700 Subject: [PATCH 33/61] Explicitly specifying lib files --- Gruntfile.js | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index e3438d36..b367915f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -93,7 +93,7 @@ module.exports = function(grunt) { 'src/vendor/bootstrap-modal.js', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - '<%= eslint.target %>', + 'src/lib/**/*.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/f2.debug.js' @@ -101,7 +101,7 @@ module.exports = function(grunt) { 'no-third-party': { src: [ 'src/lib/template/header.js.tmpl', - '<%= eslint.target %>', + 'src/lib/**/*.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/f2.no-third-party.js' @@ -111,7 +111,7 @@ module.exports = function(grunt) { 'src/lib/template/header.js.tmpl', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - '<%= eslint.target %>', + 'src/lib/**/*.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-jquery-or-bootstrap.js' @@ -123,7 +123,7 @@ module.exports = function(grunt) { 'src/vendor/jquery.noconflict.js', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - '<%= eslint.target %>', + 'src/lib/**/*.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-bootstrap.js' @@ -135,7 +135,7 @@ module.exports = function(grunt) { 'src/vendor/bootstrap-modal.js', 'src/vendor/jquery.noconflict.js', 'src/vendor/eventemitter2.js', - '<%= eslint.target %>', + 'src/lib/**/*.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-easyXDM.js' @@ -145,7 +145,7 @@ module.exports = function(grunt) { src: [ 'src/lib/template/header.js.tmpl', 'src/vendor/eventemitter2.js', - '<%= eslint.target %>', + 'src/lib/**/*.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.basic.js' @@ -183,7 +183,10 @@ module.exports = function(grunt) { options: { config: '.eslintrc' }, - target: ['./src/lib/*.js'] + target: [ + './src/lib/*.js', + './examples/apps/JavaScript/CDS/**/*.js' + ] }, uglify: { options: { @@ -263,6 +266,16 @@ module.exports = function(grunt) { options: { spawn: false } + }, + lint: { + files: [ + './src/lib/**/*.js', + './examples/apps/JavaScript/**/*.js' + ], + tasks: ['lint'], + options: { + spawn: false + } } }, http: { From a1b853da26b44ee8ea28535ff629e2a86c634c46 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Mon, 12 Jan 2015 15:51:14 -0700 Subject: [PATCH 34/61] Fixing paths to F2 --- examples/container-autoload/index.html | 2 +- examples/container-locale/index.html | 2 +- examples/container/index.html | 10 +++------- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/examples/container-autoload/index.html b/examples/container-autoload/index.html index 798da860..e3c16cf2 100644 --- a/examples/container-autoload/index.html +++ b/examples/container-autoload/index.html @@ -72,6 +72,6 @@

Compare Tool

- + diff --git a/examples/container-locale/index.html b/examples/container-locale/index.html index 898bedb7..d0441154 100644 --- a/examples/container-locale/index.html +++ b/examples/container-locale/index.html @@ -124,7 +124,7 @@

C#

- + diff --git a/examples/container/index.html b/examples/container/index.html index 796ebfb9..d6706885 100644 --- a/examples/container/index.html +++ b/examples/container/index.html @@ -20,9 +20,7 @@ - -
-
- From 3835d96c2063c69fc39628aa97e4f492207ba0d3 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Tue, 13 Jan 2015 15:46:09 -0700 Subject: [PATCH 38/61] Removing globals from lint rules --- .eslintrc | 6 ------ examples/apps/JavaScript/CDS/scripts/appclass.js | 2 +- src/lib/F2.js | 8 ++++++-- src/lib/app_handlers.js | 2 ++ src/lib/classes.js | 2 ++ src/lib/constants.js | 2 ++ src/lib/container.js | 2 ++ src/lib/events.js | 2 ++ src/lib/rpc.js | 2 ++ src/lib/ui.js | 2 ++ 10 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.eslintrc b/.eslintrc index dc069a6b..08dc7d3b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,12 +5,6 @@ "jasmine": true }, "globals": { - "console": true, - "F2": true, - "$": true, - "jQuery": true, - "EventEmitter2": true, - "easyXDM": true, "runs": true, "itConditionally": true, // Examples diff --git a/examples/apps/JavaScript/CDS/scripts/appclass.js b/examples/apps/JavaScript/CDS/scripts/appclass.js index 9e4543fc..810e14ec 100644 --- a/examples/apps/JavaScript/CDS/scripts/appclass.js +++ b/examples/apps/JavaScript/CDS/scripts/appclass.js @@ -1,4 +1,4 @@ -/* global cdsFormatter */ +/* global F2, $, cdsFormatter */ F2.Apps['com_openf2_examples_javascript_cds'] = (function() { diff --git a/src/lib/F2.js b/src/lib/F2.js index f9844b06..10472562 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -1,3 +1,5 @@ +/* global jQuery */ + /** Open F2 @module f2 @@ -267,11 +269,13 @@ var F2 = (function() { }, /** A utility logging function to write messages or objects to the browser - console. This is a proxy for the [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). + console. This is a proxy for the + [`console` API](https://developers.google.com/chrome-developer-tools/docs/console). @method log @param {object|string} Object/Method An object to be logged _or_ a `console` API method name, such as `warn` or `error`. All of the console - method names are [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). + method names are + [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). @param {object} [obj2]* An object to be logged @example Pass any value (string, int, array, object, bool). diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index 48d342bd..83d0de08 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -1,3 +1,5 @@ +/* global F2, jQuery */ + /** The new `AppHandlers` functionality provides Container Developers a higher level of control over configuring app rendering and interaction. diff --git a/src/lib/classes.js b/src/lib/classes.js index d3428af0..1bed98e6 100644 --- a/src/lib/classes.js +++ b/src/lib/classes.js @@ -1,3 +1,5 @@ +/* global F2 */ + /** Class stubs for documentation purposes @main F2 diff --git a/src/lib/constants.js b/src/lib/constants.js index cae522d6..57098783 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.js @@ -1,3 +1,5 @@ +/* global F2 */ + /** Constants used throughout the Open Financial Framework. @class F2.Constants diff --git a/src/lib/container.js b/src/lib/container.js index df306126..a5364dd3 100644 --- a/src/lib/container.js +++ b/src/lib/container.js @@ -1,3 +1,5 @@ +/* global F2, jQuery */ + /** Root namespace of the F2 SDK @module f2 diff --git a/src/lib/events.js b/src/lib/events.js index 3a4cc860..d33b98fc 100644 --- a/src/lib/events.js +++ b/src/lib/events.js @@ -1,3 +1,5 @@ +/* global F2, EventEmitter2 */ + /** Handles [Context](../../app-development.html#context) passing from containers to apps and apps to apps. diff --git a/src/lib/rpc.js b/src/lib/rpc.js index 42a3d7f5..a880878c 100644 --- a/src/lib/rpc.js +++ b/src/lib/rpc.js @@ -1,3 +1,5 @@ +/* global F2, easyXDM, jQuery */ + /** Handles socket communication between the container and secure apps @class F2.Rpc diff --git a/src/lib/ui.js b/src/lib/ui.js index 05c90dad..dbcc6338 100644 --- a/src/lib/ui.js +++ b/src/lib/ui.js @@ -1,3 +1,5 @@ +/* global F2, jQuery, EventEmitter2 */ + F2.extend('UI', (function() { var _containerConfig; From cf95ea8b0c301127e249743aeca0e2c058de3f66 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Wed, 14 Jan 2015 08:56:32 -0700 Subject: [PATCH 39/61] Rearranging tasks --- Gruntfile.js | 303 ++++++++++++++++++++++++++------------------------- 1 file changed, 155 insertions(+), 148 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index b367915f..0ea0dc65 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,4 +1,5 @@ module.exports = function(grunt) { + var exec = require('child_process').exec; var handlebars = require('handlebars'); var moment = require('moment'); @@ -14,7 +15,6 @@ module.exports = function(grunt) { }); grunt.initConfig({ - pkg: pkg, clean: { 'github-pages': { options: { @@ -29,31 +29,6 @@ module.exports = function(grunt) { src: ['./F2-examples.zip'] } }, - copy: { - 'github-pages': { - files: [{ - expand: true, - cwd: 'docs/', - src: ['**'], - dest: '../gh-pages' - }, { - expand: true, - cwd: 'dist/', - src: ['f2.latest.js'], - rename: function(dest, src) { - return '../gh-pages/js/f2.min.js'; //See #35 - } - }] - }, - 'F2-examples': { - files: [{ - expand: true, - cwd: './', - src: ['F2-examples.zip'], - dest: '../gh-pages' - }] - } - }, compress: { main: { options: { @@ -151,11 +126,45 @@ module.exports = function(grunt) { dest: 'dist/packages/f2.basic.js' } }, + copy: { + 'github-pages': { + files: [{ + expand: true, + cwd: 'docs/', + src: ['**'], + dest: '../gh-pages' + }, { + expand: true, + cwd: 'dist/', + src: ['f2.latest.js'], + rename: function(dest, src) { + return '../gh-pages/js/f2.min.js'; //See #35 + } + }] + }, + 'F2-examples': { + files: [{ + expand: true, + cwd: './', + src: ['F2-examples.zip'], + dest: '../gh-pages' + }] + } + }, + eslint: { + options: { + config: '.eslintrc' + }, + target: [ + './src/lib/*.js', + './examples/apps/JavaScript/CDS/**/*.js' + ] + }, /** - * Need to downgrade forever-monitor to v1.1 because of: - * https://github.com/blai/grunt-express/issues/12 - * cd node_modules/grunt-express; npm uninstall forever-monitor; npm install forever-monitor@1.1; - */ + Need to downgrade forever-monitor to v1.1 because of: + https://github.com/blai/grunt-express/issues/12 + cd node_modules/grunt-express; npm uninstall forever-monitor; npm install forever-monitor@1.1; + */ express: { server: { options: { @@ -165,6 +174,26 @@ module.exports = function(grunt) { } } }, + http: { + getDocsLayout: { + options: { + url: 'http://www.openf2.org/api/layout/docs', + json: true, + strictSSL: false, + callback: function(err, res, response) { + var log = grunt.log.write('Retrieved doc layout...') + grunt.config.set('docs-layout', response); + log.ok(); + log = grunt.log.write('Saving templates as HTML...'); + // Save as HTML for gen-docs step + grunt.file.write('./docs/src/template/head.html', response.head); + grunt.file.write('./docs/src/template/nav.html', response.nav); + grunt.file.write('./docs/src/template/footer.html', response.footer); + log.ok(); + } + } + } + }, jasmine: { 'non-amd': { options: { @@ -179,14 +208,12 @@ module.exports = function(grunt) { } } }, - eslint: { + pkg: pkg, + sourcemap: { options: { - config: '.eslintrc' - }, - target: [ - './src/lib/*.js', - './examples/apps/JavaScript/CDS/**/*.js' - ] + src: 'dist/f2.min.js', + prefix: './dist/' + } }, uglify: { options: { @@ -246,12 +273,6 @@ module.exports = function(grunt) { } } }, - sourcemap: { - options: { - src: 'dist/f2.min.js', - prefix: './dist/' - } - }, watch: { docs: { files: ['docs/src/**/*.*', 'package.json', 'docs/bin/gen-docs.js'], @@ -277,31 +298,51 @@ module.exports = function(grunt) { spawn: false } } - }, - http: { - getDocsLayout: { - options: { - url: 'http://www.openf2.org/api/layout/docs', - json: true, - strictSSL: false, - callback: function(err, res, response) { - var log = grunt.log.write('Retrieved doc layout...') - grunt.config.set('docs-layout', response); - log.ok(); - log = grunt.log.write('Saving templates as HTML...'); - // Save as HTML for gen-docs step - grunt.file.write('./docs/src/template/head.html', response.head); - grunt.file.write('./docs/src/template/nav.html', response.nav); - grunt.file.write('./docs/src/template/footer.html', response.footer); - log.ok(); - } - } - } } }); + // Load plugins + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-compress'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-jasmine'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-eslint'); + grunt.loadNpmTasks('grunt-express'); + grunt.loadNpmTasks('grunt-http'); + // Register tasks - grunt.registerTask('fix-sourcemap', 'Fixes the source map file', function() { + grunt.registerTask('default', ['test', 'js', 'docs', 'zip']); + grunt.registerTask('docs', ['http', 'generate-docs', 'yuidoc']); + grunt.registerTask('fix-sourcemap', 'Fixes the source map file', taskFixSourcemaps); + grunt.registerTask('generate-docs', 'Generate docs', taskGenerateDocs); + grunt.registerTask('github-pages', ['copy:github-pages', 'clean:github-pages']); + grunt.registerTask('js', ['lint', 'concat:dist', 'concat:no-third-party', 'uglify:dist', 'sourcemap']); + grunt.registerTask('lint', ['eslint']); + grunt.registerTask('nuget', 'Builds the NuGet package for distribution on NuGet.org', taskNuget); + grunt.registerTask('packages', [ + 'concat:no-jquery-or-bootstrap', + 'concat:no-bootstrap', + 'concat:no-easyXDM', + 'concat:basic', + 'uglify:package-no-jquery-or-bootstrap', + 'uglify:package-no-bootstrap', + 'uglify:package-no-easyXDM', + 'uglify:package-basic' + ]); + grunt.registerTask('release', 'Prepares the code for release (merge into master)', taskRelease); + grunt.registerTask('sourcemap', ['uglify:sourcemap', 'fix-sourcemap']); + grunt.registerTask('test', ['express', 'jasmine']); + grunt.registerTask('test-live', ['express', 'express-keepalive']); + grunt.registerTask('travis', ['test']); + grunt.registerTask('version', 'Displays version information for F2', taskVersion); + grunt.registerTask('yuidoc', 'Builds the reference docs with YUIDocJS', taskYuiDoc); + grunt.registerTask('zip', ['compress', 'copy:F2-examples', 'clean:F2-examples']); + + function taskFixSourcemaps() { var uglifyOptions = grunt.config('uglify.sourcemap.options'); var options = grunt.config('sourcemap.options'); var dest = uglifyOptions.sourceMap(options.src); @@ -309,9 +350,9 @@ module.exports = function(grunt) { rawMap = rawMap.replace(options.prefix, ''); grunt.file.write(dest, rawMap); - }); + } - grunt.registerTask('generate-docs', 'Generate docs', function() { + function taskGenerateDocs() { var done = this.async(); var log = grunt.log.write('Generating docs...'); @@ -325,52 +366,9 @@ module.exports = function(grunt) { log.ok(); done(); }); - }); + } - grunt.registerTask('yuidoc', 'Builds the reference docs with YUIDocJS', function() { - var builder; - var docOptions = { - quiet: true, - norecurse: true, - paths: ['./src/lib'], - outdir: './docs/dist/sdk/', - themedir: './docs/src/sdk-template', - helpers: ['./docs/src/sdk-template/helpers/helpers.js'] - }; - var done = this.async(); - var json; - var log = grunt.log.write('Generating reference docs...'); - var Y = require('yuidocjs'); - - json = (new Y.YUIDoc(docOptions)).run(); - // Massage in some meta information from F2.json - json.project = { - docsAssets: '../', - version: pkg.version, - releaseDateFormatted: pkg._releaseDateFormatted - }; - docOptions = Y.Project.mix(json, docOptions); - - // Ensures that the class has members and isn't just an empty namespace - // Used in sidebar.handlebars - Y.Handlebars.registerHelper('hasClassMembers', function() { - for (var i = 0, len = json.classitems.length; i < len; i++) { - if (json.classitems[i].class === this.name) { - return ''; - } - } - - return 'hidden'; - }); - - builder = new Y.DocBuilder(docOptions, json); - builder.compile(function() { - log.ok(); - done(); - }); - }); - - grunt.registerTask('nuget', 'Builds the NuGet package for distribution on NuGet.org', function() { + function taskNuget() { var done = this.async(); var log = grunt.log.write('Creating NuSpec file...'); var nuspec = grunt.file.read('./dist/f2.nuspec.tmpl'); @@ -395,9 +393,9 @@ module.exports = function(grunt) { done(); } }); - }); + } - grunt.registerTask('release', 'Prepares the code for release (merge into master)', function(releaseType) { + function taskRelease(releaseType) { if (!/^major|minor|patch$/i.test(releaseType) && !semver.valid(releaseType)) { grunt.log.error('"' + releaseType + '" is not a valid release type (major, minor, or patch) or SemVer version'); return; @@ -411,46 +409,55 @@ module.exports = function(grunt) { grunt.config.set('pkg', pkg); grunt.task.run('version'); - }); + } - grunt.registerTask('version', 'Displays version information for F2', function() { + function taskVersion() { grunt.log.writeln(grunt.template.process( 'This copy of F2 is at version <%= version %> with a release date of <%= _releaseDateFormatted %>', { data: pkg } )); - }); + } - // Load plugins - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-compress'); - grunt.loadNpmTasks('grunt-contrib-jasmine'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-express'); - grunt.loadNpmTasks('grunt-http'); - grunt.loadNpmTasks('grunt-eslint'); + function taskYuiDoc() { + var builder; + var docOptions = { + quiet: true, + norecurse: true, + paths: ['./src/lib'], + outdir: './docs/dist/sdk/', + themedir: './docs/src/sdk-template', + helpers: ['./docs/src/sdk-template/helpers/helpers.js'] + }; + var done = this.async(); + var log = grunt.log.write('Generating reference docs...'); + var Y = require('yuidocjs'); + + var json = (new Y.YUIDoc(docOptions)).run(); + // Massage in some meta information from F2.json + json.project = { + docsAssets: '../', + version: pkg.version, + releaseDateFormatted: pkg._releaseDateFormatted + }; + docOptions = Y.Project.mix(json, docOptions); + + // Ensures that the class has members and isn't just an empty namespace + // Used in sidebar.handlebars + Y.Handlebars.registerHelper('hasClassMembers', function() { + for (var i = 0, len = json.classitems.length; i < len; i++) { + if (json.classitems[i].class === this.name) { + return ''; + } + } + + return 'hidden'; + }); + + builder = new Y.DocBuilder(docOptions, json); + builder.compile(function() { + log.ok(); + done(); + }); + } - grunt.registerTask('docs', ['http', 'generate-docs', 'yuidoc']); - grunt.registerTask('github-pages', ['copy:github-pages', 'clean:github-pages']); - grunt.registerTask('zip', ['compress', 'copy:F2-examples', 'clean:F2-examples']); - grunt.registerTask('lint', ['eslint']); - grunt.registerTask('js', ['lint', 'concat:dist', 'concat:no-third-party', 'uglify:dist', 'sourcemap']); - grunt.registerTask('sourcemap', ['uglify:sourcemap', 'fix-sourcemap']); - grunt.registerTask('packages', [ - 'concat:no-jquery-or-bootstrap', - 'concat:no-bootstrap', - 'concat:no-easyXDM', - 'concat:basic', - 'uglify:package-no-jquery-or-bootstrap', - 'uglify:package-no-bootstrap', - 'uglify:package-no-easyXDM', - 'uglify:package-basic' - ]); - grunt.registerTask('test', ['express', 'jasmine']); - grunt.registerTask('test-live', ['express', 'express-keepalive']); - grunt.registerTask('travis', ['test']); - grunt.registerTask('default', ['test', 'js', 'docs', 'zip']); }; From a03241661f552aef3e7b71a0f623bc34d7d3b05c Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Wed, 14 Jan 2015 08:59:39 -0700 Subject: [PATCH 40/61] Fixing comment in example --- src/lib/F2.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index 10472562..605229b9 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -278,13 +278,13 @@ var F2 = (function() { [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). @param {object} [obj2]* An object to be logged @example - Pass any value (string, int, array, object, bool). - F2.log('foo'); - F2.log([1, 2, 3]); + // Pass any value (string, int, array, object, bool). + F2.log('foo'); + F2.log([1, 2, 3]); @example - Use a console method name as the first argument. - F2.log('error', err); - F2.log('info', 'The session ID is ' + sessionId); + // Use a console method name as the first argument. + F2.log('error', err); + F2.log('info', 'The session ID is ' + sessionId); */ log: function() { if (!window.console) { From 8dc9ffc0f1ff6a81933d35c688f9ff22c75bb60c Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Wed, 14 Jan 2015 09:14:16 -0700 Subject: [PATCH 41/61] Fixing 'on' param name --- src/lib/app_handlers.js | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index 83d0de08..2605577a 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -194,7 +194,7 @@ F2.extend('AppHandlers', (function() { @returns {string} A one-time container token */ __f2GetToken: function() { - /** + /* Delete this method for security that way only the container has access to the token 1 time. Kind of Ethan Hunt-ish, this message will self-destruct immediately. @@ -259,30 +259,22 @@ F2.extend('AppHandlers', (function() { removal purposes. At this time it does not affect when an event is fired. Complete list of event keys available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - @param {Function} listener A function that will be triggered when a - specific event occurs. For detailed argument definition refer to - {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @param {Function|Element} fnOrElement A function or element that will be + used when a specific event occurs. For detailed argument definition refer + to {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. @returns {object} The F2 instance for chaining purposes @example var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - 'appRenderBefore' - function() { - F2.log('before app rendered!'); - } - ); + F2.AppHandlers.on(token, 'appRenderBefore' function() { + F2.log('before app rendered!'); + }); @example var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - 'appRenderBefore.myNamespace', - function() { - F2.log('before app rendered!'); - } - ); + F2.AppHandlers.on(token, 'appRenderBefore.myNamespace', function() { + F2.log('before app rendered!'); + }); */ - on: function(token, eventKey, listener) { + on: function(token, eventKey, fnOrElement) { if (!eventKey) { throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); } @@ -294,7 +286,7 @@ F2.extend('AppHandlers', (function() { } var isAppRender = (event.key === 'appRender'); - var handler = _createHandler(token, event.namespace, listener, isAppRender); + var handler = _createHandler(token, event.namespace, fnOrElement, isAppRender); _handlerCollection[event.key].push(handler); return this; From 49b8113841b1fd5aed4b99d3a57a70288de44a24 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Wed, 14 Jan 2015 09:28:35 -0700 Subject: [PATCH 42/61] Undoing 'on' param name change --- src/lib/app_handlers.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index 2605577a..d7dd87a6 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -259,13 +259,13 @@ F2.extend('AppHandlers', (function() { removal purposes. At this time it does not affect when an event is fired. Complete list of event keys available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - @param {Function|Element} fnOrElement A function or element that will be - used when a specific event occurs. For detailed argument definition refer - to {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @param {Function} listener A function that will be triggered when a + specific event occurs. For detailed argument definition refer to + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. @returns {object} The F2 instance for chaining purposes @example var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on(token, 'appRenderBefore' function() { + F2.AppHandlers.on(token, 'appRenderBefore', function() { F2.log('before app rendered!'); }); @example @@ -274,7 +274,7 @@ F2.extend('AppHandlers', (function() { F2.log('before app rendered!'); }); */ - on: function(token, eventKey, fnOrElement) { + on: function(token, eventKey, listener) { if (!eventKey) { throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); } @@ -286,7 +286,7 @@ F2.extend('AppHandlers', (function() { } var isAppRender = (event.key === 'appRender'); - var handler = _createHandler(token, event.namespace, fnOrElement, isAppRender); + var handler = _createHandler(token, event.namespace, listener, isAppRender); _handlerCollection[event.key].push(handler); return this; From dbc8ae2c1962ce7fad796ad6cbe5540e59f021f0 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Wed, 14 Jan 2015 09:31:04 -0700 Subject: [PATCH 43/61] Undoing comment fix --- src/lib/F2.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/F2.js b/src/lib/F2.js index 605229b9..10472562 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -278,13 +278,13 @@ var F2 = (function() { [detailed in the Chrome docs](https://developers.google.com/chrome-developer-tools/docs/console-api). @param {object} [obj2]* An object to be logged @example - // Pass any value (string, int, array, object, bool). - F2.log('foo'); - F2.log([1, 2, 3]); + Pass any value (string, int, array, object, bool). + F2.log('foo'); + F2.log([1, 2, 3]); @example - // Use a console method name as the first argument. - F2.log('error', err); - F2.log('info', 'The session ID is ' + sessionId); + Use a console method name as the first argument. + F2.log('error', err); + F2.log('info', 'The session ID is ' + sessionId); */ log: function() { if (!window.console) { From e4f3b0f741171b24e5fd0b2dd643deba9ca4e964 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Thu, 15 Jan 2015 08:57:58 -0700 Subject: [PATCH 44/61] Removing unused packages --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index c40c4850..25e52dc2 100644 --- a/package.json +++ b/package.json @@ -30,13 +30,11 @@ "grunt-contrib-concat": "^0.5.0", "grunt-contrib-copy": "^0.7.0", "grunt-contrib-jasmine": "~0.4.2", - "grunt-contrib-jshint": "^0.10.0", "grunt-contrib-uglify": "^0.6.0", "grunt-contrib-watch": "^0.6.1", "grunt-eslint": "^3.0.0", "grunt-express": "~0.3.3", "grunt-http": "^1.5.0", - "grunt-jscs": "^1.1.0", "handlebars": "^2.0.0", "highlight.js": "^8.4.0", "marked": "^0.3.2", From 8c2e300f250cfc2e69e6703a8963ebc4b61ecf96 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Tue, 20 Jan 2015 14:36:51 -0700 Subject: [PATCH 45/61] Adding 'module' to globals --- .eslintrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc b/.eslintrc index 08dc7d3b..5a324a8e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,7 @@ "jasmine": true }, "globals": { + "module": true, "runs": true, "itConditionally": true, // Examples From 30813d80a8e383cd1c3065b0d1b709ca75fefe99 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Tue, 20 Jan 2015 14:37:32 -0700 Subject: [PATCH 46/61] Adding browserify --- Gruntfile.js | 57 +++++++++++++++++++++++++++++++++++++++++++++------- package.json | 1 + 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 0ea0dc65..ec683bfa 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -15,6 +15,48 @@ module.exports = function(grunt) { }); grunt.initConfig({ + browserify: { + dist: { + dest: 'dist/f2.debug.js', + standalone: 'F2', + src: ['src/lib/index.js'] + }, + noVendor: { + dest: 'dist/packages/f2.no-third-party.js', + src: ['src/lib/index.js'], + options: { + exclude: ['jquery', 'eventemitter', 'bootstrap-modal', 'easyxdm'] + } + }, + noJqueryBootstrap: { + dest: 'dist/packages/f2.no-jquery-or-bootstrap.js', + src: ['src/lib/index.js'], + options: { + exclude: ['jquery', 'bootstrap-modal'] + } + }, + noBootstrap: { + dest: 'dist/packages/f2.no-bootstrap.js', + src: ['src/lib/index.js'], + options: { + exclude: ['bootstrap-modal'] + } + }, + noEasyxdm: { + dest: 'dist/packages/f2.no-easyXDM.js', + src: ['src/lib/index.js'], + options: { + exclude: ['easyxdm'] + } + }, + basic: { + dest: 'dist/packages/f2.basic.js', + src: ['src/lib/index.js'], + options: { + exclude: ['easyxdm', 'jquery', 'bootstrap-modal'] + } + } + }, clean: { 'github-pages': { options: { @@ -68,7 +110,7 @@ module.exports = function(grunt) { 'src/vendor/bootstrap-modal.js', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - 'src/lib/**/*.js', + 'dist/f2.debug.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/f2.debug.js' @@ -76,7 +118,7 @@ module.exports = function(grunt) { 'no-third-party': { src: [ 'src/lib/template/header.js.tmpl', - 'src/lib/**/*.js', + 'dist/f2.no-third-party.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/f2.no-third-party.js' @@ -86,7 +128,7 @@ module.exports = function(grunt) { 'src/lib/template/header.js.tmpl', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - 'src/lib/**/*.js', + 'dist/packages/f2.no-jquery-or-bootstrap.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-jquery-or-bootstrap.js' @@ -98,7 +140,7 @@ module.exports = function(grunt) { 'src/vendor/jquery.noconflict.js', 'src/vendor/eventemitter2.js', 'src/vendor/easyXDM/easyXDM.js', - 'src/lib/**/*.js', + 'dist/packages/f2.no-bootstrap.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-bootstrap.js' @@ -110,7 +152,7 @@ module.exports = function(grunt) { 'src/vendor/bootstrap-modal.js', 'src/vendor/jquery.noconflict.js', 'src/vendor/eventemitter2.js', - 'src/lib/**/*.js', + 'dist/packages/f2.no-easyXDM.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.no-easyXDM.js' @@ -120,7 +162,7 @@ module.exports = function(grunt) { src: [ 'src/lib/template/header.js.tmpl', 'src/vendor/eventemitter2.js', - 'src/lib/**/*.js', + 'dist/packages/f2.basic.js', 'src/lib/template/footer.js.tmpl' ], dest: 'dist/packages/f2.basic.js' @@ -302,6 +344,7 @@ module.exports = function(grunt) { }); // Load plugins + grunt.loadNpmTasks('grunt-browserify'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-compress'); grunt.loadNpmTasks('grunt-contrib-concat'); @@ -320,7 +363,7 @@ module.exports = function(grunt) { grunt.registerTask('fix-sourcemap', 'Fixes the source map file', taskFixSourcemaps); grunt.registerTask('generate-docs', 'Generate docs', taskGenerateDocs); grunt.registerTask('github-pages', ['copy:github-pages', 'clean:github-pages']); - grunt.registerTask('js', ['lint', 'concat:dist', 'concat:no-third-party', 'uglify:dist', 'sourcemap']); + grunt.registerTask('js', ['lint', 'browserify', 'concat:dist', 'concat:no-third-party', 'uglify:dist', 'sourcemap']); grunt.registerTask('lint', ['eslint']); grunt.registerTask('nuget', 'Builds the NuGet package for distribution on NuGet.org', taskNuget); grunt.registerTask('packages', [ diff --git a/package.json b/package.json index 25e52dc2..1cacc3c5 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "devDependencies": { "express": "^4.10.4", "grunt": "^0.4.5", + "grunt-browserify": "^3.3.0", "grunt-cli": "^0.1.13", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-compress": "^0.12.0", From 82ed22cf924c206c6e3cbc0f134dc6b4053511b0 Mon Sep 17 00:00:00 2001 From: Chris Montrois Date: Tue, 20 Jan 2015 14:37:59 -0700 Subject: [PATCH 47/61] Initial commit of modular source --- src/lib/F2.js | 2 + src/lib/app_handlers.js | 673 ++++------ src/lib/autoload.js | 44 + src/lib/classes.js | 6 +- src/lib/constants.js | 206 +++- src/lib/container.js | 2029 ++++++++++++++++--------------- src/lib/events.js | 12 +- src/lib/index.js | 42 + src/lib/rpc.js | 562 ++++----- src/lib/template/footer.js.tmpl | 41 - src/lib/template/header.js.tmpl | 6 +- src/lib/ui.js | 723 +++++------ 12 files changed, 2205 insertions(+), 2141 deletions(-) create mode 100644 src/lib/autoload.js create mode 100644 src/lib/index.js diff --git a/src/lib/F2.js b/src/lib/F2.js index 10472562..dc797265 100644 --- a/src/lib/F2.js +++ b/src/lib/F2.js @@ -341,3 +341,5 @@ var F2 = (function() { } }; })(); + +module.exports = F2; diff --git a/src/lib/app_handlers.js b/src/lib/app_handlers.js index d7dd87a6..6b76d05f 100644 --- a/src/lib/app_handlers.js +++ b/src/lib/app_handlers.js @@ -1,4 +1,6 @@ -/* global F2, jQuery */ +/* global jQuery */ + +var F2 = require('./F2'); /** The new `AppHandlers` functionality provides Container Developers a higher @@ -37,491 +39,286 @@ @class F2.AppHandlers */ -F2.extend('AppHandlers', (function() { - - // Token used when adding, removing, or triggering handlers - var _containerToken = F2.guid(); - var _f2Token = F2.guid(); - - var _handlerCollection = { - appCreateRoot: [], - appRenderBefore: [], - appDestroyBefore: [], - appRenderAfter: [], - appDestroyAfter: [], - appRender: [], - appDestroy: [], - appScriptLoadFailed: [] - }; - var _defaultMethods = { - appRender: function(appConfig, appHtml) { - // If no app root is defined use the app's outer most node - if (F2.isNativeDOMNode(appConfig.root)) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } +// Token used when adding, removing, or triggering handlers +var _containerToken = F2.guid(); +var _f2Token = F2.guid(); + +var _handlerCollection = { + appCreateRoot: [], + appRenderBefore: [], + appDestroyBefore: [], + appRenderAfter: [], + appDestroyAfter: [], + appRender: [], + appDestroy: [], + appScriptLoadFailed: [] +}; + +var _defaultMethods = { + appRender: function(appConfig, appHtml) { + // If no app root is defined use the app's outer most node + if (F2.isNativeDOMNode(appConfig.root)) { + jQuery(appConfig.root).append(appHtml); + } else { + appConfig.root = jQuery(appHtml).get(0); + } - document.body.appendChild(appConfig.root); - }, - appDestroy: function(appInstance) { - if (appInstance.app && appInstance.app.destroy) { - if (typeof appInstance.app.destroy === 'function') { - appInstance.app.destroy(); - } else { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - } + document.body.appendChild(appConfig.root); + }, + appDestroy: function(appInstance) { + if (appInstance.app && appInstance.app.destroy) { + if (typeof appInstance.app.destroy === 'function') { + appInstance.app.destroy(); + } else { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); } - - jQuery(appInstance.config.root).fadeOut(500, function() { - jQuery(this).remove(); - }); } - }; - function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { - _validateToken(token); + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } +}; - var handler = { - domNode: null, - func: null, - namespace: namespace - }; +function _createHandler(token, namespace, fnOrNode, domNodeAppropriate) { + _validateToken(token); - if (F2.isNativeDOMNode(fnOrNode)) { - handler.domNode = fnOrNode; - } else if (typeof fnOrNode === 'function') { - handler.func = fnOrNode; - } + var handler = { + domNode: null, + func: null, + namespace: namespace + }; - if (!handler.func && !handler.domNode) { - throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); - } + if (F2.isNativeDOMNode(fnOrNode)) { + handler.domNode = fnOrNode; + } else if (typeof fnOrNode === 'function') { + handler.func = fnOrNode; + } - if (handler.domNode && !domNodeAppropriate) { - throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); - } + if (!handler.func && !handler.domNode) { + throw new Error('Invalid or null argument passed. Handler will not be added to collection. A valid dom element or callback function is required.'); + } - return handler; + if (handler.domNode && !domNodeAppropriate) { + throw new Error('Invalid argument passed. Handler will not be added to collection. A callback function is required for this event type.'); } - // Token must match F2 or container - function _validateToken(token) { - if (_containerToken !== token && _f2Token !== token) { - throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); - } + return handler; +} + +// Token must match F2 or container +function _validateToken(token) { + if (_containerToken !== token && _f2Token !== token) { + throw new Error('Invalid token passed. Please verify that you have correctly received and stored token from F2.AppHandlers.getToken().'); } +} - // Token must match F2 - function _validateF2Token(token) { - if (token !== _f2Token) { - throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); - } +// Token must match F2 +function _validateF2Token(token) { + if (token !== _f2Token) { + throw new Error('Token passed is invalid. Only F2 is allowed to call F2.AppHandlers.__trigger().'); } +} - function _filterHandlersByNamespace(handlers, namespace) { - var newHandlers = handlers.slice(); +function _filterHandlersByNamespace(handlers, namespace) { + var newHandlers = handlers.slice(); - for (var i = newHandlers.length; i >= 0; i--) { - if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { - newHandlers.splice(i, 1); - } + for (var i = newHandlers.length; i >= 0; i--) { + if (!newHandlers[i] || (newHandlers[i].namespace && newHandlers[i].namespace.toLowerCase() === namespace)) { + newHandlers.splice(i, 1); } - - return newHandlers; } - function _removeHandler(token, eventKey, namespace) { - _validateToken(token); + return newHandlers; +} - if (namespace) { - namespace = namespace.toLowerCase(); +function _removeHandler(token, eventKey, namespace) { + _validateToken(token); - if (eventKey && eventKey in _handlerCollection) { - _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); - } else { - for (var key in _handlerCollection) { - _removeHandler(token, key, namespace); - } + if (namespace) { + namespace = namespace.toLowerCase(); + + if (eventKey && eventKey in _handlerCollection) { + _handlerCollection[eventKey] = _filterHandlersByNamespace(_handlerCollection[eventKey], namespace); + } else { + for (var key in _handlerCollection) { + _removeHandler(token, key, namespace); } - } else if (eventKey) { - _handlerCollection[eventKey] = []; } + } else if (eventKey) { + _handlerCollection[eventKey] = []; } +} - function _parseEventKey(eventKey) { - var namespace = ''; +function _parseEventKey(eventKey) { + var namespace = ''; - if (eventKey.indexOf('.') !== -1) { - var eventParts = eventKey.split('.'); - eventKey = eventParts[0]; - namespace = eventParts[1]; - } - - return { - key: eventKey, - namespace: namespace - }; + if (eventKey.indexOf('.') !== -1) { + var eventParts = eventKey.split('.'); + eventKey = eventParts[0]; + namespace = eventParts[1]; } return { + key: eventKey, + namespace: namespace + }; +} + +module.exports = { + /** + Allows Container Developer to retrieve a unique token which must be + passed to all `on` and `off` methods. This function will self destruct + and can only be called one time. Container Developers must store the + return value inside of a closure. + @method getToken + @returns {string} A one-time container token + */ + getToken: function() { /** - Allows Container Developer to retrieve a unique token which must be - passed to all `on` and `off` methods. This function will self destruct - and can only be called one time. Container Developers must store the - return value inside of a closure. - @method getToken - @returns {string} A one-time container token - */ - getToken: function() { - /** - Delete this method for security that way only the container has - access to the token 1 time. Kind of Ethan Hunt-ish, this message will - self-destruct immediately. - */ - delete this.getToken; - return _containerToken; - }, - /** - Allows F2 to get a token internally. Token is required to call - {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This - function will self destruct to eliminate other sources from using the - {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and - additional internal methods. - @method __f2GetToken - @private - @returns {string} A one-time container token - */ - __f2GetToken: function() { - /* - Delete this method for security that way only the container has - access to the token 1 time. Kind of Ethan Hunt-ish, this message will - self-destruct immediately. + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. */ - delete this.__f2GetToken; - return _f2Token; - }, - /** - Allows F2 to trigger specific events internally. - @method __trigger - @private - @chainable - @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. - @param {String} eventKey The event to fire. The complete list of event - keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - @returns {object} The F2 instance for chaining purposes - */ - __trigger: function(token, eventKey) { - _validateF2Token(token); - - if (!_handlerCollection[eventKey]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } + delete this.getToken; + return _containerToken; + }, + /** + Allows F2 to get a token internally. Token is required to call + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}}. This + function will self destruct to eliminate other sources from using the + {{#crossLink "F2.AppHandlers/\_\_trigger:method"}}{{/crossLink}} and + additional internal methods. + @method __f2GetToken + @private + @returns {string} A one-time container token + */ + __f2GetToken: function() { + /* + Delete this method for security that way only the container has + access to the token 1 time. Kind of Ethan Hunt-ish, this message will + self-destruct immediately. + */ + delete this.__f2GetToken; + return _f2Token; + }, + /** + Allows F2 to trigger specific events internally. + @method __trigger + @private + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/\_\_f2GetToken:method"}}{{/crossLink}}. + @param {String} eventKey The event to fire. The complete list of event + keys is available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + */ + __trigger: function(token, eventKey) { + _validateF2Token(token); - var callbackArgs = Array.prototype.slice.call(arguments, 2); + if (!_handlerCollection[eventKey]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); + } - if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { - _defaultMethods[eventKey].apply(F2, callbackArgs); - } else { - for (var i = 0; i < _handlerCollection[eventKey].length; i++) { - var handler = _handlerCollection[eventKey][i]; + var callbackArgs = Array.prototype.slice.call(arguments, 2); - // Check for appRender - if (handler.domNode && arguments.length >= 4) { - var appConfig = arguments[2]; - var appHtml = arguments[3]; + if (!_handlerCollection[eventKey].length && _defaultMethods[eventKey]) { + _defaultMethods[eventKey].apply(F2, callbackArgs); + } else { + for (var i = 0; i < _handlerCollection[eventKey].length; i++) { + var handler = _handlerCollection[eventKey][i]; - if (appConfig.root) { - jQuery(appConfig.root).append(appHtml); - } else { - appConfig.root = jQuery(appHtml).get(0); - } + // Check for appRender + if (handler.domNode && arguments.length >= 4) { + var appConfig = arguments[2]; + var appHtml = arguments[3]; - jQuery(handler.domNode).append(appConfig.root); + if (appConfig.root) { + jQuery(appConfig.root).append(appHtml); } else { - handler.func.apply(F2, callbackArgs); + appConfig.root = jQuery(appHtml).get(0); } - } - } - return this; - }, - /** - Allows Container Developer to add listener method that will be triggered - when a specific event occurs. - @method on - @chainable - @param {String} token The token received from - {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - @param {String} eventKey{.namespace} The event key used to determine - which event to attach the listener to. The namespace is useful for - removal purposes. At this time it does not affect when an event is fired. - Complete list of event keys available in - {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - @param {Function} listener A function that will be triggered when a - specific event occurs. For detailed argument definition refer to - {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - @returns {object} The F2 instance for chaining purposes - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on(token, 'appRenderBefore', function() { - F2.log('before app rendered!'); - }); - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on(token, 'appRenderBefore.myNamespace', function() { - F2.log('before app rendered!'); - }); - */ - on: function(token, eventKey, listener) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + jQuery(handler.domNode).append(appConfig.root); + } else { + handler.func.apply(F2, callbackArgs); + } } + } - var event = _parseEventKey(eventKey); - - if (!_handlerCollection[event.key]) { - throw new Error('Invalid eventKey passed. Check your inputs and try again.'); - } + return this; + }, + /** + Allows Container Developer to add listener method that will be triggered + when a specific event occurs. + @method on + @chainable + @param {String} token The token received from + {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. The namespace is useful for + removal purposes. At this time it does not affect when an event is fired. + Complete list of event keys available in + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @param {Function} listener A function that will be triggered when a + specific event occurs. For detailed argument definition refer to + {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on(token, 'appRenderBefore', function() { + F2.log('before app rendered!'); + }); + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on(token, 'appRenderBefore.myNamespace', function() { + F2.log('before app rendered!'); + }); + */ + on: function(token, eventKey, listener) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } - var isAppRender = (event.key === 'appRender'); - var handler = _createHandler(token, event.namespace, listener, isAppRender); - _handlerCollection[event.key].push(handler); + var event = _parseEventKey(eventKey); - return this; - }, - /** - Allows Container Developer to remove listener methods for specific events - @method off - @chainable - @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. - @param {String} eventKey{.namespace} The event key used to determine - which event to attach the listener to. If no namespace is provided all - listeners for the specified event type will be removed. Complete list - available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. - @returns {object} The F2 instance for chaining purposes - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.off(token, 'appRenderBefore'); - */ - off: function(token, eventKey) { - if (!eventKey) { - throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); - } + if (!_handlerCollection[event.key]) { + throw new Error('Invalid eventKey passed. Check your inputs and try again.'); + } - var event = _parseEventKey(eventKey); + var isAppRender = (event.key === 'appRender'); + var handler = _createHandler(token, event.namespace, listener, isAppRender); + _handlerCollection[event.key].push(handler); - if (!_handlerCollection[event.key]) { - throw new Error('Invalid EventKey passed. Check your inputs and try again.'); - } + return this; + }, + /** + Allows Container Developer to remove listener methods for specific events + @method off + @chainable + @param {String} token The token received from {{#crossLink "F2.AppHandlers/getToken:method"}}{{/crossLink}}. + @param {String} eventKey{.namespace} The event key used to determine + which event to attach the listener to. If no namespace is provided all + listeners for the specified event type will be removed. Complete list + available in {{#crossLink "F2.Constants.AppHandlers"}}{{/crossLink}}. + @returns {object} The F2 instance for chaining purposes + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.off(token, 'appRenderBefore'); + */ + off: function(token, eventKey) { + if (!eventKey) { + throw new Error('eventKey must be of type string and not null. For available appHandlers check F2.Constants.AppHandlers.'); + } - _removeHandler(token, event.key, event.namespace); + var event = _parseEventKey(eventKey); - return this; + if (!_handlerCollection[event.key]) { + throw new Error('Invalid EventKey passed. Check your inputs and try again.'); } - }; -})()); -F2.extend('Constants', { - /** - A convenient collection of all available appHandler events. - @class F2.Constants.AppHandlers - */ - AppHandlers: { - /** - Equivalent to `appCreateRoot`. Identifies the create root method for use - in AppHandlers.on/off. When bound using - {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - listener function passed will receive the following argument(s): - ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - @property APP_CREATE_ROOT - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - function(appConfig) { - // If you want to create a custom root. By default F2 uses the app's outermost HTML element. - // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER - appConfig.root = jQuery('
').get(0); - } - ); - */ - APP_CREATE_ROOT: 'appCreateRoot', - /** - Equivalent to `appRenderBefore`. Identifies the before app render method - for use in AppHandlers.on/off. When bound using - {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - listener function passed will receive the following argument(s): - ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). - @property APP_RENDER_BEFORE - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - function(appConfig) { - F2.log(appConfig); - } - ); - */ - APP_RENDER_BEFORE: 'appRenderBefore', - /** - Equivalent to `appRender`. Identifies the app render method for use in - AppHandlers.on/off. When bound using - {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - listener function passed will receive the following argument(s): - ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, - [appHtml](../../app-development.html#app-design)). - @property APP_RENDER - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_RENDER, - function(appConfig, appHtml) { - var $root; - - // If no app root is defined use the app's outer most node - if (!F2.isNativeDOMNode(appConfig.root)) { - appConfig.root = jQuery(appHtml).get(0); - // Get a handle on the root in jQuery - $root = jQuery(appConfig.root); - } else { - // Get a handle on the root in jQuery - $root = jQuery(appConfig.root); - // Append the app html to the root - $root.append(appHtml); - } - - // Append the root to the body by default. - jQuery('body').append($root); - } - ); - */ - APP_RENDER: 'appRender', - /** - Equivalent to `appRenderAfter`. Identifies the after app render method - for use in AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} - the listener function passed will receive the following argument(s): - ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}) - @property APP_RENDER_AFTER - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - function(appConfig) { - F2.log(appConfig); - } - ); - */ - APP_RENDER_AFTER: 'appRenderAfter', - /** - Equivalent to `appDestroyBefore`. Identifies the before app destroy - method for use in AppHandlers.(on|off). When bound using - {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - listener function passed will receive the following argument(s): - (appInstance). - @property APP_DESTROY_BEFORE - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - function(appInstance) { - F2.log(appInstance); - } - ); - */ - APP_DESTROY_BEFORE: 'appDestroyBefore', - /** - Equivalent to `appDestroy`. Identifies the app destroy method for use in - AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} - the listener function passed will receive the following argument(s): - (appInstance) - @property APP_DESTROY - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_DESTROY, - function(appInstance) { - // Call the apps destroy method, if it has one - if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { - appInstance.app.destroy(); - } else if (appInstance && appInstance.app && appInstance.app.destroy) { - F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); - } - - // Fade out and remove the root - jQuery(appInstance.config.root).fadeOut(500, function() { - jQuery(this).remove(); - }); - } - ); - */ - APP_DESTROY: 'appDestroy', - /** - Equivalent to `appDestroyAfter`. Identifies the after app destroy method - for use in AppHandlers.on/off. When bound using - {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the - listener function passed will receive the following argument(s): - (appInstance) - @property APP_DESTROY_AFTER - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - function(appInstance) { - F2.log(appInstance); - } - ); - */ - APP_DESTROY_AFTER: 'appDestroyAfter', - /** - Equivalent to `appScriptLoadFailed`. Identifies the app script load - failed method for use in AppHandlers.on/off. When bound using - {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} - the listener function passed will receive the following argument(s): - ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) - @property APP_SCRIPT_LOAD_FAILED - @type string - @static - @final - @example - var token = F2.AppHandlers.getToken(); - F2.AppHandlers.on( - token, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - function(appConfig, scriptInfo) { - F2.log(appConfig.appId); - } - ); - */ - APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + _removeHandler(token, event.key, event.namespace); + + return this; } -}); +}; diff --git a/src/lib/autoload.js b/src/lib/autoload.js new file mode 100644 index 00000000..92cd2510 --- /dev/null +++ b/src/lib/autoload.js @@ -0,0 +1,44 @@ +/* global jQuery */ + +var container = require('./container'); + +var autoloadEls = []; + +function add(e) { + if (!e) { + return; + } + + autoloadEls.push(e); +} + +function addAll(els) { + if (!els) { + return; + } + + for (var i = 0, len = els.length; i < len; i++) { + add(els[i]); + } +} + +// Autoload placeholders +jQuery(function() { + // Support id-based autoload + add(document.getElementById('f2-autoload')); + + // Support class/attribute based autoload + if (document.querySelectorAll) { + addAll(document.querySelectorAll('[data-f2-autoload]')); + addAll(document.querySelectorAll('.f2-autoload')); + } + + // If elements were found, auto-init F2 and load any placeholders + if (autoloadEls.length) { + container.init(); + + for (var i = 0, len = autoloadEls.length; i < len; i++) { + container.loadPlaceholders(autoloadEls[i]); + } + } +}); diff --git a/src/lib/classes.js b/src/lib/classes.js index 1bed98e6..9ce360ec 100644 --- a/src/lib/classes.js +++ b/src/lib/classes.js @@ -1,10 +1,10 @@ -/* global F2 */ +var F2 = require('./F2'); /** Class stubs for documentation purposes @main F2 */ -F2.extend('', { +module.exports = { /** The App Class is an optional class that can be namespaced onto the {{#crossLink "F2\Apps"}}{{/crossLink}} namespace. The @@ -489,4 +489,4 @@ F2.extend('', { */ loadStyles: function(styles, callback) {} } -}); +}; diff --git a/src/lib/constants.js b/src/lib/constants.js index 57098783..788c029a 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.js @@ -1,11 +1,211 @@ -/* global F2 */ +var F2 = require('./F2'); /** Constants used throughout the Open Financial Framework. @class F2.Constants @static */ -F2.extend('Constants', { +module.exports = { + /** + A convenient collection of all available appHandler events. + @class F2.Constants.AppHandlers + */ + AppHandlers: { + /** + Equivalent to `appCreateRoot`. Identifies the create root method for use + in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_CREATE_ROOT + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_CREATE_ROOT, + function(appConfig) { + // If you want to create a custom root. By default F2 uses the app's outermost HTML element. + // The app's html is not available until after the manifest is retrieved so this logic occurs in F2.Constants.AppHandlers.APP_RENDER + appConfig.root = jQuery('
').get(0); + } + ); + */ + APP_CREATE_ROOT: 'appCreateRoot', + /** + Equivalent to `appRenderBefore`. Identifies the before app render method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}). + @property APP_RENDER_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_BEFORE, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_BEFORE: 'appRenderBefore', + /** + Equivalent to `appRender`. Identifies the app render method for use in + AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, + [appHtml](../../app-development.html#app-design)). + @property APP_RENDER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER, + function(appConfig, appHtml) { + var $root; + + // If no app root is defined use the app's outer most node + if (!F2.isNativeDOMNode(appConfig.root)) { + appConfig.root = jQuery(appHtml).get(0); + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + } else { + // Get a handle on the root in jQuery + $root = jQuery(appConfig.root); + // Append the app html to the root + $root.append(appHtml); + } + + // Append the root to the body by default. + jQuery('body').append($root); + } + ); + */ + APP_RENDER: 'appRender', + /** + Equivalent to `appRenderAfter`. Identifies the after app render method + for use in AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}) + @property APP_RENDER_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_RENDER_AFTER, + function(appConfig) { + F2.log(appConfig); + } + ); + */ + APP_RENDER_AFTER: 'appRenderAfter', + /** + Equivalent to `appDestroyBefore`. Identifies the before app destroy + method for use in AppHandlers.(on|off). When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance). + @property APP_DESTROY_BEFORE + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_BEFORE, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_BEFORE: 'appDestroyBefore', + /** + Equivalent to `appDestroy`. Identifies the app destroy method for use in + AppHandlers.on/off. When bound using {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY, + function(appInstance) { + // Call the apps destroy method, if it has one + if (appInstance && appInstance.app && appInstance.app.destroy && typeof(appInstance.app.destroy) == 'function') { + appInstance.app.destroy(); + } else if (appInstance && appInstance.app && appInstance.app.destroy) { + F2.log(appInstance.config.appId + ' has a destroy property, but destroy is not of type function and as such will not be executed.'); + } + + // Fade out and remove the root + jQuery(appInstance.config.root).fadeOut(500, function() { + jQuery(this).remove(); + }); + } + ); + */ + APP_DESTROY: 'appDestroy', + /** + Equivalent to `appDestroyAfter`. Identifies the after app destroy method + for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} the + listener function passed will receive the following argument(s): + (appInstance) + @property APP_DESTROY_AFTER + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_DESTROY_AFTER, + function(appInstance) { + F2.log(appInstance); + } + ); + */ + APP_DESTROY_AFTER: 'appDestroyAfter', + /** + Equivalent to `appScriptLoadFailed`. Identifies the app script load + failed method for use in AppHandlers.on/off. When bound using + {{#crossLink "F2.AppHandlers/on"}}F2.AppHandlers.on(){{/crossLink}} + the listener function passed will receive the following argument(s): + ({{#crossLink "F2.AppConfig"}}appConfig{{/crossLink}}, scriptInfo) + @property APP_SCRIPT_LOAD_FAILED + @type string + @static + @final + @example + var token = F2.AppHandlers.getToken(); + F2.AppHandlers.on( + token, + F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + function(appConfig, scriptInfo) { + F2.log(appConfig.appId); + } + ); + */ + APP_SCRIPT_LOAD_FAILED: 'appScriptLoadFailed' + }, /** CSS class constants @class F2.Constants.Css @@ -261,4 +461,4 @@ F2.extend('Constants', { */ SETTINGS: 'settings' } -}); +}; diff --git a/src/lib/container.js b/src/lib/container.js index a5364dd3..a3b5aa31 100644 --- a/src/lib/container.js +++ b/src/lib/container.js @@ -1,1203 +1,1212 @@ -/* global F2, jQuery */ +/* global jQuery */ + +var appHandlers = require('./app_handlers'); +var classes = require('./classes'); +var constants = require('./constants'); +var events = require('./events'); +var F2 = require('./F2'); +var ui = require('./ui'); +var rpc = require('./rpc'); + +var _apps = {}; +var _config = false; +var _usesAppHandlers = false; +var _appHandlerToken = appHandlers.__f2GetToken(); +var _loadedScripts = {}; +var _loadedStyles = {}; +var _loadingScripts = {}; /** - Root namespace of the F2 SDK - @module f2 - @class F2 + Appends the app's html to the DOM. + @method _afterAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @return {Element} The DOM Element that contains the app */ -F2.extend('', (function() { +function _afterAppRender(appConfig, html) { + var handler = _config.afterAppRender || function(_appConfig, _html) { + return jQuery(_html).appendTo('body'); + }; + var $appContainer = handler(appConfig, html); - var _apps = {}; - var _config = false; - var _usesAppHandlers = false; - var _appHandlerToken = F2.AppHandlers.__f2GetToken(); - var _loadedScripts = {}; - var _loadedStyles = {}; - var _loadingScripts = {}; + if (_config.afterAppRender && !$appContainer) { + F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); + return; + } - /** - Appends the app's html to the DOM. - @method _afterAppRender - @deprecated This has been replaced with - {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0 - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @param {string} html The string of html - @return {Element} The DOM Element that contains the app - */ - function _afterAppRender(appConfig, html) { - var handler = _config.afterAppRender || function(_appConfig, _html) { - return jQuery(_html).appendTo('body'); - }; - var $appContainer = handler(appConfig, html); + jQuery($appContainer).addClass(constants.Css.APP); - if (_config.afterAppRender && !$appContainer) { - F2.log('F2.ContainerConfig.afterAppRender() must return the DOM Element that contains the app'); - return; - } + return $appContainer.get(0); +} - jQuery($appContainer).addClass(F2.Constants.Css.APP); +/** + Renders the html for an app. + @method _appRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} html The string of html + @returns {string} HTML for the app +*/ +function _appRender(appConfig, html) { + // Apply APP_CONTAINER class and AppID + html = _outerHtml(jQuery(html).addClass(constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - return $appContainer.get(0); + // Optionally apply wrapper html + if (_config.appRender) { + html = _config.appRender(appConfig, html); } - /** - Renders the html for an app. - @method _appRender - @deprecated This has been replaced with - {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @param {string} html The string of html - @returns {string} HTML for the app - */ - function _appRender(appConfig, html) { - // Apply APP_CONTAINER class and AppID - html = _outerHtml(jQuery(html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + return _outerHtml(html); +} - // Optionally apply wrapper html - if (_config.appRender) { - html = _config.appRender(appConfig, html); - } +/** + Rendering hook to allow containers to render some html prior to an app + loading. + @method _beforeAppRender + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {Element} The DOM Element surrounding the app +*/ +function _beforeAppRender(appConfig) { + var handler = _config.beforeAppRender || jQuery.noop; + return handler(appConfig); +} - return _outerHtml(html); +/** + Handler to inform the container that a script failed to load. + @method _onScriptLoadFailure + @deprecated This has been replaced with + {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} scriptInfo The path of the script that failed to load or + the exception info for the inline script that failed to execute. +*/ +function _appScriptLoadFailed(appConfig, scriptInfo) { + if (_config.appScriptLoadFailed) { + _config.appScriptLoadFailed(appConfig, scriptInfo); } +} - /** - Rendering hook to allow containers to render some html prior to an app - loading. - @method _beforeAppRender - @deprecated This has been replaced with - {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @return {Element} The DOM Element surrounding the app - */ - function _beforeAppRender(appConfig) { - var handler = _config.beforeAppRender || jQuery.noop; - return handler(appConfig); +/** + Adds properties to the AppConfig object. + @method _createAppConfig + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with + necessary properties. +*/ +function _createAppConfig(appConfig) { + // Make a copy of the app config to ensure that the original is not modified + appConfig = jQuery.extend(true, {}, appConfig); + + // Create the instanceId for the app + appConfig.instanceId = appConfig.instanceId || F2.guid(); + + // Default the views if not provided + appConfig.views = appConfig.views || []; + if (!F2.inArray(constants.Views.HOME, appConfig.views)) { + appConfig.views.push(constants.Views.HOME); } - /** - Handler to inform the container that a script failed to load. - @method _onScriptLoadFailure - @deprecated This has been replaced with - {{#crossLink "F2.AppHandlers"}}{{/crossLink}} and will be removed in v2.0. - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @param {string} scriptInfo The path of the script that failed to load or - the exception info for the inline script that failed to execute. - */ - function _appScriptLoadFailed(appConfig, scriptInfo) { - if (_config.appScriptLoadFailed) { - _config.appScriptLoadFailed(appConfig, scriptInfo); - } + // Pass container-defined locale to each app + if (classes.ContainerConfig.locale) { + appConfig.containerLocale = classes.ContainerConfig.locale; } - /** - Adds properties to the AppConfig object. - @method _createAppConfig - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @return {F2.AppConfig} The new F2.AppConfig object, prepopulated with - necessary properties. - */ - function _createAppConfig(appConfig) { - // Make a copy of the app config to ensure that the original is not modified - appConfig = jQuery.extend(true, {}, appConfig); + return appConfig; +} - // Create the instanceId for the app - appConfig.instanceId = appConfig.instanceId || F2.guid(); +/** + Generate an AppConfig from the element's attributes. + @method _getAppConfigFromElement + @private + @param {Element} node The DOM node from which to generate the F2.AppConfig + object + @return {F2.AppConfig} The new F2.AppConfig object +*/ +function _getAppConfigFromElement(node) { + if (!node) { + return; + } - // Default the views if not provided - appConfig.views = appConfig.views || []; - if (!F2.inArray(F2.Constants.Views.HOME, appConfig.views)) { - appConfig.views.push(F2.Constants.Views.HOME); - } + var appConfig; + var appId = node.getAttribute('data-f2-appid'); + var manifestUrl = node.getAttribute('data-f2-manifesturl'); + + if (appId && manifestUrl) { + appConfig = { + appId: appId, + enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), + isSecure: node.hasAttribute('data-f2-issecure'), + manifestUrl: manifestUrl, + root: node + }; - // Pass container-defined locale to each app - if (F2.ContainerConfig.locale) { - appConfig.containerLocale = F2.ContainerConfig.locale; - } + // See if the user passed in a block of serialized json + var contextJson = node.getAttribute('data-f2-context'); - return appConfig; + if (contextJson) { + try { + appConfig.context = F2.parse(contextJson); + } catch (e) { + F2.log('warn', 'F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); + } + } } - /** - Generate an AppConfig from the element's attributes. - @method _getAppConfigFromElement - @private - @param {Element} node The DOM node from which to generate the F2.AppConfig - object - @return {F2.AppConfig} The new F2.AppConfig object - */ - function _getAppConfigFromElement(node) { - if (!node) { - return; + return appConfig; +} + +/** + Returns true if the DOM node has children that are not text nodes + @method _hasNonTextChildNodes + @private + @param {Element} node The DOM node + @return {bool} True if there are non-text children +*/ +function _hasNonTextChildNodes(node) { + var hasNodes = false; + + if (node.hasChildNodes()) { + for (var i = 0, len = node.childNodes.length; i < len; i++) { + if (node.childNodes[i].nodeType === 1) { + hasNodes = true; + break; + } } + } - var appConfig; - var appId = node.getAttribute('data-f2-appid'); - var manifestUrl = node.getAttribute('data-f2-manifesturl'); - - if (appId && manifestUrl) { - appConfig = { - appId: appId, - enableBatchRequests: node.hasAttribute('data-f2-enablebatchrequests'), - isSecure: node.hasAttribute('data-f2-issecure'), - manifestUrl: manifestUrl, - root: node - }; + return hasNodes; +} - // See if the user passed in a block of serialized json - var contextJson = node.getAttribute('data-f2-context'); +/** + Adds properties to the ContainerConfig object to take advantage of defaults. + @method _hydrateContainerConfig + @private + @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object +*/ +function _hydrateContainerConfig(containerConfig) { + if (!containerConfig.scriptErrorTimeout) { + containerConfig.scriptErrorTimeout = classes.ContainerConfig.scriptErrorTimeout; + } - if (contextJson) { - try { - appConfig.context = F2.parse(contextJson); - } catch (e) { - F2.log('warn', 'F2: "data-f2-context" of node is not valid JSON', '"' + e + '"'); - } - } - } + if (containerConfig.debugMode !== true) { + containerConfig.debugMode = classes.ContainerConfig.debugMode; + } - return appConfig; + if (containerConfig.locale && typeof containerConfig.locale === 'string') { + classes.ContainerConfig.locale = containerConfig.locale; } +} - /** - Returns true if the DOM node has children that are not text nodes - @method _hasNonTextChildNodes - @private - @param {Element} node The DOM node - @return {bool} True if there are non-text children - */ - function _hasNonTextChildNodes(node) { - var hasNodes = false; - - if (node.hasChildNodes()) { - for (var i = 0, len = node.childNodes.length; i < len; i++) { - if (node.childNodes[i].nodeType === 1) { - hasNodes = true; - break; - } - } +/** + Attach app events. + @method _initAppEvents + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object +*/ +function _initAppEvents(appConfig) { + var elementFilter = '.' + constants.Css.APP_VIEW_TRIGGER + '[' + constants.Views.DATA_ATTRIBUTE + ']'; + + jQuery(appConfig.root).on('click', elementFilter, function(e) { + e.preventDefault(); + + var view = jQuery(this).attr(constants.Views.DATA_ATTRIBUTE).toLowerCase(); + + // Handle the special REMOVE view + if (view === constants.Views.REMOVE) { + F2.removeApp(appConfig.instanceId); + } else { + appConfig.ui.Views.change(view); } + }); +} - return hasNodes; +/** + Attach container Events + @method _initContainerEvents + @private +*/ +function _initContainerEvents() { + function resizeHandler() { + events.emit(constants.Events.CONTAINER_WIDTH_CHANGE); } - /** - Adds properties to the ContainerConfig object to take advantage of defaults. - @method _hydrateContainerConfig - @private - @param {F2.ContainerConfig} containerConfig The F2.ContainerConfig object - */ - function _hydrateContainerConfig(containerConfig) { - if (!containerConfig.scriptErrorTimeout) { - containerConfig.scriptErrorTimeout = F2.ContainerConfig.scriptErrorTimeout; - } + var resizeTimeout; + + jQuery(window).on('resize', function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(resizeHandler, 100); + }); - if (containerConfig.debugMode !== true) { - containerConfig.debugMode = F2.ContainerConfig.debugMode; + // Listen for container-broadcasted locale changes + events.on(constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { + if (data.locale && typeof data.locale === 'string') { + classes.ContainerConfig.locale = data.locale; } + }); +} + +/** + Checks if an element is a placeholder element. + @method _isPlaceholderElement + @private + @param {Element} node The DOM element to check + @return {bool} True if the element is a placeholder +*/ +function _isPlaceholderElement(node) { + return ( + F2.isNativeDOMNode(node) && + !_hasNonTextChildNodes(node) && + !!node.getAttribute('data-f2-appid') && + !!node.getAttribute('data-f2-manifesturl') + ); +} - if (containerConfig.locale && typeof containerConfig.locale === 'string') { - F2.ContainerConfig.locale = containerConfig.locale; +/** + Has the container been init? + @method _isInit + @private + @return {bool} True if the container has been init +*/ +function _isInit() { + return !!_config; +} + +/** + Instantiates app from its appConfig and stores that in a private collection. + @method _createAppInstance + @private + @param {object} appConfig An {{#crossLink "F2.AppConfig"}}{{/crossLink}} + @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent + object. +*/ +function _createAppInstance(appConfig, appContent) { + appConfig.ui = new ui(appConfig); + + // instantiate F2.App + if (F2.Apps[appConfig.appId] !== undefined) { + if (typeof F2.Apps[appConfig.appId] === 'function') { + // IE + setTimeout(function() { + _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); + + if (_apps[appConfig.instanceId].app.init !== undefined) { + _apps[appConfig.instanceId].app.init(); + } + }, 0); + } else { + F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); } } +} - /** - Attach app events. - @method _initAppEvents - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - */ - function _initAppEvents(appConfig) { - var elementFilter = '.' + F2.Constants.Css.APP_VIEW_TRIGGER + '[' + F2.Constants.Views.DATA_ATTRIBUTE + ']'; - - jQuery(appConfig.root).on('click', elementFilter, function(e) { - e.preventDefault(); +/** + Loads the app's html/css/javascript. + @method loadApp + @private + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects. + @param {F2.AppManifest} [appManifest] The AppManifest object +*/ +function _loadApps(appConfigs, appManifest) { + appConfigs = [].concat(appConfigs); - var view = jQuery(this).attr(F2.Constants.Views.DATA_ATTRIBUTE).toLowerCase(); + // Check for secure app + if (appConfigs.length === 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { + _loadSecureApp(appConfigs[0], appManifest); + return; + } - // Handle the special REMOVE view - if (view === F2.Constants.Views.REMOVE) { - F2.removeApp(appConfig.instanceId); - } else { - appConfig.ui.Views.change(view); - } - }); + // Check that the number of apps in manifest matches the number requested + if (appConfigs.length !== appManifest.apps.length) { + F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); + return; } - /** - Attach container Events - @method _initContainerEvents - @private - */ - function _initContainerEvents() { - function resizeHandler() { - F2.Events.emit(F2.Constants.Events.CONTAINER_WIDTH_CHANGE); + function _loadStyles(styles, cb) { + if (_config.loadStyles) { + return _config.loadStyles(styles, cb); } - var resizeTimeout; + // Load styles, see #101 + var stylesFragment; + var useCreateStyleSheet = !!document.createStyleSheet; - jQuery(window).on('resize', function() { - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(resizeHandler, 100); - }); + jQuery.each(styles, function(i, e) { + var resourceUrl = e; + var resourceKey = e.toLowerCase(); - // Listen for container-broadcasted locale changes - F2.Events.on(F2.Constants.Events.CONTAINER_LOCALE_CHANGE, function(data) { - if (data.locale && typeof data.locale === 'string') { - F2.ContainerConfig.locale = data.locale; + if (_loadedStyles[resourceKey]) { + return; } - }); - } - - /** - Checks if an element is a placeholder element. - @method _isPlaceholderElement - @private - @param {Element} node The DOM element to check - @return {bool} True if the element is a placeholder - */ - function _isPlaceholderElement(node) { - return ( - F2.isNativeDOMNode(node) && - !_hasNonTextChildNodes(node) && - !!node.getAttribute('data-f2-appid') && - !!node.getAttribute('data-f2-manifesturl') - ); - } - /** - Has the container been init? - @method _isInit - @private - @return {bool} True if the container has been init - */ - function _isInit() { - return !!_config; - } - - /** - Instantiates app from its appConfig and stores that in a private collection. - @method _createAppInstance - @private - @param {object} appConfig An {{#crossLink "F2.AppConfig"}}{{/crossLink}} - @param {F2.AppManifest.AppContent} appContent The F2.AppManifest.AppContent - object. - */ - function _createAppInstance(appConfig, appContent) { - appConfig.ui = new F2.UI(appConfig); - - // instantiate F2.App - if (F2.Apps[appConfig.appId] !== undefined) { - if (typeof F2.Apps[appConfig.appId] === 'function') { - // IE - setTimeout(function() { - _apps[appConfig.instanceId].app = new F2.Apps[appConfig.appId](appConfig, appContent, appConfig.root); - - if (_apps[appConfig.instanceId].app.init !== undefined) { - _apps[appConfig.instanceId].app.init(); - } - }, 0); + if (useCreateStyleSheet) { + document.createStyleSheet(resourceUrl); } else { - F2.log('app initialization class is defined but not a function. (' + appConfig.appId + ')'); + stylesFragment = stylesFragment || []; + stylesFragment.push(''); } + + _loadedStyles[resourceKey] = true; + }); + + if (stylesFragment) { + jQuery('head').append(stylesFragment.join('')); } + + cb(); } - /** - Loads the app's html/css/javascript. - @method loadApp - @private - @param {Array} appConfigs An array of - {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects. - @param {F2.AppManifest} [appManifest] The AppManifest object - */ - function _loadApps(appConfigs, appManifest) { - appConfigs = [].concat(appConfigs); + function _loadScripts(scripts, cb) { + if (_config.loadScripts) { + return _config.loadScripts(scripts, cb); + } - // Check for secure app - if (appConfigs.length === 1 && appConfigs[0].isSecure && !_config.isSecureAppPage) { - _loadSecureApp(appConfigs[0], appManifest); - return; + if (!scripts.length) { + return cb(); } - // Check that the number of apps in manifest matches the number requested - if (appConfigs.length !== appManifest.apps.length) { - F2.log('The number of apps defined in the AppManifest do not match the number requested.', appManifest); - return; + var doc = window.document; + var scriptCount = scripts.length; + var scriptsLoaded = 0; + // http://caniuse.com/#feat=script-async + var head = doc && (doc.head || doc.getElementsByTagName('head')[0]); + // For IE, put scripts before any elements, but after any + var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; + // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 + var readyStates = (window.addEventListener) ? {} : { + 'loaded': true, + 'complete': true + }; + + // Log and emit event for the failed (400,500) scripts + function _error(e) { + setTimeout(function() { + var evtData = { + src: e.target.src, + appId: appConfigs[0].appId + }; + + // Send error to console + F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); + + // Emit events + events.emit('RESOURCE_FAILED_TO_LOAD', evtData); + + if (!_usesAppHandlers) { + _appScriptLoadFailed(appConfigs[0], evtData.src); + } else { + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + appConfigs[0], + evtData.src + ); + } + }, _config.scriptErrorTimeout); // Defaults to 7000 } - function _loadStyles(styles, cb) { - if (_config.loadStyles) { - return _config.loadStyles(styles, cb); + function _checkComplete() { + // Are we done loading all scripts for this app? + if (++scriptsLoaded === scriptCount) { + cb(); } + } - // Load styles, see #101 - var stylesFragment; - var useCreateStyleSheet = !!document.createStyleSheet; + function _emptyWaitlist(resourceKey, errorEvt) { + var waiting; + var waitlist = _loadingScripts[resourceKey]; - jQuery.each(styles, function(i, e) { - var resourceUrl = e; - var resourceKey = e.toLowerCase(); + if (!waitlist) { + return; + } - if (_loadedStyles[resourceKey]) { - return; - } + for (var i = 0; i < waitlist.length; i++) { + waiting = waitlist [i]; - if (useCreateStyleSheet) { - document.createStyleSheet(resourceUrl); + if (errorEvt) { + waiting.error(errorEvt); } else { - stylesFragment = stylesFragment || []; - stylesFragment.push(''); + waiting.success(); } + } - _loadedStyles[resourceKey] = true; - }); + _loadingScripts[resourceKey] = null; + } - if (stylesFragment) { - jQuery('head').append(stylesFragment.join('')); + // Load scripts and eval inlines once complete + jQuery.each(scripts, function(i, url) { + var script = doc.createElement('script'); + var resourceUrl = url; + var resourceKey = resourceUrl.toLowerCase(); + + // Already finished loading, trigger callback + if (_loadedScripts[resourceKey]) { + return _checkComplete(); } - cb(); - } + // This script is actively loading, add this app to the wait list + if (_loadingScripts[resourceKey]) { + _loadingScripts[resourceKey].push({ + success: _checkComplete, + error: _error + }); - function _loadScripts(scripts, cb) { - if (_config.loadScripts) { - return _config.loadScripts(scripts, cb); + return; } - if (!scripts.length) { - return cb(); + // Create the waitlist + _loadingScripts[resourceKey] = []; + + // If in debugMode, add cache buster to each script URL + if (_config.debugMode) { + resourceUrl += '?cachebuster=' + new Date().getTime(); } - var doc = window.document; - var scriptCount = scripts.length; - var scriptsLoaded = 0; - // http://caniuse.com/#feat=script-async - var head = doc && (doc.head || doc.getElementsByTagName('head')[0]); - // For IE, put scripts before any elements, but after any - var insertBeforeEl = head && head.getElementsByTagName('base')[0] || null; - // Check for IE10+ so that we don't rely on onreadystatechange, readyStates for IE6-9 - var readyStates = (window.addEventListener) ? {} : { - 'loaded': true, - 'complete': true + // Scripts are loaded asynchronously and executed in order + // in supported browsers: http://caniuse.com/#feat=script-async + script.async = false; + script.type = 'text/javascript'; + script.charset = 'utf-8'; + + script.onerror = function(e) { + _error(e); + _emptyWaitlist(resourceKey, e); + }; + + // Use a closure for the load event so that we can dereference the original script + script.onload = script.onreadystatechange = function(e) { + e = e || window.event; // For older IE + + // Detect when it's done loading + // ev.type == 'load' is for all browsers except IE6-9 + // IE6-9 need to use onreadystatechange and look for + // el.readyState in {loaded, complete} (yes, we need both) + if (e.type === 'load' || readyStates[script.readyState]) { + // Done, cleanup + script.onload = script.onreadystatechange = script.onerror = ''; + // Loaded + _loadedScripts[resourceKey] = true; + // Increment and check if scripts are done + _checkComplete(); + // Empty wait list + _emptyWaitlist(resourceKey); + // Dereference script + script = null; + } }; - // Log and emit event for the failed (400,500) scripts - function _error(e) { - setTimeout(function() { - var evtData = { - src: e.target.src, - appId: appConfigs[0].appId - }; + // Set the src, start loading + script.src = resourceUrl; - // Send error to console - F2.log('Script defined in \'' + evtData.appId + '\' failed to load \'' + evtData.src + '\''); + // really is the best + head.insertBefore(script, insertBeforeEl); + }); + } + + function _loadInlineScripts(inlines, cb) { + // Attempt to use the user provided method + if (_config.loadInlineScripts) { + _config.loadInlineScripts(inlines, cb); + } else { + for (var i = 0, len = inlines.length; i < len; i++) { + try { + eval(inlines[i]); + } catch ( exception ) { + F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', evtData); + events.emit('RESOURCE_FAILED_TO_LOAD', { + appId: appConfigs[0].appId, + src: inlines[i], + err: exception + }); if (!_usesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], evtData.src); + _appScriptLoadFailed(appConfigs[0], exception); } else { - F2.AppHandlers.__trigger( + appHandlers.__trigger( _appHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, + constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, appConfigs[0], - evtData.src + exception ); } - }, _config.scriptErrorTimeout); // Defaults to 7000 - } - - function _checkComplete() { - // Are we done loading all scripts for this app? - if (++scriptsLoaded === scriptCount) { - cb(); } } + cb(); + } + } - function _emptyWaitlist(resourceKey, errorEvt) { - var waiting; - var waitlist = _loadingScripts[resourceKey]; - - if (!waitlist) { - return; - } - - for (var i = 0; i < waitlist.length; i++) { - waiting = waitlist [i]; + // Determine whether an element has been added to the page + function elementInDocument(element) { + if (element) { + while (element.parentNode) { + element = element.parentNode; - if (errorEvt) { - waiting.error(errorEvt); - } else { - waiting.success(); - } + if (element === document) { + return true; } - - _loadingScripts[resourceKey] = null; } + } - // Load scripts and eval inlines once complete - jQuery.each(scripts, function(i, url) { - var script = doc.createElement('script'); - var resourceUrl = url; - var resourceKey = resourceUrl.toLowerCase(); + return false; + } - // Already finished loading, trigger callback - if (_loadedScripts[resourceKey]) { - return _checkComplete(); - } + function _loadHtml(apps) { + jQuery.each(apps, function(i, a) { + if (_isPlaceholderElement(appConfigs[i].root)) { + jQuery(appConfigs[i].root) + .addClass(constants.Css.APP) + .append(jQuery(a.html).addClass(constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); + } else if (!_usesAppHandlers) { + // Load html and save the root node + appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); + } else { + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_RENDER, + appConfigs[i], // the app config + _outerHtml(jQuery(a.html).addClass(constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) + ); - // This script is actively loading, add this app to the wait list - if (_loadingScripts[resourceKey]) { - _loadingScripts[resourceKey].push({ - success: _checkComplete, - error: _error - }); + var appId = appConfigs[i].appId; + var root = appConfigs[i].root; - return; + if (!root) { + throw new Error('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); } - // Create the waitlist - _loadingScripts[resourceKey] = []; - - // If in debugMode, add cache buster to each script URL - if (_config.debugMode) { - resourceUrl += '?cachebuster=' + new Date().getTime(); + if (!elementInDocument(root)) { + throw new Error('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); } - // Scripts are loaded asynchronously and executed in order - // in supported browsers: http://caniuse.com/#feat=script-async - script.async = false; - script.type = 'text/javascript'; - script.charset = 'utf-8'; - - script.onerror = function(e) { - _error(e); - _emptyWaitlist(resourceKey, e); - }; - - // Use a closure for the load event so that we can dereference the original script - script.onload = script.onreadystatechange = function(e) { - e = e || window.event; // For older IE - - // Detect when it's done loading - // ev.type == 'load' is for all browsers except IE6-9 - // IE6-9 need to use onreadystatechange and look for - // el.readyState in {loaded, complete} (yes, we need both) - if (e.type === 'load' || readyStates[script.readyState]) { - // Done, cleanup - script.onload = script.onreadystatechange = script.onerror = ''; - // Loaded - _loadedScripts[resourceKey] = true; - // Increment and check if scripts are done - _checkComplete(); - // Empty wait list - _emptyWaitlist(resourceKey); - // Dereference script - script = null; - } - }; - - // Set the src, start loading - script.src = resourceUrl; - - // really is the best - head.insertBefore(script, insertBeforeEl); - }); - } - - function _loadInlineScripts(inlines, cb) { - // Attempt to use the user provided method - if (_config.loadInlineScripts) { - _config.loadInlineScripts(inlines, cb); - } else { - for (var i = 0, len = inlines.length; i < len; i++) { - try { - eval(inlines[i]); - } catch ( exception ) { - F2.log('Error loading inline script: ' + exception + '\n\n' + inlines[i]); - - // Emit events - F2.Events.emit('RESOURCE_FAILED_TO_LOAD', { - appId: appConfigs[0].appId, - src: inlines[i], - err: exception - }); + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_RENDER_AFTER, + appConfigs[i] // the app config + ); - if (!_usesAppHandlers) { - _appScriptLoadFailed(appConfigs[0], exception); - } else { - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_SCRIPT_LOAD_FAILED, - appConfigs[0], - exception - ); - } - } + if (!F2.isNativeDOMNode(root)) { + throw new Error('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); } - cb(); } - } - // Determine whether an element has been added to the page - function elementInDocument(element) { - if (element) { - while (element.parentNode) { - element = element.parentNode; + // init events + _initAppEvents(appConfigs[i]); + }); + } - if (element === document) { - return true; - } - } + // Pull out the manifest data + var manifestScripts = appManifest.scripts || []; + var manifestStyles = appManifest.styles || []; + var manifestInlines = appManifest.inlineScripts || []; + var manifestApps = appManifest.apps || []; + + // Finally, load the styles, html, and scripts + _loadStyles(manifestStyles, function() { + _loadHtml(manifestApps); + _loadScripts(manifestScripts, function() { + // Emit event we're done with scripts + if (appConfigs[0]) { + events.emit('APP_SCRIPTS_LOADED', { + appId: appConfigs[0].appId, + scripts: manifestScripts + }); } - return false; - } + _loadInlineScripts(manifestInlines, function() { + // Create the apps + jQuery.each(appConfigs, function(i, a) { + _createAppInstance(a, manifestApps[i]); + }); + }); + }); + }); +} - function _loadHtml(apps) { - jQuery.each(apps, function(i, a) { - if (_isPlaceholderElement(appConfigs[i].root)) { - jQuery(appConfigs[i].root) - .addClass(F2.Constants.Css.APP) - .append(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)); - } else if (!_usesAppHandlers) { - // Load html and save the root node - appConfigs[i].root = _afterAppRender(appConfigs[i], _appRender(appConfigs[i], a.html)); - } else { - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfigs[i], // the app config - _outerHtml(jQuery(a.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfigs[i].appId)) - ); +/** + Loads the app's html/css/javascript into an iframe. + @method loadSecureApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into + the page. +*/ +function _loadSecureApp(appConfig, appManifest) { + // Make sure the container is configured for secure apps + if (_config.secureAppPagePath) { + if (_isPlaceholderElement(appConfig.root)) { + jQuery(appConfig.root) + .addClass(constants.Css.APP) + .append(jQuery('
') + .addClass(constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); + } else if (!_usesAppHandlers) { + // Create the html container for the iframe + appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); + } else { + var $root = jQuery(appConfig.root); - var appId = appConfigs[i].appId; - var root = appConfigs[i].root; + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_RENDER, + appConfig, + _outerHtml(jQuery(appManifest.html).addClass(constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) + ); - if (!root) { - throw new Error('Root for ' + appId + ' must be a native DOM element and cannot be null or undefined. Check your AppHandler callbacks to ensure you have set App root to a native DOM element.'); - } - - if (!elementInDocument(root)) { - throw new Error('App root for ' + appId + ' was not appended to the DOM. Check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } + if ($root.parents('body:first').length === 0) { + throw new Error('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); + } - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfigs[i] // the app config - ); + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_RENDER_AFTER, + appConfig // the app config + ); - if (!F2.isNativeDOMNode(root)) { - throw new Error('App root for ' + appId + ' must be a native DOM element. Check your AppHandler callbacks to ensure you have set app root to a native DOM element.'); - } - } + if (!appConfig.root) { + throw new Error('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } - // init events - _initAppEvents(appConfigs[i]); - }); + if (!F2.isNativeDOMNode(appConfig.root)) { + throw new Error('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); + } } - // Pull out the manifest data - var manifestScripts = appManifest.scripts || []; - var manifestStyles = appManifest.styles || []; - var manifestInlines = appManifest.inlineScripts || []; - var manifestApps = appManifest.apps || []; - - // Finally, load the styles, html, and scripts - _loadStyles(manifestStyles, function() { - _loadHtml(manifestApps); - _loadScripts(manifestScripts, function() { - // Emit event we're done with scripts - if (appConfigs[0]) { - F2.Events.emit('APP_SCRIPTS_LOADED', { - appId: appConfigs[0].appId, - scripts: manifestScripts - }); - } - - _loadInlineScripts(manifestInlines, function() { - // Create the apps - jQuery.each(appConfigs, function(i, a) { - _createAppInstance(a, manifestApps[i]); - }); - }); - }); - }); + // Instantiate F2.UI + appConfig.ui = new ui(appConfig); + // Init events + _initAppEvents(appConfig); + // Create RPC socket + rpc.register(appConfig, appManifest); + } else { + F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); } +} - /** - Loads the app's html/css/javascript into an iframe. - @method loadSecureApp - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @param {F2.AppManifest} appManifest The app's html/css/js to be loaded into - the page. - */ - function _loadSecureApp(appConfig, appManifest) { - // Make sure the container is configured for secure apps - if (_config.secureAppPagePath) { - if (_isPlaceholderElement(appConfig.root)) { - jQuery(appConfig.root) - .addClass(F2.Constants.Css.APP) - .append(jQuery('
') - .addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)); - } else if (!_usesAppHandlers) { - // Create the html container for the iframe - appConfig.root = _afterAppRender(appConfig, _appRender(appConfig, '
')); - } else { - var $root = jQuery(appConfig.root); +function _outerHtml(html) { + return jQuery('
').append(html).html(); +} - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_RENDER, - appConfig, - _outerHtml(jQuery(appManifest.html).addClass(F2.Constants.Css.APP_CONTAINER + ' ' + appConfig.appId)) - ); +/** + Checks if the app is valid. + @method _validateApp + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @returns {bool} True if the app is valid +*/ +function _validateApp(appConfig) { + // Check for valid app configurations + if (!appConfig.appId) { + F2.log('"appId" missing from app object'); + return false; + } else if (!appConfig.root && !appConfig.manifestUrl) { + F2.log('"manifestUrl" missing from app object'); + return false; + } - if ($root.parents('body:first').length === 0) { - throw new Error('App was never rendered on the page. Please check your AppHandler callbacks to ensure you have rendered the app root to the DOM.'); - } + return true; +} - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_AFTER, - appConfig // the app config - ); +/** + Checks if the ContainerConfig is valid. + @method _validateContainerConfig + @private + @returns {bool} True if the config is valid +*/ +function _validateContainerConfig() { + if (_config) { + if (_config.xhr) { + if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { + throw new Error('ContainerConfig.xhr should be a function or an object'); + } + if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { + throw new Error('ContainerConfig.xhr.dataType should be a function'); + } + if (_config.xhr.type && typeof _config.xhr.type !== 'function') { + throw new Error('ContainerConfig.xhr.type should be a function'); + } + if (_config.xhr.url && typeof _config.xhr.url !== 'function') { + throw new Error('ContainerConfig.xhr.url should be a function'); + } + } + } - if (!appConfig.root) { - throw new Error('App Root must be a native dom node and can not be null or undefined. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } + return true; +} - if (!F2.isNativeDOMNode(appConfig.root)) { - throw new Error('App Root must be a native dom node. Please check your AppHandler callbacks to ensure you have set App Root to a native dom node.'); - } - } +/** + Find app placeholders on the page + @method _getPlaceholders + @private + @param {Element} parentNode The element to search for placeholder apps + @returns {Array} The discovered placeholder elements +*/ +function _getPlaceholders(parentNode) { + var elements = []; - // Instantiate F2.UI - appConfig.ui = new F2.UI(appConfig); - // Init events - _initAppEvents(appConfig); - // Create RPC socket - F2.Rpc.register(appConfig, appManifest); - } else { - F2.log('Unable to load secure app: "secureAppPagePath" is not defined in F2.ContainerConfig.'); - } + if (parentNode.hasAttribute('data-f2-appid')) { + elements.push(parentNode); } - function _outerHtml(html) { - return jQuery('
').append(html).html(); + if (parentNode.querySelectorAll) { + var children = Array.prototype.slice.call(parentNode.querySelectorAll('[data-f2-appid]')); + elements = elements.concat(children); } + return elements; +} + +/** + Root namespace of the F2 SDK + @module f2 + @class F2 +*/ +module.exports = { /** - Checks if the app is valid. - @method _validateApp - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @returns {bool} True if the app is valid + Gets the current list of apps in the container. + @method getContainerState + @returns {Array} An array of objects containing the appId */ - function _validateApp(appConfig) { - // Check for valid app configurations - if (!appConfig.appId) { - F2.log('"appId" missing from app object'); - return false; - } else if (!appConfig.root && !appConfig.manifestUrl) { - F2.log('"manifestUrl" missing from app object'); - return false; + getContainerState: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerState()'); + return; } - return true; - } + return jQuery.map(_apps, function(app) { + return { + appId: app.config.appId + }; + }); + }, + /** + Gets the current locale defined by the container. + @method getContainerLocale + @returns {String} IETF-defined standard language tag + */ + getContainerLocale: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.getContainerLocale()'); + return; + } + return classes.ContainerConfig.locale; + }, /** - Checks if the ContainerConfig is valid. - @method _validateContainerConfig - @private - @returns {bool} True if the config is valid + Initializes the container. This method must be called before performing + any other actions in the container. + @method init + @param {F2.ContainerConfig} config The configuration object */ - function _validateContainerConfig() { - if (_config) { - if (_config.xhr) { - if (!(typeof _config.xhr === 'function' || typeof _config.xhr === 'object')) { - throw new Error('ContainerConfig.xhr should be a function or an object'); - } - if (_config.xhr.dataType && typeof _config.xhr.dataType !== 'function') { - throw new Error('ContainerConfig.xhr.dataType should be a function'); - } - if (_config.xhr.type && typeof _config.xhr.type !== 'function') { - throw new Error('ContainerConfig.xhr.type should be a function'); - } - if (_config.xhr.url && typeof _config.xhr.url !== 'function') { - throw new Error('ContainerConfig.xhr.url should be a function'); - } - } + init: function(config) { + _config = config || {}; + _validateContainerConfig(); + _hydrateContainerConfig(_config); + + // Dictates whether we use the old logic or the new logic. + // TODO: Remove in v2.0 + _usesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); + + // Only establish RPC connection if the container supports the secure app page + if (!!_config.secureAppPagePath || _config.isSecureAppPage) { + rpc.init(_config.secureAppPagePath ? _config.secureAppPagePath : false); } - return true; - } + ui.init(_config); + if (!_config.isSecureAppPage) { + _initContainerEvents(); + } + }, + /** + Has the container been init? + @method isInit + @return {bool} True if the container has been init + */ + isInit: _isInit, /** - Find app placeholders on the page - @method _getPlaceholders - @private + Automatically load apps that are already defined in the DOM. Elements will + be rendered into the location of the placeholder DOM element. Any + AppHandlers that are defined will be bypassed. + @method loadPlaceholders @param {Element} parentNode The element to search for placeholder apps - @returns {Array} The discovered placeholder elements */ - function _getPlaceholders(parentNode) { - var elements = []; - - if (parentNode.hasAttribute('data-f2-appid')) { - elements.push(parentNode); - } - - if (parentNode.querySelectorAll) { - var children = Array.prototype.slice.call(parentNode.querySelectorAll('[data-f2-appid]')); - elements = elements.concat(children); + loadPlaceholders: function(parentNode) { + if (parentNode && !F2.isNativeDOMNode(parentNode)) { + throw new Error('"parentNode" must be null or a DOM node'); } - return elements; - } + var elements = _getPlaceholders(parentNode || document.body); + var appConfigs = []; - return { - /** - Gets the current list of apps in the container. - @method getContainerState - @returns {Array} An array of objects containing the appId - */ - getContainerState: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerState()'); - return; - } + for (var i = 0, len = elements.length; i < len; i++) { + var appConfig = _getAppConfigFromElement(elements[i]); + appConfigs.push(appConfig); + } - return jQuery.map(_apps, function(app) { - return { - appId: app.config.appId - }; - }); - }, - /** - Gets the current locale defined by the container. - @method getContainerLocale - @returns {String} IETF-defined standard language tag - */ - getContainerLocale: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.getContainerLocale()'); - return; - } + if (appConfigs.length) { + this.registerApps(appConfigs); + } + }, + /** + Begins the loading process for all apps and/or initialization process for + pre-loaded apps. The app will be passed the + {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will contain the + app's unique instanceId within the container. If the + {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated + the app is considered to be a pre-loaded app and will be handled + accordingly. Optionally, the + {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those + assets will be used instead of making a request. + @method registerApps + @param {Array} appConfigs An array of + {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects + @param {Array} [appManifests] An array of + {{#crossLink "F2.AppManifest"}}{{/crossLink}} + objects. This array must be the same length as the apps array that is + passed in. This can be useful if apps are loaded on the server-side and + passed down to the client. + @example + // Traditional App requests. + var configs = [{ + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }, { + appId: 'com_externaldomain_example_app2', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Pre-loaded and tradition apps mixed. + // You can preload the same app multiple times as long as you have a unique root for each + var configs = [{ + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-1', + manifestUrl: '' + }, { + appId: 'com_mydomain_example_app', + context: {}, + root: 'div#example-app-2', + manifestUrl: '' + }, { + appId: 'com_externaldomain_example_app', + context: {}, + manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' + }]; + + F2.init(); + F2.registerApps(configs); + @example + // Apps with predefined manifests. + var configs = [ + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app', context: {} }, + { appId: 'com_externaldomain_example_app2', context: {} } + ]; + + // Pre requested manifest responses + var manifests = [{ + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/AppClass.js'], + styles: ['http://www.domain.com/css/AppStyles.css'] + }, { + apps: ['
Example App 2!
'], + inlineScripts: [], + scripts: ['http://www.domain.com/js/App2Class.js'], + styles: ['http://www.domain.com/css/App2Styles.css'] + }]; + + F2.init(); + F2.registerApps(configs, manifests); + */ + registerApps: function(appConfigs, appManifests) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.registerApps()'); + return; + } - return F2.ContainerConfig.locale; - }, - /** - Initializes the container. This method must be called before performing - any other actions in the container. - @method init - @param {F2.ContainerConfig} config The configuration object - */ - init: function(config) { - _config = config || {}; - _validateContainerConfig(); - _hydrateContainerConfig(_config); - - // Dictates whether we use the old logic or the new logic. - // TODO: Remove in v2.0 - _usesAppHandlers = (!_config.beforeAppRender && !_config.appRender && !_config.afterAppRender && !_config.appScriptLoadFailed); - - // Only establish RPC connection if the container supports the secure app page - if (!!_config.secureAppPagePath || _config.isSecureAppPage) { - F2.Rpc.init(_config.secureAppPagePath ? _config.secureAppPagePath : false); - } + if (!appConfigs) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } - F2.UI.init(_config); + var appStack = []; + var batches = {}; + var callbackStack = {}; + var haveManifests = false; + appConfigs = [].concat(appConfigs); + appManifests = [].concat(appManifests || []); + haveManifests = !!appManifests.length; - if (!_config.isSecureAppPage) { - _initContainerEvents(); - } - }, - /** - Has the container been init? - @method isInit - @return {bool} True if the container has been init - */ - isInit: _isInit, - /** - Automatically load apps that are already defined in the DOM. Elements will - be rendered into the location of the placeholder DOM element. Any - AppHandlers that are defined will be bypassed. - @method loadPlaceholders - @param {Element} parentNode The element to search for placeholder apps - */ - loadPlaceholders: function(parentNode) { - if (parentNode && !F2.isNativeDOMNode(parentNode)) { - throw new Error('"parentNode" must be null or a DOM node'); - } + // AppConfigs must have a length + if (!appConfigs.length) { + F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); + return; + } - var elements = _getPlaceholders(parentNode || document.body); - var appConfigs = []; + // Ensure that the array of apps and manifests are equal + if (appConfigs.length && haveManifests && appConfigs.length !== appManifests.length) { + F2.log('The length of "apps" does not equal the length of "appManifests"'); + return; + } - for (var i = 0, len = elements.length; i < len; i++) { - var appConfig = _getAppConfigFromElement(elements[i]); - appConfigs.push(appConfig); - } + // Validate apps, assign instanceId, then determine which apps can be batched together + jQuery.each(appConfigs, function(i, a) { + // Add properties and methods + a = _createAppConfig(a); - if (appConfigs.length) { - F2.registerApps(appConfigs); - } - }, - /** - Begins the loading process for all apps and/or initialization process for - pre-loaded apps. The app will be passed the - {{#crossLink "F2.AppConfig"}}{{/crossLink}} object which will contain the - app's unique instanceId within the container. If the - {{#crossLink "F2.AppConfig"}}{{/crossLink}}.root property is populated - the app is considered to be a pre-loaded app and will be handled - accordingly. Optionally, the - {{#crossLink "F2.AppManifest"}}{{/crossLink}} can be passed in and those - assets will be used instead of making a request. - @method registerApps - @param {Array} appConfigs An array of - {{#crossLink "F2.AppConfig"}}{{/crossLink}} objects - @param {Array} [appManifests] An array of - {{#crossLink "F2.AppManifest"}}{{/crossLink}} - objects. This array must be the same length as the apps array that is - passed in. This can be useful if apps are loaded on the server-side and - passed down to the client. - @example - // Traditional App requests. - var configs = [{ - appId: 'com_externaldomain_example_app', - context: {}, - manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - }, { - appId: 'com_externaldomain_example_app', - context: {}, - manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - }, { - appId: 'com_externaldomain_example_app2', - context: {}, - manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - }]; - - F2.init(); - F2.registerApps(configs); - @example - // Pre-loaded and tradition apps mixed. - // You can preload the same app multiple times as long as you have a unique root for each - var configs = [{ - appId: 'com_mydomain_example_app', - context: {}, - root: 'div#example-app-1', - manifestUrl: '' - }, { - appId: 'com_mydomain_example_app', - context: {}, - root: 'div#example-app-2', - manifestUrl: '' - }, { - appId: 'com_externaldomain_example_app', - context: {}, - manifestUrl: 'http://www.externaldomain.com/F2/AppManifest' - }]; - - F2.init(); - F2.registerApps(configs); - @example - // Apps with predefined manifests. - var configs = [ - { appId: 'com_externaldomain_example_app', context: {} }, - { appId: 'com_externaldomain_example_app', context: {} }, - { appId: 'com_externaldomain_example_app2', context: {} } - ]; - - // Pre requested manifest responses - var manifests = [{ - apps: ['
Example App!
'], - inlineScripts: [], - scripts: ['http://www.domain.com/js/AppClass.js'], - styles: ['http://www.domain.com/css/AppStyles.css'] - }, { - apps: ['
Example App!
'], - inlineScripts: [], - scripts: ['http://www.domain.com/js/AppClass.js'], - styles: ['http://www.domain.com/css/AppStyles.css'] - }, { - apps: ['
Example App 2!
'], - inlineScripts: [], - scripts: ['http://www.domain.com/js/App2Class.js'], - styles: ['http://www.domain.com/css/App2Styles.css'] - }]; - - F2.init(); - F2.registerApps(configs, manifests); - */ - registerApps: function(appConfigs, appManifests) { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.registerApps()'); - return; - } else if (!appConfigs) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - } + // Set to itself for preloaded apps + a.root = a.root || null; - var appStack = []; - var batches = {}; - var callbackStack = {}; - var haveManifests = false; - appConfigs = [].concat(appConfigs); - appManifests = [].concat(appManifests || []); - haveManifests = !!appManifests.length; - - // AppConfigs must have a length - if (!appConfigs.length) { - F2.log('At least one AppConfig must be passed when calling F2.registerApps()'); - return; - } else if (appConfigs.length && haveManifests && appConfigs.length !== appManifests.length) { - // Ensure that the array of apps and manifests are equal - F2.log('The length of "apps" does not equal the length of "appManifests"'); + // Validate the app after setting the root because preloaded apps do not require manifest url + if (!_validateApp(a)) { return; } - // Validate apps, assign instanceId, then determine which apps can be batched together - jQuery.each(appConfigs, function(i, a) { - // Add properties and methods - a = _createAppConfig(a); - - // Set to itself for preloaded apps - a.root = a.root || null; + _apps[a.instanceId] = { + config: a + }; - // Validate the app after setting the root because preloaded apps do not require manifest url - if (!_validateApp(a)) { - return; + // If the root property is defined then this app is considered to be preloaded and we will run it through that logic. + if (a.root && !_isPlaceholderElement(a.root)) { + if ((!a.root && typeof a.root !== 'string') && !F2.isNativeDOMNode(a.root)) { + F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); + F2.log('AppConfig instance:', a); + throw new Error('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); + } else if (jQuery(a.root).length !== 1) { + F2.log('AppConfig invalid for pre-load, root not unique'); + F2.log('AppConfig instance:', a); + F2.log('Number of dom node instances:', jQuery(a.root).length); + throw new Error('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); } - _apps[a.instanceId] = { - config: a - }; - - // If the root property is defined then this app is considered to be preloaded and we will run it through that logic. - if (a.root && !_isPlaceholderElement(a.root)) { - if ((!a.root && typeof a.root !== 'string') && !F2.isNativeDOMNode(a.root)) { - F2.log('AppConfig invalid for pre-load, not a valid string and not dom node'); - F2.log('AppConfig instance:', a); - throw new Error('Preloaded appConfig.root property must be a native dom node or a string representing a sizzle selector. Please check your inputs and try again.'); - } else if (jQuery(a.root).length !== 1) { - F2.log('AppConfig invalid for pre-load, root not unique'); - F2.log('AppConfig instance:', a); - F2.log('Number of dom node instances:', jQuery(a.root).length); - throw new Error('Preloaded appConfig.root property must map to a unique dom node. Please check your inputs and try again.'); - } - - // Instantiate F2.App - _createAppInstance(a); - _initAppEvents(a); + // Instantiate F2.App + _createAppInstance(a); + _initAppEvents(a); - return; - } + return; + } - if (!_isPlaceholderElement(a.root)) { - if (!_usesAppHandlers) { - a.root = _beforeAppRender(a); - } else { - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_CREATE_ROOT, - a - ); + if (!_isPlaceholderElement(a.root)) { + if (!_usesAppHandlers) { + a.root = _beforeAppRender(a); + } else { + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_CREATE_ROOT, + a + ); - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_RENDER_BEFORE, - a - ); - } + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_RENDER_BEFORE, + a + ); } + } - // Load the page if we have the manifest - if (haveManifests) { - _loadApps(a, appManifests[i]); + // Load the page if we have the manifest + if (haveManifests) { + _loadApps(a, appManifests[i]); + } else { + // Check if this app can be batched + if (a.enableBatchRequests && !a.isSecure) { + batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; + batches[a.manifestUrl.toLowerCase()].push(a); } else { - // Check if this app can be batched - if (a.enableBatchRequests && !a.isSecure) { - batches[a.manifestUrl.toLowerCase()] = batches[a.manifestUrl.toLowerCase()] || []; - batches[a.manifestUrl.toLowerCase()].push(a); - } else { - appStack.push({ - apps: [a], - url: a.manifestUrl - }); - } - } - }); - - if (!haveManifests) { - // Add the batches to the appStack - jQuery.each(batches, function(i, b) { appStack.push({ - url: i, - apps: b + apps: [a], + url: a.manifestUrl }); - }); + } + } + }); - /* - If an app is being loaded more than once on the page, there is the - potential that the jsonp callback will be clobbered if the request - for the AppManifest for the app comes back at the same time as - another request for the same app. We'll create a callbackStack - that will ensure that requests for the same app are loaded in order - rather than at the same time - */ - jQuery.each(appStack, function(i, req) { - // Define the callback function based on the first app's App ID - var jsonpCallback = F2.Constants.JSONP_CALLBACK + req.apps[0].appId; - - // Push the request onto the callback stack - callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; - callbackStack[jsonpCallback].push(req); + if (!haveManifests) { + // Add the batches to the appStack + jQuery.each(batches, function(i, b) { + appStack.push({ + url: i, + apps: b }); + }); - /* - Loop through each item in the callback stack and make the request - for the AppManifest. When the request is complete, pop the next - request off the stack and make the request. - */ - jQuery.each(callbackStack, function(i, requests) { - function manifestRequest(jsonpCallback, req) { - if (!req) { - return; - } - - // Setup defaults and callbacks - var type = 'GET'; - var dataType = 'jsonp'; + /* + If an app is being loaded more than once on the page, there is the + potential that the jsonp callback will be clobbered if the request + for the AppManifest for the app comes back at the same time as + another request for the same app. We'll create a callbackStack + that will ensure that requests for the same app are loaded in order + rather than at the same time + */ + jQuery.each(appStack, function(i, req) { + // Define the callback function based on the first app's App ID + var jsonpCallback = constants.JSONP_CALLBACK + req.apps[0].appId; + + // Push the request onto the callback stack + callbackStack[jsonpCallback] = callbackStack[jsonpCallback] || []; + callbackStack[jsonpCallback].push(req); + }); - function completeFunc() { - manifestRequest(i, requests.pop()); - } + /* + Loop through each item in the callback stack and make the request + for the AppManifest. When the request is complete, pop the next + request off the stack and make the request. + */ + jQuery.each(callbackStack, function(i, requests) { + function manifestRequest(jsonpCallback, req) { + if (!req) { + return; + } - function errorFunc() { - jQuery.each(req.apps, function(idx, item) { - item.name = item.name || item.appId; - F2.log('Removed failed ' + item.name + ' app', item); - F2.removeApp(item.instanceId); - }); - } + // Setup defaults and callbacks + var type = 'GET'; + var dataType = 'jsonp'; - function successFunc(appManifest) { - _loadApps(req.apps, appManifest); - } + function completeFunc() { + manifestRequest(i, requests.pop()); + } - // Optionally fire xhr overrides - if (_config.xhr) { - if (_config.xhr.dataType) { - dataType = _config.xhr.dataType(req.url, req.apps); + function errorFunc() { + jQuery.each(req.apps, function(idx, item) { + item.name = item.name || item.appId; + F2.log('Removed failed ' + item.name + ' app', item); + F2.removeApp(item.instanceId); + }); + } - if (typeof dataType !== 'string') { - throw new Error('ContainerConfig.xhr.dataType should return a string'); - } - } + function successFunc(appManifest) { + _loadApps(req.apps, appManifest); + } - if (_config.xhr.type) { - type = _config.xhr.type(req.url, req.apps); + // Optionally fire xhr overrides + if (_config.xhr) { + if (_config.xhr.dataType) { + dataType = _config.xhr.dataType(req.url, req.apps); - if (typeof type !== 'string') { - throw new Error('ContainerConfig.xhr.type should return a string'); - } + if (typeof dataType !== 'string') { + throw new Error('ContainerConfig.xhr.dataType should return a string'); } + } - if (_config.xhr.url) { - req.url = _config.xhr.url(req.url, req.apps); + if (_config.xhr.type) { + type = _config.xhr.type(req.url, req.apps); - if (typeof req.url !== 'string') { - throw new Error('ContainerConfig.xhr.url should return a string'); - } + if (typeof type !== 'string') { + throw new Error('ContainerConfig.xhr.type should return a string'); } } - // Setup the default request function if an override is not present - var requestFunc = _config.xhr; - - if (typeof requestFunc !== 'function') { - requestFunc = function(url, apps, successCallback, errorCallback, completeCallback) { - jQuery.ajax({ - url: url, - type: type, - data: { - params: F2.stringify(req.apps, F2.appConfigReplacer) - }, - jsonp: false, // do not put 'callback=' in the query string - jsonpCallback: jsonpCallback, // Unique function name - dataType: dataType, - success: successCallback, - error: function(jqxhr, settings, exception) { - F2.log('Failed to load app(s)', exception.toString(), req.apps); - errorCallback(); - }, - complete: completeCallback - }); - }; + if (_config.xhr.url) { + req.url = _config.xhr.url(req.url, req.apps); + + if (typeof req.url !== 'string') { + throw new Error('ContainerConfig.xhr.url should return a string'); + } } + } - requestFunc(req.url, req.apps, successFunc, errorFunc, completeFunc); + // Setup the default request function if an override is not present + var requestFunc = _config.xhr; + + if (typeof requestFunc !== 'function') { + requestFunc = function(url, apps, successCallback, errorCallback, completeCallback) { + jQuery.ajax({ + url: url, + type: type, + data: { + params: F2.stringify(req.apps, F2.appConfigReplacer) + }, + jsonp: false, // do not put 'callback=' in the query string + jsonpCallback: jsonpCallback, // Unique function name + dataType: dataType, + success: successCallback, + error: function(jqxhr, settings, exception) { + F2.log('Failed to load app(s)', exception.toString(), req.apps); + errorCallback(); + }, + complete: completeCallback + }); + }; } - manifestRequest(i, requests.pop()); - }); - } - }, - /** - Removes all apps from the container - @method removeAllApps - */ - removeAllApps: function() { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeAllApps()'); - return; - } + requestFunc(req.url, req.apps, successFunc, errorFunc, completeFunc); + } - jQuery.each(_apps, function(i, a) { - F2.removeApp(a.config.instanceId); + manifestRequest(i, requests.pop()); }); - }, - /** - Removes an app from the container. - @method removeApp - @param {string} instanceId The app's instanceId - */ - removeApp: function(instanceId) { - if (!_isInit()) { - F2.log('F2.init() must be called before F2.removeApp()'); - return; - } - - if (_apps[instanceId]) { - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_BEFORE, - _apps[instanceId] - ); - - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY, - _apps[instanceId] - ); + } + }, + /** + Removes all apps from the container + @method removeAllApps + */ + removeAllApps: function() { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeAllApps()'); + return; + } - F2.AppHandlers.__trigger( - _appHandlerToken, - F2.Constants.AppHandlers.APP_DESTROY_AFTER, - _apps[instanceId] - ); + jQuery.each(_apps, function(i, a) { + F2.removeApp(a.config.instanceId); + }); + }, + /** + Removes an app from the container. + @method removeApp + @param {string} instanceId The app's instanceId + */ + removeApp: function(instanceId) { + if (!_isInit()) { + F2.log('F2.init() must be called before F2.removeApp()'); + return; + } - delete _apps[instanceId]; - } + if (_apps[instanceId]) { + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_DESTROY_BEFORE, + _apps[instanceId] + ); + + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_DESTROY, + _apps[instanceId] + ); + + appHandlers.__trigger( + _appHandlerToken, + constants.AppHandlers.APP_DESTROY_AFTER, + _apps[instanceId] + ); + + delete _apps[instanceId]; } - }; -})()); + } +}; diff --git a/src/lib/events.js b/src/lib/events.js index d33b98fc..6acb69ab 100644 --- a/src/lib/events.js +++ b/src/lib/events.js @@ -1,11 +1,15 @@ -/* global F2, EventEmitter2 */ +/* global EventEmitter2 */ + +var constants = require('./constants'); +var F2 = require('./F2'); +var rpc = require('./rpc'); /** Handles [Context](../../app-development.html#context) passing from containers to apps and apps to apps. @class F2.Events */ -F2.extend('Events', (function() { +module.exports = (function() { var _events = new EventEmitter2({ wildcard: true }); @@ -35,7 +39,7 @@ F2.extend('Events', (function() { @returns {object} EventEmitter2 instance */ emit: function() { - F2.Rpc.broadcast(F2.Constants.Sockets.EVENT, [].slice.call(arguments)); + rpc.broadcast(constants.Sockets.EVENT, [].slice.call(arguments)); return EventEmitter2.prototype.emit.apply(_events, [].slice.call(arguments)); }, /** @@ -87,4 +91,4 @@ F2.extend('Events', (function() { return _events.once(event, listener); } }; -})()); +})(); diff --git a/src/lib/index.js b/src/lib/index.js new file mode 100644 index 00000000..9b41386f --- /dev/null +++ b/src/lib/index.js @@ -0,0 +1,42 @@ +var appHandlers = require('./app_handlers'); +var classes = require('./classes'); +var constants = require('./constants'); +var container = require('./container'); +var events = require('./events'); +var f2 = require('./F2'); +var rpc = require('./rpc'); +var ui = require('./ui'); + +require('./autoload'); + +module.exports = window.F2 = { + appConfigReplacer: f2.appConfigReplacer, + AppHandlers: appHandlers, + App: classes.App, + AppConfig: classes.AppConfig, + AppContent: classes.AppContent, + AppManifest: classes.AppManifest, + Apps: f2.Apps, + Constants: constants, + ContainerConfig: classes.ContainerConfig, + Events: events, + extend: f2.extend, + getContainerLocale: container.getContainerLocale, + getContainerState: container.getContainerState, + guid: f2.guid, + inArray: f2.inArray, + init: container.init, + isInit: container.isInit, + isLocalRequest: f2.isLocalRequest, + isNativeDOMNode: f2.isNativeDOMNode, + log: f2.log, + loadPlaceholders: container.loadPlaceholders, + parse: f2.parse, + registerApps: container.registerApps, + removeAllApps: container.removeAllApps, + removeApp: container.removeApp, + Rpc: rpc, + stringify: f2.stringify, + UI: ui, + version: f2.version +}; diff --git a/src/lib/rpc.js b/src/lib/rpc.js index a880878c..08e99133 100644 --- a/src/lib/rpc.js +++ b/src/lib/rpc.js @@ -1,315 +1,319 @@ -/* global F2, easyXDM, jQuery */ +/* global easyXDM, jQuery */ + +var constants = require('./constants'); +var container = require('./container'); +var events = require('./events'); +var F2 = require('./F2'); +var rpc = require('./rpc'); + +var _callbacks = {}; +var _secureAppPagePath = ''; +var _apps = {}; +var _rEvents = new RegExp('^' + constants.Sockets.EVENT); +var _rRpc = new RegExp('^' + constants.Sockets.RPC); +var _rRpcCallback = new RegExp('^' + constants.Sockets.RPC_CALLBACK); +var _rSocketLoad = new RegExp('^' + constants.Sockets.LOAD); +var _rUiCall = new RegExp('^' + constants.Sockets.UI_RPC); /** - Handles socket communication between the container and secure apps - @class F2.Rpc + Creates a socket connection from the app to the container using + easyXDM. + @method _createAppToContainerSocket + @private */ -F2.extend('Rpc', (function() { - var _callbacks = {}; - var _secureAppPagePath = ''; - var _apps = {}; - var _rEvents = new RegExp('^' + F2.Constants.Sockets.EVENT); - var _rRpc = new RegExp('^' + F2.Constants.Sockets.RPC); - var _rRpcCallback = new RegExp('^' + F2.Constants.Sockets.RPC_CALLBACK); - var _rSocketLoad = new RegExp('^' + F2.Constants.Sockets.LOAD); - var _rUiCall = new RegExp('^' + F2.Constants.Sockets.UI_RPC); - +function _createAppToContainerSocket() { + var appConfig; + var isLoaded = false; /** - Creates a socket connection from the app to the container using - easyXDM. - @method _createAppToContainerSocket - @private + It's possible for messages to be received before the socket load event has + happened. We'll save off these messages and replay them once the socket is + ready. */ - function _createAppToContainerSocket() { - var appConfig; - var isLoaded = false; - /** - It's possible for messages to be received before the socket load event has - happened. We'll save off these messages and replay them once the socket is - ready. - */ - var messagePlayback = []; - - var socket = new easyXDM.Socket({ - onMessage: function(message, origin) { - // Handle Socket Load - if (!isLoaded && _rSocketLoad.test(message)) { - message = message.replace(_rSocketLoad, ''); - var appParts = F2.parse(message); - - // Make sure we have the AppConfig and AppManifest - if (appParts.length === 2) { - appConfig = appParts[0]; - - // Save socket - _apps[appConfig.instanceId] = { - config: appConfig, - socket: socket - }; - - F2.registerApps([appConfig], [appParts[1]]); - - // Socket message playback - jQuery.each(messagePlayback, function() { - _onMessage(appConfig, message, origin); - }); - - isLoaded = true; - } - } else if (isLoaded) { - // Pass everyting else to _onMessage - _onMessage(appConfig, message, origin); - } else { - messagePlayback.push(message); + var messagePlayback = []; + + var socket = new easyXDM.Socket({ + onMessage: function(message, origin) { + // Handle Socket Load + if (!isLoaded && _rSocketLoad.test(message)) { + message = message.replace(_rSocketLoad, ''); + var appParts = F2.parse(message); + + // Make sure we have the AppConfig and AppManifest + if (appParts.length === 2) { + appConfig = appParts[0]; + + // Save socket + _apps[appConfig.instanceId] = { + config: appConfig, + socket: socket + }; + + container.registerApps([appConfig], [appParts[1]]); + + // Socket message playback + jQuery.each(messagePlayback, function() { + _onMessage(appConfig, message, origin); + }); + + isLoaded = true; } + } else if (isLoaded) { + // Pass everyting else to _onMessage + _onMessage(appConfig, message, origin); + } else { + messagePlayback.push(message); } - }); - } + } + }); +} - /** - Creates a socket connection from the container to the app using - easyXDM. - @method _createContainerToAppSocket - @private - @param {appConfig} appConfig The F2.AppConfig object - @param {F2.AppManifest} appManifest The F2.AppManifest object - @return {object} The new socket - */ - function _createContainerToAppSocket(appConfig, appManifest) { - var container = jQuery(appConfig.root); +/** + Creates a socket connection from the container to the app using + easyXDM. + @method _createContainerToAppSocket + @private + @param {appConfig} appConfig The F2.AppConfig object + @param {F2.AppManifest} appManifest The F2.AppManifest object + @return {object} The new socket +*/ +function _createContainerToAppSocket(appConfig, appManifest) { + var appRoot = jQuery(appConfig.root); + + if (!appRoot) { + F2.log('Unable to locate app in order to establish secure connection.'); + return; + } - if (!container.length) { - F2.log('Unable to locate app in order to establish secure connection.'); - return; + var iframeProps = { + scrolling: 'no', + style: { + width: '100%' } + }; - var iframeProps = { - scrolling: 'no', - style: { - width: '100%' - } - }; + if (appConfig.height) { + iframeProps.style.height = appConfig.height + 'px'; + } - if (appConfig.height) { - iframeProps.style.height = appConfig.height + 'px'; + var socket = new easyXDM.Socket({ + remote: _secureAppPagePath, + container: appRoot(0), + props: iframeProps, + onMessage: function(message, origin) { + _onMessage(appConfig, message, origin); + }, + onReady: function() { + socket.postMessage(constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); } + }); - var socket = new easyXDM.Socket({ - remote: _secureAppPagePath, - container: container.get(0), - props: iframeProps, - onMessage: function(message, origin) { - _onMessage(appConfig, message, origin); - }, - onReady: function() { - socket.postMessage(F2.Constants.Sockets.LOAD + F2.stringify([appConfig, appManifest], F2.appConfigReplacer)); - } - }); - - return socket; - } + return socket; +} - /** - @method _createRpcCallback - @private - @param {string} instanceId The app's Instance ID - @param {function} callbackId The callback ID - @return {function} A function to make the RPC call - */ - function _createRpcCallback(instanceId, callbackId) { - return function() { - F2.Rpc.call( - instanceId, - F2.Constants.Sockets.RPC_CALLBACK, - callbackId, - [].slice.call(arguments).slice(2) - ); - }; - } +/** + @method _createRpcCallback + @private + @param {string} instanceId The app's Instance ID + @param {function} callbackId The callback ID + @return {function} A function to make the RPC call +*/ +function _createRpcCallback(instanceId, callbackId) { + return function() { + rpc.call( + instanceId, + constants.Sockets.RPC_CALLBACK, + callbackId, + [].slice.call(arguments).slice(2) + ); + }; +} - /** - Handles messages that come across the sockets - @method _onMessage - @private - @param {F2.AppConfig} appConfig The F2.AppConfig object - @param {string} message The socket message - @param {string} origin The originator - */ - function _onMessage(appConfig, message, origin) { - var obj; - var func; - - function parseFunction(parent, functionName) { - var path = String(functionName).split('.'); - for (var i = 0; i < path.length; i++) { - if (parent[path[i]] === undefined) { - parent = undefined; - break; - } - parent = parent[path[i]]; +/** + Handles messages that come across the sockets + @method _onMessage + @private + @param {F2.AppConfig} appConfig The F2.AppConfig object + @param {string} message The socket message + @param {string} origin The originator +*/ +function _onMessage(appConfig, message, origin) { + var obj; + var func; + + function parseFunction(parent, functionName) { + var path = String(functionName).split('.'); + for (var i = 0; i < path.length; i++) { + if (parent[path[i]] === undefined) { + parent = undefined; + break; } - return parent; + parent = parent[path[i]]; } + return parent; + } - function parseMessage(regEx, rawMessage, instanceId) { - var o = F2.parse(rawMessage.replace(regEx, '')); - - // if obj.callbacks - // for each callback - // for each params - // if callback matches param - // replace param with _createRpcCallback(app.instanceId, callback) - if (o.params && o.params.length && o.callbacks && o.callbacks.length) { - jQuery.each(o.callbacks, function(i, c) { - jQuery.each(o.params, function(j, p) { - if (c === p) { - o.params[j] = _createRpcCallback(instanceId, c); - } - }); + function parseMessage(regEx, rawMessage, instanceId) { + var o = F2.parse(rawMessage.replace(regEx, '')); + + // if obj.callbacks + // for each callback + // for each params + // if callback matches param + // replace param with _createRpcCallback(app.instanceId, callback) + if (o.params && o.params.length && o.callbacks && o.callbacks.length) { + jQuery.each(o.callbacks, function(i, c) { + jQuery.each(o.params, function(j, p) { + if (c === p) { + o.params[j] = _createRpcCallback(instanceId, c); + } }); - } - - return o; + }); } - // Handle UI Call - if (_rUiCall.test(message)) { - obj = parseMessage(_rUiCall, message, appConfig.instanceId); - func = parseFunction(appConfig.ui, obj.functionName); + return o; + } - if (func !== undefined) { - func.apply(appConfig.ui, obj.params); - } else { - F2.log('Unable to locate UI RPC function: ' + obj.functionName); - } - } else if (_rRpc.test(message)) { - obj = parseMessage(_rRpc, message, appConfig.instanceId); - func = parseFunction(window, obj.functionName); + // Handle UI Call + if (_rUiCall.test(message)) { + obj = parseMessage(_rUiCall, message, appConfig.instanceId); + func = parseFunction(appConfig.ui, obj.functionName); - if (func !== undefined) { - func.apply(func, obj.params); - } else { - F2.log('Unable to locate RPC function: ' + obj.functionName); - } - } else if (_rRpcCallback.test(message)) { - obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); + if (func !== undefined) { + func.apply(appConfig.ui, obj.params); + } else { + F2.log('Unable to locate UI RPC function: ' + obj.functionName); + } + } else if (_rRpc.test(message)) { + obj = parseMessage(_rRpc, message, appConfig.instanceId); + func = parseFunction(window, obj.functionName); + + if (func !== undefined) { + func.apply(func, obj.params); + } else { + F2.log('Unable to locate RPC function: ' + obj.functionName); + } + } else if (_rRpcCallback.test(message)) { + obj = parseMessage(_rRpcCallback, message, appConfig.instanceId); - if (_callbacks[obj.functionName] !== undefined) { - _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); - delete _callbacks[obj.functionName]; - } - } else if (_rEvents.test(message)) { - obj = parseMessage(_rEvents, message, appConfig.instanceId); - F2.Events._socketEmit.apply(F2.Events, obj); + if (_callbacks[obj.functionName] !== undefined) { + _callbacks[obj.functionName].apply(_callbacks[obj.functionName], obj.params); + delete _callbacks[obj.functionName]; } + } else if (_rEvents.test(message)) { + obj = parseMessage(_rEvents, message, appConfig.instanceId); + events._socketEmit.apply(events, obj); } +} + +/** + Registers a callback function + @method _registerCallback + @private + @param {function} callback The callback function + @return {string} The callback ID +*/ +function _registerCallback(callback) { + var callbackId = F2.guid(); + _callbacks[callbackId] = callback; + return callbackId; +} +/** + Handles socket communication between the container and secure apps + @class F2.Rpc +*/ +module.exports = { /** - Registers a callback function - @method _registerCallback - @private - @param {function} callback The callback function - @return {string} The callback ID + Broadcast an RPC function to all sockets + @method broadcast + @param {string} messageType The message type + @param {Array} params The parameters to broadcast */ - function _registerCallback(callback) { - var callbackId = F2.guid(); - _callbacks[callbackId] = callback; - return callbackId; - } + broadcast: function(messageType, params) { + var message = messageType + F2.stringify(params); - return { - /** - Broadcast an RPC function to all sockets - @method broadcast - @param {string} messageType The message type - @param {Array} params The parameters to broadcast - */ - broadcast: function(messageType, params) { - var message = messageType + F2.stringify(params); - - jQuery.each(_apps, function(i, a) { - a.socket.postMessage(message); - }); - }, - /** - Calls a remote function - @method call - @param {string} instanceId The app's Instance ID - @param {string} messageType The message type - @param {string} functionName The name of the remote function - @param {Array} params An array of parameters to pass to the remote - function. Any functions found within the params will be treated as a - callback function. - */ - call: function(instanceId, messageType, functionName, params) { - // Loop through params and find functions and convert them to callbacks - var callbacks = []; - - jQuery.each(params, function(i, e) { - if (typeof e === 'function') { - var cid = _registerCallback(e); - params[i] = cid; - callbacks.push(cid); - } - }); + jQuery.each(_apps, function(i, a) { + a.socket.postMessage(message); + }); + }, + /** + Calls a remote function + @method call + @param {string} instanceId The app's Instance ID + @param {string} messageType The message type + @param {string} functionName The name of the remote function + @param {Array} params An array of parameters to pass to the remote + function. Any functions found within the params will be treated as a + callback function. + */ + call: function(instanceId, messageType, functionName, params) { + // Loop through params and find functions and convert them to callbacks + var callbacks = []; + + jQuery.each(params, function(i, e) { + if (typeof e === 'function') { + var cid = _registerCallback(e); + params[i] = cid; + callbacks.push(cid); + } + }); - _apps[instanceId].socket.postMessage( - messageType + F2.stringify({ - functionName: functionName, - params: params, - callbacks: callbacks - }) - ); - }, + _apps[instanceId].socket.postMessage( + messageType + F2.stringify({ + functionName: functionName, + params: params, + callbacks: callbacks + }) + ); + }, - /** - Init function which tells F2.Rpc whether it is running at the container- - level or the app-level. This method is generally called by - F2.{{#crossLink "F2/init"}}{{/crossLink}} - @method init - @param {string} [secureAppPagePath] The - {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath - property - */ - init: function(secureAppPagePath) { - _secureAppPagePath = secureAppPagePath; - - if (!_secureAppPagePath) { - _createAppToContainerSocket(); - } - }, + /** + Init function which tells F2.Rpc whether it is running at the container- + level or the app-level. This method is generally called by + F2.{{#crossLink "F2/init"}}{{/crossLink}} + @method init + @param {string} [secureAppPagePath] The + {{#crossLink "F2.ContainerConfig"}}{{/crossLink}}.secureAppPagePath + property + */ + init: function(secureAppPagePath) { + _secureAppPagePath = secureAppPagePath; - /** - Determines whether the Instance ID is considered to be 'remote'. This is - determined by checking if 1) the app has an open socket and 2) whether - F2.Rpc is running inside of an iframe - @method isRemote - @param {string} instanceId The Instance ID - @return {bool} True if there is an open socket - */ - isRemote: function(instanceId) { - return ( - _apps[instanceId] !== undefined && - _apps[instanceId].config.isSecure && - !jQuery(_apps[instanceId].config.root).find('iframe').length - ); - }, + if (!_secureAppPagePath) { + _createAppToContainerSocket(); + } + }, - /** - Creates a container-to-app or app-to-container socket for communication - @method register - @param {F2.AppConfig} [appConfig] The F2.AppConfig object - @param {F2.AppManifest} [appManifest] The F2.AppManifest object - */ - register: function(appConfig, appManifest) { - if (appConfig && appManifest) { - _apps[appConfig.instanceId] = { - config: appConfig, - socket: _createContainerToAppSocket(appConfig, appManifest) - }; - } else { - F2.log('Unable to register socket connection. Please check container configuration.'); - } + /** + Determines whether the Instance ID is considered to be 'remote'. This is + determined by checking if 1) the app has an open socket and 2) whether + F2.Rpc is running inside of an iframe + @method isRemote + @param {string} instanceId The Instance ID + @return {bool} True if there is an open socket + */ + isRemote: function(instanceId) { + return ( + _apps[instanceId] !== undefined && + _apps[instanceId].config.isSecure && + !jQuery(_apps[instanceId].config.root).find('iframe').length + ); + }, + + /** + Creates a container-to-app or app-to-container socket for communication + @method register + @param {F2.AppConfig} [appConfig] The F2.AppConfig object + @param {F2.AppManifest} [appManifest] The F2.AppManifest object + */ + register: function(appConfig, appManifest) { + if (appConfig && appManifest) { + _apps[appConfig.instanceId] = { + config: appConfig, + socket: _createContainerToAppSocket(appConfig, appManifest) + }; + } else { + F2.log('Unable to register socket connection. Please check container configuration.'); } - }; -})()); + } +}; diff --git a/src/lib/template/footer.js.tmpl b/src/lib/template/footer.js.tmpl index d74f3681..64372922 100644 --- a/src/lib/template/footer.js.tmpl +++ b/src/lib/template/footer.js.tmpl @@ -1,42 +1 @@ - jQuery(function() { - var autoloadEls = [], - add = function(e) { - if (!e) { return; } - autoloadEls.push(e); - }, - addAll = function(els) { - if (!els) { return; } - for (var i = 0, len = els.length; i < len; i++) { - add(els[i]); - } - }; - - // support id-based autoload - add(document.getElementById('f2-autoload')); - - // support class/attribute based autoload - if (document.querySelectorAll) { - addAll(document.querySelectorAll('[data-f2-autoload]')); - addAll(document.querySelectorAll('.f2-autoload')); - } - - // if elements were found, auto-init F2 and load any placeholders - if (autoloadEls.length) { - F2.init(); - for (var i = 0, len = autoloadEls.length; i < len; i++) { - F2.loadPlaceholders(autoloadEls[i]); - } - } - }); - - exports.F2 = F2; - - if (typeof define !== 'undefined' && define.amd) { - - define(function() { - return F2; - }); - - } - })(typeof exports !== 'undefined' ? exports : window); diff --git a/src/lib/template/header.js.tmpl b/src/lib/template/header.js.tmpl index bc674e1f..0368cf43 100644 --- a/src/lib/template/header.js.tmpl +++ b/src/lib/template/header.js.tmpl @@ -28,6 +28,6 @@ */ ;(function(exports) { - if (exports.F2 && !exports.F2_TESTING_MODE) { - return; - } + if (exports.F2 && !exports.F2_TESTING_MODE) { + return; + } diff --git a/src/lib/ui.js b/src/lib/ui.js index dbcc6338..d707a736 100644 --- a/src/lib/ui.js +++ b/src/lib/ui.js @@ -1,402 +1,405 @@ -/* global F2, jQuery, EventEmitter2 */ +/* global jQuery, EventEmitter2 */ -F2.extend('UI', (function() { +var classes = require('./classes'); +var constants = require('./constants'); +var F2 = require('./F2'); +var rpc = require('./rpc'); +var ui = require('./ui'); - var _containerConfig; +var _containerConfig; - /** - UI helper methods - @class F2.UI - @constructor - @param {F2.AppConfig} appConfig The F2.AppConfig object - */ - function UIClass(appConfig) { - var _appConfig = appConfig; - var $root = jQuery(appConfig.root); +/** + UI helper methods + @class F2.UI + @constructor + @param {F2.AppConfig} appConfig The F2.AppConfig object +*/ +function UIClass(appConfig) { + var _appConfig = appConfig; + var $root = jQuery(appConfig.root); - function _updateHeight(height) { - height = height || jQuery(_appConfig.root).outerHeight(); + function _updateHeight(height) { + height = height || jQuery(_appConfig.root).outerHeight(); - if (F2.Rpc.isRemote(_appConfig.instanceId)) { - F2.Rpc.call( - _appConfig.instanceId, - F2.Constants.Sockets.UI_RPC, - 'updateHeight', - [ - height - ] - ); - } else { - _appConfig.height = height; - $root.find('iframe').height(_appConfig.height); - } + if (rpc.isRemote(_appConfig.instanceId)) { + rpc.call( + _appConfig.instanceId, + constants.Sockets.UI_RPC, + 'updateHeight', + [ + height + ] + ); + } else { + _appConfig.height = height; + $root.find('iframe').height(_appConfig.height); } + } - // http://getbootstrap.com/javascript/#modals - function _modalHtml(type, message, showCancel) { - return [ - '