From ed8d21513b3f0d0714ed8007d3b58058c4dab0f2 Mon Sep 17 00:00:00 2001
From: Benjamin Kott <benjamin.kott@outlook.com>
Date: Sun, 17 May 2015 11:31:04 +0200
Subject: [PATCH] [TASK] Streamline searchfield in language module

Releases: master
Resolves: #66999
Change-Id: I3f2d9ff945021ac0a6f9aac79033ff05c0f55db4
Reviewed-on: http://review.typo3.org/39588
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
Reviewed-by: Philipp Gampe <philipp.gampe@typo3.org>
Tested-by: Philipp Gampe <philipp.gampe@typo3.org>
---
 .../Templates/Language/ListLanguages.html     |  5 +++
 .../Templates/Language/ListTranslations.html  |  5 +++
 .../Public/JavaScript/LanguageModule.js       | 38 +++++++++++++++----
 3 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/typo3/sysext/lang/Resources/Private/Templates/Language/ListLanguages.html b/typo3/sysext/lang/Resources/Private/Templates/Language/ListLanguages.html
index a0b79b509e46..53107c59b535 100644
--- a/typo3/sysext/lang/Resources/Private/Templates/Language/ListLanguages.html
+++ b/typo3/sysext/lang/Resources/Private/Templates/Language/ListLanguages.html
@@ -21,6 +21,11 @@
 <f:section name="content">
 	<h1><f:translate key="header.languages" /></h1>
 	<f:flashMessages renderMode="div" />
+	<form class="form-inline">
+		<div class="form-group">
+			<f:form.textfield name="typo3-language-searchfield" placeholder="{f:translate(key:'table.search')}" id="typo3-language-searchfield" value="{search}" class="form-control t3js-language-searchfield" />
+		</div>
+	</form>
 	<table id="typo3-language-list" class="t3-table t3-datatable">
 		<thead>
 			<tr>
diff --git a/typo3/sysext/lang/Resources/Private/Templates/Language/ListTranslations.html b/typo3/sysext/lang/Resources/Private/Templates/Language/ListTranslations.html
index 675665a7aff7..2f8262efb290 100644
--- a/typo3/sysext/lang/Resources/Private/Templates/Language/ListTranslations.html
+++ b/typo3/sysext/lang/Resources/Private/Templates/Language/ListTranslations.html
@@ -7,6 +7,11 @@
 <f:section name="content">
 	<h1><f:translate key="header.translations" /></h1>
 	<f:flashMessages renderMode="div" />
+	<form class="form-inline">
+		<div class="form-group">
+			<f:form.textfield name="typo3-language-searchfield" placeholder="{f:translate(key:'table.search')}" id="typo3-language-searchfield" value="{search}" class="form-control t3js-language-searchfield" />
+		</div>
+	</form>
 	<table id="typo3-translation-list" class="t3-table t3-datatable" data-language-count="{f:count(subject: languages)}">
 		<thead>
 			<tr>
diff --git a/typo3/sysext/lang/Resources/Public/JavaScript/LanguageModule.js b/typo3/sysext/lang/Resources/Public/JavaScript/LanguageModule.js
index cf9983868231..a1a7eee52591 100644
--- a/typo3/sysext/lang/Resources/Public/JavaScript/LanguageModule.js
+++ b/typo3/sysext/lang/Resources/Public/JavaScript/LanguageModule.js
@@ -27,7 +27,7 @@ define('TYPO3/CMS/Lang/LanguageModule', ['jquery', 'moment', 'datatables', 'TYPO
 		icons: {},
 		labels: {},
 		identifiers: {
-			searchField: 'div.dataTables_filter input',
+			searchField: '.t3js-language-searchfield',
 			topMenu: 'div.menuItems',
 			activateIcon: 'span.activateIcon',
 			deactivateIcon: 'span.deactivateIcon',
@@ -244,6 +244,7 @@ define('TYPO3/CMS/Lang/LanguageModule', ['jquery', 'moment', 'datatables', 'TYPO
 	 */
 	LanguageModule.buildLanguageTable = function(tableElement) {
 		return $(tableElement).DataTable({
+			dom: 'lrtip',
 			serverSide: false,
 			stateSave: true,
 			paging: false,
@@ -292,6 +293,7 @@ define('TYPO3/CMS/Lang/LanguageModule', ['jquery', 'moment', 'datatables', 'TYPO
 		}
 
 		return $(tableElement).DataTable({
+			dom: 'lrtip',
 			serverSide: false,
 			stateSave: true,
 			paging: false,
@@ -313,13 +315,23 @@ define('TYPO3/CMS/Lang/LanguageModule', ['jquery', 'moment', 'datatables', 'TYPO
 	 * Initialize search field
 	 */
 	LanguageModule.initializeSearchField = function() {
-		$(LanguageModule.identifiers.searchField, LanguageModule.context).clearable({
-			onClear: function() {
-				if (LanguageModule.table !== null) {
-					LanguageModule.table.search('').draw();
+		var getVars = LanguageModule.getUrlVars();
+		var currentSearch = (getVars['search'] ? getVars['search'] : LanguageModule.table.search());
+		$(LanguageModule.identifiers.searchField)
+			.val(currentSearch)
+			.on('input', function() {
+				LanguageModule.table.search($(this).val()).draw();
+			})
+			.clearable({
+				onClear: function() {
+					if (LanguageModule.table !== null) {
+						LanguageModule.table.search('').draw();
+					}
 				}
-			}
-		});
+			})
+			.parents('form').on('submit', function() {
+				return false;
+			});
 	};
 
 	/**
@@ -550,6 +562,18 @@ define('TYPO3/CMS/Lang/LanguageModule', ['jquery', 'moment', 'datatables', 'TYPO
 		$text.text(Math.round(progress) + '%');
 	};
 
+	// Utility method to retrieve query parameters
+	LanguageModule.getUrlVars = function getUrlVars() {
+		var vars = [], hash;
+		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
+		for (var i = 0; i < hashes.length; i++) {
+			hash = hashes[i].split('=');
+			vars.push(hash[0]);
+			vars[hash[0]] = hash[1];
+		}
+		return vars;
+	};
+
 	return function() {
 		$(document).ready(function() {
 			if ($('div.typo3-module-lang #typo3-language-list').length) {
-- 
GitLab