From 66dc422f3212f4eb7fe0a22e7dd344e658a58977 Mon Sep 17 00:00:00 2001
From: Axel Rutz <axel.rutz@clever-systems.net>
Date: Mon, 7 Sep 2015 04:07:16 +0200
Subject: [PATCH] Issue #2564041: Move submit button to table header

---
 views_table_filter.js     | 24 +++++++++++++++++++-----
 views_table_filter.module | 29 +++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/views_table_filter.js b/views_table_filter.js
index a002fc0..440524e 100644
--- a/views_table_filter.js
+++ b/views_table_filter.js
@@ -21,8 +21,16 @@
             if (!name) {
               continue;
             }
-            var input = form.find('[name="' + name + '"],[name="' + name + '[]"],[name="' + name + '[value][date]"]');
-            var widget = input.eq(0).closest('.views-widget');
+
+            if (name == 'submit') {
+              var widget = form.find('.views-submit-button button')
+            } else if (name == 'reset') {
+              var widget = form.find('.views-reset-button button')
+            } else {
+              var input = form.find('[name="' + name + '"],[name="' + name + '[]"],[name="' + name + '[value][date]"]');
+              var widget = input.eq(0).closest('.views-widget');
+            }
+
             if (widget.length < 1) {
               continue;
             }
@@ -34,10 +42,16 @@
             widget_wrapper.hide();
             var widget_clone = widget.clone(true);
             widget_clone.find('[id]').each(add_id_suffix);
-            var input_clone = widget_clone.find('[name="' + name + '"],[name="' + name + '[]"],[name="' + name + '[value][date]"]');
 
-            input_clone.change(function() {input.val(input_clone.val()); input.change();});
-            input_clone.keyup(function() {setTimeout(function() {input.val(input_clone.val());}, 100);});
+            if (widget.is('button')) {
+              widget_clone.click(function() {widget.click();});
+              widget_clone.keyup(function(e) {widget.keyup(e);});
+            }
+            else {
+              var input_clone = widget_clone.find('[name="' + name + '"],[name="' + name + '[]"],[name="' + name + '[value][date]"]');
+              input_clone.change(function() {input.val(input_clone.val()); input.change();});
+              input_clone.keyup(function() {setTimeout(function() {input.val(input_clone.val());}, 100);});
+            }
 
             header_widget_wrapper.append(widget_clone);
           }
diff --git a/views_table_filter.module b/views_table_filter.module
index f3e40bf..61bd778 100644
--- a/views_table_filter.module
+++ b/views_table_filter.module
@@ -57,6 +57,24 @@ function views_table_filter_form_views_ui_edit_display_form_alter(&$form, &$form
       '#default_value' => $default,
     );
   }
+
+  // Also care for submit & reset button.
+  $default = isset($exposed_form->options['bef']['table_filter']['submit']) ?
+    $exposed_form->options['bef']['table_filter']['submit'] : '_none';
+  $bef_form['table_filter']['submit'] = array(
+    '#type' => 'select',
+    '#title' => t('Move submit button to the table column'),
+    '#options' => $columns,
+    '#default_value' => $default,
+  );
+  $default = isset($exposed_form->options['bef']['table_filter']['reset']) ?
+    $exposed_form->options['bef']['table_filter']['reset'] : '_none';
+  $bef_form['table_filter']['reset'] = array(
+    '#type' => 'select',
+    '#title' => t('Move reset button to the table column'),
+    '#options' => $columns,
+    '#default_value' => $default,
+  );
 }
 
 /**
@@ -178,6 +196,17 @@ function _views_table_filter_preprocess_table(&$vars) {
     $settings[$filter] = $identifier;
   }
 
+  // Also care for submit & reset button.
+  foreach (array('submit', 'reset') as $button) {
+    if (!empty($exposed_form->options['bef']['table_filter'][$button])
+      && ($column = $exposed_form->options['bef']['table_filter'][$button])
+      && ($column !== '_none')
+    ) {
+      $vars['header'][$column] .= '<div class="table-header-filter table-header-filter-' . $button . '"></div>';
+      $settings[$button] = $button;
+    }
+  }
+
   if (empty($settings)) {
     return;
   }
-- 
2.1.4

