jiapeng 8 years ago
parent
commit
e5a31753d5
15 changed files with 649 additions and 530 deletions
  1. 1 1
      css/common.css
  2. 142 56
      html/demo.html
  3. 5 5
      html/model/sys/org/index.html
  4. 86 63
      js/codehtml.js
  5. 379 2
      js/common.js
  6. 2 2
      js/datagrid.js
  7. 5 4
      js/dict.js
  8. 1 1
      js/form.js
  9. 5 5
      js/model/sys/org/index.js
  10. 4 4
      js/pageDataGrid.js
  11. 3 3
      js/pager.js
  12. 12 9
      js/spa.js
  13. 2 2
      js/text.js
  14. 2 2
      js/textarea.js
  15. 0 371
      js/util.js

+ 1 - 1
css/common.css

2209
    content: '\e652';
2209
    content: '\e652';
2210
}
2210
}
2211
2211
2212
.form-item > a.dd-hand > span:empty ~ i.icon-close:before, {
2212
.form-item > a.dd-hand > span:empty ~ i.icon-close:before  {
2213
    content: '';
2213
    content: '';
2214
}
2214
}
2215
.form-item.showOnly > a.dd-hand i.icon-close:before {
2215
.form-item.showOnly > a.dd-hand i.icon-close:before {

+ 142 - 56
html/demo.html

2
<html>
2
<html>
3

3

4
	<head>
4
	<head>
5
		<meta charset="UTF-8">
5
		<meta charset="utf-8" />
6
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
		<title></title>
7
		<title></title>
7
		<link rel="stylesheet" href="../css/common.css" />
8
		<script type="text/javascript" src="../js/jquery-1.12.4.js"></script>
8
		<link href="../css/common.css" rel="stylesheet" type="text/css" />
9
		<style>
10
			.page-head {
11
				width: 100%;
12
				padding: 0 20px;
13
				color: #999;
14
				height: 60px;
15
				background-color: #444;
16
				min-width: 1040px;
17
				/*overflow: hidden;*/
18
			}
19
			
20
			.page-logo {
21
				display: block;
22
				width: 150px;
23
				height: 60px;
24
				background: url("data:image/png;base64,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") left center no-repeat;
25
			}
26
			
27
			.page-home {
28
				padding: 10px 15px;
29
			}
30
			
31
			.page-home i {
32
				font-size: 40px;
33
			}
34
			
35
			.page-head-right .logout, .page-head-right .help, .page-head-right .user-msg {
36
				height: 30px;
37
				margin: 15px;
38
				cursor: pointer;
39
			}
40
			
41
			.page-head-right div i {
42
				font-size: 30px;
43
			}
44
			
45
			.user-info {
46
				height: 40px;
47
				margin: 10px;
48
				font-size: 15px;
49
				color: #fff;
50
				text-align: center;
51
			}
52
			
53
			.user-info .user-head {
54
				height: 40px;
55
				width: 40px;
56
				border-radius: 50%;
57
			}
58
			
59
			.user-info .user-name {
60
				margin-left: 10px;
61
			}
62
			
63
			.user-info i {
64
				margin-top: 15px;
65
			}
66
			
67
			.page-menu {
68
				position: absolute;
69
				top: 60px;
70
				left: 0;
71
				width: 240px;
72
				bottom: 0;
73
				font-size: 20px;
74
				background-color: #fafafa;
75
				border: 1px solid #c7c7c7;
76
				overflow-x: visible;
77
			}
78
			
79
			.spa-main {
80
				position: absolute;
81
				top: 60px;
82
				left: 240px;
83
				right: 0px;
84
				bottom: 0;
85
				padding: 10px;
86
			}
87
			
88
			#g_info {
89
				top: 60px;
90
			}
91
		</style>
9
	</head>
92
	</head>
10

93

11
	<body>
12
		<div class="container">
13
			<div class="row">
14
				<div class="col-6 form-item text readOnly" name="t1" placeholder="dfsafsdfsdfda" defVal="dfsasfds">
15

16
				</div>
17
				<div class="col-6 form-item text int readOnly" name="t2" defVal="12345">
18

94
	<body class="spa-page" resource="../ajax/sys/resource/user" menu="../ajax/user/config/menu" style="padding: 0;">
95
		<div class="page-head">
96
			<div class="page-head-left pull-left">
97
				<a class="page-logo pull-left"></a>
98
				<div class="page-home pull-left">
99
					<i class="icon-home"></i>
19
				</div>
100
				</div>
20
			</div>
101
			</div>
21
			<div class="row">
22
				<div class="col-6 form-item select readOnly"  dictCode="bool" name="t3" placeholder="123456789">
23

102
			<div class="page-head-right pull-right">
103
				<div class="logout pull-right">
104
					<i class="icon-signout opt-logout"></i>
24
				</div>
105
				</div>
25
				<div class="col-6 form-item mselect tree " dictCode="tree"   placeholder="123456789" name="t4">
26

27
				</div>
28
			</div>
29
			<div class="row">
30
				<div class="col-6 form-item date readOnly" defVal="current" name="t5" placeholder="dfsafsdfsdfda">
31

106
				<div class="help pull-right">
107
					<i class="icon-question-sign"></i>
32
				</div>
108
				</div>
33
				<div class="col-6 form-item textarea readOnly"  name="t6" placeholder="dfsafsdfsdfda">
34

109
				<div class="user-msg pull-right">
110
					<i class="icon-envelope"></i>
35
				</div>
111
				</div>
112
				<a class="user-info pull-right"> <img class="user-head" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABuCAIAAABJObGsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzQ0NkMxNDMyMTgxMTFFNTk0NTM4MzgwOUQ4QTlBMjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzQ0NkMxNDQyMTgxMTFFNTk0NTM4MzgwOUQ4QTlBMjAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NDQ2QzE0MTIxODExMUU1OTQ1MzgzODA5RDhBOUEyMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NDQ2QzE0MjIxODExMUU1OTQ1MzgzODA5RDhBOUEyMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkQ1VQMAAA9GSURBVHja7J0Hc9tGGoaJRrB3UqRE9bgm47vJ3f3/n3AzucnFZ6uRYgVJsKK3exeQFVnNkgyAkKO1xCgSy+LB13fxgTrtjmIvw49BvyB4QfmC8gXly3hB+YLyBeULypfxgjJKg43OVBzHsck3GYqqaZqOH5aSZBgGRVGOE2MYKpPOsCyT4PlUMknTFEWThxeUXw1d12fz5XK1WqxWiqIahmnZFvCZpmHbjvccAGVZFvAYmonHuVw2U8jnioU8sL6gjEHiZoulOJ2BoqSAIYYG0XzIa8fiNJ1KplOpbCZdKhbwFee4vyJK6K84m03E2XQ+B0ro8mPfwTTN+WKJL0hrMZ8vlwrVSrlSKjIMs5YjosKvDJmmtVguB8Ko0x9IkuzjO+dz2b3tZr1WTaWSPz5KGMFOr3/aPl8sVw9U5MdFJDS9Wd/Y392GDWVo+odVcOA7Om0NhoKm6wF9BAxFbzBcSRLEc6e5Gaayh4dyPBE/HZ/i0Xq8WXwszdl88dk8My1zd7sZmi8KCaUwnnw6OhlNxNDOHKzw8VkbJgSyiTj0B8l2hqNxyBy9gdjqpNXu9Aa6bvwIKCGP//t8HD7HS5pn7U5/OAzCxYWKEn7mj09Hk+lsjZEzMqhWpyfO5s8YpSQr8DPT4I/hm2M6nX0+PkUq9SxRItzpDwV8haBZ3/bpjgM7A00PLggLEOV8vmydd5HbRaRcYlkWHBCyzGeGUtW0viAgOwxP7mwHsC5rSLcOWVHOu32YneeEsj8QkGJ///t4FUzyZV/7soEN7EzLMkwTyShNUwge8WjeC7SLmY3GAdkc/0N0TdNHk4n84JPvHZj3cPHt/oeiSEJ9Ude9Xt6lMGjyQOFHhqGrxUKlVByL05E4VUnN2Ll86TU1h9EsFvOFXC7qKCFBCMjni9WjyyoUoXfxjfeJOXE2XsxnWYbG7wDrkqZDVIlKJxO5bIaPx7PZVD6TSSUTSBAVXev2hP98POoORx7qW+PcYuE5oITuASWs0kOEEcqIx2I+VwSVdCqbTsV5jmM5Gvhsm2GYZIKnSeWc4Vg29oWLizLGcRw44k98nLtElkolcpk03urfv388bnVoiibn4OsBT4j4DNbc92zST5TggpgcXvL+Oi7+apoWMG3Wa+VCvlIqACSkjEhWnPOWHDx996wefvfwOeD1B7tbHEcKQqftHj4IuK89ZyXJ4nTW2KhRvq4L+YkSUjaeiPrdsRtYwylAmmrl0ma9ure9uVEtgxTxFM7FX61bXg5l/1MqHzK2N+tQcLij7kCAH7omm1AaqE6tUrlJOTIoDXO2WALoPe4Y0ofjfP/6ABChvJA6w7RiAfjURq3yzw/vdcMYjsSbOi5O50h+oA0RRakZ+nQ2s25D6RDvaadTiV/eHL4+3INtpFwfFVwuBEnc29mCQ5cUVZLkazVg3Z0qTIqPtWE/40pJUu7KzMAXXvbtT/tvftqHnwFHV6mDzSnh/X9+fbjdqOEsXvss2NDZfGH4moz5hhKwVE29FQ4Og6UZ2MX3rw7yuazlBtjhZEG5bHp/e6tczH8JXf+crTibw5hGESWsknLHErZp2RvV0ttXe/l8xt17ERJHb+xs1Q92myQJuvK5mCf8uO5rdcM3lFAZTbsFJX4D1d7f2Wpubng5X8iFDPiWZmMDZpqiYs7XMZmsqj4aGT8V/Ka+EElwnJ3NuhedrKssVCnm95oNlmG+OpGOI8sylClyKGHCJVm5ZuDxM0NRjY1KpVywg/czd418LrO7vYngH9O7EuFa8JM+mkvfUCJgNBFYWuZlgANymD04lkphr+7fCIyYarmYSMSpmOMNzE03LNXQkXdGLq5E5vuPD+/cBGPUGwhQHIfkfByyQyTXpmXH1jrSyWS9UiZbvFQtnUrubtWbjRrLxVNJ3jDtCKFEMpvkuQ/vXsO016tDpDHnvYGq6ywRh1IqmQzf21wbyFZ3mo2+MDEMY3+78a+//Yx0C+I5XykLSbm/ZhwqSoYmdTBIIk3DMlZ101Q1rd0bwnfnsxmOZQNdVHnQcbIM2GGStWrp7z+/wc+eBJD6CcPothkVlCDolVrJ6aWdZr02EMbj6bxcKmCmaxfJC+eTTSNir1fLiI2u5pcsEYJYlFB+qdwAHExkpVTcbmyU8jnM1Y7AoqNXf/v1l7ew6V/r0y01zXWiJCUyEv9e0ERmgcAYaQakAHN1ooGSpumdrca1hQrHv5KKXyhJmfby7EIwE3wc8Qd8JeIhJxoK7qnzLUmEHSWUN6Nv6DjHsHEe709FRCpvT9Jsx6/aik8oHS+5Zv4sBbkFaufKGmI0BwJev2Je2i+ptOxII7unCmNFCqV3esnSwrMaqm7oEczBgRJZ7fNCKSt6FFE6boHgGdGUVV3RdB9jXj+XyeAKZU13HI5DAkFTkYVokrUTcykr/lokn3dnmKYt2XqS5xJxlqKiSBPneyVrS0n1fX3J/zIivDnU3LDsaIokjKOiGUGs09EBaZAVXZSWbgSygTYQlOTiY2/zSvS02zDNgLKvoNYJIJWmGTnB1HUzuBgjMJSwmKYVKbmEMMJK3rWlKbooyfZJdzNzpKwk0hs7sAQ3wIVATNowrIiUhXBSJUUzg0xtg0TpOESfolHmwERkVQvUEwa7PA0N13TTXjdNTENR9aAXkINF6bghsWGtOTGHckhK4EuegW+asNzkZ40Ru044ambwp5MO5WAsyMVa/A+MIzjCSobwWWGgXGP9TZLBUQ/nJIa0KwomH3Y/5DK7qhkrRQ3tQ8PbYIZDUjUztKAdHzeHrzHCu/Q31L16umkqodAExwXZtKaHaZ9DRYkDg9JB5wKlSTiulKWkxsIda+jJBqOJxyTP+bVZ52oYi9RwvlJWshr+ca2nvR1iI4QpCXcLB+WbyJPCz1JWIfhrOaj1oISm60TLHd5meY79/jU1pACSqq1kLUw/EwmUlxGSoyETsuMsE+dYin7K7iIijKoma4bq1k7WeDhrbgUKmDaU3b1AiVy9TDOXBvSbWG13dUHTdEnVdXP9yx8RaFDrACgJORmTYVmWYxm3wYDb0+HG8q9z0UfDNi1TNyCJOrm8hYpE8+eI9PoFMtKSBUPXKU843f3tjMfPtmwPK3TY7TtCBuU+LZtJA/1sqZjrrj9FBKXj9pj2+pF4TG1PMC9IUxe48RR3Tyzp35JI8jwXZ1hGVrQY9SKVsdhKlhVZLhWyST5+5Qpx52rB2PliOuMsm04lwJE0hnC3cOq60ekLdoxKJhJ/aZTzxfLotCVJciGbrtfK9VqFj3MWucjZ8UTScaHSFM3x+BcncghJ/OKazs57J+3OYDQFx1cHexlfuw48G5SQsok4bZ13u4Oh15poPJ2tJHmjWi7ksxzHGm4YD11m4xhcgo/j32UEOhZn7W7/4/FZfzg2bTtF+jXRh/s7mXT6r4USLng0ET8dnYzFacy9PgmP0/liJSuCON3datTKxVQqmXAdegIk+fil3QTugTD5eHT66bQNmwo9j9M0fE6r08VfD/Z2smuSzTU084Y8DoTR55Ozicvx6u9dD0NBJLc2qu9eHWxvbqSvtOWG74Yw/vbH55N2F+khzse1gAkx1O52E7KZzWT+ElLZGwhHp2c3+1p6UKDUwHTW6c+Xkjib//LmMJclXMT5/Lf/HrU6veliCd3Hk29ezYvXtrs9xJ2He7v5XPZHRglvIozGx2ct8e4+qyQ6Zxho7kicKqraF8aHe03TtD+ftsbiXFEURJH39AfCC7v9IQT2cH+vkMuGuccz1DwBCWJ/KIgP6FeL4BvOe7mS4dxttzHgYiktV5J7R45vtLMxTROfMhgKIS9zhq3gkqw8JLlGMJRM8Fv12uuDnc161bEdBEkfj1swsrphkkzoXnGzCPqVE+4lQ6GiJCWcezvfebfbgUgWs6ndZuOt29yJ/IGJ7e9sFfO53z8dnXUGeBOvreJdQPE+qqYZukH64v1gKGHClpLU6fbvb1EOeWUZdqNWfnu4C5FEGHSZ54AZ4s1fP7wv5HL/O2nNFksvubwziZLk3mC4tVnn4wiWwrBjgQdD8KqiOIUrmEynMrknkXFHeYhkNTzPv9rbebXfhAC6F5J/dVks5d71CScD0ehxq3Ny3oXkUXffBgr5ZTqdqlXKW416CMFmsFIJD9PtDyZTyNDKurdyA8eS4DnI4rtXe+VinniaG07Dq3Qgd0QIz/OQNQrarmr6XWtE0HF8rVbSeCJWK6WtRuPaxeDPAyW8LXLBwXAkjCcPqo07SLpp3k0QKddv3O2grTjHkS6h8PIPCHU0HVmpiFQKMUC1XKpWyulg7sbjP0oE2OJs1h+OBoLw8Js30AyNYz7vCTubjUwq9c18aTZftrsDTTceuC6ECKnT6yOqhbJv1jfy+SxsaHRRIgJfLled3gCTfmxrfNhBr3sfUsNiIccxzF0rDLCNsqriaSs35GQf0zVRN4zT9vlwPN5tbtU3qsgvfWyA5BtK+BNI4kmr/U2zeKdg0hRORmcwLJfyjWrFvuNN4HlgepEFgfXT7jwou3dkQIh6sLvT2KhyPt2Qxx+UcM2t806708UPT0+83C4bwzGxa41ahbrtonyCjiIVtu5QcEho+USZwsmezuZ/aJ8lWd7dbqaSPpSNaT84KidnbSjO93C8GsZPpnOkjLEby2Tu/1IQyZE40/zYN4AJY9qY/ENaZgeOEo7ltHXe6iDE82eHMhWjBsKkNxzRt6GEaYNqj8YiWUbzw8ph2pg8aKrfvZ31u6YD09bu9lrnXb96anr1R3E2F8biDYNLeizDywtjUiP2JNSXD8XkcQgAan3fmuXTUcKuIfQ9Pm352yQMiEzLgoaL84XjOJeCCacEfz1AsDqdm7blb/EMnv2sfQ4r/T27vJ+Ocr5Y+mVlbvofWMt2b4jw6FKNiX+3rO5wtFytgsipYTdxON9zF5knzgkRL+QDmUwQaQPs4FKSuwPBC04vVx1gzqD4kqwG1A0Th4O86MlXnD1xToilEUUG1LeOcksbSD0H4wmsh4eSWMkJOMrBXWmBwznv9saiGB5KcrMsYQSawZUGPBXW3Z2DHkrDMGck+LcDrZhBwftD4Wk3K3zKtERxNhpPrCD36JD+WQyTy6Q5lvXEkNzohOdDaHQrTmfCeBwGSojJSBRXvt5B+RaU7i4i4CNW0q2tg2k+l2VZ1naCXbFB4jsYjp4gKI9GuVgsRXFqrWPbGB3W8uFitZo//sZq/xdgADfSdJj29ZmGAAAAAElFTkSuQmCC" />
113
					<span class="user-name">linux linux</span> <i class="icon-caret-down"></i>
114
				</a>
115
			</div>
116
		</div>
117
		<div class="page-menu">
118
			<div class="spa-menu menu"></div>
119
		</div>
120
		<div class="spa-main"></div>
121
		<div class="page-foot"></div>
122
		<div id='g_info'>
123
			<div id='g_err'></div>
124
			<div id='g_warn'></div>
125
			<div id='g_msg'></div>
126
		</div>
127
		<div id='g_loading' style="display: none;">
128
			<div>
129
				<i class='icon icon-spin icon-spinner-snake'></i>
36
			</div>
130
			</div>
37

38
		</div>
131
		</div>
39
		<button type="button" class="opt-btn btn">btn</button>
40
		<script type="text/javascript" src="../js/common.js"></script>
41
		<script type="text/javascript" src="../js/util.js"></script>
42
		<script type="text/javascript" src="../js/dict.js"></script>
43
		<script type="text/javascript" src="../js/dropdown.js"></script>
44
		<script type="text/javascript" src="../js/form.js"></script>
45
		<script type="text/javascript" src="../js/text.js"></script>
46
		<script type="text/javascript" src="../js/select.js"></script>
47
		<script type="text/javascript" src="../js/date.js" ></script>
48
		<script type="text/javascript" src="../js/textarea.js" ></script>
49
		<script>
50
			$.use(["form", "dict"], function($f, $dict) {
51
				$dict.set("tree", [{ code: "0", caption: "否", enabled: true },
52
					{ code: "1", caption: "11否", enabled: true },
53
					{ code: "2", caption: "22否", enabled: true }, 
54
					{ code: "3", caption: "33否", enabled: true }, 
55
					{ code: "4", caption: "44否", enabled: true }, 
56
					{ code: "5", caption: "55否", enabled: true ,children:[{ code: "6", caption: "否", enabled: true }, 
57
					{ code: "7", caption: "否", enabled: true }, 
58
					{ code: "8", caption: "否", enabled: true }, 
59
					{ code: "9", caption: "否", enabled: true }, 
60
					{ code: "10", caption: "否", enabled: true }, ]}, 
61
					
62
					{ code: "11", caption: "666否", enabled: true },
63
				])
64

65
				var form = $f.build($(".container"));
66
				$(".opt-btn").on("click", function() {
67
					console.log(form.val());
68
				});
69

132

70
			})
71
		</script>
72
	</body>
133
	</body>
134
	<script type="text/javascript" src="../js/jquery-1.12.4.js"></script>
135
	<script type="text/javascript" src="../js/common.js"></script>
136
	<script type="text/javascript" src="../js/form.js"></script>
137
	<script type="text/javascript" src="../js/dict.js"></script>
138
	<script type="text/javascript" src="../js/text.js"></script>
139
	<script type="text/javascript" src="../js/textarea.js"></script>
140
	<script type="text/javascript" src="../js/dropdown.js"></script>
141
	<script type="text/javascript" src="../js/select.js"></script>
142
	<script type="text/javascript" src="../js/date.js"></script>
143
	<script type="text/javascript" src="../js/pager.js"></script>
144
	<script type="text/javascript" src="../js/codehtml.js"></script>
145
	<script type="text/javascript" src="../js/datagrid.js"></script>
146
	<script type="text/javascript" src="../js/pageDataGrid.js"></script>
147
	<script type="text/javascript" src="../js/spa.js"></script>-->
148

149
	<script>
150
		$(function() {
151
			$.spa.build();
152
			$(".opt-logout").on("click", function() {
153
				$.util.get("../ajax/sys/user/logout", null, function() {
154
					window.location.href = "login.html";
155
				}, {});
156
			});
157
		});
158
	</script>
73

159

74
</html>
160
</html>

+ 5 - 5
html/model/sys/org/index.html

62
					<th>类型</th>
62
					<th>类型</th>
63
				</tr>
63
				</tr>
64
			</thead>
64
			</thead>
65
			<tbody class="code-tpl code-tag-hold" code-func="data-list">
66
				<tr>
65
			<tbody>
66
				<tr ch-dir="list">
67
					<td class="opt-check" ><i class="icon icon-st-check" orgId="{{id}}"></i></td>
67
					<td class="opt-check" ><i class="icon icon-st-check" orgId="{{id}}"></i></td>
68
					<td>{{any-[]}}</td>
68
					<td>{{-_index}}</td>
69
					<td>{{pi}}</td>
69
					<td>{{pi}}</td>
70
					<td>{{name}}</td>
70
					<td>{{name}}</td>
71
					<td>{{createTime-showDay}}</td>
71
					<td>{{createTime-showDay}}</td>
72
					<td class="ando-dict-display" dict="bool" code="{{type}}"></td>
72
					<td class="hanand-dict" dict="bool" code="{{type}}"></td>
73
				</tr>
73
				</tr>
74
			</tbody>
74
			</tbody>
75
			<tbody class="code-tpl code-tag-hold" code-func="data-emptylist">
75
			<tbody ch-dir="array.empty">
76
				<tr>
76
				<tr>
77
					<td class="empty-desc" colspan="6">表格暂无数据</td>
77
					<td class="empty-desc" colspan="6">表格暂无数据</td>
78
				</tr>
78
				</tr>

+ 86 - 63
js/codehtml.js

1
$.define(["jQuery", "doc", "body"], "code", function($, doc, $body) {
1
$.define(["jQuery", "doc", "body", "util"], "code", function($, doc, $body, util) {
2
	/**
2
	/**
3
	 * env={ ce:current Element; cd:current Data; ci:current index in
3
	 * env={ ce:current Element; cd:current Data; ci:current index in
4
	 * ListElement array[ci=index] or object[ci=key] es:Element stack; Array
4
	 * ListElement array[ci=index] or object[ci=key] es:Element stack; Array
7
	 * Aarray(function(env){}.call(elementObj={},env) }
7
	 * Aarray(function(env){}.call(elementObj={},env) }
8
	 */
8
	 */
9
	var ch_val_buider = {
9
	var ch_val_buider = {
10
			/*{{111-222-333-444}}=={k:111,h:222,p:[333,444]}   */
11
			/*{{111}}=={k:111,h:s}   */
12
			/*{{111-222}}=={k:111,h:222,p:undefined}   */
13
10
			"c": function( /* env */ ) {
14
			"c": function( /* env */ ) {
11
				return this.k;
15
				return this.k;
12
			},
16
			},
16
				if(v) return v;
20
				if(v) return v;
17
				return "";
21
				return "";
18
			},
22
			},
19
			"date": function(env) {}
23
			"_index": function(env) {
24
				return env.ci+1;
25
			}
20
		},
26
		},
21
		simpleAttrHandler = function(env) {
27
		simpleAttrHandler = function(env) {
22
			env.ce.setAttribute(this.n, this.v);
28
			env.ce.setAttribute(this.n, this.v);
57
				shell, /* {{shell}} */
63
				shell, /* {{shell}} */
58
				tmp, /* last shell */
64
				tmp, /* last shell */
59
				f /* prev is not shell */ ,
65
				f /* prev is not shell */ ,
60
				bi = nv.indexOf("{{"); /* begin shell bi = s.indexOf("{{",si) */
66
				bi = s.indexOf("{{"); /* begin shell bi = s.indexOf("{{",si) */
61
			if(bi >= 0) {
67
			if(bi >= 0) {
62
				ei = nv.indexOf("}}", bi);
63
				while(si < len) {
68
				ei = s.indexOf("}}", bi);
69
				if(ei>0){
70
				while(true) {
64
					if(bi > si) {
71
					if(bi > si) {
65
						r.push({ k: s.substring(si, bi), h: "c" });
72
						r.push({ k: s.substring(si, bi), h: "c" });
66
						f = true;
73
						f = true;
79
					if(bi < 0) { strSplit_s(r, s.substring(si), f); return r; }
86
					if(bi < 0) { strSplit_s(r, s.substring(si), f); return r; }
80
					ei = s.indexOf("}}", bi);
87
					ei = s.indexOf("}}", bi);
81
					if(ei < 0) { strSplit_s(r, s.substring(si), f); return r; }
88
					if(ei < 0) { strSplit_s(r, s.substring(si), f); return r; }
82
				}
89
				}}
83
			}
90
			}
84
			return s;
91
			return s;
85
		},
92
		},
86
		strCompile = function(s) {
93
		strCompile = function(s) {
87
			var r = strSplit(s);
94
			var r = strSplit(s);
88
			if(typeof s != "string") {
95
			if(typeof r != "string") {
89
				return r.length > 1 ? r : r[0];
96
				return r.length > 1 ? r : r[0];
90
				/*
97
				/*
91
				 * [{k:"",h:"",p:[]},...] :
98
				 * [{k:"",h:"",p:[]},...] :
98
			env.ce.setAttribute(this.n, this.v);
105
			env.ce.setAttribute(this.n, this.v);
99
		},
106
		},
100
		singleAttrHand = function(env) {
107
		singleAttrHand = function(env) {
101
			env.ce.setAttribute(this.n, env.sh[this.h].call(this.v, env));
108
			env.ce.setAttribute(this.n, env.sh[this.v.h].call(this.v, env));
102
		},
109
		},
103
		arrayAttrHand = function(env) {
110
		arrayAttrHand = function(env) {
104
			var item, ret = [],
111
			var item, ret = [],
124
			}
131
			}
125
			return ret;
132
			return ret;
126
		},
133
		},
127
		simpleTextHand = function(env) {
128
			env.ce.appendChild(doc.createTextNode(this.v));
129
		},
130
		singleTextHand = function(env) {
131
			env.ce.appendChild(doc.createTextNode(env.sh[this.h].call(this.v, env)));
132
		},
133
		arrayTextHand = function(env) {
134
			var item, ret = [],
135
				vs = this.v,
136
				len = vs.length;
137
			for(var i = 0; i < len; ++i) {
138
				item = vs[i];
139
				ret.push(env.sh[item.h].call(item, env));
140
			}
141
			env.ce.appendChild(doc.createTextNode(ret.join("")));
142
		},
143
		/* ret.h(env); textNode compiler */
134
		/* ret.h(env); textNode compiler */
144
		textCompile = function(s /* s = textNode.nodeValue */ ) {
135
		textCompile = function(s /* s = textNode.nodeValue */ ) {
145
			var len = s.length,
136
			var len = s.length,
146
				ret = { v: s, h: "_t" };
137
				ret = { v: s, h: "_t" };
147
			if(len > 4) {
138
			if(len > 4) {
148
				s = textCompile(s);
139
				s = strCompile(s);
149
				if(typeof s != "string") {
140
				if(typeof s != "string") {
150
					ret.v = s;
141
					ret.v = s;
151
					// is Array
142
					// is Array
158
			/* simpleTextHand= */
149
			/* simpleTextHand= */
159
			"_t": function(env) { env.ce.appendChild(doc.createTextNode(this.v)); },
150
			"_t": function(env) { env.ce.appendChild(doc.createTextNode(this.v)); },
160
			/* singleTextHand= */
151
			/* singleTextHand= */
161
			"_st": function(env) { env.ce.appendChild(doc.createTextNode(env.sh[this.h].call(this.v, env))); },
152
			"_st": function(env) { env.ce.appendChild(doc.createTextNode(env.sh[this.v.h].call(this.v, env))); },
162
			/* arrayTextHand= */
153
			/* arrayTextHand= */
163
			"_at": function(env) {
154
			"_at": function(env) {
164
				var item, ret = [],
155
				var item, ret = [],
183
				}
174
				}
184
				for(var i = 0; i < es.length; ++i) {
175
				for(var i = 0; i < es.length; ++i) {
185
					item = es[i];
176
					item = es[i];
186
					env.dir(item.h).call(item, env);
177
					env.dir[item.h].call(item, env);
187
				}
178
				}
188
				env.ce = env.es.pop();
179
				env.ce = env.es.pop();
189
			},
180
			},
206
					env.cd = env.ds.pop();
197
					env.cd = env.ds.pop();
207
				} else if(data && data.length) {
198
				} else if(data && data.length) {
208
					env.is.push(env.ci);
199
					env.is.push(env.ci);
200
					env.ds.push(data);
209
					for(var i = 0; i < data.length; ++i) {
201
					for(var i = 0; i < data.length; ++i) {
210
						env.ci = i;
202
						env.ci = i;
203
						env.cd = data[i];
211
						hand.call(this, env);
204
						hand.call(this, env);
212
					}
205
					}
206
					env.cd=env.ds.pop();
213
					env.ci = env.is.pop();
207
					env.ci = env.is.pop();
214
				}
208
				}
215
			},
209
			},
210
			"array.empty":function(env){
211
				if((!env.cd) || (!env.cd.length)){
212
					env.dir["_"].call(this,env);
213
				}
214
			},
216
			"each": function(env) {
215
			"each": function(env) {
217
				var hand = env.dir["_"],
216
				var hand = env.dir["_"],
218
					as = this.as,
217
					as = this.as,
231
					env.cd = env.ds.pop();
230
					env.cd = env.ds.pop();
232
				} else if(data) {
231
				} else if(data) {
233
					env.is.push(env.ci);
232
					env.is.push(env.ci);
233
					env.ds.push(data);
234
					for(var key in data) {
234
					for(var key in data) {
235
						env.ci = k;
235
						env.ci = k;
236
						env.cd = data[key];
236
						hand.call(this, env);
237
						hand.call(this, env);
237
					}
238
					}
239
					env.cd = env.ds.pop();
238
					env.ci = env.is.pop();
240
					env.ci = env.is.pop();
239
				}
241
				}
240
			},
242
			},
288
				}
290
				}
289
			}
291
			}
290
		},
292
		},
291
		childCompile = function(chs, ret) {
292
			var lisT = false;
293
			for(var i = 0; i < chs.length; ++i) {
294
				var ch = chs[i];
295
				if(ch.nodeType == 1) {
296
					if(lisT) {
297
						ret.push(textCompile(s));
293
		childCompile = function(chs) {
294
			var ret = [],stack = [],ev, as, es, attrs, ch, ele;
295
			hObj = { r: ret, i: 0, c: chs, t: false, s: "", l: chs.length };
296
			while(hObj) {
297
				while(hObj.i < hObj.l) {
298
					ele = hObj.c[hObj.i++];
299
					if(ele.nodeType == 1) {
300
						if(hObj.t) {
301
							hObj.r.push(textCompile(hObj.s));
302
						}
303
						hObj.t = false;
304
						attrs = ele.attributes;
305
						ch = (ele.getAttribute("ch-dir") || "_").split("-");
306
						ev = { n: ele.nodeName, h: ch.shift(), p: ch };
307
						as = ev.as = [];
308
						es = ev.es = [];
309
						hObj.r.push(ev);
310
						for(var i = 0; i < attrs.length; ++i) {
311
							as.push(attrCompile(attrs[i]));
312
						}
313
						as = ele.childNodes.length;
314
						if(as) {
315
							stack.push(hObj);
316
							hObj = { r: es, i: 0, c: ele.childNodes, t: false, s: "", l: as };
317
							stack.push(hObj);
318
							break;
319
						}
320
						
321
					} else if(ele.nodeType == 3) {
322
						hObj.s = hObj.t ? (hObj.s + ele.nodeValue) : ele.nodeValue;
323
						if(hObj.i>=hObj.l){
324
							hObj.r.push(textCompile(hObj.s));							
325
						}else{
326
							hObj.t = true;
327
						}
298
					}
328
					}
299
					ret.push(eleCompile(ch));
300
					lisT = false;
301
				} else if(ch.nodeType == 3) {
302
					s = listT ? (s + ch.nodeValue) : ch.nodeValue;
303
					listT = true;
304
				}
329
				}
330
				hObj = stack.pop();
305
			}
331
			}
306
			if(listT) {
307
				ret.push(textCompile(s));
308
			}
309
		},
310
		/* ret.h(env) Element compiler */
311
		eleCompile = function(ele) {
312
			var attrs = ele.attributes,
313
				cdir = ele.getAttribute("ch-dir") || "_",
314
				ret = { n: ele.node },
315
				as = ret.as = [],
316
				es = ret.es = [],
317
				lisT, s, ch;
318
			ch = cdir.split("-");
319
			ret.h = ch.shift();
320
			if(ch.length) ret.p = ch;
321
			for(var i = 0; i < attrs.length; ++i) {
322
				as.push(attrCompile(attrs[i]));
323
			}
324
			childCompile(ele.children, ret.es);
325
			return tet;
332
			return ret;
326
		},
333
		},
334
		//		/* ret.h(env) Element compiler */
335
		//		eleCompile = function(ele) {
336
		//			var attrs = ele.attributes,
337
		//				cdir = ele.getAttribute("ch-dir") || "_",
338
		//				ret = { n: ele.nodeName },
339
		//				as = ret.as = [],
340
		//				es = ret.es = [],
341
		//				lisT, s, ch;
342
		//			ch = cdir.split("-");
343
		//			ret.h = ch.shift();
344
		//			if(ch.length) ret.p = ch;
345
		//			for(var i = 0; i < attrs.length; ++i) {
346
		//				as.push(attrCompile(attrs[i]));
347
		//			}
348
		//			childCompile(ele.childNodes, ret.es);
349
		//			return ret;
350
		//		},
327
		parseElement = function(ele) {
351
		parseElement = function(ele) {
328
			var env = { sh: {}, dir: {} },
352
			var env = { sh: {}, dir: {} },
329
				chs = [];
330
			childCompile(ele.children, chs);
353
				chs = childCompile(ele.childNodes);
331
			$.extend(env.sh, ch_val_buider);
354
			$.extend(env.sh, ch_val_buider);
332
			$.extend(env.dir, ch_dir_container);
355
			$.extend(env.dir, ch_dir_container);
333
			return {
356
			return {
356
				}
379
				}
357
			};
380
			};
358
		},
