Corrected issue that allowed for more than one default configuration to exist CA-25

<template>

                        {{ permissionEntitySelectionTitle }}
                        <button
                            class="delete is-pulled-right"
                            aria-label="close"
                            @click="closeSelectPermissionEntitiesModal" />

                        <input
                            type="text"
                            class="input"
                            v-model="permissionEntitiesFilter"
                            placeholder="user/group filter">

                                    name
                                    email
                                    type

                                            <input
                                                :id="pe.pk"
                                                :value="pe.pk"
                                                name="pe.name"
                                                type="checkbox"
                                                v-model="selectedPermissionEntities">

                                    {{ pe.name }}
                                    {{ pe.email }}

                        <button
                            class="button is-outlined is-dark"
                            @click="closeSelectPermissionEntitiesModal">

                                cancel

                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="applySelectPermissionEntities">

                                apply

                        </button>

                        {{ levelSelectionModalTitle }}
                        <button
                            class="delete is-pulled-right"
                            aria-label="close"
                            @click="closeSelectLevelModal" />

                            Available Levels:
                            <input
                                class="input is-small"
                                type="text"
                                v-model="selectedLevelFilter"
                                placeholder="level filter">

                            Add Level

                                Name:

                                    <input
                                        class="input"
                                        type="text"
                                        v-model="newLevelName">

                                Description:

                                    <input
                                        class="input"
                                        type="text"
                                        v-model="newLevelDescription">

                                    Please correct the following errors:

                                    Level name is required

                                        name

                                        description

                                                <input
                                                    :id="lvl.shortId()"
                                                    :value="lvl.shortId()"
                                                    name="lvl.shortId()"
                                                    type="checkbox"
                                                    v-model="selectedLevels">

                                            {{ lvl.getName() }}

                                            {{ lvl.description }}

                        <button
                            class="button is-outlined is-dark"
                            @click="closeSelectLevelModal">
                            cancel
                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="showAddNewLevel">

                            add level
                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="applySelectLevels">

                                apply selected

                        </button>

                        <button
                            class="button is-outlined"
                            @click="cancelAddNewLevel">

                                cancel

                        </button>
                        <button
                            class="button is-outlined"
                            @click="saveAddNewLevel">

                                save new level

                        </button>

                        {{ customPropertyModalTitle }}
                        <button
                            class="delete is-pulled-right"
                            aria-label="close"
                            @click="closeCustomPropertyModal" />

                        Context:

                            {{ customPropertyContext }}

                                <select v-model="customPropertyContext">
                                    <option value="https://schema.cassproject.org/0.4/">
                                        https://schema.cassproject.org/0.4/
                                    </option>
                                    <option value="https://purl.org/ctdlasn/terms/">
                                        https://purl.org/ctdlasn/terms/
                                    </option>
                                    <option value="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
                                        http://www.w3.org/1999/02/22-rdf-syntax-ns#
                                    </option>
                                    <option value="http://www.w3.org/2000/01/rdf-schema#">
                                        http://www.w3.org/2000/01/rdf-schema#
                                    </option>
                                    <option value="https://schema.cassproject.org/0.4/">
                                        https://schema.cassproject.org/0.4/
                                    </option>
                                    <option value="https://schema.cassproject.org/kbac/0.4/">
                                        https://schema.cassproject.org/kbac/0.4/
                                    </option>
                                    <option value="http://schema.eduworks.com/general/0.3/">
                                        http://schema.eduworks.com/general/0.3/
                                    </option>
                                    <option value="http://schema.org/">
                                        http://schema.org/
                                    </option>
                                    <option value="http://purl.org/ASN/schema/core/">
                                        http://purl.org/ASN/schema/core/
                                    </option>
                                    <option value="http://purl.org/dc/elements/1.1/">
                                        http://purl.org/dc/elements/1.1/
                                    </option>
                                    <option value="http://purl.org/gem/qualifiers/">
                                        http://purl.org/gem/qualifiers/
                                    </option>
                                    <option value="http://www.loc.gov/loc.terms/relators/">
                                        http://www.loc.gov/loc.terms/relators/
                                    </option>
                                    <option value="http://purl.org/dc/terms/">
                                        http://purl.org/dc/terms/
                                    </option>
                                    <option value="http://www.w3.org/2004/02/skos/core#">
                                        http://www.w3.org/2004/02/skos/core#
                                    </option>
                                </select>

                        Range/Type:

                                {{ customPropertyRangeReadable }}

                                <select v-model="customPropertyRange">
                                    <option value="http://www.w3.org/2000/01/rdf-schema#langString">
                                        Lang-String
                                    </option>
                                    <option value="http://schema.org/URL">
                                        URL
                                    </option>
                                    <option value="http://schema.org/Text">
                                        Text
                                    </option>
                                    <option value="http://www.w3.org/2001/XMLSchema#dateTime">
                                        Date-Time
                                    </option>
                                    <option value="http://purl.org/dc/terms/date">
                                        Date
                                    </option>
                                    <option value="https://schema.cassproject.org/0.4/skos/Concept">
                                        SKOS Concept
                                    </option>
                                </select>

                            Property Name (only alphanumerics permitted):

                            {{ customPropertyPropertyName }}

                            <input
                                class="input"
                                type="text"
                                v-model="customPropertyPropertyName"
                                @change="simplifyCustomPropertyName">

                        Label:

                            {{ customPropertyLabel }}

                            <input
                                class="input"
                                type="text"
                                v-model="customPropertyLabel">

                        Description:

                            {{ customPropertyDescription }}

                            <input
                                class="input"
                                type="text"
                                v-model="customPropertyDescription">

                        Is Required:

                            {{ customPropertyRequired }}

                                <select v-model="customPropertyRequired">
                                    <option :value="true">
                                        true
                                    </option>
                                    <option :value="false">
                                        false
                                    </option>
                                </select>

                        Priority:

                            {{ customPropertyPriority }}

                                <select v-model="customPropertyPriority">
                                    <option value="primary">
                                        primary
                                    </option>
                                    <option value="secondary">
                                        secondary
                                    </option>
                                    <option value="tertiary">
                                        tertiary
                                    </option>
                                </select>

                    <template v-if="shouldAllowCustomPropertyPermittedValues">

                            Permitted Values (Optional):

                                Leave this section empty to allow any values for this property

                            <button
                                class="button is-outlined is-small is-primary"
                                v-if="!readOnly"
                                @click="addCustomPropertyPermittedValue">

                                add
                            </button>

 0">

                                    display
                                    value

                                                {{ ev.display }}

                                                <input
                                                    class="input is-small"

                                                    type="text"
                                                    v-model="ev.display">

                                                {{ ev.value }}

                                                <input
                                                    v-if="!readOnly"
                                                    type="text"
                                                    class="input is-small"
                                                    v-model="ev.value">

                    </template>

                            Please correct the following errors:

                            Property name is already in use

                            Property name is required

                            Label is required

                            Description is required

                        <button
                            class="button is-outlined is-dark"
                            @click="closeCustomPropertyModal">

                                cancel

                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="applyCustomPropertyEdits">

                                apply new framework property

                        </button>

                Configuration Details

                Name:

                    {{ config.name }}

                    <input
                        type="text is-small"
                        class="input"
                        v-model="config.name">

                Description:

                    {{ config.description }}

                    <input
                        type="text is-small"
                        class="input"
                        v-model="config.description">

                Is Default:

                    {{ config.isDefault }}

                        {{ config.isDefault }}

                        <select
                            v-model="config.isDefault">
                            <option :value="true">
                                true
                            </option>
                            <option :value="false">
                                false
                            </option>
                        </select>

                Framework Properties

                            property
                            label
                            description
                            required
                            priority

                        <FrameworkCompetencyPropertyListItem
                            propertyParent="framework"
                            property="id"
                            :label="config.fwkIdLabel"
                            :description="config.fwkIdDescription"
                            :required="true"
                            :priority="config.fwkIdPriorty"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="framework"
                            property="name"
                            :label="config.fwkNameLabel"
                            :description="config.fwkNameDescription"
                            :required="true"
                            priority="primary"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="true"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="framework"
                            property="description"
                            :label="config.fwkDescLabel"
                            :description="config.fwkDescDescription"
                            :required="config.fwkDescRequired"
                            :priority="config.fwkDescPriority"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            v-for="(prop,idx) in config.fwkCustomProperties"
                            :key="prop.propertyName + '_' + prop.label + '_' + prop.description + '_' + prop.required + '_' + prop.priority"
                            propertyParent="framework"
                            :property="prop.propertyName"
                            :label="prop.label"
                            :description="prop.description"
                            :required="prop.required"
                            :priority="prop.priority"
                            :custom="true"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            :propertyIndex="idx"
                            @change="updateFrameworkCompetencyProperty"
                            @manage="manageCustomFrameworkCompetencyProperty"
                            @delete="deleteCustomFrameworkCompetencyProperty" />

                        add custom framework property

