1/* Gestione configurazioni per selezione documenti, faq, ecc. */ 2/* ---------------------------------------------------------- */ 3 4//Funzioni comuni 5 6var listSelectorConfigurations = { 7 portletNamespace:"", 8 objSearchFilters:"", 9 objListId:"", 10 objListUlId:"", 11 manualShowInAnyLangId:"", 12 manualPreviewFiltersId:"", 13 manualSearchId:"", 14 filterSearchId:"", 15 objManualResultsId:"", 16 manualSearchFieldSelector:"", 17 autoSearchFieldSelector:"", 18 searchUrl:"", 19 fieldLanguageId:"", 20 listContentType:"", 21 selectContentType:"", 22 objIdAttributeName:"", 23 idAttributeName:"", 24 idAttributeString:false, 25 labelAttributeName:"", 26 researchResultsModalTitle:"", 27 previewModalTitle:"", 28 selectModalTitle:"", 29 modalListhasLink:false, 30 objListhasLink:false, 31 canEditTitle:false, 32 linkAttributeName:null, 33 objLinkClass:"", 34 listObjLinkClass:"", 35 objIdDataAttributeName:"", 36 languagesToShow:"", 37 isDocuwareList:false, 38 isFaqsList:false, 39 isProjectsList:false, 40 isPublicationsList:false, 41 useLangs:false, 42 noObjectsText:"Nessun elemento selezionato", 43 isManualSearch:false, 44 isSortable:false, 45 orderAutoSearchListByAttributeId:"", 46 objDataAttributes:[], 47 contentTypeAttributes:{} 48}; 49function initListSelector(portletListSelectorConfigurations){ 50 try{ 51 Object.keys(portletListSelectorConfigurations).forEach(key => { 52 listSelectorConfigurations[key] = portletListSelectorConfigurations[key]; 53 }); 54 //listSelectorConfigurations = portletListSelectorConfigurations; 55 //console.log("listSelectorConfigurations:"); console.dir(listSelectorConfigurations); 56 if(listSelectorConfigurations.isDocuwareList){ 57 searchConfigurationLoad( 58 listSelectorConfigurations.portletNamespace, 59 listSelectorConfigurations.objSearchFilters, 60 listSelectorConfigurations.autoSearchFieldSelector, 61 listSelectorConfigurations.objIdAttributeName 62 ); 63 } 64 var listUpdated = false; 65 if(listSelectorConfigurations.useLangs){ 66 let languages = listSelectorConfigurations.languagesToShow; 67 if(languages.length>0){
68 languages.forEach(function(lang){ 69 updateList(lang); 70 listUpdated = true; 71 }); 72 } 73 } 74 if(!listUpdated){ updateList(); } 75 if(listSelectorConfigurations.isDocuwareList){ 76 addDowloadDocuwareDocumentEventListener(); 77 } 78 if(listSelectorConfigurations.isFaqsList){ 79 addUpdateCategoriesValuesEventListener(); 80 } 81 if(listSelectorConfigurations.isSortable){ 82 initObjectsSortLists(); 83 } 84 } 85 catch(error){ logError(error); } 86} 87 88function changeSelectorType(val){ 89 try{ 90 var ManualSearch = document.getElementById(listSelectorConfigurations.manualSearchId); 91 var ManualSearchResults = document.getElementById(listSelectorConfigurations.objManualResultsId); 92 var FilterSearch = document.getElementById(listSelectorConfigurations.filterSearchId); 93 if(val){ 94 ManualSearch.classList.remove('d-none'); 95 ManualSearchResults.classList.remove('d-none'); 96 FilterSearch.classList.add('d-none'); 97 listSelectorConfigurations.isManualSearch = true; 98 } 99 else{ 100 ManualSearch.classList.add('d-none'); 101 ManualSearchResults.classList.add('d-none'); 102 FilterSearch.classList.remove('d-none'); 103 listSelectorConfigurations.isManualSearch = false; 104 } 105 } 106 catch(error){ logError(error); } 107} 108 109function setListNoLegend(){ 110 try{ 111 setTimeout(function(){ 112 var noLegends = document.querySelectorAll(".no-legend"); 113 for(var i=0;i < noLegends.length; i++){ 114 var noLegend = noLegends[i]; 115 noLegend.classList.add("no-legend-item"); 116 } 117 }, 500); 118 } 119 catch(error){ logError(error); } 120} 121 122function getInputFieldType(fieldObject){ 123 var inputFieldType = undefined; 124 try{ 125 if(typeof fieldObject === "object" && fieldObject !== null){ 126 var inputTagName = ""; var inputType = ""; 127 inputTagName = fieldObject.tagName; 128 inputType = fieldObject.type; 129 if(inputTagName=="INPUT"){ 130 if(inputType=="text"){ inputFieldType = "text"; } 131 else if(inputType=="checkbox"){ inputFieldType = "checkbox"; } 132 } 133 else if(inputTagName=="SELECT"){ 134 inputFieldType = "select"; 135 } 136 137 } 138 } 139 catch(error){ logError(error); } 140 return inputFieldType; 141} 142 143function listSelectorConfigurationSubmit(){ 144 try{ 145 showLoading(document); 146 var thisForm = document.getElementById(listSelectorConfigurations.portletNamespace+"fm"); 147 if(thisForm!=null){ 148 if(listSelectorConfigurations.isDocuwareList){ 149 updatefilterFieldsInput(listSelectorConfigurations.portletNamespace, listSelectorConfigurations.autoSearchFieldSelector, listSelectorConfigurations.listContentType, listSelectorConfigurations.objSearchFilters, listSelectorConfigurations.objIdAttributeName); 150 } 151 thisForm.submit(); 152 } 153 } 154 catch(error){ logError(error); } 155} 156 157function addUpdateCategoriesValuesEventListener(){ 158 try{ 159 // DOMNodeInserted/DOMNodeRemoved Deprecati: sostituitoi con MutationObserver 160 /*$('body').on('DOMNodeInserted', "input", function () { 161 updateSelectorCategoriesValues(); 162 }); 163 $('body').on('DOMNodeRemoved', "input", function () { 164 setTimeout(function(){ 165 updateSelectorCategoriesValues(); 166 }, 1000); 167 });*/ 168 169 //MutationObserver 170 const observer = new MutationObserver((mutationList) => { 171 mutationList 172 .filter((m) => m.type === 'childList') 173 .forEach((mutation) => { 174 mutation.addedNodes.forEach((node) => DOMNodeInserted(node)); 175 mutation.removedNodes.forEach((node) => DOMNodeRemoved(node)); 176 }); 177 }); 178 179 //Observe 180 let target = $('body')[0]; 181 observer.observe(target, { childList: true, subtree: true }); 182 183 //Node inserted 184 function DOMNodeInserted(insertedNode){ 185 if(insertedNode.localName=="input"){ 186 console.log("insertedNode!"); console.dir(insertedNode); 187 updateSelectorCategoriesValues(); 188 } 189 } 190 //Node removed 191 function DOMNodeRemoved(removedNode){ 192 if(removedNode.localName=="input"){ 193 console.log("removedNode!"); console.dir(removedNode); 194 setTimeout(function(){ 195 updateSelectorCategoriesValues(); 196 }, 1000); 197 } 198 } 199 200 } 201 catch(error){ logError(error); } 202} 203 204 205function updateSelectorCategoriesValues(){ 206 try{ 207 var isManual = listSelectorConfigurations.isManualSearch; 208 var catFilterSelectorName = "filterAssetCategoryIds"; 209 if(isManual){ catFilterSelectorName = "manualAssetCategoryIds"; } 210 var catFilterSelector = "input[name^='"+listSelectorConfigurations.portletNamespace+catFilterSelectorName+"']"; 211 var confCatSel = document.querySelectorAll(catFilterSelector); 212 var filterSearchFieldsInput = document.getElementById(listSelectorConfigurations.objSearchFilters); 213 var manualSearchFieldsInput = document.getElementById(listSelectorConfigurations.manualPreviewFiltersId); 214 var searchFieldsInput = filterSearchFieldsInput; 215 if(isManual){ searchFieldsInput = manualSearchFieldsInput; } 216 if(confCatSel!=null && searchFieldsInput!=null){ 217 var vals = ""; 218 for (var i = 0; i < confCatSel.length; i++) { 219 var val = confCatSel[i].value; 220 if(val!="" && vals.indexOf(val)==-1){ 221 if(vals!=""){ vals += ","; } 222 vals += val; 223 } 224 } 225 searchFieldsInput.value = vals; 226 } 227 } 228 catch(error){ logError(error); } 229} 230 231 232function getFieldsValues(portletNamespace, fieldselector, addAllCharToTexts, contentType, objIdAttributeName, returnArray){ 233 var jsonFilterValues = null; 234 var jsonFilterValuesObj = {}; 235 var jsonFilterValuesArray = []; 236 try{ 237 var filterSearchFields = document.querySelectorAll('.'+fieldselector); 238 if(filterSearchFields!=null){ 239 filterSearchFields.forEach(input => { 240 var inputId = input.id.replace(portletNamespace, ""); 241 var inputValue = input.value; 242 var inputDwFieldType = input.dataset.dwfieldtype; 243 var inputFieldType = "text"; 244 inputFieldType = getInputFieldType(input); 245 var val = inputValue; 246 var addElement = true; 247 if(inputFieldType == "checkbox"){ 248 var checked = input.checked; 249 if(!checked){ addElement = false; } 250 } 251 if(addAllCharToTexts && inputFieldType == "text"){ 252 if(val!=null && val!=""){ 253 if(!val.startsWith("*")){ val = "*" + val; } 254 if(!val.endsWith("*")){ val = val + "*"; } 255 } 256 } 257 if(addElement){ 258 var jsonValue = {}; 259 switch(contentType){ 260 case "dw-list": 261 jsonValue = {'dwfieldtype':inputDwFieldType, 'fieldtype':inputFieldType}; 262 jsonValue[objIdAttributeName] = val; 263 break; 264 case "dw-select": 265 jsonValue = {'dwfieldtype':inputDwFieldType, 'fieldtype':inputFieldType}; 266 jsonValue[objIdAttributeName] = val; 267 if(inputFieldType == "checkbox"){ 268 var title = input.dataset.title;
269 var fileExtension = input.dataset.fileextension; 270 var fileSize = input.dataset.filesize; 271 var storeDate = input.dataset.storedate; 272 var modDate = input.dataset.moddate; 273 var pageCount = input.dataset.pagecount; 274 jsonValue.title = title; 275 jsonValue.fileExtension = fileExtension; 276 jsonValue.fileSize = fileSize; 277 jsonValue.storeDate = storeDate; 278 jsonValue.modDate = modDate; 279 jsonValue.pageCount = pageCount; 280 } 281 break; 282 case "faq-select": 283 jsonValue = {'fieldtype':inputFieldType}; 284 jsonValue[objIdAttributeName] = val; 285 if(inputFieldType == "checkbox"){ 286 var title = input.dataset.title; 287 jsonValue.title = title; 288 } 289 break; 290 } 291 jsonFilterValuesArray.push(jsonValue); 292 jsonFilterValuesObj[inputId] = jsonValue; 293 } 294 }); 295 } 296 if(returnArray){ jsonFilterValues = jsonFilterValuesArray; } 297 else{ jsonFilterValues = jsonFilterValuesObj;} 298 } 299 catch(error){ logError(error); } 300 return jsonFilterValues; 301} 302 303function doSearch(portletNamespace, searchFieldSelector, searchUrl, lang, fieldLanguageId, filtersContentType, contentType, filterSearchFieldsInputId, objIdAttributeName, callbackFunction){ 304 var bodyDiv = document.getElementById("p_p_id"+portletNamespace); 305 try{ 306 let filtersVal = null; 307 let addLang = true; 308 if(isStringValid(listSelectorConfigurations.manualShowInAnyLangId)){ 309 let manualShowInAnyLang = document.getElementById(listSelectorConfigurations.manualShowInAnyLangId); 310 if(manualShowInAnyLang!=null){ 311 if(manualShowInAnyLang.checked){ 312 addLang = false; 313 } 314 } 315 } 316 if(listSelectorConfigurations.isDocuwareList){ 317 filtersVal = getFieldsValues(portletNamespace, searchFieldSelector, true, filtersContentType, objIdAttributeName, false); 318 if(isStringValid(lang) && isStringValid(fieldLanguageId) && addLang){ 319 let fVal = {"value":"*"+lang+"*","fieldtype":"text"}; 320 switch(contentType){ 321 case "dw-select": 322 fVal = {"value":"*"+convertLanguageForDocuware(lang)+"*","dwfieldtype":"0","fieldtype":"text"}; 323 break; 324 } 325 filtersVal[fieldLanguageId] = fVal; 326 } 327 filtersVal = "filters="+JSON.stringify(filtersVal); 328 } 329 else if(listSelectorConfigurations.isFaqsList){ 330 filtersVal = ""; 331 let cAttrs = listSelectorConfigurations.contentTypeAttributes; 332 if(cAttrs!=null){ 333 Object.keys(cAttrs).forEach(key => { 334 filtersVal += key+"="+cAttrs[key]+"&"; 335 }); 336 337 } 338 var filterSearchFieldsInput = document.getElementById(filterSearchFieldsInputId); 339 if(filterSearchFieldsInput!=null){ 340 var anyCategoryIds = filterSearchFieldsInput.value; 341 filtersVal += "anyCategoryIds="+anyCategoryIds; 342 } 343 } 344 else if(listSelectorConfigurations.isProjectsList){ 345 if(listSelectorConfigurations.isManualSearch){ 346 filtersVal = addSearchAttributes( 347 filtersVal, 348 [ 349 {'inputId':'manualPersonId', 'filterAttrName':'personId'}, 350 {'inputId':'manualUnitId', 'filterAttrName':'unitId'}, 351 {'inputId':'manualShowSubUnits', 'filterAttrName':'showSubUnits'}, 352 {'inputId':'manualResultType', 'filterAttrName':'resultType'}, 353 {'inputId':'manualShowAllProjects', 'filterAttrName':'showAllProjects'}, 354 {'inputId':'manualSubjectKeywords', 'filterAttrName':'subjectKeywords'}, 355 {'inputId':'manualOrderBy', 'filterAttrName':'orderBy'}, 356 {'inputId':'manualOrderAsc', 'filterAttrName':'orderAsc'}, 357 {'inputId':'manualProudFirst', 'filterAttrName':'proudFirst'}/*, 358 {'inputId':'manualResultsNum', 'filterAttrName':'resultsNum'}*/ 359 ], 360 portletNamespace 361 ); 362 } 363 else{ 364 filtersVal = addSearchAttributes( 365 filtersVal, 366 [ 367 {'inputId':'myConfigurationPersonId', 'filterAttrName':'personId'}, 368 {'inputId':'myConfigurationUnitId', 'filterAttrName':'unitId'}, 369 {'inputId':'myConfigurationShowSubUnits', 'filterAttrName':'showSubUnits'},
370 {'inputId':'myConfigurationResultType', 'filterAttrName':'resultType'}, 371 {'inputId':'myConfigurationSubjectKeywords', 'filterAttrName':'subjectKeywords'}, 372 {'inputId':'myConfigurationShowAllProjects', 'filterAttrName':'showAllProjects'}, 373 {'inputId':'myConfigurationOrderBy', 'filterAttrName':'orderBy'}, 374 {'inputId':'myConfigurationOrderAsc', 'filterAttrName':'orderAsc'}, 375 {'inputId':'myConfigurationProudFirst', 'filterAttrName':'proudFirst'}, 376 {'inputId':'myConfigurationResultsNum', 'filterAttrName':'resultsNum'}, 377 {'inputId':'myConfigurationStaticProjectslist', 'filterAttrName':'staticProjectslist'} 378 ], 379 portletNamespace 380 ); 381 } 382 let cAttrs = listSelectorConfigurations.contentTypeAttributes; 383 if(cAttrs!=null){ 384 Object.keys(cAttrs).forEach(key => { 385 if(filtersVal!=""){ filtersVal += "&"; } 386 filtersVal += key+"="+cAttrs[key]; 387 }); 388 } 389 } 390 else if(listSelectorConfigurations.isPublicationsList){ 391 if(listSelectorConfigurations.isManualSearch){ 392 filtersVal = addSearchAttributes( 393 filtersVal, 394 [ 395 {'inputId':'manualPersonId', 'filterAttrName':'personId'}, 396 {'inputId':'manualUnitId', 'filterAttrName':'unitId'}, 397 {'inputId':'manualShowSubUnits', 'filterAttrName':'showSubUnits'}, 398 {'inputId':'manualSubjectKeywords', 'filterAttrName':'subjectKeywords'}, 399 {'inputId':'manualShowAllPublications', 'filterAttrName':'showAllPublications'}, 400 {'inputId':'manualOrderBy', 'filterAttrName':'orderBy'}, 401 {'inputId':'manualOrderAsc', 'filterAttrName':'orderAsc'}, 402 {'inputId':'manualProudFirst', 'filterAttrName':'proudFirst'}/*, 403 {'inputId':'manualResultsNum', 'filterAttrName':'resultsNum'}*/ 404 ], 405 portletNamespace 406 ); 407 } 408 else{ 409 filtersVal = addSearchAttributes( 410 filtersVal, 411 [ 412 {'inputId':'myConfigurationPersonId', 'filterAttrName':'personId'}, 413 {'inputId':'myConfigurationUnitId', 'filterAttrName':'unitId'}, 414 {'inputId':'myConfigurationShowSubUnits', 'filterAttrName':'showSubUnits'}, 415 {'inputId':'myConfigurationSubjectKeywords', 'filterAttrName':'subjectKeywords'}, 416 {'inputId':'myConfigurationShowAllPublications', 'filterAttrName':'showAllPublications'}, 417 {'inputId':'myConfigurationOrderBy', 'filterAttrName':'orderBy'}, 418 {'inputId':'myConfigurationOrderAsc', 'filterAttrName':'orderAsc'}, 419 {'inputId':'myConfigurationProudFirst', 'filterAttrName':'proudFirst'}, 420 {'inputId':'myConfigurationResultsNum', 'filterAttrName':'resultsNum'}, 421 {'inputId':'myConfigurationStaticPublicationslist', 'filterAttrName':'staticPublicationslist'} 422 ], 423 portletNamespace 424 ); 425 } 426 let cAttrs = listSelectorConfigurations.contentTypeAttributes; 427 if(cAttrs!=null){ 428 Object.keys(cAttrs).forEach(key => { 429 if(filtersVal!=""){ filtersVal += "&"; } 430 filtersVal += key+"="+cAttrs[key]; 431 }); 432 } 433 } 434 filtersVal = filtersVal.replaceAll('{', "%7B").replaceAll('}', "%7D"); 435 //console.log(filtersVal); 436 if(isStringValid(filtersVal)){ 437 showLoading(bodyDiv); 438 var url = searchUrl+"?"+filtersVal; 439 //console.log("url:"+url); 440 executeStrutsWithReturnData(url, function(data){ 441 callbackFunction(data); 442 hideLoading(bodyDiv); 443 }); 444 } 445 } 446 catch(error){ 447 hideLoading(bodyDiv); 448 logError(error); 449 } 450} 451 452function addSearchAttributes(filtersVal, attributes, portletNamespace){ 453 try{ 454 if(filtersVal==null){ filtersVal = ""; } 455 if(attributes!=null){ 456 for (var i in attributes) { 457 let attribute = attributes[i]; 458 var inputId = attribute.inputId; 459 var filterAttrName = attribute.filterAttrName; 460 var attributeField = document.getElementById(portletNamespace+inputId); 461 if(attributeField!=null && attributeField!=undefined){ 462 var inputValue = attributeField.value; 463 var inputFieldType = getInputFieldType(attributeField); 464 switch(inputFieldType){ 465 case "text": inputValue = attributeField.value; break; 466 case "checkbox": inputValue = attributeField.checked; break; 467 case "select": 468 if(attributeField.multiple){ 469 var result = []; 470 var options = attributeField && attributeField.options; 471 var opt; 472 for (var i=0, iLen=options.length; i<iLen; i++) { 473 opt = options[i]; 474 if (opt.selected) { result.push(opt.value); } 475 } 476 inputValue = result.toString(); 477 } 478 else{ 479 inputValue = attributeField.options[attributeField.selectedIndex].value; 480 } 481 break; 482 } 483 inputValue = encodeURIComponent(inputValue); 484 if(filtersVal!=""){ filtersVal+= "&"; } 485 filtersVal += filterAttrName+"="+inputValue; 486 } 487 } 488 } 489 } 490 catch(error){ logError(error); } 491 return filtersVal; 492} 493 494 495//Funzioni per la selezione manuale 496 497function manualSelectSearch(lang){ 498 let thisobjListId = listSelectorConfigurations.objListId; 499 if(isStringValid(lang)){ thisobjListId += "_"+lang; } 500 doSearch( 501 listSelectorConfigurations.portletNamespace, 502 listSelectorConfigurations.manualSearchFieldSelector, 503 listSelectorConfigurations.searchUrl, 504 lang, 505 listSelectorConfigurations.fieldLanguageId, 506 listSelectorConfigurations.listContentType, 507 listSelectorConfigurations.selectContentType, 508 listSelectorConfigurations.manualPreviewFiltersId, 509 listSelectorConfigurations.objIdAttributeName, 510 function(data){ 511 let dataAttributes = listSelectorConfigurations.objDataAttributes; 512 let output = generateInteractiveObjectsListHTML( 513 data, 514 thisobjListId, 515 listSelectorConfigurations.objIdAttributeName, 516 listSelectorConfigurations.idAttributeName, 517 listSelectorConfigurations.labelAttributeName, 518 listSelectorConfigurations.researchResultsModalTitle, 519 listSelectorConfigurations.modalListhasLink, 520 listSelectorConfigurations.linkAttributeName, 521 listSelectorConfigurations.objLinkClass, 522 listSelectorConfigurations.objIdDataAttributeName, 523 dataAttributes 524 ); 525 var modalID = listSelectorConfigurations.portletNamespace+"manualSelectModal"; 526 createModal(modalID, listSelectorConfigurations.selectModalTitle, output); 527 $('#'+modalID).modal('show'); 528 if(listSelectorConfigurations.isDocuwareList){ 529 addDowloadDocuwareDocumentEventListener(); 530 } 531 addInsertObjectEventListener(function(element){ 532 insertObjectToList(element, thisobjListId, listSelectorConfigurations.selectContentType, listSelectorConfigurations.objIdAttributeName); 533 updateList(lang); 534 if(listSelectorConfigurations.isSortable){ 535 initObjectsSortLists();
536 } 537 }); 538 } 539 ); 540} 541 542 543 544 545function getObjectsIdsList(objectsListInputId, idAttributeName){ 546 var objIdsList = []; 547 try{ 548 var objectsListInput = document.getElementById(objectsListInputId); 549 if(objectsListInput!=null){ 550 var objectsListInputValues = objectsListInput.value; 551 if(isStringValid(objectsListInputValues)){ 552 var jsonObjValues = JSON.parse(objectsListInputValues); 553 for (var objElID in jsonObjValues) { 554 var obj = jsonObjValues[objElID]; 555 var id = ""; 556 if(obj.hasOwnProperty(idAttributeName)){ 557 id = obj[idAttributeName]; 558 objIdsList.push(id); 559 } 560 } 561 } 562 } 563 } 564 catch(error){ logError(error); } 565 return objIdsList; 566} 567 568 569function generateInteractiveObjectsListHTML(data, objectsListInputId, objectsListIdAttributeName, idAttributeName, labelAttributeName, headerTitle, hasLink, linkAttributeName, objectLinkClass, objectIdDataAttributeName, dataAttributes){ 570 let output = ''; 571 try{ 572 let objectsIdsList = getObjectsIdsList(objectsListInputId, objectsListIdAttributeName); 573 if(isStringValid(data)){ 574 var jsonData = JSON.parse(data); 575 var resultsCount = 0; var results = []; 576 if (jsonData.hasOwnProperty('resultsCount')) { resultsCount = jsonData.resultsCount; } 577 if (jsonData.hasOwnProperty('results')) { results = jsonData.results; } 578 output += "<strong>"+headerTitle+": "+resultsCount+"</strong>"; 579 output += "<ul class='object-selector-list'>"; 580 if (typeof results === 'string' || results instanceof String){ 581 try{ results = JSON.parse(results); } 582 catch (e) {} 583 } 584 var rNum = 0; 585 results.forEach(result => { 586 var id = ""; var label = ""; 587 if (result.hasOwnProperty(idAttributeName)) { id = result[idAttributeName]; } 588 if (result.hasOwnProperty(labelAttributeName)) { label = result[labelAttributeName]; } 589 var link = "#"; 590 if (result.hasOwnProperty(linkAttributeName)) { link = result[linkAttributeName]; } 591 var checked = ""; var checkedClass = "item-not-selected"; 592 if(objectsIdsList.includes(id)){ checked = "checked"; checkedClass = "item-selected"; } 593 if(isStringValid(id) && isStringValid(label)){ 594 var escTitle = escapeHtml(label); 595 output += "<li class='object-selector-item'>"; 596 output += "<div class='object-selector-element "+checkedClass+"'>"; 597 output += "<input type='checkbox' name='obj-"+id+"' id='obj-"+id+"' data-title='"+escTitle+"' data-rnum='"+rNum+"'"; 598 if(dataAttributes!=null){ 599 dataAttributes.forEach(dataAttribute => { 600 let dataName = dataAttribute.dataName; 601 let attributeId = dataAttribute.attributeId; 602 let attributeValue = ""; 603 if (result.hasOwnProperty(attributeId)) { attributeValue = result[attributeId]; } 604 output += " data-"+dataName+"='"+attributeValue+"'"; 605 }); 606 } 607 var valueContent = id; 608 if(listSelectorConfigurations.isProjectsList || listSelectorConfigurations.isPublicationsList){ 609 valueContent = JSON.stringify(result); 610 valueContent = valueContent.replace(/[']+/g, "'"); 611 } 612 output += " class='object-select-field' value='"+valueContent+"' "+checked+" /> "; 613 if(hasLink){ 614 output += "<a href='"+link+"' data-"+objectIdDataAttributeName+"='"+id+"' class='"+objectLinkClass+"'>"+label+" ["+id+"]</a>"; 615 } 616 else{ 617 output += label+" ["+id+"]"; 618 } 619 output += "</div>"; 620 output += "</li>"; 621 } 622 rNum++; 623 }); 624 output += "</ul>"; 625 } 626 } 627 catch(error){ logError(error); } 628 return output; 629} 630 631function selectObjects(portletNamespace, objectsListFieldsInputId, contentType, objIdAttributeName){ 632 try{ 633 var objectSelectVal = getFieldsValues(portletNamespace, 'object-select-field', false, contentType, objIdAttributeName, true); 634 var objectsListFieldsInput = document.getElementById(objectsListFieldsInputId); 635 if(objectsListFieldsInput!=null){ 636 objectSelectVal = JSON.stringify(objectSelectVal); 637 objectsListFieldsInput.value = objectSelectVal; 638 } 639 } 640 catch(error){ logError(error); } 641} 642 643function updateList(lang){ 644 try{ 645 let thisobjListUlId = listSelectorConfigurations.objListUlId;
646 let thisobjListId = listSelectorConfigurations.objListId; 647 if(isStringValid(lang)){ 648 thisobjListUlId += "_"+lang; 649 thisobjListId += "_"+lang; 650 } 651 updateObjectsList( 652 thisobjListUlId, 653 thisobjListId, 654 listSelectorConfigurations.objIdAttributeName, 655 listSelectorConfigurations.labelAttributeName, 656 listSelectorConfigurations.objListhasLink, 657 listSelectorConfigurations.linkAttributeName, 658 listSelectorConfigurations.listObjLinkClass, 659 listSelectorConfigurations.objIdDataAttributeName, 660 listSelectorConfigurations.canEditTitle, 661 function(element, title){ 662 if(confirm("L'elemento '"+title+"' verràcancellato.") == true){ 663 deleteObjectFromList(element, thisobjListId, listSelectorConfigurations.objIdAttributeName); 664 updateList(lang); 665 if(listSelectorConfigurations.isSortable){ 666 initObjectsSortLists(); 667 } 668 } 669 }, 670 function(element, title){ 671 let newTitle = prompt("Inserisci il nuovo titolo", title); 672 if (newTitle != null) { 673 updateObjectTitle(element, newTitle, thisobjListId, listSelectorConfigurations.objIdAttributeName, listSelectorConfigurations.labelAttributeName); 674 updateList(lang); 675 if(listSelectorConfigurations.isSortable){ 676 initObjectsSortLists(); 677 } 678 } 679 } 680 ); 681 } 682 catch(error){ logError(error); } 683} 684 685function updateObjectsList(objectsListUlId, objectsListFieldsInputId, idAttributeName, labelAttributeName, hasLink, linkAttributeName, objectLinkClass, objectIdDataAttributeName, canEditTitle, deleteCallbackFunction, editTitlebackFunction){ 686 try{ 687 let objectsListUl = document.getElementById(objectsListUlId); 688 let objectsListFieldsInput = document.getElementById(objectsListFieldsInputId); 689 if(objectsListUl!=null && objectsListFieldsInput!=null){ 690 var objectsListFieldsInputValues = objectsListFieldsInput.value; 691 if(isStringValid(objectsListFieldsInputValues)){ 692 var jsonObjValues = JSON.parse(objectsListFieldsInputValues); 693 if(!Array.isArray(jsonObjValues)){ jsonObjValues = convertObjectToArray(jsonObjValues); } 694 jsonObjValues = sortArrayByObjectProperty(jsonObjValues, "order"); 695 var output = ''; 696 jsonObjValues.forEach(function(obj){ 697 var id = ""; var label = ""; 698 if (obj.hasOwnProperty(idAttributeName)) { id = obj[idAttributeName]; } 699 if (obj.hasOwnProperty(labelAttributeName)) { label = obj[labelAttributeName]; } 700 var escTitle = escapeHtml(label); 701 var link = "#"; 702 if (obj.hasOwnProperty(linkAttributeName)) { link = obj[linkAttributeName]; } 703 output += '<li id="obj-'+id+'" class="removable" data-title="'+escTitle+'">'; 704 if(hasLink){ 705 output += '<a href="'+link+'" data-'+objectIdDataAttributeName+'"="'+id+'" class="'+objectLinkClass+'">'+label+'</a>'; 706 } 707 else{ 708 output += label; 709 } 710 if(canEditTitle){ 711 output += '<span class="supsi-icon-tag--edit title-edit-icon" id="tit-'+id+'"></span>'; 712 } 713 output += '<span class="supsi-icon-close--filled item-delete-icon" id="del-'+id+'"></span>'; 714 output += '</li>'; 715 }); 716 if(!isStringValid(output)){ 717 output = listSelectorConfigurations.noObjectsText; 718 } 719 objectsListUl.innerHTML = output; 720 addDeleteObjectEventListener(objectsListUl, function(element, title){ 721 deleteCallbackFunction(element, title); 722 }); 723 if(canEditTitle){ 724 addEditTitleObjectEventListener(objectsListUl, function(element, title){ 725 editTitlebackFunction(element, title); 726 }); 727 } 728 } 729 } 730 } 731 catch(error){ logError(error); } 732} 733 734function initObjectsSortLists(){ 735 try{ 736 var manualSearchFieldset = document.getElementById(listSelectorConfigurations.objManualResultsId); 737 if(manualSearchFieldset!=null){ 738 var sortLists = manualSearchFieldset.querySelectorAll('.sort-list-sortable'); 739 if(sortLists!=null){ 740 sortLists.forEach(sortList => { 741 let thisobjListUlId = listSelectorConfigurations.objListUlId; 742 let thisobjListId = listSelectorConfigurations.objListId 743 if(listSelectorConfigurations.useLangs){ 744 let lang = ""; 745 if(isStringValid(sortList.id)){
746 lang = sortList.id.slice(-2); 747 } 748 thisobjListUlId += "_"+lang; 749 thisobjListId += "_"+lang; 750 } 751 slist(sortList, function(el){ 752 orderObjectsList(thisobjListUlId, thisobjListId, listSelectorConfigurations.objIdAttributeName); 753 }); 754 }); 755 } 756 } 757 } 758 catch(error){ logError(error); } 759} 760 761 762function orderObjectsList(objectsListUlId, objectsListFieldsInputId, valueAttributeName){ 763 try{ 764 const objectsListUl = document.getElementById(objectsListUlId); 765 const objectsListFieldsInput = document.getElementById(objectsListFieldsInputId); 766 if(objectsListUl!=null && objectsListFieldsInput!=null){ 767 var objectsListFieldsInputValues = objectsListFieldsInput.value; 768 if(isStringValid(objectsListFieldsInputValues)){ 769 let jsonObjValues = JSON.parse(objectsListFieldsInputValues); 770 if(!Array.isArray(jsonObjValues)){ jsonObjValues = convertObjectToArray(jsonObjValues); } 771 let newJsonObjValues = []; 772 const objectsListUlLis = objectsListUl.querySelectorAll("li"); 773 if(objectsListUlLis!=null){ 774 for(let i=0;i<objectsListUlLis.length;i++){ 775 var objectsListUlLi = objectsListUlLis[i]; 776 var objId = objectsListUlLi.id.replace("obj-",""); 777 var jsonObjValResults = jsonObjValues.filter(obj => { return parseInt(obj[valueAttributeName]) === parseInt(objId); }); 778 if(listSelectorConfigurations.idAttributeString){ 779 jsonObjValResults = jsonObjValues.filter(obj => { return String(obj[valueAttributeName]) === String(objId); }); 780 } 781 if(jsonObjValResults!=null){ 782 if(jsonObjValResults.length>0){ 783 let jsonObjVal = jsonObjValResults[0]; 784 jsonObjVal.order = i; 785 newJsonObjValues.push(jsonObjVal); 786 } 787 } 788 } 789 } 790 newJsonObjValues = sortArrayByObjectProperty(newJsonObjValues, 'order'); 791 objectsListFieldsInput.value = JSON.stringify(newJsonObjValues); 792 } 793 } 794 } 795 catch(error){ logError(error); } 796} 797 798 799function addInsertObjectEventListener(callbackFunction){ 800 try{ 801 let objectList = document.querySelector('.object-selector-list'); 802 if(objectList!=null){ 803 let listElements = objectList.querySelectorAll(".object-selector-element.item-not-selected"); 804 if(listElements!=null){ 805 listElements.forEach(function(listElement){ 806 listElement.addEventListener("click", function(){ 807 callbackFunction(listElement); 808 }); 809 }); 810 } 811 } 812 } 813 catch(error){ logError(error); } 814} 815 816function addEditTitleObjectEventListener(objectsListUl, callbackFunction){ 817 try{ 818 let listElements = objectsListUl.querySelectorAll("li"); 819 if(listElements!=null){ 820 listElements.forEach(function(listElement){ 821 let title = listElement.dataset.title; 822 let editIcon = listElement.querySelector(".title-edit-icon"); 823 if(editIcon!=null){ 824 editIcon.addEventListener("click", function(){ 825 callbackFunction(listElement, title); 826 }); 827 } 828 }); 829 } 830 } 831 catch(error){ logError(error); } 832} 833 834function addDeleteObjectEventListener(objectsListUl, callbackFunction){ 835 try{ 836 let listElements = objectsListUl.querySelectorAll("li"); 837 if(listElements!=null){ 838 listElements.forEach(function(listElement){ 839 let title = listElement.dataset.title; 840 let deleteIcon = listElement.querySelector(".item-delete-icon"); 841 if(deleteIcon!=null){ 842 deleteIcon.addEventListener("click", function(){ 843 callbackFunction(listElement, title); 844 }); 845 } 846 }); 847 } 848 } 849 catch(error){ logError(error); } 850} 851 852 853 854 855function insertObjectToList(element, objectsListInputId, contentType, objIdAttributeName){ 856 try{ 857 var objectsListInput = document.getElementById(objectsListInputId); 858 var input = element.querySelector("input"); 859 if(objectsListInput!=null && input!=null){ 860 var objectsListInputValue = objectsListInput.value; 861 let currentValues = []; 862 if(isStringValid(objectsListInputValue)){ 863 currentValues = JSON.parse(objectsListInputValue); 864 if(!Array.isArray(currentValues)){ currentValues = convertObjectToArray(currentValues); } 865 } 866 var inputValue = input.value; 867 let objectId = input.id.replace("obj-",""); 868 inputFieldType = getInputFieldType(input); 869 let jsonValue = {}; 870 switch(contentType){ 871 case "dw-select": 872 jsonValue = {'dwfieldtype':'', 'fieldtype':inputFieldType}; 873 jsonValue[objIdAttributeName] = objectId; 874 if(inputFieldType == "checkbox"){ 875 var title = input.dataset.title;
876 var fileExtension = input.dataset.fileextension; 877 var fileSize = input.dataset.filesize; 878 var storeDate = input.dataset.storedate; 879 var modDate = input.dataset.moddate; 880 var pageCount = input.dataset.pagecount; 881 jsonValue.title = title; 882 jsonValue.fileExtension = fileExtension; 883 jsonValue.fileSize = fileSize; 884 jsonValue.storeDate = storeDate; 885 jsonValue.modDate = modDate; 886 jsonValue.pageCount = pageCount; 887 } 888 break; 889 case "faq-select": 890 jsonValue = {'fieldtype':inputFieldType}; 891 jsonValue[objIdAttributeName] = objectId; 892 if(inputFieldType == "checkbox"){ 893 var title = input.dataset.title; 894 jsonValue.title = title; 895 } 896 break; 897 case "project-select": 898 jsonValue = JSON.parse(inputValue); 899 break; 900 case "publication-select": 901 jsonValue = JSON.parse(inputValue); 902 break; 903 default: 904 jsonValue = {'fieldtype':inputFieldType}; 905 jsonValue[objIdAttributeName] = objectId; 906 if(inputFieldType == "checkbox"){ 907 var title = input.dataset.title; 908 jsonValue.title = title; 909 } 910 break; 911 } 912 var maxOrder = 0; 913 currentValues.forEach(function(currentValue){ 914 if(currentValue.order>maxOrder){ maxOrder = currentValue.order; } 915 }); 916 jsonValue.order = maxOrder+1; 917 currentValues.push(jsonValue); 918 currentValues = sortArrayByObjectProperty(currentValues, 'order'); 919 let newValue = JSON.stringify(currentValues); 920 objectsListInput.value = newValue; 921 element.classList.remove('item-not-selected'); 922 element.classList.add('item-selected') 923 if(inputFieldType == "checkbox"){ input.checked = true; } 924 } 925 } 926 catch(error){ logError(error); } 927} 928 929function updateObjectTitle(element, newtitle, objectsListInputId, idAttributeName, titleAttributeName){ 930 try{ 931 let objectsListInput = document.getElementById(objectsListInputId); 932 if(objectsListInput!=null){ 933 let objectsListInputValue = objectsListInput.value; 934 let currentValues = []; 935 if(isStringValid(objectsListInputValue)){ 936 currentValues = JSON.parse(objectsListInputValue); 937 if(!Array.isArray(currentValues)){ currentValues = convertObjectToArray(currentValues); } 938 } 939 let objectId = element.id.replace("obj-",""); 940 let newValues = []; 941 currentValues.forEach(function(currentValue, index){ 942 if(listSelectorConfigurations.idAttributeString){ 943 if(String(currentValue[idAttributeName]) === String(objectId)){ 944 currentValue[titleAttributeName] = newtitle; 945 } 946 } 947 else{ 948 if(parseInt(currentValue[idAttributeName]) === parseInt(objectId)){ 949 currentValue[titleAttributeName] = newtitle; 950 } 951 } 952 newValues.push(currentValue); 953 }); 954 newValues = sortArrayByObjectProperty(newValues, 'order'); 955 let newValue = JSON.stringify(newValues); 956 objectsListInput.value = newValue; 957 } 958 } 959 catch(error){ logError(error); } 960} 961 962function deleteObjectFromList(element, objectsListInputId, valueAttributeName){ 963 try{ 964 let objectsListInput = document.getElementById(objectsListInputId); 965 let objectElementLi = element.closest("li"); 966 if(objectsListInput!=null && objectElementLi!=null){ 967 let objectId = objectElementLi.id.replace("obj-",""); 968 let objectsListInputValue = objectsListInput.value; 969 let currentValues = []; 970 if(isStringValid(objectsListInputValue)){ 971 currentValues = JSON.parse(objectsListInputValue); 972 if(!Array.isArray(currentValues)){ currentValues = convertObjectToArray(currentValues); } 973 } 974 let newValues = currentValues.filter(object => { return parseInt(object[valueAttributeName]) !== parseInt(objectId); }); 975 if(listSelectorConfigurations.idAttributeString){ 976 newValues = currentValues.filter(object => { return String(object[valueAttributeName]) !== String(objectId); }); 977 } 978 let newValue = JSON.stringify(newValues); 979 objectsListInput.value = newValue; 980 } 981 } 982 catch(error){ logError(error); } 983} 984 985 986//Funzioni per la selezione automatica 987 988function searchConfigurationLoad(portletNamespace, searchFieldsInputSelector, searchFieldSelector, valueAttributeName){ 989 try{ 990 var filterSearchFieldsInput = document.getElementById(searchFieldsInputSelector); 991 var filterSearchFields = document.querySelectorAll("."+searchFieldSelector); 992 if(filterSearchFieldsInput!=null && filterSearchFields!=null){ 993 var filtersVal = filterSearchFieldsInput.value; 994 if(isStringValid(filtersVal)){ 995 var jsonFilterValues = JSON.parse(filtersVal); 996 filterSearchFields.forEach(input => { 997 var inputId = input.id.replace(portletNamespace, ""); 998 var inputType = input.type; 999 var inputTagName = input.tagName; 1000 var jsonElement = jsonFilterValues[inputId]; 1001 if(jsonElement!=undefined && jsonElement!=null){ 1002 if(jsonElement.hasOwnProperty(valueAttributeName)){ 1003 var elementValue = jsonElement[valueAttributeName]; 1004 if(elementValue!=null && elementValue!=""){ 1005 if(elementValue.startsWith("*")){ elementValue = elementValue.slice(1); } 1006 if(elementValue.endsWith("*")){ elementValue = elementValue.slice(0, -1); } 1007 } 1008 input.value = elementValue; 1009 } 1010 } 1011 }); 1012 } 1013 } 1014 $('select').selectpicker('destroy'); 1015 $('select').selectpicker(); 1016 } 1017 catch(error){ logError(error); } 1018} 1019 1020function selectSearchListPreview(lang){ 1021 doSearch( 1022 listSelectorConfigurations.portletNamespace, 1023 listSelectorConfigurations.autoSearchFieldSelector, 1024 listSelectorConfigurations.searchUrl, 1025 lang, 1026 listSelectorConfigurations.fieldLanguageId, 1027 listSelectorConfigurations.selectContentType, 1028 listSelectorConfigurations.selectContentType, 1029 listSelectorConfigurations.objSearchFilters, 1030 listSelectorConfigurations.objIdAttributeName, 1031 function(data){ 1032 let output = generateObjectsListHTML( 1033 data, 1034 listSelectorConfigurations.idAttributeName, 1035 listSelectorConfigurations.labelAttributeName, 1036 listSelectorConfigurations.researchResultsModalTitle, 1037 listSelectorConfigurations.modalListhasLink, 1038 listSelectorConfigurations.linkAttributeName, 1039 listSelectorConfigurations.objLinkClass, 1040 listSelectorConfigurations.objIdDataAttributeName 1041 ); 1042 var modalID = listSelectorConfigurations.portletNamespace+"previewModal"; 1043 createModal(modalID, listSelectorConfigurations.previewModalTitle, output); 1044 $('#'+modalID).modal('show'); 1045 if(listSelectorConfigurations.isDocuwareList){ 1046 addDowloadDocuwareDocumentEventListener(); 1047 } 1048 } 1049 ); 1050} 1051 1052function generateObjectsListHTML(data, idAttributeName, labelAttributeName, headerTitle, hasLink, linkAttributeName, objectLinkClass, objectIdDataAttributeName){ 1053 let output = ''; 1054 try{ 1055 if(isStringValid(data)){ 1056 var jsonData = JSON.parse(data); 1057 var resultsCount = 0; var results = []; 1058 if (jsonData.hasOwnProperty('resultsCount')) { resultsCount = jsonData.resultsCount; } 1059 if (jsonData.hasOwnProperty('results')) { results = jsonData.results; } 1060 output += "<strong>"+headerTitle+": "+resultsCount+"</strong>"; 1061 output += "<ul style='position: relative;'>"; 1062 if (typeof results === 'string' || results instanceof String){ 1063 try{ results = JSON.parse(results); } 1064 catch (e) {} 1065 } 1066 if(!listSelectorConfigurations.isManualSearch && listSelectorConfigurations.orderAutoSearchListByAttributeId!=""){ 1067 results = sortArrayByObjectProperty(results, listSelectorConfigurations.orderAutoSearchListByAttributeId); 1068 }
1069 results.forEach(result => { 1070 var id = ""; var label = ""; 1071 if (result.hasOwnProperty(idAttributeName)) { id = result[idAttributeName]; } 1072 if (result.hasOwnProperty(labelAttributeName)) { label = result[labelAttributeName]; } 1073 var link = "#"; 1074 if (result.hasOwnProperty(linkAttributeName)) { link = result[linkAttributeName]; } 1075 if(isStringValid(id) && isStringValid(label)){ 1076 var escTitle = escapeHtml(label); 1077 output += "<li id='obj-"+id+"'>"; 1078 if(hasLink){ 1079 output += "<a href='"+link+"' data-"+objectIdDataAttributeName+"='"+id+"' class='"+objectLinkClass+"'>"+label+" ["+id+"]</a>"; 1080 } 1081 else{ 1082 output += label; 1083 } 1084 output += "</li>"; 1085 } 1086 }); 1087 output += "</ul>"; 1088 } 1089 } 1090 catch(error){ logError(error); } 1091 return output; 1092} 1093 1094function updatefilterFieldsInput(portletNamespace, fieldselector, contentType, filterFieldsInputSelector, objIdAttributeName){ 1095 try{ 1096 var filterFieldsInput = document.getElementById(filterFieldsInputSelector); 1097 if(filterFieldsInput!=null){ 1098 var jsonFilterValues = getFieldsValues(portletNamespace, fieldselector, true, contentType, objIdAttributeName, false); 1099 var filtersVal = JSON.stringify(jsonFilterValues); 1100 filterFieldsInput.value = filtersVal; 1101 } 1102 } 1103 catch(error){ logError(error); } 1104} 1105 1106 1107 1108function convertLanguageForDocuware(lang){ 1109 let language = "Italiano"; 1110 try{ 1111 switch(lang){ 1112 case "it": language = "Italiano"; break; 1113 case "en": language = "Inglese"; break; 1114 case "de": language = "Tedesco"; break; 1115 case "fr": language = "Francese"; break; 1116 } 1117 } 1118 catch(error){ logError(error); } 1119 return language; 1120} 1121 1122 1123/* ---------------------------------------------------------- */ 1124 1125 1126 1127 1128/* Inizialize sort lists (with class 'sort-list-init') */ 1129/* ---------------------------------------------------------- */ 1130function initSortLists(){ 1131 try{ 1132 let slSelector = ".sort-list-init" 1133 var sortLists = document.querySelectorAll(slSelector); 1134 if(sortLists!=null){ 1135 sortLists.forEach(sortList => { 1136 slist(sortList); 1137 }); 1138 } 1139 } 1140 catch(error){ logError(error); } 1141} 1142 1143function slist (target, callBackFunction) { 1144 try{ 1145 //target.classList.add("slist"); 1146 let items = target.getElementsByTagName("li"), current = null; 1147 for (let i of items) { 1148 i.draggable = true; 1149 //ondragstart 1150 i.ondragstart = e => { 1151 current = i; 1152 for (let it of items) { 1153 if (it != current) { it.classList.add("hint"); } 1154 } 1155 }; 1156 //ondragenter 1157 i.ondragenter = e => { 1158 if (i != current) { i.classList.add("active"); } 1159 }; 1160 //ondragleave 1161 i.ondragleave = () => i.classList.remove("active"); 1162 //ondragend 1163 i.ondragend = () => { for (let it of items) { 1164 it.classList.remove("hint"); 1165 it.classList.remove("active"); 1166 }}; 1167 // ondragover 1168 i.ondragover = e => e.preventDefault(); 1169 //ondrop - DO SOMETHING 1170 i.ondrop = e => { 1171 e.preventDefault(); 1172 if (i != current) { 1173 let currentpos = 0, droppedpos = 0; 1174 for (let it=0; it<items.length; it++) { 1175 if (current == items[it]) { currentpos = it; } 1176 if (i == items[it]) { droppedpos = it; } 1177 } 1178 if (currentpos < droppedpos) { 1179 i.parentNode.insertBefore(current, i.nextSibling); 1180 } else { 1181 i.parentNode.insertBefore(current, i); 1182 } 1183 if(callBackFunction!=null){ 1184 callBackFunction(i); 1185 } 1186 } 1187 }; 1188 } 1189 } 1190 catch(error){ logError(error); } 1191}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.