Guest User

Untitled

a guest
Dec 18th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.48 KB | None | 0 0
  1. /**
  2. @file
  3. @author Fyodorov "bga" Alexander <bga.email@gmail.com>
  4.  
  5. @section LICENSE
  6.  
  7. Copyright (c) 2009-2010, Fyodorov "Bga" Alexander <bga.email@gmail.com>
  8. All rights reserved.
  9.  
  10. Redistribution and use in source and binary forms, with or without
  11. modification, are permitted provided that the following conditions are met:
  12. * Redistributions of source code must retain the above copyright
  13. notice, this list of conditions and the following disclaimer.
  14. * Redistributions in binary form must reproduce the above copyright
  15. notice, this list of conditions and the following disclaimer in the
  16. documentation and/or other materials provided with the distribution.
  17. * The name of the developer may not be used to endorse or promote
  18. products derived from this software without specific prior
  19. written permission.
  20.  
  21. THIS SOFTWARE IS PROVIDED BY FYODOROV "BGA" ALEXANDER "AS IS" AND ANY EXPRESS OR
  22. IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  23. OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24. IN NO EVENT SHALL FYODOROV "BGA" ALEXANDER BE LIABLE FOR ANY DIRECT, INDIRECT,
  25. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26. NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  
  32. @section DESCRIPTION
  33.  
  34. cross browser support functions for DOM.Node
  35.  
  36. */
  37.  
  38. $jb.Loader._scope().
  39. //_require("$jb/$jb.nav.js").
  40. _require("$jb/$G.Function.js").
  41. //_require("$jb/$G.Array.js").
  42. //_require("$jb/$G.Object.js").
  43. _require("$jb/OOP.js").
  44. _require("$jb/$G.Date.js").
  45. _require("$jb/$jb.I18n.js").
  46. _require("$jb/$jb._dom.js").
  47. _require("$A/$A._loadControllers.js").
  48. //_require("$A/$A.GroupSelect.js").
  49. //_require("$A/$A.SortableTable.js").
  50. _require("$css/users-table.css").
  51. _require("$tmls/$A.UsersTable.asp").
  52. _willDeclared("$A/$A.UsersTable.js").
  53. _completed(function($G, $jb, $A){
  54.  
  55. var _dom = $jb._dom;
  56.  
  57. $A.UsersTable = function(v)
  58. {
  59. //$A.SortableTable.call(this, v);
  60. $jb.DOM.Plugin.call(this, v);
  61.  
  62. this.sortableTable;
  63. this.rowsSelection;
  64.  
  65. var self = this;
  66.  
  67. this._html(this.layoutTml_._apply(null));
  68.  
  69. var notReadyCount = 4;
  70. var users;
  71.  
  72. var _final = function()
  73. {
  74. console.log('_final');
  75.  
  76. var i = -1, len = users.length;
  77. var t = '';
  78.  
  79. while(++i < len)
  80. t += self.rowTml_._apply(null, [users[i], self.userCategories]);
  81.  
  82. self._find('.users-table-tbody')._append(t);
  83.  
  84. $A._loadControllers(self);
  85.  
  86. var i = -1, dm = self.sortableTable.dataManagers, len = dm.length;
  87.  
  88. while(++i < len && dm[i] == null)
  89. ;
  90.  
  91. self.sortableTable._sortByColomn(i, 1);
  92.  
  93. self.rowsSelection._updateAll();
  94. self._updateAll();
  95. };
  96.  
  97. this._find('.users-selection-controller')._attachEvent(
  98. 'plug',
  99. function(e)
  100. {
  101. if(e.target == e.currentTarget)
  102. {
  103. console.log(e.target);
  104. self.rowsSelection = _dom(e.target);
  105.  
  106. if(--notReadyCount == 0)
  107. _final();
  108. }
  109. }
  110. );
  111.  
  112. this._find('.users-table')._attachEvent(
  113. 'plug',
  114. function(e)
  115. {
  116. if(e.target == e.currentTarget)
  117. {
  118. self.sortableTable = _dom(e.target);
  119.  
  120. if(--notReadyCount == 0)
  121. _final();
  122. }
  123. }
  124. );
  125.  
  126. this._find('.users-selection-popup-menu')._attachEvent(
  127. 'plug',
  128. function(e)
  129. {
  130. if(e.target == e.currentTarget)
  131. {
  132. self.popupMenu = _dom(e.target);
  133. }
  134. }
  135. );
  136.  
  137.  
  138. $A._loadControllers(this);
  139.  
  140. this.lastServerRequest_ = $A.server._getUsersByCategory(
  141. +this._attr('users-category-id'),
  142. function(err, data)
  143. {
  144. if(err != null)
  145. {
  146. console.error('$A.UsersTable::constructor failed to load users data, error = ', err)
  147. }
  148. else
  149. {
  150. users = data;
  151. }
  152.  
  153. if(--notReadyCount == 0)
  154. _final();
  155. }
  156. );
  157.  
  158. this.userCategories;
  159.  
  160. $A.server._getUserCategories(
  161. function(err, data)
  162. {
  163. if(err != null)
  164. {
  165. console.error('$A.UsersTable::constructor failed to load users categories, error = ', err)
  166. }
  167. else
  168. {
  169. self.userCategories = data;
  170. }
  171.  
  172. if(--notReadyCount == 0)
  173. _final();
  174. }
  175. );
  176.  
  177. this._onSelectionPopupMenuOpenerClick = this._onSelectionPopupMenuOpenerClick._fBind(this);
  178.  
  179. this._onEditButtonClick = this._onEditButtonClick._fBind(this);
  180. this._onToggleShortInfo = this._onToggleShortInfo._fBind(this);
  181. this._onToggleAllPhotos = this._onToggleAllPhotos._fBind(this);
  182. this._onPhotoChangeClick = this._onPhotoChangeClick._fBind(this);
  183.  
  184. this._onListItemAdd = this._onListItemAdd._fBind(this);
  185. this._onListItemRemove = this._onListItemRemove._fBind(this);
  186.  
  187. this._onSelectionLockClick = this._onSelectionLockClick._fBind(this);
  188. this._onLockUsersComplete = this._onLockUsersComplete._fBind(this);
  189.  
  190. this._onSelectionRemoveClick = this._onSelectionRemoveClick._fBind(this);
  191. this._onRemoveUsersComplete = this._onRemoveUsersComplete._fBind(this);
  192.  
  193. this._onEditSubmit = this._onEditSubmit._fBind(this);
  194. this._onEditReset = this._onEditReset._fBind(this);
  195. this._onUserDataGet = this._onUserDataGet._fBind(this);
  196.  
  197. this._onLockUserClick = this._onLockUserClick._fBind(this);
  198. this._onRemoveUserClick = this._onRemoveUserClick._fBind(this);
  199. };
  200.  
  201. //$A.UsersTable._staticDeriveFrom($A.SortableTable);
  202. $A.UsersTable._staticDeriveFrom($jb.DOM.Plugin);
  203.  
  204. $A.UsersTable.prototype.layoutTml_ = $jb.Loader.templateResource.loadedTemplateMap['$A.UsersTable.prototype.layoutTml_'];
  205. $A.UsersTable.prototype.rowTml_ = $jb.Loader.templateResource.loadedTemplateMap['$A.UsersTable.prototype.rowTml_'];
  206. $A.UsersTable.prototype.phoneTml_ = $jb.Loader.templateResource.loadedTemplateMap['$A.UsersTable.prototype.phoneTml_'];
  207.  
  208. $A.UsersTable.prototype._updateAll = function()
  209. {
  210. this._find('.users-selection-popup-menu-opener')._reattachEvent('click', this._onSelectionPopupMenuOpenerClick);
  211. this._find('.users-show-all-user-photos')._reattachEvent('click', this._onToggleAllPhotos);
  212.  
  213. this._find('.users-user-edit-user-button')._reattachEvent('click', this._onEditButtonClick);
  214. this._find('.users-editable-field.user-name, .users-editable-field.user-surname')._reattachEvent('click', this._onToggleShortInfo);
  215.  
  216. this._find('.users-change-photo')._reattachEvent('click', this._onPhotoChangeClick);
  217.  
  218. this._find('.users-row')._reattachEvent('listItemAdd', this._onListItemAdd);
  219. this._find('.users-row')._reattachEvent('listItemRemove', this._onListItemRemove);
  220.  
  221. this._find('.users-selection-lock')._reattachEvent('click', this._onSelectionLockClick);
  222. this._find('.users-selection-remove')._reattachEvent('click', this._onSelectionRemoveClick);
  223.  
  224. this._find('.users-edit-form')._reattachEvent('submit', this._onEditSubmit);
  225. this._find('.users-edit-form')._reattachEvent('reset', this._onEditReset);
  226.  
  227. this._find('.users-user-lock-button')._reattachEvent('click', this._onLockUserClick);
  228. this._find('.users-user-delete-button')._reattachEvent('click', this._onRemoveUserClick);
  229. };
  230.  
  231. $A.UsersTable.prototype._sortDataGetUserName = function(cell)
  232. {
  233. var v = _dom(cell);
  234.  
  235. return v._next('td')._find('.user-surname')._attr('value') + v._find('.user-name')._attr('value');
  236. };
  237. $A.UsersTable.prototype._sortDataGetUserEmail = function(cell)
  238. {
  239. //console.log(cell);
  240. return _dom(cell)._find('.user-email')._attr('value');
  241. };
  242. $A.UsersTable.prototype._sortDataGetUserPhone = function(cell)
  243. {
  244. //console.log(cell);
  245. return _dom(cell)._find('.user-phone')._attr('value');
  246. };
  247.  
  248.  
  249. $A.UsersTable.prototype._onSelectionPopupMenuOpenerClick = function(e)
  250. {
  251. e.stopPropagation();
  252. e.preventDefault();
  253.  
  254. //_dom(this._find('.users-selection-popup-menu')[0])._show();
  255. if(this.popupMenu)
  256. this.popupMenu._show();
  257. };
  258.  
  259. $A.UsersTable.prototype._removeRow = function(row)
  260. {
  261. this.rowsSelection._removeCheckBox(row._find('.users-select-user-checkbox')[0]);
  262. this.sortableTable._removeRow(row[0]);
  263. };
  264. $A.UsersTable.prototype._insertRow = function(row)
  265. {
  266. this.sortableTable._insertRow(row[0]);
  267.  
  268. row._find('.users-editable-field.user-name, .users-editable-field.user-surname')._reattachEvent('click', this._onToggleShortInfo);
  269.  
  270. row._find('.users-user-edit-user-button')._reattachEvent('click', this._onEditButtonClick);
  271. row._find('.users-change-photo')._reattachEvent('click', this._onPhotoChangeClick);
  272.  
  273. row._find('.users-row')._reattachEvent('listItemAdd', this._onListItemAdd);
  274. row._find('.users-row')._reattachEvent('listItemRemove', this._onListItemRemove);
  275.  
  276. row._find('.users-selection-lock')._reattachEvent('click', this._onSelectionLockClick);
  277. row._find('.users-selection-remove')._reattachEvent('click', this._onSelectionRemoveClick);
  278.  
  279. row._find('.users-edit-form')._reattachEvent('submit', this._onEditSubmit);
  280. row._find('.users-edit-form')._reattachEvent('reset', this._onEditReset);
  281.  
  282. row._find('.users-user-lock-button')._reattachEvent('click', this._onLockUserClick);
  283. row._find('.users-user-delete-button')._reattachEvent('click', this._onRemoveUserClick);
  284.  
  285. this.rowsSelection._addCheckBox(row._find('.users-select-user-checkbox')[0])
  286. };
  287.  
  288. $A.UsersTable.prototype._lockInputFields = function(row)
  289. {
  290. row._find('.users-editable-field.user-caterory')._attr('disabled', 'disabled');
  291. row._find('.users-editable-field:not(:disabled)')._attr('readonly', 'readonly');
  292. };
  293. $A.UsersTable.prototype._unlockInputFields = function(row)
  294. {
  295. row._find('.users-editable-field')._removeAttr('readonly')._removeAttr('disabled');
  296. };
  297.  
  298. $A.UsersTable.prototype._switchRowToBlockMode = function(row, text)
  299. {
  300. row._find('.users-user-process-status')._text(text);
  301.  
  302. row._addClass('users-row-mode-block');
  303. this._lockInputFields(row);
  304.  
  305. //this.rowsSelection._removeCheckBox(row._find('.users-select-user-checkbox')[0]);
  306. return row;
  307. };
  308. $A.UsersTable.prototype._switchRowToEditMode = function(row)
  309. {
  310. row._removeClass('users-row-mode-view users-row-mode-short-info')._addClass('users-row-mode-edit');
  311.  
  312. row._find('.users-editable-field.user-name, .users-editable-field.user-surname')._detachEvent('click', this._onToggleShortInfo);
  313. this._unlockInputFields(row);
  314. //row._find('.users-order-prepare-date-value')._removeAttr('disabled');
  315. //row._find('.users-order-prepare-date-value')._attr('disabled', '');
  316.  
  317. this.rowsSelection._removeCheckBox(row._find('.users-select-user-checkbox')[0]);
  318.  
  319. return row;
  320. };
  321.  
  322. $A.UsersTable.prototype._switchRowToViewMode = function(row)
  323. {
  324. row._removeClass('users-row-mode-block users-row-mode-edit')._addClass('users-row-mode-view');
  325. this._lockInputFields(row);
  326.  
  327. this.rowsSelection._addCheckBox(row._find('.users-select-user-checkbox')[0]);
  328.  
  329. row._find('.users-editable-field.user-name, .users-editable-field.user-surname')._reattachEvent('click', this._onToggleShortInfo);
  330.  
  331. return row;
  332. };
  333.  
  334. $A.UsersTable.prototype._onEditButtonClick = function(e)
  335. {
  336. e.stopPropagation();
  337. e.preventDefault();
  338.  
  339. this._switchRowToEditMode(_dom(e.target)._parents('tr'));
  340. };
  341. $A.UsersTable.prototype._onToggleShortInfo = function(e)
  342. {
  343. e.stopPropagation();
  344. e.preventDefault();
  345.  
  346. _dom(e.target)._parents('tr')._toggleClass('users-row-mode-short-info');
  347. };
  348. $A.UsersTable.prototype._onToggleAllPhotos = function(e)
  349. {
  350. e.stopPropagation();
  351. //e.preventDefault();
  352.  
  353. var v = _dom(e.target)._parents('table');
  354.  
  355. v._toggleClass('users-table-mode-no-photo', !e.target.checked);
  356. };
  357. $A.UsersTable.prototype._onPhotoChangeClick = function(e)
  358. {
  359. e.stopPropagation();
  360. e.preventDefault();
  361.  
  362. throw new NotSupportedError('$A.UsersTable::_onPhotoChangeClick photo upload not supported');
  363. };
  364. $A.UsersTable.prototype._onListItemAdd = function(e, v)
  365. {
  366. e.stopPropagation();
  367. e.preventDefault();
  368.  
  369. _dom(_dom(e.currentTarget)._find('form')[0])._addElToValidation(v);
  370. };
  371. $A.UsersTable.prototype._onListItemRemove = function(e, v)
  372. {
  373. e.stopPropagation();
  374. e.preventDefault();
  375.  
  376. _dom(_dom(e.currentTarget)._find('form')[0])._removeElFromValidation(v);
  377. };
  378.  
  379. $A.UsersTable.prototype._onSelectionLockClick = function(e)
  380. {
  381. e.preventDefault();
  382. //e.stopPropagation();
  383.  
  384. var cbs = this.rowsSelection._getSelectedCheckBoxes();
  385. var i = cbs.length;
  386. var ids = new Array(i);
  387. var text = $jb.i18n._translate('Locking user...');
  388.  
  389. while(i--)
  390. {
  391. var row = _dom(cbs[i])._parents('tr');
  392.  
  393. ids[i] = +row._attr('user-id');
  394. this._switchRowToBlockMode(row, text);
  395. this.rowsSelection._uncheckCheckBox(row._find('.users-select-user-checkbox')[0]);
  396. }
  397.  
  398. this.popupMenu._hide();
  399.  
  400. console.log('lock user ids = ', ids);
  401.  
  402. $A.server._lockUsers(
  403. ids,
  404. this._onLockUsersComplete
  405. );
  406. };
  407.  
  408. $A.UsersTable.prototype._onLockUsersComplete = function(err, data)
  409. {
  410. if(err != null)
  411. {
  412. console.error('$A.UsersTable::_onLockUsersComplete failed to lock users err', err);
  413.  
  414. return;
  415. }
  416.  
  417. var i = data.length;
  418.  
  419. while(i--)
  420. {
  421. var row = this._find('[user-id=' + data[i] + ']');
  422.  
  423. this._switchRowToViewMode(row);
  424. row._addClass('users-row-mode-user-lock');
  425. }
  426. };
  427.  
  428. $A.UsersTable.prototype._onSelectionRemoveClick = function(e)
  429. {
  430. e.preventDefault();
  431. //e.stopPropagation();
  432.  
  433. var cbs = this.rowsSelection._getSelectedCheckBoxes();
  434. var i = cbs.length;
  435. var ids = new Array(i);
  436. var text = $jb.i18n._translate('Removing user...');
  437.  
  438. while(i--)
  439. {
  440. var row = _dom(cbs[i])._parents('tr');
  441.  
  442. ids[i] = +row._attr('user-id');
  443. this._switchRowToBlockMode(row, text);
  444. this.rowsSelection._uncheckCheckBox(row._find('.users-select-user-checkbox')[0]);
  445. }
  446.  
  447. this.popupMenu._hide();
  448.  
  449. console.log('remove user ids = ', ids);
  450.  
  451. $A.server._removeUsers(
  452. ids,
  453. this._onRemoveUsersComplete
  454. );
  455. };
  456.  
  457. $A.UsersTable.prototype._onRemoveUsersComplete = function(err, data)
  458. {
  459. if(err != null)
  460. {
  461. console.error('$A.UsersTable::_onRemoveUsersComplete failed to remove users err', err);
  462.  
  463. return;
  464. }
  465.  
  466. var i = data.length;
  467.  
  468. while(i--)
  469. {
  470. var row = this._find('[user-id=' + data[i] + ']');
  471.  
  472. this._removeRow(row);
  473. }
  474. };
  475.  
  476. $A.UsersTable.prototype._onEditSubmit = function(e)
  477. {
  478. e.preventDefault();
  479.  
  480. console.log(e.target);
  481.  
  482. var form = _dom(e.target);
  483.  
  484. var data = form._serialize();
  485. var tr = _dom(e.target)._parents('tr');
  486. var userId = +tr._attr('user-id');
  487.  
  488. this._switchRowToBlockMode(tr, $jb.i18n._translate('Saving...'));
  489.  
  490. console.log('submit user-id = ', userId, ' data = ', data);
  491.  
  492. $A.server._editUser(
  493. userId,
  494. data,
  495. this._onUserDataGet
  496. );
  497. };
  498.  
  499. $A.UsersTable.prototype._onEditReset = function(e)
  500. {
  501. e.preventDefault();
  502.  
  503. var form = _dom(e.target);
  504. var tr = _dom(e.target)._parents('tr');
  505.  
  506. this._switchRowToBlockMode(tr, $jb.i18n._translate('Reseting...'));
  507.  
  508. $A.server._getUserById(
  509. tr._attr('user-id'),
  510. this._onUserDataGet
  511. );
  512. };
  513.  
  514.  
  515. $A.UsersTable.prototype._onUserDataGet = function(err, data)
  516. {
  517. if(err != null)
  518. {
  519. console.error('$A.UsersTable::_onUserDataGet failed to get user data err = ', err);
  520.  
  521. return;
  522. }
  523.  
  524. this._removeRow(this._find('[user-id=' + data.id + ']'));
  525.  
  526. var tr = _dom(this.rowTml_._apply(null, [data, this.userCategories]));
  527.  
  528. this._insertRow(tr);
  529.  
  530. $A._loadControllers(tr);
  531. };
  532.  
  533. $A.UsersTable.prototype._onLockUserClick = function(e)
  534. {
  535. e.preventDefault();
  536. //e.stopPropagation();
  537.  
  538. var tr = _dom(e.target)._parents('tr');
  539. var ids = [+tr._attr('user-id')];
  540. this._switchRowToBlockMode(tr, $jb.i18n._translate('Locking user...'));
  541.  
  542. console.log('lock user ids = ', ids);
  543.  
  544. $A.server._lockUsers(
  545. ids,
  546. this._onLockUsersComplete
  547. );
  548. };
  549.  
  550. $A.UsersTable.prototype._onRemoveUserClick = function(e)
  551. {
  552. e.preventDefault();
  553. //e.stopPropagation();
  554.  
  555. var tr = _dom(e.target)._parents('tr');
  556. var ids = [+tr._attr('user-id')];
  557. this._switchRowToBlockMode(tr, $jb.i18n._translate('Removing user...'));
  558.  
  559. console.log('remove ids = ', ids);
  560.  
  561. $A.server._removeUsers(
  562. ids,
  563. this._onRemoveUsersComplete
  564. );
  565. };
  566.  
  567. });
Add Comment
Please, Sign In to add comment