Competency Properties

                            property
                            label
                            description
                            required
                            priority

                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="id"
                            :label="config.compIdLabel"
                            :description="config.compIdDescription"
                            :required="true"
                            :priority="config.compIdPriorty"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="name"
                            :label="config.compNameLabel"
                            :description="config.compNameDescription"
                            :required="true"
                            priority="primary"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="true"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="description"
                            :label="config.compDescLabel"
                            :description="config.compDescDescription"
                            :required="config.compDescRequired"
                            :priority="config.compDescPriority"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="type"
                            :label="config.compTypeLabel"
                            :description="config.compTypeDescription"
                            :required="config.compTypeRequired"
                            :priority="config.compTypePriority"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            v-for="(prop,idx) in config.compCustomProperties"
                            :key="prop.propertyName + '_' + prop.label + '_' + prop.description + '_' + prop.required + '_' + prop.priority"
                            propertyParent="competency"
                            :property="prop.propertyName"
                            :label="prop.label"
                            :description="prop.description"
                            :required="prop.required"
                            :priority="prop.priority"
                            :custom="true"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            :propertyIndex="idx"
                            @change="updateFrameworkCompetencyProperty"
                            @manage="manageCustomFrameworkCompetencyProperty"
                            @delete="deleteCustomFrameworkCompetencyProperty" />

                        add custom competency property

Enforce Competency Types? (optional)

                Leave this section empty to allow competencies of any type.

                {{ config.compEnforceTypes }}

                    <select
                        v-model="config.compEnforceTypes"
                        @change="checkEnforceTypesChange">
                        <option :value="true">
                            true
                        </option>
                        <option :value="false">
                            false
                        </option>
                    </select>

                    add enforced type

                                label

                                value

                                    {{ et.display }}

                                <input
                                    class="input is-small"
                                    v-if="!readOnly"
                                    type="text"
                                    v-model="et.display">

                                    {{ et.value }}

                                <input
                                    class="input is-small"
                                    v-if="!readOnly"
                                    type="text"
                                    v-model="et.value">

                                    delete

Allow Levels?

                {{ config.compAllowLevels }}

                    <select v-model="config.compAllowLevels">
                        <option :value="true">
                            true
                        </option>
                        <option :value="false">
                            false
                        </option>
                    </select>

                level label:

                    {{ config.levelLabel }}

                    <input
                        class="input is-small"
                        type="text"
                        v-model="config.levelLabel">

                level description:

                    {{ config.levelDescription }}

                    <input
                        class="input is-small"
                        type="text"
                        v-model="config.levelDescription">

Enforce Level Values? (optional)

                {{ config.enforceLevelValues }}

                    <select v-model="config.enforceLevelValues">
                        <option :value="true">
                            true
                        </option>
                        <option :value="false">
                            false
                        </option>
                    </select>

                    manage enforced levels

                                name

                                description

{{ getLevelNameById(lvlId) }}

{{ getLevelDescById(lvlId) }}

Competency Relationships

                                relationship

                                label

                                enabled

                        <RelationshipListItem
                            v-for="(relObj, relKey) in this.config.relationships"
                            :key="relKey"
                            :relationship="relKey"
                            :label="relObj.label"
                            :enabled="relObj.enabled"
                            :readOnly="readOnly"
                            @change="updateRelationshipProperty" />

Resource Alignment

                                alignment

                                enabled

                                teaches

                                    {{ config.alignments.teaches }}

                                    <select v-model="config.alignments.teaches">
                                        <option :value="true">
                                            true
                                        </option>
                                        <option :value="false">
                                            false
                                        </option>
                                    </select>

                                assesses

                                    {{ config.alignments.assesses }}

                                    <select v-model="config.alignments.assesses">
                                        <option :value="true">
                                            true
                                        </option>
                                        <option :value="false">
                                            false
                                        </option>
                                    </select>

                                requires

                                    {{ config.alignments.requires }}

                                    <select v-model="config.alignments.requires">
                                        <option :value="true">
                                            true
                                        </option>
                                        <option :value="false">
                                            false
                                        </option>
                                    </select>

Default Owners

                manage default owners

 0"
                class="table-container">

                                name

                                email

                                type

{{ getPermissionEntityName(pk) }}

{{ getPermissionEntityEmail(pk) }}

Default Readers

                manage default readers

 0"
                class="table-container">

                                name

                                email

                                type

{{ getPermissionEntityName(pk) }}

{{ getPermissionEntityEmail(pk) }}

Default Commenters

                manage default commenters

 0"
                class="table-container">

                                name

                                email

                                type

{{ getPermissionEntityName(pk) }}

{{ getPermissionEntityEmail(pk) }}

Configuration is invalid:

                    *Configuration name is required

                    *Configuration description is required

                    *Enforced types must have a label and value

                    *Enabled relationships must have a label

                    *Framework ID Label is required

                    *Framework ID Description is required

                    *Framework Name Label is required

                    *Framework Name Description is required

                    *Framework Description Label is required

                    *Framework Description Description is required

                    *Competency ID Label required

                    *Competency ID Description is required

                    *Competency Name Label is required

                    *Competency Name Description is required

                    *Competency Description Label is required

                    *Competency Description Description is required

                    *Competency Type Label is required

                    *Competency Type Description is required

                    set as browser default

                    save

                    cancel

                    set as browser default

                    back

</template>

