From 8c55a7cf85ef139fd17a51716ec0f15e8f50ee77 Mon Sep 17 00:00:00 2001
From: ghuhs <ghuhs@physik.hu-berlin.de>
Date: Thu, 29 Aug 2019 09:17:27 +0200
Subject: [PATCH] changed "structure type" to multiselect field

---
 client/bundle.js                           | 45 ++++++++++++----------
 client/src/search-mod/Autocomplete.view.js |  8 ----
 client/src/search-mod/FilterPanel.view.js  | 37 ++++++++++++------
 3 files changed, 50 insertions(+), 40 deletions(-)

diff --git a/client/bundle.js b/client/bundle.js
index fd7d661f..963e842a 100644
--- a/client/bundle.js
+++ b/client/bundle.js
@@ -3529,14 +3529,6 @@ class AutocompleteMultiselectList {
       this.element.value = '';
       this._closeAllLists();
     });
-
-  //   document.addEventListener("keydown", (e) => {
-  //     if (e.keyCode == 27) { // ESC key
-  //       this.element.value = '';
-  //       this._closeAllLists();
-  //     }
-  //   });
-
   }
 
   getSelected() {
@@ -10261,12 +10253,17 @@ class FilterPanel {
 
           </div>
 
-          <div class="filter-quantity-box">
+<!--          <div class="filter-quantity-box">
             <div class="field-title"><span info-sys-data="structure-type">Structure type</span></div>
             <select class="structure-type-field" style="max-width: 174px">
               <option ></option>
             </select>
           </div>
+-->
+          <div class="filter-quantity-box">
+            <div class="field-title" id="strukturbericht-title"><span info-sys-data="structure-type">Structure type</span></div>
+            <div class="structuretype-placeholder"></div>
+          </div>
 
           <div class="filter-quantity-box">
             <div class="field-title" id="strukturbericht-title">Strukturbericht designation</div>
@@ -10327,11 +10324,20 @@ class FilterPanel {
 
     `;
 
+    this.structuretypeField = new AutocompleteMultiselectList("structuretype");
+    this.structuretypeField.element.placeholder = "Search and select options";
+    this.structuretypeField.element.classList.add('textfield-filter');
+    let structuretypePlaceholder = this.element.querySelector('.structuretype-placeholder');
+    this.structuretypeField.replaceElement(structuretypePlaceholder);
+
+    let r1 = util.serverReq(util.getSuggestionURL('structure_type'), (e) => {
+      let names = JSON.parse(r1.response).structure_type;
+      this.structuretypeField.autocomplete(names);
+    });
+
     this.strukturberichtField = new AutocompleteMultiselectList("strukturbericht");
     this.strukturberichtField.element.placeholder = "Search and select options";
     this.strukturberichtField.element.classList.add('textfield-filter');
-    /* the following class is needed by addFilterFromTextField */
-    this.strukturberichtField.element.classList.add('strukturbericht-designation-field');
     let strukturberichtPlaceholder = this.element.querySelector('.strukturbericht-placeholder');
     this.strukturberichtField.replaceElement(strukturberichtPlaceholder);
 
@@ -10340,12 +10346,12 @@ class FilterPanel {
       this.strukturberichtField.autocomplete(names);
     });
 
-    let structureTypeSelect  = this.element.querySelector('.structure-type-field');
-    let r1 = util.serverReq(util.getSuggestionURL('structure_type'), () => {
-      JSON.parse(r1.response).structure_type.forEach( structureType => {
-        structureTypeSelect.innerHTML += '<option>'+structureType+'</option>';
-      });
-    });
+    // let structureTypeSelect  = this.element.querySelector('.structure-type-field');
+    // let r1 = util.serverReq(util.getSuggestionURL('structure_type'), () => {
+    //   JSON.parse(r1.response).structure_type.forEach( structureType => {
+    //     structureTypeSelect.innerHTML += '<option>'+structureType+'</option>';
+    //   });
+    // });
 
     InfoSys.addToInfoSystem(this.element);
 
@@ -10364,11 +10370,10 @@ class FilterPanel {
     this.addFilterFromCheckboxes(filterMap,'system-type');
     this.addFilterFromCheckboxes(filterMap, 'crystal-system');
     this.addSpaceGroupFilter(filterMap);//this.addFilterFromTextField(filterMap, 'space-group-number');
-//    this.addFilterFromTextField(filterMap, 'strukturbericht-designation');
+    this.addFilterFromMultiSelect(filterMap, 'structure_type', this.structuretypeField);
     this.addFilterFromMultiSelect(filterMap, 'strukturbericht_designation', this.strukturberichtField);
-    this.addFilterFromDropdownList(filterMap, 'structure-type');
-    this.addRangeFilter(filterMap, 'mass-density');
 
+    this.addRangeFilter(filterMap, 'mass-density');
     /* this.addRangeFilter(filterMap, 'band-gap');
     this.addBandgapTypeFilter(filterMap); */
 
diff --git a/client/src/search-mod/Autocomplete.view.js b/client/src/search-mod/Autocomplete.view.js
index 8771d653..83356ebe 100644
--- a/client/src/search-mod/Autocomplete.view.js
+++ b/client/src/search-mod/Autocomplete.view.js
@@ -289,14 +289,6 @@ class AutocompleteMultiselectList {
       this.element.value = '';
       this._closeAllLists();
     });
-
-  //   document.addEventListener("keydown", (e) => {
-  //     if (e.keyCode == 27) { // ESC key
-  //       this.element.value = '';
-  //       this._closeAllLists();
-  //     }
-  //   });
-
   }
 
   getSelected() {
diff --git a/client/src/search-mod/FilterPanel.view.js b/client/src/search-mod/FilterPanel.view.js
index 2aa9faf7..1a5b15c7 100644
--- a/client/src/search-mod/FilterPanel.view.js
+++ b/client/src/search-mod/FilterPanel.view.js
@@ -75,12 +75,17 @@ class FilterPanel {
 
           </div>
 
-          <div class="filter-quantity-box">
+<!--          <div class="filter-quantity-box">
             <div class="field-title"><span info-sys-data="structure-type">Structure type</span></div>
             <select class="structure-type-field" style="max-width: 174px">
               <option ></option>
             </select>
           </div>
+-->
+          <div class="filter-quantity-box">
+            <div class="field-title" id="strukturbericht-title"><span info-sys-data="structure-type">Structure type</span></div>
+            <div class="structuretype-placeholder"></div>
+          </div>
 
           <div class="filter-quantity-box">
             <div class="field-title" id="strukturbericht-title">Strukturbericht designation</div>
@@ -141,11 +146,20 @@ class FilterPanel {
 
     `;
 
+    this.structuretypeField = new AutocompleteMultiselectList("structuretype");
+    this.structuretypeField.element.placeholder = "Search and select options";
+    this.structuretypeField.element.classList.add('textfield-filter');
+    let structuretypePlaceholder = this.element.querySelector('.structuretype-placeholder');
+    this.structuretypeField.replaceElement(structuretypePlaceholder);
+
+    let r1 = util.serverReq(util.getSuggestionURL('structure_type'), (e) => {
+      let names = JSON.parse(r1.response).structure_type;
+      this.structuretypeField.autocomplete(names);
+    });
+
     this.strukturberichtField = new AutocompleteMultiselectList("strukturbericht");
     this.strukturberichtField.element.placeholder = "Search and select options";
     this.strukturberichtField.element.classList.add('textfield-filter');
-    /* the following class is needed by addFilterFromTextField */
-    this.strukturberichtField.element.classList.add('strukturbericht-designation-field');
     let strukturberichtPlaceholder = this.element.querySelector('.strukturbericht-placeholder');
     this.strukturberichtField.replaceElement(strukturberichtPlaceholder);
 
@@ -154,12 +168,12 @@ class FilterPanel {
       this.strukturberichtField.autocomplete(names);
     });
 
-    let structureTypeSelect  = this.element.querySelector('.structure-type-field');
-    let r1 = util.serverReq(util.getSuggestionURL('structure_type'), () => {
-      JSON.parse(r1.response).structure_type.forEach( structureType => {
-        structureTypeSelect.innerHTML += '<option>'+structureType+'</option>';
-      });
-    });
+    // let structureTypeSelect  = this.element.querySelector('.structure-type-field');
+    // let r1 = util.serverReq(util.getSuggestionURL('structure_type'), () => {
+    //   JSON.parse(r1.response).structure_type.forEach( structureType => {
+    //     structureTypeSelect.innerHTML += '<option>'+structureType+'</option>';
+    //   });
+    // });
 
     InfoSys.addToInfoSystem(this.element);
 
@@ -178,11 +192,10 @@ class FilterPanel {
     this.addFilterFromCheckboxes(filterMap,'system-type');
     this.addFilterFromCheckboxes(filterMap, 'crystal-system');
     this.addSpaceGroupFilter(filterMap);//this.addFilterFromTextField(filterMap, 'space-group-number');
-//    this.addFilterFromTextField(filterMap, 'strukturbericht-designation');
+    this.addFilterFromMultiSelect(filterMap, 'structure_type', this.structuretypeField);
     this.addFilterFromMultiSelect(filterMap, 'strukturbericht_designation', this.strukturberichtField);
-    this.addFilterFromDropdownList(filterMap, 'structure-type');
-    this.addRangeFilter(filterMap, 'mass-density');
 
+    this.addRangeFilter(filterMap, 'mass-density');
     /* this.addRangeFilter(filterMap, 'band-gap');
     this.addBandgapTypeFilter(filterMap); */
 
-- 
GitLab