bootsrap表单构造器【代码】

比眉伴天荒 2024-04-17 18:49 100阅读 0赞

如果用户要搞一份表单然而用户不会手写代码,那这个拖拉生成代码不错

index页面

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Bootstrap表单构造器</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <link href="bootstrap.min.css" rel="stylesheet">
  8. <style>
  9. body {
  10. padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
  11. padding-bottom: 10px;
  12. }
  13. #components{
  14. min-height: 600px;
  15. }
  16. #target{
  17. min-height: 200px;
  18. border: 1px solid #ccc;
  19. padding: 5px;
  20. }
  21. #target .component{
  22. border: 1px solid #fff;
  23. }
  24. #temp{
  25. width: 500px;
  26. background: white;
  27. border: 1px dotted #ccc;
  28. border-radius: 10px;
  29. }
  30. .popover-content form {
  31. margin: 0 auto;
  32. width: 213px;
  33. }
  34. .popover-content form .btn{
  35. margin-right: 10px
  36. }
  37. #source{
  38. min-height: 500px;
  39. }
  40. </style>
  41. <link href="bootstrap-responsive.min.css" rel="stylesheet">
  42. <!--[if lt IE 9]>
  43. <script src="html5.js"></script>
  44. <![endif]-->
  45. </head>
  46. <body>
  47. <div class="navbar navbar-fixed-top">
  48. <div class="navbar-inner">
  49. <div class="container">
  50. <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
  51. <span class="icon-bar"></span>
  52. <span class="icon-bar"></span>
  53. <span class="icon-bar"></span>
  54. </a>
  55. <a class="brand" href="./">Bootstrap 表单构造器</a>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="container">
  60. <div class="row clearfix">
  61. <div class="span6">
  62. <h2>拖拽下面的组件到左侧</h2>
  63. <hr>
  64. <div class="tabbable">
  65. <ul class="nav nav-tabs" id="navtab">
  66. <li class="active"><a href="#1" data-toggle="tab">输入框</a></li>
  67. <li class><a href="#2" data-toggle="tab">Select</a></li>
  68. <li class><a href="#3" data-toggle="tab">Checkbox / Radio</a></li>
  69. <li class><a href="#4" data-toggle="tab">文件 / 按钮</a></li>
  70. <li class><a id="sourcetab" href="#5" data-toggle="tab">生成代码</a></li>
  71. </ul>
  72. <form class="form-horizontal" id="components">
  73. <fieldset>
  74. <div class="tab-content">
  75. <div class="tab-pane active" id="1">
  76. <div class="control-group component" data-type="text" rel="popover" title="Text Input" trigger="manual"
  77. data-content="
  78. <form class='form'>
  79. <div class='controls'>
  80. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  81. <label class='control-label'>Placeholder</label> <input type='text' name='placeholder' id='placeholder'>
  82. <label class='control-label'>Help Text</label> <input type='text' name='help' id='help'>
  83. <hr/>
  84. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  85. </div>
  86. </form>"
  87. >
  88. <!-- Text input-->
  89. <label class="control-label valtype" for="input01" data-valtype='label'>Text input</label>
  90. <div class="controls">
  91. <input type="text" placeholder="placeholder" class="input-xlarge valtype" data-valtype="placeholder" >
  92. <p class="help-block valtype" data-valtype='help'>Supporting help text</p>
  93. </div>
  94. </div>
  95. <div class="control-group component" data-type="search" rel="popover" title="Search Input" trigger="manual"
  96. data-content="
  97. <form class='form'>
  98. <div class='controls'>
  99. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  100. <label class='control-label'>Placeholder</label> <input type='text' name='placeholder' id='placeholder'>
  101. <label class='control-label'>Help Text</label> <input type='text' name='help' id='help'>
  102. <hr/>
  103. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  104. </div>
  105. </form>"
  106. >
  107. <!-- Search input-->
  108. <label class="control-label valtype" data-valtype="label">Search input</label>
  109. <div class="controls">
  110. <input type="text" placeholder="placeholder" class="input-xlarge search-query valtype" data-valtype="placeholder">
  111. <p class="help-block valtype" data-valtype="help">Supporting help text</p>
  112. </div>
  113. </div>
  114. <div class="control-group component" data-type="prep-text" rel="popover" title="Prepended Text Input" trigger="manual"
  115. data-content="
  116. <form class='form'>
  117. <div class='controls'>
  118. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  119. <label class='control-label'>Prepend</label> <input type='text' name='prepend' id='prepend'>
  120. <label class='control-label'>Placeholder</label> <input type='text' name='placeholder' id='placeholder'>
  121. <label class='control-label'>Help Text</label> <input type='text' name='help' id='help'>
  122. <hr/>
  123. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  124. </div>
  125. </form>"
  126. >
  127. <!-- Prepended text-->
  128. <label class="control-label valtype" data-valtype="label">Prepended text</label>
  129. <div class="controls">
  130. <div class="input-prepend">
  131. <span class="add-on valtype" data-valtype="prepend">^_^</span>
  132. <input class="span2 valtype" placeholder="placeholder" id="prependedInput" type="text" data-valtype="placeholder">
  133. </div>
  134. <p class="help-block valtype" data-valtype="help">Supporting help text</p>
  135. </div>
  136. </div>
  137. <div class="control-group component" data-type="app-text" rel="popover" title="Appended Text Input" trigger="manual"
  138. data-content="
  139. <form class='form'>
  140. <div class='controls'>
  141. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  142. <label class='control-label'>Appepend</label> <input type='text' name='append' id='append'>
  143. <label class='control-label'>Placeholder</label> <input type='text' name='placeholder' id='placeholder'>
  144. <label class='control-label'>Help Text</label> <input type='text' name='help' id='help'>
  145. <hr/>
  146. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  147. </div>
  148. </form>"
  149. >
  150. <!-- Appended input-->
  151. <label class="control-label valtype" data-valtype="label">Appended text</label>
  152. <div class="controls">
  153. <div class="input-append">
  154. <input class="span2 valtype" data-valtype="placeholder" placeholder="placeholder" type="text">
  155. <span class="add-on valtype" data-valtype="append">^_^</span>
  156. </div>
  157. <p class="help-block valtype" data-valtype="help">Supporting help text</p>
  158. </div>
  159. </div>
  160. <div class="control-group component" rel="popover" title="Search Input" trigger="manual"
  161. data-content="
  162. <form class='form'>
  163. <div class='controls'>
  164. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  165. <label class='control-label'>Placeholder</label> <input type='text' name='placeholder' id='placeholder'>
  166. <label class='control-label'>Help Text</label> <input type='text' name='help' id='help'>
  167. <label class='checkbox'><input type='checkbox' class='input-inline' name='checked' id='checkbox'>Checked</label>
  168. <hr/>
  169. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  170. </div>
  171. </form>"
  172. >
  173. <!-- Prepended checkbox -->
  174. <label class="control-label valtype" data-valtype="label">Prepended checkbox</label>
  175. <div class="controls">
  176. <div class="input-prepend">
  177. <span class="add-on">
  178. <label class="checkbox">
  179. <input type="checkbox" class="valtype" data-valtype="checkbox">
  180. </label>
  181. </span>
  182. <input class="span2 valtype" placeholder="placeholder" type="text" data-valtype="placeholder">
  183. </div>
  184. <p class="help-block valtype" data-valtype="help">Supporting help text</p>
  185. </div>
  186. </div>
  187. <div class="control-group component" rel="popover" title="Search Input" trigger="manual"
  188. data-content="
  189. <form class='form'>
  190. <div class='controls'>
  191. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  192. <label class='control-label'>Placeholder</label> <input type='text' name='placeholder' id='placeholder'>
  193. <label class='control-label'>Help Text</label> <input type='text' name='help' id='help'>
  194. <label class='checkbox'><input type='checkbox' class='input-inline' name='checked' id='checkbox'>Checked</label>
  195. <hr/>
  196. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  197. </div>
  198. </form>"
  199. >
  200. <!-- Appended checkbox -->
  201. <label class="control-label valtype" data-valtype="label">Append checkbox</label>
  202. <div class="controls">
  203. <div class="input-append">
  204. <input class="span2 valtype" placeholder="placeholder" type="text" data-valtype="placeholder">
  205. <span class="add-on">
  206. <label class="checkbox" for="appendedCheckbox">
  207. <input type="checkbox" class="valtype" data-valtype="checkbox">
  208. </label>
  209. </span>
  210. </div>
  211. <p class="help-block valtype" data-valtype="help">Supporting help text</p>
  212. </div>
  213. </div>
  214. <div class="control-group component" rel="popover" title="Search Input" trigger="manual"
  215. data-content="
  216. <form class='form'>
  217. <div class='controls'>
  218. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  219. <hr/>
  220. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  221. </div>
  222. </form>"
  223. >
  224. <!-- Textarea -->
  225. <label class="control-label valtype" data-valtype="label">Textarea</label>
  226. <div class="controls">
  227. <div class="textarea">
  228. <textarea type="" class="valtype" data-valtype="checkbox" /> </textarea>
  229. </div>
  230. </div>
  231. </div>
  232. </div>
  233. <div class="tab-pane" id="2">
  234. <div class="control-group component" rel="popover" title="Search Input" trigger="manual"
  235. data-content="
  236. <form class='form'>
  237. <div class='controls'>
  238. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  239. <label class='control-label'>Options: </label>
  240. <textarea style='min-height: 200px' id='option'> </textarea>
  241. <hr/>
  242. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  243. </div>
  244. </form>"
  245. >
  246. <!-- Select Basic -->
  247. <label class="control-label valtype" data-valtype="label">Select - Basic</label>
  248. <div class="controls">
  249. <select class="input-xlarge valtype" data-valtype="option">
  250. <option>Enter</option>
  251. <option>Your</option>
  252. <option>Options</option>
  253. <option>Here!</option>
  254. </select>
  255. </div>
  256. </div>
  257. <div class="control-group component" rel="popover" title="Search Input" trigger="manual"
  258. data-content="
  259. <form class='form'>
  260. <div class='controls'>
  261. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  262. <label class='control-label'>Options: </label>
  263. <textarea style='min-height: 200px' id='option'></textarea>
  264. <hr/>
  265. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  266. </div>
  267. </form>"
  268. >
  269. <!-- Select Multiple -->
  270. <label class="control-label valtype" data-valtype="label">Select - Multiple</label>
  271. <div class="controls">
  272. <select class="input-xlarge valtype" multiple="multiple" data-valtype="option">
  273. <option>Enter</option>
  274. <option>Your</option>
  275. <option>Options</option>
  276. <option>Here!</option>
  277. </select>
  278. </div>
  279. </div>
  280. </div>
  281. <div class="tab-pane" id="3">
  282. <div class="control-group component" rel="popover" title="Multiple Checkboxes" trigger="manual"
  283. data-content="
  284. <form class='form'>
  285. <div class='controls'>
  286. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  287. <label class='control-label'>Options: </label>
  288. <textarea style='min-height: 200px' id='checkboxes'> </textarea>
  289. <hr/>
  290. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  291. </div>
  292. </form>"
  293. >
  294. <label class="control-label valtype" data-valtype="label">Checkboxes</label>
  295. <div class="controls valtype" data-valtype="checkboxes">
  296. <!-- Multiple Checkboxes -->
  297. <label class="checkbox">
  298. <input type="checkbox" value="Option one">
  299. Option one
  300. </label>
  301. <label class="checkbox">
  302. <input type="checkbox" value="Option two">
  303. Option two
  304. </label>
  305. </div>
  306. </div>
  307. <div class="control-group component" rel="popover" title="Multiple Radios" trigger="manual"
  308. data-content="
  309. <form class='form'>
  310. <div class='controls'>
  311. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  312. <label class='control-label'>Group Name Attribute</label> <input class='input-large' type='text' name='name' id='name'>
  313. <label class='control-label'>Options: </label>
  314. <textarea style='min-height: 200px' id='radios'></textarea>
  315. <hr/>
  316. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  317. </div>
  318. </form>"
  319. >
  320. <label class="control-label valtype" data-valtype="label">Radio buttons</label>
  321. <div class="controls valtype" data-valtype="radios">
  322. <!-- Multiple Radios -->
  323. <label class="radio">
  324. <input type="radio" value="Option one" name="group" checked="checked">
  325. Option one
  326. </label>
  327. <label class="radio">
  328. <input type="radio" value="Option two" name="group">
  329. Option two
  330. </label>
  331. </div>
  332. </div>
  333. <div class="control-group component" rel="popover" title="Inline Checkboxes" trigger="manual"
  334. data-content="
  335. <form class='form'>
  336. <div class='controls'>
  337. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  338. <textarea style='min-height: 200px' id='inline-checkboxes'></textarea>
  339. <hr/>
  340. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  341. </div>
  342. </form>"
  343. >
  344. <label class="control-label valtype" data-valtype="label">Inline Checkboxes</label>
  345. <!-- Multiple Checkboxes -->
  346. <div class="controls valtype" data-valtype="inline-checkboxes">
  347. <label class="checkbox inline">
  348. <input type="checkbox" value="1"> 1
  349. </label>
  350. <label class="checkbox inline">
  351. <input type="checkbox" value="2"> 2
  352. </label>
  353. <label class="checkbox inline">
  354. <input type="checkbox" value="3"> 3
  355. </label>
  356. </div>
  357. </div>
  358. <div class="control-group component" rel="popover" title="Inline radioes" trigger="manual"
  359. data-content="
  360. <form class='form'>
  361. <div class='controls'>
  362. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  363. <label class='control-label'>Group Name Attribute</label> <input class='input-large' type='text' name='name' id='name'>
  364. <textarea style='min-height: 200px' id='inline-radios'></textarea>
  365. <hr/>
  366. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  367. </div>
  368. </form>"
  369. >
  370. <label class="control-label valtype" data-valtype="label">Inline radios</label>
  371. <div class="controls valtype" data-valtype="inline-radios">
  372. <!-- Inline Radios -->
  373. <label class="radio inline">
  374. <input type="radio" value="1" checked="checked" name="group">
  375. 1
  376. </label>
  377. <label class="radio inline">
  378. <input type="radio" value="2" name="group">
  379. 2
  380. </label>
  381. <label class="radio inline">
  382. <input type="radio" value="3">
  383. 3
  384. </label>
  385. </div>
  386. </div>
  387. </div>
  388. <div class="tab-pane" id="4">
  389. <div class="control-group component" rel="popover" title="File Upload" trigger="manual"
  390. data-content="
  391. <form class='form'>
  392. <div class='controls'>
  393. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  394. <hr/>
  395. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  396. </div>
  397. </form>"
  398. >
  399. <label class="control-label valtype" data-valtype="label">File Button</label>
  400. <!-- File Upload -->
  401. <div class="controls">
  402. <input class="input-file" id="fileInput" type="file">
  403. </div>
  404. </div>
  405. <div class="control-group component" rel="popover" title="Search Input" trigger="manual"
  406. data-content="
  407. <form class='form'>
  408. <div class='controls'>
  409. <label class='control-label'>Label Text</label> <input class='input-large' type='text' name='label' id='label'>
  410. <label class='control-label'>Button Text</label> <input class='input-large' type='text' name='label' id='button'>
  411. <label class='control-label' id=''>Type: </label>
  412. <select class='input' id='color'>
  413. <option id='btn-default'>Default</option>
  414. <option id='btn-primary'>Primary</option>
  415. <option id='btn-info'>Info</option>
  416. <option id='btn-success'>Success</option>
  417. <option id='btn-warning'>Warning</option>
  418. <option id='btn-danger'>Danger</option>
  419. <option id='btn-inverse'>Inverse</option>
  420. </select>
  421. <hr/>
  422. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  423. </div>
  424. </form>"
  425. >
  426. <label class="control-label valtype" data-valtype="label">Button</label>
  427. <!-- Button -->
  428. <div class="controls valtype" data-valtype="button">
  429. <button class='btn btn-success'>Button</button>
  430. </div>
  431. </div>
  432. </div>
  433. <div class="tab-pane" id="5">
  434. <textarea id="source" class="span6"></textarea>
  435. </div>
  436. </fieldset>
  437. </form>
  438. </div>
  439. </div> <!-- row -->
  440. <div class="span6">
  441. <div class="clearfix">
  442. <h2>Your Form</h2>
  443. <hr>
  444. <div id="build">
  445. <form id="target" class="form-horizontal">
  446. <fieldset>
  447. <div id="legend" class="component" rel="popover" title="Form Title" trigger="manual"
  448. data-content="
  449. <form class='form'>
  450. <div class='controls'>
  451. <label class='control-label'>Title</label> <input class='input-large' type='text' name='title' id='text'>
  452. <hr/>
  453. <button class='btn btn-info'>Save</button><button class='btn btn-danger'>Cancel</button>
  454. </div>
  455. </form>"
  456. >
  457. <legend class="valtype" data-valtype="text">表单名</legend>
  458. </div>
  459. </fieldset>
  460. </form>
  461. </div>
  462. </div>
  463. </div>
  464. </div> <!-- /container -->
  465. <script src="jquery.min.js"></script>
  466. <script src="bootstrap.min.js"></script>
  467. <script src="fb.js"></script>
  468. </body>
  469. </html>