<template>

                        {{ permissionEntitySelectionTitle }}
                        <button
                            class="delete is-pulled-right"
                            aria-label="close"
                            @click="closeSelectPermissionEntitiesModal" />

                        <input
                            type="text"
                            class="input"
                            v-model="permissionEntitiesFilter"
                            placeholder="user/group filter">

                                    name
                                    email
                                    type

                                            <input
                                                :id="pe.pk"
                                                :value="pe.pk"
                                                name="pe.name"
                                                type="checkbox"
                                                v-model="selectedPermissionEntities">

                                    {{ pe.name }}
                                    {{ pe.email }}

                        <button
                            class="button is-outlined is-dark"
                            @click="closeSelectPermissionEntitiesModal">

                                cancel

                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="applySelectPermissionEntities">

                                apply

                        </button>

                        {{ levelSelectionModalTitle }}
                        <button
                            class="delete is-pulled-right"
                            aria-label="close"
                            @click="closeSelectLevelModal" />

                            Available Levels:
                            <input
                                class="input is-small"
                                type="text"
                                v-model="selectedLevelFilter"
                                placeholder="level filter">

                            Add Level

                                Name:

                                    <input
                                        class="input"
                                        type="text"
                                        v-model="newLevelName">

                                Description:

                                    <input
                                        class="input"
                                        type="text"
                                        v-model="newLevelDescription">

                                    Please correct the following errors:

                                    Level name is required

                                        name

                                        description

                                                <input
                                                    :id="lvl.shortId()"
                                                    :value="lvl.shortId()"
                                                    name="lvl.shortId()"
                                                    type="checkbox"
                                                    v-model="selectedLevels">

                                            {{ lvl.getName() }}

                                            {{ lvl.description }}

                        <button
                            class="button is-outlined is-dark"
                            @click="closeSelectLevelModal">
                            cancel
                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="showAddNewLevel">

                            add level
                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="applySelectLevels">

                                apply selected

                        </button>

                        <button
                            class="button is-outlined"
                            @click="cancelAddNewLevel">

                                cancel

                        </button>
                        <button
                            class="button is-outlined"
                            @click="saveAddNewLevel">

                                save new level

                        </button>

                        {{ customPropertyModalTitle }}
                        <button
                            class="delete is-pulled-right"
                            aria-label="close"
                            @click="closeCustomPropertyModal" />

                        Context:

                            {{ customPropertyContext }}

                                <select v-model="customPropertyContext">
                                    <option value="https://schema.cassproject.org/0.4/">
                                        https://schema.cassproject.org/0.4/
                                    </option>
                                    <option value="https://purl.org/ctdlasn/terms/">
                                        https://purl.org/ctdlasn/terms/
                                    </option>
                                    <option value="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
                                        http://www.w3.org/1999/02/22-rdf-syntax-ns#
                                    </option>
                                    <option value="http://www.w3.org/2000/01/rdf-schema#">
                                        http://www.w3.org/2000/01/rdf-schema#
                                    </option>
                                    <option value="https://schema.cassproject.org/0.4/">
                                        https://schema.cassproject.org/0.4/
                                    </option>
                                    <option value="https://schema.cassproject.org/kbac/0.4/">
                                        https://schema.cassproject.org/kbac/0.4/
                                    </option>
                                    <option value="http://schema.eduworks.com/general/0.3/">
                                        http://schema.eduworks.com/general/0.3/
                                    </option>
                                    <option value="http://schema.org/">
                                        http://schema.org/
                                    </option>
                                    <option value="http://purl.org/ASN/schema/core/">
                                        http://purl.org/ASN/schema/core/
                                    </option>
                                    <option value="http://purl.org/dc/elements/1.1/">
                                        http://purl.org/dc/elements/1.1/
                                    </option>
                                    <option value="http://purl.org/gem/qualifiers/">
                                        http://purl.org/gem/qualifiers/
                                    </option>
                                    <option value="http://www.loc.gov/loc.terms/relators/">
                                        http://www.loc.gov/loc.terms/relators/
                                    </option>
                                    <option value="http://purl.org/dc/terms/">
                                        http://purl.org/dc/terms/
                                    </option>
                                    <option value="http://www.w3.org/2004/02/skos/core#">
                                        http://www.w3.org/2004/02/skos/core#
                                    </option>
                                </select>

                        Range/Type:

                                {{ customPropertyRangeReadable }}

                                <select v-model="customPropertyRange">
                                    <option value="http://www.w3.org/2000/01/rdf-schema#langString">
                                        Lang-String
                                    </option>
                                    <option value="http://schema.org/URL">
                                        URL
                                    </option>
                                    <option value="http://schema.org/Text">
                                        Text
                                    </option>
                                    <option value="http://www.w3.org/2001/XMLSchema#dateTime">
                                        Date-Time
                                    </option>
                                    <option value="http://purl.org/dc/terms/date">
                                        Date
                                    </option>
                                    <option value="https://schema.cassproject.org/0.4/skos/Concept">
                                        SKOS Concept
                                    </option>
                                </select>

                            Property Name (only alphanumerics permitted):

                            {{ customPropertyPropertyName }}

                            <input
                                class="input"
                                type="text"
                                v-model="customPropertyPropertyName"
                                @change="simplifyCustomPropertyName">

                        Label:

                            {{ customPropertyLabel }}

                            <input
                                class="input"
                                type="text"
                                v-model="customPropertyLabel">

                        Description:

                            {{ customPropertyDescription }}

                            <input
                                class="input"
                                type="text"
                                v-model="customPropertyDescription">

                        Is Required:

                            {{ customPropertyRequired }}

                                <select v-model="customPropertyRequired">
                                    <option :value="true">
                                        true
                                    </option>
                                    <option :value="false">
                                        false
                                    </option>
                                </select>

                        Priority:

                            {{ customPropertyPriority }}

                                <select v-model="customPropertyPriority">
                                    <option value="primary">
                                        primary
                                    </option>
                                    <option value="secondary">
                                        secondary
                                    </option>
                                    <option value="tertiary">
                                        tertiary
                                    </option>
                                </select>

                    <template v-if="shouldAllowCustomPropertyPermittedValues">

                            Permitted Values (Optional):

                                Leave this section empty to allow any values for this property

                            <button
                                class="button is-outlined is-small is-primary"
                                v-if="!readOnly"
                                @click="addCustomPropertyPermittedValue">

                                add
                            </button>

 0">

                                    display
                                    value

                                                {{ ev.display }}

                                                <input
                                                    class="input is-small"

                                                    type="text"
                                                    v-model="ev.display">

                                                {{ ev.value }}

                                                <input
                                                    v-if="!readOnly"
                                                    type="text"
                                                    class="input is-small"
                                                    v-model="ev.value">

                    </template>

                            Please correct the following errors:

                            Property name is already in use

                            Property name is required

                            Label is required

                            Description is required

                        <button
                            class="button is-outlined is-dark"
                            @click="closeCustomPropertyModal">

                                cancel

                        </button>
                        <button
                            class="button is-outlined is-primary"
                            @click="applyCustomPropertyEdits">

                                apply new framework property

                        </button>

                Configuration Details

                Name:

                    {{ config.name }}

                    <input
                        type="text is-small"
                        class="input"
                        v-model="config.name">

                Description:

                    {{ config.description }}

                    <input
                        type="text is-small"
                        class="input"
                        v-model="config.description">

                Is Default:

                    {{ config.isDefault }}

                        <select
                            v-model="config.isDefault">
                            <option :value="true">
                                true
                            </option>
                            <option :value="false">
                                false
                            </option>
                        </select>

                Framework Properties

                            property
                            label
                            description
                            required
                            priority

                        <FrameworkCompetencyPropertyListItem
                            propertyParent="framework"
                            property="id"
                            :label="config.fwkIdLabel"
                            :description="config.fwkIdDescription"
                            :required="true"
                            :priority="config.fwkIdPriorty"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="framework"
                            property="name"
                            :label="config.fwkNameLabel"
                            :description="config.fwkNameDescription"
                            :required="true"
                            priority="primary"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="true"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="framework"
                            property="description"
                            :label="config.fwkDescLabel"
                            :description="config.fwkDescDescription"
                            :required="config.fwkDescRequired"
                            :priority="config.fwkDescPriority"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            v-for="(prop,idx) in config.fwkCustomProperties"
                            :key="prop.propertyName + '_' + prop.label + '_' + prop.description + '_' + prop.required + '_' + prop.priority"
                            propertyParent="framework"
                            :property="prop.propertyName"
                            :label="prop.label"
                            :description="prop.description"
                            :required="prop.required"
                            :priority="prop.priority"
                            :custom="true"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            :propertyIndex="idx"
                            @change="updateFrameworkCompetencyProperty"
                            @manage="manageCustomFrameworkCompetencyProperty"
                            @delete="deleteCustomFrameworkCompetencyProperty" />

                        add custom framework property

Competency Properties

                            property
                            label
                            description
                            required
                            priority

                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="id"
                            :label="config.compIdLabel"
                            :description="config.compIdDescription"
                            :required="true"
                            :priority="config.compIdPriorty"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="name"
                            :label="config.compNameLabel"
                            :description="config.compNameDescription"
                            :required="true"
                            priority="primary"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="true"
                            :enforcePrimary="true"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="description"
                            :label="config.compDescLabel"
                            :description="config.compDescDescription"
                            :required="config.compDescRequired"
                            :priority="config.compDescPriority"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            propertyParent="competency"
                            property="type"
                            :label="config.compTypeLabel"
                            :description="config.compTypeDescription"
                            :required="config.compTypeRequired"
                            :priority="config.compTypePriority"
                            :custom="false"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            @change="updateFrameworkCompetencyProperty" />
                        <FrameworkCompetencyPropertyListItem
                            v-for="(prop,idx) in config.compCustomProperties"
                            :key="prop.propertyName + '_' + prop.label + '_' + prop.description + '_' + prop.required + '_' + prop.priority"
                            propertyParent="competency"
                            :property="prop.propertyName"
                            :label="prop.label"
                            :description="prop.description"
                            :required="prop.required"
                            :priority="prop.priority"
                            :custom="true"
                            :readOnly="readOnly"
                            :enforceRequired="false"
                            :enforcePrimary="false"
                            :propertyIndex="idx"
                            @change="updateFrameworkCompetencyProperty"
                            @manage="manageCustomFrameworkCompetencyProperty"
                            @delete="deleteCustomFrameworkCompetencyProperty" />

                        add custom competency property

Enforce Competency Types? (optional)

                Leave this section empty to allow competencies of any type.

                {{ config.compEnforceTypes }}

                    <select
                        v-model="config.compEnforceTypes"
                        @change="checkEnforceTypesChange">
                        <option :value="true">
                            true
                        </option>
                        <option :value="false">
                            false
                        </option>
                    </select>

                    add enforced type

                                label

                                value

                                    {{ et.display }}

                                <input
                                    class="input is-small"
                                    v-if="!readOnly"
                                    type="text"
                                    v-model="et.display">

                                    {{ et.value }}

                                <input
                                    class="input is-small"
                                    v-if="!readOnly"
                                    type="text"
                                    v-model="et.value">

                                    delete

Allow Levels?

                {{ config.compAllowLevels }}

                    <select v-model="config.compAllowLevels">
                        <option :value="true">
                            true
                        </option>
                        <option :value="false">
                            false
                        </option>
                    </select>

                level label:

                    {{ config.levelLabel }}

                    <input
                        class="input is-small"
                        type="text"
                        v-model="config.levelLabel">

                level description:

                    {{ config.levelDescription }}

                    <input
                        class="input is-small"
                        type="text"
                        v-model="config.levelDescription">

