mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-18 01:08:18 +10:00
7 lines
4.1 KiB
JavaScript
7 lines
4.1 KiB
JavaScript
/**
|
|
* Backbone.React.Component
|
|
* @version 0.4.2
|
|
* @author "Magalhas" José Magalhães <magalhas@gmail.com>
|
|
* @license MIT <http://opensource.org/licenses/MIT>
|
|
*/
|
|
"use strict";!function(a,b){if("function"==typeof define&&define.amd)define(["react","backbone","underscore"],b);else if("undefined"!=typeof module){var c=require("react"),d=require("backbone"),e=require("underscore");module.exports=b(c,d,e)}else b(a.React,a.Backbone,a._)}(this,function(a,b,c){return b.React||(b.React={}),b.React.Component=function(a){a=a||{},this.cid=c.uniqueId();var d=a.el,e=a.model,f=a.collection;(c.isElement(d)||b.$&&d instanceof b.$)&&(this.setElement(d),delete a.el),(e instanceof b.Model||e instanceof Object&&c.values(e)[0]instanceof b.Model)&&(this.model=e,delete a.model,this.__setPropsBackbone__(e,void 0,a)),(f instanceof b.Collection||f instanceof Object&&c.values(f)[0]instanceof b.Collection)&&(this.collection=f,delete a.collection,this.__setPropsBackbone__(f,void 0,a))},b.React.Component.extend=function(d){function e(a){var d=new b.React.Component(a),g=f.apply(this,arguments);return c.extend(g,d),g.__factory__=e,g.initialize&&g.initialize(a),g.__startModelListeners__(),g.__startCollectionListeners__(),g}e.extend=function(){return b.React.Component.extend(c.extend({},d,arguments[0]))};var f=a.createClass(c.extend(e.prototype,b.React.Component.prototype,d));return e},c.extend(b.React.Component.prototype,b.Events,{mixins:[{componentDidMount:function(){this.setElement(this.getDOMNode())},componentDidUpdate:function(){this.setElement(this.getDOMNode())}}],$:function(){return this.$el?this.$el.find.apply(this.$el,arguments):void 0},getCollection:function(){return this.getOwner().collection},getModel:function(){return this.getOwner().model},getOwner:function(){for(var a=this;a.props.__owner__;)a=a.props.__owner__;return a},mount:function(b,c){if(!b&&!this.el)throw new Error("No element to mount on");return b||(b=this.el),a.renderComponent(this,b,c),this},remove:function(){this.isMounted()&&this.unmount(),this.stopListening()},setElement:function(a){if(a&&b.$&&a instanceof b.$){if(a.length>1)throw new Error("You can only assign one element to a component");this.el=a[0],this.$el=a}else a&&(this.el=a,b.$&&(this.$el=b.$(a)));return this},toHTML:function(b){if(!b)throw new Error("Useless to call toHTML without a callback");var c=new this.__factory__(this.props);a.renderComponentToString(c,b)},unmount:function(){var b=this.el.parentNode;if(!a.unmountComponentAtNode(b))throw new Error("There was an error unmounting the component");this.setElement(b)},__onError__:function(){arguments[arguments.length-1].silent||this.__setProps__({isRequesting:!1,hasError:!0})},__onRequest__:function(){var a=arguments[arguments.length-1];a&&a.silent||this.__setProps__({isRequesting:!0})},__onSync__:function(){var a=arguments[arguments.length-1];a&&a.silent||this.__setProps__({isRequesting:!1})},__setProps__:function(a,d,e){!this.isMounted||this.isMounted()||e||(e=this.props);var f={},g=a.toJSON?a.toJSON():a;d?f[d]=g:a instanceof b.Collection?f.collection=g:f=g,e?c.extend(e,f):(this.__nextProps__=c.extend(this.__nextProps__||{},f),c.defer(function(){this.__nextProps__&&(this.setProps(this.__nextProps__),delete this.__nextProps__)}.bind(this)))},__setPropsBackbone__:function(a,c,d){if(a instanceof b.Collection||a instanceof b.Model)this.__setProps__.apply(this,arguments);else for(c in a)this.__setPropsBackbone__(a[c],c,d)},__startCollectionListeners__:function(a,c){if(a||(a=this.collection),a instanceof b.Collection)this.listenTo(a,"add remove change sort",this.__setPropsBackbone__.bind(this,a,c,void 0)).listenTo(a,"error",this.__onError__.bind(this,a,c)).listenTo(a,"request",this.__onRequest__.bind(this,a,c)).listenTo(a,"sync",this.__onSync__.bind(this,a,c));else if(a)for(c in a)this.__startCollectionListeners__(a[c],c)},__startModelListeners__:function(a,c){if(a||(a=this.model),a instanceof b.Model)this.listenTo(a,"change",this.__setPropsBackbone__.bind(this,a,c,void 0)).listenTo(a,"error",this.__onError__.bind(this,a,c)).listenTo(a,"request",this.__onRequest__.bind(this,a,c)).listenTo(a,"sync",this.__onSync__.bind(this,a,c));else if(a)for(c in a)this.__startModelListeners__(a[c],c)}}),b.React.Component}); |