Skip to content
Snippets Groups Projects
Select Git revision
  • ee5c4a79923c9ae21b555a389d98d535eca5a17e
  • master default protected
  • dev-lkugler
  • teaching-2024
  • old_config_2023-05 protected
  • v2025.2
  • v2024.6
  • v2024.2.20
8 results

prep_IC_prior.py

Blame
  • App.vue 41.61 KiB
    <template>
      <div id="app">
        <v-app>
          <v-container justify-center grid-list-lg>
            <v-layout column>
              <v-flex xs4>
                <v-alert
                  v-for="(alert, i) in alerts"
                  :type="(alert.type === 'danger' ? 'error' : alert.type)"
                  :value="true"
                  transition="slide-y-transition"
                  :key="i"
                >
                  <v-layout row>
                    <v-flex class="pa-3">{{alert.msg}}</v-flex>
                    <v-spacer></v-spacer>
                    <v-btn icon @click.native="dismiss(alert)">
                      <v-icon>close</v-icon>
                    </v-btn>
                  </v-layout>
                </v-alert>
              </v-flex>
    
              <v-layout row>
                <v-flex xs3 text-xs-left>
                  <router-link :to="'/'">
                    <img src="./assets/Uni_Logo_2016.png" class="logo" alt="logo" />
                  </router-link>
                </v-flex>
    
                <template v-if="signedin">
                  <v-flex xs3>
                    <h3 class="font-weight-light pt-4">Logged in</h3>
                    <span
                      v-if="signedin"
                      class="subheading displayname grey--text text--lighten-1"
                    >{{ user.firstname }} {{ user.lastname }}</span>
                  </v-flex>
                  <v-flex xs1>
                    <v-btn
                      raised
                      single-line
                      color="primary lighten-2"
                      class="mt-3"
                      @click="logout()"
                    >Logout</v-btn>
                  </v-flex>
                </template>
                <template v-else>
                  <v-flex xs2>
                    <v-text-field v-model="credentials.username" :label="'username'"></v-text-field>
                  </v-flex>
                  <v-flex xs2>
                    <v-text-field
                      v-model="credentials.password"
                      :label="'password'"
                      :append-icon="psvis ? 'visibility' : 'visibility_off'"
                      @click:append="toggleVisibility"
                      :type="psvis ? 'password' : 'text'"
                    ></v-text-field>
                  </v-flex>
                  <v-flex xs1>
                    <v-btn
                      raised
                      single-line
                      color="primary lighten-2"
                      class="mt-3"
                      @click="login()"
                    >Login</v-btn>
                  </v-flex>
                </template>
                <v-flex offset-xs2 xs2>
                  <v-select
                    v-model="lang"
                    :items="languages"
                    :label="$t('Language')"
                    @change="$i18n.locale=$event"
                    prepend-icon="language"
                    single-line
                  ></v-select>
                </v-flex>
                <v-flex xs1 class="mt-4">v {{version}}</v-flex>
              </v-layout>
    
              <v-tabs
                v-model="window"
                slot="extension"
                slider-color="blue darken-4"
                color="light-green lighten-3"
              >
                <v-tab ripple>{{ $t('Submit') }}</v-tab>
                <v-tab ripple>{{ $t('Display') }}</v-tab>
                <v-tab ripple>{{ $t('Edit') }}</v-tab>
                <v-tab ripple>{{ $t('Search') }}</v-tab>
              </v-tabs>
    
              <v-layout row>
                <v-flex>
                  <v-window v-model="window">
                    <v-window-item>
                      <ph-submit
                        :form="form"
                        v-on:object-created="objectCreated($event)"
                        v-on:load-form="form = $event"
                        v-on:form-input-p-select="handleSelect($event)"
                        v-on:add-phaidrasubject-section="addPhaidrasubjectSection($event)"
                      ></ph-submit>
                    </v-window-item>
                    <v-window-item>
                      <v-flex>
                        <v-card>
                          <v-toolbar flat>
                            <v-toolbar-title>{{$t('Display')}}</v-toolbar-title>
                            <v-divider class="mx-3" inset vertical></v-divider>
                            <v-text-field v-model="pid" :placeholder="pid"></v-text-field>
                            <v-spacer></v-spacer>
    
                            <v-btn
                              raised
                              single-line
                              class="right"
                              color="primary lighten-2"
                              @click="getPid();loadDisplay()"
                            >Load</v-btn>
                          </v-toolbar>
                          <v-card-text>
                            <v-layout row>
                            members {{fullmembers}}
                              <ph-d-jsonld :form="form"  :jsonld="displayjsonld" :pid="pid"></ph-d-jsonld>
                            </v-layout>
                             <v-toolbar v-if="members.length>0" dense flat>
                  
                    <v-toolbar-title class="font-weight-light">File Members</v-toolbar-title>
            
                </v-toolbar>
             
     <v-layout row>
                              
                                <v-layout v-for="(mpid,order) in members">
    
       <v-flex xs4 class="subheading">
                        <a :href="'https://' + instance.baseurl +'/'+mpid.pid" target="_blank">{{'https://' + instance.baseurl +'/'+mpid.pid}}</a>
                      
                      
                      </v-flex>
      
     <v-flex xs4>
            <p-img                         
            
             :src="'https://' + instance.baseurl + '/preview/' + mpid.pid + '///120'"
                              class="elevation-1"
                            >
                              <v-layout slot="placeholder" fill-height align-center justify-center ma-0>
                                <v-progress-circular indeterminate color="grey lighten-5"></v-progress-circular>
                              </v-layout>
                            </p-img>
     </v-flex>
     
                       
       </v-layout>
     
                            </v-layout>
    
                          </v-card-text>
                        </v-card>
                      </v-flex>
                    </v-window-item>
                    <v-window-item>
                      <v-flex>
                        <v-card>
                          <v-toolbar flat>
                            <v-toolbar-title>{{$t('Edit')}}</v-toolbar-title>
                            <v-divider class="mx-3" inset vertical></v-divider>
                            <v-text-field v-model="pid" :placeholder="pid"></v-text-field>
                            <v-spacer></v-spacer>
                            <v-btn
                              raised
                              single-line
                              class="right"
                              color="primary lighten-2"
                              @click="loadEdit()"
                            >Load</v-btn>
                          </v-toolbar>
                          <v-card-text>
                          
                          </v-card-text>
                        </v-card>
                      </v-flex>
                    </v-window-item>
    
                    <v-window-item>
                      <v-flex>
                        <v-card>
                          <v-toolbar flat>
                            <v-toolbar-title>{{ $t('Search') }}</v-toolbar-title>
                            <v-divider class="mx-3" inset vertical></v-divider>
                            <v-text-field
                              :placeholder="'Collection, e.g. ' + sampleCollection"
                              v-model="collection"
                            ></v-text-field>
                            <v-spacer></v-spacer>
                            <v-btn
                              raised
                              single-line
                              class="right"
                              color="primary lighten-2"
                              @click="loadSearch()"
                            >Load Collection</v-btn>
                          </v-toolbar>
                          <v-card-text>
                            <p-search :collection="collection"></p-search>
                          </v-card-text>
                        </v-card>
                      </v-flex>
                    </v-window-item>
                  </v-window>
                </v-flex>
              </v-layout>
            </v-layout>
          </v-container>
        </v-app>
      </div>
    </template>
    
    <script>
    import Vue from "vue";
    import qs from "qs";
    import PIForm from "@/components/input/phaidra_inputs/PIForm";
    import PhSubmit from "@/components/input/PhSubmit";
    import PhDJsonld from "@/components/display/pharma_display/PhDJsonld";
    import PMDelete from "@/components/management/PMDelete";
    import PMSort from "@/components/management/PMSort";
    import PMRights from "@/components/management/PMRights";
    import PMRelationships from "@/components/management/PMRelationships";
    import PMFiles from "@/components/management/PMFiles";
    import PSearch from "@/components/search/PSearch";
    import { version } from "../package.json";
    import fields from "@/utils/fields";
    import jsonLd from "@/utils/json-ld";
    import PImg from "@/components/utils/PImg";
    import "@/compiled-icons/univie-sprache";
    import "@/compiled-icons/material-social-person";
    import "@/compiled-icons/material-navigation-menu";
    
    export default {
      name: "app",
      components: {
        PhSubmit,
        PhDJsonld,
        PSearch,
        PMDelete,
        PMSort,
        PMRights,
        PMRelationships,
        PMFiles,
        PIForm,PImg
      },
      computed: {
        loadedcmodel: function() {
          return "cmodel" in this.piddoc ? this.piddoc.cmodel : "unknown";
        },
        signedin: function() {
          return this.$store.state.user.token;
        },
        alerts: function() {
          return this.$store.state.alerts.alerts;
        },
        vocabularies: function() {
          return this.$store.state.vocabulary.vocabularies;
        },
        instance: function() {
          return this.$store.state.settings.instance;
        },
        user() {
          return this.$store.state.user;
        },
        settings() {
          return this.$store.state.settings;
        },
        user() {
          return this.$store.state.user;
        }
      },
      data() {
        return {
          window: 0,
          lang: "eng",
          languages: [
            { text: "english", value: "eng" },
            { text: "deutsch", value: "deu" }
          ],
          displayjsonld: {},
          editform: {},
          form: {
            sections: []
          },
          members: [],
    fullmembers:[],
          pid: "o:589027",
          piddoc: {},
          collection: "",
          sampleCollection: "",
          solrbaseurl: "https://app01.cc.univie.ac.at:8983/solr/phaidra_sandbox",
          phaidrabaseurl: "phaidra-sandbox.univie.ac.at",
          trackerbaseurl: "www.univie.ac.at/phaidra-stat/piwik",
          siteid: 19,
          apibaseurl: "https://services.phaidra-sandbox.univie.ac.at/api",
          credentials: {
            username: "",
            password: ""
          },
          version: version,
          contentmodel: "https://pid.phaidra.org/vocabulary/8MY0-BQDQ",
    
          psvis: true
        };
      },
      methods: {
        getPid: function() {
          var newpid = this.pid.replace(/\s+/g, "");
          this.pid = newpid;
        },
        getResourceTypeFromMimeType: function(mime) {
          switch (mime) {
            case "image/jpeg":
            case "image/tiff":
            case "image/gif":
            case "image/png":
            case "image/x-ms-bmp":
              // picture
              return "https://pid.phaidra.org/vocabulary/44TN-P1S0";
    
            case "audio/wav":
            case "audio/mpeg":
            case "audio/flac":
            case "audio/ogg":
              // audio
              return "https://pid.phaidra.org/vocabulary/8YB5-1M0J";
    
            case "application/pdf":
              // document
              return "https://pid.phaidra.org/vocabulary/69ZZ-2KGX";
    
            case "video/mpeg":
            case "video/avi":
            case "video/mp4":
            case "video/quicktime":
            case "video/x-matroska":
              // video
              return "https://pid.phaidra.org/vocabulary/B0Y6-GYT8";
    
            // eg application/x-iso9660-image
            default:
              // data
              return "https://pid.phaidra.org/vocabulary/7AVS-Y482";
          }
        },
        handleSelect: function(val) {
          var i;
          var j;
          var k;
          if (val.predicate === "ebucore:hasMimeType") {
            for (i = 0; i < this.form.sections.length; i++) {
              if (this.form.sections[i].fields) {
                var mime;
                for (j = 0; j < this.form.sections[i].fields.length; j++) {
                  if (
                    this.form.sections[i].fields[j].predicate ===
                    "ebucore:hasMimeType"
                  ) {
                    mime = this.form.sections[i].fields[j].value;
                  }
                }
                if (mime) {
                  var resourcetype = this.getResourceTypeFromMimeType(mime);
                  for (j = 0; j < this.form.sections[i].fields.length; j++) {
                    if (
                      this.form.sections[i].fields[j].predicate === "dcterms:type"
                    ) {
                      var rt = this.form.sections[i].fields[j];
                      rt.value = resourcetype;
                      var preflabels;
                      for (
                        k = 0;
                        k < this.vocabularies["resourcetype"].terms.length;
                        k++
                      ) {
                        if (
                          this.vocabularies["resourcetype"].terms[k]["@id"] ===
                          rt.value
                        ) {
                          preflabels = this.vocabularies["resourcetype"].terms[k][
                            "skos:prefLabel"
                          ];
                        }
                      }
                      rt["skos:prefLabel"] = [];
                      Object.entries(preflabels).forEach(([key, value]) => {
                        rt["skos:prefLabel"].push({
                          "@value": value,
                          "@language": key
                        });
                      });
                    }
                  }
                  this.form.sections.splice(i, 1, this.form.sections[i]);
                }
              }
            }
          }
        },
        addPhaidrasubjectSection: function(afterSection) {
          let s = {
            title: "Subject",
            type: "phaidra:Subject",
            id: this.form.sections.length + 1,
            removable: true,
            multiplicable: true,
            fields: []
          };
          this.form.sections.splice(
            this.form.sections.indexOf(afterSection) + 1,
            0,
            s
          );
        },
        loadManagement: function(pid) {
          this.loadMembers(pid);
          this.loadDoc(pid);
        },
        loadDoc: function(pid) {
          var self = this;
    
          this.members = [];
    
          var params = {
            q: 'pid:"' + pid + '"',
            defType: "edismax",
            wt: "json",
            qf: "pid^5"
          };
    
          var query = qs.stringify(params, {
            encodeValuesOnly: true,
            indices: false
          });
          var url = self.instance.solr + "/select?" + query;
          var promise = fetch(url, {
            method: "GET",
            mode: "cors"
          })
            .then(function(response) {
              return response.json();
            })
            .then(function(json) {
              if (json.response.numFound > 0) {
                self.piddoc = json.response.docs[0];
              } else {
                self.piddoc = {};
              }
            })
            .catch(function(error) {
              console.log(error); // eslint-disable-line no-console
            });
    
          return promise;
        },
        getMembers: function(pid) {
          this.members = [];
          var self = this;
          var url =
            self.$store.state.settings.instance.api +
            "/object/" +
            pid +
            "/members/order";
          var promise = fetch(url, {
            method: "GET",
            mode: "cors"
          })
            .then(function(response) {
              return response.json();
            })
            .then(function(json) {
              if (json.metadata["members"]) {
                return json.metadata["members"];
              }
            })
            .catch(function(error) {
              console.log(error); // eslint-disable-line no-console
            });
          return promise;
        },
        loadMembers: function(pid) {
          var self = this;
    
          this.members = [];
    
          var params = {
            q: 'ismemberof:"' + pid + '"',
            defType: "edismax",
            wt: "json",
            qf: "ismemberof^5",
            fl: "pid,cmodel,dc_title,created",
            sort: "pos_in_" + pid.replace(":", "_") + " asc"
          };
    
          var query = qs.stringify(params, {
            encodeValuesOnly: true,
            indices: false
          });
          var url = self.instance.solr + "/select?" + query;
          var promise = fetch(url, {
            method: "GET",
            mode: "cors"
          })
            .then(function(response) {
              return response.json();
              console.log("in loadMembers response", response.json())
            })
            .then(function(json) {
              if (json.response.numFound > 0) {
                self.members = json.response.docs;
              } else {
                self.members = [];
              }
            })
            .catch(function(error) {
              console.log(error); // eslint-disable-line no-console
            });
    
          return promise;
        },
        loadMetadata: function(pid) {
          this.loadedMetadata = [];
          var self = this;
          var url =
            self.$store.state.settings.instance.api +
            "/object/" +
            pid +
            "/metadata?mode=resolved";
          var promise = fetch(url, {
            method: "GET",
            mode: "cors"
          })
            .then(function(response) {
              return response.json();
            })
            .then(function(json) {
              if (json.metadata["JSON-LD"]) {
                //console.log("load metadata returned", json.metadata["JSON-LD"])
                return json.metadata["JSON-LD"];
              }
            })
            .catch(function(error) {
              console.log(error); // eslint-disable-line no-console
            });
          return promise;
        },
        loadDisplay: function() {
          this.displayjsonld = {};
    
          let self = this;
    
          this.loadMetadata(self.pid).then(function(jsonld) {
            self.displayjsonld = jsonld;
          });
          this.getMembers(self.pid).then(function(jsonmembers) {
            self.members = jsonmembers;
    
          });
          this.loadMembers(self.pid).then(function(jsonfullmembers) {
            self.fullmembers = jsonfullmembers;
    
          });
        },
        loadEdit: function() {
          let self = this;
          this.loadMetadata(self.pid).then(function(jsonld) {
            self.editform = jsonLd.json2form(jsonld);
          });
        },
        loadSearch: function() {
          this.collection = "";
          this.collection = this.sampleCollection;
        },
        login: function() {
          this.$store.dispatch("login", this.credentials);
        },
        logout: function() {
          this.$store.dispatch("logout");
          document.cookie = "X-XSRF-TOKEN=";
        },
        objectCreated: function(event) {
          this.$store.commit("setAlerts", [
            { type: "success", msg: "Object " + event + " created" }
          ]);
        },
        objectSaved: function(event) {
          this.$store.commit("setAlerts", [
            { type: "success", msg: "Metadata for object " + event + " saved" }
          ]);
        },
        orderSaved: function(event) {
          this.$store.commit("setAlerts", [
            { type: "success", msg: "Order for object " + event + " saved" }
          ]);
        },
        objectDeleted: function() {
          this.$store.commit("setAlerts", [
            { type: "success", msg: "Object was successfully deleted." }
          ]);
        },
        toggleVisibility: function() {
          this.psvis = !this.psvis;
        },
        dismiss: function(alert) {
          this.$store.commit("clearAlert", alert);
        },
        getCookie: function(name) {
          var value = "; " + document.cookie;
          var parts = value.split("; " + name + "=");
          if (parts.length == 2) {
            var val = parts
              .pop()
              .split(";")
              .shift();
            return val === " " ? null : val;
          }
        },
        resetForm: function(cm) {
          if (cm === "https://pid.phaidra.org/vocabulary/8MY0-BQDQ") {
            this.createContainerForm();
          } else {
            this.createSimpleForm();
          }
        },
        createSimpleForm: function() {
          this.form = {
            sections: [
              {
                title: "General metadata",
                type: "digitalobject",
                id: "general",
                isActive: true,
                fields: []
              },
              {
                title: "File",
                id: "file",
                type: "member",
                isActive: true,
                fields: []
              },
              {
                title: "Content Classification",
                type: "pharma_content",
                id: "content",
                isActive: true,
                categories: [
                  {
                    id: "biologicalMacromolecule",
                    component: "uniprot",
                    description: "Biological macromolecules",
                    question: "Connection to biological macromolecules",
                    fields: []
                  },
                  {
                    id: "life",
                    component: "taxon_cell",
                    description: "Living organisms",
                    question: "Connection to living organisms",
                    fields: []
                  },
                  {
                    id: "assay",
                    component: "bioassay",
                    description: "Bioassay",
                    question: "Bioassay content",
                    fields: []
                  },
                  {
                    id: "disease",
                    component: "disease",
                    description: "Diseases",
                    question: "Connection to diseases",
                    fields: []
                  },
                  {
                    id: "anatomicalCategory",
                    component: "anatomy",
                    description: "Anatomical entity",
                    question: "Relation to anatomical entity",
                    fields: []
                  },
                  {
                    id: "goTerm",
                    component: "GO",
                    description: "GO terms",
                    question: "Matching Gene Ontology terms",
                    info:
                      "An ontology for describing the function of genes and gene products",
                    fields: []
                  },
                  {
                    id: "chebi",
                    component: "chebi",
                    question: "Associated CHEBI-terms",
                    description: "CHEBI-terms",
                    fields: []
                  },
                  {
                    id: "technique",
                    component: "technique",
                    question: "Used techniques",
                    description: "Techniques",
                    fields: []
                  },
                  {
                    id: "discipline",
                    component: "discipline",
                    question: "Involved disciplines",
                    description: "Disciplines",
                    fields: []
                  }
                ]
              },
              {
                title: "Submit",
                type: "digitalobject",
                id: "submit",
                isActive: true,
                fields: []
              }
            ]
          };
          var rt = fields.getField("resource-type");
    
          rt.value = this.contentmodel;
          this.form.sections[0].fields.push(rt);
          this.form.sections[0].fields.push(fields.getField("pharma-title"));
          this.form.sections[0].fields.push(fields.getField("abstract"));
          this.form.sections[0].fields.push(fields.getField("date"));
          this.form.sections[0].fields.push(fields.getField("contributors"));
          this.form.sections[0].fields.push(fields.getField("projects"));
          //this is moved to file section now
          //this.form.sections[0].fields.push(fields.getField("license"));
    
          this.form.sections[1].fields.push(fields.getField("file"));
    
          //push to biassay
    
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Assay-title")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Assay-protocol")
          );
          //this.form.sections[2].categories[2].fields.push(
          //  fields.getField("0-Assay-result")
          //);
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Bioassay-type")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Bioassay-category")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Assay-format")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Assay-design-method")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Computational-method")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Assay-screening-campaign-stage")
          );
    
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Organism")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Cellular-organism")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Viruses")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Viroids")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-cell-line")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Assay-target")
          );
    
          var uniprot_assayTarget = fields.getField("1-Uniprot");
          uniprot_assayTarget.label = "Assay Target Uniprot record";
    
          uniprot_assayTarget.type = "pharmaWien:uniprot_protein_assayTarget";
          uniprot_assayTarget.category = ["assayTarget"];
          var isoform_assayTarget = fields.getField("1-Isoform");
          isoform_assayTarget.label = "Assay Target Isoform";
    
          isoform_assayTarget.type = "pharmaWien:assayTarget_isoform_protein";
          isoform_assayTarget.category = ["assayTarget"];
          var seqAlt_assayTarget = fields.getField("1-Protein-sequence-alteration");
          seqAlt_assayTarget.label = "Assay Target Protein sequence alteration";
    
          seqAlt_assayTarget.type = "pharmaWien:assayTarget_seqAlt_protein";
          seqAlt_assayTarget.category = ["assayTarget"];
          var protMod_assayTarget = fields.getField("1-Protein-modification");
          protMod_assayTarget.label = "Assay Target Protein Modification";
    
          protMod_assayTarget.type = "pharmaWien:assayTarget_protMod_protein";
          protMod_assayTarget.category = ["assayTarget"];
          this.form.sections[2].categories[2].fields.push(uniprot_assayTarget);
          this.form.sections[2].categories[2].fields.push(isoform_assayTarget);
          this.form.sections[2].categories[2].fields.push(seqAlt_assayTarget);
          this.form.sections[2].categories[2].fields.push(protMod_assayTarget);
    
          var gene_assayTarget = fields.getField("1-Entrez-gene-ID");
          gene_assayTarget.label = "Assay Target Entrez Gene ID";
    
          gene_assayTarget.type = "pharmaWien:assayTarget_geneId";
          gene_assayTarget.category = ["assayTarget"];
          var geneMod_assayTarget = fields.getField("1-Gene-modification");
          geneMod_assayTarget.label = "Assay Target Gene Modification";
    
          geneMod_assayTarget.type = "pharmaWien:assayTarget_geneMod";
          geneMod_assayTarget.category = ["assayTarget"];
          this.form.sections[2].categories[2].fields.push(gene_assayTarget);
          this.form.sections[2].categories[2].fields.push(geneMod_assayTarget);
    
          var nacid_assayTarget = fields.getField("1-Nucleic-acid-type");
          nacid_assayTarget.label = "Assay Target Nucleic Acid Type";
    
          nacid_assayTarget.type = "pharmaWien:assayTarget_type_nucleicAcid";
          nacid_assayTarget.category = ["assayTarget"];
          nacid_assayTarget.description = "Nucleic Acid";
          var refSeq_assayTarget = fields.getField("1-RefSeq-accession");
          refSeq_assayTarget.label = "Assay Target RefSeq accession:";
    
          refSeq_assayTarget.type = "pharmaWien:assayTarget_refSeq_nucleicAcid";
          refSeq_assayTarget.category = ["assayTarget"];
          refSeq_assayTarget.description = "Nucleic Acid";
          this.form.sections[2].categories[2].fields.push(nacid_assayTarget);
          this.form.sections[2].categories[2].fields.push(refSeq_assayTarget);
          var PFAM_assayTarget = fields.getField("1-PFAM-accession");
          PFAM_assayTarget.label = "Assay Target PFAM accession number";
    
          PFAM_assayTarget.type = "pharmaWien:assayTarget_PFAM";
          PFAM_assayTarget.category = ["assayTarget"];
          this.form.sections[2].categories[2].fields.push(PFAM_assayTarget);
    
          var uniprotsub_assayTarget = fields.getField("1-Uniprot");
          uniprotsub_assayTarget.label =
            "Assay Target Protein Subunit Uniprot record";
    
          uniprotsub_assayTarget.type = "pharmaWien:assayTarget_uniprot_protSub";
          uniprotsub_assayTarget.category = ["assayTarget"];
          uniprotsub_assayTarget.description = "Protein Subunit";
          var isoformsub_assayTarget = fields.getField("1-Isoform");
          isoformsub_assayTarget.label = "Assay Target Protein Subunit Isoform";
    
          isoformsub_assayTarget.type = "pharmaWien:assayTarget_isoform_protSub";
          isoformsub_assayTarget.category = ["assayTarget"];
          isoformsub_assayTarget.description = "Protein Subunit";
          var seqAltsub_assayTarget = fields.getField(
            "1-Protein-sequence-alteration"
          );
          seqAltsub_assayTarget.label =
            "Assay Target Protein Subunit sequence alteration";
          seqAltsub_assayTarget.type = "pharmaWien:assayTarget_seqAlt_protSub";
          seqAltsub_assayTarget.category = ["assayTarget"];
          seqAltsub_assayTarget.description = "Protein Subunit";
          var protModsub_assayTarget = fields.getField("1-Protein-modification");
          protModsub_assayTarget.label =
            "Assay Target Protein Subunit modification";
          protModsub_assayTarget.type = "pharmaWien:assayTarget_protMod_protSub";
          protModsub_assayTarget.category = ["assayTarget"];
          protModsub_assayTarget.description = "Protein Subunit";
          this.form.sections[2].categories[2].fields.push(uniprotsub_assayTarget);
          this.form.sections[2].categories[2].fields.push(isoformsub_assayTarget);
          this.form.sections[2].categories[2].fields.push(seqAltsub_assayTarget);
          this.form.sections[2].categories[2].fields.push(protModsub_assayTarget);
          var protcomplex_assayTarget = fields.getField(
            "1-Complex-portal-accession"
          );
          protcomplex_assayTarget.label =
            "Assay Target Protein Complex-Portal Accession";
          protcomplex_assayTarget.type =
            "pharmaWien:assayTarget_portalAcc_protComplex";
          protcomplex_assayTarget.category = ["assayTarget"];
          this.form.sections[2].categories[2].fields.push(protcomplex_assayTarget);
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-carbohydrate")
          );
          var lipid_assayTarget = fields.getField("1-Lipid");
          lipid_assayTarget.label = "Assay Target Lipid";
          lipid_assayTarget.type = "pharmaWien:assayTarget_lipid";
    
          lipid_assayTarget.category = ["assayTarget"];
    
          this.form.sections[2].categories[2].fields.push(lipid_assayTarget);
    
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Small-molecule")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-Organism-assayTarget")
          );
    
          var cell_organism_assayTarget = fields.getField("0-Cellular-organism");
          //cell_organism_assayTarget.description = ["Cellular organism", "Organism"];
          cell_organism_assayTarget.label = "Assay Target Cellular Organism";
          cell_organism_assayTarget.type =
            "pharmaWien:assayTarget_cellular_organism";
          cell_organism_assayTarget.category = ["organismAssayTarget"];
          // cell_organism_assayTarget.topcategory = "assayTarget";
          cell_organism_assayTarget.visible = false;
          this.form.sections[2].categories[2].fields.push(
            cell_organism_assayTarget
          );
          var viruses_organism_assayTarget = fields.getField("0-Viruses");
          //viruses_organism_assayTarget.description = ["Viruses", "Organism"];
          viruses_organism_assayTarget.label = "Assay Target Viruses";
          viruses_organism_assayTarget.type =
            "pharmaWien:assayTarget_viruses_organism";
          // cell_organism_assayTarget.topcategory = "assayTarget";
          viruses_organism_assayTarget.category = ["organismAssayTarget"];
    
          viruses_organism_assayTarget.visible = false;
          this.form.sections[2].categories[2].fields.push(
            viruses_organism_assayTarget
          );
          var viroids_organism_assayTarget = fields.getField("0-Viroids");
          //viroids_organism_assayTarget.description = ["Viroids", "Organism"];
          viroids_organism_assayTarget.label = "Assay Target Viroids";
          viroids_organism_assayTarget.subjectType =
            "pharmaWien:assayTarget_viroids_organism";
          viroids_organism_assayTarget.category = ["organismAssayTarget"];
          // cell_organism_assayTarget.topcategory = "assayTarget";
          viroids_organism_assayTarget.visible = false;
          this.form.sections[2].categories[2].fields.push(
            viroids_organism_assayTarget
          );
          var cell_line_assayTarget = fields.getField("0-cell-line");
          cell_line_assayTarget.label = "Assay Target Cell line (cellosaurus)";
          cell_line_assayTarget.type = "pharmaWien:assayTarget_cellosaurus";
    
          cell_line_assayTarget.visible = false;
          cell_line_assayTarget.category = ["assayTarget"];
          this.form.sections[2].categories[2].fields.push(cell_line_assayTarget);
    
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-cellular-anatomical-entity")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-tissue")
          );
    
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-detection")
          );
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-detection_method")
          );
    
          this.form.sections[2].categories[2].fields.push(
            fields.getField("0-detection_instrument")
          );
    
          //push to biological macromolecule
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Biological-macromolecule")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Uniprot")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Isoform")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Protein-sequence-alteration")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Protein-modification")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Entrez-gene-ID")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Gene-modification")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Nucleic-acid-type")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-RefSeq-accession")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-PFAM-accession")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Uniprot-protein-subunit")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Isoform-protein-subunit")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Protein-sequence-alteration-protein-subunit")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Protein-modification-protein-subunit")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Complex-portal-accession")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Polysaccharide")
          );
          this.form.sections[2].categories[0].fields.push(
            fields.getField("1-Lipid")
          );
    
          //push to living organism
    
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-Life")
          );
          // this.form.sections[2].categories[1].fields.push(
          //   fields.getField("2-Living-organism")
          // );
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-Viruses")
          );
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-Viroids")
          );
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-cellular-organisms")
          );
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-otherSequences")
          );
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-unclassifiedSequences")
          );
    
          this.form.sections[2].categories[1].fields.push(
            fields.getField("2-cellosaurus")
          );
          //this.form.sections[2].categories[1].fields.push(
          //  fields.getField("2-cultured-cell")
          //);
          //push to diseases
          this.form.sections[2].categories[3].fields.push(
            fields.getField("3-Disease")
          );
          //push to anatomical entity
          this.form.sections[2].categories[4].fields.push(
            fields.getField("4-Anatomical-category")
          );
          this.form.sections[2].categories[4].fields.push(
            fields.getField("4-Anatomical-entity")
          );
          this.form.sections[2].categories[4].fields.push(
            fields.getField("4-Plant-anatomical-entity")
          );
          this.form.sections[2].categories[4].fields.push(
            fields.getField("4-Fungal-structure")
          );
          this.form.sections[2].categories[4].fields.push(
            fields.getField("4-Bacterial-structures")
          );
          //this.form.sections[2].categories[4].fields.push(
          //  fields.getField("4-Viral-structures")
          //);
          //push to go
          this.form.sections[2].categories[5].fields.push(
            fields.getField("5-Molecular-function")
          );
          this.form.sections[2].categories[5].fields.push(
            fields.getField("5-Biological-process")
          );
          this.form.sections[2].categories[5].fields.push(
            fields.getField("5-Cellular-component")
          );
          //push to chebi
    
          this.form.sections[2].categories[6].fields.push(
            fields.getField("6-Chemical-entities")
          );
          // this.form.sections[2].categories[6].fields.push(
          //   fields.getField("6-Atom")
          // );
          // this.form.sections[2].categories[6].fields.push(
          //   fields.getField("6-chemical-substance")
          // );
          this.form.sections[2].categories[6].fields.push(
            fields.getField("6-Role")
          );
          this.form.sections[2].categories[6].fields.push(
            fields.getField("6-Subatomic-particle")
          );
          //push to technique
          this.form.sections[2].categories[7].fields.push(
            fields.getField("7-Technique")
          );
          //push to discipline
          this.form.sections[2].categories[8].fields.push(
            fields.getField("8-Discipline")
          );
        },
        createContainerForm: function() {
          this.createSimpleForm();
          /* this.form.sections[1] = {
            title: "File",
            id: "file",
            type: "member",
    
            fields: []
          };
          var rt = fields.getField("resource-type");
          rt.value = "https://pid.phaidra.org/vocabulary/8MY0-BQDQ";
          this.form.sections[1].fields.push(rt);
        this.form.sections[3].fields.push(fields.getField("file"));
          this.form.sections[3].fields.push(fields.getField("title"));
          this.form.sections[3].fields.push(fields.getField("description"));
          var mt = fields.getField("mime-type");
          mt.required = true;
          this.form.sections[3].fields.push(mt);
          this.form.sections[3].fields.push(fields.getField("digitization-note"));
          this.form.sections[3].fields.push(fields.getField("role"));
          this.form.sections[3].fields.push(fields.getField("license"));
          this.form.sections[3].fields.push(fields.getField("rights"));*/
        },
        loadTracking: async function() {
          const scriptPromise = new Promise((resolve, reject) => {
            const script = document.createElement("script");
            script.async = true;
            script.defer = true;
            script.src = "//" + this.trackerbaseurl + "/matomo.js";
            const head = document.head || document.getElementsByTagName("head")[0];
            head.appendChild(script);
            script.onload = resolve;
            script.onerror = reject;
          });
          scriptPromise.catch(error => {
            console.error(
              "An error occurred trying to load " +
                error.target.src +
                ". If the file exists you may have an ad- or trackingblocker enabled."
            );
          });
          return scriptPromise;
        }
      },
      mounted: async function() {
        await this.loadTracking();
        const Matomo = window.Piwik.getTracker(
          "https://" + this.trackerbaseurl + "/matomo.php",
          this.siteid
        );
        Matomo.trackPageView();
        Matomo.enableLinkTracking();
        Vue.prototype.$matomo = Matomo;
        this.$router.afterEach((to, from) => {
          this.$matomo.setCustomUrl("ExtService");
          this.$matomo.setDocumentTitle("Pharma_try");
          this.$matomo.trackPageView();
        });
        var signedin = this.getCookie("X-XSRF-TOKEN");
        if (signedin) {
          // TODO init userdata if setting signedin from cookie
          this.$store.commit("setToken", signedin);
        }
    
        this.$store.commit("setInstanceApi", this.apibaseurl);
        this.$store.commit("setInstanceSolr", this.solrbaseurl);
        this.$store.commit("setInstancePhaidra", this.phaidrabaseurl);
        this.$store.commit("setSuggester", {
          suggester: "ExtServiceSuggest",
          url: "https://fair01a.phaidra.at/"
        });
        this.$store.commit("setSuggester", {
          suggester: "ols",
          url: "ols: 'http://www.ebi.ac.uk/ols/api/"
        });
        this.$store.commit("initStore"); // this commits initStore in every store module which has it
    
        this.createContainerForm();
      }
    };
    </script>
    
    <style>
    #app {
      font-family: "Roboto", sans-serif, Arial, Helvetica, sans-serif;
      font-size: 11.5pt;
      line-height: 1.42857143;
      color: black;
      background-color: white;
      font-weight: 300;
      text-rendering: optimizeLegibility;
    }
    
    .right {
      float: right;
    }
    
    .pdlabel {
      max-width: 100%;
    }
    
    #app .v-btn {
      text-transform: none;
    }
    #app .v-tabs__div {
      text-transform: none;
      font-weight: 300;
    }
    .logo {
      height: auto;
      width: auto;
      max-width: 250px;
      max-height: 150px;
    }
    .v-align-top {
      vertical-align: top;
    }
    
    .top-margin-3 {
      margin-top: 3px;
    }
    
    .lang-icon {
      margin-left: 5px;
    }
    
    .displayname {
      vertical-align: top;
      display: inline-block;
      margin-top: 10px;
    }
    </style>
    
    <style lang="stylus">
    @require './stylus/main';
    </style>