MDL-55496 output: Make paging_bar a templatable

Part of MDL-55071
This commit is contained in:
Frederic Massart
2016-09-23 10:53:29 +01:00
committed by Dan Poltawski
parent 270dd87113
commit b0da86e03b
4 changed files with 137 additions and 1 deletions
+77 -1
View File
@@ -2417,7 +2417,7 @@ class html_table_cell {
* @package core
* @category output
*/
class paging_bar implements renderable {
class paging_bar implements renderable, templatable {
/**
* @var int The maximum number of pagelinks to display.
@@ -2569,6 +2569,82 @@ class paging_bar implements renderable {
}
}
}
/**
* Export for template.
*
* @param renderer_base $output The renderer.
* @return stdClass
*/
public function export_for_template(renderer_base $output) {
$data = new stdClass();
$data->previous = null;
$data->next = null;
$data->first = null;
$data->last = null;
$data->label = get_string('page');
$data->pages = [];
$data->haspages = $this->totalcount > $this->perpage;
if (!$data->haspages) {
return $data;
}
if ($this->page > 0) {
$data->previous = [
'page' => $this->page - 1,
'url' => (new moodle_url($this->baseurl, [$this->pagevar => $this->page - 1]))->out(false)
];
}
$currpage = 0;
if ($this->page > round(($this->maxdisplay / 3) * 2)) {
$currpage = $this->page - round($this->maxdisplay / 3);
$data->first = [
'page' => 1,
'url' => (new moodle_url($this->baseurl, [$this->pagevar => 0]))->out(false)
];
}
$lastpage = 1;
if ($this->perpage > 0) {
$lastpage = ceil($this->totalcount / $this->perpage);
}
$displaycount = 0;
$displaypage = 0;
while ($displaycount < $this->maxdisplay and $currpage < $lastpage) {
$displaypage = $currpage + 1;
$iscurrent = $this->page == $currpage;
$link = new moodle_url($this->baseurl, [$this->pagevar => $currpage]);
$data->pages[] = [
'page' => $displaypage,
'active' => $iscurrent,
'url' => $iscurrent ? null : $link->out(false)
];
$displaycount++;
$currpage++;
}
if ($currpage < $lastpage) {
$data->last = [
'page' => $lastpage,
'url' => (new moodle_url($this->baseurl, [$this->pagevar => $lastpage - 1]))->out(false)
];
}
if ($this->page + 1 != $lastpage) {
$data->next = [
'page' => $this->page + 1,
'url' => (new moodle_url($this->baseurl, [$this->pagevar => $this->page + 1]))->out(false)
];
}
return $data;
}
}
/**
@@ -29,6 +29,7 @@ use preferences_groups;
use action_menu;
use help_icon;
use single_select;
use paging_bar;
defined('MOODLE_INTERNAL') || die;
@@ -284,4 +285,14 @@ class core_renderer extends \core_renderer {
return $this->render_from_template('core/single_select', $select->export_for_template($this));
}
/**
* Renders a paging bar.
*
* @param paging_bar $pagingbar The object.
* @return string HTML
*/
protected function render_paging_bar(paging_bar $pagingbar) {
return $this->render_from_template('core/paging_bar', $pagingbar->export_for_template($this));
}
}
+1
View File
@@ -25,6 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$string['choosereadme'] = 'Hey, change me!';
$string['currentinparentheses'] = '(current)';
$string['pluginname'] = 'NONAME';
$string['region-side-post'] = 'Right';
$string['region-side-pre'] = 'Left';
@@ -0,0 +1,48 @@
{{#haspages}}
<nav aria-label="{{label}}">
<ul class="pagination">
{{#previous}}
<li class="page-item">
<a href="{{url}}" class="page-link">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only">{{#str}}previous{{/str}}</span>
</a>
</li>
{{/previous}}
{{#first}}
<li class="page-item">
<a href="{{url}}" class="page-link">{{page}}</a>
</li>
<li class="page-item disabled">
<span class="page-link">&hellip;</a>
</li>
{{/first}}
{{#pages}}
<li class="page-item {{#active}}active{{/active}}">
<a href="{{url}}" class="page-link">
{{page}}
{{#active}}
<span class="sr-only">{{#str}}currentinparentheses, theme_noname{{/str}}</span>
{{/active}}
</a>
</li>
{{/pages}}
{{#last}}
<li class="page-item disabled">
<span class="page-link">&hellip;</a>
</li>
<li class="page-item">
<a href="{{url}}" class="page-link">{{page}}</a>
</li>
{{/last}}
{{#next}}
<li class="page-item">
<a href="{{url}}" class="page-link">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only">{{#str}}next{{/str}}</span>
</a>
</li>
{{/next}}
</ul>
</nav>
{{/haspages}}