Laravel

How to use svg icon in laraberg custom block?

Share your learning

If you just started to use laraberg (wordpress gutenberg plugin Js) with laravel, you might need to create some custom blocks like to highlight code, to add title blocks in the editor etc.

I have too, so I tried various ways to do that but because I was using plain javascript instead of react and build tools. I was stuck on using the svg icon for my gutenberg custom block. 

Now, I got the solution and here it is,

Add svg icon in the custom block

function registerPostTitleBlock() {

    (function (blocks, blockEditor, element, components) {

        var el = element.createElement;
        var RichText = blockEditor.RichText;
        var useBlockProps = blockEditor.useBlockProps;
        var InspectorControls = blockEditor.InspectorControls;

        const icon = el("svg", {
            viewBox: "0 0 24 24",
            xmlns: "http://www.w3.org/2000/svg"
        }, el("path", {
            d: "M6.2 5.2v13.4l5.8-4.8 5.8 4.8V5.2z"
        }));

        const block = blocks.registerBlockType('sbt-block/post-title', {
            apiVersion: 2,
            title: 'Post title',
            icon: icon,
            category: 'text',
            attributes: {
                content: {
                    type: 'string',
                    selector: 'h1.post-title',
                    source: 'text',
                }
            },
            supports: {
                customClassName: false,
            },
            edit: function (props) {
                var blockProps = useBlockProps();

                return [
                    el(
                        InspectorControls,
                        { key: 'l8' }
                    ),
                    el(RichText, {
                        tagName: 'h1',
                        key: 'lx4',
                        value: props.attributes.content,
                        preserveWhiteSpace: true,
                        __unstablePastePlainText: true,
                        onChange: content => props.setAttributes({
                            content: content
                        }),
                        placeholder: "Enter title..",
                    })
                ]
            },
            save: function (props) {
                var blockProps = useBlockProps.save();

                return el(RichText.Content,
                    Object.assign(blockProps, {
                        tagName: 'h1',
                        className: 'post-title',
                        value: props.attributes.content
                    }),
                );
            },
        })

    })(Laraberg.wordpress.blocks,
        Laraberg.wordpress.blockEditor,
        Laraberg.wordpress.element,
        Laraberg.wordpress.components);
}

I have created the react element to render the svg icon in the JavaScript, that’s it! It works 🙂

Satpal

Recent Posts

How to Switch PHP Versions in XAMPP Easily: Managing Multiple PHP Versions on Ubuntu

Today we are going to learn about managing multiple PHP versions on ubuntu with xampp.…

1 year ago

How to Use Coding to Improve Your Website’s SEO Ranking?

Let's understand about how to use coding to improve your website's SEO. In today’s computerized…

1 year ago

Most Important Linux Commands for Web Developers

Let's understand the most important linux commands for web developers. Linux, as an open-source and…

1 year ago

Top 75+ Laravel Interview Questions Asked by Top MNCs

Today we are going to discuss top 75+ Laravel interview questions asked by top MNCs.Laravel,…

1 year ago

Mailtrap Integration for Email Testing with Laravel 10

Today we will discuss about the Mailtrap integration with laravel 10 .Sending and receiving emails…

1 year ago

Firebase Cloud Messaging (FCM) with Ionic 6: Push Notifications

Today we are going to integrate FCM (Firebase Cloud Messaging) push notifications with ionic application.Firebase…

1 year ago