381
		},
359
		parseCode(ele) = function(ele) {
382
		parseCode = function(ele) {
360
			var hand = parseElement(ele),
383
			var hand = parseElement(ele),
361
				$ele = $(ele),
384
				$ele = $(ele),
362
				bh = util.nochange,
385
				bh = util.nochange,
404
		};
427
		};
405
	return {
428
	return {
406
		"parse": parseElement,
429
		"parse": parseElement,
407
		"element": parseCode,
430
		"parseCode": parseCode,
408
		"template": parseHtmlTemplate
431
		"template": parseHtmlTemplate
409
	};
432
	};
410
});
433
});

+ 379 - 2
js/common.js

21
		try {
21
		try {
22
			var md = factory.apply(win, dm);
22
			var md = factory.apply(win, dm);
23
			mds[id] = md;
23
			mds[id] = md;
24
			return md;
24
		} catch(err) {
25
		} catch(err) {
25
			throw new Error("build model[" + id + "] error");
26
			throw new Error("build model[" + id + "] error:"+err);
26
		}
27
		}
27
	};
28
	};
28
	$.use = function(deps, handle) {
29
	$.use = function(deps, handle) {
35
				throw new Error("no found model [" + deps[i] + "]");
36
				throw new Error("no found model [" + deps[i] + "]");
36
			}
37
			}
