GithubHelp home page GithubHelp logo

indvd00m / crossreference Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 3.0 129 KB

CrossReference plugin for CKEditor 4 - Adds cross references links

License: Other

JavaScript 100.00%
ckeditor cross-reference plugin numeration javascript

crossreference's Introduction

CrossReference Plugin for CKEditor 4

Adds cross references links with optional auto-numeration for chapters, images, tables and references. Other types of references can be defined in config.

Online demo

Try the plugin demo at http://indvd00m.com/crossreference-demo/.

CKEditor plugin page

http://ckeditor.com/addon/crossreference

Requirements

CrossReference Plugin require CKEditor 4.5+ version and dependent from plugins: dialog, notification.

Installation

  1. Download the plugin: https://github.com/indvd00m/crossreference/releases.

  2. Extract (decompress) the downloaded file into the plugins folder of your CKEditor installation. Example: http://example.com/ckeditor/plugins/crossreference

  3. Enable the plugin by using the extraPlugins configuration setting. Example: CKEDITOR.config.extraPlugins = 'crossreference';

Description

Two main conceptions - anchor and link to anchor. There are 4 type of references defined by default: chapter, image, table, reference. Example of anchor of type image in raw html:

<a 
	class="cross-reference cross-anchor" 
	cross-reference="image" 
	cross-anchor="" 
	cross-guid="7d24373b-0756-481d-bf97-5a17ffdf3a28" 
	cross-name="Experimental result" 
	cross-number="1" 
	name="image-7d24373b-0756-481d-bf97-5a17ffdf3a28"
	>
		Fig. 1. Experimental result.
</a>

Example of link to this anchor in raw html:

<a 
	class="cross-reference cross-link" 
	cross-reference="image" 
	cross-link="" 
	cross-guid="7d24373b-0756-481d-bf97-5a17ffdf3a28" 
	cross-name="Experimental result" 
	cross-number="1" 
	href="#image-7d24373b-0756-481d-bf97-5a17ffdf3a28" 
	title="Fig. 1. Experimental result."
	>
		1
</a>

After every inserting of anchor or links to anchor all references will be updated to be a concerted. Or you can manually update cross-references by selecting option in menu (for example after deleting of anchors).

Configuration

You can switch which types is active by config option config.crossreference.activeTypes = ['type1', 'type2']. You can define other types also.

Default config:

{
	activeTypes: ['chapter', 'image', 'table', 'reference'],
	overrideTypes: false,
	types: {
		chapter: {
			name: 'Chapter',
			anchorTextTemplate: '${number}. ${name}.',
			linkTextTemplate: '${number}',
			numeration: {
				enabled: true,
				firstNumber: '1',
				increase: function(number) {
					var n = parseInt(number);
					return ++n;
				}
			},
			anchorsProvider: 'default',
			allowCreateAnchors: true,
			groupAnchors: false
		},
		image: {
			name: 'Figure',
			anchorTextTemplate: 'Fig. ${number}. ${name}.',
			linkTextTemplate: '${number}',
			numeration: {
				enabled: true,
				firstNumber: '1',
				increase: function(number) {
					var n = parseInt(number);
					return ++n;
				}
			},
			anchorsProvider: 'default',
			allowCreateAnchors: true,
			groupAnchors: false
		},
		table: {
			name: 'Table',
			anchorTextTemplate: 'Table ${number}. ${name}.',
			linkTextTemplate: '${number}',
			numeration: {
				enabled: true,
				firstNumber: '1',
				increase: function(number) {
					var n = parseInt(number);
					return ++n;
				}
			},
			anchorsProvider: 'default',
			allowCreateAnchors: true,
			groupAnchors: false
		},
		reference: {
			name: 'Reference',
			anchorTextTemplate: '[${number}] ${name}.',
			linkTextTemplate: '[${number}]',
			numeration: {
				enabled: true,
				firstNumber: '1',
				increase: function(number) {
					var n = parseInt(number);
					return ++n;
				}
			},
			anchorsProvider: 'default',
			allowCreateAnchors: true,
			groupAnchors: false
		}
	}
}
Property Description Type Default value
activeTypes Which type of anchors would be activated. Array ['chapter', 'image', 'table', 'reference']
overrideTypes If you define your own types, enabling this option lead to mixing of your types with types from default config which not yet defined in your config. Boolean false
types Types definition. Object see Example of type definition section

