Skip to content
This repository has been archived by the owner on Jun 26, 2020. It is now read-only.

Commit

Permalink
Merge 230d97c into 73f8b58
Browse files Browse the repository at this point in the history
  • Loading branch information
idleb committed Oct 12, 2018
2 parents 73f8b58 + 230d97c commit 3d58634
Show file tree
Hide file tree
Showing 18 changed files with 646 additions and 6 deletions.
4 changes: 3 additions & 1 deletion lang/contexts.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@
"Italic": "Toolbar button tooltip for the Italic feature.",
"Underline": "Toolbar button tooltip for the Underline feature.",
"Code": "Toolbar button tooltip for the Code feature.",
"Strikethrough": "Toolbar button tooltip for the Strikethrough feature."
"Strikethrough": "Toolbar button tooltip for the Strikethrough feature.",
"Subscript": "Toolbar button tooltip for the Subscript feature.",
"Superscript": "Toolbar button tooltip for the Superscript feature."
}
36 changes: 36 additions & 0 deletions src/subscript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

/**
* @module basic-styles/subscript
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import SubscriptEditing from './subscript/subscriptediting';
import SubscriptUI from './subscript/subscriptui';

/**
* The subscript feature.
*
* It loads the {@link module:basic-styles/subscript/subscriptediting~SubscriptEditing} and
* {@link module:basic-styles/subscript/subscriptui~SubscriptUI} plugins.
*
* @extends module:core/plugin~Plugin
*/
export default class Subscript extends Plugin {
/**
* @inheritDoc
*/
static get requires() {
return [ SubscriptEditing, SubscriptUI ];
}

/**
* @inheritDoc
*/
static get pluginName() {
return 'Subscript';
}
}
49 changes: 49 additions & 0 deletions src/subscript/subscriptediting.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

/**
* @module basic-styles/subscript/subscriptediting
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import AttributeCommand from '../attributecommand';

const SUBSCRIPT = 'subscript';

/**
* The subscript editing feature.
*
* It registers the `sub` command and introduces the `sub` attribute in the model which renders to the view
* as a `<sub>` element.
*
* @extends module:core/plugin~Plugin
*/
export default class SubscriptEditing extends Plugin {
/**
* @inheritDoc
*/
init() {
const editor = this.editor;
// Allow sub attribute on text nodes.
editor.model.schema.extend( '$text', { allowAttributes: SUBSCRIPT } );

// Build converter from model to view for data and editing pipelines.

editor.conversion.attributeToElement( {
model: SUBSCRIPT,
view: 'sub',
upcastAlso: [
{
styles: {
'vertical-align': 'sub'
}
}
]
} );

// Create sub command.
editor.commands.add( SUBSCRIPT, new AttributeCommand( editor, SUBSCRIPT ) );
}
}
49 changes: 49 additions & 0 deletions src/subscript/subscriptui.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

/**
* @module basic-styles/subscript/subscriptui
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';

import subscriptIcon from '../../theme/icons/subscript.svg';

const SUBSCRIPT = 'subscript';

/**
* The subscript UI feature. It introduces the Subscript button.
*
* @extends module:core/plugin~Plugin
*/
export default class SubscriptUI extends Plugin {
/**
* @inheritDoc
*/
init() {
const editor = this.editor;
const t = editor.t;

// Add subscript button to feature components.
editor.ui.componentFactory.add( SUBSCRIPT, locale => {
const command = editor.commands.get( SUBSCRIPT );
const view = new ButtonView( locale );

view.set( {
label: t( 'Subscript' ),
icon: subscriptIcon,
tooltip: true
} );

view.bind( 'isOn', 'isEnabled' ).to( command, 'value', 'isEnabled' );

// Execute command.
this.listenTo( view, 'execute', () => editor.execute( SUBSCRIPT ) );

return view;
} );
}
}
36 changes: 36 additions & 0 deletions src/superscript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

/**
* @module basic-styles/superscript
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import SuperscriptEditing from './superscript/superscriptediting';
import SuperscriptUI from './superscript/superscriptui';

/**
* The superscript feature.
*
* It loads the {@link module:basic-styles/superscript/superscriptediting~SuperscriptEditing} and
* {@link module:basic-styles/superscript/superscriptui~SuperscriptUI} plugins.
*
* @extends module:core/plugin~Plugin
*/
export default class Superscript extends Plugin {
/**
* @inheritDoc
*/
static get requires() {
return [ SuperscriptEditing, SuperscriptUI ];
}

/**
* @inheritDoc
*/
static get pluginName() {
return 'Superscript';
}
}
49 changes: 49 additions & 0 deletions src/superscript/superscriptediting.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

