form_tree_select.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. QUnit.test("form elements check", assert => {
  2. $('#forms').append('<hr><h1>form elements check 1</h1><form id="form1"></form>')
  3. var el = $('#form1')
  4. new App.ControllerForm({
  5. el: el,
  6. model: {
  7. "configure_attributes": [
  8. {
  9. "name": "tree_select",
  10. "display": "tree_select",
  11. "tag": "tree_select",
  12. "null": true,
  13. "translate": true,
  14. "options": [
  15. {
  16. "value": "aa",
  17. "name": "yes",
  18. "children": [
  19. {
  20. "value": "aa::aaa",
  21. "name": "yes1",
  22. },
  23. {
  24. "value": "aa::aab",
  25. "name": "yes2",
  26. },
  27. {
  28. "value": "aa::aac",
  29. "name": "yes3",
  30. },
  31. ]
  32. },
  33. {
  34. "value": "bb",
  35. "name": "bb (comment)",
  36. "children": [
  37. {
  38. "value": "bb::bba",
  39. "name": "yes11",
  40. },
  41. {
  42. "value": "bb::bbb",
  43. "name": "yes22",
  44. },
  45. {
  46. "value": "bb::bbc",
  47. "name": "yes33",
  48. },
  49. ]
  50. },
  51. ],
  52. }
  53. ]
  54. },
  55. autofocus: true
  56. });
  57. assert.equal(el.find('[name="tree_select"]').val(), '', 'check tree_select value');
  58. assert.equal(el.find('[name="tree_select"]').closest('.searchableSelect').find('.js-input').val(), '', 'check tree_select .js-input value');
  59. var params = App.ControllerForm.params(el)
  60. var test_params = {
  61. tree_select: ''
  62. }
  63. assert.deepEqual(params, test_params, 'form param check')
  64. $('#forms').append('<hr><h1>form elements check 2</h1><form id="form2"></form>')
  65. var el = $('#form2')
  66. new App.ControllerForm({
  67. el: el,
  68. model: {
  69. "configure_attributes": [
  70. {
  71. "name": "tree_select",
  72. "display": "tree_select",
  73. "tag": "tree_select",
  74. "null": true,
  75. "translate": true,
  76. "value": "aa",
  77. "options": [
  78. {
  79. "value": "aa",
  80. "name": "yes",
  81. "children": [
  82. {
  83. "value": "aa::aaa",
  84. "name": "yes1",
  85. },
  86. {
  87. "value": "aa::aab",
  88. "name": "yes2",
  89. },
  90. {
  91. "value": "aa::aac",
  92. "name": "yes3",
  93. },
  94. ]
  95. },
  96. {
  97. "value": "bb",
  98. "name": "bb (comment)",
  99. "children": [
  100. {
  101. "value": "bb::bba",
  102. "name": "yes11",
  103. },
  104. {
  105. "value": "bb::bbb",
  106. "name": "yes22",
  107. },
  108. {
  109. "value": "bb::bbc",
  110. "name": "yes33",
  111. },
  112. ]
  113. },
  114. ],
  115. }
  116. ]
  117. },
  118. autofocus: true
  119. });
  120. assert.equal(el.find('[name="tree_select"]').val(), 'aa', 'check tree_select value');
  121. assert.equal(el.find('[name="tree_select"]').closest('.searchableSelect').find('.js-input').val(), 'yes', 'check tree_select .js-input value');
  122. var params = App.ControllerForm.params(el)
  123. var test_params = {
  124. tree_select: 'aa'
  125. }
  126. assert.deepEqual(params, test_params, 'form param check')
  127. $('#forms').append('<hr><h1>form elements check 3</h1><form id="form3"></form>')
  128. var el = $('#form3')
  129. new App.ControllerForm({
  130. el: el,
  131. model: {
  132. "configure_attributes": [
  133. {
  134. "name": "tree_select",
  135. "display": "tree_select",
  136. "tag": "tree_select",
  137. "null": true,
  138. "translate": true,
  139. "value": "aa::aab",
  140. "options": [
  141. {
  142. "value": "aa",
  143. "name": "yes",
  144. "children": [
  145. {
  146. "value": "aa::aaa",
  147. "name": "yes1",
  148. },
  149. {
  150. "value": "aa::aab",
  151. "name": "yes2",
  152. },
  153. {
  154. "value": "aa::aac",
  155. "name": "yes3",
  156. },
  157. ]
  158. },
  159. {
  160. "value": "bb",
  161. "name": "bb (comment)",
  162. "children": [
  163. {
  164. "value": "bb::bba",
  165. "name": "yes11",
  166. },
  167. {
  168. "value": "bb::bbb",
  169. "name": "yes22",
  170. },
  171. {
  172. "value": "bb::bbc",
  173. "name": "yes33",
  174. },
  175. ]
  176. },
  177. ],
  178. }
  179. ]
  180. },
  181. autofocus: true
  182. });
  183. assert.equal(el.find('[name="tree_select"]').val(), 'aa::aab', 'check tree_select value');
  184. assert.equal(el.find('[name="tree_select"]').closest('.searchableSelect').find('.js-input').val(), 'yes2', 'check tree_select .js-input value');
  185. var params = App.ControllerForm.params(el)
  186. var test_params = {
  187. tree_select: 'aa::aab'
  188. }
  189. assert.deepEqual(params, test_params, 'form param check')
  190. $('#forms').append('<hr><h1>form elements check 4</h1><form id="form4"></form>')
  191. var el = $('#form4')
  192. new App.ControllerForm({
  193. el: el,
  194. model: {
  195. "configure_attributes": [
  196. {
  197. "name": "tree_select_search",
  198. "display": "tree_select_search",
  199. "tag": "tree_select_search",
  200. "null": true,
  201. "translate": true,
  202. "multiple": true,
  203. "value": ['aa::aab', 'bb', 'aa::aac::33'],
  204. "options": [
  205. {
  206. "value": "aa",
  207. "name": "yes",
  208. "children": [
  209. {
  210. "value": "aa::aaa",
  211. "name": "yes1",
  212. },
  213. {
  214. "value": "aa::aab",
  215. "name": "yes2",
  216. },
  217. {
  218. "value": "aa::aac",
  219. "name": "yes3",
  220. "children": [
  221. {
  222. "value": "aa::aaa::11",
  223. "name": "11",
  224. },
  225. {
  226. "value": "aa::aa1::22",
  227. "name": "22",
  228. },
  229. {
  230. "value": "aa::aac::33",
  231. "name": "33",
  232. },
  233. ]
  234. },
  235. ]
  236. },
  237. {
  238. "value": "bb",
  239. "name": "bb (comment)",
  240. "children": [
  241. {
  242. "value": "bb::bba",
  243. "name": "yes11",
  244. },
  245. {
  246. "value": "bb::bbb",
  247. "name": "yes22",
  248. },
  249. {
  250. "value": "bb::bbc",
  251. "name": "yes33",
  252. },
  253. ]
  254. },
  255. ],
  256. }
  257. ]
  258. },
  259. autofocus: true
  260. });
  261. var params = App.ControllerForm.params(el)
  262. var test_params = {
  263. tree_select_search: ['aa::aab', 'bb', 'aa::aac::33'],
  264. tree_select_search_completion: ""
  265. }
  266. assert.deepEqual(params, test_params, 'form param check')
  267. $('#forms').append('<hr><h1>form elements check / tree_select multiple / 3 selected</h1><form id="form6"></form>')
  268. var el = $('#form6')
  269. new App.ControllerForm({
  270. el: el,
  271. model: {
  272. "configure_attributes": [
  273. {
  274. "name": "tree_select",
  275. "display": "tree_select",
  276. "tag": "tree_select",
  277. "null": true,
  278. "multiple": true,
  279. "translate": true,
  280. "value": ['aa::aab', 'bb', 'aa::aac::33'],
  281. "options": [
  282. {
  283. "value": "aa",
  284. "name": "yes",
  285. "children": [
  286. {
  287. "value": "aa::aaa",
  288. "name": "yes1",
  289. },
  290. {
  291. "value": "aa::aab",
  292. "name": "yes2",
  293. },
  294. {
  295. "value": "aa::aac",
  296. "name": "yes3",
  297. "children": [
  298. {
  299. "value": "aa::aaa::11",
  300. "name": "11",
  301. },
  302. {
  303. "value": "aa::aa1::22",
  304. "name": "22",
  305. },
  306. {
  307. "value": "aa::aac::33",
  308. "name": "33",
  309. },
  310. ]
  311. },
  312. ]
  313. },
  314. {
  315. "value": "bb",
  316. "name": "bb (comment)",
  317. "children": [
  318. {
  319. "value": "bb::bba",
  320. "name": "yes11",
  321. },
  322. {
  323. "value": "bb::bbb",
  324. "name": "yes22",
  325. },
  326. {
  327. "value": "bb::bbc",
  328. "name": "yes33",
  329. },
  330. ]
  331. },
  332. ],
  333. }
  334. ]
  335. },
  336. autofocus: true
  337. });
  338. var params = App.ControllerForm.params(el)
  339. var test_params = {
  340. tree_select: ['aa::aab', 'bb', 'aa::aac::33'],
  341. tree_select_completion: "",
  342. }
  343. assert.deepEqual(params, test_params, 'form param check')
  344. $('#forms').append('<hr><h1>form elements check / tree_select multiple / 1 selected</h1><form id="form7"></form>')
  345. var el = $('#form7')
  346. new App.ControllerForm({
  347. el: el,
  348. model: {
  349. "configure_attributes": [
  350. {
  351. "name": "tree_select",
  352. "display": "tree_select",
  353. "tag": "tree_select",
  354. "null": true,
  355. "multiple": true,
  356. "translate": true,
  357. "value": ['aa::aab'],
  358. "options": [
  359. {
  360. "value": "aa",
  361. "name": "yes",
  362. "children": [
  363. {
  364. "value": "aa::aaa",
  365. "name": "yes1",
  366. },
  367. {
  368. "value": "aa::aab",
  369. "name": "yes2",
  370. },
  371. {
  372. "value": "aa::aac",
  373. "name": "yes3",
  374. "children": [
  375. {
  376. "value": "aa::aaa::11",
  377. "name": "11",
  378. },
  379. {
  380. "value": "aa::aa1::22",
  381. "name": "22",
  382. },
  383. {
  384. "value": "aa::aac::33",
  385. "name": "33",
  386. },
  387. ]
  388. },
  389. ]
  390. },
  391. {
  392. "value": "bb",
  393. "name": "bb (comment)",
  394. "children": [
  395. {
  396. "value": "bb::bba",
  397. "name": "yes11",
  398. },
  399. {
  400. "value": "bb::bbb",
  401. "name": "yes22",
  402. },
  403. {
  404. "value": "bb::bbc",
  405. "name": "yes33",
  406. },
  407. ]
  408. },
  409. ],
  410. }
  411. ]
  412. },
  413. autofocus: true
  414. });
  415. var params = App.ControllerForm.params(el)
  416. var test_params = {
  417. tree_select: ['aa::aab'],
  418. tree_select_completion: "",
  419. }
  420. assert.deepEqual(params, test_params, 'form param check')
  421. });
  422. QUnit.test("ui elements check", assert => {
  423. attribute = {
  424. "name": "tree_select_search",
  425. "display": "tree_select_search",
  426. "tag": "tree_select_search",
  427. "null": true,
  428. "translate": true,
  429. "value": ['bb::bba', 'bb::bbb'],
  430. "multiple": true,
  431. "options": [
  432. {
  433. "value": "aa",
  434. "name": "yes",
  435. "children": [
  436. {
  437. "value": "aa::aaa",
  438. "name": "yes1",
  439. },
  440. {
  441. "value": "aa::aab",
  442. "name": "yes2",
  443. },
  444. ]
  445. },
  446. {
  447. "value": "bb",
  448. "name": "bb (comment)",
  449. "children": [
  450. {
  451. "value": "bb::bba",
  452. "name": "yes11",
  453. },
  454. {
  455. "value": "bb::bbb",
  456. "name": "yes22",
  457. },
  458. ]
  459. },
  460. ],
  461. };
  462. options = [
  463. {
  464. "value": "aa",
  465. "name": "yes",
  466. "children": [
  467. {
  468. "value": "aa::aaa",
  469. "name": "yes1",
  470. },
  471. {
  472. "value": "aa::aab",
  473. "name": "yes2",
  474. },
  475. ]
  476. },
  477. {
  478. "value": "bb",
  479. "name": "bb (comment)",
  480. "children": [
  481. {
  482. "value": "bb::bba",
  483. "name": "yes11",
  484. },
  485. {
  486. "value": "bb::bbb",
  487. "name": "yes22",
  488. },
  489. ]
  490. }
  491. ]
  492. element = App.UiElement.tree_select_search.render(attribute)
  493. assert.deepEqual(attribute.options, options, 'options tree_select_search')
  494. attribute.name = 'tree_select'
  495. attribute.display = 'tree_select'
  496. attribute.tag = 'tree_select'
  497. element = App.UiElement.tree_select.render(attribute)
  498. assert.deepEqual(attribute.options, options, 'options tree_select')
  499. });
  500. QUnit.test("searchable_select submenu and option list check", assert => {
  501. var done = assert.async()
  502. $('#forms').append('<hr><h1>form elements check 5</h1><form id="form5"></form>')
  503. var el = $('#form5')
  504. new App.ControllerForm({
  505. el: el,
  506. model: {
  507. "configure_attributes": [
  508. {
  509. "name": "tree_select",
  510. "display": "tree_select",
  511. "tag": "tree_select",
  512. "null": true,
  513. "translate": true,
  514. "value": "bb",
  515. "options": [
  516. {
  517. "value": "a\\a",
  518. "name": "a\\a",
  519. "children": [
  520. {
  521. "value": "a\\a::aaa",
  522. "name": "aaa",
  523. },
  524. {
  525. "value": "a\\a::aab",
  526. "name": "aab",
  527. },
  528. {
  529. "value": "a\\a::aac",
  530. "name": "aac",
  531. },
  532. ]
  533. },
  534. {
  535. "value": "bb",
  536. "name": "bb",
  537. "children": [
  538. {
  539. "value": "bb::bba",
  540. "name": "bba",
  541. },
  542. {
  543. "value": "bb::bbb",
  544. "name": "bbb",
  545. },
  546. {
  547. "value": "bb::bbc",
  548. "name": "bbc",
  549. },
  550. ]
  551. },
  552. ],
  553. }
  554. ]
  555. },
  556. autofocus: true
  557. });
  558. el.find("[name=\"tree_select\"].js-shadow + .js-input").trigger('click')
  559. el.find(".searchableSelect .js-optionsList [data-value=\"a\\\\a\"] .searchableSelect-option-arrow").mouseenter().trigger('click')
  560. el.find(".searchableSelect .js-optionsSubmenu [data-value=\"a\\\\a::aab\"] .searchableSelect-option-text").mouseenter().trigger('click')
  561. el.find("[name=\"tree_select\"].js-shadow + .js-input").trigger('click')
  562. var params = App.ControllerForm.params(el)
  563. var test_params = {
  564. tree_select: 'a\\a::aab'
  565. }
  566. var optionsSubmenu = el.find(".searchableSelect [data-parent-value=\"a\\\\a\"].js-optionsSubmenu")
  567. var optionsList = el.find(".searchableSelect .js-optionsList")
  568. setTimeout( () => {
  569. assert.deepEqual(params, test_params, 'form param check')
  570. assert.equal(optionsSubmenu.is('[hidden]'), false, 'options submenu menu not hidden')
  571. assert.equal(optionsList.is('[hidden]'), true, 'options list is hidden')
  572. done()
  573. }, 300)
  574. });