Example of type definition

image: {
	name: 'Figure',
	anchorTextTemplate: 'Fig. ${number}. ${name}.',
	linkTextTemplate: '${number}',
	numeration: {
		enabled: true,
		firstNumber: '1',
		increase: function(number) {
			var n = parseInt(number);
			return ++n;
		}
	},
	anchorsProvider: 'default',
	allowCreateAnchors: true,
	groupAnchors: false
}
Property Description Type Required
name Type name. String Yes
anchorTextTemplate Template for anchor text. This text will be put in a tag. You can use variables in format ${variableName}. Variables is a properties of an anchor object (see Example of an anchor object section). String No
linkTextTemplate Template for link text. This text will be put in a tag. You can use variables in format ${variableName}. Variables is a properties of an anchor object (see Example of an anchor object section). String No
numeration Definition of type numeration. See Example of a numeration definition section. Object No
anchorsProvider See Example of type with anchors provider section. String 'default' or function No
allowCreateAnchors Can user create anchors of this type in anchors dialog. Boolean No
groupAnchors If true, anchors can be filtered by group in link dialog. Boolean No

Example of a numeration definition

numeration: {
	enabled: true,
	firstNumber: '1',
	increase: function(number) {
		var n = parseInt(number);
		return ++n;
	}
}
Property Description Type
enabled Enabling/disabling numeration of anchors. Boolean
firstNumber First number. For example you may define firstNumber as I for Roman numerals. String
increase Function which must return number (as string) which is next after number argument (string). Function

Example of an anchor object

JSON object:

{
	type: 'image',
	guid: '7d24373b-0756-481d-bf97-5a17ffdf3a28',
	name: 'Experimental result',
	number: '1',
	text: 'Fig. 1. Experimental result.',
	groupName: 'Group name',
	groupGuid: '6c848dff-cde3-421f-b926-695c8de37d80'
}
Property Description Type Required
type Type name of this anchor (config.types.typeName). String Yes
guid Unique guid of this anchor. String Yes
name Name of this anchor. String Yes
number Number of this anchor (if type contains numeration definition). String Depends of type
text Text of this anchor. Optional property because of text will generated by type.anchorTextTemplate template. String No
groupName Name of anchor group. String No
groupGuid Unique guid of anchor group. String No

Example of type with anchors provider

You can define your own anchors provider. By default plugin search anchors in content of editor and use this anchors for links. But if you want refer to anchors outside of editor you can define another type of anchor with anchorsProvider function.

myType: {
	name: 'My type',
	anchorTextTemplate: '${name}',
	linkTextTemplate: '${name}',
	anchorsProvider: function(callback, editorAnchors, type, editor) {
		var anchors = [];
		anchors.push({
			type: 'myType',
			guid: '7d24373b-0756-481d-bf97-5a17ffdf3a28',
			name: 'Anchor name',
			number: '1'
		});
		callback(anchors);
	},
	allowCreateAnchors: false,
	groupAnchors: false
},

anchorsProvider method attributes:

Name Description Type
callback Callback method which must be called with arrays of anchors as argument. Function
editorAnchors Anchors of this type (myType in this case) which already contains in editor. You can merge this anchors with your own anchors if need. Array
type Type definition (Object myType in this case). Object
editor Instance of ckeditor. Object

Roadmap

See https://github.com/indvd00m/crossreference/issues.

Icons:

https://icons8.com/web-app/21792/unicast

https://icons8.com/web-app/15117/anchor

https://icons8.com/web-app/38051/link

https://icons8.com/web-app/21100/refresh

License & Author

CrossReference Plugin is distributed under GPL/LGPL/MPL. For license terms, see LICENSE.md.

CrossReference Plugin is written by David E. Veliev.

crossreference's People

Stargazers

 avatar

Watchers

 avatar  avatar

crossreference's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.