|  | @@ -14,13 +14,13 @@
 | 
	
		
			
				|  |  |        >
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <template #top>
 | 
	
		
			
				|  |  | -          <div>
 | 
	
		
			
				|  |  | +          <div class="q-mr-md">
 | 
	
		
			
				|  |  |              <q-tooltip anchor="top end" self="center middle" >
 | 
	
		
			
				|  |  | -              Using a copy of RefractiveIndex.info. Analytical models are not implemented.
 | 
	
		
			
				|  |  | +              Using a copy of RefractiveIndex.info website.<br> Analytical models are not implemented.
 | 
	
		
			
				|  |  |              </q-tooltip>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              <q-icon size='sm' name="o_info" />
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |            <q-input v-model="filter" dense  debounce="300" color="primary" >
 | 
	
		
			
				|  |  |              <template #append>
 | 
	
		
			
				|  |  |                <q-icon name="search" />
 | 
	
	
		
			
				|  | @@ -28,36 +28,56 @@
 | 
	
		
			
				|  |  |              <template v-if="filter" #after>
 | 
	
		
			
				|  |  |                <q-btn  flat round dense icon="cancel" @click="filter=''"/>
 | 
	
		
			
				|  |  |              </template>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |            </q-input>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |            <q-space />
 | 
	
		
			
				|  |  |          </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <template #header="props">
 | 
	
		
			
				|  |  |          <q-tr :props="props">
 | 
	
		
			
				|  |  |            <q-th auto-width />
 | 
	
		
			
				|  |  | -          <q-th class="text-left"> {{ props.cols[1].label }} </q-th>
 | 
	
		
			
				|  |  | -          <q-th class="text-left"> {{ props.cols[2].label }} </q-th>
 | 
	
		
			
				|  |  | -          <q-th class="text-left"> {{ props.cols[3].label }} </q-th>
 | 
	
		
			
				|  |  | +          <q-th auto-width class="text-left"> Material </q-th>
 | 
	
		
			
				|  |  | +          <q-th auto-width class="text-left"> Range </q-th>
 | 
	
		
			
				|  |  | +          <q-th class="text-left"> Details </q-th>
 | 
	
		
			
				|  |  |          </q-tr>
 | 
	
		
			
				|  |  |        </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <template #body="props">
 | 
	
		
			
				|  |  |          <q-tr :props="props">
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |            <q-td auto-width>
 | 
	
		
			
				|  |  |              <q-tooltip anchor="top end" self="center middle" >
 | 
	
		
			
				|  |  |                Add to simulation</q-tooltip>
 | 
	
		
			
				|  |  | -            <q-btn size="sm" color="accent" round dense icon="add" @click="addToSimulation(props.row.id)"/>
 | 
	
		
			
				|  |  | -<!--            <q-btn size="sm" color="accent" round dense @click="props.expand = !props.expand" :icon="props.expand ? 'remove' : 'add'" />-->
 | 
	
		
			
				|  |  | +            <q-btn size="sm" color="primary" round dense icon="add" @click="addToSimulation(props.row.id)"/>
 | 
	
		
			
				|  |  |            </q-td>
 | 
	
		
			
				|  |  | -          <q-td auto-width> {{ props.row.bookDivider }} </q-td>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |            <q-td auto-width>
 | 
	
		
			
				|  |  |              <!-- eslint-disable-next-line vue/no-v-html -->
 | 
	
		
			
				|  |  |              <div v-html="props.row.bookName"/>
 | 
	
		
			
				|  |  |              <q-tooltip anchor="top middle" self="center middle" >
 | 
	
		
			
				|  |  |                {{ props.row.shelfDivider }}</q-tooltip>
 | 
	
		
			
				|  |  |            </q-td>
 | 
	
		
			
				|  |  | -          <q-td> {{ props.row.pageName }} </q-td>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <q-td auto-width>
 | 
	
		
			
				|  |  | +            <q-tooltip
 | 
	
		
			
				|  |  | +                v-if="props.row.spectrumRangeStart>=fromWavelengthStore/1000 ||
 | 
	
		
			
				|  |  | +                 props.row.spectrumRangeEnd<=toWavelengthStore/1000"
 | 
	
		
			
				|  |  | +                anchor="top middle" self="center middle"
 | 
	
		
			
				|  |  | +                class="bg-red">
 | 
	
		
			
				|  |  | +              Mismatch with spectrum simulation.
 | 
	
		
			
				|  |  | +            </q-tooltip>
 | 
	
		
			
				|  |  | +            <span :class="props.row.spectrumRangeStart>=fromWavelengthStore/1000?'text-red':'text-black'">
 | 
	
		
			
				|  |  | +              {{ props.row.spectrumRangeStart }}
 | 
	
		
			
				|  |  | +            </span>
 | 
	
		
			
				|  |  | +            <span v-if="props.row.spectrumRangeStart">-</span>
 | 
	
		
			
				|  |  | +            <span :class="props.row.spectrumRangeEnd<=toWavelengthStore/1000?'text-red':'text-black'">
 | 
	
		
			
				|  |  | +              {{ props.row.spectrumRangeEnd }}
 | 
	
		
			
				|  |  | +            </span>
 | 
	
		
			
				|  |  | +            <span v-if="props.row.spectrumRangeStart">mkm</span>
 | 
	
		
			
				|  |  | +          </q-td>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <q-td> {{ props.row.bookDivider}}<span v-if="props.row.bookDivider">; </span>{{props.row.pageName }} </q-td>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          </q-tr>
 | 
	
		
			
				|  |  |        </template>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -112,13 +132,15 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script lang="ts">
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  | -  // computed,
 | 
	
		
			
				|  |  | +  computed,
 | 
	
		
			
				|  |  |    defineComponent,
 | 
	
		
			
				|  |  | -    reactive,
 | 
	
		
			
				|  |  | -    ref
 | 
	
		
			
				|  |  | +  reactive,
 | 
	
		
			
				|  |  | +  ref
 | 
	
		
			
				|  |  |  } from 'vue'
 | 
	
		
			
				|  |  | -// import { useStore } from 'src/store'
 | 
	
		
			
				|  |  | +import { useStore } from 'src/store'
 | 
	
		
			
				|  |  |  import { load } from 'js-yaml'
 | 
	
		
			
				|  |  | +// import {fromUnits, isAlmostSame, toUnits} from "components/utils";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -126,19 +148,43 @@ export default defineComponent({
 | 
	
		
			
				|  |  |    components: {},
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    setup: function () {
 | 
	
		
			
				|  |  | -    // const $store = useStore()
 | 
	
		
			
				|  |  | +    const $store = useStore()
 | 
	
		
			
				|  |  |      const loading = ref(true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    const fromWavelengthStore = computed(()=>$store.state.simulationSetup.gui.fromWL)
 | 
	
		
			
				|  |  | +    const toWavelengthStore = computed(()=>$store.state.simulationSetup.gui.toWL)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      const columns = [
 | 
	
		
			
				|  |  |        // do not change the order without updating the template
 | 
	
		
			
				|  |  |        {name: 'id', label: '', field: 'id'},
 | 
	
		
			
				|  |  |        {name: 'bookDivider', label: 'State', field: 'bookDivider'},
 | 
	
		
			
				|  |  |        {name: 'bookName', label: 'Material', field: 'bookName'},
 | 
	
		
			
				|  |  | -      {name: 'pageName', label: 'Authors', field: 'pageName'},
 | 
	
		
			
				|  |  | +      {name: 'spectrumRangeStart', label: 'RangeStart', field: 'spectrumRangeStart'},
 | 
	
		
			
				|  |  | +      {name: 'spectrumRangeEnd', label: 'RangeEnd', field: 'spectrumRangeEnd'},
 | 
	
		
			
				|  |  | +      {name: 'pageName', label: 'Details', field: 'pageName'},
 | 
	
		
			
				|  |  |        {name: 'shelfDivider', label: 'Group', field: 'shelfDivider'},
 | 
	
		
			
				|  |  |        {name: 'pageData', label: 'file', field: 'pageData'},
 | 
	
		
			
				|  |  |      ]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    function GetRange(val:string) {
 | 
	
		
			
				|  |  | +      if (val.lastIndexOf('µm') == -1) return [val,'']
 | 
	
		
			
				|  |  | +      const rangeStartPosition = val.slice(0,val.lastIndexOf('µm')-1).lastIndexOf(' ')
 | 
	
		
			
				|  |  | +      const spectrumRange = val.slice(rangeStartPosition+1,val.lastIndexOf('µm')+2)
 | 
	
		
			
				|  |  | +      const newPageName = val.replace(spectrumRange,'')
 | 
	
		
			
				|  |  | +      const spectrumRangeStart = spectrumRange.slice(0, spectrumRange.lastIndexOf('-'))
 | 
	
		
			
				|  |  | +      const spectrumRangeEnd = spectrumRange.slice(spectrumRange.lastIndexOf('-')+1,
 | 
	
		
			
				|  |  | +          spectrumRange.lastIndexOf('µm')-1)
 | 
	
		
			
				|  |  | +      return [newPageName,spectrumRangeStart, spectrumRangeEnd]
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function splitBookName(val:string) {
 | 
	
		
			
				|  |  | +      if (val.lastIndexOf('(') == -1) return val
 | 
	
		
			
				|  |  | +      const splitPosition = val.lastIndexOf('(')
 | 
	
		
			
				|  |  | +      const mainPart = val.slice(0,splitPosition-1)
 | 
	
		
			
				|  |  | +      const otherPart = val.slice(splitPosition+1, val.length-1)
 | 
	
		
			
				|  |  | +      return mainPart+'<br><span style="font-size: 0.5em;">'+otherPart+'</span>'
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      async function GetPagesFromLib() { /* eslint-disable */
 | 
	
		
			
				|  |  |        let rows = []
 | 
	
		
			
				|  |  |        // lib has an irregular structure
 | 
	
	
		
			
				|  | @@ -151,36 +197,39 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          let bookName = ''
 | 
	
		
			
				|  |  |          for (const bookOrDivider of shelf.content) {
 | 
	
		
			
				|  |  |            if (bookOrDivider.DIVIDER) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              shelfDivider = bookOrDivider.DIVIDER
 | 
	
		
			
				|  |  |              continue
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |            } else if (bookOrDivider.name) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            bookName = bookOrDivider.name
 | 
	
		
			
				|  |  | +            bookName = splitBookName(bookOrDivider.name)
 | 
	
		
			
				|  |  |              let bookDivider = ''
 | 
	
		
			
				|  |  |              let pageName = ''
 | 
	
		
			
				|  |  |              let pageData = ''
 | 
	
		
			
				|  |  |              for (const pageOrDivider of bookOrDivider.content) {
 | 
	
		
			
				|  |  |                if (pageOrDivider.DIVIDER) {
 | 
	
		
			
				|  |  | -                bookDivider = pageOrDivider.DIVIDER
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                bookDivider = pageOrDivider.DIVIDER.replace('Experimental data:','').replace('Experimental data','')
 | 
	
		
			
				|  |  |                  continue
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                } else if (pageOrDivider.name) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  pageName = pageOrDivider.name
 | 
	
		
			
				|  |  |                  pageData = pageOrDivider.data
 | 
	
		
			
				|  |  |                  if (bookDivider.includes('Model') || bookDivider.includes('model')
 | 
	
		
			
				|  |  |                      || pageName.includes('Model') || pageName.includes('model')) continue
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                rows.push({ id: i,
 | 
	
		
			
				|  |  | -                  shelfDivider: shelfDivider, bookName: bookName,
 | 
	
		
			
				|  |  | -                  bookDivider: bookDivider, pageName: pageName, pageData: pageData
 | 
	
		
			
				|  |  | -                })
 | 
	
		
			
				|  |  | +                const pageNameSplit = GetRange(pageName)
 | 
	
		
			
				|  |  | +                rows.push({ id: i, shelfDivider: shelfDivider, bookName: bookName, bookDivider: bookDivider,
 | 
	
		
			
				|  |  | +                  pageName: pageNameSplit[0], spectrumRangeStart: pageNameSplit[1],
 | 
	
		
			
				|  |  | +                  spectrumRangeEnd: pageNameSplit[2], pageData: pageData })
 | 
	
		
			
				|  |  |                  i = i + 1
 | 
	
		
			
				|  |  | -                // console.log (shelfDivider, '==', bookName, '==',bookDivider, '==', pageName, '==', pageData)
 | 
	
		
			
				|  |  | -                // console.log (shelfDivider, '==', bookName, '==',bookDivider, '==', pageName, '==', pageData)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                } else {
 | 
	
		
			
				|  |  |                  console.log('###################### Unknown type in pageOrDivider', pageOrDivider)
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  |              console.log('###################### Unknown type in bookOrDivider', bookOrDivider)
 | 
	
		
			
				|  |  |            }
 | 
	
	
		
			
				|  | @@ -200,7 +249,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        loading.value = false
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // const activatedMaterials = computed(() => $store.state.guiRuntime.activatedMaterials)
 | 
	
		
			
				|  |  | +    const activatedMaterials = computed(() => $store.state.guiRuntime.activatedMaterials)
 | 
	
		
			
				|  |  |      // const columnsQ = computed(()=>{
 | 
	
		
			
				|  |  |      //   return [
 | 
	
		
			
				|  |  |      //     { name: 'name', label: '',  align: 'left', field: 'name', headerStyle:''},
 | 
	
	
		
			
				|  | @@ -213,6 +262,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const filter = ref('')
 | 
	
		
			
				|  |  |      return {columns, rows, loading, filter,
 | 
	
		
			
				|  |  | +      fromWavelengthStore, toWavelengthStore,
 | 
	
		
			
				|  |  |        addToSimulation(val:number) {
 | 
	
		
			
				|  |  |          console.log(rows[val-1])
 | 
	
		
			
				|  |  |      }}
 |