popbean-react
Version:
let me think about something,comming soon...
1,565 lines (1,421 loc) • 755 kB
JavaScript
(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