37
		}
38
		}
38
		handle.apply(win, dm);
39
		return handle.apply(win, dm);
39
	};
40
	};
41

42
	$.define(["jQuery", "body", "win", "doc"], "util", function($,body, win, doc) {
43
		var rclass = /[\t\r\n\f]/g,
44
			noop = function() {},
45
			infoDiv = $("#g_info"),
46
			errDiv = $("#g_err"),
47
			warnDiv = $("#g_warn"),
48
			msgDiv = $("#g_msg"),
49
			err_msg = {},
50
			layer_curr = {
51
				index: 5000000,
52
				remove: noop,
53
				css: noop
54
			},
55
			layer_remove = function() {
56
				this.shade.remove();
57
				this.ctn.empty();
58
				this.ctn.remove();
59
				this.prev.css("display", "block");
60
				layer_curr = this.prev;
61
			},
62
			hideMsg = function(e) {
63
				$(this).parent().hide();
64
			},
65
			bindHide = function($p) {
66
				$p.find(".click-hide-parent").on("click", hideMsg);
67
			},
68
			fillContent = function($c /* child node [String|Function|jQObj] */ , $p) {
69
				if($c) {
70
					if(typeof $c === "string") {
71
						$p.html($c);
72
					} else if(typeof $c == "function") {
73
						$c.call($p);
74
					} else if($c.jquery) {
75
						$p.append($c);
76
					}
77
				}
78
			},
79
			modal = function(ctn) {
80
				var inx = layer_curr.index + 2,
81
					ly = {
82
						index: inx,
83
						remove: layer_remove,
84
						prev: layer_curr
85
					};
86
				ly.shade = $(
87
					"<div class='layer-shade layer-" + inx + "' style='z-index:" +
88
					inx + ";'></div>").appendTo(body);
89
				++inx;
90
				ly.ctn = $(
91
					"<div class='layer-ctn layer-" + inx + "' style='z-index:" +
92
					inx + ";'></div>").appendTo(body);
93
				ly.prev = layer_curr;
94
				layer_curr = ly;
95
				fillContent(ctn, ly.ctn);
96
				return ly;
97
			},
98
			rmModal = function() {
99
				layer_curr.remove();
100
			},
101

102
			// function error message
103
			errMsg = function($c, $t) {
104
				var $e = $(
105
						"<div class='err-ctn'><i class='icon click-hide-parent'></i></div>")
106
					.appendTo(errDiv);
107
				$("<span></span>").appendTo($e).html($c);
108
				bindHide($e);
109
				setTimeout(function() {
110
					$e.remove()
111
				}, $t ? $t : 10000);
112
			},
113
			// function warn message
114
			warnMsg = function($c, $t) {
115
				var $w = $(
116
						"<div class='warn-ctn'><i class='icon click-hide-parent'></i></div>")
117
					.appendTo(warnDiv);
118
				$("<span></span>").appendTo($w).html($c);
119
				bindHide($w);
120
				setTimeout(function() {
121
					$w.remove()
122
				}, $t ? $t : 3000);
123
			},
124
			msg = function($c, $t) {
125
				var $m = $(
126
						"<div class='warn-ctn'><i class='icon click-hide-parent'></i></div>")
127
					.appendTo(warnDiv);
128
				$("<span></span>").appendTo($w).html($c);
129
				bindHide($m);
130
				setTimeout(function() {
131
					$w.remove()
132
				}, $t ? $t : 3000);
133
			},
134
			loadref = 0,
135
			loadingDiv = $("#g_loading"),
136
			loading = function() {
137
				++loadref;
138
				if(loadref === 1) {
139
					loadingDiv.show()
140
				}
141
			},
142
			unLoading = function() {
143
				--loadref;
144
				if(loadref === 0) {
145
					loadingDiv.hide()
146
				}
147
			},
148
			alertMsg = function(title, content, hand) {
149
				if(content) {
150
					if($.isFunction(content)) {
151
						hand = content;
152
						content = title;
153
						title = "提示";
154
					}
155
				} else {
156
					content = title;
157
					title = "提示";
158
				}
159
				hand = hand || noop;
160
				var ly = modal('<div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h4 class="modal-title"></h4></div><div class="modal-body"><p></p></div><div class="modal-footer"><button type="button" class="btn">关闭</button></div></div></div>');
161
				ly.ctn.find(".modal-title").text(title);
162
				$c = ly.ctn.find("p").text(content);
163
				ly.ctn.find("button").on("click", function() {
164
					rmModal();
165
					hand();
166
				});
167
			},
168
			bm_addBtn = function($p, $cp, $h) {
169
				var $b = $('<button type="button" class="btn"></button>').appendTo($p);
170
				$b.text($cp).on("click", function() {
171
					rmModal();
172
					$h();
173
				});
174
			},
175
			boxMsg = function(obj) {
176
				var ly = modal('<div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h4 class="modal-title"></h4></div><div class="modal-body"><p></p></div><div class="modal-footer"></div></div></div>');
177
				ly.ctn.find(".modal-title").text(obj.title || "确认");
178
				ly.ctn.find("p").text(obj.content);
179
				var m_footer = ly.ctn.find(".modal-footer");
180
				for(var i = 0; i < obj.btns.length; ++i) {
181
					bm_addBtn(m_footer, obj.btns[i].caption || "no name", obj.btns[i].hand ||
182
						noop);
183
				}
184
			},
185
			serInArray = function(val, key, ret) {
186
				var t = $.type(val);
187
				if("boolean" === t) {
188
					ret.push(key + "=" + (val ? "1" : "0"));
189
				} else if("string" === t) {
190
					if(val) {
191
						ret.push(key + "=" + encodeURIComponent(val));
192
					}
193
				} else if("number" === t) {
194
					ret.push(key + "=" + val);
195
				} else {
196
					ret.push(key + "=" + encodeURIComponent(JSON.stringify(val)));
197
				}
198
			},
199
			serialize = function(obj) {
200
				var ret = [];
201
				if(obj) {
202
					for(key in obj) {
203
						var val = obj[key];
204
						var t = $.type(val);
205
						if("boolean" === t) {
206
							ret.push(key + "=" + (val ? "1" : "0"));
207
						} else if("string" === t) {
208
							if(val) {
209
								ret.push(key + "=" + encodeURIComponent(val));
210
							}
211
						} else if("number" === t) {
212
							ret.push(key + "=" + val);
213
						} else if("array" === t) {
214
							val.forEach(function(item) {
215
								serInArray(item, key, ret);
216
							});
217
						} else if("object" === t) {
218
							ret.push(key + "=" + encodeURIComponent(JSON.stringify(val)));
219
						}
220
					}
221
				}
222
				return ret.join("&");
223
			},
224
			g_def_err_hand = function(ep) {
225
				errMsg("http access error:\r\n" + JSON.stirngify(ep));
226
			},
227
			g_err = {
228
				"defErrHand": function(ep) {
229

230
				},
231
				"0": "未定义的错误",
232
				"1": function() {
233
					window.location.href = "login.html#" + encodeURIComponent(window.location.href);
234
				},
235
			},
236
			/**
237
			 * ep={code:"",msg:"",detailMsg:"",url:""} pa=function(code,msg,detailMsg)
238
			 * pa=boolean
239
			 */
240
			ajaxErrHand = function(errparam, errHand) {
241
				if(errHand) {
242
					var pt = $.type(errHand);
243
					if(pt == "booean") {
244
						g_def_err_hand(errparam);
245
					} else if(pt == "function") {
246
						errHand(errparam);
247
					} else {
248
						var ph = errHand[errparam.code] || g_err[errparam.code] || errHand["defErrHand"] ||
249
							g_err["defErrHand"];
250
						if(typeof ph === "string") {
251
							errMsg(ph);
252
						} else {
253
							ph(errparam);
254
						}
255
					}
256
				} else {
257
					var ph = g_err[errparam.code] || g_err["defErrHand"];
258
					if(typeof ph === "string") {
259
						errMsg(ph);
260
					} else {
261
						ph(errparam);
262
					}
263
				}
264
			},
265
			ajaxAccess = function(method, pUrl, pData, sh, eh, config) {
266
				config = config || {};
267
				if(false !== config.mask) {
268
					loading();
269
				}
270
				config.traditional = true;
271
				config.type = method;
272
				config.url = pUrl, config.data = pData;
273
				config.contentType = method === "put" ? "application/json" : "application/x-www-form-urlencoded";
274
				config.success = function(rd) {
275
					if(rd.success) {
276
						sh(rd.data);
277
					} else {
278
						rd.code = "" + rd.code;
279
						rd.url = pUrl;
280
						ajaxErrHand(rd, eh);
281
					}
282
				};
283
				config.error = function(jqXHR, textStatus, errorThrown) {
284
					ajaxErrHand({
285
						code: "err_" + (textStatus || ""),
286
						msg: textStatus,
287
						detailMsg: textStatus,
288
						xhr: jqXHR,
289
						eObj: errorThrown,
290
						url: pUrl
291
					}, eh);
292
				};
293
				$.ajax(config).always(false !== config.mask ? unLoading : noop);
294
			},
295
			buildElement = function(pe, obj) {
296
				if($.isArray(obj)) {
297
					obj.forEach(function(item) {
298
						buildElement(pe, item);
299
					});
300
				} else {
301
					var e;
302
					if(typeof obj === 'string') {
303
						e = doc.createTextNode(obj);
304
						pe.appendChild(e);
305
					} else {
306
						e = doc.createElement(obj.tn);
307
						pe.appendChild(e);
308
						if(obj.attrs && obj.attrs.length) {
309
							obj.attrs.forEach(function(attr) {
310
								e.setAttribute(attr.an, attr.av);
311
							});
312
						}
313
						if(obj.chs && obj.chs.length) {
314
							obj.chs.forEach(function(ch) {
315
								buildElement(e, ch);
316
							});
317
						}
318
					}
319
				}
320
			},
321

322
		ret= {
323
			classCheck: function(ele, clses) {
324
				var ret = {},
325
					cs = " " + (ele.getAttribute("class") || "") + " ",
326
					cls;
327
				for(var i = 0; i < clses.length; ++i) {
328
					var cls = clses[i];
329
					ret[cls] = cs.indexOf(" " + cls + " ") > -1;
330
				}
331
				return ret;
332
			},
333
			showModal: modal,
334
			closeModal: rmModal,
335
			showLoading: loading,
336
			hideLoading: unLoading,
337
			listModalIndex: function() {
338
				return layer_curr.index + 1;
339
			},
340
			error: errMsg,
341
			warn: warnMsg,
342
			msg: msg,
343
			alert: alertMsg,
344
			boxMsg: boxMsg,
345
			confirm: function(msg, yes, no) {
346
				bm({
347
					content: msg,
348
					btns: [{
349
						caption: "取消",
350
						hand: no || noop
351
					}, {
352
						caption: "确认",
353
						hand: yes
354
					}]
355
				});
356
			},
357
			get: function(url, data, sh, eh, config) {
358
				ajaxAccess("GET", url, data, sh, eh, config);
359
			},
360
			post: function(url, data, sh, eh, config) {
361
				ajaxAccess("POST", url, data, sh, eh, config);
362
			},
363
			put: function(url, data, sh, eh, config) {
364
				ajaxAccess("PUT", url, data ? JSON.stringify(data) : null, sh, eh,
365
					config);
366
			},
367
			del: function(url, sh, eh, pObj) {
368
				ajaxAccess("DELETE", url, null, sh, eh, pOjb);
369
			},
370
			noop: noop,
371
			nochange: function(d) { return d },
372
			returnTrue: function() {
373
				return true;
374
			},
375
			returnFalse: function() {
376
				return false;
377
			},
378
			addRules: function(target, rule) {
379
				var te = $.type(rule);
380
				if("function" === te) {
381
					target.push(rule);
382
				} else if("array" === te) {
383
					target.concat(rule);
384
				}
385
			},
386
			validate: function(rules, obj) {
387
				for(var i = 0; i < rules.length; ++i) {
388
					var ret = rules[i](obj);
389
					if(ret) {
390
						if(obj.invalid) {
391
							obj.invalid(ret);
392
						}
393
						return false;
394
					}
395
				}
396
				if(obj.valid) {
397
					obj.valid();
398
				}
399
				return true;
400
			},
401
			valid: function($e) {
402
				$e.removeClass("invald");
403
			},
404
			invalid: function($e) {
405
				$e.addClass("invald");
406
			},
407
			appendChild: function(e, obj) {
408
				var docf = doc.createDocumentFragment();
409
				buildElement(docf, obj);
410
				e.appendChild(docf);
411
			},
412
			serialize: serialize
413
		};
414
		$.util=ret;
415
		return ret;
416
	});
