// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE ;(function (mod) { if (typeof exports == 'object' && typeof module == 'object') // CommonJS mod(require('../../lib/codemirror'), require('./xml-hint')) else if (typeof define == 'function' && define.amd) // AMD define(['../../lib/codemirror', './xml-hint'], mod) // Plain browser env else mod(CodeMirror) })(function (CodeMirror) { 'use strict' var langs = 'ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu'.split( ' ' ) var targets = ['_blank', '_self', '_top', '_parent'] var charsets = ['ascii', 'utf-8', 'utf-16', 'latin1', 'latin1'] var methods = ['get', 'post', 'put', 'delete'] var encs = ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'] var media = [ 'all', 'screen', 'print', 'embossed', 'braille', 'handheld', 'print', 'projection', 'screen', 'tty', 'tv', 'speech', '3d-glasses', 'resolution [>][<][=] [X]', 'device-aspect-ratio: X/Y', 'orientation:portrait', 'orientation:landscape', 'device-height: [X]', 'device-width: [X]', ] var s = { attrs: {} } // Simple tag, reused for a whole lot of tags var data = { a: { attrs: { href: null, ping: null, type: null, media: media, target: targets, hreflang: langs, }, }, abbr: s, acronym: s, address: s, applet: s, area: { attrs: { alt: null, coords: null, href: null, target: null, ping: null, media: media, hreflang: langs, type: null, shape: ['default', 'rect', 'circle', 'poly'], }, }, article: s, aside: s, audio: { attrs: { src: null, mediagroup: null, crossorigin: ['anonymous', 'use-credentials'], preload: ['none', 'metadata', 'auto'], autoplay: ['', 'autoplay'], loop: ['', 'loop'], controls: ['', 'controls'], }, }, b: s, base: { attrs: { href: null, target: targets } }, basefont: s, bdi: s, bdo: s, big: s, blockquote: { attrs: { cite: null } }, body: s, br: s, button: { attrs: { form: null, formaction: null, name: null, value: null, autofocus: ['', 'autofocus'], disabled: ['', 'autofocus'], formenctype: encs, formmethod: methods, formnovalidate: ['', 'novalidate'], formtarget: targets, type: ['submit', 'reset', 'button'], }, }, canvas: { attrs: { width: null, height: null } }, caption: s, center: s, cite: s, code: s, col: { attrs: { span: null } }, colgroup: { attrs: { span: null } }, command: { attrs: { type: ['command', 'checkbox', 'radio'], label: null, icon: null, radiogroup: null, command: null, title: null, disabled: ['', 'disabled'], checked: ['', 'checked'], }, }, data: { attrs: { value: null } }, datagrid: { attrs: { disabled: ['', 'disabled'], multiple: ['', 'multiple'] } }, datalist: { attrs: { data: null } }, dd: s, del: { attrs: { cite: null, datetime: null } }, details: { attrs: { open: ['', 'open'] } }, dfn: s, dir: s, div: s, dialog: { attrs: { open: null } }, dl: s, dt: s, em: s, embed: { attrs: { src: null, type: null, width: null, height: null } }, eventsource: { attrs: { src: null } }, fieldset: { attrs: { disabled: ['', 'disabled'], form: null, name: null } }, figcaption: s, figure: s, font: s, footer: s, form: { attrs: { action: null, name: null, 'accept-charset': charsets, autocomplete: ['on', 'off'], enctype: encs, method: methods, novalidate: ['', 'novalidate'], target: targets, }, }, frame: s, frameset: s, h1: s, h2: s, h3: s, h4: s, h5: s, h6: s, head: { attrs: {}, children: ['title', 'base', 'link', 'style', 'meta', 'script', 'noscript', 'command'], }, header: s, hgroup: s, hr: s, html: { attrs: { manifest: null }, children: ['head', 'body'], }, i: s, iframe: { attrs: { src: null, srcdoc: null, name: null, width: null, height: null, sandbox: ['allow-top-navigation', 'allow-same-origin', 'allow-forms', 'allow-scripts'], seamless: ['', 'seamless'], }, }, img: { attrs: { alt: null, src: null, ismap: null, usemap: null, width: null, height: null, crossorigin: ['anonymous', 'use-credentials'], }, }, input: { attrs: { alt: null, dirname: null, form: null, formaction: null, height: null, list: null, max: null, maxlength: null, min: null, name: null, pattern: null, placeholder: null, size: null, src: null, step: null, value: null, width: null, accept: ['audio/*', 'video/*', 'image/*'], autocomplete: ['on', 'off'], autofocus: ['', 'autofocus'], checked: ['', 'checked'], disabled: ['', 'disabled'], formenctype: encs, formmethod: methods, formnovalidate: ['', 'novalidate'], formtarget: targets, multiple: ['', 'multiple'], readonly: ['', 'readonly'], required: ['', 'required'], type: [ 'hidden', 'text', 'search', 'tel', 'url', 'email', 'password', 'datetime', 'date', 'month', 'week', 'time', 'datetime-local', 'number', 'range', 'color', 'checkbox', 'radio', 'file', 'submit', 'image', 'reset', 'button', ], }, }, ins: { attrs: { cite: null, datetime: null } }, kbd: s, keygen: { attrs: { challenge: null, form: null, name: null, autofocus: ['', 'autofocus'], disabled: ['', 'disabled'], keytype: ['RSA'], }, }, label: { attrs: { for: null, form: null } }, legend: s, li: { attrs: { value: null } }, link: { attrs: { href: null, type: null, hreflang: langs, media: media, sizes: ['all', '16x16', '16x16 32x32', '16x16 32x32 64x64'], }, }, map: { attrs: { name: null } }, mark: s, menu: { attrs: { label: null, type: ['list', 'context', 'toolbar'] } }, meta: { attrs: { content: null, charset: charsets, name: ['viewport', 'application-name', 'author', 'description', 'generator', 'keywords'], 'http-equiv': ['content-language', 'content-type', 'default-style', 'refresh'], }, }, meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } }, nav: s, noframes: s, noscript: s, object: { attrs: { data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, typemustmatch: ['', 'typemustmatch'], }, }, ol: { attrs: { reversed: ['', 'reversed'], start: null, type: ['1', 'a', 'A', 'i', 'I'] } }, optgroup: { attrs: { disabled: ['', 'disabled'], label: null } }, option: { attrs: { disabled: ['', 'disabled'], label: null, selected: ['', 'selected'], value: null } }, output: { attrs: { for: null, form: null, name: null } }, p: s, param: { attrs: { name: null, value: null } }, pre: s, progress: { attrs: { value: null, max: null } }, q: { attrs: { cite: null } }, rp: s, rt: s, ruby: s, s: s, samp: s, script: { attrs: { type: ['text/javascript'], src: null, async: ['', 'async'], defer: ['', 'defer'], charset: charsets, }, }, section: s, select: { attrs: { form: null, name: null, size: null, autofocus: ['', 'autofocus'], disabled: ['', 'disabled'], multiple: ['', 'multiple'], }, }, small: s, source: { attrs: { src: null, type: null, media: null } }, span: s, strike: s, strong: s, style: { attrs: { type: ['text/css'], media: media, scoped: null, }, }, sub: s, summary: s, sup: s, table: s, tbody: s, td: { attrs: { colspan: null, rowspan: null, headers: null } }, textarea: { attrs: { dirname: null, form: null, maxlength: null, name: null, placeholder: null, rows: null, cols: null, autofocus: ['', 'autofocus'], disabled: ['', 'disabled'], readonly: ['', 'readonly'], required: ['', 'required'], wrap: ['soft', 'hard'], }, }, tfoot: s, th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ['row', 'col', 'rowgroup', 'colgroup'] } }, thead: s, time: { attrs: { datetime: null } }, title: s, tr: s, track: { attrs: { src: null, label: null, default: null, kind: ['subtitles', 'captions', 'descriptions', 'chapters', 'metadata'], srclang: langs, }, }, tt: s, u: s, ul: s, var: s, video: { attrs: { src: null, poster: null, width: null, height: null, crossorigin: ['anonymous', 'use-credentials'], preload: ['auto', 'metadata', 'none'], autoplay: ['', 'autoplay'], mediagroup: ['movie'], muted: ['', 'muted'], controls: ['', 'controls'], }, }, wbr: s, } var globalAttrs = { accesskey: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], class: null, contenteditable: ['true', 'false'], contextmenu: null, dir: ['ltr', 'rtl', 'auto'], draggable: ['true', 'false', 'auto'], dropzone: ['copy', 'move', 'link', 'string:', 'file:'], hidden: ['hidden'], id: null, inert: ['inert'], itemid: null, itemprop: null, itemref: null, itemscope: ['itemscope'], itemtype: null, lang: ['en', 'es'], spellcheck: ['true', 'false'], autocorrect: ['true', 'false'], autocapitalize: ['true', 'false'], style: null, tabindex: ['1', '2', '3', '4', '5', '6', '7', '8', '9'], title: null, translate: ['yes', 'no'], onclick: null, rel: ['stylesheet', 'alternate', 'author', 'bookmark', 'help', 'license', 'next', 'nofollow', 'noreferrer', 'prefetch', 'prev', 'search', 'tag'], } function populate(obj) { for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr)) obj.attrs[attr] = globalAttrs[attr] } populate(s) for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s) populate(data[tag]) CodeMirror.htmlSchema = data function htmlHint(cm, options) { var local = { schemaInfo: data } if (options) for (var opt in options) local[opt] = options[opt] return CodeMirror.hint.xml(cm, local) } CodeMirror.registerHelper('hint', 'html', htmlHint) })