|
47 | 47 | globalPadding: '33px',
|
48 | 48 | showShiftSelectMessage: true,
|
49 | 49 | searchButtonText: 'Search',
|
| 50 | + timeOffsetInHours: 0, |
| 51 | + encodeInUrl: 'value', //can be 'value' / 'name' |
50 | 52 | }, options);
|
51 | 53 |
|
52 | 54 | filterModal.that = this;
|
53 | 55 | filterModal.settings = settings;
|
54 | 56 | filterModal.searchClickedCallback = settings.searchClickedCallback;
|
| 57 | + filterModal.decryptField = settings.encodeInUrl == 'value' ? 'name': 'value'; |
55 | 58 |
|
56 | 59 | decryptUrlIntoSelectedFilters();
|
57 | 60 | this.html(buildHtml(settings)).hide().fadeIn();
|
|
100 | 103 |
|
101 | 104 | if (filterModal.settings.showSearchButton) {
|
102 | 105 | searchButton = '<div class="clearfix"></div>' +
|
103 |
| - '<div class="row" style="float: right; margin-top: 20px;">' + |
104 |
| - '<button id="filter-search-button" style="padding: 10px 112px" class="btn btn-lg btn-block btn-success">'+filterModal.settings.searchButtonText+'</button>' + |
105 |
| - '</div> '; |
| 106 | + '<div class="row" style="float: right; margin-top: 20px;">' + |
| 107 | + '<button id="filter-search-button" style="padding: 10px 112px" class="btn btn-lg btn-block btn-success">'+filterModal.settings.searchButtonText+'</button>' + |
| 108 | + '</div> '; |
106 | 109 | }
|
107 | 110 |
|
108 | 111 | title = '<legend>'+ settings.title+'</legend>';
|
|
222 | 225 |
|
223 | 226 | //in case this filter is connected to other filters
|
224 | 227 | relatedTo = relateToRender(filterParameter);
|
| 228 | + // todo render relatedTo in the html to be coded in the url later |
225 | 229 |
|
226 | 230 | checkBoxesHtml += '<div class="checkbox" style="display: '+ display + '">' +
|
227 |
| - '<a class="single-filter-js" data-attribute="'+filterParameter.value+'" ' + |
228 |
| - realNameAttribute+'="'+filterParameter.name+'">'+ |
229 |
| - filterParameter.name+ relatedTo+'</a></div>'; |
| 231 | + '<a class="single-filter-js" data-attribute="'+filterParameter.value+'" ' + |
| 232 | + realNameAttribute+'="'+filterParameter.name+'">'+ |
| 233 | + filterParameter.name+ relatedTo+'</a></div>'; |
230 | 234 | });
|
231 | 235 | checkBoxesHtml += '<div class="clearfix"> </div>';
|
232 | 236 |
|
|
241 | 245 | }
|
242 | 246 |
|
243 | 247 | function renderDateRangeIfNeeded(){
|
244 |
| - var dateRangeElement = $('input[name="'+dateRangeName+'"]'); |
| 248 | + var dateRangeElement = $('input[name="'+dateRangeName+'"]'), |
| 249 | + s = filterModal.settings; |
245 | 250 | if (dateRangeElement.length >0 ) {
|
246 | 251 | function cb(start, end) {
|
247 | 252 | $('input[name="' + dateRangeName + '"]').html(start.format(filterModal.settings.dateFormat) + ' - ' + end.format(filterModal.settings.dateFormat));
|
|
252 | 257 | dateRangeElement.daterangepicker({
|
253 | 258 | format: filterModal.settings.dateFormat,
|
254 | 259 | ranges: {
|
255 |
| - ranges: { |
256 |
| - 'Today': [moment().startOf('day'), moment().endOf('day')], |
257 |
| - 'Last 5 minutes': [moment().subtract(5, 'minutes'), moment().endOf('day')], |
258 |
| - 'Last 15 minutes': [moment().subtract(15, 'minutes'), moment().endOf('day')], |
259 |
| - 'Last 1 hour': [moment().subtract(1, 'hour'), moment().endOf('day')], |
260 |
| - 'Last 3 hour': [moment().subtract(3, 'hour'), moment().endOf('day')], |
261 |
| - 'Last 1 day': [moment().subtract(1, 'day'), moment().endOf('day')], |
262 |
| - 'Last 7 Days': [moment().subtract(6, 'days'), moment().endOf('day')], |
263 |
| - 'Last 30 Days': [moment().subtract(29, 'days'), moment().endOf('day')], |
264 |
| - 'Yesterday': [moment().subtract(1, 'days').startOf('day'), moment().subtract(1, 'days').endOf('day')], |
265 |
| - 'This Month': [moment().startOf('month'), moment().endOf('month')], |
266 |
| - 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], |
267 |
| - 'Last 3 Months': [moment().subtract(3, 'month').startOf('month'), moment().add(10, 'minutes')], |
268 |
| - }, locale: {cancelLabel: 'Clear'} |
| 260 | + 'Today': [moment().startOf('day'), moment().endOf('day')], |
| 261 | + 'Last 5 minutes': [moment().subtract(s.timeOffsetInHours, 'hour').subtract(5, 'minutes'), moment().endOf('day')], |
| 262 | + 'Last 15 minutes': [moment().subtract(s.timeOffsetInHours, 'hour').subtract(15, 'minutes'), moment().endOf('day')], |
| 263 | + 'Last 1 hour': [moment().subtract(s.timeOffsetInHours, 'hour').subtract(1, 'hour'), moment().endOf('day')], |
| 264 | + 'Last 3 hour': [moment().subtract(s.timeOffsetInHours, 'hour').subtract(3, 'hour'), moment().endOf('day')], |
| 265 | + 'Last 1 day': [moment().subtract(1, 'day'), moment().endOf('day')], |
| 266 | + 'Last 7 Days': [moment().subtract(6, 'days'), moment().endOf('day')], |
| 267 | + 'Last 30 Days': [moment().subtract(29, 'days'), moment().endOf('day')], |
| 268 | + 'Yesterday': [moment().subtract(1, 'days').startOf('day'), moment().subtract(1, 'days').endOf('day')], |
| 269 | + 'This Month': [moment().startOf('month'), moment().endOf('month')], |
| 270 | + 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], |
| 271 | + 'Last 3 Months': [moment().subtract(3, 'month').startOf('month'), moment().add(10, 'minutes')], |
269 | 272 | }, locale: {cancelLabel: 'Clear'}
|
270 | 273 |
|
| 274 | + |
271 | 275 | }, cb);
|
272 | 276 | }
|
273 | 277 |
|
|
300 | 304 | $.each(filterModal.selectedFilterParameters, function(serverName, selectedParameter){
|
301 | 305 | humanParameterName = selectedParameter.attributeHumaneName;
|
302 | 306 | showMoreModelName = calcShowMoreModelName(selectedParameter.attributeHumaneName);
|
303 |
| - selectedValue = (1 < selectedParameter.values.length) ? '(' + selectedParameter.values.length + ')' : selectedParameter.values[0].name; |
| 307 | + selectedValue = (1 < selectedParameter.values.length) ? '(' + selectedParameter.values.length + ')' : selectedParameter.values[0]['name']; |
304 | 308 |
|
305 | 309 | parameter = filterModal.filters[serverName];
|
306 | 310 | // errors on date range
|
307 | 311 | if (parameter) {
|
308 | 312 |
|
309 | 313 | html += '<div class="selectbox pull-left active" data-attribute="'+ serverName +'" ' + 'type-attribute="' + selectedParameter.type + '"' +
|
310 |
| - 'style="padding: 10px; margin-right: 10px; margin-bottom: 10px; ;border: 1px solid '+filterModal.settings.borderColor+'">' + |
311 |
| - '<a data-toggle="modal" data-target="#'+showMoreModelName+'">'+ humanParameterName + ': '+ selectedValue +'</a>' + |
312 |
| - '<button type="button" class="close remove-filter" aria-label="Close" style="padding: 0 10px 0 15px; line-height: 0.75">' + |
313 |
| - '<span aria-hidden="true">×</span></button>' + |
314 |
| - '</div>'; |
| 314 | + 'style="padding: 10px; margin-right: 10px; margin-bottom: 10px; ;border: 1px solid '+filterModal.settings.borderColor+'">' + |
| 315 | + '<a data-toggle="modal" data-target="#'+showMoreModelName+'">'+ humanParameterName + ': '+ selectedValue +'</a>' + |
| 316 | + '<button type="button" class="close remove-filter" aria-label="Close" style="padding: 0 10px 0 15px; line-height: 0.75">' + |
| 317 | + '<span aria-hidden="true">×</span></button>' + |
| 318 | + '</div>'; |
315 | 319 |
|
316 | 320 | filteredOptions = filterOptionsByDateAndRelatedToFilters(parameter);
|
317 | 321 | html += showMoreHiddenPopUpHtml(parameter.name, showMoreModelName, parameter, filteredOptions);
|
|
363 | 367 | filteredOptions = filterOptionsByDateAndRelatedToFilters(parameter);
|
364 | 368 | tempHtml = showMoreHiddenPopUpHtml(parameter.name, showMoreModelName, parameter, filteredOptions);
|
365 | 369 | additionalFilterHtml += '<div class="checkbox"><a data-toggle="modal" data-target="#'+
|
366 |
| - showMoreModelName+'" data-attribute="'+ |
367 |
| - parameter.attributeName+'">'+parameter.name+'</a>' + |
368 |
| - '</div>' + |
369 |
| - tempHtml; |
| 370 | + showMoreModelName+'" data-attribute="'+ |
| 371 | + parameter.attributeName+'">'+parameter.name+'</a>' + |
| 372 | + '</div>' + |
| 373 | + tempHtml; |
370 | 374 | }
|
371 | 375 | }
|
372 | 376 | });
|
|
375 | 379 | }
|
376 | 380 |
|
377 | 381 | filterInternalHtml +='<div class="select-parameter-box " style="border: 1px solid '+filterModal.settings.borderColor+'; height: '+filterModal.settings.selectBoxHeight *2+'px; padding: 20px; width: 25%; float: left;">' +
|
378 |
| - 'Additional Filters' + |
379 |
| - '<div class="group-surround">' + |
380 |
| - additionalFilterHtml + |
381 |
| - '</div>' + |
382 |
| - '</div>' ; |
| 382 | + 'Additional Filters' + |
| 383 | + '<div class="group-surround">' + |
| 384 | + additionalFilterHtml + |
| 385 | + '</div>' + |
| 386 | + '</div>' ; |
383 | 387 |
|
384 | 388 | filterInternalHtml += '</div>';
|
385 | 389 |
|
|
477 | 481 | relatedTo = relateToRender(filterParameter);
|
478 | 482 |
|
479 | 483 | checkBoxesHtml += '<div class="checkbox"><label>' +
|
480 |
| - '<input type="checkbox" '+ checked + ' value="' + filterParameter.value + '" ' + |
481 |
| - realNameAttribute+'="' + filterParameter.name + '">' + |
482 |
| - filterParameter.name + relatedTo + |
483 |
| - '</label></div>'; |
| 484 | + '<input type="checkbox" '+ checked + ' value="' + filterParameter.value + '" ' + |
| 485 | + realNameAttribute+'="' + filterParameter.name + '">' + |
| 486 | + filterParameter.name + relatedTo + |
| 487 | + '</label></div>'; |
484 | 488 | });
|
485 | 489 |
|
486 | 490 | return filterInputBox + shiftSelectMultiMessage + checkBoxesHtml;
|
|
562 | 566 | // enable the user to type directly in the search input
|
563 | 567 | // without having to select it using the mouse
|
564 | 568 | $('#'+modal.id).on('shown.bs.modal', function (e) {
|
565 |
| - $(this).find('.search-filters-js').focus() |
| 569 | + $(this).find('.search-filters-js').focus() |
566 | 570 | });
|
567 | 571 |
|
568 | 572 | //enable shift + select multi checkboxes
|
|
592 | 596 | }
|
593 | 597 |
|
594 | 598 | function bindInputChange(){
|
595 |
| - $('.text-input-js').keyup(function(){ |
596 |
| - addInputSelectedToDataModal($(this).closest('.select-parameter-box')) |
597 |
| - }) |
| 599 | + $('.text-input-js').keyup(function(){ |
| 600 | + addInputSelectedToDataModal($(this).closest('.select-parameter-box')) |
| 601 | + }) |
598 | 602 | }
|
599 | 603 |
|
600 | 604 | function bindMultiPopup(){
|
|
960 | 964 | values,
|
961 | 965 | selectedValue,
|
962 | 966 | selectedData,
|
963 |
| - dataToPush; |
| 967 | + dataToPush, |
| 968 | + name, tempValue; |
964 | 969 |
|
965 | 970 | //will init only of needed
|
966 | 971 | initFilterParametersByKeyValue();
|
|
973 | 978 | values = value.split(',');
|
974 | 979 | selectedData = filterModal.filterParametersByKeyValue[key];
|
975 | 980 | filterModal.selectedFilterParameters[key] = {values: [],
|
976 |
| - attributeHumaneName: selectedData.name, |
977 |
| - type: selectedData.type}; |
978 |
| - $.each(values, function (_, humanValue) { |
979 |
| - humanValue = decodeURIComponent(humanValue); |
| 981 | + attributeHumaneName: selectedData.name, |
| 982 | + type: selectedData.type}; |
| 983 | + $.each(values, function (_, selectedFilterValue) { |
| 984 | + selectedFilterValue = decodeURIComponent(selectedFilterValue); |
980 | 985 | // possible bug here
|
981 |
| - humanValue = humanValue.replace("/", ""); |
982 |
| - if (selectedData.options[humanValue]) { |
983 |
| - selectedValue = selectedData.options[humanValue].value; |
984 |
| - dataToPush = buildElementData({name: humanValue, value: selectedValue}, rawObject); |
| 986 | + selectedFilterValue = selectedFilterValue.replace("/", ""); |
| 987 | + if (selectedData.options[selectedFilterValue]) { |
| 988 | + |
| 989 | + selectedValue = selectedData.options[selectedFilterValue][filterModal.decryptField]; |
| 990 | + if (filterModal.decryptField == 'value'){ |
| 991 | + name = selectedFilterValue; |
| 992 | + tempValue = selectedValue; |
| 993 | + }else{ |
| 994 | + name = selectedValue; |
| 995 | + tempValue = selectedFilterValue; |
| 996 | + } |
| 997 | + |
| 998 | + dataToPush = buildElementData({name: name, value: tempValue}, rawObject); |
985 | 999 | filterModal.selectedFilterParameters[key].values.push(dataToPush)
|
986 | 1000 | }
|
987 | 1001 | });
|
|
997 | 1011 |
|
998 | 1012 |
|
999 | 1013 | function initFilterParametersByKeyValue(){
|
| 1014 | + var key; |
1000 | 1015 | if (!filterModal.filterParametersByKeyValue){
|
1001 | 1016 | filterModal.filterParametersByKeyValue = {};
|
1002 | 1017 | $.each(filterModal.settings.filterParameters, function(_, data){
|
1003 | 1018 | filterModal.filterParametersByKeyValue[data.attributeName] = $.extend({}, data);
|
1004 | 1019 | filterModal.filterParametersByKeyValue[data.attributeName].options = {};
|
1005 | 1020 | if (data.options) {
|
1006 | 1021 | $.each(data.options, function (_, optionData) {
|
1007 |
| - filterModal.filterParametersByKeyValue[data.attributeName].options[optionData.name] = optionData; |
| 1022 | + // todo maybe change optionData.name to optionData.value , |
| 1023 | + // name can repeat , value - less likely |
| 1024 | + |
| 1025 | + key = optionData[filterModal.settings.encodeInUrl]; |
| 1026 | + filterModal.filterParametersByKeyValue[data.attributeName].options[key] = optionData; |
1008 | 1027 | })
|
1009 | 1028 | }
|
1010 | 1029 | });
|
|
1092 | 1111 | $.each(data, function(key, keyData){
|
1093 | 1112 | url += prefix + key + '=';
|
1094 | 1113 | $.each(keyData.values, function(_, value){
|
1095 |
| - url += value.realName + ',' |
| 1114 | + // filterModal.settings.encodeInUrl or 'realValue' |
| 1115 | + url += value[filterModal.settings.encodeInUrl] + ',' |
1096 | 1116 | });
|
1097 | 1117 | url = url.slice(0, -1); // cur the last ,
|
1098 | 1118 | url += '&'
|
|
1184 | 1204 |
|
1185 | 1205 | if (0 < selected.length) {
|
1186 | 1206 | modifySelectedFilterData(serverParameterName, {
|
1187 |
| - attributeHumaneName: humanParameterName, |
1188 |
| - values: selected |
1189 |
| - }, |
1190 |
| - parameter.type); |
| 1207 | + attributeHumaneName: humanParameterName, |
| 1208 | + values: selected |
| 1209 | + }, |
| 1210 | + parameter.type); |
1191 | 1211 | }
|
1192 | 1212 | }
|
1193 | 1213 | });
|
|
0 commit comments