diff --git a/README.txt b/README.txt
index 85ff2ec..5a95c8a 100644
--- a/README.txt
+++ b/README.txt
@@ -22,7 +22,7 @@ content on a mobile display.
INSTALLATION
------------
-1. Download module and copy views_responsive_grid folder to sites/all/modules
+1. Download module and copy views_responsive_grid folder to /modules
2. Enable Views and Views Responsive Grid modules.
diff --git a/lib/Drupal/views_responsive_grid/Plugin/views/style/ResponsiveGrid.php b/lib/Drupal/views_responsive_grid/Plugin/views/style/ResponsiveGrid.php
new file mode 100644
index 0000000..eac4cee
--- /dev/null
+++ b/lib/Drupal/views_responsive_grid/Plugin/views/style/ResponsiveGrid.php
@@ -0,0 +1,137 @@
+ '4');
+ $options['alignment'] = array('default' => 'horizontal');
+ $options['wrapper_classes'] = array('default' => '');
+ $options['column_classes'] = array('default' => 'views-column');
+ $options['first_column_classes'] = array('default' => 'views-column-first');
+ $options['last_column_classes'] = array('default' => 'views-column-last');
+ $options['row_classes'] = array('default' => 'views-row');
+ $options['first_row_classes'] = array('default' => 'views-row-first');
+ $options['last_row_classes'] = array('default' => 'views-row-last');
+ $options['default_classes'] = array('default' => 0);
+ return $options;
+ }
+
+ /**
+ * Overrides \Drupal\views\Plugin\views\style\StylePluginBase::buildOptionsForm().
+ */
+ function buildOptionsForm(&$form, &$form_state) {
+ parent::buildOptionsForm($form, $form_state);
+
+ // Flatten options to deal with the various hierarchy changes.
+ $options = views_responsive_grid_get_options($this->options);
+
+ $form['columns'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Number of columns'),
+ '#default_value' => $options['columns'],
+ '#required' => TRUE,
+ '#element_validate' => array('views_element_validate_integer'),
+ );
+ $form['alignment'] = array(
+ '#type' => 'radios',
+ '#title' => t('Alignment'),
+ '#options' => array('horizontal' => t('Horizontal'), 'vertical' => t('Vertical')),
+ '#default_value' => $options['alignment'],
+ '#description' => t('Horizontal alignment will place items starting in the upper left and moving right. Vertical alignment will place items starting in the upper left and moving down.'),
+ );
+ $form['classes'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Custom Classes'),
+ '#description' => t('Below is the area you can use to customize the different classes of the grid. Separate each class with a space.'),
+ '#weight' => 1,
+ );
+ $form['classes']['default_classes'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Remove default views classes'),
+ '#default_value' => $options['default_classes'],
+ );
+ $form['classes']['grid_css'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Grid'),
+ );
+ $form['classes']['grid_css']['wrapper_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Wrapper'),
+ '#default_value' => $options['wrapper_classes'],
+ );
+ $form['classes']['column_css'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Columns'),
+ );
+ $form['classes']['column_css']['column_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Every Column'),
+ '#default_value' => $options['column_classes'],
+ );
+ $form['classes']['column_css']['first_column_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('First Column'),
+ '#default_value' => $options['first_column_classes'],
+ );
+ $form['classes']['column_css']['last_column_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Last Column'),
+ '#default_value' => $options['last_column_classes'],
+ );
+ $form['classes']['row_css'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Row'),
+ );
+ $form['classes']['row_css']['row_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Every Row'),
+ '#default_value' => $options['row_classes'],
+ );
+ $form['classes']['row_css']['first_row_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('First Row'),
+ '#default_value' => $options['first_row_classes'],
+ );
+ $form['classes']['row_css']['last_row_classes'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Last Row'),
+ '#default_value' => $options['last_row_classes'],
+ );
+ }
+
+}
diff --git a/templates/views-view-responsive-grid.tpl.php b/templates/views-view-responsive-grid.tpl.php
new file mode 100644
index 0000000..9519fcb
--- /dev/null
+++ b/templates/views-view-responsive-grid.tpl.php
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ $column) : ?>
+
+
+
+ $row) : ?>
+
+
+
+
diff --git a/views-view-responsive-grid.tpl.php b/views-view-responsive-grid.tpl.php
deleted file mode 100644
index 9519fcb..0000000
--- a/views-view-responsive-grid.tpl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
- $column) : ?>
-
-
-
- $row) : ?>
-
-
-
-
diff --git a/views_responsive_grid.info b/views_responsive_grid.info
deleted file mode 100644
index c6b08bd..0000000
--- a/views_responsive_grid.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Views Responsive Grid
-description = Views plugin for displaying views content in a responsive grid.
-core = 7.x
-package = Views
-
-dependencies[] = views
-
-files[] = views_responsive_grid_plugin_style_responsive_grid.inc
diff --git a/views_responsive_grid.info.yml b/views_responsive_grid.info.yml
new file mode 100644
index 0000000..c7264c0
--- /dev/null
+++ b/views_responsive_grid.info.yml
@@ -0,0 +1,9 @@
+name: Views Responsive Grid
+description: Views plugin for displaying views content in a responsive grid.
+package: Views
+version: VERSION
+core: 8.x
+dependencies:
+ - views
+
+# files[] = views_responsive_grid_plugin_style_responsive_grid.inc
diff --git a/views_responsive_grid.module b/views_responsive_grid.module
index 00b7690..9c625e9 100644
--- a/views_responsive_grid.module
+++ b/views_responsive_grid.module
@@ -5,14 +5,21 @@
*/
/**
- * Implements hook_views_api().
+ * Implements hook_theme_registry_alter().
*/
-function views_responsive_grid_views_api() {
- return array('api' => '3.0');
+function views_responsive_grid_theme_registry_alter(&$theme_registry) {
+ // For some issue in core, we need to set our theme path ourselves.
+ // @see http://drupal.org/node/1911492
+ $template =& $theme_registry['views_view_responsive_grid'];
+ $template['theme path'] = drupal_get_path('module', 'views_responsive_grid');
+ $template['path'] = drupal_get_path('module', 'views_responsive_grid') . '/templates';
}
+
/**
* Set default options.
+ *
+ * @todo Why is that function used?
*/
function views_responsive_grid_get_options($array) {
$options = array();
@@ -26,114 +33,3 @@ function views_responsive_grid_get_options($array) {
}
return $options;
}
-
-/**
- * Display a view as a responsive grid style.
- */
-function template_preprocess_views_view_responsive_grid(&$vars) {
- $view = $vars['view'];
- $result = $view->result;
- $options = views_responsive_grid_get_options($view->style_plugin->options);
- $handler = $view->style_plugin;
-
- $columns = $options['columns'];
- $vars['classes_array'] = array();
- if (!$options['default_classes']) {
- $vars['classes_array'][] = 'views-responsive-grid';
- $vars['classes_array'][] = 'views-responsive-grid-' . $options['alignment'];
- $vars['classes_array'][] = 'views-columns-' . $columns;
- }
- $vars['classes_array'] = array_merge($vars['classes_array'], explode(' ', $options['wrapper_classes']));
- $vars['classes_array'] = array_filter($vars['classes_array']);
- // Check if there are views results to process.
- if (!empty($vars['rows'])) {
- $col_id = 0;
- $row_id = 0;
- $keys = array_keys($vars['rows']);
- $current = array_shift($keys);
- // Determine style alignment.
- if ($options['alignment'] == 'horizontal') {
- $rows = array();
- $vars['row_classes'] = array();
- foreach ($vars['rows'] as $i => $row) {
- $classes = explode(' ', $options['column_classes']);
- if (!$options['default_classes']) {
- $classes[] = 'views-column-' . ($col_id + 1);
- }
- $rows[$row_id][$col_id] = array(
- 'classes' => implode(' ', $classes),
- 'content' => $vars['rows'][$current],
- );
- $classes = explode(' ', $options['row_classes']);
- if (!$options['default_classes']) {
- $classes[] = 'views-row-' . ($row_id + 1);
- }
- $vars['row_classes'][$row_id] = implode(' ', $classes);
-
- if ($row_id == 0) {
- $vars['row_classes'][$row_id] .= ' ' . $options['first_row_classes'];
- }
- elseif ($row_id == ceil(count($vars['rows']) / $columns) - 1) {
- $vars['row_classes'][$row_id] .= ' ' . $options['last_row_classes'];
- }
- if ($col_id == 0) {
- $rows[$row_id][$col_id]['classes'] .= ' ' . $options['first_column_classes'];
- $col_id++;
- }
- elseif ($col_id == $columns - 1) {
- $rows[$row_id][$col_id]['classes'] .= ' ' . $options['last_column_classes'];
- $col_id = 0;
- $row_id++;
- }
- else {
- $col_id++;
- }
- $current++;
- }
- $vars['rows'] = $rows;
- }
- else {
- $cols = array();
- $extra = count($vars['rows']) % $columns;
- $per_col = floor(count($vars['rows']) / $columns);
- $vars['column_classes'] = array();
- for ($i = 0; $i < $columns; $i++) {
- $classes = explode(' ', $options['column_classes']);
- if (!$options['default_classes']) {
- $classes[] = 'views-column-' . ($col_id + 1);
- }
- $vars['column_classes'][$i] = $classes;
- if ($i == 0 && !empty($options['first_column_classes'])) {
- $vars['column_classes'][$i] = array_merge($vars['column_classes'][$i], explode(' ', $options['first_column_classes']));
- }
- elseif ($i == $columns - 1 && !empty($options['last_column_classes'])) {
- $vars['column_classes'][$i] = array_merge($vars['column_classes'][$i], explode(' ', $options['last_column_classes']));
- }
- $vars['column_classes'][$i] = implode(' ', $vars['column_classes'][$i]);
- for ($n = 0; $n <= ($per_col - 1) + ($i < $extra ? 1 : 0); $n++) {
- $classes = explode(' ', $options['row_classes']);
- if (!$options['default_classes']) {
- $classes[] = 'views-row-' . ($row_id + 1);
- }
- $cols[$i][$n] = array(
- 'classes' => $classes,
- 'content' => $vars['rows'][$current],
- );
- if ($n == 0 && !empty($options['first_row_classes'])) {
- $cols[$i][$n]['classes'] = array_merge($cols[$i][$n]['classes'], explode(' ', $options['first_row_classes']));
- }
- elseif ($n == ($per_col - 1) + ($i < $extra ? 1 : 0) && !empty($options['last_row_classes'])) {
- $cols[$i][$n]['classes'] = array_merge($cols[$i][$n]['classes'], explode(' ', $options['last_row_classes']));
- }
- $cols[$i][$n]['classes'] = implode(' ', $cols[$i][$n]['classes']);
- $current++;
- $row_id++;
- }
- $col_id++;
- $row_id = 0;
- }
- $vars['columns'] = $cols;
- }
- }
- $vars['classes'] = implode(' ', $vars['classes_array']);
-}
diff --git a/views_responsive_grid.theme.inc b/views_responsive_grid.theme.inc
new file mode 100644
index 0000000..f06de33
--- /dev/null
+++ b/views_responsive_grid.theme.inc
@@ -0,0 +1,118 @@
+result;
+ $options = views_responsive_grid_get_options($view->style_plugin->options);
+ $handler = $view->style_plugin;
+
+ $columns = $options['columns'];
+ $vars['classes_array'] = array();
+ if (!$options['default_classes']) {
+ $vars['classes_array'][] = 'views-responsive-grid';
+ $vars['classes_array'][] = 'views-responsive-grid-' . $options['alignment'];
+ $vars['classes_array'][] = 'views-columns-' . $columns;
+ }
+ $vars['classes_array'] = array_merge($vars['classes_array'], explode(' ', $options['wrapper_classes']));
+ $vars['classes_array'] = array_filter($vars['classes_array']);
+ // Check if there are views results to process.
+ if (!empty($vars['rows'])) {
+ $col_id = 0;
+ $row_id = 0;
+ $keys = array_keys($vars['rows']);
+ $current = array_shift($keys);
+ // Determine style alignment.
+ if ($options['alignment'] == 'horizontal') {
+ $rows = array();
+ $vars['row_classes'] = array();
+ foreach ($vars['rows'] as $i => $row) {
+ $classes = explode(' ', $options['column_classes']);
+ if (!$options['default_classes']) {
+ $classes[] = 'views-column-' . ($col_id + 1);
+ }
+ $rows[$row_id][$col_id] = array(
+ 'classes' => implode(' ', $classes),
+ 'content' => $vars['rows'][$current],
+ );
+ $classes = explode(' ', $options['row_classes']);
+ if (!$options['default_classes']) {
+ $classes[] = 'views-row-' . ($row_id + 1);
+ }
+ $vars['row_classes'][$row_id] = implode(' ', $classes);
+
+ if ($row_id == 0) {
+ $vars['row_classes'][$row_id] .= ' ' . $options['first_row_classes'];
+ }
+ elseif ($row_id == ceil(count($vars['rows']) / $columns) - 1) {
+ $vars['row_classes'][$row_id] .= ' ' . $options['last_row_classes'];
+ }
+ if ($col_id == 0) {
+ $rows[$row_id][$col_id]['classes'] .= ' ' . $options['first_column_classes'];
+ $col_id++;
+ }
+ elseif ($col_id == $columns - 1) {
+ $rows[$row_id][$col_id]['classes'] .= ' ' . $options['last_column_classes'];
+ $col_id = 0;
+ $row_id++;
+ }
+ else {
+ $col_id++;
+ }
+ $current++;
+ }
+ $vars['rows'] = $rows;
+ }
+ else {
+ $cols = array();
+ $extra = count($vars['rows']) % $columns;
+ $per_col = floor(count($vars['rows']) / $columns);
+ $vars['column_classes'] = array();
+ for ($i = 0; $i < $columns; $i++) {
+ $classes = explode(' ', $options['column_classes']);
+ if (!$options['default_classes']) {
+ $classes[] = 'views-column-' . ($col_id + 1);
+ }
+ $vars['column_classes'][$i] = $classes;
+ if ($i == 0 && !empty($options['first_column_classes'])) {
+ $vars['column_classes'][$i] = array_merge($vars['column_classes'][$i], explode(' ', $options['first_column_classes']));
+ }
+ elseif ($i == $columns - 1 && !empty($options['last_column_classes'])) {
+ $vars['column_classes'][$i] = array_merge($vars['column_classes'][$i], explode(' ', $options['last_column_classes']));
+ }
+ $vars['column_classes'][$i] = implode(' ', $vars['column_classes'][$i]);
+ for ($n = 0; $n <= ($per_col - 1) + ($i < $extra ? 1 : 0); $n++) {
+ $classes = explode(' ', $options['row_classes']);
+ if (!$options['default_classes']) {
+ $classes[] = 'views-row-' . ($row_id + 1);
+ }
+ $cols[$i][$n] = array(
+ 'classes' => $classes,
+ 'content' => $vars['rows'][$current],
+ );
+ if ($n == 0 && !empty($options['first_row_classes'])) {
+ $cols[$i][$n]['classes'] = array_merge($cols[$i][$n]['classes'], explode(' ', $options['first_row_classes']));
+ }
+ elseif ($n == ($per_col - 1) + ($i < $extra ? 1 : 0) && !empty($options['last_row_classes'])) {
+ $cols[$i][$n]['classes'] = array_merge($cols[$i][$n]['classes'], explode(' ', $options['last_row_classes']));
+ }
+ $cols[$i][$n]['classes'] = implode(' ', $cols[$i][$n]['classes']);
+ $current++;
+ $row_id++;
+ }
+ $col_id++;
+ $row_id = 0;
+ }
+ $vars['columns'] = $cols;
+ }
+ }
+ $vars['classes'] = implode(' ', $vars['classes_array']);
+}
diff --git a/views_responsive_grid.views.inc b/views_responsive_grid.views.inc
deleted file mode 100644
index 0dc2fd6..0000000
--- a/views_responsive_grid.views.inc
+++ /dev/null
@@ -1,26 +0,0 @@
- array(
- 'responsive_grid' => array(
- 'title' => t('Responsive grid'),
- 'help' => t('Display content in a responsive grid.'),
- 'handler' => 'views_responsive_grid_plugin_style_responsive_grid',
- 'theme' => 'views_view_responsive_grid',
- 'uses row plugin' => TRUE,
- 'uses row class' => FALSE,
- 'uses options' => TRUE,
- 'uses grouping' => TRUE,
- 'type' => 'normal',
- ),
- ),
- );
-}
diff --git a/views_responsive_grid_plugin_style_responsive_grid.inc b/views_responsive_grid_plugin_style_responsive_grid.inc
deleted file mode 100644
index dd0c88c..0000000
--- a/views_responsive_grid_plugin_style_responsive_grid.inc
+++ /dev/null
@@ -1,119 +0,0 @@
- '4');
- $options['alignment'] = array('default' => 'horizontal');
- $options['wrapper_classes'] = array('default' => '');
- $options['column_classes'] = array('default' => 'views-column');
- $options['first_column_classes'] = array('default' => 'views-column-first');
- $options['last_column_classes'] = array('default' => 'views-column-last');
- $options['row_classes'] = array('default' => 'views-row');
- $options['first_row_classes'] = array('default' => 'views-row-first');
- $options['last_row_classes'] = array('default' => 'views-row-last');
- $options['default_classes'] = array('default' => 0);
- return $options;
- }
-
- /**
- * Render the given style.
- */
- function options_form(&$form, &$form_state) {
- parent::options_form($form, $form_state);
-
- // Flatten options to deal with the various hierarchy changes.
- $options = views_responsive_grid_get_options($this->options);
-
- $form['columns'] = array(
- '#type' => 'textfield',
- '#title' => t('Number of columns'),
- '#default_value' => $options['columns'],
- '#required' => TRUE,
- '#element_validate' => array('views_element_validate_integer'),
- );
- $form['alignment'] = array(
- '#type' => 'radios',
- '#title' => t('Alignment'),
- '#options' => array('horizontal' => t('Horizontal'), 'vertical' => t('Vertical')),
- '#default_value' => $options['alignment'],
- '#description' => t('Horizontal alignment will place items starting in the upper left and moving right. Vertical alignment will place items starting in the upper left and moving down.'),
- );
- $form['classes'] = array(
- '#type' => 'fieldset',
- '#title' => t('Custom Classes'),
- '#description' => t('Below is the area you can use to customize the different classes of the grid. Separate each class with a space.'),
- '#weight' => 1,
- );
- $form['classes']['default_classes'] = array(
- '#type' => 'checkbox',
- '#title' => t('Remove default views classes'),
- '#default_value' => $options['default_classes'],
- );
- $form['classes']['grid_css'] = array(
- '#type' => 'fieldset',
- '#title' => t('Grid'),
- '#prefix' => '',
- '#suffix' => '
',
- );
- $form['classes']['grid_css']['wrapper_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('Wrapper'),
- '#default_value' => $options['wrapper_classes'],
- );
- $form['classes']['column_css'] = array(
- '#type' => 'fieldset',
- '#title' => t('Columns'),
- '#prefix' => '',
- '#suffix' => '
',
- );
- $form['classes']['column_css']['column_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('Every Column'),
- '#default_value' => $options['column_classes'],
- );
- $form['classes']['column_css']['first_column_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('First Column'),
- '#default_value' => $options['first_column_classes'],
- );
- $form['classes']['column_css']['last_column_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('Last Column'),
- '#default_value' => $options['last_column_classes'],
- );
- $form['classes']['row_css'] = array(
- '#type' => 'fieldset',
- '#title' => t('Row'),
- '#prefix' => '',
- '#suffix' => '
',
- );
- $form['classes']['row_css']['row_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('Every Row'),
- '#default_value' => $options['row_classes'],
- );
- $form['classes']['row_css']['first_row_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('First Row'),
- '#default_value' => $options['first_row_classes'],
- );
- $form['classes']['row_css']['last_row_classes'] = array(
- '#type' => 'textfield',
- '#title' => t('Last Row'),
- '#default_value' => $options['last_row_classes'],
- );
- }
-}