first commit
This commit is contained in:
162
vendor/wpcfto/metaboxes/general_components/js/tinymce.js
vendored
Normal file
162
vendor/wpcfto/metaboxes/general_components/js/tinymce.js
vendored
Normal file
@@ -0,0 +1,162 @@
|
||||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
"use strict";
|
||||
|
||||
Vue.component('wpcfto_tinymce', {
|
||||
props: ['fields', 'field_label', 'field_name', 'field_id', 'field_value', 'required'],
|
||||
data: function() {
|
||||
return {
|
||||
value: this.field_value || '', // initialize with prop value
|
||||
editorInitialized: false
|
||||
};
|
||||
},
|
||||
mounted: function() {
|
||||
const vm = this;
|
||||
// Initialize TinyMCE on the hidden textarea (with id = field_id)
|
||||
tinymce.init({
|
||||
selector: `#${this.field_id}`,
|
||||
height: 400,
|
||||
menubar: false,
|
||||
highlight_on_focus: false,
|
||||
plugins: 'advlist autolink lists link image charmap preview anchor searchreplace visualblocks code fullscreen insertdatetime table code help wordcount',
|
||||
toolbar: 'undo redo | formatselect | bold italic backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | code wp_media | help',
|
||||
setup: function(editor) {
|
||||
editor.on('init', function() {
|
||||
// Set initial content from Vue data
|
||||
editor.setContent(vm.value || '');
|
||||
vm.editorInitialized = true;
|
||||
});
|
||||
editor.on('Change KeyUp', function() {
|
||||
const content = editor.getContent();
|
||||
vm.value = content;
|
||||
vm.$emit('wpcfto-get-value', content);
|
||||
});
|
||||
editor.on('Paste', function (e) {
|
||||
var clipboardData = e.clipboardData || e.originalEvent.clipboardData;
|
||||
if (clipboardData && clipboardData.items) {
|
||||
for (var i = 0; i < clipboardData.items.length; i++) {
|
||||
var item = clipboardData.items[i];
|
||||
if (item.type.indexOf('image') !== -1) {
|
||||
var file = item.getAsFile();
|
||||
|
||||
// Upload the file to server here via AJAX
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
formData.append('action', 'upload_pasted_image');
|
||||
formData.append('_wpnonce', wpcfto_tinymce.nonce);
|
||||
|
||||
fetch(ajaxurl, {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
// Insert uploaded image URL into editor
|
||||
editor.insertContent('<img src="' + data.data.url + '" />');
|
||||
}
|
||||
})
|
||||
.catch(console.error);
|
||||
|
||||
// Prevent default paste to avoid blob URL insertion
|
||||
e.preventDefault();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
editor.ui.registry.addButton('wp_media', {
|
||||
icon: 'image',
|
||||
tooltip: 'Insert Media',
|
||||
onAction: function() {
|
||||
// Open WordPress media modal
|
||||
var frame = wp.media({
|
||||
title: 'Select or Upload Media',
|
||||
button: {
|
||||
text: 'Insert into editor'
|
||||
},
|
||||
multiple: false
|
||||
});
|
||||
|
||||
frame.on('select', function() {
|
||||
var attachment = frame.state().get('selection').first().toJSON();
|
||||
// Insert media HTML into TinyMCE editor
|
||||
if (attachment.type === 'image') {
|
||||
editor.insertContent('<img src="' + attachment.url + '" alt="' + (attachment.alt || '') + '" />');
|
||||
} else if (attachment.type === 'video') {
|
||||
editor.insertContent('<video controls src="' + attachment.url + '"></video>');
|
||||
} else {
|
||||
// For other media types, insert a link
|
||||
editor.insertContent('<a href="' + attachment.url + '">' + attachment.filename + '</a>');
|
||||
}
|
||||
});
|
||||
|
||||
frame.open();
|
||||
}
|
||||
});
|
||||
},
|
||||
// Use your self-hosted skin path if needed, e.g.:
|
||||
skin_url: '/wp-content/plugins/formipay/vendor/wpcfto/metaboxes/assets/vendors/tinymce/skins/ui/oxide',
|
||||
content_css: '/wp-content/plugins/formipay/vendor/wpcfto/metaboxes/assets/vendors/tinymce/skins/content/default/content.min.css',
|
||||
license_key: 'gpl',
|
||||
branding: false,
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
// Properly remove TinyMCE instance when component is destroyed
|
||||
if (tinymce.get(this.field_id)) {
|
||||
tinymce.get(this.field_id).remove();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
enterHint: function(hint) {
|
||||
this.value += ' {{' + hint + '}}';
|
||||
if (tinymce.get(this.field_id)) {
|
||||
tinymce.get(this.field_id).setContent(this.value);
|
||||
}
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<div class="wpcfto_generic_field wpcfto_generic_field_trumbowyg">
|
||||
<wpcfto_fields_aside_before
|
||||
:fields="fields"
|
||||
:field_label="field_label"
|
||||
:required="fields.required === true"
|
||||
></wpcfto_fields_aside_before>
|
||||
<div class="wpcfto-field-content">
|
||||
<div class="hints" v-if="fields.hints && Object.keys(fields.hints).length">
|
||||
<span
|
||||
v-for="(hint_text, hint_key) in fields.hints"
|
||||
:key="hint_key"
|
||||
@click="enterHint(hint_key)"
|
||||
class="hint-token"
|
||||
>{{ hint_text }}</span>
|
||||
</div>
|
||||
<!-- Replace <vue-trumbowyg> with a simple textarea for TinyMCE -->
|
||||
<textarea
|
||||
:id="field_id"
|
||||
:name="field_name"
|
||||
:required="fields.required === true"
|
||||
style="width: 100%; min-height: 300px;"
|
||||
></textarea>
|
||||
<!-- Hidden textarea for form submission and validation (optional) -->
|
||||
<textarea
|
||||
:name="field_name"
|
||||
:id="field_id + '_hidden'"
|
||||
v-model="value"
|
||||
:required="fields.required === true"
|
||||
style="display:none;"
|
||||
></textarea>
|
||||
</div>
|
||||
<wpcfto_fields_aside_after :fields="fields"></wpcfto_fields_aside_after>
|
||||
</div>
|
||||
`,
|
||||
watch: {
|
||||
value: function(newValue) {
|
||||
this.$emit('wpcfto-get-value', newValue);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWdWUiLCJjb21wb25lbnQiLCJWdWVUcnVtYm93eWciLCJwcm9wcyIsImRhdGEiLCJ2YWx1ZSIsImNvbnRlbnQiLCJjb25maWciLCJidG5zIiwidGVtcGxhdGUiLCJtb3VudGVkIiwiZmllbGRfdmFsdWUiLCIkc2V0IiwibWV0aG9kcyIsImVudGVySGludCIsImhpbnQiLCJ3YXRjaCIsIl92YWx1ZSIsIiRlbWl0Il0sInNvdXJjZXMiOlsiZmFrZV8zMTAwMmFlNy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuVnVlLmNvbXBvbmVudCgndnVlLXRydW1ib3d5ZycsIFZ1ZVRydW1ib3d5Z1tcImRlZmF1bHRcIl0pO1xuVnVlLmNvbXBvbmVudCgnd3BjZnRvX3RydW1ib3d5ZycsIHtcbiAgcHJvcHM6IFsnZmllbGRzJywgJ2ZpZWxkX2xhYmVsJywgJ2ZpZWxkX25hbWUnLCAnZmllbGRfaWQnLCAnZmllbGRfdmFsdWUnXSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6ICcnLFxuICAgICAgY29udGVudDogbnVsbCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBidG5zOiBbWyd2aWV3SFRNTCddLCBbJ3VuZG8nLCAncmVkbyddLCAvLyBPbmx5IHN1cHBvcnRlZCBpbiBCbGluayBicm93c2Vyc1xuICAgICAgICBbJ2Zvcm1hdHRpbmcnXSwgWydzdHJvbmcnLCAnZW0nLCAnZGVsJ10sIFsnZm9yZUNvbG9yJywgJ2JhY2tDb2xvciddLCBbJ2xpbmsnXSwgWydpbnNlcnRJbWFnZSddLCBbJ2p1c3RpZnlMZWZ0JywgJ2p1c3RpZnlDZW50ZXInLCAnanVzdGlmeVJpZ2h0JywgJ2p1c3RpZnlGdWxsJ10sIFsndW5vcmRlcmVkTGlzdCcsICdvcmRlcmVkTGlzdCddLCBbJ2hvcml6b250YWxSdWxlJ10sIFsncmVtb3ZlZm9ybWF0J10sIFsnZnVsbHNjcmVlbiddXVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHRlbXBsYXRlOiBcIlxcbiAgICAgICAgPHRlbXBsYXRlPlxcbiAgICAgICAgICAgIDxkaXY+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIndwY2Z0b19nZW5lcmljX2ZpZWxkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIndwY2Z0by1maWVsZC1hc2lkZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHYtaHRtbD1cXFwiZmllbGRfbGFiZWxcXFwiIGNsYXNzPVxcXCJ3cGNmdG8tZmllbGQtYXNpZGVfX2xhYmVsXFxcIj48L2xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJ3cGNmdG8tZmllbGQtY29udGVudFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaGludHNcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBAY2xpY2s9XFxcImVudGVySGludChoaW50X2tleSlcXFwiIHYtZm9yPVxcXCIoaGludF90ZXh0LCBoaW50X2tleSkgaW4gZmllbGRzLmhpbnRzXFxcIj57e2hpbnRfdGV4dH19PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8dnVlLXRydW1ib3d5ZyB2LW1vZGVsPVxcXCJ2YWx1ZVxcXCIgOmNvbmZpZz1cXFwiY29uZmlnXFxcIiAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgbmFtZT1cXFwiY29udGVudFxcXCI+XFxuICAgICAgICAgICAgICAgIDwvdnVlLXRydW1ib3d5Zz5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvdGVtcGxhdGU+XCIsXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkX3ZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy4kc2V0KHRoaXMsICd2YWx1ZScsIHRoaXMuZmllbGRfdmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGVudGVySGludDogZnVuY3Rpb24gZW50ZXJIaW50KGhpbnQpIHtcbiAgICAgIHRoaXMudmFsdWUgKz0gJyB7eycgKyBoaW50ICsgJ319JztcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgdGhpcy4kZW1pdCgnd3BjZnRvLWdldC12YWx1ZScsIF92YWx1ZSk7XG4gICAgfVxuICB9XG59KTsiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBQSxHQUFHLENBQUNDLFNBQUosQ0FBYyxlQUFkLEVBQStCQyxZQUFZLENBQUMsU0FBRCxDQUEzQztBQUNBRixHQUFHLENBQUNDLFNBQUosQ0FBYyxrQkFBZCxFQUFrQztFQUNoQ0UsS0FBSyxFQUFFLENBQUMsUUFBRCxFQUFXLGFBQVgsRUFBMEIsWUFBMUIsRUFBd0MsVUFBeEMsRUFBb0QsYUFBcEQsQ0FEeUI7RUFFaENDLElBQUksRUFBRSxTQUFTQSxJQUFULEdBQWdCO0lBQ3BCLE9BQU87TUFDTEMsS0FBSyxFQUFFLEVBREY7TUFFTEMsT0FBTyxFQUFFLElBRko7TUFHTEMsTUFBTSxFQUFFO1FBQ05DLElBQUksRUFBRSxDQUFDLENBQUMsVUFBRCxDQUFELEVBQWUsQ0FBQyxNQUFELEVBQVMsTUFBVCxDQUFmLEVBQWlDO1FBQ3ZDLENBQUMsWUFBRCxDQURNLEVBQ1UsQ0FBQyxRQUFELEVBQVcsSUFBWCxFQUFpQixLQUFqQixDQURWLEVBQ21DLENBQUMsV0FBRCxFQUFjLFdBQWQsQ0FEbkMsRUFDK0QsQ0FBQyxNQUFELENBRC9ELEVBQ3lFLENBQUMsYUFBRCxDQUR6RSxFQUMwRixDQUFDLGFBQUQsRUFBZ0IsZUFBaEIsRUFBaUMsY0FBakMsRUFBaUQsYUFBakQsQ0FEMUYsRUFDMkosQ0FBQyxlQUFELEVBQWtCLGFBQWxCLENBRDNKLEVBQzZMLENBQUMsZ0JBQUQsQ0FEN0wsRUFDaU4sQ0FBQyxjQUFELENBRGpOLEVBQ21PLENBQUMsWUFBRCxDQURuTztNQURBO0lBSEgsQ0FBUDtFQVFELENBWCtCO0VBWWhDQyxRQUFRLEVBQUUscXhCQVpzQjtFQWFoQ0MsT0FBTyxFQUFFLFNBQVNBLE9BQVQsR0FBbUI7SUFDMUIsSUFBSSxPQUFPLEtBQUtDLFdBQVosS0FBNEIsV0FBaEMsRUFBNkM7TUFDM0MsS0FBS0MsSUFBTCxDQUFVLElBQVYsRUFBZ0IsT0FBaEIsRUFBeUIsS0FBS0QsV0FBOUI7SUFDRDtFQUNGLENBakIrQjtFQWtCaENFLE9BQU8sRUFBRTtJQUNQQyxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQkMsSUFBbkIsRUFBeUI7TUFDbEMsS0FBS1YsS0FBTCxJQUFjLFFBQVFVLElBQVIsR0FBZSxJQUE3QjtJQUNEO0VBSE0sQ0FsQnVCO0VBdUJoQ0MsS0FBSyxFQUFFO0lBQ0xYLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWVZLE1BQWYsRUFBdUI7TUFDNUIsS0FBS0MsS0FBTCxDQUFXLGtCQUFYLEVBQStCRCxNQUEvQjtJQUNEO0VBSEk7QUF2QnlCLENBQWxDIn0=
|
||||
},{}]},{},[1])
|
||||
Reference in New Issue
Block a user