核心fb.js

  1. $(document).ready(function(){
  2. $("form").delegate(".component", "mousedown", function(md){
  3. $(".popover").remove();
  4. md.preventDefault();
  5. var tops = [];
  6. var mouseX = md.pageX;
  7. var mouseY = md.pageY;
  8. var $temp;
  9. var timeout;
  10. var $this = $(this);
  11. var delays = {
  12. main: 0,
  13. form: 120
  14. }
  15. var type;
  16. if($this.parent().parent().parent().parent().attr("id") === "components"){
  17. type = "main";
  18. } else {
  19. type = "form";
  20. }
  21. var delayed = setTimeout(function(){
  22. if(type === "main"){
  23. $temp = $("<form class='form-horizontal span6' id='temp'></form>").append($this.clone());
  24. } else {
  25. if($this.attr("id") !== "legend"){
  26. $temp = $("<form class='form-horizontal span6' id='temp'></form>").append($this);
  27. }
  28. }
  29. $("body").append($temp);
  30. $temp.css({"position" : "absolute",
  31. "top" : mouseY - ($temp.height()/2) + "px",
  32. "left" : mouseX - ($temp.width()/2) + "px",
  33. "opacity" : "0.9"}).show()
  34. var half_box_height = ($temp.height()/2);
  35. var half_box_width = ($temp.width()/2);
  36. var $target = $("#target");
  37. var tar_pos = $target.position();
  38. var $target_component = $("#target .component");
  39. $(document).delegate("body", "mousemove", function(mm){
  40. var mm_mouseX = mm.pageX;
  41. var mm_mouseY = mm.pageY;
  42. $temp.css({"top" : mm_mouseY - half_box_height + "px",
  43. "left" : mm_mouseX - half_box_width + "px"});
  44. if ( mm_mouseX > tar_pos.left &&
  45. mm_mouseX < tar_pos.left + $target.width() + $temp.width()/2 &&
  46. mm_mouseY > tar_pos.top &&
  47. mm_mouseY < tar_pos.top + $target.height() + $temp.height()/2
  48. ){
  49. $("#target").css("background-color", "#fafdff");
  50. $target_component.css({"border-top" : "1px solid white", "border-bottom" : "none"});
  51. tops = $.grep($target_component, function(e){
  52. return ($(e).position().top - mm_mouseY + half_box_height > 0 && $(e).attr("id") !== "legend");
  53. });
  54. if (tops.length > 0){
  55. $(tops[0]).css("border-top", "1px solid #22aaff");
  56. } else{
  57. if($target_component.length > 0){
  58. $($target_component[$target_component.length - 1]).css("border-bottom", "1px solid #22aaff");
  59. }
  60. }
  61. } else{
  62. $("#target").css("background-color", "#fff");
  63. $target_component.css({"border-top" : "1px solid white", "border-bottom" : "none"});
  64. $target.css("background-color", "#fff");
  65. }
  66. });
  67. $("body").delegate("#temp", "mouseup", function(mu){
  68. mu.preventDefault();
  69. var mu_mouseX = mu.pageX;
  70. var mu_mouseY = mu.pageY;
  71. var tar_pos = $target.position();
  72. $("#target .component").css({"border-top" : "1px solid white", "border-bottom" : "none"});
  73. // acting only if mouse is in right place
  74. if (mu_mouseX + half_box_width > tar_pos.left &&
  75. mu_mouseX - half_box_width < tar_pos.left + $target.width() &&
  76. mu_mouseY + half_box_height > tar_pos.top &&
  77. mu_mouseY - half_box_height < tar_pos.top + $target.height()
  78. ){
  79. $temp.attr("style", null);
  80. // where to add
  81. if(tops.length > 0){
  82. $($temp.html()).insertBefore(tops[0]);
  83. } else {
  84. $("#target fieldset").append($temp.append("\n\n\ \ \ \ ").html());
  85. }
  86. } else {
  87. // no add
  88. $("#target .component").css({"border-top" : "1px solid white", "border-bottom" : "none"});
  89. tops = [];
  90. }
  91. //clean up & add popover
  92. $target.css("background-color", "#fff");
  93. $(document).undelegate("body", "mousemove");
  94. $("body").undelegate("#temp","mouseup");
  95. $("#target .component").popover({trigger: "manual",placement:"bottom"});
  96. $temp.remove();
  97. genSource();
  98. });
  99. }, delays[type]);
  100. $(document).mouseup(function () {
  101. clearInterval(delayed);
  102. return false;
  103. });
  104. $(this).mouseout(function () {
  105. clearInterval(delayed);
  106. return false;
  107. });
  108. });
  109. var genSource = function(){
  110. var $temptxt = $("<div>").html($("#build").html());
  111. $($temptxt).find(".component").attr({"title": null,
  112. "data-original-title":null,
  113. "data-type": null,
  114. "data-content": null,
  115. "rel": null,
  116. "trigger":null,
  117. "style": null});
  118. $($temptxt).find(".valtype").attr("data-valtype", null).removeClass("valtype");
  119. $($temptxt).find(".component").removeClass("component");
  120. $($temptxt).find("form").attr({"id": null, "style": null});
  121. $("#source").val($temptxt.html().replace(/\n\ \ \ \ \ \ \ \ \ \ \ \ /g,"\n"));
  122. }
  123. //activate legend popover
  124. $("#target .component").popover({trigger: "manual",placement:"bottom"});
  125. //popover on click event
  126. $("#target").delegate(".component", "click", function(e){
  127. e.preventDefault();
  128. $(".popover").hide();
  129. var $active_component = $(this);
  130. $active_component.popover("show");
  131. //console.log($active_component.position());
  132. var valtypes = $active_component.find(".valtype");
  133. $.each(valtypes, function(i,e){
  134. var valID ="#" + $(e).attr("data-valtype");
  135. var val;
  136. if(valID ==="#placeholder"){
  137. val = $(e).attr("placeholder");
  138. $(".popover " + valID).val(val);
  139. } else if(valID==="#checkbox"){
  140. val = $(e).attr("checked");
  141. $(".popover " + valID).attr("checked",val);
  142. } else if(valID==="#option"){
  143. val = $.map($(e).find("option"), function(e,i){return $(e).text()});
  144. val = val.join("\n")
  145. $(".popover "+valID).text(val);
  146. } else if(valID==="#checkboxes"){
  147. val = $.map($(e).find("label"), function(e,i){return $(e).text().trim()});
  148. val = val.join("\n")
  149. $(".popover "+valID).text(val);
  150. } else if(valID==="#radios"){
  151. val = $.map($(e).find("label"), function(e,i){return $(e).text().trim()});
  152. val = val.join("\n");
  153. $(".popover "+valID).text(val);
  154. $(".popover #name").val($(e).find("input").attr("name"));
  155. } else if(valID==="#inline-checkboxes"){
  156. val = $.map($(e).find("label"), function(e,i){return $(e).text().trim()});
  157. val = val.join("\n")
  158. $(".popover "+valID).text(val);
  159. } else if(valID==="#inline-radios"){
  160. val = $.map($(e).find("label"), function(e,i){return $(e).text().trim()});
  161. val = val.join("\n")
  162. $(".popover "+valID).text(val);
  163. $(".popover #name").val($(e).find("input").attr("name"));
  164. } else if(valID==="#button") {
  165. val = $(e).text();
  166. var type = $(e).find("button").attr("class").split(" ").filter(function(e){return e.match(/btn-.*/)});
  167. $(".popover #color option").attr("selected", null);
  168. if(type.length === 0){
  169. $(".popover #color #default").attr("selected", "selected");
  170. } else {
  171. $(".popover #color #"+type[0]).attr("selected", "selected");
  172. }
  173. val = $(e).find(".btn").text();
  174. $(".popover #button").val(val);
  175. } else {
  176. val = $(e).text();
  177. $(".popover " + valID).val(val);
  178. }
  179. });
  180. $(".popover").delegate(".btn-danger", "click", function(e){
  181. e.preventDefault();
  182. $active_component.popover("hide");
  183. });
  184. $(".popover").delegate(".btn-info", "click", function(e){
  185. e.preventDefault();
  186. var inputs = $(".popover input");
  187. inputs.push($(".popover textarea")[0]);
  188. $.each(inputs, function(i,e){
  189. var vartype = $(e).attr("id");
  190. var value = $active_component.find('[data-valtype="'+vartype+'"]')
  191. if(vartype==="placeholder"){
  192. $(value).attr("placeholder", $(e).val());
  193. } else if (vartype==="checkbox"){
  194. if($(e).is(":checked")){
  195. $(value).attr("checked", true);
  196. }
  197. else{
  198. $(value).attr("checked", false);
  199. }
  200. } else if (vartype==="option"){
  201. var options = $(e).val().split("\n");
  202. $(value).html("");
  203. $.each(options, function(i,e){
  204. $(value).append("\n ");
  205. $(value).append($("<option>").text(e));
  206. });
  207. } else if (vartype==="checkboxes"){
  208. var checkboxes = $(e).val().split("\n");
  209. $(value).html("\n <!-- Multiple Checkboxes -->");
  210. $.each(checkboxes, function(i,e){
  211. if(e.length > 0){
  212. $(value).append('\n <label class="checkbox">\n <input type="checkbox" value="'+e+'">\n '+e+'\n </label>');
  213. }
  214. });
  215. $(value).append("\n ")
  216. } else if (vartype==="radios"){
  217. var group_name = $(".popover #name").val();
  218. var radios = $(e).val().split("\n");
  219. $(value).html("\n <!-- Multiple Radios -->");
  220. $.each(radios, function(i,e){
  221. if(e.length > 0){
  222. $(value).append('\n <label class="radio">\n <input type="radio" value="'+e+'" name="'+group_name+'">\n '+e+'\n </label>');
  223. }
  224. });
  225. $(value).append("\n ")
  226. $($(value).find("input")[0]).attr("checked", true)
  227. } else if (vartype==="inline-checkboxes"){
  228. var checkboxes = $(e).val().split("\n");
  229. $(value).html("\n <!-- Inline Checkboxes -->");
  230. $.each(checkboxes, function(i,e){
  231. if(e.length > 0){
  232. $(value).append('\n <label class="checkbox inline">\n <input type="checkbox" value="'+e+'">\n '+e+'\n </label>');
  233. }
  234. });
  235. $(value).append("\n ")
  236. } else if (vartype==="inline-radios"){
  237. var radios = $(e).val().split("\n");
  238. var group_name = $(".popover #name").val();
  239. $(value).html("\n <!-- Inline Radios -->");
  240. $.each(radios, function(i,e){
  241. if(e.length > 0){
  242. $(value).append('\n <label class="radio inline">\n <input type="radio" value="'+e+'" name="'+group_name+'">\n '+e+'\n </label>');
  243. }
  244. });
  245. $(value).append("\n ")
  246. $($(value).find("input")[0]).attr("checked", true)
  247. } else if (vartype === "button"){
  248. var type = $(".popover #color option:selected").attr("id");
  249. $(value).find("button").text($(e).val()).attr("class", "btn "+type);
  250. } else {
  251. $(value).text($(e).val());
  252. }
  253. $active_component.popover("hide");
  254. genSource();
  255. });
  256. });
  257. });
  258. $("#navtab").delegate("#sourcetab", "click", function(e){
  259. genSource();
  260. });
  261. });

发表评论

表情:
评论列表 (有 0 条评论,100人围观)

还没有评论,来说两句吧...

相关阅读