260 lines
16 KiB
JavaScript
260 lines
16 KiB
JavaScript
/**
|
|
* BLOCK: mobilizon
|
|
*
|
|
* Registering a basic block with Gutenberg.
|
|
* Simple block, renders and saves the same content without any interactivity.
|
|
*/
|
|
import * as MobilizonWrapper from './../mobilizon-helper';
|
|
// Import CSS.
|
|
import './editor.scss';
|
|
import './style.scss';
|
|
|
|
const { __ } = wp.i18n; // Import __() from wp.i18n
|
|
const { registerBlockType } = wp.blocks; // Import registerBlockType() from wp.blocks
|
|
const { RichText, InspectorControls } = wp.blockEditor;
|
|
const { Placeholder, PanelBody, PanelRow, CheckboxControl, RangeControl, ColorPicker, TextControl } = wp.components;
|
|
|
|
|
|
// Custom icon for the block
|
|
const el = wp.element.createElement;
|
|
const iconEl = el('img', { class: "wp-block-cgb-mobilizon-icon", src: "data:image/png;base64,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" });
|
|
|
|
/**
|
|
* Register: aa Gutenberg Block.
|
|
*
|
|
* Registers a new block provided a unique name and an object defining its
|
|
* behavior. Once registered, the block is made editor as an option to any
|
|
* editor interface where blocks are implemented.
|
|
*
|
|
* @link https://wordpress.org/gutenberg/handbook/block-api/
|
|
* @param {string} name Block name.
|
|
* @param {Object} settings Block settings.
|
|
* @return {?WPBlock} The block, if it has been successfully
|
|
* registered; otherwise `undefined`.
|
|
*/
|
|
registerBlockType( 'cgb/block-mobilizon', {
|
|
// Block name. Block names must be string that contains a namespace prefix. Example: my-plugin/my-custom-block.
|
|
title: __( 'Mobilizon' ), // Block title.
|
|
icon: iconEl, // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
|
|
category: 'common', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
|
|
keywords: [
|
|
__( 'mobilizon' ),
|
|
__( 'events' ),
|
|
],
|
|
attributes: {
|
|
mobilizonInputField: {
|
|
type: 'string',
|
|
default: ''
|
|
},
|
|
mobilizonInputFieldIsValid: {
|
|
type: 'boolean',
|
|
default: false
|
|
},
|
|
mobilizonInputFieldHelpText: {
|
|
type: 'string',
|
|
default: ''
|
|
},
|
|
mobilizonBaseURL: {
|
|
type: 'string',
|
|
default: ''
|
|
},
|
|
mobilizonGroupName: {
|
|
type: 'string',
|
|
default: ''
|
|
},
|
|
mobilizonEventLimit: {
|
|
type: 'int',
|
|
default: 0
|
|
},
|
|
mobilizonShowHeaderImage: {
|
|
type: 'boolean',
|
|
default: true
|
|
},
|
|
myRichText: {
|
|
type: 'string',
|
|
source: 'html',
|
|
selector: 'p'
|
|
},
|
|
toggle: {
|
|
type: 'boolean',
|
|
default: true
|
|
},
|
|
favoriteAnimal: {
|
|
type: 'string',
|
|
default: 'dogs'
|
|
},
|
|
favoriteColor: {
|
|
type: 'string',
|
|
default: '#DDDDDD'
|
|
},
|
|
activateLasers: {
|
|
type: 'boolean',
|
|
default: false
|
|
}
|
|
},
|
|
/**
|
|
* The edit function describes the structure of your block in the context of the editor.
|
|
* This represents what the editor will render when the block is used.
|
|
*
|
|
* The "edit" property must be a valid function.
|
|
*
|
|
* @link https://wordpress.org/gutenberg/handbook/block-api/block-edit-save/
|
|
*
|
|
* @param {Object} props Props.
|
|
* @returns {Mixed} JSX Component.
|
|
*/
|
|
// edit: ( props ) => {
|
|
// // Creates a <p class='wp-block-cgb-block-mobilizon'></p>.
|
|
// return (
|
|
// <div className={ props.className }>
|
|
// <p>Mobilizon Gutenberg Block</p>
|
|
// </div>
|
|
// );
|
|
// },
|
|
|
|
|
|
|
|
|
|
edit: (props) => {
|
|
const { attributes, setAttributes } = props;
|
|
async function updateAndValidateMobilizonActor(newtext) {
|
|
// Update the input-text-field, so one can see the input while typing
|
|
setAttributes({ mobilizonInputField: newtext })
|
|
// Assume that any valid string of an Mobilizon actor or instance is more than 7 characters long (May be risky!).
|
|
newtext = newtext.trim();
|
|
if (newtext.length > 7) {
|
|
// Possible Actors: @user@example.org or example.org/@user or http(s)://example.org/@user
|
|
if (newtext.includes("@")) {
|
|
// Here we may have actor+instance (actor means mobilizon-group)
|
|
// Possible formats could be "@actor@mobilizon.fr" or "https://mobilizon.fr/@actor" or even "mobilizon.fr/@actor"
|
|
var splitted = newtext.split("@");
|
|
if ( splitted.length <= 3) {
|
|
if (splitted.length === 3 && splitted[0] === "") {
|
|
var baseURL = splitted[2];
|
|
var groupName = splitted[1];
|
|
}
|
|
else {
|
|
var baseURL = splitted[0];
|
|
var groupName = splitted[1];
|
|
}
|
|
// Asume that the instance name is at least 6 characters long (may be risky)
|
|
if (baseURL.includes(".") && baseURL.length > 5) {
|
|
// Add https protocol if not present
|
|
if (!baseURL.startsWith("https://")) {
|
|
baseURL = "https://" + baseURL;
|
|
}
|
|
if ( await MobilizonWrapper.isMobilizonInstance(baseURL)) {
|
|
// Now check if the group exists as well
|
|
if ( await MobilizonWrapper.groupExists(baseURL, groupName) ) {
|
|
setAttributes({ mobilizonBaseURL: baseURL});
|
|
setAttributes({ mobilizonGroupName: groupName });
|
|
setAttributes({ mobilizonInputFieldHelpText: "" });
|
|
setAttributes({ mobilizonInputFieldIsValid: true });
|
|
} else {
|
|
var helperText = "The group " + groupName + " does not exist on " + baseURL;
|
|
setAttributes({ mobilizonInputFieldHelpText: helperText });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// Here we only have the instance domain alone, no actor (group)!
|
|
// Instance-URL must have at least one dot, an the after the first dot there must at least be two more characters for a valid domain
|
|
if (newtext.includes(".") && newtext.substring(newtext.indexOf(".")).length > 2) {
|
|
var baseURL = newtext;
|
|
// Add https protocol if not present
|
|
if (!baseURL.startsWith("https://")) {
|
|
baseURL = "https://" + baseURL;
|
|
}
|
|
if ( await MobilizonWrapper.isMobilizonInstance(baseURL)) {
|
|
setAttributes({ mobilizonBaseURL: baseURL});
|
|
setAttributes({ mobilizonGroupName: "" });
|
|
setAttributes({ mobilizonInputFieldHelpText: "" });
|
|
setAttributes({ mobilizonInputFieldIsValid: true });
|
|
} else {
|
|
var helperText = baseURL + " is not a mobilizon instance";
|
|
setAttributes({ mobilizonInputFieldHelpText: helperText });
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var helperText = newtext + " is no valid mobilizon actor"
|
|
setAttributes({ mobilizonInputFieldHelpText: helperText });
|
|
}
|
|
}
|
|
return (
|
|
<div className={ props.className }>
|
|
<InspectorControls>
|
|
<PanelBody
|
|
title="Settings"
|
|
initialOpen={true}
|
|
>
|
|
<PanelRow>
|
|
<RangeControl
|
|
label="Limit how many events are shown (0 means no limit)"
|
|
value={ attributes.mobilizonEventLimit }
|
|
onChange={ ( value ) => setAttributes({ mobilizonEventLimit: value })}
|
|
min={ 0 }
|
|
max={ 20 }
|
|
/>
|
|
</PanelRow>
|
|
<PanelRow>
|
|
<CheckboxControl
|
|
label="Header Images"
|
|
help="Set if the header images for each event are shown in the list?"
|
|
checked={attributes.mobilizonShowHeaderImage}
|
|
onChange={(newval) => setAttributes({ mobilizonShowHeaderImage: newval })}
|
|
/>
|
|
</PanelRow>
|
|
</PanelBody>
|
|
</InspectorControls>
|
|
<Placeholder icon={ iconEl } label="Mobilizon Event List">
|
|
<TextControl
|
|
tagName="h2"
|
|
placeholder="@example@mobilizon.fr"
|
|
label="Fediverse handle or URL of a Mobilizon-group or Mobilizon-Instance-URL"
|
|
help={ attributes.mobilizonInputFieldHelpText }
|
|
value={ attributes.mobilizonInputField }
|
|
onChange={(newtext) => updateAndValidateMobilizonActor(newtext)}
|
|
/>
|
|
</Placeholder>
|
|
</div>
|
|
);
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* The save function defines the way in which the different attributes should be combined
|
|
* into the final markup, which is then serialized by Gutenberg into post_content.
|
|
*
|
|
* The "save" property must be specified and must be a valid function.
|
|
*
|
|
* @link https://wordpress.org/gutenberg/handbook/block-api/block-edit-save/
|
|
*
|
|
* @param {Object} props Props.
|
|
* @returns {Mixed} JSX Frontend HTML.
|
|
*/
|
|
save: ( props ) => {
|
|
return ( null );
|
|
},
|
|
} );
|