40
})(jQuery, window, document);
417
})(jQuery, window, document);

+ 2 - 2
js/datagrid.js

23
					$.extend(config, options);
23
					$.extend(config, options);
24
				}
24
				}
25
				return {
25
				return {
26
					code: config.c;
27
					form: config f;
26
					code:config.c,
27
					form:config.f,
28
					load: function() {
28
					load: function() {
29
						config.f.doGet(config.uri, function(data) {
29
						config.f.doGet(config.uri, function(data) {
30
							config.c.val(data);
30
							config.c.val(data);

+ 5 - 4
js/dict.js

84
			},
84
			},
85
			doTransfer: function() {
85
			doTransfer: function() {
86
				$(".hand-dict").each(function() {
86
				$(".hand-dict").each(function() {
87
					var $this = $this;
88
					var dict = $this.attr("dict") || $this.attr("dictCode"),
89
						code = $this.attr("code") || $this.attr("itemCode");
87
					var $e = $(this);
88
					var dict = $e.attr("dict") || $e.attr("dictCode"),
89
						code = $e.attr("code") || $e.attr("itemCode");
90
					if(dict && code) {
90
					if(dict && code) {
91
						apply(dict, function(items) {
91
						apply(dict, function(items) {
92
							var cp = getCap(items, code);
92
							var cp = getCap(items, code);
97
							}
97
							}
98
						});
98
						});
99
					}
99
					}
100
					$this.removeClass("hand-dict");
100
					$e.removeClass("hand-dict");
101
				});
101
				});
102
			}
102
			}
103
		};
103
		};
104
		$.dict=ret;
104
	return ret;
105
	return ret;
105
});
106
});

