form.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. // form
  2. test( "form elements check", function() {
  3. // deepEqual( item, test.value, 'group set/get tests' );
  4. $('#forms').append('<hr><h1>form elements check</h1><form id="form1"></form>')
  5. var el = $('#form1')
  6. var defaults = {
  7. input2: '123abc',
  8. password2: 'pw1234<l>',
  9. textarea2: 'lalu <l> lalu',
  10. select1: false,
  11. select2: true,
  12. selectmulti1: false,
  13. selectmulti2: [ false, true ],
  14. selectmultioption1: false,
  15. selectmultioption2: [ false, true ],
  16. richtext2: 'lalu <l> lalu',
  17. datetime1: Date.parse('2015-01-11T12:40:00Z'),
  18. }
  19. new App.ControllerForm({
  20. el: el,
  21. model: {
  22. configure_attributes: [
  23. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: defaults['input1'] },
  24. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: false, default: defaults['input2'] },
  25. { name: 'password1', display: 'Password1', tag: 'input', type: 'password', limit: 100, null: true, default: defaults['password1'] },
  26. { name: 'password2', display: 'Password2', tag: 'input', type: 'password', limit: 100, null: false, default: defaults['password2'] },
  27. { name: 'textarea1', display: 'Textarea1', tag: 'textarea', rows: 6, limit: 100, null: true, upload: true, default: defaults['textarea1'] },
  28. { name: 'textarea2', display: 'Textarea2', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true, default: defaults['textarea2'] },
  29. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: defaults['select1'] },
  30. { name: 'select2', display: 'Select2', tag: 'select', null: false, options: { true: 'internal', false: 'public' }, default: defaults['select2'] },
  31. { name: 'selectmulti1', display: 'SelectMulti1', tag: 'select', null: true, multiple: true, options: { true: 'internal', false: 'public' }, default: defaults['selectmulti1'] },
  32. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' }, default: defaults['selectmulti2'] },
  33. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }], default: defaults['selectmultioption1'] },
  34. { name: 'selectmultioption2', display: 'SelectMultiOption2', tag: 'select', null: false, multiple: true, options: [{ value: true, name: 'A' }, { value: 1, name: 'B'}, { value: false, name: 'C' }], default: defaults['selectmultioption2'] },
  35. { name: 'richtext1', display: 'Richtext1', tag: 'richtext', limit: 100, null: true, upload: true, default: defaults['richtext1'] },
  36. { name: 'richtext2', display: 'Richtext2', tag: 'richtext', limit: 100, null: true, upload: true, default: defaults['richtext2'] },
  37. { name: 'datetime1', display: 'Datetime1', tag: 'datetime', null: true, default: defaults['datetime1'] },
  38. { name: 'datetime2', display: 'Datetime2', tag: 'datetime', null: true, default: defaults['datetime2'] },
  39. ]
  40. },
  41. autofocus: true
  42. });
  43. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  44. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  45. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  46. equal( el.find('[name="input2"]').val(), '123abc', 'check input2 value')
  47. equal( el.find('[name="input2"]').prop('required'), true, 'check input2 required')
  48. equal( el.find('[name="input2"]').is(":focus"), false, 'check input2 focus')
  49. equal( el.find('[name="password1"]').val(), '', 'check password1 value')
  50. equal( el.find('[name="password1_confirm"]').val(), '', 'check password1 value')
  51. equal( el.find('[name="password1"]').prop('required'), false, 'check password1 required')
  52. equal( el.find('[name="password1"]').is(":focus"), false, 'check password1 focus')
  53. equal( el.find('[name="password2"]').val(), 'pw1234<l>', 'check password2 value')
  54. equal( el.find('[name="password2_confirm"]').val(), 'pw1234<l>', 'check password2 value')
  55. equal( el.find('[name="password2"]').prop('required'), true, 'check password2 required')
  56. equal( el.find('[name="password2"]').is(":focus"), false, 'check password2 focus')
  57. equal( el.find('[name="textarea1"]').val(), '', 'check textarea1 value')
  58. equal( el.find('[name="textarea1"]').prop('required'), false, 'check textarea1 required')
  59. equal( el.find('[name="textarea1"]').is(":focus"), false, 'check textarea1 focus')
  60. equal( el.find('[name="textarea2"]').val(), 'lalu <l> lalu', 'check textarea2 value')
  61. equal( el.find('[name="textarea2"]').prop('required'), true, 'check textarea2 required')
  62. equal( el.find('[name="textarea2"]').is(":focus"), false, 'check textarea2 focus')
  63. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  64. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  65. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  66. equal( el.find('[name="select2"]').val(), 'true', 'check select2 value')
  67. equal( el.find('[name="select2"]').prop('required'), true, 'check select2 required')
  68. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  69. equal( el.find('[name="selectmulti1"]').val(), 'false', 'check selectmulti1 value')
  70. equal( el.find('[name="selectmulti1"]').prop('required'), false, 'check selectmulti1 required')
  71. equal( el.find('[name="selectmulti1"]').is(":focus"), false, 'check selectmulti1 focus')
  72. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  73. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  74. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  75. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  76. //equal( el.find('[name="richtext1"]').val(), '', 'check textarea1 value')
  77. //equal( el.find('[name="richtext1"]').prop('required'), false, 'check textarea1 required')
  78. equal( el.find('[name="richtext1"]').is(":focus"), false, 'check textarea1 focus')
  79. //equal( el.find('[name="richtext2"]').val(), 'lalu <l> lalu', 'check textarea2 value')
  80. //equal( el.find('[name="richtext2"]').prop('required'), true, 'check textarea2 required')
  81. equal( el.find('[name="richtext2"]').is(":focus"), false, 'check textarea2 focus')
  82. });
  83. test( "form params check", function() {
  84. // deepEqual( item, test.value, 'group set/get tests' );
  85. $('#forms').append('<hr><h1>form params check</h1><form id="form2"></form>')
  86. var el = $('#form2')
  87. var defaults = {
  88. input2: '123abc',
  89. password2: 'pw1234<l>',
  90. textarea2: 'lalu <l> lalu',
  91. select1: false,
  92. select2: true,
  93. selectmulti1: false,
  94. selectmulti2: [ false, true ],
  95. selectmultioption1: false,
  96. selectmultioption2: [ false, true ],
  97. autocompletion2: 'id2',
  98. autocompletion2_autocompletion_value_shown: 'value2',
  99. richtext2: '<div>lalu <b>b</b> lalu</div>',
  100. richtext3: '<div></div>',
  101. richtext4: '<div>lalu <i>b</i> lalu</div>',
  102. richtext5: '<div></div>',
  103. richtext6: '<div>lalu <b>b</b> lalu</div>',
  104. richtext7: "<div>&nbsp;<div>&nbsp;\n</div> \n</div>",
  105. richtext8: '<div>lalu <i>b</i> lalu</div>',
  106. datetime1: new Date( Date.parse('2015-01-11T12:40:00Z') ),
  107. active1: true,
  108. active2: false,
  109. }
  110. new App.ControllerForm({
  111. el: el,
  112. model: {
  113. configure_attributes: [
  114. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true },
  115. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: false },
  116. { name: 'password1', display: 'Password1', tag: 'input', type: 'password', limit: 100, null: true },
  117. { name: 'password2', display: 'Password2', tag: 'input', type: 'password', limit: 100, null: false },
  118. { name: 'textarea1', display: 'Textarea1', tag: 'textarea', rows: 6, limit: 100, null: true, upload: true },
  119. { name: 'textarea2', display: 'Textarea2', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true },
  120. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' } },
  121. { name: 'select2', display: 'Select2', tag: 'select', null: false, options: { true: 'internal', false: 'public' } },
  122. { name: 'selectmulti1', display: 'SelectMulti1', tag: 'select', null: true, multiple: true, options: { true: 'internal', false: 'public' } },
  123. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' } },
  124. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }] },
  125. { name: 'selectmultioption2', display: 'SelectMultiOption2', tag: 'select', null: false, multiple: true, options: [{ value: true, name: 'A' }, { value: 1, name: 'B'}, { value: false, name: 'C' }] },
  126. { name: 'autocompletion1', display: 'AutoCompletion1', tag: 'autocompletion', null: false, options: { true: 'internal', false: 'public' }, source: [ { label: "Choice1", value: "value1", id: "id1" }, { label: "Choice2", value: "value2", id: "id2" }, ], minLength: 1 },
  127. { name: 'autocompletion2', display: 'AutoCompletion2', tag: 'autocompletion', null: false, options: { true: 'internal', false: 'public' }, source: [ { label: "Choice1", value: "value1", id: "id1" }, { label: "Choice2", value: "value2", id: "id2" }, ], minLength: 1 },
  128. { name: 'richtext1', display: 'Richtext1', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: true, upload: true, default: defaults['richtext1'] },
  129. { name: 'richtext2', display: 'Richtext2', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: true, upload: true, default: defaults['richtext2'] },
  130. { name: 'richtext3', display: 'Richtext3', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: false, default: defaults['richtext3'] },
  131. { name: 'richtext4', display: 'Richtext4', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: false, default: defaults['richtext4'] },
  132. { name: 'richtext5', display: 'Richtext5', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: true, upload: true, default: defaults['richtext5'] },
  133. { name: 'richtext6', display: 'Richtext6', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: true, upload: true, default: defaults['richtext6'] },
  134. { name: 'richtext7', display: 'Richtext7', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: false, default: defaults['richtext7'] },
  135. { name: 'richtext8', display: 'Richtext8', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: false, default: defaults['richtext8'] },
  136. { name: 'datetime1', display: 'Datetime1', tag: 'datetime', null: true, default: defaults['datetime1'] },
  137. { name: 'datetime2', display: 'Datetime2', tag: 'datetime', null: true, default: defaults['datetime2'] },
  138. { name: 'active1', display: 'Active1', tag: 'boolean', type: 'boolean', default: defaults['active1'], null: false },
  139. { name: 'active2', display: 'Active2', tag: 'boolean', type: 'boolean', default: defaults['active2'], null: false },
  140. ],
  141. },
  142. params: defaults,
  143. autofocus: true
  144. });
  145. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  146. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  147. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  148. equal( el.find('[name="input2"]').val(), '123abc', 'check input2 value')
  149. equal( el.find('[name="input2"]').prop('required'), true, 'check input2 required')
  150. equal( el.find('[name="input2"]').is(":focus"), false, 'check input2 focus')
  151. equal( el.find('[name="password1"]').val(), '', 'check password1 value')
  152. equal( el.find('[name="password1_confirm"]').val(), '', 'check password1 value')
  153. equal( el.find('[name="password1"]').prop('required'), false, 'check password1 required')
  154. equal( el.find('[name="password1"]').is(":focus"), false, 'check password1 focus')
  155. equal( el.find('[name="password2"]').val(), 'pw1234<l>', 'check password2 value')
  156. equal( el.find('[name="password2_confirm"]').val(), 'pw1234<l>', 'check password2 value')
  157. equal( el.find('[name="password2"]').prop('required'), true, 'check password2 required')
  158. equal( el.find('[name="password2"]').is(":focus"), false, 'check password2 focus')
  159. equal( el.find('[name="textarea1"]').val(), '', 'check textarea1 value')
  160. equal( el.find('[name="textarea1"]').prop('required'), false, 'check textarea1 required')
  161. equal( el.find('[name="textarea1"]').is(":focus"), false, 'check textarea1 focus')
  162. equal( el.find('[name="textarea2"]').val(), 'lalu <l> lalu', 'check textarea2 value')
  163. equal( el.find('[name="textarea2"]').prop('required'), true, 'check textarea2 required')
  164. equal( el.find('[name="textarea2"]').is(":focus"), false, 'check textarea2 focus')
  165. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  166. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  167. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  168. equal( el.find('[name="select2"]').val(), 'true', 'check select2 value')
  169. equal( el.find('[name="select2"]').prop('required'), true, 'check select2 required')
  170. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  171. equal( el.find('[name="selectmulti1"]').val(), 'false', 'check selectmulti1 value')
  172. equal( el.find('[name="selectmulti1"]').prop('required'), false, 'check selectmulti1 required')
  173. equal( el.find('[name="selectmulti1"]').is(":focus"), false, 'check selectmulti1 focus')
  174. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  175. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  176. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  177. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  178. params = App.ControllerForm.params( el )
  179. test_params = {
  180. input1: '',
  181. input2: '123abc',
  182. password1: '',
  183. password1_confirm: '',
  184. password2: 'pw1234<l>',
  185. password2_confirm: 'pw1234<l>',
  186. textarea1: '',
  187. textarea2: 'lalu <l> lalu',
  188. select1: 'false',
  189. select2: 'true',
  190. selectmulti1: 'false',
  191. selectmulti2: [ 'true', 'false' ],
  192. selectmultioption1: 'false',
  193. selectmultioption2: [ 'true', 'false' ],
  194. autocompletion1: '',
  195. autocompletion1_autocompletion: '',
  196. autocompletion1_autocompletion_value_shown: '',
  197. autocompletion2: 'id2',
  198. autocompletion2_autocompletion: 'value2',
  199. autocompletion2_autocompletion_value_shown: 'value2',
  200. richtext1: '',
  201. richtext2: '<div>lalu <b>b</b> lalu</div>',
  202. richtext3: '',
  203. richtext4: '<div>lalu <i>b</i> lalu</div>',
  204. richtext5: '',
  205. richtext6: '<div>lalu <b>b</b> lalu</div>',
  206. richtext7: '',
  207. richtext8: '<div>lalu <i>b</i> lalu</div>',
  208. datetime1: '2015-01-11T12:40:00.000Z',
  209. active1: true,
  210. active2: false,
  211. }
  212. deepEqual( params, test_params, 'form param check' );
  213. });
  214. test( "form defaults + params check", function() {
  215. // deepEqual( item, test.value, 'group set/get tests' );
  216. // mix default and params -> check it -> add note
  217. // test auto completion
  218. // show/hide fields base on field values -> bind changed event
  219. // form validation
  220. // form params check
  221. // add signature only if form_state is empty
  222. $('#forms').append('<hr><h1>form defaults + params check</h1><form id="form3"></form>')
  223. var el = $('#form3')
  224. var defaults = {
  225. input1: '',
  226. password2: 'pw1234<l>',
  227. textarea2: 'lalu <l> lalu',
  228. select2: false,
  229. selectmulti2: [ false, true ],
  230. selectmultioption1: false,
  231. }
  232. new App.ControllerForm({
  233. el: el,
  234. model: {
  235. configure_attributes: [
  236. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default' },
  237. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  238. { name: 'password1', display: 'Password1', tag: 'input', type: 'password', limit: 100, null: false, default: 'some used pass' },
  239. { name: 'password2', display: 'Password2', tag: 'input', type: 'password', limit: 100, null: false, default: 'some not used pass' },
  240. { name: 'textarea1', display: 'Textarea1', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true, default: 'some used text' },
  241. { name: 'textarea2', display: 'Textarea2', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true, default: 'some not used text' },
  242. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: false},
  243. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: true },
  244. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' }, default: [] },
  245. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }], default: true },
  246. ],
  247. },
  248. params: defaults,
  249. autofocus: true
  250. });
  251. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  252. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  253. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  254. equal( el.find('[name="input2"]').val(), 'some used default', 'check input2 value')
  255. equal( el.find('[name="input2"]').prop('required'), false, 'check input2 required')
  256. equal( el.find('[name="password1"]').val(), 'some used pass', 'check password1 value')
  257. equal( el.find('[name="password1_confirm"]').val(), 'some used pass', 'check password1 value')
  258. equal( el.find('[name="password1"]').prop('required'), true, 'check password1 required')
  259. equal( el.find('[name="password1"]').is(":focus"), false, 'check password1 focus')
  260. equal( el.find('[name="password2"]').val(), 'pw1234<l>', 'check password2 value')
  261. equal( el.find('[name="password2_confirm"]').val(), 'pw1234<l>', 'check password2 value')
  262. equal( el.find('[name="password2"]').prop('required'), true, 'check password2 required')
  263. equal( el.find('[name="password2"]').is(":focus"), false, 'check password2 focus')
  264. equal( el.find('[name="textarea1"]').val(), 'some used text', 'check textarea1 value')
  265. equal( el.find('[name="textarea1"]').prop('required'), true, 'check textarea1 required')
  266. equal( el.find('[name="textarea1"]').is(":focus"), false, 'check textarea1 focus')
  267. equal( el.find('[name="textarea2"]').val(), 'lalu <l> lalu', 'check textarea2 value')
  268. equal( el.find('[name="textarea2"]').prop('required'), true, 'check textarea2 required')
  269. equal( el.find('[name="textarea2"]').is(":focus"), false, 'check textarea2 focus')
  270. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  271. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  272. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  273. equal( el.find('[name="select2"]').val(), 'false', 'check select2 value')
  274. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  275. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  276. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  277. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  278. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  279. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  280. });
  281. test( "form dependend fields check", function() {
  282. // deepEqual( item, test.value, 'group set/get tests' );
  283. // mix default and params -> check it -> add note
  284. // test auto completion
  285. // show/hide fields base on field values -> bind changed event
  286. // form validation
  287. // form params check
  288. // add signature only if form_state is empty
  289. $('#forms').append('<hr><h1>form dependend fields check</h1><form id="form4"></form>')
  290. var el = $('#form4')
  291. var defaults = {
  292. input1: '',
  293. select2: false,
  294. selectmulti2: [ false, true ],
  295. selectmultioption1: false,
  296. }
  297. new App.ControllerForm({
  298. el: el,
  299. model: {
  300. configure_attributes: [
  301. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default' },
  302. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  303. { name: 'input3', display: 'Input3', tag: 'input', type: 'text', limit: 100, null: true, hide: true, default: 'some used default' },
  304. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: false},
  305. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: true },
  306. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' }, default: [] },
  307. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }], default: true },
  308. ],
  309. },
  310. params: defaults,
  311. dependency: [
  312. {
  313. bind: {
  314. name: 'select1',
  315. value: ["true"]
  316. },
  317. change: {
  318. name: 'input2',
  319. action: 'hide'
  320. },
  321. },
  322. {
  323. bind: {
  324. name: 'select1',
  325. value: ["false"]
  326. },
  327. change: {
  328. name: 'input2',
  329. action: 'show'
  330. },
  331. },
  332. {
  333. bind: {
  334. name: 'select1',
  335. value: ["true"]
  336. },
  337. change: {
  338. name: 'input3',
  339. action: 'show'
  340. },
  341. },
  342. {
  343. bind: {
  344. name: 'select1',
  345. value: ["false"]
  346. },
  347. change: {
  348. name: 'input3',
  349. action: 'hide'
  350. },
  351. }
  352. ],
  353. autofocus: true
  354. });
  355. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  356. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  357. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  358. equal( el.find('[name="input2"]').val(), 'some used default', 'check input2 value')
  359. equal( el.find('[name="input2"]').prop('required'), false, 'check input2 required')
  360. equal( el.find('[name="input3"]').val(), 'some used default', 'check input3 value')
  361. equal( el.find('[name="input3"]').prop('required'), false, 'check input3 required')
  362. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  363. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  364. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  365. equal( el.find('[name="select2"]').val(), 'false', 'check select2 value')
  366. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  367. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  368. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  369. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  370. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  371. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  372. var params = App.ControllerForm.params( el )
  373. var test_params = {
  374. input1: "",
  375. input2: "some used default",
  376. input3: undefined,
  377. select1: "false",
  378. select2: "false",
  379. selectmulti2: [ "true", "false" ],
  380. selectmultioption1: "false"
  381. }
  382. deepEqual( params, test_params, 'form param check' );
  383. el.find('[name="select1"]').val('true')
  384. el.find('[name="select1"]').trigger('change')
  385. params = App.ControllerForm.params( el )
  386. test_params = {
  387. input1: "",
  388. input2: undefined,
  389. input3: "some used default",
  390. select1: "true",
  391. select2: "false",
  392. selectmulti2: [ "true", "false" ],
  393. selectmultioption1: "false"
  394. }
  395. deepEqual( params, test_params, 'form param check' );
  396. });
  397. test( "form handler check with and without fieldset", function() {
  398. // deepEqual( item, test.value, 'group set/get tests' );
  399. // mix default and params -> check it -> add note
  400. // test auto completion
  401. // show/hide fields base on field values -> bind changed event
  402. // form validation
  403. // form params check
  404. // add signature only if form_state is empty
  405. $('#forms').append('<hr><h1>form handler check with and without fieldset</h1><form id="form5"></form>')
  406. var el = $('#form5')
  407. var defaults = {
  408. select1: 'a',
  409. select2: '',
  410. }
  411. var formChanges = function(params, attribute, attributes, classname, form, ui) {
  412. console.log('FROM', form)
  413. if (params['select1'] === 'b') {
  414. console.log('lala', params)
  415. var item = {
  416. name: 'select2',
  417. display: 'Select2',
  418. tag: 'select',
  419. null: true,
  420. options: { 1:'1', 2:'2', 3:'3' },
  421. default: 3,
  422. };
  423. var newElement = ui.formGenItem( item, classname, form )
  424. form.find('[name="select2"]').closest('.form-group').replaceWith( newElement )
  425. }
  426. if (params['select1'] === 'a') {
  427. console.log('lala', params)
  428. var item = {
  429. name: 'select2',
  430. display: 'Select2',
  431. tag: 'select',
  432. null: true,
  433. options: { 1:'1', 2:'2', 3:'3' },
  434. default: 1,
  435. };
  436. var newElement = ui.formGenItem( item, classname, form )
  437. form.find('[name="select2"]').closest('.form-group').replaceWith( newElement )
  438. }
  439. }
  440. new App.ControllerForm({
  441. el: el,
  442. model: {
  443. configure_attributes: [
  444. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { a: 'a', b: 'b' }, default: 'b'},
  445. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { 1:'1', 2:'2', 3:'3' }, default: 2 },
  446. ],
  447. },
  448. params: defaults,
  449. handlers: [
  450. formChanges,
  451. ],
  452. //noFieldset: true,
  453. });
  454. equal( el.find('[name="select1"]').val(), 'a', 'check select1 value')
  455. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  456. equal( el.find('[name="select2"]').val(), '1', 'check select2 value')
  457. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  458. var params = App.ControllerForm.params( el )
  459. var test_params = {
  460. select1: 'a',
  461. select2: '1',
  462. }
  463. deepEqual( params, test_params, 'form param check' );
  464. el.find('[name="select1"]').val('b')
  465. el.find('[name="select1"]').trigger('change')
  466. params = App.ControllerForm.params( el )
  467. test_params = {
  468. select1: 'b',
  469. select2: '3',
  470. }
  471. deepEqual( params, test_params, 'form param check' );
  472. el.find('[name="select1"]').val('a')
  473. el.find('[name="select1"]').trigger('change')
  474. params = App.ControllerForm.params( el )
  475. test_params = {
  476. select1: 'a',
  477. select2: '1',
  478. }
  479. deepEqual( params, test_params, 'form param check' );
  480. // test with noFieldset
  481. el.empty()
  482. new App.ControllerForm({
  483. el: el,
  484. model: {
  485. configure_attributes: [
  486. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { a: 'a', b: 'b' }, default: 'b'},
  487. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { 1:'1', 2:'2', 3:'3' }, default: 2 },
  488. ],
  489. },
  490. params: defaults,
  491. handlers: [
  492. formChanges,
  493. ],
  494. noFieldset: true,
  495. });
  496. equal( el.find('[name="select1"]').val(), 'a', 'check select1 value')
  497. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  498. equal( el.find('[name="select2"]').val(), '1', 'check select2 value')
  499. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  500. var params = App.ControllerForm.params( el )
  501. var test_params = {
  502. select1: 'a',
  503. select2: '1',
  504. }
  505. deepEqual( params, test_params, 'form param check' );
  506. el.find('[name="select1"]').val('b')
  507. el.find('[name="select1"]').trigger('change')
  508. params = App.ControllerForm.params( el )
  509. test_params = {
  510. select1: 'b',
  511. select2: '3',
  512. }
  513. deepEqual( params, test_params, 'form param check' );
  514. el.find('[name="select1"]').val('a')
  515. el.find('[name="select1"]').trigger('change')
  516. params = App.ControllerForm.params( el )
  517. test_params = {
  518. select1: 'a',
  519. select2: '1',
  520. }
  521. deepEqual( params, test_params, 'form param check' );
  522. });
  523. test( "form postmaster filter", function() {
  524. // check match area
  525. // check set area
  526. // add match rule
  527. // add set rule
  528. App.TicketPriority.refresh( [
  529. {
  530. id: 1,
  531. name: 'prio 1',
  532. },
  533. {
  534. id: 2,
  535. name: 'prio 2',
  536. },
  537. ] )
  538. App.Group.refresh( [
  539. {
  540. id: 1,
  541. name: 'group 1',
  542. },
  543. {
  544. id: 2,
  545. name: 'group 2',
  546. },
  547. ] )
  548. $('#forms').append('<hr><h1>form postmaster filter</h1><form id="form6"></form>')
  549. var el = $('#form6')
  550. var defaults = {
  551. input2: 'some name',
  552. match: {
  553. from: 'some@address',
  554. subject: 'some subject',
  555. },
  556. set: {
  557. 'x-zammad-ticket-owner': 'owner',
  558. 'x-zammad-ticket-customer': 'customer',
  559. 'x-zammad-ticket-priority_id': 2,
  560. 'x-zammad-ticket-group_id': 1,
  561. },
  562. }
  563. new App.ControllerForm({
  564. el: el,
  565. model: {
  566. configure_attributes: [
  567. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default' },
  568. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  569. { name: 'match', display: 'Match', tag: 'postmaster_match', null: false, default: false},
  570. { name: 'set', display: 'Set', tag: 'postmaster_set', null: false, default: false},
  571. ],
  572. },
  573. params: defaults,
  574. });
  575. params = App.ControllerForm.params( el )
  576. test_params = {
  577. input1: "some not used default",
  578. input2: "some name",
  579. match: {
  580. from: 'some@address',
  581. subject: 'some subject',
  582. },
  583. set: {
  584. 'x-zammad-ticket-owner': 'owner',
  585. 'x-zammad-ticket-customer': 'customer',
  586. 'x-zammad-ticket-priority_id': '2',
  587. 'x-zammad-ticket-group_id': '1',
  588. },
  589. };
  590. deepEqual( params, test_params, 'form param check' );
  591. el.find('[name="set::x-zammad-ticket-priority_id"]').closest('.form-group').find('.remove').click()
  592. el.find('[name="set::x-zammad-ticket-customer"]').closest('.form-group').find('.remove').click()
  593. App.Delay.set( function() {
  594. test( "form param check after remove click", function() {
  595. params = App.ControllerForm.params( el )
  596. test_params = {
  597. input1: "some not used default",
  598. input2: "some name",
  599. match: {
  600. from: 'some@address',
  601. subject: 'some subject',
  602. },
  603. set: {
  604. 'x-zammad-ticket-owner': 'owner',
  605. 'x-zammad-ticket-group_id': '1',
  606. },
  607. };
  608. deepEqual( params, test_params, 'form param check' );
  609. });
  610. },
  611. 1000
  612. );
  613. });
  614. test( "form selector", function() {
  615. $('#forms').append('<hr><h1>form selector</h1><div><form id="form7"></form></div>')
  616. var el = $('#form7')
  617. var defaults = {
  618. input2: 'some name66',
  619. }
  620. new App.ControllerForm({
  621. el: el,
  622. model: {
  623. configure_attributes: [
  624. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default33' },
  625. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  626. ],
  627. },
  628. params: defaults,
  629. });
  630. test_params = {
  631. input1: "some not used default33",
  632. input2: "some name66",
  633. };
  634. params = App.ControllerForm.params( el )
  635. deepEqual( params, test_params, 'form param check via $("#form")' );
  636. params = App.ControllerForm.params( el.find('input') )
  637. deepEqual( params, test_params, 'form param check via $("#form").find("input")' );
  638. params = App.ControllerForm.params( el.parent() )
  639. deepEqual( params, test_params, 'form param check via $("#form").parent()' );
  640. });
  641. test( "form required_if + shown_if", function() {
  642. $('#forms').append('<hr><h1>form required_if + shown_if</h1><div><form id="form8"></form></div>')
  643. var el = $('#form8')
  644. var defaults = {
  645. input2: 'some name66',
  646. input3: 'some name77',
  647. input4: 'some name88',
  648. }
  649. new App.ControllerForm({
  650. el: el,
  651. model: {
  652. configure_attributes: [
  653. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default33' },
  654. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default', required_if: { active: true }, shown_if: { active: true } },
  655. { name: 'input3', display: 'Input3', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default', required_if: { active: [true,false] }, shown_if: { active: [true,false] } },
  656. { name: 'input4', display: 'Input4', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default', required_if: { active: [55,66] }, shown_if: { active: [55,66] } },
  657. { name: 'active', display: 'Active', tag: 'boolean', type: 'boolean', 'default': true, null: false },
  658. ],
  659. },
  660. params: defaults,
  661. });
  662. test_params = {
  663. input1: "some not used default33",
  664. input2: "some name66",
  665. input3: "some name77",
  666. input4: undefined,
  667. active: true,
  668. };
  669. params = App.ControllerForm.params( el )
  670. deepEqual( params, test_params, 'form param check via $("#form")' );
  671. equal( el.find('[name="input2"]').attr('required'), 'required', 'check required attribute of input2 ')
  672. equal( el.find('[name="input2"]').is(":visible"), true, 'check visible attribute of input2 ')
  673. equal( el.find('[name="input3"]').attr('required'), 'required', 'check required attribute of input3 ')
  674. equal( el.find('[name="input3"]').is(":visible"), true, 'check visible attribute of input3 ')
  675. equal( el.find('[name="input4"]').is(":visible"), false, 'check visible attribute of input4 ')
  676. el.find('[name="{boolean}active"]').val('false').trigger('change')
  677. test_params = {
  678. input1: "some not used default33",
  679. input2: undefined,
  680. input3: undefined,
  681. input4: undefined,
  682. active: false,
  683. };
  684. params = App.ControllerForm.params( el )
  685. deepEqual( params, test_params, 'form param check via $("#form")' );
  686. equal( el.find('[name="input2"]').attr('required'), undefined, 'check required attribute of input2 ')
  687. equal( el.find('[name="input2"]').is(":visible"), false, 'check visible attribute of input2 ')
  688. equal( el.find('[name="input3"]').is(":visible"), false, 'check visible attribute of input3 ')
  689. equal( el.find('[name="input4"]').is(":visible"), false, 'check visible attribute of input4 ')
  690. el.find('[name="{boolean}active"]').val('true').trigger('change')
  691. test_params = {
  692. input1: "some not used default33",
  693. input2: "some name66",
  694. input3: "some name77",
  695. input4: undefined,
  696. active: true,
  697. };
  698. params = App.ControllerForm.params( el )
  699. deepEqual( params, test_params, 'form param check via $("#form")' );
  700. equal( el.find('[name="input2"]').attr('required'), 'required', 'check required attribute of input2 ')
  701. equal( el.find('[name="input2"]').is(":visible"), true, 'check visible attribute of input2 ')
  702. equal( el.find('[name="input3"]').attr('required'), 'required', 'check required attribute of input3 ')
  703. equal( el.find('[name="input3"]').is(":visible"), true, 'check visible attribute of input3 ')
  704. equal( el.find('[name="input4"]').is(":visible"), false, 'check visible attribute of input4 ')
  705. });