<template>
  <div class="tinymce-container">
    <form class="tiny-mce-editor" role="form" :action="updateUrl" accept-charset="UTF-8" data-remote="true" method="post">
      <input type="hidden" name="_method" value="patch">
      <div class="hidden tinymce-cancel-button mce-widget mce-btn mce-menubtn mce-flow-layout-item mce-btn-has-text pull-right" tabindex="-1">
        <button type="button" tabindex="-1">
          <span class="fas fa-times"></span>
          <span class="mce-txt">{{ i18n.t('general.cancel')  }}</span>
        </button>
      </div>
      <div class="hidden tinymce-save-button mce-widget mce-btn mce-menubtn mce-flow-layout-item mce-btn-has-text mce-last pull-right" tabindex="-1">
        <button type="button" tabindex="-1">
          <span class="fas fa-check"></span>
          <span class="mce-txt">{{ i18n.t('general.save') }}</span>
        </button>
      </div>
      <div class="hidden tinymce-status-badge pull-right">
        <i class="fas fa-check-circle"></i>
        <span>{{ i18n.t('tiny_mce.saved_label') }}</span>
      </div>
      <div :id="`${objectType}_view_${objectId}`"
           @click="initTinymce"
           v-html="value_html"
           class="ql-editor tinymce-view"
           :data-placeholder="placeholder"
           :data-tinymce-init="`tinymce-${objectType}-description-${objectId}`">
      </div>
      <div class="form-group">
        <textarea :id="`${objectType}_textarea_${objectId}`"
                  class="form-control hidden"
                  :placeholder="placeholder"
                  autocomplete="off"
                  :data-tinymce-object="`tinymce-${objectType}-description-${objectId}`"
                  :data-object-type="objectType"
                  :data-object-id="objectId"
                  :data-highlightjs-path="this.getStaticUrl('highlightjs-url')"
                  :data-last-updated="lastUpdated * 1000"
                  :data-tinymce-asset-path="this.getStaticUrl('tiny-mce-assets-url')"
                  :value="value"
                  cols="120"
                  rows="10"
                  :name="fieldName"
                  aria-hidden="true">
        </textarea>
        <input type="hidden" id="tiny-mce-images" name="tiny_mce_images" value="[]">
      </div>
    </form>
  </div>
</template>

<script>
  export default {
    name: 'Tinymce',
    props: {
      value: String,
      value_html: String,
      placeholder: String,
      updateUrl: String,
      objectType: String,
      objectId: Number,
      fieldName: String,
      lastUpdated: Number,
      inEditMode: Boolean
    },
    watch: {
      inEditMode() {
        if (this.inEditMode) {
          this.initTinymce()
        }
      }
    },
    methods: {
      initTinymce() {
        let textArea = `#${this.objectType}_textarea_${this.objectId}`;
        TinyMCE.init(textArea, (data) => {
          if (data) {
            this.$emit('update', data)
          }
          this.$emit('editingDisabled')
        });
        this.$emit('editingEnabled')
      },

      getStaticUrl(name) {
        return $(`meta[name=\'${name}\']`).attr('content');
      }
    }
  }
</script>