Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • feature-64bit
  • feature/64bit
  • add-iic-driver
  • cmake-include-gnuinstalldirs
  • fix-install-dir
  • update-mail
  • fix-oob-check
  • 1-license-missing
  • v0.1.0
10 results

xaxidma_hw.h

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    GeneralInfo.vue 10.26 KiB
    <template>
      <div class="general-information">
        <b-form id="edit_form" @submit.stop.prevent="onSubmit">
          <coscine-form-group
            :mandatory="true"
            labelFor="ResourceName"
            :label="$t('ResourceNameLabel')"
          >
            <b-form-input
              id="ResourceName"
              v-model="$v.resource.ResourceName.$model"
              @input="translateResourceNameToDisplayName"
              aria-describedby="ResourceNameHelp"
              :state="
                $v.resource.ResourceName.$dirty
                  ? !$v.resource.ResourceName.$error
                  : null
              "
              :placeholder="$t('ResourceName')"
              maxlength="200"
              required="required"
            />
            <div class="invalid-tooltip">{{ $t("ResourceNameHelp") }}</div>
          </coscine-form-group>
          <coscine-form-group
            :mandatory="true"
            labelFor="DisplayName"
            :label="$t('DisplayNameLabel')"
          >
            <b-form-input
              id="DisplayName"
              v-model="$v.resource.DisplayName.$model"
              @input="lockDisplayName"
              aria-describedby="DisplayNameHelp"
              :state="
                $v.resource.DisplayName.$dirty
                  ? !$v.resource.DisplayName.$error
                  : null
              "
              :placeholder="$t('DisplayName')"
              maxlength="25"
              required="required"
            />
            <div class="invalid-tooltip">{{ $t("DisplayNameHelp") }}</div>
          </coscine-form-group>
          <coscine-form-group
            :mandatory="true"
            labelFor="Description"
            :label="$t('ResourceDescriptionLabel')"
          >
            <b-form-textarea
              id="Description"
              v-model="$v.resource.Description.$model"
              aria-describedby="ResourceDescriptionHelp"
              :state="
                $v.resource.Description.$dirty
                  ? !$v.resource.Description.$error
                  : null
              "
              :placeholder="$t('ResourceDescription')"
              maxlength="5000"
              required="required"
            />
            <div class="invalid-tooltip">{{ $t("ResourceDescriptionHelp") }}</div>
          </coscine-form-group>
          <coscine-form-group
            :mandatory="true"
            labelFor="Disciplines"
            :label="$t('ResourceDisciplineLabel')"
            class="abc"
          >
            <multiselect
              id="Disciplines"
              v-model="resource.Disciplines"
              :options="disciplines"
              :multiple="true"
              :hide-selected="true"
              :label="disciplineLabel"
              :track-by="disciplineLabel"
              :placeholder="$t('ResourceDiscipline')"
            >
            </multiselect>
          </coscine-form-group>
          <coscine-form-group
            labelFor="Keywords"
            :label="$t('ResourceKeywordsLabel')"
          >
            <multiselect
              id="Keywords"
              v-model="resource.Keywords"
              :options="keywordoptions"
              :placeholder="$t('ResourceKeywords')"
              :multiple="true"
              :taggable="true"
              :tag-placeholder="$t('TagPlaceholder')"
              @tag="addTag"
            ></multiselect>
          </coscine-form-group>
          <coscine-form-group
            :mandatory="true"
            labelFor="Visibility"
            :label="$t('ResourceVisibilityLabel')"
          >
            <b-form-radio-group
              v-model="resource.Visibility"
              :options="visibilities"
              name="radios-stacked"
              stacked
            ></b-form-radio-group>
          </coscine-form-group>
          <coscine-form-group
            labelFor="ResourceLicense"
            :label="$t('ResourceLicenseLabel')"
            :info="true"
          >
            <template #popover>
              {{ $t("popoverLicense") }}
              <b-link
                href="https://help.itc.rwth-aachen.de/service/b2b7729fd93f4c7080b475776f6b5d87/article/7812e3fcd3a241808f5b91e11b6ca3a9/"
                target="_blank"
                >{{ $t("help") }}</b-link
              >
            </template>
            <b-form-select
              id="ResourceLicense"
              v-model="resource.License"
              :options="licenses"
              :placeholder="$t('ResourceLicense')"
            >
              <template v-slot:first>
                <option :value="null">
                  {{ $t("SelectResourceLicense") }}
                </option>
              </template>
            </b-form-select>
          </coscine-form-group>
          <coscine-form-group
            labelFor="UsageRights"
            :label="$t('ResourceUsageRightsLabel')"
            :info="true"
          >
            <template #popover>
              {{ $t("popoverUsageRights") }}
              <b-link
                href="https://help.itc.rwth-aachen.de/service/b2b7729fd93f4c7080b475776f6b5d87/article/7812e3fcd3a241808f5b91e11b6ca3a9/"
                target="_blank"
                >{{ $t("help") }}</b-link
              >
            </template>
            <b-form-input
              id="UsageRights"
              v-model="$v.resource.UsageRights.$model"
              aria-describedby="UsageRightsHelp"
              :state="
                $v.resource.UsageRights.$dirty
                  ? !$v.resource.UsageRights.$error
                  : null
              "
              :placeholder="$t('ResourceUsageRights')"
              maxlength="500"
              required="required"
            />
            <div class="invalid-tooltip">{{ $t("ResourceUsageRightsHelp") }}</div>
          </coscine-form-group>
        </b-form>
        <b-button
          @click.prevent="back"
          class="btn btn-secondary"
          variant="outline-primary"
          >{{ $t("back") }}</b-button
        >
        <b-button
          @click.prevent="next"
          class="btn btn-secondary float-right"
          variant="outline_primary"
          :disabled="this.$v.$invalid"
          >{{ $t("next") }}</b-button
        >
      </div>
    </template>
    
    <script lang="ts">
    import Vue from "vue";
    import {
      ProjectApi,
      ProjectRoleApi,
      DisciplineApi,
      VisibilityApi,
      LicenseApi,
    } from "@coscine/api-connection";
    
    import { validationMixin } from "vuelidate";
    import {
      required,
      minLength,
      maxLength,
      integer,
    } from "vuelidate/lib/validators";
    
    import BootstrapVue from "bootstrap-vue";
    
    import Multiselect from "vue-multiselect";
    import "vue-multiselect/dist/vue-multiselect.min.css";
    Vue.component("multiselect", Multiselect);
    
    import { LanguageUtil } from "@coscine/app-util";
    import { CoscineFormGroup } from "@coscine/component-library";
    import "@coscine/component-library/dist/index.css";
    
    function checkKeywords(value: any) {
      // check if the total sum of characters for keywords is <= 1000
      let count = 0;
      if (typeof value === "string") {
        count = value.length;
      } else if (value !== undefined) {
        for (const keyword of value) {
          count += keyword.length;
        }
      }
      return count <= 1000;
    }
    
    export default Vue.extend({
      mixins: [validationMixin],
      name: "GeneralInfo",
      components: {
        CoscineFormGroup,
      },
      validations: {
        resource: {
          ResourceName: {
            required,
            maxLength: maxLength(200),
          },
          DisplayName: {
            required,
            maxLength: maxLength(25),
          },
          Description: {
            required,
            maxLength: maxLength(5000),
          },
          Disciplines: {
            required,
          },
          Licence: {},
          Keywords: {
            checkKeywords,
          },
          Visibility: {
            required,
          },
          UsageRights: {
            maxLength: maxLength(500),
          },
        },
      },
      props: {
        resource: Object,
        projectId: String,
        isOwner: Boolean,
      },
      data() {
        return {
          displayNameIsLocked: false,
          licenses: [] as Array<unknown>,
          disciplines: [] as Array<unknown>,
          visibilities: [] as Array<unknown>,
          keywordoptions: [] as Array<unknown>,
          disciplineLabel: "displayNameEn",
        };
      },
      methods: {
        back() {
          this.$emit("back");
        },
        next() {
          this.$v.$touch();
          if (!this.$v.$invalid) {
            this.$emit("next");
          }
        },
        formIsValid() {
          this.$v.$touch();
          if (!this.$v.$invalid) {
            return true;
          }
          return false;
        },
        addTag(newTag: any) {
          this.resource.Keywords.push(newTag);
          this.keywordoptions.push(newTag);
        },
        translateResourceNameToDisplayName() {
          if (this.displayNameIsLocked) {
            return;
          }
          if (this.resource.ResourceName.length >= 25) {
            this.resource.DisplayName = this.resource.ResourceName.substring(0, 25);
          } else {
            this.resource.DisplayName = this.resource.ResourceName;
          }
        },
        lockDisplayName() {
          this.displayNameIsLocked = true;
        },
      },
      beforeMount() {
        if (LanguageUtil.getLanguage() === "en") {
          this.disciplineLabel = "displayNameEn";
        } else {
          this.disciplineLabel = "displayNameDe";
        }
      },
      mounted() {
        VisibilityApi.getVisibilities((response: any) => {
          for (const datum of response.data) {
            if (
              this.resource.Visibility.displayName === "" &&
              datum.displayName === "Project Members"
            ) {
              this.resource.Visibility = datum;
            }
            this.visibilities.push({ value: datum, text: datum.displayName });
          }
        });
    
        DisciplineApi.getDisciplines((response: any) => {
          this.disciplines = [];
          for (const datum of response.data) {
            this.disciplines.push(datum);
          }
        });
    
        LicenseApi.getLicenses((response: any) => {
          this.licenses = [];
          for (const license of response.data) {
            this.licenses.push({ value: license, text: license.displayName });
          }
          this.licenses.sort((a: any, b: any) =>
            a.text < b.text ? -1 : a.text > b.text ? 1 : 0
          );
        });
    
        this.displayNameIsLocked = false;
        ProjectApi.getProjectInformation(this.projectId, (response: any) => {
          this.resource.Disciplines = response.data.disciplines;
        });
      },
    });
    </script>
    
    <style>
    .general-information .multiselect {
      height: calc(1.4em + 0.75rem + 2px);
    }
    .general-information .multiselect__input {
      border: 0px;
      height: calc(1.4em + 0.75rem + 2px);
    }
    .general-information .multiselect__tags {
      border-radius: 0px;
    }
    .abc > div {
      max-width: 75%;
    }
    .general-information .multiselect__tag {
      white-space: normal;
    }
    .general-information .vdp-datepicker__calendar-button {
      height: calc(1.4em + 0.75rem + 2px);
    }
    .general-information .col-form-label {
      font-weight: bold;
    }
    .invalid-tooltip {
      position: absolute;
      top: 100%;
      z-index: 5;
      display: none;
      max-width: 100%;
      padding: 0.25rem 0.5rem;
      margin-top: 0.1rem;
      font-size: 0.76563rem;
      line-height: 1.4;
      color: #fff;
      background-color: rgba(204, 7, 30, 0.9);
      border-radius: 0;
    }
    </style>