2023-08-04 17:59:58 +00:00
|
|
|
/**
|
|
|
|
* SPDX-FileCopyrightText: 2023 jordi fita mas <jordi@tandem.blog>
|
|
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
2023-07-26 16:52:32 +00:00
|
|
|
function ready(fn) {
|
|
|
|
if (document.readyState !== 'loading') {
|
|
|
|
fn();
|
|
|
|
} else {
|
|
|
|
document.addEventListener('DOMContentLoaded', fn);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ready(function () {
|
|
|
|
const snackBar = Object.assign(
|
|
|
|
document.body.appendChild(document.createElement('section')),
|
|
|
|
{
|
|
|
|
id: 'snackbar',
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
const errorMessage = snackBar.appendChild(document.createElement('div'));
|
|
|
|
errorMessage.setAttribute('role', 'alert');
|
|
|
|
|
|
|
|
const openClass = 'open';
|
|
|
|
const toasts = [];
|
|
|
|
let timeoutId = null;
|
|
|
|
|
|
|
|
function showError(message) {
|
|
|
|
toasts.push(message);
|
|
|
|
popUp();
|
|
|
|
}
|
|
|
|
|
|
|
|
function popUp() {
|
|
|
|
if (toasts.length === 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (errorMessage.classList.contains(openClass)) {
|
|
|
|
dismiss();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (errorMessage.innerText !== "") {
|
|
|
|
// it will show after remove calls popUp again.
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
errorMessage.innerText = toasts[0];
|
|
|
|
errorMessage.classList.add(openClass);
|
|
|
|
timeoutId = setTimeout(dismiss, 4000);
|
|
|
|
}
|
|
|
|
|
|
|
|
function dismiss() {
|
|
|
|
if (!errorMessage.classList.contains(openClass)) {
|
|
|
|
// already dismissed
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
errorMessage.classList.remove(openClass);
|
|
|
|
clearTimeout(timeoutId);
|
|
|
|
timeoutId = setTimeout(remove, 350);
|
|
|
|
}
|
|
|
|
|
|
|
|
function remove() {
|
|
|
|
clearTimeout(timeoutId);
|
|
|
|
toasts.splice(0, 1);
|
|
|
|
errorMessage.innerText = "";
|
|
|
|
popUp();
|
|
|
|
}
|
|
|
|
|
|
|
|
document.body.addEventListener('htmx:error', function (evt) {
|
|
|
|
const errorInfo = evt.detail.errorInfo;
|
|
|
|
const error = errorInfo.xhr && errorInfo.xhr.responseText || errorInfo.error;
|
|
|
|
showError(error);
|
|
|
|
});
|
|
|
|
})
|
2023-08-04 17:59:58 +00:00
|
|
|
|
|
|
|
ready(function () {
|
|
|
|
const textareas = document.querySelectorAll('textarea.html');
|
|
|
|
for (const textarea of textareas) {
|
Replace Gutenberg with GrapesJS for pages
I simply can not use Gutenberg without having it choking in its own
over-engineered architecture: using it inside a form, submits it when
clicking the button to change a paragraph’s text size; and using the
custom text size in pixels causes the paragraph component to fail.
The issue with paragraph’s custom text size is that block-editor’s
typography hook expects the font size to be a string, such as '12px' or
'1em', to call startsWith on it, but the paragraph sets an integer,
always assuming that the units are pixels. Integers do not have a
startsWith method.
Looking at the Gutenberg distributed with the current version of
WordPress, 6.3, seems that now paragraph has a selector for the units,
therefore never sets just the integer. That made me think that the
components used by the Isolated Block Editor are “mismatched”: maybe in
a previous version of block-editor it was always passed as an integer
too?
I downloaded the source code of the Isolated Block Editor and tried to
update @wordpress/block-library from version 8.14.0 to the current
version, 8.16.0, but fails with an error saying that 'core/paragraph' is
not registered, when, as far as i could check, it was. Seems that
something changed in @wordpress/blocks between version 12.14.0 and
12.16.0, so i tried to upgrade that module as well; it did not work
because @wordpress/data was not updated —do not remember the actual
error message—. Upgrading to @wordpress/data from 9.7.0 to 9.9.0 made
the registration of the 'isolated/editor' subregistry to be apparently
ignored, because the posterior select('isolated/editor') within a
withSelect hook returns undefined.
At this point, i gave up: it is obvious that the people that shit
JavaScript for Gutenberg do not care for semantic versioning, and there
are a lot of moving parts to fix just to be able to use a simple
paragraph block!
It seems, however, that there are not many open-source, block-based
_layout_ editors out there: mainly GrapesJS and Craft.JS. Craft.JS,
however, has no way to output HTML[0], requiring hacks such as using
React to generate the HTML and then pasted that shit onto the page;
totally useless for me.
I am not a fan of GrapesJS either: it seems that the “text block” is
a content-editable div, and semantic HTML can go fuck itself,
apparently. Typical webshit mentality. By strapping another huge
dependency like CKEditor, but only up to the already out-of-support
version 4, i can write headers, paragraphs and list. That’s
something, i guess.
[0]: https://github.com/prevwong/craft.js/issues/42
Part of #33.
2023-08-11 00:38:49 +00:00
|
|
|
const canvas = document.createElement('div');
|
|
|
|
textarea.parentNode.insertBefore(canvas, textarea.nextSibling);
|
|
|
|
textarea.style.display = 'none';
|
|
|
|
|
|
|
|
const textareaStorage = (editor) => {
|
|
|
|
editor.Storage.add('textarea', {
|
|
|
|
load() {
|
|
|
|
editor.setComponents(textarea.value);
|
2023-08-04 17:59:58 +00:00
|
|
|
},
|
Replace Gutenberg with GrapesJS for pages
I simply can not use Gutenberg without having it choking in its own
over-engineered architecture: using it inside a form, submits it when
clicking the button to change a paragraph’s text size; and using the
custom text size in pixels causes the paragraph component to fail.
The issue with paragraph’s custom text size is that block-editor’s
typography hook expects the font size to be a string, such as '12px' or
'1em', to call startsWith on it, but the paragraph sets an integer,
always assuming that the units are pixels. Integers do not have a
startsWith method.
Looking at the Gutenberg distributed with the current version of
WordPress, 6.3, seems that now paragraph has a selector for the units,
therefore never sets just the integer. That made me think that the
components used by the Isolated Block Editor are “mismatched”: maybe in
a previous version of block-editor it was always passed as an integer
too?
I downloaded the source code of the Isolated Block Editor and tried to
update @wordpress/block-library from version 8.14.0 to the current
version, 8.16.0, but fails with an error saying that 'core/paragraph' is
not registered, when, as far as i could check, it was. Seems that
something changed in @wordpress/blocks between version 12.14.0 and
12.16.0, so i tried to upgrade that module as well; it did not work
because @wordpress/data was not updated —do not remember the actual
error message—. Upgrading to @wordpress/data from 9.7.0 to 9.9.0 made
the registration of the 'isolated/editor' subregistry to be apparently
ignored, because the posterior select('isolated/editor') within a
withSelect hook returns undefined.
At this point, i gave up: it is obvious that the people that shit
JavaScript for Gutenberg do not care for semantic versioning, and there
are a lot of moving parts to fix just to be able to use a simple
paragraph block!
It seems, however, that there are not many open-source, block-based
_layout_ editors out there: mainly GrapesJS and Craft.JS. Craft.JS,
however, has no way to output HTML[0], requiring hacks such as using
React to generate the HTML and then pasted that shit onto the page;
totally useless for me.
I am not a fan of GrapesJS either: it seems that the “text block” is
a content-editable div, and semantic HTML can go fuck itself,
apparently. Typical webshit mentality. By strapping another huge
dependency like CKEditor, but only up to the already out-of-support
version 4, i can write headers, paragraphs and list. That’s
something, i guess.
[0]: https://github.com/prevwong/craft.js/issues/42
Part of #33.
2023-08-11 00:38:49 +00:00
|
|
|
store(data) {
|
|
|
|
const component = editor.Pages.getSelected().getMainComponent();
|
|
|
|
textarea.value = component.getInnerHTML();
|
2023-08-04 17:59:58 +00:00
|
|
|
},
|
Replace Gutenberg with GrapesJS for pages
I simply can not use Gutenberg without having it choking in its own
over-engineered architecture: using it inside a form, submits it when
clicking the button to change a paragraph’s text size; and using the
custom text size in pixels causes the paragraph component to fail.
The issue with paragraph’s custom text size is that block-editor’s
typography hook expects the font size to be a string, such as '12px' or
'1em', to call startsWith on it, but the paragraph sets an integer,
always assuming that the units are pixels. Integers do not have a
startsWith method.
Looking at the Gutenberg distributed with the current version of
WordPress, 6.3, seems that now paragraph has a selector for the units,
therefore never sets just the integer. That made me think that the
components used by the Isolated Block Editor are “mismatched”: maybe in
a previous version of block-editor it was always passed as an integer
too?
I downloaded the source code of the Isolated Block Editor and tried to
update @wordpress/block-library from version 8.14.0 to the current
version, 8.16.0, but fails with an error saying that 'core/paragraph' is
not registered, when, as far as i could check, it was. Seems that
something changed in @wordpress/blocks between version 12.14.0 and
12.16.0, so i tried to upgrade that module as well; it did not work
because @wordpress/data was not updated —do not remember the actual
error message—. Upgrading to @wordpress/data from 9.7.0 to 9.9.0 made
the registration of the 'isolated/editor' subregistry to be apparently
ignored, because the posterior select('isolated/editor') within a
withSelect hook returns undefined.
At this point, i gave up: it is obvious that the people that shit
JavaScript for Gutenberg do not care for semantic versioning, and there
are a lot of moving parts to fix just to be able to use a simple
paragraph block!
It seems, however, that there are not many open-source, block-based
_layout_ editors out there: mainly GrapesJS and Craft.JS. Craft.JS,
however, has no way to output HTML[0], requiring hacks such as using
React to generate the HTML and then pasted that shit onto the page;
totally useless for me.
I am not a fan of GrapesJS either: it seems that the “text block” is
a content-editable div, and semantic HTML can go fuck itself,
apparently. Typical webshit mentality. By strapping another huge
dependency like CKEditor, but only up to the already out-of-support
version 4, i can write headers, paragraphs and list. That’s
something, i guess.
[0]: https://github.com/prevwong/craft.js/issues/42
Part of #33.
2023-08-11 00:38:49 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const editor = grapesjs.init({
|
|
|
|
container: canvas,
|
|
|
|
height: '500px',
|
|
|
|
width: 'auto',
|
|
|
|
plugins: [
|
|
|
|
textareaStorage,
|
|
|
|
'gjs-blocks-basic',
|
|
|
|
'grapesjs-plugin-ckeditor',
|
|
|
|
'grapesjs-preset-webpage',
|
|
|
|
],
|
|
|
|
storageManager: {
|
|
|
|
type: 'textarea',
|
|
|
|
autosave: true,
|
|
|
|
autoload: true,
|
|
|
|
stepsBeforeSave: 1,
|
2023-08-04 17:59:58 +00:00
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
Replace Gutenberg with GrapesJS for pages
I simply can not use Gutenberg without having it choking in its own
over-engineered architecture: using it inside a form, submits it when
clicking the button to change a paragraph’s text size; and using the
custom text size in pixels causes the paragraph component to fail.
The issue with paragraph’s custom text size is that block-editor’s
typography hook expects the font size to be a string, such as '12px' or
'1em', to call startsWith on it, but the paragraph sets an integer,
always assuming that the units are pixels. Integers do not have a
startsWith method.
Looking at the Gutenberg distributed with the current version of
WordPress, 6.3, seems that now paragraph has a selector for the units,
therefore never sets just the integer. That made me think that the
components used by the Isolated Block Editor are “mismatched”: maybe in
a previous version of block-editor it was always passed as an integer
too?
I downloaded the source code of the Isolated Block Editor and tried to
update @wordpress/block-library from version 8.14.0 to the current
version, 8.16.0, but fails with an error saying that 'core/paragraph' is
not registered, when, as far as i could check, it was. Seems that
something changed in @wordpress/blocks between version 12.14.0 and
12.16.0, so i tried to upgrade that module as well; it did not work
because @wordpress/data was not updated —do not remember the actual
error message—. Upgrading to @wordpress/data from 9.7.0 to 9.9.0 made
the registration of the 'isolated/editor' subregistry to be apparently
ignored, because the posterior select('isolated/editor') within a
withSelect hook returns undefined.
At this point, i gave up: it is obvious that the people that shit
JavaScript for Gutenberg do not care for semantic versioning, and there
are a lot of moving parts to fix just to be able to use a simple
paragraph block!
It seems, however, that there are not many open-source, block-based
_layout_ editors out there: mainly GrapesJS and Craft.JS. Craft.JS,
however, has no way to output HTML[0], requiring hacks such as using
React to generate the HTML and then pasted that shit onto the page;
totally useless for me.
I am not a fan of GrapesJS either: it seems that the “text block” is
a content-editable div, and semantic HTML can go fuck itself,
apparently. Typical webshit mentality. By strapping another huge
dependency like CKEditor, but only up to the already out-of-support
version 4, i can write headers, paragraphs and list. That’s
something, i guess.
[0]: https://github.com/prevwong/craft.js/issues/42
Part of #33.
2023-08-11 00:38:49 +00:00
|
|
|
|
2023-08-04 17:59:58 +00:00
|
|
|
})
|