Enforce Level Values? (optional)

                {{ config.enforceLevelValues }}

                    <select v-model="config.enforceLevelValues">
                        <option :value="true">
                            true
                        </option>
                        <option :value="false">
                            false
                        </option>
                    </select>

                    manage enforced levels

                                name

                                description

{{ getLevelNameById(lvlId) }}

{{ getLevelDescById(lvlId) }}

Competency Relationships

                                relationship

                                label

                                enabled

                        <RelationshipListItem
                            v-for="(relObj, relKey) in this.config.relationships"
                            :key="relKey"
                            :relationship="relKey"
                            :label="relObj.label"
                            :enabled="relObj.enabled"
                            :readOnly="readOnly"
                            @change="updateRelationshipProperty" />

Resource Alignment

                                alignment

                                enabled

                                teaches

                                    {{ config.alignments.teaches }}

                                    <select v-model="config.alignments.teaches">
                                        <option :value="true">
                                            true
                                        </option>
                                        <option :value="false">
                                            false
                                        </option>
                                    </select>

                                assesses

                                    {{ config.alignments.assesses }}

                                    <select v-model="config.alignments.assesses">
                                        <option :value="true">
                                            true
                                        </option>
                                        <option :value="false">
                                            false
                                        </option>
                                    </select>

                                requires

                                    {{ config.alignments.requires }}

                                    <select v-model="config.alignments.requires">
                                        <option :value="true">
                                            true
                                        </option>
                                        <option :value="false">
                                            false
                                        </option>
                                    </select>

Default Owners

                manage default owners

 0"
                class="table-container">

                                name

                                email

                                type

{{ getPermissionEntityName(pk) }}

{{ getPermissionEntityEmail(pk) }}

Default Readers

                manage default readers

 0"
                class="table-container">

                                name

                                email

                                type

{{ getPermissionEntityName(pk) }}

{{ getPermissionEntityEmail(pk) }}

Default Commenters

                manage default commenters

 0"
                class="table-container">

                                name

                                email

                                type

{{ getPermissionEntityName(pk) }}

{{ getPermissionEntityEmail(pk) }}

Configuration is invalid:

                    *Configuration name is required

                    *Configuration description is required

                    *Enforced types must have a label and value

                    *Enabled relationships must have a label

                    *Framework ID Label is required

                    *Framework ID Description is required

                    *Framework Name Label is required

                    *Framework Name Description is required

                    *Framework Description Label is required

                    *Framework Description Description is required

                    *Competency ID Label required

                    *Competency ID Description is required

                    *Competency Name Label is required

                    *Competency Name Description is required

                    *Competency Description Label is required

                    *Competency Description Description is required

                    *Competency Type Label is required

                    *Competency Type Description is required

                    set as browser default

                    save

                    cancel

                    set as browser default

                    back

</template>


Setup wizard focus

Setup wizard focus

<template>

    <core-modal
      :title=" $tr('facilityPermissionsPresetDetailsHeader')"
      @cancel="hideFacilityPermissionsDetails"
      :enableBgClickCancel="true"
      v-if="permissionPresetDetailsModalShown">

          {{ $tr('selfManagedSetupTitle') }}

          {{ $tr('enabledUserSelfSignupPermissionDetail') }}

          {{ $tr('enabledAccountEditPermissionDetail') }}

          {{ $tr('adminManagedSetupTitle') }}

          {{ $tr('disabledUserSelfSignupPermissionDetail') }}

          {{ $tr('enabledUserPasswordlessLoginPermissionDetail') }}

          {{ $tr('disabledAccountEditPermissionDetail') }}

          {{ $tr('informalSetupTitle') }}

          {{ $tr('disabledUserSelfSignupPermissionDetail') }}

          {{ $tr('enabledAccountEditPermissionDetail') }}

        <k-button
          class="permission-preset-modal-dismiss-button"
          :text="$tr('permissionsModalDismissText')"
          :primary="true"
          @click="hideFacilityPermissionsDetails"
        />

    </core-modal>

    <onboarding-form
      :header="$tr('facilityPermissionsSetupFormHeader')"
      :submitText="submitText"
      @submit="setPermissions">

      <template slot="description">
        {{ $tr('facilityPermissionsSetupFormDescription') }}
        <k-button
          appearance="basic-link"
          :text="$tr('facilityPermissionsPresetDetailsLink')"
          ref="details"
          @click="showFacilityPermissionsDetails"
        />
      </template>

        <k-radio-button
          class="permission-preset-radio-button"
          v-model="selectedPreset"
          radiovalue="nonformal"
          :label="$tr('selfManagedSetupTitle')"
        />

          {{ $tr('selfManagedSetupDescription') }}

        <k-radio-button
          class="permission-preset-radio-button"
          v-model="selectedPreset"
          radiovalue="formal"
          :label="$tr('adminManagedSetupTitle')"
        />

          {{ $tr('adminManagedSetupDescription') }}

        <k-radio-button
          class="permission-preset-radio-button"
          v-model="selectedPreset"
          radiovalue="informal"
          :label="$tr('informalSetupTitle')"
        />

          {{ $tr('informalSetupDescription') }}

    </onboarding-form>

</template>

<template>

    <core-modal
      :title=" $tr('facilityPermissionsPresetDetailsHeader')"
      @cancel="hideFacilityPermissionsDetails"
      :enableBgClickCancel="true"
      v-if="permissionPresetDetailsModalShown">

          {{ $tr('selfManagedSetupTitle') }}

          {{ $tr('enabledUserSelfSignupPermissionDetail') }}

          {{ $tr('enabledAccountEditPermissionDetail') }}

          {{ $tr('adminManagedSetupTitle') }}

          {{ $tr('disabledUserSelfSignupPermissionDetail') }}

          {{ $tr('enabledUserPasswordlessLoginPermissionDetail') }}

          {{ $tr('disabledAccountEditPermissionDetail') }}

          {{ $tr('informalSetupTitle') }}

          {{ $tr('disabledUserSelfSignupPermissionDetail') }}

          {{ $tr('enabledAccountEditPermissionDetail') }}

        <k-button
          class="permission-preset-modal-dismiss-button"
          :text="$tr('permissionsModalDismissText')"
          :primary="true"
          @click="hideFacilityPermissionsDetails"
        />

    </core-modal>

    <onboarding-form
      :header="$tr('facilityPermissionsSetupFormHeader')"
      :submitText="submitText"
      @submit="setPermissions">

      <template slot="description">
        {{ $tr('facilityPermissionsSetupFormDescription') }}
        <k-button
          appearance="basic-link"
          :text="$tr('facilityPermissionsPresetDetailsLink')"
          :autofocus="true"
          @click="showFacilityPermissionsDetails"
        />
      </template>

        <k-radio-button
          class="permission-preset-radio-button"
          v-model="selectedPreset"
          radiovalue="nonformal"
          :label="$tr('selfManagedSetupTitle')"
        />

          {{ $tr('selfManagedSetupDescription') }}

        <k-radio-button
          class="permission-preset-radio-button"
          v-model="selectedPreset"
          radiovalue="formal"
          :label="$tr('adminManagedSetupTitle')"
        />

          {{ $tr('adminManagedSetupDescription') }}

        <k-radio-button
          class="permission-preset-radio-button"
          v-model="selectedPreset"
          radiovalue="informal"
          :label="$tr('informalSetupTitle')"
        />

          {{ $tr('informalSetupDescription') }}

    </onboarding-form>

</template>


Nuke commented out code.

Nuke commented out code.

<template>

        {{ tab.title }}

<slot></slot>

</template>


Don't show the Import / export users panel in the app as we don't yet support upload and download there.

<template>

    <KPageContainer v-if="!cannotDownload">
      <KGrid gutter="48">

        <KGridItem>

{{ $tr('pageHeading') }}

        </KGridItem>

        <KGridItem>

{{ $tr('pageSubHeading') }}

        </KGridItem>

        <KGridItem :layout8="{ span: 4 }" :layout12="{ span: 6 }">

{{ $tr('detailsHeading') }}

{{ $tr('detailsSubHeading') }}

            <KButton
              :text="$tr('download')"
              style="margin-right: 8px;"
              :disabled="!availableSessionCSVLog"
              @click="downloadSessionLog"
            />
            {{ $tr('noLogsYet') }}
            <GeneratedElapsedTime v-else-if="sessionDateCreated" :date="sessionDateCreated" />

            {{ $tr('noDownload') }}

            <DataPageTaskProgress>{{ $tr('generatingLog') }}</DataPageTaskProgress>

            <KButton
              appearance="basic-link"
              :text="noSessionLogs ? $tr('generateLog') : $tr('regenerateLog')"
              @click="generateSessionLog"
            />

            {{ $tr('note') }} {{ $tr('detailsInfo') }}

        </KGridItem>

        <KGridItem :layout8="{ span: 4 }" :layout12="{ span: 6 }">

{{ $tr('summaryHeading') }}

{{ $tr('summarySubHeading') }}

            <KButton
              :text="$tr('download')"
              style="margin-right: 8px;"
              :disabled="!availableSummaryCSVLog"
              @click="downloadSummaryLog"
            />
            {{ $tr('noLogsYet') }}
            <GeneratedElapsedTime v-else-if="summaryDateCreated" :date="summaryDateCreated" />

            {{ $tr('noDownload') }}

            <DataPageTaskProgress>{{ $tr('generatingLog') }}</DataPageTaskProgress>

            <KButton
              appearance="basic-link"
              :text="noSummaryLogs ? $tr('generateLog') : $tr('regenerateLog')"
              @click="generateSummaryLog"
            />

            {{ $tr('note') }} {{ $tr('summaryInfo') }}

        </KGridItem>

      </KGrid>
    </KPageContainer>

    <ImportInterface v-if="!cannotDownload" />
    <SyncInterface />

</template>

<template>

    <KPageContainer v-if="!cannotDownload">
      <KGrid gutter="48">

        <KGridItem>

{{ $tr('pageHeading') }}

        </KGridItem>

        <KGridItem>

{{ $tr('pageSubHeading') }}

        </KGridItem>

        <KGridItem :layout8="{ span: 4 }" :layout12="{ span: 6 }">

{{ $tr('detailsHeading') }}

{{ $tr('detailsSubHeading') }}

            <KButton
              :text="$tr('download')"
              style="margin-right: 8px;"
              :disabled="!availableSessionCSVLog"
              @click="downloadSessionLog"
            />
            {{ $tr('noLogsYet') }}
            <GeneratedElapsedTime v-else-if="sessionDateCreated" :date="sessionDateCreated" />

            {{ $tr('noDownload') }}

            <DataPageTaskProgress>{{ $tr('generatingLog') }}</DataPageTaskProgress>

            <KButton
              appearance="basic-link"
              :text="noSessionLogs ? $tr('generateLog') : $tr('regenerateLog')"
              @click="generateSessionLog"
            />

            {{ $tr('note') }} {{ $tr('detailsInfo') }}

        </KGridItem>

        <KGridItem :layout8="{ span: 4 }" :layout12="{ span: 6 }">

{{ $tr('summaryHeading') }}

{{ $tr('summarySubHeading') }}

            <KButton
              :text="$tr('download')"
              style="margin-right: 8px;"
              :disabled="!availableSummaryCSVLog"
              @click="downloadSummaryLog"
            />
            {{ $tr('noLogsYet') }}
            <GeneratedElapsedTime v-else-if="summaryDateCreated" :date="summaryDateCreated" />

            {{ $tr('noDownload') }}

            <DataPageTaskProgress>{{ $tr('generatingLog') }}</DataPageTaskProgress>

            <KButton
              appearance="basic-link"
              :text="noSummaryLogs ? $tr('generateLog') : $tr('regenerateLog')"
              @click="generateSummaryLog"
            />

            {{ $tr('note') }} {{ $tr('summaryInfo') }}

        </KGridItem>

      </KGrid>
    </KPageContainer>

    <ImportInterface />
    <SyncInterface />

</template>


Loader enabled

Loader enabled

<template>

!

Page Loads by Traffic Source

            <button-switcher :options="[
                {text: 'Today', value: 'today'},
                {text: '7 days', value: '7days'},
                {text: '30 days', value: '30days'}]"
                             v-model="interval">
            </button-switcher>

                <svg class="pl-circular" viewBox="25 25 50 50">
                    <circle class="plc-path" cx="50" cy="50" r="20"></circle>
                </svg>

                <svg style="z-index: 10" ref="svg"></svg>

                    {{highlightedRow.startDate | formatDate}}

                            Current
                            Week ago

                                ●
                                {{tag}}

                            {{item.current}}
                            {{item.previous}}

</template>

<template>

Page Loads by Traffic Source

            <button-switcher :options="[
                {text: 'Today', value: 'today'},
                {text: '7 days', value: '7days'},
                {text: '30 days', value: '30days'}]"
                             v-model="interval">
            </button-switcher>

                <svg style="z-index: 10" ref="svg"></svg>

                    {{highlightedRow.startDate | formatDate}}

                            Current
                            Week ago

                                ●
                                {{tag}}

                            {{item.current}}
                            {{item.previous}}

</template>


:fire: Remove unused CSS classes

:fire: Remove unused CSS classes


add strke-through formatting option

add strke-through formatting option

