Aknaproff/resources/js/components/FieldGenerator.vue
2023-09-21 13:45:08 +01:00

733 lines
39 KiB
Vue

<template>
<div class="form-group" v-if="element.type == 'text'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="input-group">
<div class="input-group-prepend" v-if="element.prefix_icon && element.prefix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.prefix_icon"></i>
</span>
</div>
<input :type="element.subtype" class="form-control"
:name="element.name"
:placeholder="element.placeholder"
:class="[element.size, element.custom_class, element.conditional_class]"
:required="element.required && applyValidations"
v-bind="getDynamicallyGeneratedAttributeObj(element.validations, element.custom_attributes)"
:id="element.name"
:value="_.get(submitted_data, element.name, '')"
:data-msg-required="element.required_error_msg"
@change="$emit('apply_conditions')">
<div class="input-group-append" v-if="element.suffix_icon && element.suffix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.suffix_icon"></i>
</span>
</div>
</div>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'range'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class, 'mb-4 mt-3']" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="row">
<div class="col-sm-1">{{element.min}}</div>
<div class="col-sm-10">
<input type="range" :name="element.name" :required="element.required && applyValidations" :id="element.name" :min="element.min" :max="element.max" :step="element.step" :data-orientation="element.data_orientation"
:value="_.get(submitted_data, element.name, '')"
:class="[element.conditional_class]"
v-bind="getCustomAttributes(element.custom_attributes)"
:data-msg-required="element.required_error_msg"
>
</div>
<div class="col-sm-1">{{element.max}}</div>
</div>
<b>
<output :class="element.name" style="display: block;text-align:center;" :for="element.name">
{{_.get(submitted_data, element.name, '')}}
</output>
</b>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div class="form-group" v-else-if="element.type == 'calendar'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="input-group date" :id="element.name" data-target-input="nearest">
<div class="input-group-prepend"
:data-target="'#' + element.name"
data-toggle="datetimepicker"
v-if="element.prefix_icon && element.prefix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.prefix_icon"></i>
</span>
</div>
<input type="text"
class="form-control datetimepicker-input"
:data-target="'#' + element.name"
data-toggle="datetimepicker"
:name="element.name"
:id="element.name"
readonly
:class="[element.size, element.custom_class, element.conditional_class]"
:required="element.required && applyValidations"
:data-defaultDate="_.get(submitted_data, element.name, '')"
v-bind="getCustomAttributes(element.custom_attributes)"
:data-msg-required="element.required_error_msg"
/>
<div class="input-group-append"
:data-target="'#' + element.name"
data-toggle="datetimepicker"
v-if="element.suffix_icon && element.suffix_icon !== 'none'">
<div class="input-group-text">
<i :class="'fas ' + element.suffix_icon"></i>
</div>
</div>
</div>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div class="form-group" v-else-if="element.type == 'textarea'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="input-group">
<div class="input-group-prepend" v-if="element.prefix_icon && element.prefix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.prefix_icon"></i>
</span>
</div>
<textarea class="form-control"
:value="_.get(submitted_data, element.name, '')"
:rows="element.rows"
:name="element.name"
:id="element.name"
:cols="element.columns"
:placeholder="element.placeholder"
:class="[element.custom_class, element.conditional_class]"
:required="element.required && applyValidations"
v-bind="getDynamicallyGeneratedAttributeObj(element.validations, element.custom_attributes)"
@change="$emit('apply_conditions')"
:data-msg-required="element.required_error_msg"
></textarea>
<div class="input-group-append" v-if="element.suffix_icon && element.suffix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.suffix_icon"></i>
</span>
</div>
</div>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div class="form-group"
v-else-if="element.type == 'radio' || element.type == 'checkbox'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">{{element.label}}</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="row">
<div :class="[spreadColumnForElement(element)]"
v-for="(option, index) in element.options.split('\n')">
<div class="custom-control" :class="[element.type == 'radio' ? 'custom-radio' : 'custom-checkbox']">
<input class="custom-control-input"
:type="element.type"
:value="option"
v-bind="getDynamicallyGeneratedAttributeObj(element.validations, element.custom_attributes)"
:required="element.required && applyValidations"
:name="(element.type == 'checkbox' ? element.name + '[]' : element.name)"
:id="element.name +'_'+ index"
@change="$emit('apply_conditions')"
:checked="_.includes(_.get(submitted_data, element.name, ''), option)"
:class="[element.conditional_class]"
:data-msg-required="element.required_error_msg"
>
<label class="custom-control-label" :for="element.name +'_'+ index">
{{option}}
</label>
</div>
</div>
</div>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div class="form-group" v-else-if="element.type == 'dropdown'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">{{element.label}}</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="input-group">
<div class="input-group-prepend" v-if="element.prefix_icon && element.prefix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.prefix_icon"></i>
</span>
</div>
<select class="custom-select" :class="[element.size, element.custom_class, element.conditional_class]" :required="element.required && applyValidations" v-bind="getDynamicallyGeneratedAttributeObj(element.validations, element.custom_attributes)"
:id="element.name" :multiple="element.multiselect"
:name="(element.multiselect == true ? element.name + '[]' : element.name)"
@change="$emit('apply_conditions')"
:data-msg-required="element.required_error_msg"
>
<option v-for="option in element.options.split('\n')"
:selected="_.includes(_.get(submitted_data, element.name, ''), option)"
>
{{option}}
</option>
</select>
<div class="input-group-append" v-if="element.suffix_icon && element.suffix_icon !== 'none'">
<span class="input-group-text">
<i :class="'fas ' + element.suffix_icon"></i>
</span>
</div>
</div>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'heading'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<div v-html="'<' + element.tag + ' style=color:' + element.text_color + '>' + element.content + '</' + element.tag + '>'" :class="[element.custom_class]">
</div>
</div>
<div v-else-if="element.type == 'file_upload'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" class="mb-3">
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">{{element.label}}</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="dropzone" :class="[element.custom_class]" :id="element.name" v-bind="getCustomAttributes(element.custom_attributes)">
</div>
<input type="hidden" :name="element.name + '[]'" :id="element.name" :value="_.get(submitted_data, element.name, '')" :required="element.required && applyValidations" :class="element.conditional_class" :data-msg-required="element.required_error_msg">
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'text_editor'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">{{element.label}}</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<textarea :id="element.name" :name="element.name"
:required="element.required && applyValidations" class="form-control summer_note"
:class="[element.conditional_class]"
:value="_.get(submitted_data, element.name, '')"
v-bind="getCustomAttributes(element.custom_attributes)"
:data-msg-required="element.required_error_msg"
>
</textarea>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'terms_and_condition'" class="pt-3 mb-3" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<i class="fas fa-sort handle pointer font_icon_size" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<div class="custom-control custom-checkbox">
<input class="custom-control-input" type="checkbox" :name="element.name" id="terms_and_condition" :required="element.required && applyValidations" :class="[element.custom_class, element.conditional_class]" @change="$emit('apply_conditions')"
:checked="_.includes(['on'], _.get(submitted_data, element.name, ''))"
v-bind="getCustomAttributes(element.custom_attributes)"
:data-msg-required="element.required_error_msg"
>
<label class="custom-control-label" for="terms_and_condition">
<a :href="element.link" target="_blank" v-if="element.link">
{{element.label}}
</a>
<span v-else>{{element.label}}</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
</div>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'hr'" :class="[element.extras.showConfigurator ? 'active_element' : '']" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<i class="fas fa-sort handle pointer font_icon_size" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<hr :style="{'margin-top' : element.padding_top + 'px', 'margin-bottom' : element.padding_bottom + 'px', 'border-top' : element.border_size + 'px ' + element.border_type + element.border_color, 'margin-left' : element.horizontal_space + 'px', 'margin-right' : element.horizontal_space + 'px'}">
</div>
<div v-else-if="element.type == 'html_text'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span v-html="element.html_text" :class="element.custom_class"></span>
</div>
<div class="form-group" v-else-if="element.type == 'rating'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<label :for="element.name">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<span :style="{'color': settings.color.label}">{{element.label}}</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<input :id="element.name" :name="element.name"
class="star_rating" :data-stars="element.stars_to_display"
:data-min="element.min_rating" :data-max="element.max_rating"
:data-step="element.increment" :dir="element.direction"
:data-size="element.size"
type="hidden"
:required="element.required && applyValidations"
:data-msg-required="element.required_error_msg"
:class="element.conditional_class"
:value="_.get(submitted_data, element.name, '')"
>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'switch'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover()" @mouseleave="onMouseLeave(element)" >
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<div class="form-group">
<span class="switch" :class="element.size">
<input type="checkbox" class="switch" :name="element.name" :id="element.name" :required="element.required && applyValidations" @change="$emit('apply_conditions')" :class="element.conditional_class"
:checked="_.includes(['on'], _.get(submitted_data, element.name, ''))"
v-bind="getCustomAttributes(element.custom_attributes)"
:data-msg-required="element.required_error_msg"
>
<label :for="element.name">
<span :style="{'color': settings.color.label}" class="ml-2">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
</span>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
</div>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<div v-else-if="element.type == 'signature'" :class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]" @mouseover="onMouseHover" @mouseleave="onMouseLeave(element)">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<label :for="element.name">
<span :style="{'color': settings.color.label}" class="ml-2">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
<i class="fas fa-info-circle cursor-pointer modal_trigger"
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable"
:data-target="`#${element.name}_modal`"></i>
</label>
<div class="form-group">
<canvas :id="element.name" width="300" height="200" class="signature-pad" v-bind="getCustomAttributes(element.custom_attributes)">
</canvas>
<input type="hidden" :name="element.name" :id="'output_'+element.name" :value="_.get(submitted_data, element.name, '')" :required="element.required && applyValidations" :class="[element.conditional_class, 'signature']"
:data-msg-required="element.required_error_msg">
</div>
<div class="form-text">
<span :id="'clear_' + element.name" class="pointer mr-4" :title="trans('messages.clear_signature_pad')" :data-name="element.name">
<i class="far fa-times-circle"></i>
{{trans('messages.clear')}}
</span>
<span :id="'undo_' + element.name" class="pointer" :title="trans('messages.undo')" :data-name="element.name">
<i class="fas fa-undo"></i>
{{trans('messages.undo')}}
</span>
<small class="form-text text-muted" v-if="element.help_text">
{{element.help_text}}
</small>
</div>
<popover-help-text-modal
v-if="!_.isUndefined(element.popover_help_text) && element.popover_help_text.enable && element.popover_help_text.content"
:element="element"
></popover-help-text-modal>
</div>
<!-- page break -->
<div v-else-if="_.includes(['page_break'], element.type) && !applyValidations"
:class="[element.extras.showConfigurator ? 'active_element' : '']"
@mouseover="onMouseHover" @mouseleave="onMouseLeave(element)">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<div class="divider divider-secondary divider-dashed">
<div class="divider-text">
{{trans('messages.page_break')}}
</div>
</div>
</div>
<!-- /page break -->
<!-- youtube -->
<div v-else-if="element.type == 'youtube'"
class="mt-25 mb-25"
:class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]"
@mouseover="onMouseHover" @mouseleave="onMouseLeave(element)">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<label :for="element.name">
<span :style="{'color': settings.color.label}" class="ml-2">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
</label>
<div class="col-md-12">
<iframe :src="getYtEmbedUrl(element.iframe_url)"
:id="element.name"
:name="element.label" :title="element.label"
:class="[element.custom_class, element.conditional_class]"
:width="`${element.width}%`"
:height="`${element.height}`"
frameborder="0"
style="max-width: 100%;"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
</div>
</div>
<!-- /youtube -->
<!-- iframe -->
<div v-else-if="element.type == 'iframe'"
class="mt-25 mb-25"
:class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]"
@mouseover="onMouseHover" @mouseleave="onMouseLeave(element)">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<label :for="element.name">
<span :style="{'color': settings.color.label}" class="ml-2">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
</label>
<div :class="['col-md-12']">
<iframe :src="element.iframe_url"
:id="element.name"
:name="element.label" :title="element.label"
:class="[element.custom_class, element.conditional_class]"
:width="`${element.width}%`"
:height="`${element.height}`"
frameborder="0"
style="max-width: 100%;">
</iframe>
</div>
</div>
<!-- /iframe -->
<!-- pdf -->
<div v-else-if="element.type == 'pdf'"
:class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class]"
class="col-md-12" @mouseover="onMouseHover" @mouseleave="onMouseLeave(element)">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<label :for="element.name">
<span :style="{'color': settings.color.label}" class="ml-2">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
</label>
<div class="text-center col-md-12">
<iframe
v-if="!_.isEmpty(element.pdf)"
:src="`${MEDIA_URL}/${element.pdf}`"
:id="element.name"
:name="element.label" :title="element.label"
:class="[element.custom_class, element.conditional_class]"
:width="`${element.width}%`"
:height="`${element.height}`"
frameborder="0"
style="max-width: 100%;"
>
</iframe>
<img v-if="_.isEmpty(element.pdf)" class="img-fluid" :src="PDF_PLACEHOLDER">
</div>
</div>
<!-- /pdf -->
<!-- countdown -->
<div v-else-if="element.type == 'countdown'"
:class="[element.extras.showConfigurator ? 'active_element' : '', element.conditional_class, 'row']"
@mouseover="onMouseHover" @mouseleave="onMouseLeave(element)">
<i class="fas fa-sort handle pointer font_icon_size float-left mr-3" :class="[display_handler]" :title="trans('messages.drag_element_using_icon')"></i>
<label :for="element.name">
<span :style="{'color': settings.color.label}" class="ml-2">
{{element.label}}
</span>
<span :style="{'color': settings.color.required_asterisk_color}" v-if="element.required">*</span>
</label>
<div class="col-md-12">
<div :class="[element.custom_class, element.conditional_class]" >
<span :id="element.name" class="max-width-100">
</span>
</div>
</div>
</div>
<!-- /countdown -->
</template>
<script>
import PopoverHelpTextModal from './Shared/PopoverHelpText.vue';
export default {
props: {
element: Object,
settings: Object,
applyValidations: {
type: Boolean,
default: true //If passed false then validation will not be applied to field. Used while creating forms
},
submitted_data: Object
},
components:{
PopoverHelpTextModal
},
data(){
return{
display_handler:'hide',
PDF_PLACEHOLDER: APP.PDF_PLACEHOLDER,
MEDIA_URL: APP.APP_MEDIA_URL
}
},
mounted() {
this.$eventBus.$emit('callApplyConditions');
},
created() {
const self = this;
var field = self.element;
var notification_position = self.settings.notification.position;
//if spread to col option is undefined for element set to default
if (
_.includes(['radio', 'checkbox'], self.element.type) &&
_.isUndefined(self.element.spread_to_col)
) {
self.element.spread_to_col = {
enable: (!_.isUndefined(self.element.inline) && self.element.inline) ? true : false,
column: 2
};
}
$(function() {
$(".modal_trigger").on("click", function() {
let modal_id = $(this).attr('data-target');
$(modal_id).modal('toggle');
});
//input range
if (field.type == 'range') {
initialize_rangeslider(field.name);
//on change of range silder call applyConditions through event
$('#'+field.name).on('change', function() {
self.$eventBus.$emit('callApplyConditions');
});
}
//datetime picker
if (field.type == 'calendar') {
initialize_datetimepicker(field.name, field.start_date, field.end_date, field.format, field.time_format, field.disabled_days, field.enable_time_picker, field.time_picker_inline);
//on change of dateTimePicker call applyConditions through event
$('#'+field.name).on('change.datetimepicker', function() {
self.$eventBus.$emit('callApplyConditions');
});
}
if (field.type == 'file_upload') {
initialize_dropzone(field.name, field.upload_text, field.no_of_files, field.file_size_limit, field.allowed_file_type);
}
if (field.type == 'text_editor') {
initialize_text_editor(field.name, field.placeholder, field.editor_height);
}
if (field.type == 'rating') {
initialize_star_rating(field.name);
//on change of star rating call applyConditions through event
$('#'+field.name).on('rating:change', function(event, value){
self.$eventBus.$emit('callApplyConditions');
});
}
if (field.type == 'signature') {
initialize_signature_pad(field.name);
}
if (field.type == 'countdown') {
initialize_countdowntimer(field);
}
initializeToastrSettingsForForm(notification_position);
});
},
methods:{
getDynamicallyGeneratedAttributeObj(validations, attributes) {
var rules = [];
if(this.applyValidations){
_.forEach(validations, function(validation) {
var rule = 'data-rule-' + validation.rule;
var error_msg = 'data-msg-' + validation.rule;
var is_rule_required = validation.value ? validation.value : true;
rules.push({[rule]:is_rule_required, [error_msg]:validation.error_msg});
});
}
let custom_attr = this.getCustomAttributes(attributes);
let validation_rules = Object.assign({}, ...rules);
return {...validation_rules, ...custom_attr};
},
onMouseHover() {
if(!this.applyValidations){
this.display_handler = '';
}
},
onMouseLeave(element) {
if(!this.applyValidations){
this.display_handler = 'hide';
}
},
/**
* get col size for
* checkbox & radio
**/
spreadColumnForElement(element) {
let total_columns = 12;
let spread = (parseInt(element.spread_to_col.column) <= 4 ? parseInt(element.spread_to_col.column) : 4) || 2;
let default_column = 12;
if (element.spread_to_col.enable) {
default_column = _.floor(total_columns / spread);
}
return `col-md-${default_column}`;
},
getYtEmbedUrl(url) {
if(url.search("watch") != -1) {
let YT_ID = url.replace("https://www.youtube.com/watch?v=", "");
return `https://www.youtube.com/embed/${YT_ID}`;
} else if (url.search("youtu.be") != -1) {
let YT_ID = url.replace("https://youtu.be/", "");
return `https://www.youtube.com/embed/${YT_ID}`;
} else if (url.search("embed") != -1) {
let YT_ID = url.replace("https://www.youtube.com/embed/", "");
return `https://www.youtube.com/embed/${YT_ID}`;
}
},
}
}
</script>
<style scoped>
.active_element {
padding:15px;
cursor: pointer;
-webkit-box-shadow: 0px 0px 0px 2px #0293e2;
box-shadow: 0px 0px 0px 2px #0293e2;
border-radius: 10px;
}
.hide {
display: none;
}
.show {
display: block;
}
</style>