Skip to content
Snippets Groups Projects
Commit 44e0c56d authored by Sebastien ANDRE's avatar Sebastien ANDRE
Browse files

hotline#118126 : search_input : new version to keep actions

parent b324bfa2
2 merge requests!4042Master,!4038hotline#118126 : search_input : new version to keep actions
Pipeline #13498 passed with stage
in 45 minutes and 20 seconds
- ticket #118126 : Admin Bokeh : Recherche domaine et Profils, le filtre faisait disparaitre les icones actions
\ No newline at end of file
<?php
Class_ScriptLoader::getInstance()->addSearchInputToContent($this->_('Filtrer les domaines '));
Class_ScriptLoader::getInstance()->addSearchInputInPath($this->_('Filtrer les domaines '), 'ul li div');
if (Class_Users::getIdentity()->hasRightAccessDomaines()) { ?>
<center>
......
<?php
Class_ScriptLoader::getInstance()->addSearchInputToContent($this->_('Filtrer les profils '));
Class_ScriptLoader::getInstance()->addSearchInputInPath($this->_('Filtrer les profils '), 'ul li div');
print($this->profileSelect('profil',$this->id_zone,$this->id_bib,'zb',0,true));
......
......@@ -859,6 +859,15 @@ class Class_ScriptLoader {
}
public function addSearchInputInPath($label, $search_path) {
$options = json_encode(['id' => 'input_content_menu',
'label' => $label . ' : ',
'search_path' => $search_path]);
return $this->_addSearchInput('.main > .modules', $options);
}
public function addSearchInputToLeftMenu($label) {
return $this->addSearchInput('.main > .left',
'input_search_menu',
......
......@@ -46,6 +46,9 @@
if(options.fixed_display)
options.fixed_display = ', ' + options.fixed_display;
if (options.search_path && '' === options.search_path)
delete options.search_path;
var html = $(this);
var not_found_class = 'search_input_not_found';
......@@ -85,8 +88,8 @@
.show();
}
var onSearchInputChange = function(searchText) {
var initRegex = function (searchText) {
if (!searchText || searchText == "" || searchText == '*')
return resetAll();
......@@ -95,26 +98,69 @@
searchText = searchText.filter(function(term){return term;});
var reg_exps = [];
$.each(searchText, function(index, term) {
var reg = new RegExp('\\b' + term, 'gi');
reg_exps.push(reg);
});
var matches = html.find('*').contents().filter(function() {
if(this.nodeType != 3)
return false;
return reg_exps;
};
for(var index in reg_exps)
if(!reg_exps[index].test(accentsTidy(this.nodeValue)))
return false;
var checkRegex = function (reg_exps, value) {
var check = true;
return true;
reg_exps.forEach(function (regexp) {
check &= regexp.test(accentsTidy(value));
});
return check;
};
var onSearchInputChange = function(searchText) {
if (options.search_path) {
searchInSpecificPath(searchText);
return;
}
var reg_exps = initRegex(searchText);
var matches = html.find('*').contents().filter(function() {
return 3 == this.nodeType && checkRegex(reg_exps, this.nodeValue);
});
highlightItems(matches);
};
var searchInSpecificPath = function (searchText) {
var reg_exps = initRegex(searchText);
var matches = html.find(options.search_path).contents().filter(function() {
return 3 == this.nodeType && checkRegex(reg_exps, this.nodeValue);
});
resetAll();
html
.find(options.search_path)
.addClass(not_found_class);
matches
.parent()
.parent()
.find(options.search_path)
.removeClass(not_found_class);
matches
.parents()
.siblings()
.removeClass(not_found_class)
matches
.parents()
.removeClass(not_found_class);
};
var search_input = (undefined == options.input)
? html.prepend("<div class='search_input'>" +
"<form>" +
......
......@@ -31,9 +31,28 @@ QUnit.module('search_widget', {
+'<article>La biquette</article>'
+'</div>');
fixture_ul_li = $(
'<div><ul><li>'
+ '<div class="sections">Listes</div>'
+ '<div class="actions">Actions</div>'
+ '<ul><li><div class="contents">Prems</div>'
+ '<div class="actions">Actions</div></li>'
+ '<li><div class="contents">Seconds</div>'
+ '<div class="actions">Actions</div></li>'
+ '</ul></li><li><div class="sections">Categories</div>'
+ '<div class="actions">Actions</div>'
+ '<ul><li><div class="contents">Premier</div>'
+ '<div class="actions">Actions</div><li>'
+ '<li><div class="contents">Deuxieme</div>'
+ '<div class="actions">Actions</div></li>'
+ '</ul></li></ul></div>');
fixture.search_input({ id : 'admin_left_menu',
label : '' ,
fixed_display : 'div'});
fixture_ul_li.search_input({ id : 'admin_left_menu',
label : '' ,
search_path : 'ul li div'});
}
});
......@@ -68,3 +87,59 @@ test('search terms "biq la" should hide articles Bokeh and Biquette', function()
deepEqual(fixture.find('article.search_input_not_found').length, 2, fixture.html());
});
test('search terms "prem" should hide li contents Seconds and Deuxieme', function() {
fixture_ul_li.find('input').val('prem');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.contents.search_input_not_found').length, 2,
fixture_ul_li.html());
});
test('search terms "prem" should hide 2 div.actions', function() {
fixture_ul_li.find('input').val('prem');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.actions.search_input_not_found').length, 2,
fixture_ul_li.html());
});
test('search terms "prem" should not hide li sections', function() {
fixture_ul_li.find('input').val('prem');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.sections.search_input_not_found').length, 0,
fixture_ul_li.html());
});
test('search terms "deux" should hide li contents Prems Seconds and Premier', function() {
fixture_ul_li.find('input').val('deux');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.contents.search_input_not_found').length, 3,
fixture_ul_li.html());
});
test('search terms "deux" should hide 4 div.actions', function() {
fixture_ul_li.find('input').val('deux');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.actions.search_input_not_found').length, 4,
fixture_ul_li.html());
});
test('search terms "deux" should hide li sections Listes', function() {
fixture_ul_li.find('input').val('deux');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.sections.search_input_not_found').length, 1,
fixture_ul_li.html());
});
test('search terms "cate" should not hide his childs', function() {
fixture_ul_li.find('input').val('cate');
fixture_ul_li.find('input').trigger($.Event( "keyup", { keyCode: 0 }));
equal(fixture_ul_li.find('div.contents.search_input_not_found').length, 2,
fixture_ul_li.html());
});
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment