mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-21 00:02:17 +02:00
N°762: Portal: New filter brick that pre-filters a Browse or Manage brick results from the home page.
SVN:trunk[4575]
This commit is contained in:
@@ -121,3 +121,10 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
|||||||
'Brick:Portal:Create:Name' => 'Rychlé vytvoření',
|
'Brick:Portal:Create:Name' => 'Rychlé vytvoření',
|
||||||
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Filter brick
|
||||||
|
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||||
|
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg: install office~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
|
||||||
|
));
|
||||||
|
|||||||
@@ -116,3 +116,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
|||||||
'Brick:Portal:Create:Name' => 'Schnelles Erstellen',
|
'Brick:Portal:Create:Name' => 'Schnelles Erstellen',
|
||||||
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Filter brick
|
||||||
|
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||||
|
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg: install office~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
|
||||||
|
));
|
||||||
|
|||||||
@@ -117,3 +117,10 @@ Dict::Add('EN US', 'English', 'English', array(
|
|||||||
'Brick:Portal:Create:Name' => 'Quick creation',
|
'Brick:Portal:Create:Name' => 'Quick creation',
|
||||||
'Brick:Portal:Create:ChooseType' => 'Please, choose a type',
|
'Brick:Portal:Create:ChooseType' => 'Please, choose a type',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Filter brick
|
||||||
|
Dict::Add('EN US', 'English', 'English', array(
|
||||||
|
'Brick:Portal:Filter:Name' => 'Prefilter a brick',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg: install office',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Submit' => 'Search',
|
||||||
|
));
|
||||||
|
|||||||
@@ -117,3 +117,10 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
|||||||
'Brick:Portal:Create:Name' => 'Creación rápida',
|
'Brick:Portal:Create:Name' => 'Creación rápida',
|
||||||
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Filter brick
|
||||||
|
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||||
|
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg: install office~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
|
||||||
|
));
|
||||||
|
|||||||
@@ -118,3 +118,10 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
|||||||
'Brick:Portal:Create:ChooseType' => 'Veuillez choisir le type',
|
'Brick:Portal:Create:ChooseType' => 'Veuillez choisir le type',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Filter brick
|
||||||
|
Dict::Add('FR FR', 'French', 'Français', array(
|
||||||
|
'Brick:Portal:Filter:Name' => 'Préfiltre une brique',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Placeholder' => 'ex : installation office',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Submit' => 'Rechercher',
|
||||||
|
));
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class ManageBrickController extends BrickController
|
|||||||
$aQueries = array();
|
$aQueries = array();
|
||||||
|
|
||||||
// Getting current dataloading mode (First from router parameter, then query parameter, then default brick value)
|
// Getting current dataloading mode (First from router parameter, then query parameter, then default brick value)
|
||||||
$sDataLoading = ($sDataLoading !== null) ? $sDataLoading : ( ($oRequest->query->get('sDataLoading') !== null) ? $oRequest->query->get('sDataLoading') : $oBrick->GetDataLoading() );
|
$sDataLoading = ($sDataLoading !== null) ? $sDataLoading : ( ($oRequest->get('sDataLoading') !== null) ? $oRequest->get('sDataLoading') : $oBrick->GetDataLoading() );
|
||||||
// Getting search value
|
// Getting search value
|
||||||
$sSearchValue = $oRequest->get('sSearchValue', null);
|
$sSearchValue = $oRequest->get('sSearchValue', null);
|
||||||
|
|
||||||
@@ -465,6 +465,7 @@ class ManageBrickController extends BrickController
|
|||||||
'aGroupingAreasData' => $aGroupingAreasData,
|
'aGroupingAreasData' => $aGroupingAreasData,
|
||||||
'sDateFormat' => AttributeDate::GetFormat()->ToMomentJS(),
|
'sDateFormat' => AttributeDate::GetFormat()->ToMomentJS(),
|
||||||
'sDateTimeFormat' => AttributeDateTime::GetFormat()->ToMomentJS(),
|
'sDateTimeFormat' => AttributeDateTime::GetFormat()->ToMomentJS(),
|
||||||
|
'sSearchValue' => $sSearchValue,
|
||||||
);
|
);
|
||||||
|
|
||||||
$oResponse = $oApp['twig']->render($oBrick->GetPageTemplatePath(), $aData);
|
$oResponse = $oApp['twig']->render($oBrick->GetPageTemplatePath(), $aData);
|
||||||
|
|||||||
@@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Copyright (C) 2010-2015 Combodo SARL
|
||||||
|
//
|
||||||
|
// This file is part of iTop.
|
||||||
|
//
|
||||||
|
// iTop is free software; you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// iTop is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
|
namespace Combodo\iTop\Portal\Brick;
|
||||||
|
|
||||||
|
use \Combodo\iTop\DesignElement;
|
||||||
|
use \Combodo\iTop\Portal\Brick\PortalBrick;
|
||||||
|
use \Combodo\iTop\Portal\Brick\BrowseBrick;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of FilterBrick
|
||||||
|
*
|
||||||
|
* @author Guillaume Lajarige
|
||||||
|
*/
|
||||||
|
class FilterBrick extends PortalBrick
|
||||||
|
{
|
||||||
|
const DEFAULT_VISIBLE_NAVIGATION_MENU = false;
|
||||||
|
const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/src/views/bricks/filter/tile.html.twig';
|
||||||
|
const DEFAULT_TARGET_BRICK_CLASS = 'Combodo\\iTop\\Portal\\Brick\\BrowseBrick';
|
||||||
|
const DEFAULT_SEARCH_PLACEHOLDER_VALUE = 'Brick:Portal:Filter:SearchInput:Placeholder';
|
||||||
|
const DEFAULT_SEARCH_SUBMIT_LABEL = 'Brick:Portal:Filter:SearchInput:Submit';
|
||||||
|
const DEFAULT_SEARCH_SUBMIT_CLASS = '';
|
||||||
|
|
||||||
|
protected $sTargetBrickId;
|
||||||
|
protected $sTargetBrickClass;
|
||||||
|
protected $sTargetBrickTab;
|
||||||
|
protected $sSearchPlaceholderValue;
|
||||||
|
protected $sSearchSubmitLabel;
|
||||||
|
protected $sSearchSubmitClass;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->sTargetBrickClass = static::DEFAULT_TARGET_BRICK_CLASS;
|
||||||
|
$this->sSearchPlaceholderValue = static::DEFAULT_SEARCH_PLACEHOLDER_VALUE;
|
||||||
|
$this->sSearchSubmitLabel = static::DEFAULT_SEARCH_SUBMIT_LABEL;
|
||||||
|
$this->sSearchSubmitClass = static::DEFAULT_SEARCH_SUBMIT_CLASS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetTargetBrickId()
|
||||||
|
{
|
||||||
|
return $this->sTargetBrickId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetTargetBrickClass()
|
||||||
|
{
|
||||||
|
return $this->sTargetBrickClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetTargetBrickTab()
|
||||||
|
{
|
||||||
|
return $this->sTargetBrickTab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetSearchPlaceholderValue()
|
||||||
|
{
|
||||||
|
return $this->sSearchPlaceholderValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetSearchSubmitLabel()
|
||||||
|
{
|
||||||
|
return $this->sSearchSubmitLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetSearchSubmitClass()
|
||||||
|
{
|
||||||
|
return $this->sSearchSubmitClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SetTargetBrickId($sTargetBrickId)
|
||||||
|
{
|
||||||
|
$this->sTargetBrickId = $sTargetBrickId;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SetTargetBrickClass($sTargetBrickClass)
|
||||||
|
{
|
||||||
|
$this->sTargetBrickClass = $sTargetBrickClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SetTargetBrickTab($sTargetBrickTab)
|
||||||
|
{
|
||||||
|
$this->sTargetBrickTab = $sTargetBrickTab;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SetSearchPlaceholderValue($sSearchPlaceholderValue)
|
||||||
|
{
|
||||||
|
$this->sSearchPlaceholderValue = $sSearchPlaceholderValue;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SetSearchSubmitLabel($sSearchSubmitLabel)
|
||||||
|
{
|
||||||
|
$this->sSearchSubmitLabel = $sSearchSubmitLabel;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SetSearchSubmitClass($sSearchSubmitClass)
|
||||||
|
{
|
||||||
|
$this->sSearchSubmitClass = $sSearchSubmitClass;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the brick's data from the xml passed as a ModuleDesignElement.
|
||||||
|
* This is used to set all the brick attributes at once.
|
||||||
|
*
|
||||||
|
* @param \Combodo\iTop\DesignElement $oMDElement
|
||||||
|
* @return BrowseBrick
|
||||||
|
* @throws DOMFormatException
|
||||||
|
*/
|
||||||
|
public function LoadFromXml(DesignElement $oMDElement)
|
||||||
|
{
|
||||||
|
parent::LoadFromXml($oMDElement);
|
||||||
|
|
||||||
|
// Checking specific elements
|
||||||
|
foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode)
|
||||||
|
{
|
||||||
|
switch ($oBrickSubNode->nodeName)
|
||||||
|
{
|
||||||
|
case 'target_brick':
|
||||||
|
foreach ($oBrickSubNode->childNodes as $oTargetBrickNode)
|
||||||
|
{
|
||||||
|
switch ($oTargetBrickNode->nodeName)
|
||||||
|
{
|
||||||
|
case 'id':
|
||||||
|
$this->SetTargetBrickId($oTargetBrickNode->GetText());
|
||||||
|
break;
|
||||||
|
case 'type':
|
||||||
|
$this->SetTargetBrickClass($oTargetBrickNode->GetText());
|
||||||
|
break;
|
||||||
|
case 'tab':
|
||||||
|
$this->SetTargetBrickTab($oTargetBrickNode->GetText());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'search_placeholder_value':
|
||||||
|
$this->SetSearchPlaceholderValue($oBrickSubNode->GetText(static::DEFAULT_SEARCH_PLACEHOLDER_VALUE));
|
||||||
|
break;
|
||||||
|
case 'search_submit_label':
|
||||||
|
$this->SetSearchSubmitLabel($oBrickSubNode->GetText(static::DEFAULT_SEARCH_SUBMIT_LABEL));
|
||||||
|
break;
|
||||||
|
case 'search_submit_class':
|
||||||
|
$this->SetSearchSubmitClass($oBrickSubNode->GetText(static::DEFAULT_SEARCH_SUBMIT_CLASS));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checking that the brick has at least a target brick id
|
||||||
|
if (($this->GetTargetBrickId() === null) || ($this->GetTargetBrickId() === ''))
|
||||||
|
{
|
||||||
|
throw new DOMFormatException('FilterBrick : Must have a target brick id', null, null, $oMDElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block pMainContentHolder%}
|
{% block pMainContentHolder%}
|
||||||
{% if iItemsCount > 0 %}
|
{% if iItemsCount > 0 or sSearchValue is not null %}
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
{% block bBrowseMainContent %}
|
{% block bBrowseMainContent %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -24,9 +24,9 @@
|
|||||||
var aKeyTimeoutFilteredKeys = [16, 17, 18, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40]; // Shift, Ctrl, Alt, Pause, Esc, Page Up/Down, Home, End, Left/Up/Right/Down arrows
|
var aKeyTimeoutFilteredKeys = [16, 17, 18, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40]; // Shift, Ctrl, Alt, Pause, Esc, Page Up/Down, Home, End, Left/Up/Right/Down arrows
|
||||||
|
|
||||||
// Show a loader inside the table
|
// Show a loader inside the table
|
||||||
var showTableLoader = function()
|
var showTableLoader = function(oElem)
|
||||||
{
|
{
|
||||||
$('#brick-content-table > tbody').html('<tr><td class="datatables_overlay" colspan="100">' + $('#page_overlay').html() + '</td></tr>');
|
oElem.children('tbody').html('<tr><td class="datatables_overlay" colspan="100">' + $('#page_overlay').html() + '</td></tr>');
|
||||||
};
|
};
|
||||||
// Columns definition for the table from the oLevelsProperties
|
// Columns definition for the table from the oLevelsProperties
|
||||||
var getColumnsDefinition = function()
|
var getColumnsDefinition = function()
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
|
|
||||||
$(document).ready(function()
|
$(document).ready(function()
|
||||||
{
|
{
|
||||||
showTableLoader();
|
showTableLoader($('#brick-content-table'));
|
||||||
|
|
||||||
// Note : Those options should be externalized in an library so we can use them on any DataTables for the portal.
|
// Note : Those options should be externalized in an library so we can use them on any DataTables for the portal.
|
||||||
// We would just have to override / complete the necessary elements
|
// We would just have to override / complete the necessary elements
|
||||||
@@ -301,7 +301,7 @@
|
|||||||
$('#brick-content-table').on('processing.dt', function(event, settings, processing){
|
$('#brick-content-table').on('processing.dt', function(event, settings, processing){
|
||||||
if(processing === true)
|
if(processing === true)
|
||||||
{
|
{
|
||||||
showTableLoader();
|
showTableLoader($(this));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
<label>{{ 'Portal:Datatables:Language:Search'|dict_s }}<input type="search" class="form-control input-sm" id="brick_search_field" placeholder="" aria-controls="brick_main_table" value="{{ sSearchValue }}"></label>
|
<label>{{ 'Portal:Datatables:Language:Search'|dict_s }}<input type="search" class="form-control input-sm" id="brick_search_field" placeholder="" aria-controls="brick_main_table" value="{{ sSearchValue }}"></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="list-group" id="brick_content_tree" data-level-id="L">
|
<ul class="list-group tree" id="brick_content_tree" data-level-id="L">
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div id="brick_content_empty" class="text-center">
|
<div id="brick_content_empty" class="text-center">
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{# itop-portal-base/portal/src/views/bricks/filter/tile.html.twig #}
|
||||||
|
{# Filter brick tile layout #}
|
||||||
|
|
||||||
|
{% if brick.GetTargetBrickClass == 'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' %}
|
||||||
|
{% set sTargetBrickUrl = app['url_generator'].generate('p_browse_brick_mode', {'sBrickId': brick.GetTargetBrickId, 'sBrowseMode': brick.GetTargetBrickTab}) %}
|
||||||
|
{% elseif brick.GetTargetBrickClass == 'Combodo\\iTop\\Portal\\Brick\\ManageBrick' %}
|
||||||
|
{% set sTargetBrickUrl = app['url_generator'].generate('p_manage_brick', {'sBrickId': brick.GetTargetBrickId, 'sGroupingTab': brick.GetTargetBrickTab}) %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-sm-{{ brick.GetWidth }}">
|
||||||
|
{% block pTileWrapper %}
|
||||||
|
<a href="#" class="tile tile-filter-brick" id="brick-{{ brick.GetId }}" data-brick-id="{{ brick.GetId }}">
|
||||||
|
<div class="tile_decoration">
|
||||||
|
<span class="icon {{ brick.GetDecorationClassHome }}"></span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="tile_body">
|
||||||
|
<div class="tile_title">{{ brick.GetTitleHome|dict_s }}</div>
|
||||||
|
{% if brick.HasDescription %}
|
||||||
|
<div class="tile_description">{{ brick.GetDescription|dict_s|raw }}</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="tile_filterbox">
|
||||||
|
<form method="post" action="{{ sTargetBrickUrl }}" class="form-inline">
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="sSearchValue" placeholder="{{ brick.GetSearchPlaceholderValue|dict_s }}" />
|
||||||
|
</div>
|
||||||
|
<input type="hidden" name="sDataLoading" value="{{ constant('\\Combodo\\iTop\\Portal\\Brick\\AbstractBrick::ENUM_DATA_LOADING_LAZY') }}" />
|
||||||
|
<button type="submit" class="btn btn-primary">
|
||||||
|
<span class="{{ brick.GetSearchSubmitClass }}"></span>
|
||||||
|
{{ brick.GetSearchSubmitLabel|dict_s }}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
@@ -76,8 +76,13 @@
|
|||||||
'{{ aAreaData.sId }}': {{ aAreaData.aItems|json_encode()|raw }},
|
'{{ aAreaData.sId }}': {{ aAreaData.aItems|json_encode()|raw }},
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Columns definition for the table from the columnsProperties
|
// Show a loader inside the table
|
||||||
|
var showTableLoader = function(oElem)
|
||||||
|
{
|
||||||
|
oElem.children('tbody').html('<tr><td class="datatables_overlay" colspan="100">' + $('#page_overlay').html() + '</td></tr>');
|
||||||
|
};
|
||||||
|
// Columns definition for the table from the columnsProperties
|
||||||
var getColumnsDefinition = function(tableName)
|
var getColumnsDefinition = function(tableName)
|
||||||
{
|
{
|
||||||
var tableProperties = columnsProperties[tableName];
|
var tableProperties = columnsProperties[tableName];
|
||||||
@@ -152,6 +157,8 @@
|
|||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
{% for aAreaData in aGroupingAreasData %}
|
{% for aAreaData in aGroupingAreasData %}
|
||||||
{% set sAreaId = aAreaData.sId %}
|
{% set sAreaId = aAreaData.sId %}
|
||||||
|
|
||||||
|
showTableLoader( $('#table-{{ sAreaId }}') );
|
||||||
var oTable{{ sAreaId }} = $('#table-{{ sAreaId }}').DataTable( {
|
var oTable{{ sAreaId }} = $('#table-{{ sAreaId }}').DataTable( {
|
||||||
"language": {
|
"language": {
|
||||||
"processing": "{{ 'Portal:Datatables:Language:Processing'|dict_s }}",
|
"processing": "{{ 'Portal:Datatables:Language:Processing'|dict_s }}",
|
||||||
@@ -175,7 +182,7 @@
|
|||||||
},
|
},
|
||||||
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "{{ 'Portal:Datatables:Language:DisplayLength:All'|dict_s }}"]],
|
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "{{ 'Portal:Datatables:Language:DisplayLength:All'|dict_s }}"]],
|
||||||
"displayLength": {{ constant('Combodo\\iTop\\Portal\\Brick\\ManageBrick::DEFAULT_COUNT_PER_PAGE_LIST') }},
|
"displayLength": {{ constant('Combodo\\iTop\\Portal\\Brick\\ManageBrick::DEFAULT_COUNT_PER_PAGE_LIST') }},
|
||||||
"dom": '<"row"<"col-sm-6"l><"col-sm-6"<f><"visible-xs"p>>>t<"row"<"col-sm-6"ri><"col-sm-6"p>>',
|
"dom": '<"row"<"col-sm-6"l><"col-sm-6"<f><"visible-xs"p>>>t<"row"<"col-sm-6"i><"col-sm-6"p>>',
|
||||||
"columns": getColumnsDefinition('{{ sAreaId }}'),
|
"columns": getColumnsDefinition('{{ sAreaId }}'),
|
||||||
"order": [[0, "desc"]],
|
"order": [[0, "desc"]],
|
||||||
"rowCallback": function(oRow, oData){
|
"rowCallback": function(oRow, oData){
|
||||||
@@ -226,6 +233,15 @@
|
|||||||
d.iCountPerPage = d.length;
|
d.iCountPerPage = d.length;
|
||||||
d.columns = null;
|
d.columns = null;
|
||||||
d.orders = null;
|
d.orders = null;
|
||||||
|
|
||||||
|
{% if sSearchValue is not null %}
|
||||||
|
// Sets default filter value
|
||||||
|
if(d.draw === 1)
|
||||||
|
{
|
||||||
|
$('#table-{{ sAreaId }}_filter input').val('{{ sSearchValue }}');
|
||||||
|
d.search.value = $('#table-{{ sAreaId }}_filter input').val();
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
if(d.search.value)
|
if(d.search.value)
|
||||||
{
|
{
|
||||||
d.sSearchValue = d.search.value;
|
d.sSearchValue = d.search.value;
|
||||||
@@ -234,7 +250,7 @@
|
|||||||
}
|
}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
// Overrides filter input to apply throttle. Otherwise, an ajax request is send each time a key is pressed
|
// Overrides filter input to apply throttle. Otherwise, an ajax request is send each time a key is pressed
|
||||||
// Also removes accents from search string
|
// Also removes accents from search string
|
||||||
// Note : The '.off()' call is to unbind event from DataTables that where triggered before we could intercept anything
|
// Note : The '.off()' call is to unbind event from DataTables that where triggered before we could intercept anything
|
||||||
@@ -245,6 +261,12 @@
|
|||||||
oKeyTimeout = setTimeout(function() {
|
oKeyTimeout = setTimeout(function() {
|
||||||
oTable{{ sAreaId }}.search(me.value.latinise()).draw();
|
oTable{{ sAreaId }}.search(me.value.latinise()).draw();
|
||||||
}, iSearchThrottle);
|
}, iSearchThrottle);
|
||||||
|
});// Shows a loader in the table when processing
|
||||||
|
$('#table-{{ sAreaId }}').on('processing.dt', function(event, settings, processing){
|
||||||
|
if(processing === true)
|
||||||
|
{
|
||||||
|
showTableLoader($(this));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3295,6 +3295,9 @@ a.badge:hover, a.badge:focus {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
.list-group .list-group-item:hover {
|
||||||
|
background-color: rgba(254, 223, 167, 0.1);
|
||||||
|
}
|
||||||
.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
|
.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
|
||||||
color: #ea7d1e;
|
color: #ea7d1e;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
|||||||
@@ -4110,6 +4110,9 @@ a.badge:focus {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
}
|
}
|
||||||
|
.list-group .list-group-item:hover{
|
||||||
|
background-color: rgba(254, 223, 167, 0.1);
|
||||||
|
}
|
||||||
.list-group-item.active>.badge,
|
.list-group-item.active>.badge,
|
||||||
.nav-pills>.active>a>.badge {
|
.nav-pills>.active>a>.badge {
|
||||||
color: $brand-primary;
|
color: $brand-primary;
|
||||||
|
|||||||
@@ -546,12 +546,13 @@ footer {
|
|||||||
/****************/
|
/****************/
|
||||||
#brick_content_tree {
|
#brick_content_tree {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
.list-group-item > .list-group-item-actions {
|
.list-group-item > .list-group-item-actions {
|
||||||
/*display: none; Displaying actions only when hovering was not unanimous in the team */
|
/*display: none; Displaying actions only when hovering was not unanimous in the team */
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
right: 10px;
|
right: 15px;
|
||||||
}
|
}
|
||||||
.list-group-item:hover > .list-group-item-actions, .grid-group-item:hover > .grid-group-item-actions {
|
.list-group-item:hover > .list-group-item-actions, .grid-group-item:hover > .grid-group-item-actions {
|
||||||
display: block;
|
display: block;
|
||||||
@@ -791,6 +792,36 @@ table .group-actions {
|
|||||||
/****************/
|
/****************/
|
||||||
/* - List mode */
|
/* - List mode */
|
||||||
/****************/
|
/****************/
|
||||||
|
/****************/
|
||||||
|
/* Filter brick */
|
||||||
|
/****************/
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.tile.tile-filter-brick .tile_filterbox input[type="text"] {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.tile.tile-filter-brick .tile_filterbox form {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
.tile.tile-filter-brick .tile_filterbox button[type="submit"] {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
/*********/
|
/*********/
|
||||||
/* Forms */
|
/* Forms */
|
||||||
/*********/
|
/*********/
|
||||||
|
|||||||
@@ -572,13 +572,14 @@ footer{
|
|||||||
/****************/
|
/****************/
|
||||||
#brick_content_tree{
|
#brick_content_tree{
|
||||||
position: relative;
|
position: relative;
|
||||||
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-group-item > .list-group-item-actions{
|
.list-group-item > .list-group-item-actions{
|
||||||
/*display: none; Displaying actions only when hovering was not unanimous in the team */
|
/*display: none; Displaying actions only when hovering was not unanimous in the team */
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
right: 10px;
|
right: 15px;
|
||||||
}
|
}
|
||||||
.list-group-item:hover > .list-group-item-actions,
|
.list-group-item:hover > .list-group-item-actions,
|
||||||
.grid-group-item:hover > .grid-group-item-actions{
|
.grid-group-item:hover > .grid-group-item-actions{
|
||||||
@@ -854,6 +855,37 @@ table .group-actions .item-action-wrapper .panel-body > p:last-child{
|
|||||||
/* - List mode */
|
/* - List mode */
|
||||||
/****************/
|
/****************/
|
||||||
|
|
||||||
|
/****************/
|
||||||
|
/* Filter brick */
|
||||||
|
/****************/
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.tile.tile-filter-brick .tile_filterbox input[type="text"]{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
@media (max-width: 768px){
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child{
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 768px){
|
||||||
|
.tile.tile-filter-brick .tile_filterbox form{
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child{
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
.tile.tile-filter-brick .tile_filterbox button[type="submit"]{
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 992px)
|
||||||
|
{
|
||||||
|
.tile.tile-filter-brick .tile_filterbox .form-group:first-child{
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*********/
|
/*********/
|
||||||
/* Forms */
|
/* Forms */
|
||||||
|
|||||||
@@ -99,3 +99,10 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
|||||||
'Brick:Portal:Create:Name' => 'Быстрое создание',
|
'Brick:Portal:Create:Name' => 'Быстрое создание',
|
||||||
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Filter brick
|
||||||
|
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||||
|
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg: install office~~',
|
||||||
|
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
|
||||||
|
));
|
||||||
|
|||||||
Reference in New Issue
Block a user