-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathreact-mixin-manager.min.js
4 lines (4 loc) · 4.34 KB
/
react-mixin-manager.min.js
1
2
3
4
/*!
* https://github.com/jhudson8/react-mixin-manager v1.0.2; MIT license; Joe Hudson<joehud_AT_gmail.com>
*/
!function(e){"function"==typeof define&&define.amd?define(["react"],function(t){return e(t)}):"undefined"!=typeof exports&&"undefined"!=typeof require?module.exports=e(require("react")):ReactMixinManager=e(React)}(function(React){function setState(e,t,n){if(t.isMounted())if(void 0===n||n)t.setState(e);else for(var i in e)e.hasOwnProperty(i)&&(t.state[i]=e[i]);else if(t.state)for(var i in e)e.hasOwnProperty(i)&&(t.state[i]=e[i]);else{var a=t.__temporary_state||{};for(var i in e)e.hasOwnProperty(i)&&(a[i]=e[i]);t.__temporary_state=a}}function getState(e,t){var n=t.state,i=t.__temporary_state;return n&&n[e]||i&&i[e]}function get(values,index,initiatedOnce,rtn){function addTo(name){var indexName=name,match=name.match(/^([^\(]*)\s*\(([^\)]*)\)\s*/),params=match&&match[2];if(name=match&&match[1]||name,!index[indexName]){params&&(params=eval("["+params+"]"));var mixin=_mixins[name],checkAgain=!1,skip=!1;if(!mixin)throw new Error('invalid mixin "'+name+'"');if("function"==typeof mixin)_initiatedOnce[name]?(initiatedOnce[name]?skip=!0:(initiatedOnce[name]=[],mixin=name),params&&initiatedOnce[name].push(params)):(mixin=mixin.apply(this,params||[]),checkAgain=!0);else if(params)throw new Error('the mixin "'+name+'" does not support parameters');get(_dependsOn[name],index,initiatedOnce,rtn),get(_dependsInjected[name],index,initiatedOnce,rtn),index[indexName]=!0,checkAgain?get([mixin],index,initiatedOnce,rtn):skip||(checkForInlineMixins(mixin,rtn),rtn.push(mixin))}}function checkForInlineMixins(e,t){e.mixins&&get(e.mixins,index,initiatedOnce,t)}function handleMixin(e){e&&(Array.isArray(e)?get(e,index,initiatedOnce,rtn):"string"==typeof e?addTo(e):(checkForInlineMixins(e,rtn),rtn.push(e)))}if(Array.isArray(values))for(var i=0;i<values.length;i++)handleMixin(values[i]);else handleMixin(values)}function applyInitiatedOnceArgs(e,t){function n(e,n,i){n=n.call(this,i||[]);var a=t.indexOf(e);t.splice(a,1,n)}for(var i in e)e.hasOwnProperty(i)&&n(i,_mixins[i],e[i])}function addMixin(e,t,n,i){function a(e){_mixins[e]=t,_dependsOn[e]=n.length&&n,_initiatedOnce[e]=i&&!0}a(e);var r=e.match(namespaceMatch);return r&&!_mixins[r[1]]&&a(r[1]),t}function GROUP(){}function mixinParams(e){var t,n=e[0],i=!1;if("object"==typeof n?(t=n.name,i=n.initiatedOnce):t=n,!t||!t.length)throw new Error("the mixin name hasn't been specified");return Array.isArray(e[1])?[t,e[1][0],Array.prototype.slice.call(e[1],1),i]:[t,e[1],Array.prototype.slice.call(e,2),i]}function load(){rtn.defaultDeferUpdateInterval=0;var e=999999999;rtn.add({name:"deferUpdate",initiatedOnce:!0},function(t){function n(e){var t=e.state._deferUpdateTimer;t&&(clearTimeout(t),delete e.state._deferUpdateTimer)}for(var i=e,a=0;a<t.length;a++)t[a].length>0&&(i=Math.min(i,t[a]));return i===e&&(i=rtn.defaultDeferUpdateInterval),{getInitialState:function(){return{}},shouldComponentUpdate:function(){return this.state._deferUpdateTimer&&i>0?!1:!0},componentDidUpdate:function(){n(this)},deferUpdate:function(){if(0>i)return this.forceUpdate();var e=this.state,t=this;n(this),e._deferUpdateTimer=setTimeout(function(){n(t),t.isMounted()&&t.forceUpdate()},i)}}}),rtn.mixins.state=rtn.add("state",{getInitialState:function(){return{}},componentWillMount:function(){var e=this.__temporary_state;if(e){for(var t in e)e.hasOwnProperty(t)&&(this.state[t]=e[t]);delete this.__temporary_state}}}),rtn.setState=setState,rtn.getState=getState}var _dependsOn,_dependsInjected,_mixins,_initiatedOnce,_createClass=React.createClass;React.createClass=function(e){return e.mixins&&(e.mixins=rtn.get(e.mixins)),_createClass.apply(React,arguments)};var namespaceMatch=/^[^\.]+\.(.*)/,rtn={mixins:{},get:function(){var e,t,n=[],i={},a={};get(Array.prototype.slice.call(arguments),i,a,n),applyInitiatedOnceArgs(a,n);for(var r=0;r<n.length;r++)if(n[r].mixins){e=n[r],t={};for(var s in e)e.hasOwnProperty(s)&&"mixins"!==s&&(t[s]=e[s]);n[r]=t}return n},inject:function(e){var t=_dependsInjected[e];t||(t=_dependsInjected[e]=[]),t.push(Array.prototype.slice.call(arguments,1))},alias:function(e){return addMixin(e,GROUP,Array.prototype.slice.call(arguments,1),!1)},add:function(){return addMixin.apply(this,mixinParams(arguments))},exists:function(e){return _mixins[e]||!1},_reset:function(){_dependsOn={},_mixins={},_dependsInjected={},_initiatedOnce={},load()}};return rtn._reset(),rtn});