UNPKG

popbean-react

Version:

let me think about something,comming soon...

1,565 lines (1,421 loc) 755 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react"), require("react-router"), require("react/addons"), require("react-lensed-state"), require("react-tools"), require("react-datepicker"), require("moment"), require("react-select"), require("react-datagrid")); else if(typeof define === 'function' && define.amd) define(["react", "react-router", "react/addons", "react-lensed-state", "react-tools", "react-datepicker", "moment", "react-select", "react-datagrid"], factory); else if(typeof exports === 'object') exports["neptune"] = factory(require("react"), require("react-router"), require("react/addons"), require("react-lensed-state"), require("react-tools"), require("react-datepicker"), require("moment"), require("react-select"), require("react-datagrid")); else root["neptune"] = factory(root["React"], root["ReactRouter"], root["React"], root["LensedStateMixin"], root["ReactTools"], root["DatePicker"], root["moment"], root["ReactSelect"], root["DataGrid"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_9__, __WEBPACK_EXTERNAL_MODULE_20__, __WEBPACK_EXTERNAL_MODULE_21__, __WEBPACK_EXTERNAL_MODULE_22__, __WEBPACK_EXTERNAL_MODULE_23__, __WEBPACK_EXTERNAL_MODULE_24__, __WEBPACK_EXTERNAL_MODULE_184__, __WEBPACK_EXTERNAL_MODULE_192__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/dist/"; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { module.exports = __webpack_require__(3); /***/ }, /* 1 */, /* 2 */, /* 3 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var Neptune = { ActionButton: __webpack_require__(6), ActionBar: __webpack_require__(7), AppNav: __webpack_require__(8), AppNavMenu: __webpack_require__(14), AppNavMenuItem: __webpack_require__(15), FormBuilder: __webpack_require__(18), DynamicForm: __webpack_require__(19), List: __webpack_require__(187), Modal: __webpack_require__(4), LensedStateMixin: __webpack_require__(25), Panel: __webpack_require__(188), SearchBox: __webpack_require__(189), GridPanel: __webpack_require__(190), ListPanel: __webpack_require__(191), DetailPanel: __webpack_require__(195), ResourceMapping: __webpack_require__(196) }; // ActionBar : ActionBar module.exports = Neptune; /***/ }, /* 4 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); var Modal = React.createClass({ displayName: 'Modal', getDefaultProps: function getDefaultProps() { return { title: '这都不干' }; }, getInitialState: function getInitialState() { return { display: 'none' }; }, render: function render() { var style = { display: this.state.display }; var modal_dialog_style = { 'overflow-y': 'initial !important' }; var modal_body_style = { 'overflow-y': 'auto' }; var actions = this.props.actions || []; return React.createElement( 'div', { className: 'modal', style: style }, React.createElement( 'div', { className: 'modal-dialog', style: modal_dialog_style }, React.createElement( 'div', { className: 'modal-content' }, React.createElement( 'div', { className: 'modal-header' }, React.createElement( 'button', { type: 'button', className: 'close', 'data-dismiss': 'modal', 'aria-label': 'Close', onClick: this.hide }, React.createElement( 'span', { 'aria-hidden': 'true' }, '×' ) ), React.createElement( 'h4', { className: 'modal-title' }, this.props.title ) ), React.createElement( 'div', { className: 'modal-body', style: modal_body_style }, this.props.children ), React.createElement( 'div', { className: 'modal-footer' }, actions.map(function (act) { return React.createElement( 'button', { type: 'button', className: 'btn ' + act.icon, 'data-dismiss': 'modal', onClick: act.handler }, act.label ); }) ) ) ) ); }, show: function show() { this.setState({ display: 'block' }); }, hide: function hide() { this.setState({ display: 'none' }); }, isPop: function isPop() { //是否为打开的 if (this.state.display == 'block') { return true; } return false; } }); module.exports = Modal; /***/ }, /* 5 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_5__; /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); var ActionButton = React.createClass({ displayName: 'ActionButton', getDefaultProps: function getDefaultProps() { return { model: { type: 'action' } }; }, render: function render() { var item = this.props.model; var type = item.type || this.props.type || 'action'; if (type == 'action') { return React.createElement( 'button', { type: 'button', className: 'btn btn-default', onClick: item.handler || this.props.handler }, React.createElement('span', { className: item.icon || this.props.icon, 'aria-hidden': 'true' }), ' ', item.label || this.props.label ); } else { return React.createElement( 'button', { type: 'button', className: 'btn btn-default', onClick: item.handler || this.props.handler }, React.createElement('span', { className: item.icon || this.props.icon }) ); } } }); module.exports = ActionButton; /***/ }, /* 7 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); var ActionButton = __webpack_require__(6); var ActionBar = React.createClass({ displayName: 'ActionBar', getDefaultProps: function getDefaultProps() { return { float: 'left', model: [] }; }, render: function render() { var style = { 'text-align': this.props.float || 'left' }; //FIXME 微调一下样式,确保其不至于偏差太大,不信你注释了试试看 return React.createElement( 'div', { className: 'btn-toolbar', role: 'toolbar', style: style }, this.props.model.map(function (item) { return React.createElement(ActionButton, { model: item }); }) ); } }); module.exports = ActionBar; /***/ }, /* 8 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); // var Router = __webpack_require__(9); var Route = Router.Route; var RouteHandler = Router.RouteHandler; // var sb_style = __webpack_require__(10); // var AppNavMenu = __webpack_require__(14); var AppSideBar = __webpack_require__(16); // var AppNav = React.createClass({ displayName: 'AppNav', getDefaultProps: function getDefaultProps() { return { url: 'index.html' }; }, render: function render() { //链接这个暂定吧 return React.createElement( 'div', { id: 'wrapper' }, React.createElement( 'nav', { className: 'navbar navbar-default navbar-static-top', role: 'navigation', style: { 'margin-bottom': 0 } }, React.createElement( 'div', { 'class': 'navbar-header' }, React.createElement( 'button', { type: 'button', className: 'navbar-toggle', 'data-toggle': 'collapse', 'data-target': '.navbar-collapse' }, React.createElement( 'span', { className: 'sr-only' }, 'Toggle navigation' ), React.createElement('span', { className: 'icon-bar' }), React.createElement('span', { className: 'icon-bar' }), React.createElement('span', { className: 'icon-bar' }) ), React.createElement( 'a', { className: 'navbar-brand', href: this.props.url }, this.props.title, ' ', this.props.version ) ), React.createElement(AppNavMenu, { model: this.props.actions }), React.createElement(AppSideBar, { model: this.props.nodes }) ), React.createElement(RouteHandler, null) ); } }); module.exports = AppNav; /***/ }, /* 9 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_9__; /***/ }, /* 10 */ /***/ function(module, exports, __webpack_require__) { // style-loader: Adds some css to the DOM by adding a <style> tag // load the styles var content = __webpack_require__(11); if(typeof content === 'string') content = [[module.id, content, '']]; // add the styles to the DOM var update = __webpack_require__(13)(content, {}); if(content.locals) module.exports = content.locals; // Hot Module Replacement if(false) { // When the styles change, update the <style> tags if(!content.locals) { module.hot.accept("!!./../../node_modules/css-loader/index.js!./../../node_modules/less-loader/index.js!./sb-spa-2.less", function() { var newContent = require("!!./../../node_modules/css-loader/index.js!./../../node_modules/less-loader/index.js!./sb-spa-2.less"); if(typeof newContent === 'string') newContent = [[module.id, newContent, '']]; update(newContent); }); } // When the module is disposed, remove the <style> tags module.hot.dispose(function() { update(); }); } /***/ }, /* 11 */ /***/ function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(12)(); exports.push([module.id, ".Select-control {\n padding: 7px 52px 7px 10px;\n}\nbody {\n background-color: #f8f8f8;\n}\n#wrapper {\n width: 100%;\n}\n#page-wrapper {\n padding: 0 15px;\n min-height: 568px;\n background-color: white;\n}\n@media (min-width: 768px) {\n #page-wrapper {\n position: inherit;\n margin: 0 0 0 250px;\n padding: 0 30px;\n border-left: 1px solid #e7e7e7;\n }\n}\n.navbar-top-links {\n margin-right: 0;\n}\n.navbar-top-links li {\n display: inline-block;\n}\n.navbar-top-links li:last-child {\n margin-right: 15px;\n}\n.navbar-top-links li a {\n padding: 15px;\n min-height: 50px;\n}\n.navbar-top-links .dropdown-menu li {\n display: block;\n}\n.navbar-top-links .dropdown-menu li:last-child {\n margin-right: 0;\n}\n.navbar-top-links .dropdown-menu li a {\n padding: 3px 20px;\n min-height: 0;\n}\n.navbar-top-links .dropdown-menu li a div {\n white-space: normal;\n}\n.navbar-top-links .dropdown-messages,\n.navbar-top-links .dropdown-tasks,\n.navbar-top-links .dropdown-alerts {\n width: 310px;\n min-width: 0;\n}\n.navbar-top-links .dropdown-messages {\n margin-left: 5px;\n}\n.navbar-top-links .dropdown-tasks {\n margin-left: -59px;\n}\n.navbar-top-links .dropdown-alerts {\n margin-left: -123px;\n}\n.navbar-top-links .dropdown-user {\n right: 0;\n left: auto;\n}\n.sidebar .sidebar-nav.navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n}\n.sidebar .sidebar-search {\n padding: 15px;\n}\n.sidebar ul li {\n border-bottom: 1px solid #e7e7e7;\n}\n.sidebar ul li a.active {\n background-color: #eeeeee;\n}\n.sidebar .arrow {\n float: right;\n}\n.sidebar .fa.arrow:before {\n content: \"\\f104\";\n}\n.sidebar .active > a > .fa.arrow:before {\n content: \"\\f107\";\n}\n.sidebar .nav-second-level li,\n.sidebar .nav-third-level li {\n border-bottom: none !important;\n}\n.sidebar .nav-second-level li a {\n padding-left: 37px;\n}\n.sidebar .nav-third-level li a {\n padding-left: 52px;\n}\n@media (min-width: 768px) {\n .sidebar {\n z-index: 1;\n position: absolute;\n width: 250px;\n margin-top: 51px;\n }\n .navbar-top-links .dropdown-messages,\n .navbar-top-links .dropdown-tasks,\n .navbar-top-links .dropdown-alerts {\n margin-left: auto;\n }\n}\n.btn-outline {\n color: inherit;\n background-color: transparent;\n transition: all .5s;\n}\n.btn-primary.btn-outline {\n color: #428bca;\n}\n.btn-success.btn-outline {\n color: #5cb85c;\n}\n.btn-info.btn-outline {\n color: #5bc0de;\n}\n.btn-warning.btn-outline {\n color: #f0ad4e;\n}\n.btn-danger.btn-outline {\n color: #d9534f;\n}\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: white;\n}\n.chat {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.chat li {\n margin-bottom: 10px;\n padding-bottom: 5px;\n border-bottom: 1px dotted #999999;\n}\n.chat li.left .chat-body {\n margin-left: 60px;\n}\n.chat li.right .chat-body {\n margin-right: 60px;\n}\n.chat li .chat-body p {\n margin: 0;\n}\n.panel .slidedown .glyphicon,\n.chat .glyphicon {\n margin-right: 5px;\n}\n.chat-panel .panel-body {\n height: 350px;\n overflow-y: scroll;\n}\n.login-panel {\n margin-top: 25%;\n}\n.flot-chart {\n display: block;\n height: 400px;\n}\n.flot-chart-content {\n width: 100%;\n height: 100%;\n}\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting_asc_disabled,\ntable.dataTable thead .sorting_desc_disabled {\n background: transparent;\n}\ntable.dataTable thead .sorting_asc:after {\n content: \"\\f0de\";\n float: right;\n font-family: fontawesome;\n}\ntable.dataTable thead .sorting_desc:after {\n content: \"\\f0dd\";\n float: right;\n font-family: fontawesome;\n}\ntable.dataTable thead .sorting:after {\n content: \"\\f0dc\";\n float: right;\n font-family: fontawesome;\n color: rgba(50, 50, 50, 0.5);\n}\n.btn-circle {\n width: 30px;\n height: 30px;\n padding: 6px 0;\n border-radius: 15px;\n text-align: center;\n font-size: 12px;\n line-height: 1.428571429;\n}\n.btn-circle.btn-lg {\n width: 50px;\n height: 50px;\n padding: 10px 16px;\n border-radius: 25px;\n font-size: 18px;\n line-height: 1.33;\n}\n.btn-circle.btn-xl {\n width: 70px;\n height: 70px;\n padding: 10px 16px;\n border-radius: 35px;\n font-size: 24px;\n line-height: 1.33;\n}\n.show-grid [class^=\"col-\"] {\n padding-top: 10px;\n padding-bottom: 10px;\n border: 1px solid #ddd;\n background-color: #eee !important;\n}\n.show-grid {\n margin: 15px 0;\n}\n.huge {\n font-size: 40px;\n}\n.panel-green {\n border-color: #5cb85c;\n}\n.panel-green .panel-heading {\n border-color: #5cb85c;\n color: white;\n background-color: #5cb85c;\n}\n.panel-green a {\n color: #5cb85c;\n}\n.panel-green a:hover {\n color: #3d8b3d;\n}\n.panel-red {\n border-color: #d9534f;\n}\n.panel-red .panel-heading {\n border-color: #d9534f;\n color: white;\n background-color: #d9534f;\n}\n.panel-red a {\n color: #d9534f;\n}\n.panel-red a:hover {\n color: #b52b27;\n}\n.panel-yellow {\n border-color: #f0ad4e;\n}\n.panel-yellow .panel-heading {\n border-color: #f0ad4e;\n color: white;\n background-color: #f0ad4e;\n}\n.panel-yellow a {\n color: #f0ad4e;\n}\n.panel-yellow a:hover {\n color: #df8a13;\n}\n", ""]); /***/ }, /* 12 */ /***/ function(module, exports) { /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ // css base code, injected by the css-loader module.exports = function() { var list = []; // return the list of modules as css string list.toString = function toString() { var result = []; for(var i = 0; i < this.length; i++) { var item = this[i]; if(item[2]) { result.push("@media " + item[2] + "{" + item[1] + "}"); } else { result.push(item[1]); } } return result.join(""); }; // import a list of modules into the list list.i = function(modules, mediaQuery) { if(typeof modules === "string") modules = [[null, modules, ""]]; var alreadyImportedModules = {}; for(var i = 0; i < this.length; i++) { var id = this[i][0]; if(typeof id === "number") alreadyImportedModules[id] = true; } for(i = 0; i < modules.length; i++) { var item = modules[i]; // skip already imported module // this implementation is not 100% perfect for weird media query combinations // when a module is imported multiple times with different media queries. // I hope this will never occur (Hey this way we have smaller bundles) if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) { if(mediaQuery && !item[2]) { item[2] = mediaQuery; } else if(mediaQuery) { item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"; } list.push(item); } } }; return list; }; /***/ }, /* 13 */ /***/ function(module, exports, __webpack_require__) { /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ var stylesInDom = {}, memoize = function(fn) { var memo; return function () { if (typeof memo === "undefined") memo = fn.apply(this, arguments); return memo; }; }, isOldIE = memoize(function() { return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase()); }), getHeadElement = memoize(function () { return document.head || document.getElementsByTagName("head")[0]; }), singletonElement = null, singletonCounter = 0; module.exports = function(list, options) { if(true) { if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); } options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> // tags it will allow on a page if (typeof options.singleton === "undefined") options.singleton = isOldIE(); var styles = listToStyles(list); addStylesToDom(styles, options); return function update(newList) { var mayRemove = []; for(var i = 0; i < styles.length; i++) { var item = styles[i]; var domStyle = stylesInDom[item.id]; domStyle.refs--; mayRemove.push(domStyle); } if(newList) { var newStyles = listToStyles(newList); addStylesToDom(newStyles, options); } for(var i = 0; i < mayRemove.length; i++) { var domStyle = mayRemove[i]; if(domStyle.refs === 0) { for(var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j](); delete stylesInDom[domStyle.id]; } } }; } function addStylesToDom(styles, options) { for(var i = 0; i < styles.length; i++) { var item = styles[i]; var domStyle = stylesInDom[item.id]; if(domStyle) { domStyle.refs++; for(var j = 0; j < domStyle.parts.length; j++) { domStyle.parts[j](item.parts[j]); } for(; j < item.parts.length; j++) { domStyle.parts.push(addStyle(item.parts[j], options)); } } else { var parts = []; for(var j = 0; j < item.parts.length; j++) { parts.push(addStyle(item.parts[j], options)); } stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts}; } } } function listToStyles(list) { var styles = []; var newStyles = {}; for(var i = 0; i < list.length; i++) { var item = list[i]; var id = item[0]; var css = item[1]; var media = item[2]; var sourceMap = item[3]; var part = {css: css, media: media, sourceMap: sourceMap}; if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]}); else newStyles[id].parts.push(part); } return styles; } function createStyleElement() { var styleElement = document.createElement("style"); var head = getHeadElement(); styleElement.type = "text/css"; head.appendChild(styleElement); return styleElement; } function createLinkElement() { var linkElement = document.createElement("link"); var head = getHeadElement(); linkElement.rel = "stylesheet"; head.appendChild(linkElement); return linkElement; } function addStyle(obj, options) { var styleElement, update, remove; if (options.singleton) { var styleIndex = singletonCounter++; styleElement = singletonElement || (singletonElement = createStyleElement()); update = applyToSingletonTag.bind(null, styleElement, styleIndex, false); remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true); } else if(obj.sourceMap && typeof URL === "function" && typeof URL.createObjectURL === "function" && typeof URL.revokeObjectURL === "function" && typeof Blob === "function" && typeof btoa === "function") { styleElement = createLinkElement(); update = updateLink.bind(null, styleElement); remove = function() { styleElement.parentNode.removeChild(styleElement); if(styleElement.href) URL.revokeObjectURL(styleElement.href); }; } else { styleElement = createStyleElement(); update = applyToTag.bind(null, styleElement); remove = function() { styleElement.parentNode.removeChild(styleElement); }; } update(obj); return function updateStyle(newObj) { if(newObj) { if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) return; update(obj = newObj); } else { remove(); } }; } var replaceText = (function () { var textStore = []; return function (index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join('\n'); }; })(); function applyToSingletonTag(styleElement, index, remove, obj) { var css = remove ? "" : obj.css; if (styleElement.styleSheet) { styleElement.styleSheet.cssText = replaceText(index, css); } else { var cssNode = document.createTextNode(css); var childNodes = styleElement.childNodes; if (childNodes[index]) styleElement.removeChild(childNodes[index]); if (childNodes.length) { styleElement.insertBefore(cssNode, childNodes[index]); } else { styleElement.appendChild(cssNode); } } } function applyToTag(styleElement, obj) { var css = obj.css; var media = obj.media; var sourceMap = obj.sourceMap; if(media) { styleElement.setAttribute("media", media) } if(styleElement.styleSheet) { styleElement.styleSheet.cssText = css; } else { while(styleElement.firstChild) { styleElement.removeChild(styleElement.firstChild); } styleElement.appendChild(document.createTextNode(css)); } } function updateLink(linkElement, obj) { var css = obj.css; var media = obj.media; var sourceMap = obj.sourceMap; if(sourceMap) { // http://stackoverflow.com/a/26603875 css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"; } var blob = new Blob([css], { type: "text/css" }); var oldSrc = linkElement.href; linkElement.href = URL.createObjectURL(blob); if(oldSrc) URL.revokeObjectURL(oldSrc); } /***/ }, /* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); var AppNavMenuItem = __webpack_require__(15); /* var model = [ { icon:"fa fa-user fa-fw", label:"用户信息", children:[ { icon:"", label:"", url:"" }, { icon:"", label:"", url:"" }, { icon:"", label:"", url:"" } ] } ]; exmpales <AppNavMenu model={this.props.model}/> */ var AppNavMenu = React.createClass({ displayName: 'AppNavMenu', getDefaultProps: function getDefaultProps() { return { model: {} }; }, render: function render() { var self = this; return React.createElement( 'ul', { className: 'nav navbar-top-links navbar-right' }, this.props.model.map(function (item) { return React.createElement(AppNavMenuItem, { model: item }); }) ); }, toggleMenu: function toggleMenu(event) { var t = event.target; console.log(event.target); } }); module.exports = AppNavMenu; /***/ }, /* 15 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); // var AppNavMenuItem = React.createClass({ displayName: 'AppNavMenuItem', getInitialState: function getInitialState() { return { open: false }; }, render: function render() { var children = this.props.model.children || []; //console.log('has render component',this.props.model.renderComponent,'children:',children); if (this.props.model.renderComponent) { var model = this.props.model; //<li class="divider"></li> return React.createElement( 'li', { className: this.state.open ? 'dropdown open' : 'dropdown' }, React.createElement( 'a', { className: 'dropdown-toggle', 'data-toggle': 'dropdown', 'aria-expanded': this.state.open, onClick: this.toggleMenuItem, onBlur: this.toggleMenuItem, style: { 'cursor': 'pointer' } }, React.createElement('i', { className: this.props.model.icon }), this.props.model.label, children && children.length > 0 ? React.createElement('i', { className: 'fa fa-caret-down' }) : '' ), React.createElement( 'ul', { className: 'dropdown-menu dropdown-messages' }, children.map(function (child) { return React.createElement( 'li', null, React.createElement(model.renderComponent, { data: child }) ); }) ) ); } else { return React.createElement( 'li', { className: this.state.open ? 'dropdown open' : 'dropdown', onMouseOver: this.onMouseOver, onMouseOut: this.onMouseOut }, React.createElement( 'a', { className: 'dropdown-toggle', 'data-toggle': 'dropdown', 'aria-expanded': this.state.open, style: { 'cursor': 'pointer' } }, React.createElement('i', { className: this.props.model.icon }), this.props.model.label, children && children.length > 0 ? React.createElement('i', { className: 'fa fa-caret-down' }) : '' ), React.createElement( 'ul', { className: 'dropdown-menu dropdown-user' }, children.map(function (child) { if (child.type == 'divider') { return React.createElement('li', { className: 'divider' }); } else { if (child.url) { return React.createElement( 'li', null, React.createElement( 'a', { href: child.url }, React.createElement('i', { className: child.icon }), ' ', child.label ) ); } else { return React.createElement( 'li', null, React.createElement( 'a', { style: { 'cursor': 'pointer' } }, React.createElement('i', { className: child.icon }), ' ', child.label ) ); } } }) ) ); } }, onMouseOver: function onMouseOver(event) { if (!this.state.open) { this.setState({ open: true }); } }, onMouseOut: function onMouseOut(event) { var e = event.toElement || event.relatedTarget; //特殊情况e为空 if (!e || e.parentNode == this || e == this) { //为了保障在child中时,不会被触发,试了几个浏览器没有问题 return; } this.setState({ open: false }); } }); module.exports = AppNavMenuItem; /***/ }, /* 16 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); var AppSideBarItem = __webpack_require__(17); var AppSideBar = React.createClass({ displayName: 'AppSideBar', render: function render() { return React.createElement( 'div', { className: 'navbar-default sidebar', role: 'navigation' }, React.createElement( 'div', { className: 'sidebar-nav navbar-collapse' }, React.createElement( 'ul', { className: 'nav', id: 'side-menu' }, this.props.model.map(function (item) { return React.createElement(AppSideBarItem, { model: item }); }) ) ) ); } }); module.exports = AppSideBar; /***/ }, /* 17 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(5); var Router = __webpack_require__(9); var Link = Router.Link; //等着上Link来使用router /* <AppSideBarItem model={model}/> nav nav-second-level collapse in --> open nav nav-second-level collapse --> close */ var AppSideBarItem = React.createClass({ displayName: 'AppSideBarItem', getInitialState: function getInitialState() { return { open: false }; }, parseUrl: function parseUrl(url) { //从url中将参数提取出来 var pos = url.indexOf('?'); var tmp = url.substring(pos + 1); tmp = tmp.split('&'); //将数据分组 var ret = {}; tmp.map(function (item) { var temp = item.split('='); ret[temp[0]] = temp[1]; }); return ret; }, render: function render() { var children = this.props.model.children || []; var a; var style = { cursor: 'pointer' }; //提取变量 var self = this; var router_param = self.parseUrl(this.props.model.url || ''); if (this.props.model.children) { a = React.createElement( 'a', { onClick: this._toggleItem, style: style }, React.createElement('i', { className: this.props.model.icon }), this.props.model.label, ' ', React.createElement('span', { className: 'fa arrow' }) ); } else { // a = <a href='#'><i className={this.props.model.icon}></i> {this.props.model.label} </a> a = React.createElement( Link, { to: this.props.model.code, params: router_param }, React.createElement('i', { className: this.props.model.icon }), ' ', this.props.model.label, ' ' ); } return React.createElement( 'li', { className: this.state.open ? 'active' : '' }, a, React.createElement( 'ul', { className: this.state.open ? 'nav nav-second-level collapse in' : 'nav nav-second-level collapse', 'aria-expanded': this.state.open }, children.map(function (child) { var p = self.parseUrl(child.url); return React.createElement( 'li', null, React.createElement( Link, { to: child.code, params: p }, React.createElement('i', { className: child.icon }), child.label ) ); }) ) ); }, _toggleItem: function _toggleItem() { this.setState({ open: !this.state.open }); } }); module.exports = AppSideBarItem; /***/ }, /* 18 */ /***/ function(module, exports) { /* */ 'use strict'; function buildField(item, colcount) { //将一个field构建成一个字符串 var ret = ''; if (item['type'] == 'memo') { ret = '<div className="form-group col-xs-12">'; ret += '<label htmlFor="' + item.code + '">' + item.label + '</label>'; ret += '<textarea type="text" className="form-control" id="' + item.code + '" placeholder="' + item.tip + '" rows="3" valueLink={this.linkState("data.' + item.code + '")}'; console.log('item[readOnly]', item['readOnly']); if (item['readonly'] || item['readonly'] == 'true') { ret += ' readOnly'; } ret += '></textarea></div>'; } else if (item['type'] == 'date') { ret = '<div className="form-group col-xs-' + 12 / colcount + '">'; ret += '<label htmlFor="' + item.code + '">' + item.label + '</label>'; ret += '<DatePicker '; ret += 'key="' + item.code + '" '; ret += 'dateFormat="YYYY-MM-DD" '; ret += 'className="form-control" '; ret += 'id="' + item.code + '"'; ret += 'selected={this.state.data.' + item.code + '}'; ret += 'onChange={datechange_bus["' + item.code + '"]}'; if (item['readonly'] || item['readonly'] == 'true') { ret += ' readOnly'; } ret += '/></div>'; } else if (item['type'] == 'ref') { //引用数据 ret = buildRefField(item, colcount); } else if (item['type'] == 'stat') { ret = buildStatField(item, colcount); } else if (item['type'] == 'bool') { ret = buildBoolField(item, colcount); } else { ret = '<div className="form-group col-xs-' + 12 / colcount + '">'; ret += '<label htmlFor="' + item.code + '">' + item.label + '</label>'; ret += '<input type="text" className="form-control" id="' + item['code'] + '" placeholder="' + item.tip + '" valueLink={this.linkState("data.' + item.code + '")}'; if (item['readonly'] || item['readonly'] == 'true') { ret += ' readOnly'; } ret += '/></div>'; } ret += '\n'; return ret; } function buildBoolField(item, colcount) { var ret = '<div className="form-group col-xs-' + 12 / colcount + '">'; ret += '<label for="' + item.code + '">' + item.label + '</label>'; ret += '<div className="checkbox">'; ret += '<label>'; ret += '<input type="checkbox" checkedLink={this.linkState("data.' + item.code + '")}'; if (item['readonly'] || item['readonly'] == 'true') { ret += ' readOnly'; } ret += '></input>' + item.tip; ret += '</label>'; ret += '</div>'; ret += '</div>'; return ret; } /* 构建stat的显示 */ function buildStatField(item, colcount) { //值域超过3项就占领一行 var range = item['rangeset']; //rangeset:value1:label1@value2:label2@value3:label3:default var pairs = range.split('@'); // var colspan = pairs.length >3?12:6;//如果需要支持,就要从split哪里下手,而不仅仅是这里 var ret = '<div className="form-group col-xs-' + 12 / colcount + '">'; //需要根据值域范围来搞 ret += '<label for="' + item.code + '">' + item.label + '</label>'; ret += '<div className="radio">'; pairs.map(function (pair) { var array = pair.split(':'); //对于默认值的问题,交给后端解决,而不是前端 var tmp = '<label className="radio-inline">'; tmp += '<input type="radio" checkedLink={this.radioLink("data.' + item.code + '","' + array[0] + '")}'; if (item['readonly'] || item['readonly'] == 'true') { ret += ' readOnly'; } tmp += '/>' + array[1]; tmp += '</label>'; ret += tmp; }); ret += '</div>'; ret += '</div>'; return ret; } function buildRefField(item, colcount) { var ret = '<div className="form-group col-xs-' + 12 / colcount + '">'; //需要根据值域范围来搞 ret += '<label for="' + item.code + '">' + item.label + '</label>'; ret += '<ReactSelect name="' + item.code + '"'; ret += ' value={this.state.data.' + item.code + '}'; if (typeof item.range == 'string') { //异步模式 ret += ' asyncOptions={reffetch_bus["' + item.code + '"]}'; } else { // ret += ' options={ref_range["' + item.code + '"]}'; item.range; } ret += 'onChange={refchange_bus["' + item.code + '"]}'; if (item['readonly'] || item['readonly'] == 'true') { ret += ' readOnly'; } ret += '/>'; ret += '</div>'; return ret; } function layout(fields, start, end, col_count) { //将指定区段的属性放到数组中 var ret = []; if (start == end) { //独立成行的情况 var part = '<div className="row">' + '\n'; part += buildField(fields[start], col_count); part += '</div>' + '\n'; ret.push(part); //做一个group就行 return ret; } var rows = Math.ceil((end - start + 1) / col_count); for (var i = 0; i < rows; i++) { //初始化 ret[i] = '<div className="row">' + '\n'; for (var ii = 0; ii < col_count; ii++) { if (i * col_count + ii + 1 <= end - start + 1) { //如果超出了范围就滚蛋 ret[i] += buildField(fields[i * col_count + ii], col_count) + '\n'; } } ret[i] += '</div>' + '\n'; } /* var current_col = 0;//所在组 for(var i=start;i<=end;i++){ if(current_col > (col_count-1)){ current_col = 0;//复位 } for(var ii=0;ii<col_count;ii++){ var tmp = (i+1)%(ii+1); current_col ++; if(tmp == 0){ ret[ii] += buildField(fields[i],col_count)+'\n'; break; } } } for(var i=0;i<rows;i++){//初始化 ret[i] += '</div>'+'\n'; }*/ return ret; } function split(fields) { //将数据分组 var ret = []; var start = 0; for (var i = 0, len = fields.length; i < len; i++) { if (fields[i]['type'] == 'memo') { if (start != i) { //说明就是 ret.push({ start: start, end: i - 1 }); start = i + 1; //将 } else { start = i; } ret.push({ start: i, end: i }); //将当前这个memo也加进去 } } if (start != fields.length - 1) { ret.push({ start: start, end: fields.length - 1 }); } return ret; } function filter(model, scope) { //复制出来一份 var ret = {}; for (var key in model) { //很毛坯的拷贝一个对象 ret[key] = model[key]; } //将需要显示的内容识别出来 var fields = []; ret.fields.map(function (item) { if (item.scope == 'both' || item.scope == scope) { fields.push(item); } }); model.fields = fields; return model; } var Builder = {}; function clone(obj) { var ret = {}; for (var key in obj) { //很毛坯的拷贝一个对象 ret[key] = obj[key]; } return ret; } module.exports = Builder; module.exports = { build: function build(colcount, fields) { //根据输入的字符串来搞 //col_count应该[1,3] var ret = '<div>'; var array = split(fields); for (var i = 0, len = array.length; i < len; i++) { var tmp_array = layout(fields, array[i]['start'], array[i]['end'], colcount); tmp_array.map(function (item) { ret += item; }); } ret += '</div>'; return ret; }, filter: function filter(model, scope) { //过滤属性;适用于search-box的获取 var ret = clone(model); //将需要显示的内容识别出来 var fields = []; ret.fields.map(function (item) { if (item.scope == 'both' || item.scope == scope) { fields.push(item); } }); ret.fields = fields; return ret; }, filterByStage: function filterByStage(fields, stage) { //按照card和list两种状态来过滤? //将需要显示的内容识别出来 var ret = []; fields.map(function (item) { if (item['visible'] == 'false' || item['visible'] == false) {} else { if (item['show' + stage] == 'true' || item['show' + stage] == true) { var inst; if (stage == 'list') { inst = { name: item['code'], title: item['label'] }; inst[stage + 'pos'] = item[stage + 'pos']; } else { inst = item; } ret.push(inst); } } }); // ret = ret.sort(function (a, b) { return parseInt(a[stage + 'pos'] || 0) - parseInt(b[stage + 'pos'] || 0); }); // return ret; }, sort: function sort(model, sortkey) { //指定排序 var ret = clone(model); ret.fields = ret.fields.sort(function (a, b) { return parseInt(a[sortkey]) - parseInt(b[sortkey]); }); return ret; } }; //不显示就算了 /***/ }, /* 19 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var React = __webpack_require__(20); var LensedStateMixin = __webpack_require__(21); var ReactTools = __webpack_require__(22); var DatePicker = __webpack_require__(23); var FormBuilder = __webpack_require__(18); var moment = __webpack_require__(24); //var LensedStateMixin = require('react-lensed-state'); var LensedStateMixin = __webpack_require__(25); // var ReactSelect = __webpack_require__(184); var select_css = __webpack_require__(185); // var DynamicForm = React.createClass({ displayName: 'DynamicForm', mixins: [LensedStateMixin], getDefaultProps: function getDefaultProps() { return { colcount: 2, model: { fields: [] } }; }, getInitialState: function getInitialState() { return { data: {} }; }, render: function render() { var full_row_style = { width: '90%' }; //console.log('original:',this.props.model.fields); var fields = this.props.model.fields || []; // var datechange_bus = {}; var refchange_bus = {}; var reffetch_bus = {}; //异步取数 var ref_range = {}; var self = this; fields.map(function (item) { //定义用于date类型绑定的函数,好悲剧啊 if (item.type == 'date') { datechange_bus[item.code] = function (date) { var update = {}; update[item.code] = date; var newData = React.addons.update(self.state, { data: { $merge: update } }); //有深度的state将不会被复制,必须要用这种方式来进行处理 self.setState(newData); }; } else if (item.type == 'ref') { //为了绑定ref的数据 if (typeof item.range == 'string') { //如果用这个,就是异步模式 reffetch_bus[item.code] = function (input, callback) { fetch(item.range).then(function (response) { return response.json(); }).then(function (json) { var tmp = json['data']; callback(null, { options: tmp, complete: true }); })['catch'](function (ex) { console.log(ex); }); }; } else { ref_range[item.code] = item.range; } refchange_bus[item.code] = function (ids) { var update = {}; update[item.code] = ids; var newData = React.addons.update(self.state, { data: { $merge: update } }); //有深度的state将不会被复制,必须要用这种方式来进行处理 self.setState(newData); }; } }); // var result = FormBuilder.build(this.props.colcount, fields); //FIXME 谨慎怀疑state变化能带来界面的更新 //console.log('result:-->',result,'<--','this.state:',this.state); var ele = ReactTools.transform(result); var ret = eval(ele); //FIXME 需要try-catch return ret; } }); module.exports = DynamicForm; /***/ }, /* 20 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_20__; /***/ }, /* 21 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_21__; /***/ }, /* 22 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_22__; /***/ }, /* 23 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_23__; /***/ }, /* 24 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_24__; /***/ }, /* 25 */ /***/ function(module, exports, __webpack_require__) { //var ReactLib = require('react/addons'); // var React = require('react/addons'); // var ReactLink = React.ReactLink; // var ReactStateSetters = React.ReactStateSetters; //var {ReactLink,ReactStateSetters} = ReactLib; //用于绑定各种乱七八糟的吧 // var ReactLib = require('react/lib'); // var {ReactLink,ReactStateSetters} = ReactLib; 'use strict'; var ReactLink = __webpack_require__(26), ReactStateSetters = __webpack_require__(182); var lens = __webpack_require__(183); module.exports = { linkState: function linkState(key) { // TODO: Retrive state from another lens or method var state = this.state; var lensed = lens(key); var setter = function setter(state) { return function (value) { return lensed.set(value, state); }; }; return new ReactLink(lensed.get(state), ReactStateSetters.createStateSetter(this, setter(state))); }, radioLink: function radioLink(key, opt_value) { //用于绑定radio // var state = this.state; var lensed = lens(key); var setter = function setter(state) { return function (value) { if (value) { return lensed.set(opt_value, state); } }; }; return new ReactLink(lensed.get(state) == opt_value, ReactStateSetters.createStateSetter(this, setter(state))); } }; /***/ }, /* 26 */ /***/ function(module, exports, __webpack_require__) { /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule ReactLink * @typechecks static-only */ 'use strict'; /** * ReactLink encapsulates a common pattern in which a component wants to modify * a prop received from its parent. ReactLink allows the parent to pass down a * value coupled with a callback that, when invoked, expresses an intent to * modify that value. For example: * * React.createClass({ * getInitialState: function() { * return {value: ''}; * }, * render: function() { * var valueLink = new ReactLink(this.state.value, this._handleValueChange); * return <input valueLink={valueLink} />; * }, * this._handleValueChange: function(newValue) { * this.setState({value: newValue}); * } * }); * * We have provided some sugary mixins to make the creation and * consumption of ReactLink easier; see LinkedValueUtils and LinkedStateMixin. */ var React = __webpack_require__(27); /** * @param {*} value current value of the link * @param {function} requestChange callback to request a change */ function ReactLink(value, requestChange) { this.value = value; this.requestChange = requestChange; } /** * Creates a PropType that enforces the ReactLink API and optionally checks the * type of the value being passed inside the link. Example: * * MyComponent.propTypes = { * tabIndexLink: ReactLink.PropTypes.link(React.PropTypes.number) * } */ function createLinkTypeChecker(linkType) { var shapes = { value: typeof linkType === 'undefined' ? React.PropTypes.any.isRequired : linkType.isRequired, requestChange: React.PropTypes.func.isRequired }; return React.PropTypes.shape(shapes); } ReactLink.PropTypes = { link: createLinkTypeChecker }; module.exports = ReactLink; /***/ }, /* 27 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule React */ /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/ 'use strict'; var EventPluginUtils = __webpack_require__(29); var ReactChildren = __webpack_require__(33); var ReactComponent = __webpack_require__(47); var ReactClass = __webpack_require__(62); var ReactContext = __webpack_require__(37); var ReactCurrentOwner = __webpack_require__(42); var ReactElement = __webpack_require__(36); var ReactElementValidator = __webpack_require__(55); var ReactDOM = __webpack_require__(65); var ReactDOMTextComponent = __webpack_require__(67); var ReactDefaultInjection = __webpack_require__(116); var ReactInstanceHandles = __webpack_require__(45); var ReactMount = __webpack_require__(92); var ReactPerf = __webpack_require__(51); var ReactPropTypes = __webpack_require__(147); var ReactReconciler = __webpack_require__(52); var ReactServerRendering = __webpack_require__(179); var assign = __webpack_require__(38); var findDOMNode = __webpack_require__(136); var onlyChild = __webpack_require__(181); ReactDefaultInjection.inject(); var createElement = ReactElement.createElement; var createFactory = ReactElement.createFactory; var cloneElement = ReactElement.cloneElement; if ("production" !== process.env.NODE_ENV) { createElement = ReactElementValidator.createElement; createFactory = ReactElementValidator.createFactory; cloneElement = ReactElementValidator.cloneElement; } var render = ReactPerf.measure('React', 'render', ReactMount.render); var React = { Children: { map: ReactChildren.map, forEach: ReactChildren.forEach, count: ReactChildren.count, only: onlyChild }, Component: ReactComponent, DOM: ReactDOM, PropTypes: ReactPropTypes, initializeTouchEvents: function(shouldUseTouch) { EventPluginUtils.useTouchEvents = shouldUseTouch; }, createClass: ReactClass.createClass, createElement: createElement, cloneElement: cloneElement, createFactory: createFactory, createMixin: function(mixin) { // Currently a noop. Will be used to validate and trace mixins. return mixin; }, constructAndRenderComponent: ReactMount.constructAndRenderComponent, constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID, findDOMNode: findDOMNode, render: render, renderToString: ReactServerRendering.renderToString, renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup, unmountComponentAtNode: ReactMount.unmountComponentAtNode, isValidElement: ReactElement.isValidElement, withContext: ReactContext.withContext, // Hook for JSX spread, don't use this for anyth