<template lang="pug">
div
  //- template(v-if="!editor || loading")
  //-   | Connecting to socket server …
  .editor.mb-3(v-if="editor")
    editor-content.html-editor__textarea(ref="editor" :editor='editor').lmo-markdown-wrapper
    .menubar
      div
        v-layout(align-center v-if="editor.isActive('table')")
          v-btn(icon @click="editor.chain().deleteTable().focus().run()" :title="$t('formatting.remove_table')")
            v-icon mdi-table-remove
          v-btn(icon @click="editor.chain().addColumnBefore().focus().run()" :title="$t('formatting.add_column_before')")
            v-icon mdi-table-column-plus-before
          v-btn(icon @click="editor.chain().addColumnAfter().focus().run()" :title="$t('formatting.add_column_after')")
            v-icon mdi-table-column-plus-after
          v-btn(icon @click="editor.chain().deleteColumn().focus().run()" :title="$t('formatting.remove_column')")
            v-icon mdi-table-column-remove
          v-btn(icon @click="editor.chain().addRowBefore().focus().run()" :title="$t('formatting.add_row_before')")
            v-icon mdi-table-row-plus-before
          v-btn(icon @click="editor.chain().addRowAfter().focus().run()" :title="$t('formatting.add_row_after')")
            v-icon mdi-table-row-plus-after
          v-btn(icon @click="editor.chain().deleteRow().focus().run()" :title="$t('formatting.remove_row')")
            v-icon mdi-table-row-remove
          v-btn(icon @click="editor.chain().mergeOrSplit().focus().run()" :title="$t('formatting.merge_selected')")
            v-icon mdi-table-merge-cells

        v-layout.py-2.justify-space-between.flex-wrap(align-center)
          section.d-flex.flex-wrap(:aria-label="$t('formatting.formatting_tools')")
            //- attach
            v-btn(icon @click='$refs.filesField.click()' :title="$t('formatting.attach')")
              v-icon mdi-paperclip

            v-btn(icon @click='$refs.imagesField.click()' :title="$t('formatting.insert_image')")
              v-icon mdi-image

            //- link
            v-menu(:close-on-content-click="!selectedText()" v-model="linkDialogIsOpen" min-width="320px")
              template(v-slot:activator="{on, attrs}")
                template(v-if="editor.isActive('link')")
                  v-btn(icon @click="editor.chain().toggleLink().focus().run()" outlined :title="$t('formatting.link')")
                    v-icon mdi-link-variant
                template(v-else)
                  v-btn(icon v-on="on" v-bind="attrs" :title="$t('formatting.link')")
                    v-icon mdi-link-variant
              v-card
                template(v-if="selectedText()")
                  v-card-title.title(v-t="'text_editor.insert_link'")
                  v-card-text
                    v-text-field(type="url" label="https://www.example.com" v-model="linkUrl" autofocus ref="focus" v-on:keyup.enter="setLinkUrl()")
                  v-card-actions
                    v-spacer
                    v-btn(color="primary" @click="setLinkUrl()" v-t="'common.action.apply'")
                template(v-else)
                  v-card-title(v-t="'text_editor.select_text_to_link'")

            //- emoji
            v-menu(:close-on-content-click="false" v-model="closeEmojiMenu")
              template(v-slot:activator="{on, attrs}")
                v-btn.emoji-picker__toggle(v-on="on" v-bind="attrs" icon :title="$t('formatting.insert_emoji')")
                  v-icon mdi-emoticon-outline
              emoji-picker(:insert="emojiPicked")

            template(v-if="expanded")
              //- v-btn(icon @click='editor.chain().focus().setParagraph().run()' :outlined="editor.isActive('paragraph')" :title="$t('formatting.paragraph')")
              //-   v-icon mdi-format-pilcrow
              template(v-for="i in [1,2,3]")
                v-btn(icon @click='editor.chain().focus().toggleHeading({ level: i }).run()' :outlined="editor.isActive('heading', { level: i })" :title="$t('formatting.heading'+i)")
                  v-icon {{'mdi-format-header-'+i}}

            //- bold
            v-btn(icon v-if="expanded" @click='editor.chain().toggleBold().focus().run()' :outlined="editor.isActive('bold')" :title="$t('formatting.bold')")
              v-icon mdi-format-bold

            //- italic
            v-btn(icon v-if="expanded" @click='editor.chain().toggleItalic().focus().run()' :outlined="editor.isActive('italic')" :title="$t('formatting.italicize')")
              v-icon mdi-format-italic
            //-
            //- //- strikethrough
            v-btn(icon v-if="expanded" @click='editor.chain().toggleStrike().focus().run()' :outlined="editor.isActive('strike')"  :title="$t('formatting.strikethrough')")
              v-icon mdi-format-strikethrough
            //- underline
            //- v-btn(icon v-if="expanded" @click='editor.chain().toggleUnderline().focus().run()' :outlined="editor.isActive('underline')",  :title="$t('formatting.underline')")
            //-   v-icon mdi-format-underline
            //-

            v-btn(icon v-if="expanded" @click='editor.chain().toggleBulletList().focus().run()' :outlined="editor.isActive('bulletList')"  :title="$t('formatting.bullet_list')")
              v-icon mdi-format-list-bulleted
            v-btn(icon v-if="expanded" @click='editor.chain().toggleOrderedList().focus().run()' :outlined="editor.isActive('orderedList')"  :title="$t('formatting.number_list')")
              v-icon mdi-format-list-numbered
            v-btn(icon v-if="expanded" @click='editor.chain().toggleTaskList().focus().run()' :outlined="editor.isActive('taskList')"  :title="$t('formatting.task_list')")
              v-icon mdi-checkbox-marked-outline

            text-highlight-btn(v-if="expanded" :editor="editor")
            text-align-btn(v-if="expanded" :editor="editor")

            //- extra text marks
            template(v-if="expanded")
              //- strikethrough
              v-menu(:close-on-content-click="false" v-model="iframeDialogIsOpen" min-width="320px")
                template(v-slot:activator="{on}")
                  v-btn(icon v-on="on" :title="$t('formatting.embed')")
                    v-icon mdi-youtube
                v-card
                  v-card-title.title(v-t="'text_editor.insert_embedded_url'")
                  v-card-text
                    v-text-field(type="url" label="e.g. https://www.youtube.com/watch?v=Zlzuqsunpxc" v-model="iframeUrl" ref="focus" autofocus v-on:keyup.enter="setIframeUrl()")
                  v-card-actions
                    v-spacer
                    v-btn(color="primary" @click="setIframeUrl()" v-t="'common.action.apply'")
              //- blockquote
              v-btn(icon @click='editor.chain().toggleBlockquote().focus().run()' :outlined="editor.isActive('blockquote')"  :title="$t('formatting.blockquote')")
                v-icon mdi-format-quote-close
              //- //- code block
              v-btn(icon @click='editor.chain().toggleCodeBlock().focus().run()' :outlined="editor.isActive('codeBlock')"  :title="$t('formatting.code_block')")
                v-icon mdi-code-braces
              //- embded
              v-btn(icon @click='editor.chain().setHorizontalRule().focus().run()'  :title="$t('formatting.divider')")
                v-icon mdi-minus
              //- table
              v-btn(icon @click='editor.chain().insertTable({rows: 3, cols: 3, withHeaderRow: false }).focus().run()' :title="$t('formatting.add_table')" :outlined="editor.isActive('table')")
                v-icon mdi-table
              //- markdown (save experience)
              v-btn(icon @click="convertToMd" :title="$t('formatting.edit_markdown')")
                v-icon mdi-language-markdown-outline

            v-btn.html-editor__expand(v-if="!expanded" icon @click="toggleExpanded" :title="$t('formatting.expand')")
              v-icon mdi-chevron-right

            v-btn.html-editor__expand(v-if="expanded" icon @click="toggleExpanded" :title="$t('formatting.collapse')")
              v-icon mdi-chevron-left
          //- save button?
          v-spacer
          slot(v-if="!expanded" name="actions")
    div.d-flex(v-if="expanded" name="actions")
      v-spacer
      slot(name="actions")

    v-alert.text-right(dense v-if="maxLength" :color='((maxLength < editor.getCharacterCount()) && "error" ) || ""')
      span(v-t="{path: 'text_editor.x_of_y_characters', args: {x: editor.getCharacterCount(), y: maxLength}}")

  link-previews(:model="model" :remove="removeLinkPreview")
  suggestion-list(:query="query" :loading="fetchingMentions" :mentionable="mentionable" :positionStyles="suggestionListStyles" :navigatedUserIndex="navigatedUserIndex" @select-user="selectUser")
  files-list(:files="files" v-on:removeFile="removeFile")

  form(style="display: block" @change="fileSelected")
    input(ref="filesField" type="file" name="files" multiple=true)

  form(style="display: block" @change="imageSelected")
    input(ref="imagesField" type="file" name="files" multiple=true)
</template>