+ 1 - 1
js/form.js

134
					},
134
					},
135
					doPut: function(url, sh, eh, config) {
135
					doPut: function(url, sh, eh, config) {
136
						if(this.validate()) {
136
						if(this.validate()) {
137
							util.put(url, serialize(this.val()), sh, eh, config);
137
							util.put(url, this.val(), sh, eh, config);
138
						}
138
						}
139
					}
139
					}
140
				};
140
				};

+ 5 - 5
js/model/sys/org/index.js

3

3

4
	return {
4
	return {
5
		main: function() {
5
		main: function() {
6
			var root = spa.mainEle.children(".sys_org_index");
6
			var root = spa.mainEle().children(".sys_org_index");
7
			var pdg = root.pdg();
7
			var pdg = root.pdg();
8
			pdg.codeRef.shell("showDay", function(data, key) {
9
				if(data && data[key]) {
10
					var day = data[key];
8
			pdg.code.shell("showDay", function(env) {
9
				if(env.cd && env.cd[this.k]) {
10
					var day = env.cd[this.k];
11
					return day.substring(0, 4) + "年" + day.substring(4, 6) + "月" + day.substring(6, 8) + "日";
11
					return day.substring(0, 4) + "年" + day.substring(4, 6) + "月" + day.substring(6, 8) + "日";
12
				}
12
				}
13
				return "";
13
				return "";
14
			});
14
			});
15
			pdg.codeRef.addValueListener($.util.dictDisplay);
15
			pdg.code.listen($.dict.doTransfer);
16
			root.find(".opt-query").on("click", function() {
16
			root.find(".opt-query").on("click", function() {
17
				//				console.log("dt load")
17
				//				console.log("dt load")
18
				pdg.load();
18
				pdg.load();

+ 4 - 4
js/pageDataGrid.js

5
		derr = {},
5
		derr = {},
6
		dajaxCfg = {},
6
		dajaxCfg = {},
7
		configPageIndex = function(fn, data) {
7
		configPageIndex = function(fn, data) {
8
			if(fn && data  && data.data && data.length) {
8
			if(fn && data  && data.data && data.data.length) {
9
				var b = (data.pageNo - 1) * data.pageSize;
9
				var b = (data.pageNo - 1) * data.pageSize;
10
				data.data.forEach(function(obj) {
10
				data.data.forEach(function(obj) {
11
					++b;
11
					++b;
30
					$.extend(config, options);
30
					$.extend(config, options);
31
				};
31
				};
32
				var ret = {
32
				var ret = {
33
					code: config.c;
34
					form: config f;
33
					code: config.c,
34
					form: config.f,
35
					load: function() {
35
					load: function() {
36
						if(config.f.validate()) {
36
						if(config.f.validate()) {
37
							config.cache = config.f.val();
37
							config.cache = config.f.val();
58
					}
58
					}
59
				};
59
				};
60
				config.p.onGo(function(no) {
60
				config.p.onGo(function(no) {
61
					config.pageNo = no;
61
					config.cache[config.pnn] = no;
62
					ret.reload();
62
					ret.reload();
63
				});
63
				});
64
				return ret;
64
				return ret;

+ 3 - 3
js/pager.js

12
			ret = [],
12
			ret = [],
13
			clses, dpn, rpn;
13
			clses, dpn, rpn;
14

14

15
		ret.push(li(no > 1 ? "active" ? "disabled", "«", no - 1));
16
		ret.push(li(no === 1 ? "curr" ? "active", "1", 1));
15
		ret.push(li(no > 1 ? "active":"disabled", "«", no - 1));
16
		ret.push(li(no === 1 ? "curr" :"active", "1", 1));
17

17

18
		if(no > 4) {
18
		if(no > 4) {
19
			ret.push(sli);
19
			ret.push(sli);
35
		if(pages != no) {
35
		if(pages != no) {
36
			ret.push(li("active", pages, pages));
36
			ret.push(li("active", pages, pages));
37
		}
37
		}
38
		ret.push(li(no != pages ? "active" ? "disabled", "»", no + 1));
38
		ret.push(li(no != pages ? "active" :"disabled", "»", no + 1));
39
		return ret;
39
		return ret;
40

40

41
	}
41
	}

+ 12 - 9
js/spa.js

43
			}, cfg.error, cfg.ajaxCfg);
43
			}, cfg.error, cfg.ajaxCfg);
44
		},
44
		},
45
		build_menu = function(menu) {
45
		build_menu = function(menu) {
46
			if(menuEle && emnuEle.length && menu && menu.length) {
46
			if(menuEle && menuEle.length && menu && menu.length) {
47
				var ul = { tn: "ul", attrs: [{ an: "class", av: "nav nav-root" }], chs: [] };
47
				var ul = { tn: "ul", attrs: [{ an: "class", av: "nav nav-root" }], chs: [] };
48
				build_menu_item(ul.chs, menu);
48
				build_menu_item(ul.chs, menu);
49
				menuEle.empty();
49
				menuEle.empty();
80
				chses.push(lia);
80
				chses.push(lia);
81
				var ic = "icon-" + (item.icon || (item.res ? "book" : "branch"));
81
				var ic = "icon-" + (item.icon || (item.res ? "book" : "branch"));
82
				lia.chs.push({ tn: "i", attrs: [{ an: "class", av: ic }] });
82
				lia.chs.push({ tn: "i", attrs: [{ an: "class", av: ic }] });
83
				lia.push(item.caption);
83
				lia.chs.push(item.caption);
84
				var lac = "";
84
				var lac = "";
85
				if(item.res) {
85
				if(item.res) {
86
					lia.attrs.push({ an: "res", av: item.res });
86
					lia.attrs.push({ an: "res", av: item.res });
225
					util.showLoading();
225
					util.showLoading();
226
				}
226
				}
227
				try {
227
				try {
228
					scriptCache[model.script] = model.factory = factoryBuilder();
228
					scriptCache[model.script] = model.factory = factoryBuilder(spa);
229
					model.state = 31;
229
					model.state = 31;
230
					if(cfg.mask) {
230
					if(cfg.mask) {
231
						util.hideLoading();
231
						util.hideLoading();
383
		},
383
		},
384
		build = function(config) {
384
		build = function(config) {
385
			$.extend(cfg, config);
385
			$.extend(cfg, config);
386
			resUri = cfg.resUri || body.attr("resUri");
387
			menuUri = cfg.resUri || body.attr("menuUri");
386
			resUri = cfg.resUri || body.attr("resource");
387
			menuUri = cfg.menuUri || body.attr("menu");
388
			mainEle = cfg.mainEle || $(".spa-main");
388
			mainEle = cfg.mainEle || $(".spa-main");
389
			menuEle = cfg.menuEle || $(".spa-menu");
389
			menuEle = cfg.menuEle || $(".spa-menu");
390
			resCache = cfg.resCache || resCache;
390
			resCache = cfg.resCache || resCache;
392
			htmlCache["#"] = "#";
392
			htmlCache["#"] = "#";
393
			if(cfg.loadEnabled) load_res();
393
			if(cfg.loadEnabled) load_res();
394
		},
394
		},
395
		ret = {
395
	    spa = {
396
			build: build,
396
			build: build,
397
			closeModal: closeModal,
397
			closeModal: closeModal,
398
			getLastModalModel: getLastModalModel,
398
			getLastModalModel: getLastModalModel,
399
			getLastModalCtn: getLastModalCtn,
399
			getLastModalCtn: getLastModalCtn,
400
			getLastModalIndex: getLastModalIndex,
400
			getLastModalIndex: getLastModalIndex,
401
			showMain: showMain,
401
			showMain: showMain,
402
			showModal: showModal
402
			showModal: showModal,
403
			mainEle:function(){
404
				return mainEle;
405
			}
403
		};
406
		};
404
		$.spa=ret;
405
	return ret;
407
		$.spa=spa;
408
	return spa;
406
});
409
});

+ 2 - 2
js/text.js

35
				name: n,
35
				name: n,
36
				get: function() {
36
				get: function() {
37
					if(!cls[showOnly]) {
37
					if(!cls[showOnly]) {
38
						var vd = ve.val();
38
						var vd = cls[trim]?ve.val().trim():ve.val();
39
						if(vd) {
39
						if(vd) {
40
							if(cls[tInt]) {
40
							if(cls[tInt]) {
41
								vd = parseInt(vd);
41
								vd = parseInt(vd);
58
				},
58
				},
59
				validate: function() {
59
				validate: function() {
60
					if(cls[required]) {
60
					if(cls[required]) {
61
						if(!ve.val()) {
61
						if(!ve.val().trim()) {
62
							return "不可为空或空字符串";
62
							return "不可为空或空字符串";
63
						}
63
						}
64
					}
64
					}

+ 2 - 2
js/textarea.js

32
				name: n,
32
				name: n,
33
				get: function() {
33
				get: function() {
34
					if(!cls[showOnly]) {
34
					if(!cls[showOnly]) {
35
						var vd = ve.val();
36
						return vd?(cls[trim]?vd.trim():vd):undefined;
35
						var vd = cls[trim]?ve.val().trim():ve.val();
36
						return vd?vd:undefined;
37
					}
37
					}
38
				},
38
				},
39
				set: function(data) {
39
				set: function(data) {

+ 0 - 371
js/util.js

1
$.define(["jQuery", "body", "win","doc"], "util", function($, $body, win,doc) {
2
	var rclass = /[\t\r\n\f]/g,
3
		noop = function() {},
4
		infoDiv = $("#g_info"),
5
		errDiv = $("#g_err"),
6
		warnDiv = $("#g_warn"),
7
		msgDiv = $("#g_msg"),
8
		err_msg = {},
9
		layer_curr = {
10
			index: 5000000,
11
			remove: noop,
12
			css: noop
13
		},
14
		layer_remove = function() {
15
			this.shade.remove();
16
			this.ctn.empty();
17
			this.ctn.remove();
18
			this.prev.css("display", "block");
19
			layer_curr = this.prev;
20
		},
21
		hideMsg = function(e) {
22
			$(this).parent().hide();
23
		},
24
		bindHide = function($p) {
25
			$p.find(".click-hide-parent").on("click", hideMsg);
26
		},
27
		fillContent = function($c /* child node [String|Function|jQObj] */ , $p) {
28
			if($c) {
29
				if(typeof $c === "string") {
30
					$p.html(p);
31
				} else if(typeof p == "function") {
32
					$c.call($p);
33
				} else if($c.jquery) {
34
					$p.append($c);
35
				}
36
			}
37
		},
38
		modal = function(ctn) {
39
			var inx = layer_curr.index + 2,
40
				ly = {
41
					index: inx,
42
					remove: layer_remove,
43
					prev: layer_curr
44
				};
45
			ly.shade = $(
46
				"<div class='layer-shade layer-" + inx + "' style='z-index:" +
47
				inx + ";'></div>").appendTo(body);
48
			++inx;
49
			ly.ctn = $(
50
				"<div class='layer-ctn layer-" + inx + "' style='z-index:" +
51
				inx + ";'></div>").appendTo(body);
52
			ly.prev = layer_curr;
53
			layer_curr = ly;
54
			fillContent(ctn, ly.ctn);
55
			return ly;
56
		},
57
		rmModal = function() {
58
			layer_curr.remove();
59
		},
60
61
		// function error message
62
		errMsg = function($c, $t) {
63
			var $e = $(
64
					"<div class='err-ctn'><i class='icon click-hide-parent'></i></div>")
65
				.appendTo(errDiv);
66
			$("<span></span>").appendTo($e).html($c);
67
			bindHide($e);
68
			setTimeout(function() {
69
				$e.remove()
70
			}, $t ? $t : 10000);
71
		},
72
		// function warn message
73
		warnMsg = function($c, $t) {
74
			var $w = $(
75
					"<div class='warn-ctn'><i class='icon click-hide-parent'></i></div>")
76
				.appendTo(warnDiv);
77
			$("<span></span>").appendTo($w).html($c);
78
			bindHide($w);
79
			setTimeout(function() {
80
				$w.remove()
81
			}, $t ? $t : 3000);
82
		},
83
		msg = function($c, $t) {
84
			var $m = $(
85
					"<div class='warn-ctn'><i class='icon click-hide-parent'></i></div>")
86
				.appendTo(warnDiv);
87
			$("<span></span>").appendTo($w).html($c);
88
			bindHide($m);
89
			setTimeout(function() {
90
				$w.remove()
91
			}, $t ? $t : 3000);
92
		},
93
		loadref = 0,
94
		loadingDiv = $("#g_loading"),
95
		loading = function() {
96
			++loadref;
97
			if(loadref === 1) {
98
				loadingDiv.show()
99
			}
100
		},
101
		unLoading = function() {
102
			--loadref;
103
			if(loadref === 0) {
104
				loadingDiv.hide()
105
			}
106
		},
107
		alertMsg = function(title, content, hand) {
108
			if(content) {
109
				if($.isFunction(content)) {
110
					hand = content;
111
					content = title;
112
					title = "提示";
113
				}
114
			} else {
115
				content = title;
116
				title = "提示";
117
			}
118
			hand = hand || noop;
119
			var ly = modal('<div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h4 class="modal-title"></h4></div><div class="modal-body"><p></p></div><div class="modal-footer"><button type="button" class="btn">关闭</button></div></div></div>');
120
			ly.ctn.find(".modal-title").text(title);
121
			$c = ly.ctn.find("p").text(content);
122
			ly.ctn.find("button").on("click", function() {
123
				rmModal();
124
				hand();
125
			});
126
		},
127
		bm_addBtn = function($p, $cp, $h) {
128
			var $b = $('<button type="button" class="btn"></button>').appendTo($p);
129
			b.text($cp).on("click", function() {
130
				rmModal(), $h()
131
			});
132
		},
133
		bm = function(obj) {
134
			var ly = modal('<div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h4 class="modal-title"></h4></div><div class="modal-body"><p></p></div><div class="modal-footer"></div></div></div>');
135
			ly.ctn.find(".modal-title").text(obj.title || "确认");
136
			ly.ctn.find("p").text(obj.content);
137
			var m_footer = ly.ctn.find(".modal-footer"),
138
				btnH = function(btn) {
139
					var $btn = $('<button type="button" class="btn"></button>')
140
						.appendTo(m_footer);
141
					var caption = btn.caption || "未命名的",
142
						handler = btn.hand || noop;
143
					$btn.text(caption);
144
					$btn.on("click", function() {
145
						util.closeModalLayer();
146
						handler();
147
					});
148
				};
149
			for(var i = 0; i < obj.btns.length; ++i) {
150
				bm_addBtn(m_footer, btns[i].caption || "no name", btns[i].hand ||
151
					noop);
152
			}
153
		},
154
		serInArray=function(val,key,ret){
155
			var t = $.type(val);
156
			if("boolean"===t){
157
				ret.push(key+"="+(val?"1":"0"));
158
			}else if("string"=== t){
159
				if(val){
160
					ret.push(key+"="+encodeURIComponent(val));
161
				}
162
			}else if("number"=== t){
163
				ret.push(key+"="+val);
164
			}else{
165
				ret.push(key+"="+encodeURIComponent(JSON.stringify(val)));
166
			}
167
		},
168
		serialize=function(obj){
169
			var ret =[];
170
			if(obj){
171
			for(key in obj){
172
				var val = obj[key];
173
				var t = $.type(val);
174
				if("boolean"===t){
175
					ret.push(key+"="+(val?"1":"0"));
176
				}else if("string"=== t){
177
					if(val){
178
						ret.push(key+"="+encodeURIComponent(val));
179
					}
180
				}else if("number"=== t){
181
					ret.push(key+"="+val);
182
				}else if("array"===t){
183
					val.forEach(function(item){
184
						serInArray(item,key,ret);
185
					});
186
				}else if("object"=== t){
187
					ret.push(key+"="+encodeURIComponent(JSON.stringify(val)));
188
				}
189
			}}
190
			return ret.join("&");
191
		},
192
		g_def_err_hand = function(ep) {
193
			errMsg("http access error:\r\n" + JSON.stirngify(ep));
194
		},
195
		g_err = {
196
			"defErrHand": function(ep) {
197
198
			},
199
			"0": "未定义的错误",
200
		},
201
		/**
202
		 * ep={code:"",msg:"",detailMsg:"",url:""} pa=function(code,msg,detailMsg)
203
		 * pa=boolean
204
		 */
205
		ajaxErrHand = function(errparam, errHand) {
206
			if(errHand) {
207
				var pt = $.type(errHand);
208
				if(pt == "booean") {
209
					g_def_err_hand(errparam);
210
				} else if(pt == "function") {
211
					errHand(errparam);
212
				} else {
213
					var ph = errHand[errparam.code] || g_err[errparam.code] || errHand["defErrHand"] ||
214
						g_err["defErrHand"];
215
					if(typeof ph === "string") {
216
						errMsg(ph);
217
					} else {
218
						ph(errparam);
219
					}
220
				}
221
			}
222
		},
223
		ajaxAccess = function(method, pUrl, pData, sh, eh, config) {
224
			config = config || {};
225
			if(false !== config.mask){
226
				loading();
227
			}
228
			config.traditional = true;
229
			config.type = method;
230
			config.url = pUrl, config.data = pData;
231
			config.contentType = method === "put" ? "application/json" : "application/x-www-form-urlencoded";
232
			config.success = function(rd) {
233
				if(rd.success) {
234
					sh(rd.data);
235
				} else {
236
					rd.code = "" + rd.code;
237
					rd.url = pUrl;
238
					ajaxErrHand(rd, eh);
239
				}
240
			};
241
			config.error = function(jqXHR, textStatus, errorThrown) {
242
				ajaxErrHand({
243
					code: "err_"+(textStatus || ""),
244
					msg: textStatus,
245
					detailMsg: textStatus,
246
					xhr: jqXHR,
247
					eObj: errorThrown,
248
					url: pUrl
249
				}, eh);
250
			};
251
			$.ajax(config).always(false !== config.mask ? unLoading : noop);
252
		},
253
		buildElement = function(pe, obj) {
254
			if($.isArray(obj)) {
255
				obj.forEach(function(item) {
256
					buildElement(pe, item);
257
				});
258
			}else{
259
			var e;
260
			if(typeof obj === 'string') {
261
				e = doc.createTextNode(obj);
262
				pe.appendChild(e);
263
			} else {
264
				e = doc.createElement(obj.tn);
265
				pe.appendChild(e);
266
				if(obj.attrs && obj.attrs.length) {
267
					obj.attrs.forEach(function(attr) {
268
						e.setAttribute(attr.an, attr.av);
269
					});
270
				}
271
				if(obj.chs && obj.chs.length) {
272
					obj.chs.forEach(function(ch) {
273
						buildElement(e, ch);
274
					});
275
				}
276
			}}
277
		};
278
279
	return {
280
		classCheck: function(ele, clses) {
281
			var ret = {},
282
				cs = " " + (ele.getAttribute("class") || "") + " ",
283
				cls;
284
			for(var i = 0; i < clses.length; ++i) {
285
				var cls = clses[i];
286
				ret[cls] = cs.indexOf(" " + cls + " ") > -1;
287
			}
288
			return ret;
289
		},
290
		showModal: modal,
291
		closeModal: rmModal,
292
		showLoading: loading,
293
		hideLoading: unLoading,
294
		listModalIndex: function() {
295
			return lay_curr.index + 1;
296
		},
297
		error: errMsg,
298
		warn: warnMsg,
299
		msg: msg,
300
		alert: alertMsg,
301
		boxMsg: boxMsg,
302
		confirm: function(msg, yes, no) {
303
			bm({
304
				content: msg,
305
				btns: [{
306
					caption: "取消",
307
					hand: no || noop
308
				}, {
309
					caption: "确认",
310
					hand: yes
311
				}]
312
			});
313
		},
314
		get: function(url, data, sh, eh, config) {
315
			ajaxAccess("GET", url, data, sh, eh, config);
316
		},
317
		post: function(url, data, sh, eh, config) {
318
			ajaxAccess("POST", url, data, sh, eh, config);
319
		},
320
		put: function(url, data, sh, eh, config) {
321
			ajaxAccess("PUT", url, data ? JSON.stringify(data) : null, sh, eh,
322
				config);
323
		},
324
		del: function(url, sh, eh, pObj) {
325
			ajaxAccess("DELETE", url, null, sh, eh, pOjb);
326
		},
327
		noop: noop,
328
		nochange:function(d){return d},
329
		returnTrue: function() {
330
			return true;
331
		},
332
		returnFalse: function() {
333
			return false;
334
		},
335
		addRules: function(target, rule) {
336
			var te = $.type(rule);
337
			if("function" === te) {
338
				target.push(rule);
339
			} else if("array" === te) {
340
				target.concat(rule);
341
			}
342
		},
343
		validate: function(rules, obj) {
344
			for(var i = 0; i < rules.length; ++i) {
345
				var ret = rules[i](obj);
346
				if(ret) {
347
					if(obj.invalid) {
348
						obj.invalid(ret);
349
					}
350
					return false;
351
				}
352
			}
353
			if(obj.valid) {
354
				obj.valid();
355
			}
356
			return true;
357
		},
358
		valid: function($e) {
359
			$e.removeClass("invald");
360
		},
361
		invalid: function($e) {
362
			$e.addClass("invald");
363
		},
364
		appendChild: function(e, obj) {
365
			var docf = doc.createDocumentFragment();
366
			buildElement(docf, obj);
367
			e.appendChild(docf);
368
		},
369
		serialize:serialize
370
	};
371
});