/**
* @module basic-styles/superscript/superscriptediting
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import AttributeCommand from '../attributecommand';

const SUPERSCRIPT = 'superscript';

/**
* The superscript editing feature.
*
* It registers the `super` command and introduces the `super` attribute in the model which renders to the view
* as a `<super>` element.
*
* @extends module:core/plugin~Plugin
*/
export default class SuperscriptEditing extends Plugin {
/**
* @inheritDoc
*/
init() {
const editor = this.editor;
// Allow super attribute on text nodes.
editor.model.schema.extend( '$text', { allowAttributes: SUPERSCRIPT } );

// Build converter from model to view for data and editing pipelines.

editor.conversion.attributeToElement( {
model: SUPERSCRIPT,
view: 'sup',
upcastAlso: [
{
styles: {
'vertical-align': 'super'
}
}
]
} );

// Create super command.
editor.commands.add( SUPERSCRIPT, new AttributeCommand( editor, SUPERSCRIPT ) );
}
}
49 changes: 49 additions & 0 deletions src/superscript/superscriptui.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

/**
* @module basic-styles/superscript/superscriptui
*/

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';

import superscriptIcon from '../../theme/icons/superscript.svg';

const SUPERSCRIPT = 'superscript';

/**
* The superscript UI feature. It introduces the Superscript button.
*
* @extends module:core/plugin~Plugin
*/
export default class SuperscriptUI extends Plugin {
/**
* @inheritDoc
*/
init() {
const editor = this.editor;
const t = editor.t;

// Add superscript button to feature components.
editor.ui.componentFactory.add( SUPERSCRIPT, locale => {
const command = editor.commands.get( SUPERSCRIPT );
const view = new ButtonView( locale );

view.set( {
label: t( 'Superscript' ),
icon: superscriptIcon,
tooltip: true
} );

view.bind( 'isOn', 'isEnabled' ).to( command, 'value', 'isEnabled' );

// Execute command.
this.listenTo( view, 'execute', () => editor.execute( SUPERSCRIPT ) );

return view;
} );
}
}
2 changes: 1 addition & 1 deletion tests/manual/basic-styles.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<div id="editor">
<p><i>This</i> <s>is</s> <code>an</code> <strong>editor</strong> <u>instance</u>.</p>
<p><i>This</i> <s>is</s> <code>an</code> <strong>editor</strong> <u>instance</u>, X<sub>1</sub>, X<sup>2</sup>.</p>
</div>
6 changes: 4 additions & 2 deletions tests/manual/basic-styles.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ import Italic from '../../src/italic';
import Strikethrough from '../../src/strikethrough';
import Underline from '../../src/underline';
import Code from '../../src/code';
import Subscript from '../../src/subscript';
import Superscript from '../../src/Superscript';

ClassicEditor
.create( document.querySelector( '#editor' ), {
plugins: [ Essentials, Paragraph, Bold, Italic, Strikethrough, Underline, Code ],
toolbar: [ 'bold', 'italic', 'strikethrough', 'underline', 'code', 'undo', 'redo' ]
plugins: [ Essentials, Paragraph, Bold, Italic, Strikethrough, Underline, Code, Subscript, Superscript ],
toolbar: [ 'bold', 'italic', 'strikethrough', 'underline', 'code', 'undo', 'redo', 'subscript', 'superscript' ]
} )
.then( editor => {
window.editor = editor;
Expand Down
6 changes: 4 additions & 2 deletions tests/manual/basic-styles.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@
* bold **"editor"**,
* underline "instance",
* strikethrough ~~"is"~~,
* code `"an"`.
2. Test the bold, italic, strikethrough, underline and code features live.
* code `"an"`,
* subscript X<sub>1</sub>,
* superscript X<sup>2</sup>.
2. Test the bold, italic, strikethrough, underline, code, subscript and superscript features live.
18 changes: 18 additions & 0 deletions tests/subscript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

import Subscript from '../src/subscript';
import SubEditing from '../src/subscript/subscriptediting';
import SubUI from '../src/subscript/subscriptui';

describe( 'Subscript', () => {
it( 'should require SubEditing and SubUI', () => {
expect( Subscript.requires ).to.deep.equal( [ SubEditing, SubUI ] );
} );

it( 'should be named', () => {
expect( Subscript.pluginName ).to.equal( 'Sub' );
} );
} );
Loading

0 comments on commit 3d58634

Please sign in to comment.