<template lang="pug">
div
  //- template(v-if="!editor || loading")
  //-   | Connecting to socket server …
  .editor.mb-3(v-if="editor")
    editor-content.html-editor__textarea(ref="editor" :editor='editor').lmo-markdown-wrapper
    .menubar
      div
        v-layout(align-center v-if="editor.isActive('table')")
          v-btn(icon @click="editor.chain().deleteTable().focus().run()" :title="$t('formatting.remove_table')")
            v-icon mdi-table-remove
          v-btn(icon @click="editor.chain().addColumnBefore().focus().run()" :title="$t('formatting.add_column_before')")
            v-icon mdi-table-column-plus-before
          v-btn(icon @click="editor.chain().addColumnAfter().focus().run()" :title="$t('formatting.add_column_after')")
            v-icon mdi-table-column-plus-after
          v-btn(icon @click="editor.chain().deleteColumn().focus().run()" :title="$t('formatting.remove_column')")
            v-icon mdi-table-column-remove
          v-btn(icon @click="editor.chain().addRowBefore().focus().run()" :title="$t('formatting.add_row_before')")
            v-icon mdi-table-row-plus-before
          v-btn(icon @click="editor.chain().addRowAfter().focus().run()" :title="$t('formatting.add_row_after')")
            v-icon mdi-table-row-plus-after
          v-btn(icon @click="editor.chain().deleteRow().focus().run()" :title="$t('formatting.remove_row')")
            v-icon mdi-table-row-remove
          v-btn(icon @click="editor.chain().mergeOrSplit().focus().run()" :title="$t('formatting.merge_selected')")
            v-icon mdi-table-merge-cells

        v-layout.py-2.justify-space-between.flex-wrap(align-center)
          section.d-flex.flex-wrap(:aria-label="$t('formatting.formatting_tools')")
            //- attach
            v-btn(icon @click='$refs.filesField.click()' :title="$t('formatting.attach')")
              v-icon mdi-paperclip

            v-btn(icon @click='$refs.imagesField.click()' :title="$t('formatting.insert_image')")
              v-icon mdi-image

            //- link
            v-menu(:close-on-content-click="!selectedText()" v-model="linkDialogIsOpen" min-width="320px")
              template(v-slot:activator="{on, attrs}")
                template(v-if="editor.isActive('link')")
                  v-btn(icon @click="editor.chain().toggleLink().focus().run()" outlined :title="$t('formatting.link')")
                    v-icon mdi-link-variant
                template(v-else)
                  v-btn(icon v-on="on" v-bind="attrs" :title="$t('formatting.link')")
                    v-icon mdi-link-variant
              v-card
                template(v-if="selectedText()")
                  v-card-title.title(v-t="'text_editor.insert_link'")
                  v-card-text
                    v-text-field(type="url" label="https://www.example.com" v-model="linkUrl" autofocus ref="focus" v-on:keyup.enter="setLinkUrl()")
                  v-card-actions
                    v-spacer
                    v-btn(color="primary" @click="setLinkUrl()" v-t="'common.action.apply'")
                template(v-else)
                  v-card-title(v-t="'text_editor.select_text_to_link'")

            //- emoji
            v-menu(:close-on-content-click="false" v-model="closeEmojiMenu")
              template(v-slot:activator="{on, attrs}")
                v-btn.emoji-picker__toggle(v-on="on" v-bind="attrs" icon :title="$t('formatting.insert_emoji')")
                  v-icon mdi-emoticon-outline
              emoji-picker(:insert="emojiPicked")

            template(v-if="expanded")
              //- v-btn(icon @click='editor.chain().focus().setParagraph().run()' :outlined="editor.isActive('paragraph')" :title="$t('formatting.paragraph')")
              //-   v-icon mdi-format-pilcrow
              template(v-for="i in [1,2,3]")
                v-btn(icon @click='editor.chain().focus().toggleHeading({ level: i }).run()' :outlined="editor.isActive('heading', { level: i })" :title="$t('formatting.heading'+i)")
                  v-icon {{'mdi-format-header-'+i}}

            //- bold
            v-btn(icon v-if="expanded" @click='editor.chain().toggleBold().focus().run()' :outlined="editor.isActive('bold')" :title="$t('formatting.bold')")
              v-icon mdi-format-bold

            //- italic
            v-btn(icon v-if="expanded" @click='editor.chain().toggleItalic().focus().run()' :outlined="editor.isActive('italic')" :title="$t('formatting.italicize')")
              v-icon mdi-format-italic
            //-
            //- //- strikethrough
            //- v-btn(icon v-if="expanded" @click='editor.chain().toggleStrike().focus().run()' :outlined="editor.isActive('strike')"  :title="$t('formatting.strikethrough')")
            //-   v-icon mdi-format-strikethrough
            //- underline
            //- v-btn(icon v-if="expanded" @click='editor.chain().toggleUnderline().focus().run()' :outlined="editor.isActive('underline')",  :title="$t('formatting.underline')")
            //-   v-icon mdi-format-underline
            //-

            v-btn(icon v-if="expanded" @click='editor.chain().toggleBulletList().focus().run()' :outlined="editor.isActive('bulletList')"  :title="$t('formatting.bullet_list')")
              v-icon mdi-format-list-bulleted
            v-btn(icon v-if="expanded" @click='editor.chain().toggleOrderedList().focus().run()' :outlined="editor.isActive('orderedList')"  :title="$t('formatting.number_list')")
              v-icon mdi-format-list-numbered
            v-btn(icon v-if="expanded" @click='editor.chain().toggleTaskList().focus().run()' :outlined="editor.isActive('taskList')"  :title="$t('formatting.task_list')")
              v-icon mdi-checkbox-marked-outline

            text-highlight-btn(v-if="expanded" :editor="editor")
            text-align-btn(v-if="expanded" :editor="editor")

            //- extra text marks
            template(v-if="expanded")
              //- strikethrough
              v-menu(:close-on-content-click="false" v-model="iframeDialogIsOpen" min-width="320px")
                template(v-slot:activator="{on}")
                  v-btn(icon v-on="on" :title="$t('formatting.embed')")
                    v-icon mdi-youtube
                v-card
                  v-card-title.title(v-t="'text_editor.insert_embedded_url'")
                  v-card-text
                    v-text-field(type="url" label="e.g. https://www.youtube.com/watch?v=Zlzuqsunpxc" v-model="iframeUrl" ref="focus" autofocus v-on:keyup.enter="setIframeUrl()")
                  v-card-actions
                    v-spacer
                    v-btn(color="primary" @click="setIframeUrl()" v-t="'common.action.apply'")
              //- blockquote
              v-btn(icon @click='editor.chain().toggleBlockquote().focus().run()' :outlined="editor.isActive('blockquote')"  :title="$t('formatting.blockquote')")
                v-icon mdi-format-quote-close
              //- //- code block
              v-btn(icon @click='editor.chain().toggleCodeBlock().focus().run()' :outlined="editor.isActive('codeBlock')"  :title="$t('formatting.code_block')")
                v-icon mdi-code-braces
              //- embded
              v-btn(icon @click='editor.chain().setHorizontalRule().focus().run()'  :title="$t('formatting.divider')")
                v-icon mdi-minus
              //- table
              v-btn(icon @click='editor.chain().insertTable({rows: 3, cols: 3, withHeaderRow: false }).focus().run()' :title="$t('formatting.add_table')" :outlined="editor.isActive('table')")
                v-icon mdi-table
              //- markdown (save experience)
              v-btn(icon @click="convertToMd" :title="$t('formatting.edit_markdown')")
                v-icon mdi-language-markdown-outline

            v-btn.html-editor__expand(v-if="!expanded" icon @click="toggleExpanded" :title="$t('formatting.expand')")
              v-icon mdi-chevron-right

            v-btn.html-editor__expand(v-if="expanded" icon @click="toggleExpanded" :title="$t('formatting.collapse')")
              v-icon mdi-chevron-left
          //- save button?
          v-spacer
          slot(v-if="!expanded" name="actions")
    div.d-flex(v-if="expanded" name="actions")
      v-spacer
      slot(name="actions")

    v-alert.text-right(dense v-if="maxLength" :color='((maxLength < editor.getCharacterCount()) && "error" ) || ""')
      span(v-t="{path: 'text_editor.x_of_y_characters', args: {x: editor.getCharacterCount(), y: maxLength}}")

  link-previews(:model="model" :remove="removeLinkPreview")
  suggestion-list(:query="query" :loading="fetchingMentions" :mentionable="mentionable" :positionStyles="suggestionListStyles" :navigatedUserIndex="navigatedUserIndex" @select-user="selectUser")
  files-list(:files="files" v-on:removeFile="removeFile")

  form(style="display: block" @change="fileSelected")
    input(ref="filesField" type="file" name="files" multiple=true)

  form(style="display: block" @change="imageSelected")
    input(ref="imagesField" type="file" name="files" multiple=true)
</template>


Fix on capture username login input

Fix on capture username login input

<template>
	<q-layout>

			<button v-if="showMenu" @click="$refs.leftDrawer.open()">
				menu
			</button>
			<q-toolbar-title :padding="1">
				{{ $t($route.name+'.title') }}
			</q-toolbar-title>
			<button v-if="showGoInfo" @click="goInfo()">
				file_download
			</button>
			<button v-if="showGoDownloadLinks" @click="goDownloadLinks()">
				cloud_download
			</button>

		<q-drawer swipe-only ref="leftDrawer" v-if="showMenu">

				<q-drawer-link icon="home" to="/" exact>{{ $t("login.title") }}</q-drawer-link>

				<q-drawer-link icon="search" to="/search" exact>{{ $t("search.title") }}</q-drawer-link>
				<q-drawer-link icon="file_download" to="/info" exact>{{ $t("info.title") }}</q-drawer-link>
				<q-drawer-link icon="cloud_download" to="/links" exact>{{ $t("links.title") }}</q-drawer-link>

		</q-drawer>

{{ $t("login.message") }}

						<input class="user-input" v-model.lazy="username" v-on:keypress.enter="login()">

						<button class="primary circular big login-btn" :disabled="(username.length === 0) ? true : false" @click="login()">
							{{ $t("login.button") }}
						</button>

{{ $t("login.selectLanguage") }}

						<q-select type="radio" v-model="language" :options="languages" @input="changeLanguage"></q-select>

		<router-view class="layout-view"></router-view>

	</q-layout>
</template>

<template>
	<q-layout>

			<button v-if="showMenu" @click="$refs.leftDrawer.open()">
				menu
			</button>
			<q-toolbar-title :padding="1">
				{{ $t($route.name+'.title') }}
			</q-toolbar-title>
			<button v-if="showGoInfo" @click="goInfo()">
				file_download
			</button>
			<button v-if="showGoDownloadLinks" @click="goDownloadLinks()">
				cloud_download
			</button>

		<q-drawer swipe-only ref="leftDrawer" v-if="showMenu">

				<q-drawer-link icon="home" to="/" exact>{{ $t("login.title") }}</q-drawer-link>

				<q-drawer-link icon="search" to="/search" exact>{{ $t("search.title") }}</q-drawer-link>
				<q-drawer-link icon="file_download" to="/info" exact>{{ $t("info.title") }}</q-drawer-link>
				<q-drawer-link icon="cloud_download" to="/links" exact>{{ $t("links.title") }}</q-drawer-link>

		</q-drawer>

{{ $t("login.message") }}

						<input class="user-input" v-model="username" v-on:keypress.enter="login()">

						<button class="primary circular big login-btn" :disabled="(username.length === 0) ? true : false" @click="login()">
							{{ $t("login.button") }}
						</button>

{{ $t("login.selectLanguage") }}

						<q-select type="radio" v-model="language" :options="languages" @input="changeLanguage"></q-select>

		<router-view class="layout-view"></router-view>

	</q-layout>
