From 2f848616c7052f141dc3bceb54167fd601383d9e Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Fri, 29 Mar 2019 14:31:18 +0800 Subject: [PATCH] MDL-65948 core_grade: Use new core/checkbox-toggleall --- grade/amd/build/edittree_index.min.js | Bin 1111 -> 498 bytes grade/amd/build/edittree_index.min.js.map | Bin 5975 -> 3209 bytes grade/amd/src/edittree_index.js | 63 ---------------------- grade/edit/tree/lib.php | 59 +++++++++++++++----- grade/templates/edit_tree.mustache | 16 ++++-- 5 files changed, 60 insertions(+), 78 deletions(-) diff --git a/grade/amd/build/edittree_index.min.js b/grade/amd/build/edittree_index.min.js index cc73e30640cb57e57911478ba5ce73efb505f726..4692f4a738a12e1c4a1f90f2cbfaa041c7a1c6c6 100644 GIT binary patch delta 18 acmcc4@rijt>SP|qd6N$^uAVH+;sO9k69)DG literal 1111 zcmaKsO>d(x5Qgvl6~wtnF%(-xwb$jZSkcU(cU0;Roo06T3J{3XejeEe>~9m#u=wN`pv*_hMrz+EKL zON4ejCZbYDLK$8lvfwrck`Sgnlnoe=p6T3TBc+``l0-0BfZT7Y18l&yubz9L>zgV@ z%RLs^D(?A`_s!Ec(v$8+&}9$06s_40ecs4>DDSI0H}Kt<*S`C6;J9mW!TbX{FFe9H zrxk*a`M>)3v#nd-C(lcSE%6@DJh+=_Cvpt>@Yol+p-h^pfyT!qt6WKFB2&Rodli#; z;12b4XhG;&vI95qBV7yDw4&5Lrl;_7uNEF)d>C_rc{N4QPO#d+0jz(5jJF1htpk}% z&t!>8<(1CkK*55ZWovl}sP>@Djw}=lHsC2LsTH9M5|pOcp{iq|bi;)KMUt63hk9g; z&OvVb#~#1+abTvbGiCX07r9D$N?lrcd6r*IB_+|nyA z?Hu^l*$4%>-HBk!yDa;k{bW-EckjFT^mwEzHWFGXtr literal 5975 zcmcIo3vb&-68!}`LnRH6wr*2+Mai-*e#<`BmjuCzTuHPkuF8jOBk+IkH?v%d z@}upcI0L50-PzfhZ@!s*d~2*fm`&*sG_U6uvfrY2jEn#ANfr-n(HTrZ%H`d|)zRw}_WFDHwb1gK}3>6K24 zzMiTwp~loi)Sj6eJR?;o7BWlx%yi-G!`A|4;wRDRteE2^XA3pWqg6;PI-RRD)C9po zEthdR15_<3%bt|pk(3ACk9Z5bKn8o>iR=&YCi{2{_Pnu_W9pG-^ti<1;5Tn5<%khw4|OZdBq#J%_PjgHzv|J)b)N^b%3$DK zqvKs4gNAbNZz+X4tTgX=i@uZvE4>>ulny-urO7TU{rBHe+ORaPEqxO-l#V>=NUf#& z4W%1!McK>2MuiIxknaKMEX-ahSpdIKLX8hS2T12!~)5PSuG!FvVCf$*c_7c zV;fvIp2BzL1Ty9YsK$m^5sMqo@xI4oJEEy-vISYd6l1mpffq`Q9>R==9JClkG}y|L zhm84u(H4v}^)RuA+-f~ICgd0gMe@X)K4CGG$0T2AqCC0jtu??72s0343L#s2%b>px zypK};!~=Pr-}@|_@yDA!Mfoki=L4RBS^YRDNITAw6-haG1F5UnTJS8BdG=Yr;BosJ zyxS+i8~mTa8*G3Fqz;~e4p^|Q%xr`o!TpI*WPrZ2Fn1YC(wwa1m-Jm&x@=M( z7W}wYm)X=tmZH6x+jasw)LDW;$ti53MI!(Ro|Y_JSeYW%q%DX*MCJ)f-GlN>L=9xd zlUCNNX8nkJD3%D*6-(gVdH;hgn)+|Z z?IGvgYWNZF@{krvyK4wcT43d+%|o{<&gOA0rg5SLewQjMgqey1VwZqV{O@FFH1-`LH`C%qWqMoOnNox*6&W@fd6C7FvVihJs5I)DOe{_;<%h7aVYlVP^Y;T3T9GEKG%_$SVc5sm#i39 zR)}2#&8onL$rCz8e2PXGj-wgI?Mk zv95TrOk#KnY%`S>cQBq+91Ko_J&cjP(f;V{5>;}z^vA~Z{~ zj;(%PH&3k+lg`-JibgPPG!>~SJdwl1Un<_++}!xHv}EFe0~G(f`zx%0mRGMnr{a|u z*u5UlI?Gg~C&pY0+6qHcQ7-K)E0x8j1XWcSCvg#La!FVXJ78o9w$on-r@ykA{K1x* zC)-)7@LJ7SwjpZ!$p4Hs#zK7m=IwhS(K11ryH z{wMqyTpfDS*M<#gir=9 zR1waRDmY?Lkr4Lm!4aingrE(-P$2-1u$510LooVfr#&&zU3<%iW9<;z{+VujqV2Ob zJ{b7%EJakKI4b}}ZIJ)?*t7LB5sQqXzuGWL1}ZRZoQB$LVEfRdx-F78y=ETS0S}Eq zSg*;JPjr}htr+|dpIgkXuMV=;d|rD^M<#oY`P}-_wDPHQ*k9Or!>2O=;QkH{GML zuHVObw)2+yYmIneP1dzev+sUW5qK5s;l$10#3_mq*0`LG-L81nU^NhOe0hSl^{$ACYZt2+Iz*+)(2elC226U?5 zRUs_`jv$RK^98x-WM1@3EGd?zs8r-X(C3RWDox6s(8tlffLX4z?DL!c&!j*vSq zcplr#X^7S>$BjP?m%^sO76iemOCdrXGSlf_1!wcl#^Einbp7-AZ0i0WLsXga4}(PE zp+AJk-;75Hdd&>hJC2BGECF?BTns!*02@cw$bnfKSyPky4^Wxv`>~pFPls@*3r@F3 zdHgt^8aG>wNNuKy*vYVw$x`v{>V($wdnfrYhZ@S7q1i~DO4Snux2k4OyA;qJp}3i2 zy~l2t_Qi~fr6zX$qQGLOqvyH#7)0jyX zC{Zh(ip~oX_U#?x27n|`fjCu3t{aO0>|E1_CUiHG4H=^CdT#<^(v@ZB`Q^>2fMafX zdr(d`3Kv<21?JQeMyo8jBX=lZ6eR|19VU{-U**mVH&?^l2WuCD^0>;mfty9NQtLV^ zt!sW&{aCBS4mOxL*V&Euc4KG#U=xl_uG_nk;nh9wb{$d+KTW}g(*-acZE^YQvbnk+ LU&JZhk>CFTp$z*H diff --git a/grade/amd/src/edittree_index.js b/grade/amd/src/edittree_index.js index 9316f842f6b..bb9aa792b2e 100644 --- a/grade/amd/src/edittree_index.js +++ b/grade/amd/src/edittree_index.js @@ -30,12 +30,6 @@ define([ * @method edittree */ var edittree = function() { - // Watch items and toggle the move menu accordingly. - $('body').on('change', '.itemselect.ignoredirty', edittree.checkMoveMenuState); - - // Watch for the 'All' and 'None' links. - $('body').on('click', '[data-action="grade_edittree-index-bulkselect"]', edittree.toggleAllSelectItems); - // Watch for the weight override checkboxes. $('body').on('change', '.weightoverride', edittree.toggleWeightInput); @@ -47,9 +41,6 @@ define([ bulkmove.val(1); form.submit(); }); - - // CHeck the initial state of the move menu. - edittree.checkMoveMenuState(); }; /** @@ -67,60 +58,6 @@ define([ $('input[name="weight_' + row.data('itemid') + '"]').prop('disabled', !node.prop('checked')); }; - /** - * Toggle all select boxes on or off. - * - * @method toggleAllSelectItems - * @param {EventFacade} e - * @private - */ - edittree.toggleAllSelectItems = function(e) { - e.preventDefault(); - - var node = $(this), - row = node.closest('tr'); - $('.' + row.data('category') + ' .itemselect').prop('checked', node.data('checked')); - - edittree.checkMoveMenuState(); - }; - - /** - * Get the move menu. - * - * @method getMoveMenu - * @private - * @return {jQuery} - */ - edittree.getMoveMenu = function() { - return $('#menumoveafter'); - }; - - /** - * Check whether any checkboxes are ticked. - * - * @method checkMoveMenuState - * @private - * @return {Boolean} - */ - edittree.checkMoveMenuState = function() { - var menu = edittree.getMoveMenu(); - if (!menu.length) { - return false; - } - - var selected; - $('.itemselect').each(function() { - selected = $(this).prop('checked'); - - // Return early if any are checked. - return !selected; - }); - - menu.prop('disabled', !selected); - - return selected; - }; - return /** @alias module:core_grades/edittree_index */ { enhance: edittree }; diff --git a/grade/edit/tree/lib.php b/grade/edit/tree/lib.php index 86cf33e4942..9b42775ed32 100644 --- a/grade/edit/tree/lib.php +++ b/grade/edit/tree/lib.php @@ -840,20 +840,24 @@ class grade_edit_tree_column_select extends grade_edit_tree_column { } public function get_category_cell($category, $levelclass, $params) { + global $OUTPUT; + if (empty($params['eid'])) { throw new Exception('Array key (eid) missing from 3rd param of grade_edit_tree_column_select::get_category_cell($category, $levelclass, $params)'); } - $selectall = html_writer::link('#', get_string('all'), [ - 'data-action' => 'grade_edittree-index-bulkselect', - 'data-checked' => true, - ]); - $selectnone = html_writer::link('#', get_string('none'), [ - 'data-action' => 'grade_edittree-index-bulkselect', - 'data-checked' => false, + + $togglegroup = $this->get_checkbox_togglegroup($category); + $mastercheckbox = new \core\output\checkbox_toggleall($togglegroup, true, [ + 'id' => $togglegroup, + 'name' => $togglegroup, + 'value' => 1, + 'label' => get_string('all'), + 'selectall' => get_string('all'), + 'deselectall' => get_string('none'), ]); $categorycell = parent::get_category_cell($category, $levelclass, $params); - $categorycell->text = $selectall . ' / ' . $selectnone; + $categorycell->text = $OUTPUT->render($mastercheckbox); return $categorycell; } @@ -864,12 +868,43 @@ class grade_edit_tree_column_select extends grade_edit_tree_column { $itemcell = parent::get_item_cell($item, $params); if ($params['itemtype'] != 'course' && $params['itemtype'] != 'category') { - $itemcell->text = ' - '; + global $OUTPUT; + + // Fetch the grade item's category. + $category = grade_category::fetch(['id' => $item->categoryid]); + $togglegroup = $this->get_checkbox_togglegroup($category); + + $checkboxid = 'select_' . $params['eid']; + $checkbox = new \core\output\checkbox_toggleall($togglegroup, false, [ + 'id' => $checkboxid, + 'name' => $checkboxid, + 'label' => get_string('select', 'grades', $item->itemname), + 'labelclasses' => 'accesshide', + 'classes' => 'itemselect ignoredirty', + ]); + $itemcell->text = $OUTPUT->render($checkbox); } return $itemcell; } + + /** + * Generates a toggle group name for a bulk-action checkbox based on the given grade category. + * + * @param grade_category $category The grade category. + * @return string + */ + protected function get_checkbox_togglegroup(grade_category $category): string { + $levels = []; + $categories = explode('/', $category->path); + foreach ($categories as $categoryid) { + $level = 'category' . $categoryid; + if (!in_array($level, $levels)) { + $levels[] = 'category' . $categoryid; + } + } + $togglegroup = implode(' ', $levels); + + return $togglegroup; + } } diff --git a/grade/templates/edit_tree.mustache b/grade/templates/edit_tree.mustache index 5c4c539cf10..5767d761ddc 100644 --- a/grade/templates/edit_tree.mustache +++ b/grade/templates/edit_tree.mustache @@ -17,11 +17,20 @@ {{! @template core_grades/edit_tree - Edit tree. + Edit tree template. + + Context variables required for this template: + * actionurl - string - Form action URL. + * sesskey - string - The session key. + * notification - object - Context data for the notification. + * showsave - boolean - Whether to show the save changes button. + * showbulkmove - boolean - Whether to show the bulk move select menu. + * table - string - HTML content of the grade items table. + * bulkmoveoptions - array - Key-value pair array for the options of the the bulk move select menu element. Example context (json): { - "actionurl": "https://domain.example/grade/edit/tree/index.php?id=4", + "actionurl": "#", "sesskey": "fakesesskey", "notification": "", "table": "
NameWeightsMax gradeActions
", @@ -48,7 +57,8 @@
- {{#bulkmoveoptions}} {{/bulkmoveoptions}} -- 2.43.0