Open Journal Systems  3.3.0
InfiniteScrollingFeature.inc.php
1 <?php
2 
18 import('lib.pkp.classes.controllers.grid.feature.GeneralPagingFeature');
19 
21 
26  function __construct($id = 'infiniteScrolling', $itemsPerPage = null) {
27  parent::__construct($id, $itemsPerPage);
28  }
29 
30 
31  //
32  // Extended methods from GridFeature.
33  //
37  function getJSClass() {
38  return '$.pkp.classes.features.InfiniteScrollingFeature';
39  }
40 
44  function fetchUIElements($request, $grid) {
45  $options = $this->getOptions();
46 
47  $shown = $options['currentItemsPerPage'] * $options['currentPage'];
48  if ($shown > $options['itemsTotal']) $shown = $options['itemsTotal'];
49 
50  $moreItemsLinkAction = false;
51  if ($shown < $options['itemsTotal']) {
52  import('lib.pkp.classes.linkAction.request.NullAction');
53  $moreItemsLinkAction = new LinkAction(
54  'moreItems',
55  new NullAction(),
56  __('grid.action.moreItems'),
57  'more_items'
58  );
59  }
60 
61  $templateMgr = TemplateManager::getManager($request);
62  $templateMgr->assign(array(
63  'iterator' => $this->getItemIterator(),
64  'shown' => $shown,
65  'grid' => $grid,
66  'moreItemsLinkAction' => $moreItemsLinkAction,
67  ));
68 
69  return array(
70  'pagingMarkup' => $templateMgr->fetch('controllers/grid/feature/infiniteScrolling.tpl'),
71  );
72  }
73 
74 
75  //
76  // Hooks implementation.
77  //
81  function fetchRows($args) {
82  $request = $args['request'];
83  $grid = $args['grid'];
84  $jsonMessage = $args['jsonMessage'];
85 
86  // Render the paging options, including updated markup.
87  $this->setOptions($request, $grid);
88  $pagingAttributes = array('pagingInfo' => $this->getOptions());
89 
90  // Add paging attributes to json so grid can update UI.
91  $additionalAttributes = (array) $jsonMessage->getAdditionalAttributes();
92  $jsonMessage->setAdditionalAttributes(array_merge(
93  $pagingAttributes,
94  $additionalAttributes)
95  );
96  }
97 
103  function fetchRow($args) {
104  $request = $args['request'];
105  $grid = $args['grid'];
106  $row = $args['row'];
107  $jsonMessage = $args['jsonMessage'];
108  $pagingAttributes = array();
109 
110  // Render the paging options, including updated markup.
111  $this->setOptions($request, $grid);
112  $pagingAttributes['pagingInfo'] = $this->getOptions();
113 
114  if (is_null($row)) {
115  $gridData = $grid->getGridDataElements($request);
116 
117  // Get the last data element id of the current page.
118  end($gridData);
119  $lastRowId = key($gridData);
120 
121  // Get the row and render it.
122  $args = array('rowId' => $lastRowId);
123  $row = $grid->getRequestedRow($request, $args);
124  $pagingAttributes['deletedRowReplacement'] = $grid->renderRow($request, $row);
125  } else {
126  // No need for paging markup.
127  unset($pagingAttributes['pagingInfo']['pagingMarkup']);
128  }
129 
130  // Add paging attributes to json so grid can update UI.
131  $additionalAttributes = $jsonMessage->getAdditionalAttributes();
132 
133  // Unset sequence map until we support that.
134  unset($additionalAttributes['sequenceMap']);
135  $jsonMessage->setAdditionalAttributes(array_merge(
136  $pagingAttributes,
137  $additionalAttributes)
138  );
139  }
140 }
141 
142 
InfiniteScrollingFeature\fetchRow
fetchRow($args)
Definition: InfiniteScrollingFeature.inc.php:103
GeneralPagingFeature
Base class that implements common functionality for paging features.
Definition: GeneralPagingFeature.inc.php:20
GeneralPagingFeature\getItemIterator
getItemIterator()
Definition: GeneralPagingFeature.inc.php:54
InfiniteScrollingFeature\fetchRows
fetchRows($args)
Definition: InfiniteScrollingFeature.inc.php:81
InfiniteScrollingFeature
Add infinite scrolling functionality to grids. It doesn't support category grids.
Definition: InfiniteScrollingFeature.inc.php:20
InfiniteScrollingFeature\getJSClass
getJSClass()
Definition: InfiniteScrollingFeature.inc.php:37
NullAction
This action does nothing.
Definition: NullAction.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
InfiniteScrollingFeature\fetchUIElements
fetchUIElements($request, $grid)
Definition: InfiniteScrollingFeature.inc.php:44
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
InfiniteScrollingFeature\__construct
__construct($id='infiniteScrolling', $itemsPerPage=null)
Definition: InfiniteScrollingFeature.inc.php:26
GridFeature\getOptions
getOptions()
Definition: GridFeature.inc.php:66
GeneralPagingFeature\setOptions
setOptions($request, $grid)
Definition: GeneralPagingFeature.inc.php:65