</template>


fix(h5): 修复actionSheet在h5端，数据量多无法滚动

fix(h5): 修复actionSheet在h5端，数据量多无法滚动

<template>
  <uni-actionsheet @touchmove.prevent>
    <transition name="uni-fade">
      <div
        v-show="visible"
        class="uni-mask uni-actionsheet__mask"
        @click="_close(-1)"
      />
    </transition>
    <div
      :class="{ 'uni-actionsheet_toggle': visible }"
      :style="popupStyle.content"
      class="uni-actionsheet"
    >
      <div
        ref="main"
        class="uni-actionsheet__menu"
        @wheel="_handleWheel"
      >
        <!-- title占位 -->
        <div
          v-if="title"
          class="uni-actionsheet__cell"
          :style="{height:`${titleHeight}px`}"
        />
        <div
          v-if="title"
          class="uni-actionsheet__title"
        >
          {{ title }}
        </div>
        <div
          :style="{maxHeight:`${HEIGHT}px`,overflow:'hidden'}"
        >
          <div
            ref="content"
          >
            <div
              v-for="(itemTitle, index) in itemList"
              :key="index"
              :style="{ color: itemColor }"
              class="uni-actionsheet__cell"
              @click="_close(index)"
            >
              {{ itemTitle }}
            </div>
          </div>
        </div>
      </div>
      <div class="uni-actionsheet__action">
        <div
          :style="{ color: itemColor }"
          class="uni-actionsheet__cell"
          @click="_close(-1)"
        >
          取消
        </div>
      </div>
      <div :style="popupStyle.triangle" />
    </div>
    <keypress
      :disable="!visible"
      @esc="_close(-1)"
    />
  </uni-actionsheet>
</template>
<script>
import popup from './mixins/popup'
import keypress from '../../../helpers/keypress'
import touchtrack from 'uni-mixins/touchtrack'
import scroller from 'uni-mixins/scroller/index'
import {
  Friction
} from 'uni-mixins/scroller/Friction'
import {
  Spring
} from 'uni-mixins/scroller/Spring'
import {
  initScrollBounce,
  disableScrollBounce
} from 'uni-platform/helpers/scroll'

// 由于模拟滚动阻止了点击，使用自定义事件来触发点击事件
function initClick (dom) {
  const MAX_MOVE = 20
  let x = 0
  let y = 0
  dom.addEventListener('touchstart', (event) => {
    const info = event.changedTouches[0]
    x = info.clientX
    y = info.clientY
  })
  dom.addEventListener('touchend', (event) => {
    const info = event.changedTouches[0]
    if (Math.abs(info.clientX - x) < MAX_MOVE && Math.abs(info.clientY - y) < MAX_MOVE) {
      const customEvent = new CustomEvent('click', {
        bubbles: true,
        cancelable: true,
        target: event.target,
        currentTarget: event.currentTarget
      });
      ['screenX', 'screenY', 'clientX', 'clientY', 'pageX', 'pageY'].forEach(key => {
        customEvent[key] = info[key]
      })
      event.target.dispatchEvent(customEvent)
    }
  })
}

export default {
  name: 'ActionSheet',
  components: { keypress },
  mixins: [popup, touchtrack, scroller],
  props: {
    title: {
      type: String,
      default: ''
    },
    itemList: {
      type: Array,
      default () {
        return []
      }
    },
    itemColor: {
      type: String,
      default: '#000000'
    },
    popover: {
      type: Object,
      default: null
    },
    visible: {
      type: Boolean,
      default: false
    }
  },
  data () {
    return {
      HEIGHT: 260,
      contentHeight: 0,
      titleHeight: 0,
      deltaY: 0,
      scrollTop: 0
    }
  },
  watch: {
    visible (newValue) {
      if (newValue) {
        this.$nextTick(() => {
          // title 占位
          if (this.title) { this.titleHeight = document.querySelector('.uni-actionsheet__title').offsetHeight }
          // 滚动条更新
          this._scroller.update()
          // 获取contentHeight 滚动时使用
          this.contentHeight = this.$refs.content.clientHeight - this.HEIGHT
          // 给每一个项添加点击事件
          document.querySelectorAll('.uni-actionsheet__cell').forEach(item => {
            initClick(item)
          })
        })
      }
    }
  },
  mounted () {
    // 模拟滚动使用
    this.touchtrack(this.$refs.content, '_handleTrack', true)
    this.$nextTick(() => {
      this.initScroller(this.$refs.content, {
        enableY: true,
        friction: new Friction(0.0001),
        spring: new Spring(2, 90, 20),
        onScroll: (e) => {
          this.scrollTop = e.target.scrollTop
        }
      })
    })
    initScrollBounce()
  },
  methods: {
    _close (tapIndex) {
      this.$emit('close', tapIndex)
    },
    _handleTrack: function (e) {
      if (this._scroller) {
        switch (e.detail.state) {
          case 'start':
            this._handleTouchStart(e)
            disableScrollBounce({
              disable: true
            })
            break
          case 'move':
            this._handleTouchMove(e)
            break
          case 'end':
          case 'cancel':
            this._handleTouchEnd(e)
            disableScrollBounce({
              disable: false
            })
        }
      }
    },
    _handleWheel ($event) {
      const deltaY = this.deltaY + $event.deltaY
      if (Math.abs(deltaY) > 10) {
        this.scrollTop += deltaY / 3
        this.scrollTop = this.scrollTop >= this.contentHeight
          ? this.contentHeight
          : this.scrollTop <= 0
            ? 0
            : this.scrollTop
        this._scroller.scrollTo(this.scrollTop)
      } else {
        this.deltaY = deltaY
      }
      $event.preventDefault()
    }
  }
}
</script>
<style>
uni-actionsheet {
  display: block;
  box-sizing: border-box;
}

uni-actionsheet .uni-actionsheet {
  position: fixed;
  left: 6px;
  right: 6px;
  bottom: 6px;
  transform: translate(0, 100%);
  backface-visibility: hidden;
  z-index: 999;
  visibility: hidden;
  transition: transform 0.3s, visibility 0.3s;
}

uni-actionsheet .uni-actionsheet.uni-actionsheet_toggle {
  visibility: visible;
  transform: translate(0, 0);
}

uni-actionsheet .uni-actionsheet * {
  box-sizing: border-box;
}

uni-actionsheet .uni-actionsheet__menu,
uni-actionsheet .uni-actionsheet__action {
  border-radius: 5px;
  background-color: #fcfcfd;
}

uni-actionsheet .uni-actionsheet__action {
  margin-top: 6px;
}

uni-actionsheet .uni-actionsheet__cell,
uni-actionsheet .uni-actionsheet__title {
  position: relative;
  padding: 10px 6px;
  text-align: center;
  font-size: 18px;
  text-overflow: ellipsis;
  overflow: hidden;
  cursor: pointer;
}

uni-actionsheet .uni-actionsheet__title{
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    z-index: 1;
    background-color: #fff;
    border-radius: 5px 5px 0 0;
    border-bottom: 1px solid #e5e5e5;
}

uni-actionsheet .uni-actionsheet__cell:before {
  content: " ";
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  height: 1px;
  border-top: 1px solid #e5e5e5;
  color: #e5e5e5;
  transform-origin: 0 0;
  transform: scaleY(0.5);
}

uni-actionsheet .uni-actionsheet__cell:active {
  background-color: #ececec;
}

uni-actionsheet .uni-actionsheet__cell:first-child:before {
  display: none;
}

@media screen and (min-width: 500px) and (min-height: 500px) {
  .uni-mask.uni-actionsheet__mask {
    background: none;
  }
  uni-actionsheet .uni-actionsheet {
    width: 300px;
    left: 50%;
    right: auto;
    top: 50%;
    bottom: auto;
    transform: translate(-50%, -50%);
    opacity: 0;
    transition: opacity 0.3s, visibility 0.3s;
  }
  uni-actionsheet .uni-actionsheet.uni-actionsheet_toggle {
    opacity: 1;
    transform: translate(-50%, -50%);
  }
  uni-actionsheet .uni-actionsheet__menu {
    box-shadow: 0px 0 20px 5px rgba(0, 0, 0, 0.3);
  }
  uni-actionsheet .uni-actionsheet__action {
    display: none;
  }
}
</style>

<template>
  <uni-actionsheet @touchmove.prevent>
    <transition name="uni-fade">

    </transition>

          {{ title }}

          {{ itemTitle }}

          取消

    <keypress
      :disable="!visible"
      @esc="_close(-1)"
    />
  </uni-actionsheet>
</template>