123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- /**
- * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
- /**
- * @fileOverview Defines the {@link CKEDITOR.dtd} object, which holds the DTD
- * mapping for XHTML 1.0 Transitional. This file was automatically
- * generated from the file: xhtml1-transitional.dtd.
- */
- /**
- * Holds and object representation of the HTML DTD to be used by the
- * editor in its internal operations.
- *
- * Each element in the DTD is represented by a property in this object. Each
- * property contains the list of elements that can be contained by the element.
- * Text is represented by the `#` property.
- *
- * Several special grouping properties are also available. Their names start
- * with the `$` character.
- *
- * // Check if <div> can be contained in a <p> element.
- * alert( !!CKEDITOR.dtd[ 'p' ][ 'div' ] ); // false
- *
- * // Check if <p> can be contained in a <div> element.
- * alert( !!CKEDITOR.dtd[ 'div' ][ 'p' ] ); // true
- *
- * // Check if <p> is a block element.
- * alert( !!CKEDITOR.dtd.$block[ 'p' ] ); // true
- *
- * @class CKEDITOR.dtd
- * @singleton
- */
- CKEDITOR.dtd = ( function() {
- 'use strict';
- var X = CKEDITOR.tools.extend,
- // Subtraction rest of sets, from the first set.
- Y = function( source, removed ) {
- var substracted = CKEDITOR.tools.clone( source );
- for ( var i = 1; i < arguments.length; i++ ) {
- removed = arguments[ i ];
- for ( var name in removed )
- delete substracted[ name ];
- }
- return substracted;
- };
- // Phrasing elements.
- // P = { a: 1, em: 1, strong: 1, small: 1, abbr: 1, dfn: 1, i: 1, b: 1, s: 1,
- // u: 1, code: 1, 'var': 1, samp: 1, kbd: 1, sup: 1, sub: 1, q: 1, cite: 1,
- // span: 1, bdo: 1, bdi: 1, br: 1, wbr: 1, ins: 1, del: 1, img: 1, embed: 1,
- // object: 1, iframe: 1, map: 1, area: 1, script: 1, noscript: 1, ruby: 1,
- // video: 1, audio: 1, input: 1, textarea: 1, select: 1, button: 1, label: 1,
- // output: 1, keygen: 1, progress: 1, command: 1, canvas: 1, time: 1,
- // meter: 1, detalist: 1 },
- // Flow elements.
- // F = { a: 1, p: 1, hr: 1, pre: 1, ul: 1, ol: 1, dl: 1, div: 1, h1: 1, h2: 1,
- // h3: 1, h4: 1, h5: 1, h6: 1, hgroup: 1, address: 1, blockquote: 1, ins: 1,
- // del: 1, object: 1, map: 1, noscript: 1, section: 1, nav: 1, article: 1,
- // aside: 1, header: 1, footer: 1, video: 1, audio: 1, figure: 1, table: 1,
- // form: 1, fieldset: 1, menu: 1, canvas: 1, details:1 },
- // Text can be everywhere.
- // X( P, T );
- // Flow elements set consists of phrasing elements set.
- // X( F, P );
- var P = {}, F = {},
- // Intersection of flow elements set and phrasing elements set.
- PF = {
- a: 1, abbr: 1, area: 1, audio: 1, b: 1, bdi: 1, bdo: 1, br: 1, button: 1, canvas: 1, cite: 1,
- code: 1, command: 1, datalist: 1, del: 1, dfn: 1, em: 1, embed: 1, i: 1, iframe: 1, img: 1,
- input: 1, ins: 1, kbd: 1, keygen: 1, label: 1, map: 1, mark: 1, meter: 1, noscript: 1, object: 1,
- output: 1, progress: 1, q: 1, ruby: 1, s: 1, samp: 1, script: 1, select: 1, small: 1, span: 1,
- strong: 1, sub: 1, sup: 1, textarea: 1, time: 1, u: 1, 'var': 1, video: 1, wbr: 1
- },
- // F - PF (Flow Only).
- FO = {
- address: 1, article: 1, aside: 1, blockquote: 1, details: 1, div: 1, dl: 1, fieldset: 1,
- figure: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1,
- hr: 1, main: 1, menu: 1, nav: 1, ol: 1, p: 1, pre: 1, section: 1, table: 1, ul: 1
- },
- // Metadata elements.
- M = { command: 1, link: 1, meta: 1, noscript: 1, script: 1, style: 1 },
- // Empty.
- E = {},
- // Text.
- T = { '#': 1 },
- // Deprecated phrasing elements.
- DP = { acronym: 1, applet: 1, basefont: 1, big: 1, font: 1, isindex: 1, strike: 1, style: 1, tt: 1 }, // TODO remove "style".
- // Deprecated flow only elements.
- DFO = { center: 1, dir: 1, noframes: 1 };
- // Phrasing elements := PF + T + DP
- X( P, PF, T, DP );
- // Flow elements := FO + P + DFO
- X( F, FO, P, DFO );
- var dtd = {
- a: Y( P, { a: 1, button: 1 } ), // Treat as normal inline element (not a transparent one).
- abbr: P,
- address: F,
- area: E,
- article: F,
- aside: F,
- audio: X( { source: 1, track: 1 }, F ),
- b: P,
- base: E,
- bdi: P,
- bdo: P,
- blockquote: F,
- body: F,
- br: E,
- button: Y( P, { a: 1, button: 1 } ),
- canvas: P, // Treat as normal inline element (not a transparent one).
- caption: F,
- cite: P,
- code: P,
- col: E,
- colgroup: { col: 1 },
- command: E,
- datalist: X( { option: 1 }, P ),
- dd: F,
- del: P, // Treat as normal inline element (not a transparent one).
- details: X( { summary: 1 }, F ),
- dfn: P,
- div: F,
- dl: { dt: 1, dd: 1 },
- dt: F,
- em: P,
- embed: E,
- fieldset: X( { legend: 1 }, F ),
- figcaption: F,
- figure: X( { figcaption: 1 }, F ),
- footer: F,
- form: F,
- h1: P,
- h2: P,
- h3: P,
- h4: P,
- h5: P,
- h6: P,
- head: X( { title: 1, base: 1 }, M ),
- header: F,
- hgroup: { h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1 },
- hr: E,
- html: X( { head: 1, body: 1 }, F, M ), // Head and body are optional...
- i: P,
- iframe: T,
- img: E,
- input: E,
- ins: P, // Treat as normal inline element (not a transparent one).
- kbd: P,
- keygen: E,
- label: P,
- legend: P,
- li: F,
- link: E,
- // Can't be a descendant of article, aside, footer, header, nav, but we don't need this
- // complication. As well as checking if it's used only once.
- main: F,
- map: F,
- mark: P, // Treat as normal inline element (not a transparent one).
- menu: X( { li: 1 }, F ),
- meta: E,
- meter: Y( P, { meter: 1 } ),
- nav: F,
- noscript: X( { link: 1, meta: 1, style: 1 }, P ), // Treat as normal inline element (not a transparent one).
- object: X( { param: 1 }, P ), // Treat as normal inline element (not a transparent one).
- ol: { li: 1 },
- optgroup: { option: 1 },
- option: T,
- output: P,
- p: P,
- param: E,
- pre: P,
- progress: Y( P, { progress: 1 } ),
- q: P,
- rp: P,
- rt: P,
- ruby: X( { rp: 1, rt: 1 }, P ),
- s: P,
- samp: P,
- script: T,
- section: F,
- select: { optgroup: 1, option: 1 },
- small: P,
- source: E,
- span: P,
- strong: P,
- style: T,
- sub: P,
- summary: P,
- sup: P,
- table: { caption: 1, colgroup: 1, thead: 1, tfoot: 1, tbody: 1, tr: 1 },
- tbody: { tr: 1 },
- td: F,
- textarea: T,
- tfoot: { tr: 1 },
- th: F,
- thead: { tr: 1 },
- time: Y( P, { time: 1 } ),
- title: T,
- tr: { th: 1, td: 1 },
- track: E,
- u: P,
- ul: { li: 1 },
- 'var': P,
- video: X( { source: 1, track: 1 }, F ),
- wbr: E,
- // Deprecated tags.
- acronym: P,
- applet: X( { param: 1 }, F ),
- basefont: E,
- big: P,
- center: F,
- dialog: E,
- dir: { li: 1 },
- font: P,
- isindex: E,
- noframes: F,
- strike: P,
- tt: P
- };
- X( dtd, {
- /**
- * List of block elements, like `<p>` or `<div>`.
- */
- $block: X( { audio: 1, dd: 1, dt: 1, figcaption: 1, li: 1, video: 1 }, FO, DFO ),
- /**
- * List of elements that contain other blocks, in which block-level operations should be limited,
- * this property is not intended to be checked directly, use {@link CKEDITOR.dom.elementPath#blockLimit} instead.
- *
- * Some examples of editor behaviors that are impacted by block limits:
- *
- * * Enter key never split a block-limit element;
- * * Style application is constraint by the block limit of the current selection.
- * * Pasted html will be inserted into the block limit of the current selection.
- *
- * **Note:** As an exception `<li>` is not considered as a block limit, as it's generally used as a text block.
- */
- $blockLimit: {
- article: 1, aside: 1, audio: 1, body: 1, caption: 1, details: 1, dir: 1, div: 1, dl: 1,
- fieldset: 1, figcaption: 1, figure: 1, footer: 1, form: 1, header: 1, hgroup: 1, main: 1, menu: 1, nav: 1,
- ol: 1, section: 1, table: 1, td: 1, th: 1, tr: 1, ul: 1, video: 1
- },
- /**
- * List of elements that contain character data.
- */
- $cdata: { script: 1, style: 1 },
- /**
- * List of elements that are accepted as inline editing hosts.
- */
- $editable: {
- address: 1, article: 1, aside: 1, blockquote: 1, body: 1, details: 1, div: 1, fieldset: 1,
- figcaption: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1,
- main: 1, nav: 1, p: 1, pre: 1, section: 1
- },
- /**
- * List of empty (self-closing) elements, like `<br>` or `<img>`.
- */
- $empty: {
- area: 1, base: 1, basefont: 1, br: 1, col: 1, command: 1, dialog: 1, embed: 1, hr: 1, img: 1,
- input: 1, isindex: 1, keygen: 1, link: 1, meta: 1, param: 1, source: 1, track: 1, wbr: 1
- },
- /**
- * List of inline (`<span>` like) elements.
- */
- $inline: P,
- /**
- * List of list root elements.
- */
- $list: { dl: 1, ol: 1, ul: 1 },
- /**
- * List of list item elements, like `<li>` or `<dd>`.
- */
- $listItem: { dd: 1, dt: 1, li: 1 },
- /**
- * List of elements which may live outside body.
- */
- $nonBodyContent: X( { body: 1, head: 1, html: 1 }, dtd.head ),
- /**
- * Elements that accept text nodes, but are not possible to edit into the browser.
- */
- $nonEditable: {
- applet: 1, audio: 1, button: 1, embed: 1, iframe: 1, map: 1, object: 1, option: 1,
- param: 1, script: 1, textarea: 1, video: 1
- },
- /**
- * Elements that are considered objects, therefore selected as a whole in the editor.
- */
- $object: {
- applet: 1, audio: 1, button: 1, hr: 1, iframe: 1, img: 1, input: 1, object: 1, select: 1,
- table: 1, textarea: 1, video: 1
- },
- /**
- * List of elements that can be ignored if empty, like `<b>` or `<span>`.
- */
- $removeEmpty: {
- abbr: 1, acronym: 1, b: 1, bdi: 1, bdo: 1, big: 1, cite: 1, code: 1, del: 1, dfn: 1,
- em: 1, font: 1, i: 1, ins: 1, label: 1, kbd: 1, mark: 1, meter: 1, output: 1, q: 1, ruby: 1, s: 1,
- samp: 1, small: 1, span: 1, strike: 1, strong: 1, sub: 1, sup: 1, time: 1, tt: 1, u: 1, 'var': 1
- },
- /**
- * List of elements that have tabindex set to zero by default.
- */
- $tabIndex: { a: 1, area: 1, button: 1, input: 1, object: 1, select: 1, textarea: 1 },
- /**
- * List of elements used inside the `<table>` element, like `<tbody>` or `<td>`.
- */
- $tableContent: { caption: 1, col: 1, colgroup: 1, tbody: 1, td: 1, tfoot: 1, th: 1, thead: 1, tr: 1 },
- /**
- * List of "transparent" elements. See [W3C's definition of "transparent" element](http://dev.w3.org/html5/markup/terminology.html#transparent).
- */
- $transparent: { a: 1, audio: 1, canvas: 1, del: 1, ins: 1, map: 1, noscript: 1, object: 1, video: 1 },
- /**
- * List of elements that are not to exist standalone that must live under it's parent element.
- */
- $intermediate: {
- caption: 1, colgroup: 1, dd: 1, dt: 1, figcaption: 1, legend: 1, li: 1, optgroup: 1,
- option: 1, rp: 1, rt: 1, summary: 1, tbody: 1, td: 1, tfoot: 1, th: 1, thead: 1, tr: 1
- }
- } );
- return dtd;
- } )();
- // PACKAGER_RENAME( CKEDITOR.dtd )
|