From a79fb617ac65c99349d1cacb1dbf35c9b1dc28b0 Mon Sep 17 00:00:00 2001 From: Anton Ignatov Date: Mon, 23 Jun 2014 09:20:47 +0400 Subject: [PATCH] Releasing version 0.5.0 --- build/plugins/require-preprocess-css.min.js | 1 + build/requirejs-sandbox.js | 432 ++++++++++++++++++-- build/requirejs-sandbox.min.js | 4 +- package.json | 4 +- 4 files changed, 398 insertions(+), 43 deletions(-) create mode 100644 build/plugins/require-preprocess-css.min.js diff --git a/build/plugins/require-preprocess-css.min.js b/build/plugins/require-preprocess-css.min.js new file mode 100644 index 0000000..705b06b --- /dev/null +++ b/build/plugins/require-preprocess-css.min.js @@ -0,0 +1 @@ +define("requirejs-preprocess-css",["requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/preprocess/abstract","requirejs-sandbox/helpers/processor/core","requirejs-sandbox/helpers/processor/prefix"],function(a,b,c,d){function e(a){return a&&(a.parentNode&&f(a),document.getElementsByTagName("head")[0].appendChild(a)),a}function f(a){return a&&a.parentNode&&"function"==typeof a.parentNode.removeChild&&a.parentNode.removeChild(a),a}console.debug("Creating plugin for loading css with code preprocessing");var g=new c,h=a.extend({},b,{Processor:g});return g.extend(d,{resolve:function(a){var b=this._responseSourceCache[this.id],c=document.createElement("style");c.media="all",c.type="text/css",null!=c.styleSheet&&null!=c.styleSheet.cssText?c.styleSheet.cssText=b:c.appendChild(document.createTextNode(b)),e(c),"function"==typeof a&&a({cssNode:c,append:function(){return e(this.cssNode)},remove:function(){return f(this.cssNode)}})}}),{name:"preprocess-css",handler:function(){return{load:function(a,b,c){var d;console.debug("Received css load exec for",a),h.checkXMLHttpRequestSupport()?(d=h.createAjaxLoader(a,b,c,".css"),d.load()):require(["css!"+a],function(){c({status:2})})}}}}}),require(["requirejs-preprocess-css"],function(a){define(a.name,a.handler)}); \ No newline at end of file diff --git a/build/requirejs-sandbox.js b/build/requirejs-sandbox.js index 329e506..711fe01 100644 --- a/build/requirejs-sandbox.js +++ b/build/requirejs-sandbox.js @@ -1,5 +1,5 @@ /** - * requirejs-sandbox - v0.4.2-89 (build date: 18/06/2014) + * requirejs-sandbox - v0.5.0-9 (build date: 23/06/2014) * https://github.com/a-ignatov-parc/requirejs-sandbox * Sandbox manager for require.js allows user to run multiple apps without scope intersection issues * Copyright (c) 2014 Anton Ignatov @@ -92,7 +92,8 @@ define('requirejs-sandbox/helpers/utils',function() { hasOwnProperty = ObjProto.hasOwnProperty, nativeForEach = ArrayProto.forEach, slice = ArrayProto.slice, - breaker = {}; + breaker = {}, + link = document.createElement('a'); return { // Метод `has` позаимствованный из `underscore.js` @@ -163,40 +164,22 @@ define('requirejs-sandbox/helpers/utils',function() { scripts: function() { return Array.prototype.slice.call(document.getElementsByTagName('script'), 0); - } - }; -}); - -define('requirejs-sandbox/helpers/patch',['requirejs-sandbox/logger/logger','requirejs-sandbox/helpers/utils'],function(console, utils) { - var defaults = { - _options: {}, - - name: 'default', - - shimName: 'default', - - // Метод инициализации патча. - enable: function() { - console.warn('Method is not implemented'); - }, - - disable: function() { - console.warn('Method is not implemented'); - }, - - setOptions: function(options) { - var Wrapper = function(options) { - this._options = utils.extend({}, this._options, options); - }; - - Wrapper.prototype = this; - return new Wrapper(options); - } - }; + }, - return { - init: function(obj) { - return utils.defaults(obj || {}, defaults); + urlToLocation: function(url) { + link.href = url; + + return { + href: link.href, + host: link.host, + port: link.port, + hash: link.hash, + origin: link.origin, + search: link.search, + protocol: link.protocol, + hostname: link.hostname, + pathname: link.pathname + }; } }; }); @@ -352,7 +335,7 @@ define('requirejs-sandbox/helpers/resolvers/iframeResolver',['requirejs-sandbox/ this._state = this.STATE_RESOLVING; if (!sandboxContructor) { - sandboxContructor = window.require('requirejs-sandbox')._getSandboxConstructor(); + sandboxContructor = window.require('requirejs-sandbox')._getSandboxInternalInterface(); } // Создаем песочницу для поиска require.js среди скриптов загруженных на @@ -517,7 +500,296 @@ define('requirejs-sandbox/helpers/require',['requirejs-sandbox/logger/logger','r }; }); -define('requirejs-sandbox',['requirejs-sandbox/logger/logger','requirejs-sandbox/helpers/utils','requirejs-sandbox/helpers/patch','requirejs-sandbox/helpers/require'],function(console, utils, patchAbstract, requireResolver) { +define('requirejs-sandbox/helpers/preprocess/abstract',['requirejs-sandbox/logger/logger'],function(console) { + return { + Processor: null, + + loadHandler: function(name, onload) { + var Processor = this.Processor; + + return function() { + switch(this.status) { + case 0: // Successful HTTP status in PhantomJS + case 200: + case 302: + console.debug('File received correctly', name); + onload(new Processor(true, this.response)); + break; + case 404: + console.debug('File was not found', name); + onload(new Processor(3)); + break; + default: + console.debug('Received unhandled status', name, this.status); + onload(new Processor(4)); + } + }; + }, + + errorHandler: function(name, onload) { + var Processor = this.Processor; + + return function() { + console.debug('Something goes wrong', name, this.status); + onload(new Processor(5)); + }; + }, + + checkXMLHttpRequestSupport: function() { + return typeof(XMLHttpRequest) === 'function' || typeof(XMLHttpRequest) === 'object'; + }, + + createAjaxLoader: function(name, req, onload, extension) { + var request = new XMLHttpRequest(); + + request.open('GET', req.toUrl(name) + (extension || '.js'), true); + request.onload = this.loadHandler(name, onload); + request.onerror = this.errorHandler(name, onload); + return { + load: function() { + request.send(); + } + }; + }, + + createDefaultLoader: function(name, req, onload) { + var Processor = this.Processor; + + return { + load: function() { + req([name], function() { + onload(new Processor(2)); + }); + } + }; + } + }; +}); + +define('requirejs-sandbox/helpers/processor/core',['requirejs-sandbox/logger/logger','requirejs-sandbox/helpers/utils'],function(console, utils) { + var sourceCache = [], + moduleCheckRegex = /^\s*define\((['"][^'"]+['"])?,?\s*(?:\[([^\]]+)\])?,?\s*(function[^]+)\);*\s*$/, + moduleTrimRegex = /['"]*\s*/g; + + return function(context) { + var target = context || window, + Processor = function(success, sourceCode) { + // Указываем уникальный `id` препроцессора. + this.id = this._responseSourceCache.push(sourceCode || '') - 1; + + // Записываем ссылку на `target`, на случай если он кому-то из миксинов может + // понадобиться. + this.target = target; + + // Определяем текущий статус препроцессора. + // Список возможных статусов: + // + // * `0` – Препроцессор создан успешно и загруженный ресурс может быть + // правильно обрабатан. + // + // * `1` – Препроцессор создан успешно, но запрашиваемый ресурс не удалось + // загрузить. + // + // * `2` – Браузер не поддерживает XMLHttpRequest с поддержкой CORS, + // а следовательно загрузка файла производилась в режиме фоллбека + // и препроцессинг файла не доступен. + // + // * `3` – Запрашиваемый файл небыл найден. + // + // * `4` – Запрашиваемый файл был загружен с необрабатываемым HTTP статусом. + // + // * `5` – При загрузке запрашиваемого файла произошла ошибка. + // + // * `6` – Неизвестный статус. + if (typeof(success) === 'boolean' || success === 1 || success === 0 || success === '1' || success === '0') { + if (typeof(success) === 'boolean') { + this.status = +!success; + } else { + this.status = +success; + } + console.debug('Creating extended resource api with status: ' + this.status); + } else { + console.debug('Creating simple response with status: ' + success); + return { + id: this.id, + status: success || 6 + }; + } + }; + + Processor.extend = function() { + for (var i = 0, length = arguments.length; i < length; i++) { + utils.extend(Processor.prototype, arguments[i]); + } + }; + + Processor.prototype = { + _responseSourceCache: sourceCache, + + replace: function(pattern, replace) { + console.debug('[replace] Executing replace with pattern: "' + pattern + '" and replace: "' + replace + '"'); + + this._responseSourceCache[this.id] = this._responseSourceCache[this.id].replace(pattern, replace); + + console.debug('[replace] Executing result: ' + this._responseSourceCache[this.id]); + + return this; + }, + + resolve: function(callback) { + var sourceCode = this._responseSourceCache[this.id], + moduleParts = moduleCheckRegex.exec(sourceCode), + resolvingResult, + moduleResolver, + evaledCode, + name, + deps; + + console.debug('Execution context', target); + + if (moduleParts) { + if (moduleParts[1]) { + name = moduleParts[1].replace(moduleTrimRegex, ''); + } + + if (moduleParts[2]) { + deps = moduleParts[2] + .replace(moduleTrimRegex, '') + .split(','); + } else { + deps = []; + } + + console.debug('module name: "' + name + '"'); + console.debug('module deps: [' + deps.join(', ') + ']'); + console.debug('module handler: "' + moduleParts[3] + '"'); + + evaledCode = new target.Function('return ' + moduleParts[3]); + + try { + moduleResolver = evaledCode(); + } catch(e) { + console.error(e); + } + + if (name) { + target.define(name, deps, function() { + try { + resolvingResult = moduleResolver.apply(this, arguments); + } catch(e) { + console.error(e); + } + return resolvingResult; + }); + + target.require([name], function(moduleResult) { + if (typeof(callback) === 'function') { + callback(moduleResult); + } + }); + } else if (deps.length) { + target.require(deps, function() { + try { + resolvingResult = moduleResolver.apply(this, arguments); + } catch(e) { + console.error(e); + } + + if (typeof(callback) === 'function') { + callback(resolvingResult); + } + }); + } else { + try { + resolvingResult = moduleResolver(); + } catch(e) { + console.error(e); + } + + if (typeof(callback) === 'function') { + callback(resolvingResult); + } + } + } else { + var scriptNode = target.document.createElement('script'); + + scriptNode.type = 'text/javascript'; + scriptNode.text = sourceCode; + target.document.getElementsByTagName('head')[0].appendChild(scriptNode); + + if (typeof(callback) === 'function') { + callback(); + } + } + return this; + } + }; + return Processor; + }; +}); + +define('requirejs-sandbox/helpers/processor/autofix',['requirejs-sandbox/logger/logger'],function(console) { + return { + autoFix: function(customPropList) { + var propertyList = [ + 'location', + 'document' + ].concat(customPropList || []), + processedProps = {}; + + for (var i = 0, length = propertyList.length; i < length; i++) { + var targetProp = propertyList[i] + .split('.') + .pop(), + prop = '__window_' + targetProp.toLowerCase(); + + if (!processedProps[propertyList[i]]) { + processedProps[propertyList[i]] = true; + this.target[prop] = this.target.sandboxApi && this.target.sandboxApi.parentWindow[targetProp] || this.target[targetProp]; + this._responseSourceCache[this.id] = this._responseSourceCache[this.id].replace(new RegExp('(\\W)' + targetProp + '(\\W)', 'g'), '$1' + prop + '$2'); + } + } + console.debug('[autoFix] Executing result: ' + this._responseSourceCache[this.id]); + return this; + } + }; +}); + +define('requirejs-sandbox/helpers/preprocess/plugin',['requirejs-sandbox/logger/logger','requirejs-sandbox/helpers/utils','requirejs-sandbox/helpers/preprocess/abstract','requirejs-sandbox/helpers/processor/core','requirejs-sandbox/helpers/processor/autofix'],function(console, utils, preprocessAbstract, ProcessorCore, autofixMixin) { + console.debug('Creating plugin for loading and preprocessing resources'); + + return function(context) { + var ProcessorConstructor = new ProcessorCore(context), + module = utils.extend({}, preprocessAbstract, { + Processor: ProcessorConstructor + }); + + // Расширяем базовый функционал миксинами. + ProcessorConstructor.extend(autofixMixin); + + return { + name: 'preprocess', + handler: function() { + return { + load: function(name, req, onload) { + var loader; + + console.debug('Received resource load exec for', name); + + if (module.checkXMLHttpRequestSupport()) { + loader = module.createAjaxLoader(name, req, onload); + } else { + loader = module.createDefaultLoader(name, req, onload); + } + loader.load(); + } + }; + } + }; + }; +}); + +define('requirejs-sandbox',['requirejs-sandbox/logger/logger','requirejs-sandbox/helpers/utils','requirejs-sandbox/helpers/require','requirejs-sandbox/helpers/preprocess/plugin'],function(console, utils, requireResolver, PreprocessPlugin) { var createdSandboxes = {}, Sandbox = function(options) { // Создаем объект параметром на основе дефолтных значений и значений переданных при @@ -767,7 +1039,8 @@ define('requirejs-sandbox',['requirejs-sandbox/logger/logger','requirejs-sandbox success(); } }, - unresolvedPatchesCount = 0; + unresolvedPatchesCount = 0, + preprocessPlugin; // Создаем ссылку на `require.js` в api песочницы для дальнейшей работы с ним this.api.require = this.sandbox.sandboxApi.require = sandbox.require; @@ -827,6 +1100,14 @@ define('requirejs-sandbox',['requirejs-sandbox/logger/logger','requirejs-sandbox return sandbox; }); + console.debug('Creating "preprocess" plugin for sandbox require.js'); + + // Создаем инстанс плагина, с переданным контекстом. + preprocessPlugin = new PreprocessPlugin(sandbox); + + // Регистрируем плагин загрузки и препроцессинга ресурсов. + this.api.define(preprocessPlugin.name, preprocessPlugin.handler); + console.debug('Creating handler for amd modules load'); // Для того чтоб пропатчить модули до того как они будут зарезолвлены @@ -894,7 +1175,7 @@ define('requirejs-sandbox',['requirejs-sandbox/logger/logger','requirejs-sandbox console.setNamespace('requirejs-sandbox'); return { - _getSandboxConstructor: function() { + _getSandboxInternalInterface: function() { return Sandbox.prototype; }, @@ -933,3 +1214,76 @@ define('requirejs-sandbox',['requirejs-sandbox/logger/logger','requirejs-sandbox }; }); +define('requirejs-sandbox/helpers/patch',['requirejs-sandbox/logger/logger','requirejs-sandbox/helpers/utils'],function(console, utils) { + var defaults = { + _options: {}, + + name: 'default', + + shimName: 'default', + + // Метод инициализации патча. + enable: function() { + console.warn('Method is not implemented'); + }, + + disable: function() { + console.warn('Method is not implemented'); + }, + + setOptions: function(options) { + var Wrapper = function(options) { + this._options = utils.extend({}, this._options, options); + }; + + Wrapper.prototype = this; + return new Wrapper(options); + } + }; + + return { + init: function(obj) { + return utils.defaults(obj || {}, defaults); + } + }; +}); + +define('requirejs-sandbox/helpers/processor/prefix',['requirejs-sandbox/logger/logger'],function(console) { + // Регулярное выражение для поиска селекторов и разбивание на группы для последующего + // проставления префикса. + var selectorsRegex = /(^\s*|}\s*|\s*)([@*.#\w\d\s-:\[\]\(\)="']+)(,|{[^}]+})/g, + commentsRegex = /\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/g; // http://ostermiller.org/findcomment.html + + return { + prefix: function(selector) { + var prefixRegex = new RegExp(selector + '\\s', 'g'); + + // Так как префикс проставляется абсолютно всему у чего имеется следующая + // кострукция `aaa[, bbb] {}` для полного и правильного проставления префиксов + // операция разбивается на несколько шагов: + // + // 1. Удаляем коментарии из исходного кода. Для работы стилей это не важно, но сильно + // поможет избежать проблем с неправильным срабатыванием префиксера. + // 2. Проставляем префиксы. + // 3. Обрабатываем кейс, когда у at-селекторов не может быть никаких префиксов. + // Более подробно об этом описано тут: https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face + // 4. Обрабатываем кейс, когда первая регулярка могла заменить путь + // в конструкции `url()` востанавливая его в первоначальное значение. + // 5. Так как считается что элемент с префикс-селектором у нас будет корневым + // элементом, то все селекторы на html и body заменяем на селектор префикса. + this._responseSourceCache[this.id] = this._responseSourceCache[this.id] + .replace(commentsRegex, '') + .replace(selectorsRegex, '$1' + selector + ' $2$3') + .replace(new RegExp(selector + '\\s(@(charset|document|font-face|import|keyframes|media|page|supports))', 'g'), '$1') + .replace(/url\([^)]+\)/g, function(match) { + return match.replace(prefixRegex, ''); + }) + .replace(new RegExp('(' + selector + ')\\s(html|body)', 'g'), '$1'); + + console.debug('[prefix] Executing result for selector "' + selector + '": ', this._responseSourceCache[this.id]); + + return this; + } + }; +}); + diff --git a/build/requirejs-sandbox.min.js b/build/requirejs-sandbox.min.js index a43c8d1..9567811 100644 --- a/build/requirejs-sandbox.min.js +++ b/build/requirejs-sandbox.min.js @@ -1,8 +1,8 @@ /** - * requirejs-sandbox - v0.4.2-89 (build date: 18/06/2014) + * requirejs-sandbox - v0.5.0-9 (build date: 23/06/2014) * https://github.com/a-ignatov-parc/requirejs-sandbox * Sandbox manager for require.js allows user to run multiple apps without scope intersection issues * Copyright (c) 2014 Anton Ignatov * Licensed MIT */ -define("requirejs-sandbox/logger/logger",function(){var e="logger";return{setLogLevel:function(){},setNamespace:function(t){e=t},log:function(){},debug:function(){},info:function(){},warn:function(){var t=Array.prototype.slice.call(arguments);t.unshift(e),console.warn.apply(this,arguments)},error:function(){var t=Array.prototype.slice.call(arguments);t.unshift(e),console.error.apply(this,arguments)},off:function(){}}}),define("requirejs-sandbox/helpers/utils",function(){var e=Array.prototype,t=Object.prototype,r=t.hasOwnProperty,n=e.forEach,i=e.slice,s={};return{has:function(e,t){return r.call(e,t)},each:function(e,t,r){if(null!=e)if(n&&e.forEach===n)e.forEach(t,r);else if(e.length===+e.length){for(var i=0,o=e.length;o>i;i++)if(t.call(r,e[i],i,e)===s)return}else for(var a in e)if(this.has(e,a)&&t.call(r,e[a],a,e)===s)return},extend:function(e){return this.each(i.call(arguments,1),function(t){if(t)for(var r in t)e[r]=t[r]}),e},bind:function(e,t){return t||(t=window),"function"==typeof e?function(){return e.apply(t,arguments)}:e},defaults:function(e){return this.each(i.call(arguments,1),function(t){if(t)for(var r in t)void 0===e[r]&&(e[r]=t[r])}),e},scripts:function(){return Array.prototype.slice.call(document.getElementsByTagName("script"),0)}}}),define("requirejs-sandbox/helpers/patch",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils"],function(e,t){var r={_options:{},name:"default",shimName:"default",enable:function(){e.warn("Method is not implemented")},disable:function(){e.warn("Method is not implemented")},setOptions:function(e){var r=function(e){this._options=t.extend({},this._options,e)};return r.prototype=this,new r(e)}};return{init:function(e){return t.defaults(e||{},r)}}}),define("requirejs-sandbox/helpers/resolvers/abstract",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils"],function(e,t){var r={STATE_IDLE:"idle",STATE_RESOLVING:"resolving",STATE_RESOLVED:"resolved",_state:null,_resolvedUrl:!1,_onSuccess:function(){e.warn("No success handler defined for "+this.id+" resolver! Use _setHandlers() method to do this.")},_onFail:function(){e.warn("No fail handler defined for "+this.id+" resolver! Use _setHandlers() method to do this.")},_setHandlers:function(e,t){"function"==typeof e&&(this._onSuccess=e),"function"==typeof t&&(this._onFail=t)},_hanldleResolver:function(){switch(this.state()){case this.STATE_RESOLVED:return e.debug(this.id+" resolver: resolved",this._resolvedUrl),this._onSuccess(this._resolvedUrl),this._resolvedUrl;case this.STATE_IDLE:return e.debug(this.id+" resolver: failed to resolve"),void this._onFail();default:return}},_getScripts:function(){return t.scripts()},state:function(){return this._state},resolve:function(){e.error("Not implemented!")},reset:function(){return this._state=this.STATE_IDLE,this}};return r.reset()}),define("requirejs-sandbox/helpers/resolvers/optionsResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,t,r){return t.defaults({id:"options",resolve:function(t,r,n){return this.state()==this.STATE_IDLE&&(this._setHandlers(t,r),e.debug(this.id+" resolver: starting resolving"),n&&"string"==typeof n.requireUrl&&(this._resolvedUrl=n.requireUrl,this._state=this.STATE_RESOLVED)),this._hanldleResolver()}},r)}),define("requirejs-sandbox/helpers/resolvers/scriptResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,t,r){var n=/require(?:[.-]min)?.js$/;return t.defaults({id:"script",_checkUrl:function(e){return n.test(e)},resolve:function(r,n){return this.state()==this.STATE_IDLE&&(this._setHandlers(r,n),e.debug(this.id+" resolver: starting resolving"),t.each(this._getScripts(),t.bind(function(e){return this._checkUrl(e.getAttribute("src"))?(this._resolvedUrl=e.getAttribute("src"),this._state=this.STATE_RESOLVED,!0):void 0},this))),this._hanldleResolver()}},r)}),define("requirejs-sandbox/helpers/resolvers/iframeResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,t,r){function n(e,t,r,i){e.length?r(t,e.shift().getAttribute("src"),function(s){"function"==typeof t.require&&"function"==typeof t.requirejs&&"function"==typeof t.define?i(s.getAttribute("src")):n(e,t,r,i)},function(){n(e,t,r,i)}):i(!1)}var i;return t.defaults({id:"iframe",resolve:function(r,s){var o;if(this.state()==this.STATE_IDLE)this._setHandlers(r,s),o=this._getScripts(),e.debug(this.id+" resolver: starting resolving"),o.length&&(this._state=this.STATE_RESOLVING,i||(i=window.require("requirejs-sandbox")._getSandboxConstructor()),i.createFrame(null,t.bind(function(e){var r=e.contentWindow;r.onerror=function(){},n(o,r,i.createScript,t.bind(function(t){t?(this._resolvedUrl=t,this._state=this.STATE_RESOLVED):this._state=this.STATE_IDLE,e.parentNode.removeChild(e),e=r=o=null,this._hanldleResolver()},this))},this)));else if(this.state()==this.STATE_RESOLVED)return this._resolvedUrl}},r)}),define("requirejs-sandbox/helpers/resolvers/cdnResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,t,r){return t.defaults({id:"cdn",_resolvedUrl:"//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.9/require.min.js",resolve:function(t){return this.state()==this.STATE_IDLE&&(this._setHandlers(t),e.debug(this.id+" resolver: starting resolving"),this._state=this.STATE_RESOLVED),this._hanldleResolver()}},r)}),define("requirejs-sandbox/helpers/require",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/optionsResolver","requirejs-sandbox/helpers/resolvers/scriptResolver","requirejs-sandbox/helpers/resolvers/iframeResolver","requirejs-sandbox/helpers/resolvers/cdnResolver"],function(e,t,r,n,i,s){function o(e){t.each(h,function(t){"function"==typeof t[0]?t[0](e):a("No fail handler",t[1]||!1)}),c=!1,h.length=l=0}function a(e,r){if(null!=r){if("function"!=typeof r)throw e;r(e)}else t.each(h,function(t){a(e,t[1]||!1)}),c=!1,h.length=l=0}var u=!1,l=0,d=[r,n,i,s],h=[],c=!1;return{id:"main",resolved:function(){return!!u},reset:function(){u=!1,t.each(d,function(e){e.reset()})},resolve:function(){var t,r=this;if(arguments.length)h.push(t=arguments);else{if(!h.length)return void e.error("No handlers passed");t=h[0]}if(!c||!arguments.length)return c=!0,this.resolved()?(e.debug(this.id+" resolver: already resolved as",u),o(u),u):void(null!=d[l]?(e.debug(this.id+' resolver: starting "'+d[l].id+'" resolver'),d[l].resolve(function(e){o(u=e)},function(){l++,r.resolve()},t[2])):(e.debug(this.id+" resolver: all resolvers failed"),a("Unable to resolve require.js source url")))}}}),define("requirejs-sandbox",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/patch","requirejs-sandbox/helpers/require"],function(e,t,r,n){var i={},s=function(r){return this.options=t.defaults(r,{debug:!1,requireUrl:null,requireMain:null,requireConfig:{},sandboxLinks:{},patch:[],plugins:[],success:function(){},error:function(){}}),this.iframe=null,this.sandbox=null,this.requireUrl=null,this.api={name:this.options.name,require:null,define:null,status:-1,destroy:t.bind(function(){this.sandbox=null,this.iframe.parentNode.removeChild(this.iframe),this.iframe=null;for(var e in this.api)this.api.hasOwnProperty(e)&&delete this.api[e]},this)},this.createSandbox(function(r){e.debug('Sandbox with name "'+this.options.name+'" is created!',r,r.document.body);for(var i in this.options.sandboxLinks)this.options.sandboxLinks.hasOwnProperty(i)&&(r[i]=this.options.sandboxLinks[i]);this.sandbox.sandboxApi=t.extend({},this.api,{parentWindow:window}),n.resolve(t.bind(function(e){this.requireUrl=e,this.createLoader(r)},this),t.bind(function(t){this.api.status=this.sandbox.sandboxApi.status=1,this.options.error.call(this.api),e.error(t)},this),this.options)}),this.api};return s.prototype={createSandbox:function(e){this.createFrame(null,t.bind(function(t){this.iframe=t,this.sandbox=this.iframe.contentWindow,this.createScript(this.sandbox),"function"==typeof e&&e.call(this,this.sandbox)},this))},createFrame:function(t,r){var n=document.createElement("iframe"),i=function(){return"complete"===document.readyState?(e.debug("DOM is ready. Appending iframe"),document.body.appendChild(n),!0):!1},s=function(){"function"==typeof r&&r(n)};n.style.display="none",n.src=t||"javascript:0",n.tabIndex=-1,n.addEventListener?n.addEventListener("load",s,!1):n.attachEvent?n.attachEvent("onload",s):n.onload=s,i()||(e.debug('DOM isn\'t ready. Subscribing to "onreadystatechange" event'),document.onreadystatechange=function(e){return function(){var t;return"function"==typeof e&&(t=e.apply(this,arguments)),i.apply(this,arguments),t}}(document.onreadystatechange))},createScript:function(e,t,r,n,i){var s,o,a=null,u=!1;if("function"==typeof r?(o=n,s=r,r=void 0):(s=n,o=i),e&&e.document&&e.document.body){if(a=e.document.createElement("script"),"object"==typeof r)for(var l in r)r.hasOwnProperty(l)&&null!=r[l]&&a.setAttribute("data-"+l,r[l]);switch(typeof t){case"string":if(t)a.src=t;else if("function"==typeof o)return void o(!1,e);break;case"object":case"undefined":return void("function"==typeof o&&o(!1,e))}"function"==typeof s&&(a.onload=a.onerror=a.onreadystatechange=function(t){u||(u=!0,a.onload=a.onerror=a.onreadystatechange=null,"load"===t.type||"loaded"===this.readyState||"complete"===this.readyState?s(a,e):"function"!=typeof o||"error"!==t.type&&"error"!==this.readyState||o(a,e))}),e.document.getElementsByTagName("head")[0].appendChild(a)}},createLoader:function(r){var i=function(r,i){var s=this.options.patch,o=function(t,r){r.enable(window,i,t),e.debug('Patch for module "'+r.name+'" applied correctly')},a=t.bind(function(){e.debug("Executing module callback"),this.options.success.call(this.api,this.api.require,this.api.define)},this),u=function(t){for(var r=0,n=s.length;n>r;r++)if("string"==typeof s[r]&&t.name===s[r]){s[r]=t,e.debug('Patch "'+t.name+'" is resolved.');break}--l||a()},l=0;if(this.api.require=this.sandbox.sandboxApi.require=i.require,this.api.define=this.sandbox.sandboxApi.define=i.define,this.api.status=this.sandbox.sandboxApi.status=0,this.options.debug&&(this.api.sandboxManager=this),"function"!=typeof this.api.require||"function"!=typeof this.api.define)return n.reset(),this.api.status=this.sandbox.sandboxApi.status=2,this.options.error.call(this.api),void e.error("Can not gain access to require.js inside sandbox");this.api.require.config(this.options.requireConfig);for(var d=0,h=this.options.plugins.length;h>d;d++){var c=this.options.plugins[d],f=""+c.name,p=!1;f||(e.error("Registered plugin has no name"),p=!0),"function"!=typeof c.handler&&(e.error("Registered plugin handler is not a function"),p=!0),e.debug("Successfuly registered plugin with name: "+f),p||this.api.define(f,c.handler)}for(e.debug("Creating predefined modules"),this.api.define("sandbox",function(){return i}),e.debug("Creating handler for amd modules load"),this.api.require.onResourceLoad=function(e,t){for(var r,n=e.defined[t.id],a=t.name,u=0,l=s.length;l>u;u++)r=s[u],r.name==a&&o(n||i[r.shimName],s[u])},e.debug("Checking for unresolved patches"),d=0,h=s.length;h>d;d++)if("string"==typeof s[d]){var g=["requirejs-sandbox","patches",s[d]].join("/");window.require.defined(g)?(e.debug('Patch "'+g+'" is resolved in parent page. Linking with patch list...'),s[d]=window.require(g)):(l++,e.debug('Patch "'+g+'" is unresolved. Resolving...'),window.require([g],u))}l||a()};this.createScript(r,this.requireUrl,{main:this.options.requireMain},t.bind(i,this),t.bind(function(){n.reset(),this.api.status=this.sandbox.sandboxApi.status=3,this.options.error.call(this.api),e.error("Can not load require.js into sandbox")},this)),e.debug("Creating loader inside specified target:",r)}},e.setLogLevel("debug"),e.setNamespace("requirejs-sandbox"),{_getSandboxConstructor:function(){return s.prototype},get:function(e){return i[e]},set:function(r,n){var o;return"string"==typeof r?(o=this.get(r),o&&o.status<=0?(e.warn("Sandbox with name: "+r+" already exist! Returning existed sandbox.",o),o):i[r]=new s(t.extend({},n,{name:r}))):void e.error("Sandbox name should be string")},destroy:function(t){var r=this.get(t);r?(r.destroy(),delete i[t]):e.warn('Sandbox with name: "'+t+'" was not found')}}}); \ No newline at end of file +define("requirejs-sandbox/logger/logger",function(){var e="logger";return{setLogLevel:function(){},setNamespace:function(r){e=r},log:function(){},debug:function(){},info:function(){},warn:function(){var r=Array.prototype.slice.call(arguments);r.unshift(e),console.warn.apply(this,arguments)},error:function(){var r=Array.prototype.slice.call(arguments);r.unshift(e),console.error.apply(this,arguments)},off:function(){}}}),define("requirejs-sandbox/helpers/utils",function(){var e=Array.prototype,r=Object.prototype,t=r.hasOwnProperty,n=e.forEach,s=e.slice,i={},o=document.createElement("a");return{has:function(e,r){return t.call(e,r)},each:function(e,r,t){if(null!=e)if(n&&e.forEach===n)e.forEach(r,t);else if(e.length===+e.length){for(var s=0,o=e.length;o>s;s++)if(r.call(t,e[s],s,e)===i)return}else for(var a in e)if(this.has(e,a)&&r.call(t,e[a],a,e)===i)return},extend:function(e){return this.each(s.call(arguments,1),function(r){if(r)for(var t in r)e[t]=r[t]}),e},bind:function(e,r){return r||(r=window),"function"==typeof e?function(){return e.apply(r,arguments)}:e},defaults:function(e){return this.each(s.call(arguments,1),function(r){if(r)for(var t in r)void 0===e[t]&&(e[t]=r[t])}),e},scripts:function(){return Array.prototype.slice.call(document.getElementsByTagName("script"),0)},urlToLocation:function(e){return o.href=e,{href:o.href,host:o.host,port:o.port,hash:o.hash,origin:o.origin,search:o.search,protocol:o.protocol,hostname:o.hostname,pathname:o.pathname}}}}),define("requirejs-sandbox/helpers/resolvers/abstract",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils"],function(e,r){var t={STATE_IDLE:"idle",STATE_RESOLVING:"resolving",STATE_RESOLVED:"resolved",_state:null,_resolvedUrl:!1,_onSuccess:function(){e.warn("No success handler defined for "+this.id+" resolver! Use _setHandlers() method to do this.")},_onFail:function(){e.warn("No fail handler defined for "+this.id+" resolver! Use _setHandlers() method to do this.")},_setHandlers:function(e,r){"function"==typeof e&&(this._onSuccess=e),"function"==typeof r&&(this._onFail=r)},_hanldleResolver:function(){switch(this.state()){case this.STATE_RESOLVED:return e.debug(this.id+" resolver: resolved",this._resolvedUrl),this._onSuccess(this._resolvedUrl),this._resolvedUrl;case this.STATE_IDLE:return e.debug(this.id+" resolver: failed to resolve"),void this._onFail();default:return}},_getScripts:function(){return r.scripts()},state:function(){return this._state},resolve:function(){e.error("Not implemented!")},reset:function(){return this._state=this.STATE_IDLE,this}};return t.reset()}),define("requirejs-sandbox/helpers/resolvers/optionsResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,r,t){return r.defaults({id:"options",resolve:function(r,t,n){return this.state()==this.STATE_IDLE&&(this._setHandlers(r,t),e.debug(this.id+" resolver: starting resolving"),n&&"string"==typeof n.requireUrl&&(this._resolvedUrl=n.requireUrl,this._state=this.STATE_RESOLVED)),this._hanldleResolver()}},t)}),define("requirejs-sandbox/helpers/resolvers/scriptResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,r,t){var n=/require(?:[.-]min)?.js$/;return r.defaults({id:"script",_checkUrl:function(e){return n.test(e)},resolve:function(t,n){return this.state()==this.STATE_IDLE&&(this._setHandlers(t,n),e.debug(this.id+" resolver: starting resolving"),r.each(this._getScripts(),r.bind(function(e){return this._checkUrl(e.getAttribute("src"))?(this._resolvedUrl=e.getAttribute("src"),this._state=this.STATE_RESOLVED,!0):void 0},this))),this._hanldleResolver()}},t)}),define("requirejs-sandbox/helpers/resolvers/iframeResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,r,t){function n(e,r,t,s){e.length?t(r,e.shift().getAttribute("src"),function(i){"function"==typeof r.require&&"function"==typeof r.requirejs&&"function"==typeof r.define?s(i.getAttribute("src")):n(e,r,t,s)},function(){n(e,r,t,s)}):s(!1)}var s;return r.defaults({id:"iframe",resolve:function(t,i){var o;if(this.state()==this.STATE_IDLE)this._setHandlers(t,i),o=this._getScripts(),e.debug(this.id+" resolver: starting resolving"),o.length&&(this._state=this.STATE_RESOLVING,s||(s=window.require("requirejs-sandbox")._getSandboxInternalInterface()),s.createFrame(null,r.bind(function(e){var t=e.contentWindow;t.onerror=function(){},n(o,t,s.createScript,r.bind(function(r){r?(this._resolvedUrl=r,this._state=this.STATE_RESOLVED):this._state=this.STATE_IDLE,e.parentNode.removeChild(e),e=t=o=null,this._hanldleResolver()},this))},this)));else if(this.state()==this.STATE_RESOLVED)return this._resolvedUrl}},t)}),define("requirejs-sandbox/helpers/resolvers/cdnResolver",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/abstract"],function(e,r,t){return r.defaults({id:"cdn",_resolvedUrl:"//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.9/require.min.js",resolve:function(r){return this.state()==this.STATE_IDLE&&(this._setHandlers(r),e.debug(this.id+" resolver: starting resolving"),this._state=this.STATE_RESOLVED),this._hanldleResolver()}},t)}),define("requirejs-sandbox/helpers/require",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/resolvers/optionsResolver","requirejs-sandbox/helpers/resolvers/scriptResolver","requirejs-sandbox/helpers/resolvers/iframeResolver","requirejs-sandbox/helpers/resolvers/cdnResolver"],function(e,r,t,n,s,i){function o(e){r.each(c,function(r){"function"==typeof r[0]?r[0](e):a("No fail handler",r[1]||!1)}),h=!1,c.length=d=0}function a(e,t){if(null!=t){if("function"!=typeof t)throw e;t(e)}else r.each(c,function(r){a(e,r[1]||!1)}),h=!1,c.length=d=0}var u=!1,d=0,l=[t,n,s,i],c=[],h=!1;return{id:"main",resolved:function(){return!!u},reset:function(){u=!1,r.each(l,function(e){e.reset()})},resolve:function(){var r,t=this;if(arguments.length)c.push(r=arguments);else{if(!c.length)return void e.error("No handlers passed");r=c[0]}if(!h||!arguments.length)return h=!0,this.resolved()?(e.debug(this.id+" resolver: already resolved as",u),o(u),u):void(null!=l[d]?(e.debug(this.id+' resolver: starting "'+l[d].id+'" resolver'),l[d].resolve(function(e){o(u=e)},function(){d++,t.resolve()},r[2])):(e.debug(this.id+" resolver: all resolvers failed"),a("Unable to resolve require.js source url")))}}}),define("requirejs-sandbox/helpers/preprocess/abstract",["requirejs-sandbox/logger/logger"],function(e){return{Processor:null,loadHandler:function(r,t){var n=this.Processor;return function(){switch(this.status){case 0:case 200:case 302:e.debug("File received correctly",r),t(new n(!0,this.response));break;case 404:e.debug("File was not found",r),t(new n(3));break;default:e.debug("Received unhandled status",r,this.status),t(new n(4))}}},errorHandler:function(r,t){var n=this.Processor;return function(){e.debug("Something goes wrong",r,this.status),t(new n(5))}},checkXMLHttpRequestSupport:function(){return"function"==typeof XMLHttpRequest||"object"==typeof XMLHttpRequest},createAjaxLoader:function(e,r,t,n){var s=new XMLHttpRequest;return s.open("GET",r.toUrl(e)+(n||".js"),!0),s.onload=this.loadHandler(e,t),s.onerror=this.errorHandler(e,t),{load:function(){s.send()}}},createDefaultLoader:function(e,r,t){var n=this.Processor;return{load:function(){r([e],function(){t(new n(2))})}}}}}),define("requirejs-sandbox/helpers/processor/core",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils"],function(e,r){var t=[],n=/^\s*define\((['"][^'"]+['"])?,?\s*(?:\[([^\]]+)\])?,?\s*(function[^]+)\);*\s*$/,s=/['"]*\s*/g;return function(i){var o=i||window,a=function(r,t){return this.id=this._responseSourceCache.push(t||"")-1,this.target=o,"boolean"!=typeof r&&1!==r&&0!==r&&"1"!==r&&"0"!==r?(e.debug("Creating simple response with status: "+r),{id:this.id,status:r||6}):(this.status="boolean"==typeof r?+!r:+r,void e.debug("Creating extended resource api with status: "+this.status))};return a.extend=function(){for(var e=0,t=arguments.length;t>e;e++)r.extend(a.prototype,arguments[e])},a.prototype={_responseSourceCache:t,replace:function(r,t){return e.debug('[replace] Executing replace with pattern: "'+r+'" and replace: "'+t+'"'),this._responseSourceCache[this.id]=this._responseSourceCache[this.id].replace(r,t),e.debug("[replace] Executing result: "+this._responseSourceCache[this.id]),this},resolve:function(r){var t,i,a,u,d,l=this._responseSourceCache[this.id],c=n.exec(l);if(e.debug("Execution context",o),c){c[1]&&(u=c[1].replace(s,"")),d=c[2]?c[2].replace(s,"").split(","):[],e.debug('module name: "'+u+'"'),e.debug("module deps: ["+d.join(", ")+"]"),e.debug('module handler: "'+c[3]+'"'),a=new o.Function("return "+c[3]);try{i=a()}catch(h){e.error(h)}if(u)o.define(u,d,function(){try{t=i.apply(this,arguments)}catch(r){e.error(r)}return t}),o.require([u],function(e){"function"==typeof r&&r(e)});else if(d.length)o.require(d,function(){try{t=i.apply(this,arguments)}catch(n){e.error(n)}"function"==typeof r&&r(t)});else{try{t=i()}catch(h){e.error(h)}"function"==typeof r&&r(t)}}else{var f=o.document.createElement("script");f.type="text/javascript",f.text=l,o.document.getElementsByTagName("head")[0].appendChild(f),"function"==typeof r&&r()}return this}},a}}),define("requirejs-sandbox/helpers/processor/autofix",["requirejs-sandbox/logger/logger"],function(e){return{autoFix:function(r){for(var t=["location","document"].concat(r||[]),n={},s=0,i=t.length;i>s;s++){var o=t[s].split(".").pop(),a="__window_"+o.toLowerCase();n[t[s]]||(n[t[s]]=!0,this.target[a]=this.target.sandboxApi&&this.target.sandboxApi.parentWindow[o]||this.target[o],this._responseSourceCache[this.id]=this._responseSourceCache[this.id].replace(new RegExp("(\\W)"+o+"(\\W)","g"),"$1"+a+"$2"))}return e.debug("[autoFix] Executing result: "+this._responseSourceCache[this.id]),this}}}),define("requirejs-sandbox/helpers/preprocess/plugin",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/preprocess/abstract","requirejs-sandbox/helpers/processor/core","requirejs-sandbox/helpers/processor/autofix"],function(e,r,t,n,s){return e.debug("Creating plugin for loading and preprocessing resources"),function(i){var o=new n(i),a=r.extend({},t,{Processor:o});return o.extend(s),{name:"preprocess",handler:function(){return{load:function(r,t,n){var s;e.debug("Received resource load exec for",r),s=a.checkXMLHttpRequestSupport()?a.createAjaxLoader(r,t,n):a.createDefaultLoader(r,t,n),s.load()}}}}}}),define("requirejs-sandbox",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils","requirejs-sandbox/helpers/require","requirejs-sandbox/helpers/preprocess/plugin"],function(e,r,t,n){var s={},i=function(n){return this.options=r.defaults(n,{debug:!1,requireUrl:null,requireMain:null,requireConfig:{},sandboxLinks:{},patch:[],plugins:[],success:function(){},error:function(){}}),this.iframe=null,this.sandbox=null,this.requireUrl=null,this.api={name:this.options.name,require:null,define:null,status:-1,destroy:r.bind(function(){this.sandbox=null,this.iframe.parentNode.removeChild(this.iframe),this.iframe=null;for(var e in this.api)this.api.hasOwnProperty(e)&&delete this.api[e]},this)},this.createSandbox(function(n){e.debug('Sandbox with name "'+this.options.name+'" is created!',n,n.document.body);for(var s in this.options.sandboxLinks)this.options.sandboxLinks.hasOwnProperty(s)&&(n[s]=this.options.sandboxLinks[s]);this.sandbox.sandboxApi=r.extend({},this.api,{parentWindow:window}),t.resolve(r.bind(function(e){this.requireUrl=e,this.createLoader(n)},this),r.bind(function(r){this.api.status=this.sandbox.sandboxApi.status=1,this.options.error.call(this.api),e.error(r)},this),this.options)}),this.api};return i.prototype={createSandbox:function(e){this.createFrame(null,r.bind(function(r){this.iframe=r,this.sandbox=this.iframe.contentWindow,this.createScript(this.sandbox),"function"==typeof e&&e.call(this,this.sandbox)},this))},createFrame:function(r,t){var n=document.createElement("iframe"),s=function(){return"complete"===document.readyState?(e.debug("DOM is ready. Appending iframe"),document.body.appendChild(n),!0):!1},i=function(){"function"==typeof t&&t(n)};n.style.display="none",n.src=r||"javascript:0",n.tabIndex=-1,n.addEventListener?n.addEventListener("load",i,!1):n.attachEvent?n.attachEvent("onload",i):n.onload=i,s()||(e.debug('DOM isn\'t ready. Subscribing to "onreadystatechange" event'),document.onreadystatechange=function(e){return function(){var r;return"function"==typeof e&&(r=e.apply(this,arguments)),s.apply(this,arguments),r}}(document.onreadystatechange))},createScript:function(e,r,t,n,s){var i,o,a=null,u=!1;if("function"==typeof t?(o=n,i=t,t=void 0):(i=n,o=s),e&&e.document&&e.document.body){if(a=e.document.createElement("script"),"object"==typeof t)for(var d in t)t.hasOwnProperty(d)&&null!=t[d]&&a.setAttribute("data-"+d,t[d]);switch(typeof r){case"string":if(r)a.src=r;else if("function"==typeof o)return void o(!1,e);break;case"object":case"undefined":return void("function"==typeof o&&o(!1,e))}"function"==typeof i&&(a.onload=a.onerror=a.onreadystatechange=function(r){u||(u=!0,a.onload=a.onerror=a.onreadystatechange=null,"load"===r.type||"loaded"===this.readyState||"complete"===this.readyState?i(a,e):"function"!=typeof o||"error"!==r.type&&"error"!==this.readyState||o(a,e))}),e.document.getElementsByTagName("head")[0].appendChild(a)}},createLoader:function(s){var i=function(s,i){var o,a=this.options.patch,u=function(r,t){t.enable(window,i,r),e.debug('Patch for module "'+t.name+'" applied correctly')},d=r.bind(function(){e.debug("Executing module callback"),this.options.success.call(this.api,this.api.require,this.api.define)},this),l=function(r){for(var t=0,n=a.length;n>t;t++)if("string"==typeof a[t]&&r.name===a[t]){a[t]=r,e.debug('Patch "'+r.name+'" is resolved.');break}--c||d()},c=0;if(this.api.require=this.sandbox.sandboxApi.require=i.require,this.api.define=this.sandbox.sandboxApi.define=i.define,this.api.status=this.sandbox.sandboxApi.status=0,this.options.debug&&(this.api.sandboxManager=this),"function"!=typeof this.api.require||"function"!=typeof this.api.define)return t.reset(),this.api.status=this.sandbox.sandboxApi.status=2,this.options.error.call(this.api),void e.error("Can not gain access to require.js inside sandbox");this.api.require.config(this.options.requireConfig);for(var h=0,f=this.options.plugins.length;f>h;h++){var p=this.options.plugins[h],g=""+p.name,b=!1;g||(e.error("Registered plugin has no name"),b=!0),"function"!=typeof p.handler&&(e.error("Registered plugin handler is not a function"),b=!0),e.debug("Successfuly registered plugin with name: "+g),b||this.api.define(g,p.handler)}for(e.debug("Creating predefined modules"),this.api.define("sandbox",function(){return i}),e.debug('Creating "preprocess" plugin for sandbox require.js'),o=new n(i),this.api.define(o.name,o.handler),e.debug("Creating handler for amd modules load"),this.api.require.onResourceLoad=function(e,r){for(var t,n=e.defined[r.id],s=r.name,o=0,d=a.length;d>o;o++)t=a[o],t.name==s&&u(n||i[t.shimName],a[o])},e.debug("Checking for unresolved patches"),h=0,f=a.length;f>h;h++)if("string"==typeof a[h]){var v=["requirejs-sandbox","patches",a[h]].join("/");window.require.defined(v)?(e.debug('Patch "'+v+'" is resolved in parent page. Linking with patch list...'),a[h]=window.require(v)):(c++,e.debug('Patch "'+v+'" is unresolved. Resolving...'),window.require([v],l))}c||d()};this.createScript(s,this.requireUrl,{main:this.options.requireMain},r.bind(i,this),r.bind(function(){t.reset(),this.api.status=this.sandbox.sandboxApi.status=3,this.options.error.call(this.api),e.error("Can not load require.js into sandbox")},this)),e.debug("Creating loader inside specified target:",s)}},e.setLogLevel("debug"),e.setNamespace("requirejs-sandbox"),{_getSandboxInternalInterface:function(){return i.prototype},get:function(e){return s[e]},set:function(t,n){var o;return"string"==typeof t?(o=this.get(t),o&&o.status<=0?(e.warn("Sandbox with name: "+t+" already exist! Returning existed sandbox.",o),o):s[t]=new i(r.extend({},n,{name:t}))):void e.error("Sandbox name should be string")},destroy:function(r){var t=this.get(r);t?(t.destroy(),delete s[r]):e.warn('Sandbox with name: "'+r+'" was not found')}}}),define("requirejs-sandbox/helpers/patch",["requirejs-sandbox/logger/logger","requirejs-sandbox/helpers/utils"],function(e,r){var t={_options:{},name:"default",shimName:"default",enable:function(){e.warn("Method is not implemented")},disable:function(){e.warn("Method is not implemented")},setOptions:function(e){var t=function(e){this._options=r.extend({},this._options,e)};return t.prototype=this,new t(e)}};return{init:function(e){return r.defaults(e||{},t)}}}),define("requirejs-sandbox/helpers/processor/prefix",["requirejs-sandbox/logger/logger"],function(e){var r=/(^\s*|}\s*|\s*)([@*.#\w\d\s-:\[\]\(\)="']+)(,|{[^}]+})/g,t=/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/g;return{prefix:function(n){var s=new RegExp(n+"\\s","g");return this._responseSourceCache[this.id]=this._responseSourceCache[this.id].replace(t,"").replace(r,"$1"+n+" $2$3").replace(new RegExp(n+"\\s(@(charset|document|font-face|import|keyframes|media|page|supports))","g"),"$1").replace(/url\([^)]+\)/g,function(e){return e.replace(s,"")}).replace(new RegExp("("+n+")\\s(html|body)","g"),"$1"),e.debug('[prefix] Executing result for selector "'+n+'": ',this._responseSourceCache[this.id]),this}}}); \ No newline at end of file diff --git a/package.json b/package.json index b7b0437..384d258 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "requirejs-sandbox", "description": "Sandbox manager for require.js allows user to run multiple apps without scope intersection issues", - "version": "0.5.0-8", + "version": "0.5.0-9", "author": { "name": "Anton Ignatov", "web": "https://github.com/a-ignatov-parc" @@ -56,4 +56,4 @@ "cssDir": "static/styles/css", "stylusDir": "static/styles/stylus" } -} +} \ No newline at end of file