From 014a92e84f1da8de5749fbe0cbcfd4768b39b243 Mon Sep 17 00:00:00 2001 From: iseulde <ella@iseulde.com> Date: Wed, 8 Mar 2017 17:00:37 +0100 Subject: [PATCH] Register element block group and create separate map --- tinymce-single/blocks.js | 23 ++++++++++++------- .../blocks/elements/blockquote/register.js | 3 ++- .../blocks/elements/headings/register.js | 8 +++++-- .../elements/horizontal-rule/register.js | 3 ++- .../blocks/elements/lists/register.js | 7 +++++- .../blocks/elements/paragraph/register.js | 3 ++- .../blocks/elements/preformatted/register.js | 7 +++++- 7 files changed, 39 insertions(+), 15 deletions(-) diff --git a/tinymce-single/blocks.js b/tinymce-single/blocks.js index b7518884cad5b..39633a1908fea 100644 --- a/tinymce-single/blocks.js +++ b/tinymce-single/blocks.js @@ -4,19 +4,23 @@ _blocks = {}; _controls = {}; + var _elementMap = {}; + wp.blocks = { registerBlock: function( settings ) { // Note, elements should probably only be registered by core. // Maybe for each block, we should offer to extend the settings (add buttons). + var namespace = settings.namespace || 'elements'; + var id = namespace + ':' + settings.name; + + _blocks[ id ] = settings; + _blocks[ id ]._id = id; + if ( settings.elements ) { settings.elements.forEach( function( element ) { - _blocks[ 'element:' + element ] = settings; - _blocks[ 'element:' + element ]._id = 'element:' + element; + _elementMap[ element ] = id; } ); - } else if ( settings.namespace && settings.name ) { - _blocks[ settings.namespace + ':' + settings.name ] = settings; - _blocks[ settings.namespace + ':' + settings.name ]._id = settings.namespace + ':' + settings.name; } }, registerControl: function( name, settings ) { @@ -29,10 +33,13 @@ return _controls[ name ]; }, getBlockSettingsByElement: function( element ) { - var blockType = element.getAttribute( 'data-wp-block-type' ); - var nodeName = element.nodeName.toLowerCase(); + var id = element.getAttribute( 'data-wp-block-type' ); + + if ( ! id ) { + id = _elementMap[ element.nodeName.toLowerCase() ]; + } - return this.getBlockSettings( blockType || 'element:' + nodeName ); + return this.getBlockSettings( id ); }, getBlocks: function() { return _blocks; diff --git a/tinymce-single/blocks/elements/blockquote/register.js b/tinymce-single/blocks/elements/blockquote/register.js index 04f05d9918b5d..ce4550616d6a1 100644 --- a/tinymce-single/blocks/elements/blockquote/register.js +++ b/tinymce-single/blocks/elements/blockquote/register.js @@ -1,6 +1,7 @@ window.wp.blocks.registerBlock( { - elements: [ 'blockquote' ], + name: 'blockquote', displayName: 'Quote', + elements: [ 'blockquote' ], type: 'text', icon: 'gridicons-quote', controls: [ diff --git a/tinymce-single/blocks/elements/headings/register.js b/tinymce-single/blocks/elements/headings/register.js index 23f520c46b6c1..20b166c097d46 100644 --- a/tinymce-single/blocks/elements/headings/register.js +++ b/tinymce-single/blocks/elements/headings/register.js @@ -27,10 +27,14 @@ } wp.blocks.registerBlock( { - elements: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], + name: 'heading', displayName: 'Heading', + elements: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], type: 'text', icon: 'gridicons-heading', - controls: getControls() + controls: getControls(), + insert: function() { + + } } ); } )( window.wp ); diff --git a/tinymce-single/blocks/elements/horizontal-rule/register.js b/tinymce-single/blocks/elements/horizontal-rule/register.js index 3d01c4ce5c455..5459fcc2e3f44 100644 --- a/tinymce-single/blocks/elements/horizontal-rule/register.js +++ b/tinymce-single/blocks/elements/horizontal-rule/register.js @@ -1,7 +1,8 @@ window.wp.blocks.registerBlock( { + name: 'hortizontal-rule', + displayName: 'Horizontal Rule', elements: [ 'hr' ], type: 'separator', - displayName: 'Horizontal Rule', icon: 'gridicons-minus', insert: function( block ) { block.parentNode.replaceChild( document.createElement( 'hr' ), block ); diff --git a/tinymce-single/blocks/elements/lists/register.js b/tinymce-single/blocks/elements/lists/register.js index e17561c06b319..62c87909e7003 100644 --- a/tinymce-single/blocks/elements/lists/register.js +++ b/tinymce-single/blocks/elements/lists/register.js @@ -1,4 +1,6 @@ window.wp.blocks.registerBlock( { + name: 'list', + displayName: 'List', elements: [ 'ul', 'ol' ], type: 'text', icon: 'gridicons-list-unordered', @@ -28,5 +30,8 @@ window.wp.blocks.registerBlock( { } } } - ] + ], + insert: function( block, editor ) { + editor.execCommand( 'InsertUnorderedList' ); + } } ); diff --git a/tinymce-single/blocks/elements/paragraph/register.js b/tinymce-single/blocks/elements/paragraph/register.js index 5d05c61055665..b346a55f14dfb 100644 --- a/tinymce-single/blocks/elements/paragraph/register.js +++ b/tinymce-single/blocks/elements/paragraph/register.js @@ -1,7 +1,8 @@ window.wp.blocks.registerBlock( { + name: 'paragraph', + displayName: 'Paragraph', elements: [ 'p' ], type: 'text', - displayName: 'Paragraph', icon: 'gridicons-posts', controls: [ { diff --git a/tinymce-single/blocks/elements/preformatted/register.js b/tinymce-single/blocks/elements/preformatted/register.js index 48410627428b7..c15cefe7f53af 100644 --- a/tinymce-single/blocks/elements/preformatted/register.js +++ b/tinymce-single/blocks/elements/preformatted/register.js @@ -1,4 +1,6 @@ window.wp.blocks.registerBlock( { + name: 'preformatted', + displayName: 'Preformatted', elements: [ 'pre' ], type: 'text', icon: 'gridicons-code', @@ -13,5 +15,8 @@ window.wp.blocks.registerBlock( { editor.formatter.remove( 'pre' ); } } - ] + ], + insert: function( block, editor ) { + editor.formatter.apply( 'pre' ); + } } );