jQuery UI Widgets › Forums › Grid › Erro when put filterable: true,
This topic contains 1 reply, has 2 voices, and was last updated by Yavor Dashev 3 years, 9 months ago.
-
Author
-
Hello guys,
I need enable filter in grid, but when line “filterable: true,” the dgrid not show. Below I show my sourcecode, I need help this
`<!DOCTYPE html>
<html lang=”en”>
<head>
<title id=’Description’>Analítico</title>
<link rel=”stylesheet” href=”Grid/styles/jqx.base.css” type=”text/css” />
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″ />
<meta name=”viewport” content=”width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1″ /><link rel=”stylesheet” href=”https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css”>
<link rel=’stylesheet’ href=’https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css’><script type=”text/javascript” src=”Grid/jquery-1.11.1.min.js”></script>
<script type=”text/javascript” src=”Grid/jqxcore.js”></script>
<script type=”text/javascript” src=”Grid/jqxbuttons.js”></script>
<script type=”text/javascript” src=”Grid/jqxscrollbar.js”></script>
<script type=”text/javascript” src=”Grid/jqxmenu.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.selection.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.columnsresize.js”></script>
<script type=”text/javascript” src=”Grid/jqxdata.js”></script>
<script type=”text/javascript” src=”Grid/demos.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.grouping.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.aggregates.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.sort.js”></script>
<script type=”text/javascript” src=”Grid/jqxdata.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.export.js”></script>
<script type=”text/javascript” src=”Grid/jqxdata.export.js”></script>
<script type=”text/javascript” src=”Grid/jqxexport.js”></script>
<script type=”text/javascript” src=”Grid/jszip.min.js”></script>
<script type=”text/javascript” src=”Grid/jqxlistbox.js”></script>
<script type=”text/javascript” src=”Grid/jqxgrid.filter.js”></script><script type=”text/javascript”>
$(document).ready(function () {
$(‘#BtnSave’).click(function () {
var TIPO = ‘<?php echo $AAA; ?>’;
var url = “dadosAnaliticos.php?INI=”+$(“#INI”).val()+”&FIM=”+$(“#FIM”).val()+”&TIPO=”+TIPO;
source.url = url;
$(‘#grid’).jqxGrid(‘updatebounddata’);});
$(‘#BtnSave2’).click(function () {
var CliForn = $(“#ID_CLI_FOR”).val();
var Competencia = $(“#COMPETENCIA”).val();
var NumeroDoc = $(“#NUMERO_DOC”).val();
var Empresa = $(“#EMPRESA”).val();
var CentroCusto = $(“#CENTRO_CUSTO”).val();
var Servico = $(“#SERVICO”).val();
var TIPO = ‘<?php echo $_POST[“TIPO”]; ?>’;var url = “dadosAnaliticosFiltro.php?CliForn=”+CliForn+”&Competencia=”+Competencia+”&NumeroDoc=”+NumeroDoc+”&Empresa=”+Empresa+”&CentroCusto=”+CentroCusto+”&Servico”+Servico+”&Tipo=”+TIPO;
source.url = url;
$(‘#grid’).jqxGrid(‘updatebounddata’);});
var urlDefault = ‘[{ “CD_PRODUTO”: “–“, “DS_PRODUTO”: “–“, “DT_CADASTRO”: “–“, “VL_FATOR_PRO_FAT”: “–“, “VL_ULTIMA_ENTRADA”: “–“, “DS_PRODUTO_RESUMIDO”: “–“, “VL_ULTIMA_CUSTO_REAL”: “–“, “CD_USUARIO_INC”: “–” }]’;
var source =
{
datatype: “json”,
datafields: [
{ name: ‘CD_PRODUTO’ },
{ name: ‘DS_PRODUTO’ },
{ name: ‘DT_CADASTRO’, type: ‘date’ },
{ name: ‘VL_FATOR_PRO_FAT’, type: ‘number’ },
{ name: ‘VL_ULTIMA_ENTRADA’, type: ‘number’ },
{ name: ‘DS_PRODUTO_RESUMIDO’ },
{ name: ‘VL_ULTIMA_CUSTO_REAL’, type: ‘number’ },
{ name: ‘CD_USUARIO_INC’ },
],
id: ‘id’,
url: urlDefault,
root: ‘data’
};var cellclass = function (row, columnfield, value) {//return ‘yellow’;
if (value == “ABERTO”) {
return ‘white’;
}
else if (value == “VENCIDA”) {
return ‘red’;
}else if (value == “QUITADO”) {
return ‘green’;
}
}var getLocalization = function () {
var localizationobj = {};
localizationobj.pagergotopagestring = “Gehe zu:”;
localizationobj.pagershowrowsstring = “Zeige Zeile:”;
localizationobj.pagerrangestring = ” von “;
localizationobj.pagernextbuttonstring = “voriger”;
localizationobj.pagerpreviousbuttonstring = “nächster”;
localizationobj.sortascendingstring = “Ordenar crescente”;
localizationobj.sortdescendingstring = “Ordenar descendente”;
localizationobj.sortremovestring = “Entferne Sortierung”;
localizationobj.firstDay = 1;
localizationobj.percentsymbol = “%”;
localizationobj.currencysymbol = “R$ “;
localizationobj.currencysymbolposition = “before”;
localizationobj.decimalseparator = “,”;
localizationobj.thousandsseparator = “.”;
var days = {
// full day names
names: [“Sonntag”, “Montag”, “Dienstag”, “Mittwoch”, “Donnerstag”, “Freitag”, “Samstag”],
// abbreviated day names
namesAbbr: [“Sonn”, “Mon”, “Dien”, “Mitt”, “Donn”, “Fre”, “Sams”],
// shortest day names
namesShort: [“So”, “Mo”, “Di”, “Mi”, “Do”, “Fr”, “Sa”]
};
localizationobj.days = days;
var months = {
// full month names (13 months for lunar calendards — 13th month should be “” if not lunar)
names: [“Januar”, “Februar”, “März”, “April”, “Mai”, “Juni”, “Juli”, “August”, “September”, “Oktober”, “November”, “Dezember”, “”],
// abbreviated month names
namesAbbr: [“Jan”, “Feb”, “Mär”, “Apr”, “Mai”, “Jun”, “Jul”, “Aug”, “Sep”, “Oct”, “Nov”, “Dez”, “”]
};
var patterns = {
d: “dd.MM.yyyy”,
D: “dddd, d. MMMM yyyy”,
t: “HH:mm”,
T: “HH:mm:ss”,
f: “dddd, d. MMMM yyyy HH:mm”,
F: “dddd, d. MMMM yyyy HH:mm:ss”,
M: “dd MMMM”,
Y: “MMMM yyyy”
}
localizationobj.patterns = patterns;
localizationobj.months = months;
localizationobj.todaystring = “Heute”;
localizationobj.clearstring = “Löschen”;
return localizationobj;
}/*****************FILTRO************************/
var addfilter = function () {
// create a filter group for the FirstName column.
var fnameFilterGroup = new $.jqx.filter();
// operator between the filters in the filter group. 1 is for OR. 0 is for AND.
var filter_or_operator = 1;
// create a string filter with ‘contains’ condition.
var filtervalue = ‘Beate’;
var filtercondition = ‘contains’;
var fnameFilter1 = fnameFilterGroup.createfilter(‘stringfilter’, filtervalue, filtercondition);
// create second filter.
filtervalue = ‘Andrew’;
filtercondition = ‘starts_with’;
var fnameFilter2 = fnameFilterGroup.createfilter(‘stringfilter’, filtervalue, filtercondition);
// add the filters to the filter group.
fnameFilterGroup.addfilter(filter_or_operator, fnameFilter1);
fnameFilterGroup.addfilter(filter_or_operator, fnameFilter2);
// add the filter group to the ‘firstname’ column in the Grid.
$(“#jqxgrid”).jqxGrid(‘addfilter’, ‘firstname’, fnameFilterGroup);
// create a filter group for the Quantity column.
var quantityFilterGroup = new $.jqx.filter();
// create a filter.
var filter_or_operator = 1;
var filtervalue = 3;
var filtercondition = ‘less_than’;
var quantityFilter1 = quantityFilterGroup.createfilter(‘numericfilter’, filtervalue, filtercondition);
quantityFilterGroup.addfilter(filter_or_operator, quantityFilter1);
// add the filter group to the ‘quantity’ column in the Grid.
$(“#jqxgrid”).jqxGrid(‘addfilter’, ‘quantity’, quantityFilterGroup);
// apply the filters.
$(“#jqxgrid”).jqxGrid(‘applyfilters’);
}//****************FILTRO***********************/
var dataAdapter = new $.jqx.dataAdapter(source);
$(“#grid”).jqxGrid(
{
width: ‘98%’,
height: ‘850’,source: dataAdapter,
groupable: true,
selectionmode: ‘singlecell’,
showgroupaggregates: true,
showstatusbar: true,
showaggregates: true,
localization: getLocalization(),
statusbarheight: 25,
/*filterable: true,*/
sortable: true,
ready: function () {
addfilter();
},
columnsresize: true,
altrows: true,columns: [
{ text: ‘CD_PRODUTO’, datafield: ‘CD_PRODUTO’, cellclassname: cellclass, width: 120, align: ‘center’, cellsalign: ‘center’ },
{ text: ‘DS_PRODUTO’, datafield: ‘DS_PRODUTO’, width: 130, align: ‘center’, cellsalign: ‘left’ },
{ text: ‘DT_CADASTRO’, cellsformat: ‘dd/MM/yyyy’, groupable: true, width: 130, align: ‘center’, cellsalign: ‘center’ },
{ text: ‘VL_FATOR_PRO_FAT’, datafield: ‘VL_FATOR_PRO_FAT’, width: 130, groupable: true, width: 200, align: ‘center’, cellsalign: ‘center’, aggregates: [“sum”],
cellsformat: ‘c2’ , initeditor: function (row, cellvalue, editor) {
editor.jqxNumberInput({ digits: 6, decimalDigits: 2 }); }},
{ text: ‘VL_ULTIMA_ENTRADA’, datafield: ‘VL_ULTIMA_ENTRADA’, width: 130, groupable: true, width: 200, align: ‘center’, cellsalign: ‘center’, aggregates: [“sum”],
cellsformat: ‘c2’ , initeditor: function (row, cellvalue, editor) {
editor.jqxNumberInput({ digits: 6, decimalDigits: 2 }); }},
{ text: ‘DS_PRODUTO_RESUMIDO’, datafield: ‘DS_PRODUTO_RESUMIDO’, width: 160, align: ‘center’, cellsalign: ‘center’ },
{ text: ‘CD_USUARIO_INC’, datafield: ‘CD_USUARIO_INC’, width: 130, align: ‘center’, cellsalign: ‘center’ },
{ text: ‘VL_ULTIMA_CUSTO_REAL’, datafield: ‘VL_ULTIMA_CUSTO_REAL’, width: 130, groupable: true, width: 200, align: ‘center’, cellsalign: ‘center’, aggregates: [“sum”],
cellsformat: ‘c2’ , initeditor: function (row, cellvalue, editor) {
editor.jqxNumberInput({ digits: 6, decimalDigits: 2 }); }},
]
});
var listSource = [{ label: ‘CD_PRODUTO’, value: ‘CD_PRODUTO’, checked: true },
{ label: ‘DS_PRODUTO’, value: ‘DS_PRODUTO’, checked: true },
{ label: ‘DT_CADASTRO’, value: ‘DT_CADASTRO’, checked: true },
{ label: ‘VL_FATOR_PRO_FAT’, value: ‘VL_FATOR_PRO_FAT’, checked: true },
{ label: ‘VL_ULTIMA_ENTRADA’, value: ‘VL_ULTIMA_ENTRADA’, checked: true },
{ label: ‘DS_PRODUTO_RESUMIDO’, value: ‘DS_PRODUTO_RESUMIDO’, checked: true },
{ label: ‘CD_USUARIO_INC’, value: ‘CD_USUARIO_INC’, checked: true },
{ label: ‘VL_ULTIMA_CUSTO_REAL’, value: ‘VL_ULTIMA_CUSTO_REAL’, checked: true }
];$(“#jqxlistbox”).jqxListBox({ source: listSource, width: 200, height: 200, checkboxes: true });
$(“#jqxlistbox”).on(‘checkChange’, function (event) {
$(“#grid”).jqxGrid(‘beginupdate’);
if (event.args.checked) {
$(“#grid”).jqxGrid(‘showcolumn’, event.args.value);
}
else {
$(“#grid”).jqxGrid(‘hidecolumn’, event.args.value);
}
$(“#grid”).jqxGrid(‘endupdate’);
});});
function formatar(src, mask) {
var i = src.value.length;
var saida = mask.substring(i,i+1);
var ascii = event.keyCode;
if (saida == “A”) {
if ((ascii >=97) && (ascii <= 122)) { event.keyCode -= 32; }
else { event.keyCode = 0; }
} else if (saida == “0”) {
if ((ascii >= 48) && (ascii <= 57)) { return }
else { event.keyCode = 0 }
} else if (saida == “#”) {
return;
} else {
src.value += saida;if (saida == “A”) {
if ((ascii >=97) && (ascii <= 122)) { event.keyCode -= 32; }
} else { return; }
}
}</script>
</head>
<body style=”background:#f0f0f0;”><style>
.green {
color: black\9;
background-color: #b6ff00\9;
}
.yellow {
color: black\9;
background-color: yellow\9;
}
.red {
color: black\9;
background-color: #e83636\9;
}.green:not(.jqx-grid-cell-hover):not(.jqx-grid-cell-selected), .jqx-widget .green:not(.jqx-grid-cell-hover):not(.jqx-grid-cell-selected) {
color: black;
background-color: #b6ff00;
}
.yellow:not(.jqx-grid-cell-hover):not(.jqx-grid-cell-selected), .jqx-widget .yellow:not(.jqx-grid-cell-hover):not(.jqx-grid-cell-selected) {
color: black;
background-color: yellow;
}
.red:not(.jqx-grid-cell-hover):not(.jqx-grid-cell-selected), .jqx-widget .red:not(.jqx-grid-cell-hover):not(.jqx-grid-cell-selected) {
color: black;
background-color: #e83636;
}#borderDemo {
border: 1px solid #C7C1C1;
width: 157px;
padding: 5px;
margin-top: 11px;
margin-left: 18px;
}#borderDemo1 {
border: 2px double #E5DADA;
width: 60%;
align: center;
margin-left: 15px;
background-color: white;
position: absolute;
left: 15%;
top: 64px;
z-index: 1000;
padding: 10px;}
</style><div class=”row” style=”margin-top: 10px; margin-left:15px;”>
<div class=”form-group col-xs-1 col-sm-1 col-md-1 col-lg-1 “>
<label for=”nome” style=”margin-bottom: 0px; font-weight:bold;” >DT. INICIAL:</label>
<input type=”text” class=”form-control form-control-sm text-center” maxlength=”10″ onKeyPress=”formatar(this,’00/00/0000′)” name=”INI” id=”INI” value=”<?php echo $INI; ?>” >
</div><div class=”form-group col-xs-1 col-sm-1 col-md-1 col-lg-1 ” >
<label for=”nome” style=”margin-bottom: 0px; font-weight:bold;” >DT. FINAL:</label>
<input type=”text” class=”form-control form-control-sm text-center” maxlength=”10″ onKeyPress=”formatar(this,’00/00/0000′)” name=”FIM” id=”FIM” value=”<?php echo $FIM; ?>” >
</div><div style=”float: left;”>
<button style=”margin-top: 14px; width: 140px;” type=”button” class=”btn btn-success” id=”BtnSave” ><span style=”font-weight: bold;”>Filtrar</span></button>
</div><link rel=”stylesheet” href=”Tooltip/css/reset.css”>
<link rel=”stylesheet” href=”Tooltip/css/examples.css”>
<link rel=”stylesheet” href=”Tooltip/css/darktooltip.css”><div class=”form-group col-xs-5 col-sm-5 col-md-5 col-lg-5 ” >
<div id=”borderDemo”>
<i class=”fas fa-funnel-dollar fa-2x” style=”margin-left: 10px; cursor:pointer;” id=”Filter”></i>
<i class=”fas fa-file-download fa-2x” style=”margin-left: 10px; cursor:pointer;” id=”confirm2″ data-tooltip=”Escolha:”></i>
<i class=”fas fa-cogs fa-2x” style=”margin-left: 10px; cursor:pointer;” id=”BtnColunas”></i>
</div>
</div></div>
<script src=”Tooltip/js/jquery.darktooltip.js”></script>
<script type=”text/javascript”>
$(document).ready( function(){$(‘#def’).darkTooltip();
$(‘#def-html’).darkTooltip({
opacity:1,
gravity:’west’
});$(‘#confirm’).darkTooltip({
trigger:’click’,
animation:’flipIn’,
gravity:’west’,
confirm:true,
yes:’Os 10 mais ‘,
no:’Todos’,
onYes: function(){
alert(“Abrir os 10 mais”);
},
onNo: function(){
alert(“Abrir todos”);
}});
$(‘#confirm2′).darkTooltip({
trigger:’click’,
animation:’flipIn’,
gravity:’west’,
confirm:true,
yes:’PDF’,
no:’EXCEL’,
onYes: function(){
$(“#grid”).jqxGrid(‘exportdata’, ‘pdf’, ‘jqxGrid’);
},
onNo: function(){
$(“#grid”).jqxGrid(‘exportdata’, ‘xlsx’, ‘jqxGrid’);
}});
$(‘#small-s’).darkTooltip({
size:’small’,
gravity: ‘south’
});
$(‘#medium-s’).darkTooltip({
gravity: ‘south’
});
$(‘#large-s’).darkTooltip({
size:’large’,
gravity: ‘south’
});$(‘#south’).darkTooltip({
gravity: ‘south’
});
$(‘#west’).darkTooltip({
gravity: ‘west’
});
$(‘#north’).darkTooltip({
gravity: ‘north’
});
$(‘#east’).darkTooltip({
gravity: ‘east’
});$(‘#effect-none’).darkTooltip();
$(‘#effect-flipin’).darkTooltip({
animation:’flipIn’
});
$(‘#effect-fadein’).darkTooltip({
animation:’fadeIn’
});$(‘#theme-dark’).darkTooltip();
$(‘#theme-light’).darkTooltip({
theme:’light’
});$(‘#has-arrow’).darkTooltip();
$(‘#no-arrow’).darkTooltip({
arrow:false
});});
</script><!– ********GRID AQUI*********** –>
<div id=’jqxWidget’ style=” margin-left:15px;”>
<div id=”grid”></div>
</div>
<!– ********GRID AQUI*********** –><div style=”margin-top: 20px; margin-left:15px; position:absolute; left: 45%; top: -10px; z-index: 1000; display:none;” id=”jqxlistbox”></div>
<div id=”borderDemo1″ style=”display:block;”>
<div class=”frm-row” style=”float: left; width: 100%;”>
<div class=”form-group col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-4 ” id=”clif”>
<label for=”CARGO” id=”TESTE” ><?php echo $CliFornec; ?></label><br />
<select id=”ID_CLI_FOR” name=”ID_CLI_FOR” class=”select-chosen” data-placeholder=”Escolha o cargo…” style=”width: 100%;” >
<option value=””>Escolha uma opção</option>
<?phpif($AAA == 1){
$query2 = $link->prepare(“SELECT Id, IDENT_INTERNA FROM cliente_temp WHERE STATUS = ‘A’ AND TIPO = ‘FORNECEDOR’ ORDER BY IDENT_INTERNA ASC”);
}else{
$query2 = $link->prepare(“SELECT Id, IDENT_INTERNA FROM cliente_temp WHERE STATUS = ‘A’ AND TIPO = ‘FORNECEDOR’ ORDER BY IDENT_INTERNA ASC”);
}$query2->execute();
$resposta2 = $query2->get_result();
foreach($resposta2 as $lista2){?>
<option value=”<?php echo $lista2[“Id”]; ?>”><?php echo $AAA.’-‘.$lista2[“IDENT_INTERNA”]; ?></option>
<?php
}
?>
</select></div>
<div class=”form-group col-xs-12 col-sm-2 col-md-2 col-lg-2 col-xl-2 “>
<label for=”nome” >Competência:</label>
<input type=”text” class=”form-control form-control-sm text-center” name=”COMPETENCIA” id=”COMPETENCIA” onKeyPress=”formatar(this,’00/0000’)” maxlength=”7″ >
</div><div class=”form-group col-xs-12 col-sm-2 col-md-2 col-lg-2 col-xl-2 ” id=”campo_numero_doc”>
<label for=”nome” >Nº do doc:</label>
<input type=”text” class=”form-control form-control-sm text-center” name=”NUMERO_DOC” id=”NUMERO_DOC” style=”text-transform:uppercase” >
</div><div class=”form-group col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-4 ” id=”Emptg”>
<label for=”CARGO” >Empresa:</label><br />
<select id=”EMPRESA” name=”EMPRESA” class=”select-chosen” data-placeholder=”Escolha o cargo…” style=”width: 100%;” >
<option value=””>Escolha uma opção</option>
<?php$query = $link->prepare(“SELECT Id, EMPRESA FROM config_empresas_financeiro WHERE STATUS = ‘A’ ORDER BY EMPRESA ASC”);
$query->execute();
$resposta = $query->get_result();
foreach($resposta as $lista){?>
<option value=”<?php echo $lista[“EMPRESA”]; ?>”><?php echo $lista[“EMPRESA”]; ?></option>
<?php
}
?>
</select></div>
</div>
<div class=”frm-row” style=”float: left; width: 100%;”>
<div class=”form-group col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-4 “>
<label for=”CARGO” id=”Cents” ><?php echo $CentroLcCt; ?></label><br />
<select id=”CENTRO_CUSTO” name=”CENTRO_CUSTO” class=”select-chosen” data-placeholder=”Escolha o cargo…” style=”width: 100%;” >
<option value=””>Escolha uma opção</option>
<?phpif($AAA == “1”){
$query = $link->prepare(“SELECT Id, CENTRO FROM financeiro_centro_custo WHERE STATUS = ‘A’ ORDER BY CENTRO ASC”);
}else{
$query = $link->prepare(“SELECT Id, CENTRO FROM financeiro_centro_lucro WHERE STATUS = ‘A’ ORDER BY CENTRO ASC”);
}$query->execute();
$resposta = $query->get_result();
foreach($resposta as $lista){?>
<option value=”<?php echo $lista[“CENTRO”]; ?>”><?php echo $lista[“CENTRO”]; ?></option>
<?php
}
?>
</select></div>
<div class=”form-group col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-4 “>
<label for=”CARGO” >Serviço:</label><br />
<select id=”SERVICO” name=”SERVICO” class=”select-chosen” data-placeholder=”Escolha o cargo…” style=”width: 100%;” >
<option value=””>Escolha uma opção</option>
<?php$query = $link->prepare(“SELECT Id, SERVICO FROM config_servicos WHERE STATUS = ‘A’ ORDER BY SERVICO ASC”);
$query->execute();
$resposta = $query->get_result();
foreach($resposta as $lista){?>
<option value=”<?php echo $lista[“SERVICO”]; ?>”><?php echo $lista[“SERVICO”]; ?></option>
<?php
}
?>
</select></div>
<div style=”float: left;”>
<button style=”margin-top: 14px; width: 140px;” type=”button” class=”btn btn-success” id=”BtnSave2″ ><span style=”font-weight: bold;”>Filtrar</span></button>
</div></div>
</div>
</body>
</html>Hi eduardo12fox,
I have tested the jqxGrid with the exact same properties that you have shared and everything worked as intended and the grid was displayed properly.
That is why I would like to ask you few questions: which version of jQWidgets are you using(I strongly recommend using the latest one) and if you can create another code example with hardcoded data which reproduces the issue the same way as in your use case.
Please, do not hesitate to contact us if you have any additional questions.
Best Regards,
Yavor Dashev
jQWidgets team
https://www.jqwidgets.com -
AuthorPosts
You must be logged in to reply to this topic.