Remove unused blade settings pages not linked from UI Convert remaining frontend pages to SPA actions Convert settings user_settings and general to SPA actions Convert settings profile pages to SPA actions Convert contacts and projects add/edit pages to SPA actions Convert clients add/edit page to SPA action with loading pattern Refactor component scoped IDs from $id to $sid Fix jqhtml comment syntax and implement universal error component system Update all application code to use new unified error system Remove all backwards compatibility - unified error system complete Phase 5: Remove old response classes Phase 3-4: Ajax response handler sends new format, old helpers deprecated Phase 2: Add client-side unified error foundation Phase 1: Add server-side unified error foundation Add unified Ajax error response system with constants 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
54 lines
6.1 KiB
JavaScript
Executable File
54 lines
6.1 KiB
JavaScript
Executable File
"use strict";
|
|
|
|
class Rich_Text_Editor extends Component {
|
|
on_ready() {
|
|
const $editor = this.$sid('editor');
|
|
|
|
// Toolbar button handlers
|
|
this.$sid('toolbar').find('[data-command]').on('click', e => {
|
|
e.preventDefault();
|
|
const command = $(e.currentTarget).attr('data-command');
|
|
if (command === 'createLink') {
|
|
const url = prompt('Enter URL:');
|
|
if (url) {
|
|
document.execCommand(command, false, url);
|
|
}
|
|
} else {
|
|
document.execCommand(command, false, null);
|
|
}
|
|
$editor.focus();
|
|
});
|
|
|
|
// Track changes
|
|
$editor.on('input', () => {
|
|
if (this.args.on_change) {
|
|
this.args.on_change(this.get_value());
|
|
}
|
|
});
|
|
|
|
// Prevent default behavior on paste (optional - can be customized)
|
|
$editor.on('paste', e => {
|
|
if (this.args.plain_text_paste) {
|
|
e.preventDefault();
|
|
const text = e.originalEvent.clipboardData.getData('text/plain');
|
|
document.execCommand('insertText', false, text);
|
|
}
|
|
});
|
|
}
|
|
get_value() {
|
|
return this.$sid('editor').html();
|
|
}
|
|
get_text() {
|
|
return this.$sid('editor').text();
|
|
}
|
|
set_value(html) {
|
|
this.$sid('editor').html(html);
|
|
}
|
|
clear() {
|
|
this.$sid('editor').empty();
|
|
}
|
|
focus() {
|
|
this.$sid('editor').focus();
|
|
}
|
|
}
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSaWNoX1RleHRfRWRpdG9yIiwiSnFodG1sX0NvbXBvbmVudCIsIm9uX3JlYWR5IiwiJGVkaXRvciIsIiRpZCIsImZpbmQiLCJvbiIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1hbmQiLCIkIiwiY3VycmVudFRhcmdldCIsImF0dHIiLCJ1cmwiLCJwcm9tcHQiLCJkb2N1bWVudCIsImV4ZWNDb21tYW5kIiwiZm9jdXMiLCJhcmdzIiwib25fY2hhbmdlIiwiZ2V0X3ZhbHVlIiwicGxhaW5fdGV4dF9wYXN0ZSIsInRleHQiLCJvcmlnaW5hbEV2ZW50IiwiY2xpcGJvYXJkRGF0YSIsImdldERhdGEiLCJodG1sIiwiZ2V0X3RleHQiLCJzZXRfdmFsdWUiLCJjbGVhciIsImVtcHR5Il0sInNvdXJjZXMiOlsicnN4L3RoZW1lL2NvbXBvbmVudHMvX2FyY2hpdmVkL3VuZmluaXNoZWQvUmljaF9UZXh0X0VkaXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBSaWNoX1RleHRfRWRpdG9yIGV4dGVuZHMgSnFodG1sX0NvbXBvbmVudCB7XG4gICAgb25fcmVhZHkoKSB7XG4gICAgICAgIGNvbnN0ICRlZGl0b3IgPSB0aGlzLiRpZCgnZWRpdG9yJyk7XG5cbiAgICAgICAgLy8gVG9vbGJhciBidXR0b24gaGFuZGxlcnNcbiAgICAgICAgdGhpcy4kaWQoJ3Rvb2xiYXInKS5maW5kKCdbZGF0YS1jb21tYW5kXScpLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gJChlLmN1cnJlbnRUYXJnZXQpLmF0dHIoJ2RhdGEtY29tbWFuZCcpO1xuXG4gICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ2NyZWF0ZUxpbmsnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gcHJvbXB0KCdFbnRlciBVUkw6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgdXJsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJGVkaXRvci5mb2N1cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUcmFjayBjaGFuZ2VzXG4gICAgICAgICRlZGl0b3Iub24oJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJncy5vbl9jaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyZ3Mub25fY2hhbmdlKHRoaXMuZ2V0X3ZhbHVlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3Igb24gcGFzdGUgKG9wdGlvbmFsIC0gY2FuIGJlIGN1c3RvbWl6ZWQpXG4gICAgICAgICRlZGl0b3Iub24oJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3MucGxhaW5fdGV4dF9wYXN0ZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsIHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRfdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRpZCgnZWRpdG9yJykuaHRtbCgpO1xuICAgIH1cblxuICAgIGdldF90ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaWQoJ2VkaXRvcicpLnRleHQoKTtcbiAgICB9XG5cbiAgICBzZXRfdmFsdWUoaHRtbCkge1xuICAgICAgICB0aGlzLiRpZCgnZWRpdG9yJykuaHRtbChodG1sKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy4kaWQoJ2VkaXRvcicpLmVtcHR5KCk7XG4gICAgfVxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuJGlkKCdlZGl0b3InKS5mb2N1cygpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxnQkFBZ0IsU0FBU0MsZ0JBQWdCLENBQUM7RUFDNUNDLFFBQVFBLENBQUEsRUFBRztJQUNQLE1BQU1DLE9BQU8sR0FBRyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxRQUFRLENBQUM7O0lBRWxDO0lBQ0EsSUFBSSxDQUFDQSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDQyxFQUFFLENBQUMsT0FBTyxFQUFHQyxDQUFDLElBQUs7TUFDMURBLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7TUFDbEIsTUFBTUMsT0FBTyxHQUFHQyxDQUFDLENBQUNILENBQUMsQ0FBQ0ksYUFBYSxDQUFDLENBQUNDLElBQUksQ0FBQyxjQUFjLENBQUM7TUFFdkQsSUFBSUgsT0FBTyxLQUFLLFlBQVksRUFBRTtRQUMxQixNQUFNSSxHQUFHLEdBQUdDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDaEMsSUFBSUQsR0FBRyxFQUFFO1VBQ0xFLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDUCxPQUFPLEVBQUUsS0FBSyxFQUFFSSxHQUFHLENBQUM7UUFDN0M7TUFDSixDQUFDLE1BQU07UUFDSEUsUUFBUSxDQUFDQyxXQUFXLENBQUNQLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO01BQzlDO01BRUFOLE9BQU8sQ0FBQ2MsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDOztJQUVGO0lBQ0FkLE9BQU8sQ0FBQ0csRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNO01BQ3RCLElBQUksSUFBSSxDQUFDWSxJQUFJLENBQUNDLFNBQVMsRUFBRTtRQUNyQixJQUFJLENBQUNELElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUN6QztJQUNKLENBQUMsQ0FBQzs7SUFFRjtJQUNBakIsT0FBTyxDQUFDRyxFQUFFLENBQUMsT0FBTyxFQUFHQyxDQUFDLElBQUs7TUFDdkIsSUFBSSxJQUFJLENBQUNXLElBQUksQ0FBQ0csZ0JBQWdCLEVBQUU7UUFDNUJkLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7UUFDbEIsTUFBTWMsSUFBSSxHQUFHZixDQUFDLENBQUNnQixhQUFhLENBQUNDLGFBQWEsQ0FBQ0MsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNoRVYsUUFBUSxDQUFDQyxXQUFXLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRU0sSUFBSSxDQUFDO01BQ25EO0lBQ0osQ0FBQyxDQUFDO0VBQ047RUFFQUYsU0FBU0EsQ0FBQSxFQUFHO0lBQ1IsT0FBTyxJQUFJLENBQUNoQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUNzQixJQUFJLENBQUMsQ0FBQztFQUNwQztFQUVBQyxRQUFRQSxDQUFBLEVBQUc7SUFDUCxPQUFPLElBQUksQ0FBQ3ZCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQ2tCLElBQUksQ0FBQyxDQUFDO0VBQ3BDO0VBRUFNLFNBQVNBLENBQUNGLElBQUksRUFBRTtJQUNaLElBQUksQ0FBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQ3NCLElBQUksQ0FBQ0EsSUFBSSxDQUFDO0VBQ2pDO0VBRUFHLEtBQUtBLENBQUEsRUFBRztJQUNKLElBQUksQ0FBQ3pCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzBCLEtBQUssQ0FBQyxDQUFDO0VBQzlCO0VBRUFiLEtBQUtBLENBQUEsRUFBRztJQUNKLElBQUksQ0FBQ2IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDYSxLQUFLLENBQUMsQ0FBQztFQUM5QjtBQUNKIiwiaWdub3JlTGlzdCI6W119
|