form.js 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  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: false, 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. datetime3: new Date( Date.parse('2015-01-11T12:40:00Z') ),
  108. date1: '2015-01-11',
  109. date3: '2015-01-11',
  110. active1: true,
  111. active2: false,
  112. }
  113. new App.ControllerForm({
  114. el: el,
  115. model: {
  116. configure_attributes: [
  117. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true },
  118. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: false },
  119. { name: 'password1', display: 'Password1', tag: 'input', type: 'password', limit: 100, null: true },
  120. { name: 'password2', display: 'Password2', tag: 'input', type: 'password', limit: 100, null: false },
  121. { name: 'textarea1', display: 'Textarea1', tag: 'textarea', rows: 6, limit: 100, null: true, upload: true },
  122. { name: 'textarea2', display: 'Textarea2', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true },
  123. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' } },
  124. { name: 'select2', display: 'Select2', tag: 'select', null: false, options: { true: 'internal', false: 'public' } },
  125. { name: 'selectmulti1', display: 'SelectMulti1', tag: 'select', null: true, multiple: true, options: { true: 'internal', false: 'public' } },
  126. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' } },
  127. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }] },
  128. { name: 'selectmultioption2', display: 'SelectMultiOption2', tag: 'select', null: false, multiple: true, options: [{ value: true, name: 'A' }, { value: 1, name: 'B'}, { value: false, name: 'C' }] },
  129. { 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 },
  130. { 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 },
  131. { name: 'richtext1', display: 'Richtext1', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: true, upload: true, default: defaults['richtext1'] },
  132. { name: 'richtext2', display: 'Richtext2', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: true, upload: true, default: defaults['richtext2'] },
  133. { name: 'richtext3', display: 'Richtext3', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: false, default: defaults['richtext3'] },
  134. { name: 'richtext4', display: 'Richtext4', tag: 'richtext', maxlength: 100, null: true, type: 'richtext', multiline: false, default: defaults['richtext4'] },
  135. { name: 'richtext5', display: 'Richtext5', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: true, upload: true, default: defaults['richtext5'] },
  136. { name: 'richtext6', display: 'Richtext6', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: true, upload: true, default: defaults['richtext6'] },
  137. { name: 'richtext7', display: 'Richtext7', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: false, default: defaults['richtext7'] },
  138. { name: 'richtext8', display: 'Richtext8', tag: 'richtext', maxlength: 100, null: true, type: 'textonly', multiline: false, default: defaults['richtext8'] },
  139. { name: 'datetime1', display: 'Datetime1', tag: 'datetime', null: true, default: defaults['datetime1'] },
  140. { name: 'datetime2', display: 'Datetime2', tag: 'datetime', null: true, default: defaults['datetime2'] },
  141. { name: 'datetime3', display: 'Datetime3', tag: 'datetime', null: false, default: defaults['datetime3'] },
  142. { name: 'datetime4', display: 'Datetime4', tag: 'datetime', null: false, default: defaults['datetime4'] },
  143. { name: 'date1', display: 'Date1', tag: 'date', null: true, default: defaults['date1'] },
  144. { name: 'date2', display: 'Date2', tag: 'date', null: true, default: defaults['date2'] },
  145. { name: 'date3', display: 'Date3', tag: 'date', null: false, default: defaults['date3'] },
  146. { name: 'date4', display: 'Date4', tag: 'date', null: false, default: defaults['date4'] },
  147. { name: 'active1', display: 'Active1', tag: 'active', default: defaults['active1'] },
  148. { name: 'active2', display: 'Active2', tag: 'active', default: defaults['active2'] },
  149. ],
  150. },
  151. params: defaults,
  152. autofocus: true
  153. });
  154. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  155. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  156. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  157. equal( el.find('[name="input2"]').val(), '123abc', 'check input2 value')
  158. equal( el.find('[name="input2"]').prop('required'), true, 'check input2 required')
  159. equal( el.find('[name="input2"]').is(":focus"), false, 'check input2 focus')
  160. equal( el.find('[name="password1"]').val(), '', 'check password1 value')
  161. equal( el.find('[name="password1_confirm"]').val(), '', 'check password1 value')
  162. equal( el.find('[name="password1"]').prop('required'), false, 'check password1 required')
  163. equal( el.find('[name="password1"]').is(":focus"), false, 'check password1 focus')
  164. equal( el.find('[name="password2"]').val(), 'pw1234<l>', 'check password2 value')
  165. equal( el.find('[name="password2_confirm"]').val(), 'pw1234<l>', 'check password2 value')
  166. equal( el.find('[name="password2"]').prop('required'), true, 'check password2 required')
  167. equal( el.find('[name="password2"]').is(":focus"), false, 'check password2 focus')
  168. equal( el.find('[name="textarea1"]').val(), '', 'check textarea1 value')
  169. equal( el.find('[name="textarea1"]').prop('required'), false, 'check textarea1 required')
  170. equal( el.find('[name="textarea1"]').is(":focus"), false, 'check textarea1 focus')
  171. equal( el.find('[name="textarea2"]').val(), 'lalu <l> lalu', 'check textarea2 value')
  172. equal( el.find('[name="textarea2"]').prop('required'), true, 'check textarea2 required')
  173. equal( el.find('[name="textarea2"]').is(":focus"), false, 'check textarea2 focus')
  174. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  175. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  176. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  177. equal( el.find('[name="select2"]').val(), 'true', 'check select2 value')
  178. equal( el.find('[name="select2"]').prop('required'), true, 'check select2 required')
  179. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  180. equal( el.find('[name="selectmulti1"]').val(), 'false', 'check selectmulti1 value')
  181. equal( el.find('[name="selectmulti1"]').prop('required'), false, 'check selectmulti1 required')
  182. equal( el.find('[name="selectmulti1"]').is(":focus"), false, 'check selectmulti1 focus')
  183. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  184. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  185. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  186. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  187. params = App.ControllerForm.params( el )
  188. test_params = {
  189. input1: '',
  190. input2: '123abc',
  191. password1: '',
  192. password1_confirm: '',
  193. password2: 'pw1234<l>',
  194. password2_confirm: 'pw1234<l>',
  195. textarea1: '',
  196. textarea2: 'lalu <l> lalu',
  197. select1: 'false',
  198. select2: 'true',
  199. selectmulti1: 'false',
  200. selectmulti2: [ 'true', 'false' ],
  201. selectmultioption1: 'false',
  202. selectmultioption2: [ 'true', 'false' ],
  203. autocompletion1: '',
  204. autocompletion1_autocompletion: '',
  205. autocompletion1_autocompletion_value_shown: '',
  206. autocompletion2: 'id2',
  207. autocompletion2_autocompletion: 'value2',
  208. autocompletion2_autocompletion_value_shown: 'value2',
  209. richtext1: '',
  210. richtext2: '<div>lalu <b>b</b> lalu</div>',
  211. richtext3: '',
  212. richtext4: '<div>lalu <i>b</i> lalu</div>',
  213. richtext5: '',
  214. richtext6: '<div>lalu <b>b</b> lalu</div>',
  215. richtext7: '',
  216. richtext8: '<div>lalu <i>b</i> lalu</div>',
  217. datetime1: '2015-01-11T12:40:00.000Z',
  218. datetime2: undefined,
  219. datetime3: '2015-01-11T12:40:00.000Z',
  220. datetime4: undefined,
  221. date1: '2015-01-11',
  222. date2: undefined,
  223. date3: '2015-01-11',
  224. date4: undefined,
  225. active1: true,
  226. active2: false,
  227. }
  228. deepEqual( params, test_params, 'form param check' );
  229. });
  230. test( "form defaults + params check", function() {
  231. // deepEqual( item, test.value, 'group set/get tests' );
  232. // mix default and params -> check it -> add note
  233. // test auto completion
  234. // show/hide fields base on field values -> bind changed event
  235. // form validation
  236. // form params check
  237. // add signature only if form_state is empty
  238. $('#forms').append('<hr><h1>form defaults + params check</h1><form id="form3"></form>')
  239. var el = $('#form3')
  240. var defaults = {
  241. input1: '',
  242. password2: 'pw1234<l>',
  243. textarea2: 'lalu <l> lalu',
  244. select2: false,
  245. selectmulti2: [ false, true ],
  246. selectmultioption1: false,
  247. }
  248. new App.ControllerForm({
  249. el: el,
  250. model: {
  251. configure_attributes: [
  252. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default' },
  253. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  254. { name: 'password1', display: 'Password1', tag: 'input', type: 'password', limit: 100, null: false, default: 'some used pass' },
  255. { name: 'password2', display: 'Password2', tag: 'input', type: 'password', limit: 100, null: false, default: 'some not used pass' },
  256. { name: 'textarea1', display: 'Textarea1', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true, default: 'some used text' },
  257. { name: 'textarea2', display: 'Textarea2', tag: 'textarea', rows: 6, limit: 100, null: false, upload: true, default: 'some not used text' },
  258. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: false},
  259. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: true },
  260. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' }, default: [] },
  261. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }], default: true },
  262. ],
  263. },
  264. params: defaults,
  265. autofocus: true
  266. });
  267. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  268. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  269. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  270. equal( el.find('[name="input2"]').val(), 'some used default', 'check input2 value')
  271. equal( el.find('[name="input2"]').prop('required'), false, 'check input2 required')
  272. equal( el.find('[name="password1"]').val(), 'some used pass', 'check password1 value')
  273. equal( el.find('[name="password1_confirm"]').val(), 'some used pass', 'check password1 value')
  274. equal( el.find('[name="password1"]').prop('required'), true, 'check password1 required')
  275. equal( el.find('[name="password1"]').is(":focus"), false, 'check password1 focus')
  276. equal( el.find('[name="password2"]').val(), 'pw1234<l>', 'check password2 value')
  277. equal( el.find('[name="password2_confirm"]').val(), 'pw1234<l>', 'check password2 value')
  278. equal( el.find('[name="password2"]').prop('required'), true, 'check password2 required')
  279. equal( el.find('[name="password2"]').is(":focus"), false, 'check password2 focus')
  280. equal( el.find('[name="textarea1"]').val(), 'some used text', 'check textarea1 value')
  281. equal( el.find('[name="textarea1"]').prop('required'), true, 'check textarea1 required')
  282. equal( el.find('[name="textarea1"]').is(":focus"), false, 'check textarea1 focus')
  283. equal( el.find('[name="textarea2"]').val(), 'lalu <l> lalu', 'check textarea2 value')
  284. equal( el.find('[name="textarea2"]').prop('required'), true, 'check textarea2 required')
  285. equal( el.find('[name="textarea2"]').is(":focus"), false, 'check textarea2 focus')
  286. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  287. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  288. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  289. equal( el.find('[name="select2"]').val(), 'false', 'check select2 value')
  290. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  291. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  292. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  293. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  294. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  295. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  296. });
  297. test( "form dependend fields check", function() {
  298. // deepEqual( item, test.value, 'group set/get tests' );
  299. // mix default and params -> check it -> add note
  300. // test auto completion
  301. // show/hide fields base on field values -> bind changed event
  302. // form validation
  303. // form params check
  304. // add signature only if form_state is empty
  305. $('#forms').append('<hr><h1>form dependend fields check</h1><form id="form4"></form>')
  306. var el = $('#form4')
  307. var defaults = {
  308. input1: '',
  309. select2: false,
  310. selectmulti2: [ false, true ],
  311. selectmultioption1: false,
  312. datetime1: new Date( Date.parse('2015-01-11T12:40:00Z') ),
  313. datetime3: new Date( Date.parse('2015-01-11T12:40:00Z') ),
  314. date1: '2015-01-11',
  315. date3: '2015-01-11',
  316. }
  317. var form = new App.ControllerForm({
  318. el: el,
  319. model: {
  320. configure_attributes: [
  321. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default' },
  322. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  323. { name: 'input3', display: 'Input3', tag: 'input', type: 'text', limit: 100, null: true, hide: true, default: 'some used default' },
  324. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: false},
  325. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { true: 'internal', false: 'public' }, default: true },
  326. { name: 'selectmulti2', display: 'SelectMulti2', tag: 'select', null: false, multiple: true, options: { true: 'internal', false: 'public' }, default: [] },
  327. { name: 'selectmultioption1', display: 'SelectMultiOption1', tag: 'select', null: true, multiple: true, options: [{ value: true, name: 'internal' }, { value: false, name: 'public' }], default: true },
  328. { name: 'datetime1', display: 'Datetime1', tag: 'datetime', null: true, default: defaults['datetime1'] },
  329. { name: 'datetime2', display: 'Datetime2', tag: 'datetime', null: true, default: defaults['datetime2'] },
  330. { name: 'datetime3', display: 'Datetime3', tag: 'datetime', null: false, default: defaults['datetime3'] },
  331. { name: 'datetime4', display: 'Datetime4', tag: 'datetime', null: false, default: defaults['datetime4'] },
  332. { name: 'date1', display: 'Date1', tag: 'date', null: true, default: defaults['date1'] },
  333. { name: 'date2', display: 'Date2', tag: 'date', null: true, default: defaults['date2'] },
  334. { name: 'date3', display: 'Date3', tag: 'date', null: false, default: defaults['date3'] },
  335. { name: 'date4', display: 'Date4', tag: 'date', null: false, default: defaults['date4'] },
  336. ],
  337. },
  338. params: defaults,
  339. dependency: [
  340. {
  341. bind: {
  342. name: 'select1',
  343. value: ["true"]
  344. },
  345. change: {
  346. name: 'input2',
  347. action: 'hide'
  348. },
  349. },
  350. {
  351. bind: {
  352. name: 'select1',
  353. value: ["true"]
  354. },
  355. change: {
  356. name: 'datetime1',
  357. action: 'hide'
  358. },
  359. },
  360. {
  361. bind: {
  362. name: 'select1',
  363. value: ["false"]
  364. },
  365. change: {
  366. name: 'input2',
  367. action: 'show'
  368. },
  369. },
  370. {
  371. bind: {
  372. name: 'select1',
  373. value: ["false"]
  374. },
  375. change: {
  376. name: 'datetime1',
  377. action: 'show'
  378. },
  379. },
  380. {
  381. bind: {
  382. name: 'select1',
  383. value: ["true"]
  384. },
  385. change: {
  386. name: 'input3',
  387. action: 'show'
  388. },
  389. },
  390. {
  391. bind: {
  392. name: 'select1',
  393. value: ["false"]
  394. },
  395. change: {
  396. name: 'input3',
  397. action: 'hide'
  398. },
  399. }
  400. ],
  401. autofocus: true
  402. });
  403. equal( el.find('[name="input1"]').val(), '', 'check input1 value')
  404. equal( el.find('[name="input1"]').prop('required'), false, 'check input1 required')
  405. // equal( el.find('[name="input1"]').is(":focus"), true, 'check input1 focus')
  406. equal( el.find('[name="input2"]').val(), 'some used default', 'check input2 value')
  407. equal( el.find('[name="input2"]').prop('required'), false, 'check input2 required')
  408. equal( el.find('[name="input3"]').val(), 'some used default', 'check input3 value')
  409. equal( el.find('[name="input3"]').prop('required'), false, 'check input3 required')
  410. equal( el.find('[name="select1"]').val(), 'false', 'check select1 value')
  411. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  412. equal( el.find('[name="select1"]').is(":focus"), false, 'check select1 focus')
  413. equal( el.find('[name="select2"]').val(), 'false', 'check select2 value')
  414. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  415. equal( el.find('[name="select2"]').is(":focus"), false, 'check select2 focus')
  416. equal( el.find('[name="selectmulti2"]').val()[0], 'true', 'check selectmulti2 value')
  417. equal( el.find('[name="selectmulti2"]').val()[1], 'false', 'check selectmulti2 value')
  418. equal( el.find('[name="selectmulti2"]').prop('required'), true, 'check selectmulti2 required')
  419. equal( el.find('[name="selectmulti2"]').is(":focus"), false, 'check selectmulti2 focus')
  420. var params = App.ControllerForm.params( el )
  421. var test_params = {
  422. input1: "",
  423. input2: "some used default",
  424. input3: undefined,
  425. select1: "false",
  426. select2: "false",
  427. selectmulti2: [ "true", "false" ],
  428. selectmultioption1: "false",
  429. datetime1: '2015-01-11T12:40:00.000Z',
  430. datetime2: undefined,
  431. datetime3: '2015-01-11T12:40:00.000Z',
  432. datetime4: undefined,
  433. date1: '2015-01-11',
  434. date2: undefined,
  435. date3: '2015-01-11',
  436. date4: undefined,
  437. }
  438. deepEqual( params, test_params, 'form param check' );
  439. errors = form.validate(params)
  440. test_errors = {
  441. datetime4: "is required",
  442. date4: "is required",
  443. }
  444. deepEqual( errors, test_errors, 'validation errors check' )
  445. App.ControllerForm.validate( { errors: errors, form: el } )
  446. el.find('[name="select1"]').val('true')
  447. el.find('[name="select1"]').trigger('change')
  448. params = App.ControllerForm.params( el )
  449. test_params = {
  450. input1: "",
  451. input2: undefined,
  452. input3: "some used default",
  453. select1: "true",
  454. select2: "false",
  455. selectmulti2: [ "true", "false" ],
  456. selectmultioption1: "false",
  457. datetime1: null,
  458. datetime2: undefined,
  459. datetime3: '2015-01-11T12:40:00.000Z',
  460. datetime4: undefined,
  461. date1: '2015-01-11',
  462. date2: undefined,
  463. date3: '2015-01-11',
  464. date4: undefined,
  465. }
  466. deepEqual( params, test_params, 'form param check' );
  467. });
  468. test( "form handler check with and without fieldset", function() {
  469. // deepEqual( item, test.value, 'group set/get tests' );
  470. // mix default and params -> check it -> add note
  471. // test auto completion
  472. // show/hide fields base on field values -> bind changed event
  473. // form validation
  474. // form params check
  475. // add signature only if form_state is empty
  476. $('#forms').append('<hr><h1>form handler check with and without fieldset</h1><form id="form5"></form>')
  477. var el = $('#form5')
  478. var defaults = {
  479. select1: 'a',
  480. select2: '',
  481. }
  482. var formChanges = function(params, attribute, attributes, classname, form, ui) {
  483. console.log('FROM', form)
  484. if (params['select1'] === 'b') {
  485. console.log('lala', params)
  486. var item = {
  487. name: 'select2',
  488. display: 'Select2',
  489. tag: 'select',
  490. null: true,
  491. options: { 1:'1', 2:'2', 3:'3' },
  492. default: 3,
  493. };
  494. var newElement = ui.formGenItem( item, classname, form )
  495. form.find('[name="select2"]').closest('.form-group').replaceWith( newElement )
  496. }
  497. if (params['select1'] === 'a') {
  498. console.log('lala', params)
  499. var item = {
  500. name: 'select2',
  501. display: 'Select2',
  502. tag: 'select',
  503. null: true,
  504. options: { 1:'1', 2:'2', 3:'3' },
  505. default: 1,
  506. };
  507. var newElement = ui.formGenItem( item, classname, form )
  508. form.find('[name="select2"]').closest('.form-group').replaceWith( newElement )
  509. }
  510. }
  511. new App.ControllerForm({
  512. el: el,
  513. model: {
  514. configure_attributes: [
  515. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { a: 'a', b: 'b' }, default: 'b'},
  516. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { 1:'1', 2:'2', 3:'3' }, default: 2 },
  517. ],
  518. },
  519. params: defaults,
  520. handlers: [
  521. formChanges,
  522. ],
  523. //noFieldset: true,
  524. });
  525. equal( el.find('[name="select1"]').val(), 'a', 'check select1 value')
  526. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  527. equal( el.find('[name="select2"]').val(), '1', 'check select2 value')
  528. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  529. var params = App.ControllerForm.params( el )
  530. var test_params = {
  531. select1: 'a',
  532. select2: '1',
  533. }
  534. deepEqual( params, test_params, 'form param check' );
  535. el.find('[name="select1"]').val('b')
  536. el.find('[name="select1"]').trigger('change')
  537. params = App.ControllerForm.params( el )
  538. test_params = {
  539. select1: 'b',
  540. select2: '3',
  541. }
  542. deepEqual( params, test_params, 'form param check' );
  543. el.find('[name="select1"]').val('a')
  544. el.find('[name="select1"]').trigger('change')
  545. params = App.ControllerForm.params( el )
  546. test_params = {
  547. select1: 'a',
  548. select2: '1',
  549. }
  550. deepEqual( params, test_params, 'form param check' );
  551. // test with noFieldset
  552. el.empty()
  553. new App.ControllerForm({
  554. el: el,
  555. model: {
  556. configure_attributes: [
  557. { name: 'select1', display: 'Select1', tag: 'select', null: true, options: { a: 'a', b: 'b' }, default: 'b'},
  558. { name: 'select2', display: 'Select2', tag: 'select', null: true, options: { 1:'1', 2:'2', 3:'3' }, default: 2 },
  559. ],
  560. },
  561. params: defaults,
  562. handlers: [
  563. formChanges,
  564. ],
  565. noFieldset: true,
  566. });
  567. equal( el.find('[name="select1"]').val(), 'a', 'check select1 value')
  568. equal( el.find('[name="select1"]').prop('required'), false, 'check select1 required')
  569. equal( el.find('[name="select2"]').val(), '1', 'check select2 value')
  570. equal( el.find('[name="select2"]').prop('required'), false, 'check select2 required')
  571. var params = App.ControllerForm.params( el )
  572. var test_params = {
  573. select1: 'a',
  574. select2: '1',
  575. }
  576. deepEqual( params, test_params, 'form param check' );
  577. el.find('[name="select1"]').val('b')
  578. el.find('[name="select1"]').trigger('change')
  579. params = App.ControllerForm.params( el )
  580. test_params = {
  581. select1: 'b',
  582. select2: '3',
  583. }
  584. deepEqual( params, test_params, 'form param check' );
  585. el.find('[name="select1"]').val('a')
  586. el.find('[name="select1"]').trigger('change')
  587. params = App.ControllerForm.params( el )
  588. test_params = {
  589. select1: 'a',
  590. select2: '1',
  591. }
  592. deepEqual( params, test_params, 'form param check' );
  593. });
  594. test( "form postmaster filter", function() {
  595. // check match area
  596. // check set area
  597. // add match rule
  598. // add set rule
  599. App.TicketPriority.refresh( [
  600. {
  601. id: 1,
  602. name: 'prio 1',
  603. },
  604. {
  605. id: 2,
  606. name: 'prio 2',
  607. },
  608. ] )
  609. App.Group.refresh( [
  610. {
  611. id: 1,
  612. name: 'group 1',
  613. },
  614. {
  615. id: 2,
  616. name: 'group 2',
  617. },
  618. ] )
  619. $('#forms').append('<hr><h1>form postmaster filter</h1><form id="form6"></form>')
  620. var el = $('#form6')
  621. var defaults = {
  622. input2: 'some name',
  623. match: {
  624. from: {
  625. operator: 'contains',
  626. value: 'some@address',
  627. },
  628. subject: {
  629. operator: 'contains',
  630. value: 'some subject',
  631. },
  632. },
  633. set: {
  634. 'x-zammad-ticket-customer': {
  635. value: 'customer'
  636. },
  637. 'x-zammad-ticket-group_id': {
  638. value: '1'
  639. },
  640. 'x-zammad-ticket-owner': {
  641. value: 'owner',
  642. value_completion: ''
  643. },
  644. 'x-zammad-ticket-priority_id': {
  645. value: '1'
  646. }
  647. },
  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 default' },
  654. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  655. { name: 'match', display: 'Match', tag: 'postmaster_match', null: false, default: false},
  656. { name: 'set', display: 'Set', tag: 'postmaster_set', null: false, default: false},
  657. ],
  658. },
  659. params: defaults,
  660. });
  661. params = App.ControllerForm.params( el )
  662. test_params = {
  663. input1: 'some not used default',
  664. input2: 'some name',
  665. match: {
  666. from: {
  667. operator: 'contains',
  668. value: 'some@address'
  669. },
  670. subject: {
  671. operator: 'contains',
  672. value: 'some subject'
  673. }
  674. },
  675. set: {
  676. 'x-zammad-ticket-customer': {
  677. value: 'customer'
  678. },
  679. 'x-zammad-ticket-group_id': {
  680. value: '1'
  681. },
  682. 'x-zammad-ticket-owner': {
  683. value: 'owner',
  684. value_completion: ''
  685. },
  686. 'x-zammad-ticket-priority_id': {
  687. value: '1'
  688. }
  689. },
  690. };
  691. deepEqual( params, test_params, 'form param check' );
  692. el.find('[name="set::x-zammad-ticket-priority_id::value"]').closest('.js-filterElement').find('.js-remove').click()
  693. el.find('[name="set::x-zammad-ticket-customer::value"]').closest('.js-filterElement').find('.js-remove').click()
  694. App.Delay.set( function() {
  695. test( "form param check after remove click", function() {
  696. params = App.ControllerForm.params( el )
  697. test_params = {
  698. input1: 'some not used default',
  699. input2: 'some name',
  700. match: {
  701. from: {
  702. operator: 'contains',
  703. value: 'some@address'
  704. },
  705. subject: {
  706. operator: 'contains',
  707. value: 'some subject'
  708. }
  709. },
  710. set: {
  711. 'x-zammad-ticket-owner': {
  712. value: 'owner',
  713. value_completion: ''
  714. },
  715. 'x-zammad-ticket-group_id': {
  716. value: '1'
  717. },
  718. },
  719. };
  720. deepEqual( params, test_params, 'form param check' );
  721. });
  722. },
  723. 1000
  724. );
  725. });
  726. test( "form selector", function() {
  727. $('#forms').append('<hr><h1>form selector</h1><div><form id="form7"></form></div>')
  728. var el = $('#form7')
  729. var defaults = {
  730. input2: 'some name66',
  731. }
  732. new App.ControllerForm({
  733. el: el,
  734. model: {
  735. configure_attributes: [
  736. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default33' },
  737. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default' },
  738. ],
  739. },
  740. params: defaults,
  741. });
  742. test_params = {
  743. input1: 'some not used default33',
  744. input2: 'some name66',
  745. };
  746. params = App.ControllerForm.params( el )
  747. deepEqual( params, test_params, 'form param check via $("#form")' );
  748. params = App.ControllerForm.params( el.find('input') )
  749. deepEqual( params, test_params, 'form param check via $("#form").find("input")' );
  750. params = App.ControllerForm.params( el.parent() )
  751. deepEqual( params, test_params, 'form param check via $("#form").parent()' );
  752. });
  753. test( "form required_if + shown_if", function() {
  754. $('#forms').append('<hr><h1>form required_if + shown_if</h1><div><form id="form8"></form></div>')
  755. var el = $('#form8')
  756. var defaults = {
  757. input2: 'some name66',
  758. input3: 'some name77',
  759. input4: 'some name88',
  760. }
  761. new App.ControllerForm({
  762. el: el,
  763. model: {
  764. configure_attributes: [
  765. { name: 'input1', display: 'Input1', tag: 'input', type: 'text', limit: 100, null: true, default: 'some not used default33' },
  766. { name: 'input2', display: 'Input2', tag: 'input', type: 'text', limit: 100, null: true, default: 'some used default', required_if: { active: true }, shown_if: { active: true } },
  767. { 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] } },
  768. { 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] } },
  769. { name: 'active', display: 'Active', tag: 'active', 'default': true },
  770. ],
  771. },
  772. params: defaults,
  773. });
  774. test_params = {
  775. input1: "some not used default33",
  776. input2: "some name66",
  777. input3: "some name77",
  778. input4: undefined,
  779. active: true,
  780. };
  781. params = App.ControllerForm.params( el )
  782. deepEqual( params, test_params, 'form param check via $("#form")' );
  783. equal( el.find('[name="input2"]').attr('required'), 'required', 'check required attribute of input2 ')
  784. equal( el.find('[name="input2"]').is(":visible"), true, 'check visible attribute of input2 ')
  785. equal( el.find('[name="input3"]').attr('required'), 'required', 'check required attribute of input3 ')
  786. equal( el.find('[name="input3"]').is(":visible"), true, 'check visible attribute of input3 ')
  787. equal( el.find('[name="input4"]').is(":visible"), false, 'check visible attribute of input4 ')
  788. el.find('[name="{boolean}active"]').val('false').trigger('change')
  789. test_params = {
  790. input1: "some not used default33",
  791. input2: undefined,
  792. input3: undefined,
  793. input4: undefined,
  794. active: false,
  795. };
  796. params = App.ControllerForm.params( el )
  797. deepEqual( params, test_params, 'form param check via $("#form")' );
  798. equal( el.find('[name="input2"]').attr('required'), undefined, 'check required attribute of input2 ')
  799. equal( el.find('[name="input2"]').is(":visible"), false, 'check visible attribute of input2 ')
  800. equal( el.find('[name="input3"]').is(":visible"), false, 'check visible attribute of input3 ')
  801. equal( el.find('[name="input4"]').is(":visible"), false, 'check visible attribute of input4 ')
  802. el.find('[name="{boolean}active"]').val('true').trigger('change')
  803. test_params = {
  804. input1: "some not used default33",
  805. input2: "some name66",
  806. input3: "some name77",
  807. input4: undefined,
  808. active: true,
  809. };
  810. params = App.ControllerForm.params( el )
  811. deepEqual( params, test_params, 'form param check via $("#form")' );
  812. equal( el.find('[name="input2"]').attr('required'), 'required', 'check required attribute of input2 ')
  813. equal( el.find('[name="input2"]').is(":visible"), true, 'check visible attribute of input2 ')
  814. equal( el.find('[name="input3"]').attr('required'), 'required', 'check required attribute of input3 ')
  815. equal( el.find('[name="input3"]').is(":visible"), true, 'check visible attribute of input3 ')
  816. equal( el.find('[name="input4"]').is(":visible"), false, 'check visible attribute of input4 ')
  817. });