diff --git a/website/demo/demo.css b/website/demo/demo.css index f29d99e74..8a448f606 100644 --- a/website/demo/demo.css +++ b/website/demo/demo.css @@ -23,7 +23,7 @@ body { } .pane { - max-width: 25%; + max-width: 20%; padding: 0 1em; } diff --git a/website/demo/demo.js b/website/demo/demo.js index 0571d2408..98dede0eb 100644 --- a/website/demo/demo.js +++ b/website/demo/demo.js @@ -3,19 +3,28 @@ 'use strict'; var ContentKit = exports.ContentKit, - $ = exports.$; + $ = exports.$, + MobiledocHTMLRenderer = exports.MobiledocHTMLRenderer, + MobiledocDOMRenderer = exports.MobiledocDOMRenderer; var ContentKitDemo = exports.ContentKitDemo = { syncCodePane: function(editor) { var codePaneJSON = document.getElementById('serialized-mobiledoc'); - var json = editor.serialize(); - codePaneJSON.innerHTML = this.syntaxHighlight(json); + var mobiledoc = editor.serialize(); + codePaneJSON.innerHTML = this.syntaxHighlight(mobiledoc); - var renderer = new ContentKit.Runtime.DOMRenderer(); - var rendered = renderer.render(json); + var renderer = new MobiledocDOMRenderer(); + var rendered = renderer.render(mobiledoc); $('#rendered-mobiledoc').empty(); $('#rendered-mobiledoc')[0].appendChild(rendered); + + var htmlRenderer = new MobiledocHTMLRenderer(); + var html = htmlRenderer.render(mobiledoc); + + html = html.replace(/&/g,'&').replace(//g,'>'); + + $('#rendered-mobiledoc-html').html(html); }, syntaxHighlight: function(json) { @@ -65,7 +74,7 @@ function readMobiledoc(string) { function isValidJSON(string) { try { - JSON.parse(string); + window.JSON.parse(string); return true; } catch(e) { return false; @@ -144,7 +153,7 @@ $(function() { var mobiledoc = sampleMobiledocs.simpleMobiledoc; var textarea = $('#mobiledoc-to-load textarea'); - textarea.val(JSON.stringify(mobiledoc, false, 2)); + textarea.val(window.JSON.stringify(mobiledoc, false, 2)); textarea.on('input', function() { attemptEditorReboot(editor, textarea); @@ -153,7 +162,7 @@ $(function() { $('#select-mobiledoc').on('change', function() { var mobiledocName = $(this).val(); var mobiledoc = sampleMobiledocs[mobiledocName]; - textarea.val(JSON.stringify(mobiledoc, false, 2)); + textarea.val(window.JSON.stringify(mobiledoc, false, 2)); textarea.trigger('input'); }); diff --git a/website/demo/index.html b/website/demo/index.html index a895c7415..5c1c38941 100644 --- a/website/demo/index.html +++ b/website/demo/index.html @@ -61,20 +61,32 @@

serialized mobiledoc

-

rendered mobiledoc

+

rendered mobiledoc (dom)

This is the output of using the runtime (client-side) - mobiledoc-dom-renderer + mobiledoc-dom-renderer on the serialized mobiledoc.

+
+

rendered mobiledoc (html)

+

+ This is the output of using the server-side + mobiledoc-html-renderer + on the serialized mobiledoc. +

+
+
+ + + diff --git a/website/demo/mobiledoc-dom-renderer.js b/website/demo/mobiledoc-dom-renderer.js new file mode 100644 index 000000000..8a94b09c1 --- /dev/null +++ b/website/demo/mobiledoc-dom-renderer.js @@ -0,0 +1,351 @@ +;(function() { + +var define, requireModule, require, requirejs; + +(function() { + + var _isArray; + if (!Array.isArray) { + _isArray = function (x) { + return Object.prototype.toString.call(x) === "[object Array]"; + }; + } else { + _isArray = Array.isArray; + } + + var registry = {}, seen = {}; + var FAILED = false; + + var uuid = 0; + + function tryFinally(tryable, finalizer) { + try { + return tryable(); + } finally { + finalizer(); + } + } + + function unsupportedModule(length) { + throw new Error("an unsupported module was defined, expected `define(name, deps, module)` instead got: `" + length + "` arguments to define`"); + } + + var defaultDeps = ['require', 'exports', 'module']; + + function Module(name, deps, callback, exports) { + this.id = uuid++; + this.name = name; + this.deps = !deps.length && callback.length ? defaultDeps : deps; + this.exports = exports || { }; + this.callback = callback; + this.state = undefined; + this._require = undefined; + } + + + Module.prototype.makeRequire = function() { + var name = this.name; + + return this._require || (this._require = function(dep) { + return require(resolve(dep, name)); + }); + } + + define = function(name, deps, callback) { + if (arguments.length < 2) { + unsupportedModule(arguments.length); + } + + if (!_isArray(deps)) { + callback = deps; + deps = []; + } + + registry[name] = new Module(name, deps, callback); + }; + + // we don't support all of AMD + // define.amd = {}; + // we will support petals... + define.petal = { }; + + function Alias(path) { + this.name = path; + } + + define.alias = function(path) { + return new Alias(path); + }; + + function reify(mod, name, seen) { + var deps = mod.deps; + var length = deps.length; + var reified = new Array(length); + var dep; + // TODO: new Module + // TODO: seen refactor + var module = { }; + + for (var i = 0, l = length; i < l; i++) { + dep = deps[i]; + if (dep === 'exports') { + module.exports = reified[i] = seen; + } else if (dep === 'require') { + reified[i] = mod.makeRequire(); + } else if (dep === 'module') { + mod.exports = seen; + module = reified[i] = mod; + } else { + reified[i] = requireFrom(resolve(dep, name), name); + } + } + + return { + deps: reified, + module: module + }; + } + + function requireFrom(name, origin) { + var mod = registry[name]; + if (!mod) { + throw new Error('Could not find module `' + name + '` imported from `' + origin + '`'); + } + return require(name); + } + + function missingModule(name) { + throw new Error('Could not find module ' + name); + } + requirejs = require = requireModule = function(name) { + var mod = registry[name]; + + + if (mod && mod.callback instanceof Alias) { + mod = registry[mod.callback.name]; + } + + if (!mod) { missingModule(name); } + + if (mod.state !== FAILED && + seen.hasOwnProperty(name)) { + return seen[name]; + } + + var reified; + var module; + var loaded = false; + + seen[name] = { }; // placeholder for run-time cycles + + tryFinally(function() { + reified = reify(mod, name, seen[name]); + module = mod.callback.apply(this, reified.deps); + loaded = true; + }, function() { + if (!loaded) { + mod.state = FAILED; + } + }); + + var obj; + if (module === undefined && reified.module.exports) { + obj = reified.module.exports; + } else { + obj = seen[name] = module; + } + + if (obj !== null && + (typeof obj === 'object' || typeof obj === 'function') && + obj['default'] === undefined) { + obj['default'] = obj; + } + + return (seen[name] = obj); + }; + + function resolve(child, name) { + if (child.charAt(0) !== '.') { return child; } + + var parts = child.split('/'); + var nameParts = name.split('/'); + var parentBase = nameParts.slice(0, -1); + + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + + if (part === '..') { + if (parentBase.length === 0) { + throw new Error('Cannot access parent module of root'); + } + parentBase.pop(); + } else if (part === '.') { continue; } + else { parentBase.push(part); } + } + + return parentBase.join('/'); + } + + requirejs.entries = requirejs._eak_seen = registry; + requirejs.clear = function(){ + requirejs.entries = requirejs._eak_seen = registry = {}; + seen = state = {}; + }; +})(); + +define('mobiledoc-dom-renderer/dom-renderer', ['exports'], function (exports) { + /** + * runtime DOM renderer + * renders a mobiledoc to DOM + * + * input: mobiledoc + * output: DOM + */ + + 'use strict'; + + var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var utils = { + createElement: function createElement(tagName) { + return document.createElement(tagName); + }, + appendChild: function appendChild(target, child) { + target.appendChild(child); + }, + createTextNode: function createTextNode(text) { + return document.createTextNode(text); + } + }; + + function createElementFromMarkerType() { + var _ref = arguments.length <= 0 || arguments[0] === undefined ? ['', []] : arguments[0]; + + var _ref2 = _slicedToArray(_ref, 2); + + var tagName = _ref2[0]; + var attributes = _ref2[1]; + + var element = utils.createElement(tagName); + attributes = attributes || []; + + for (var i = 0, l = attributes.length; i < l; i = i + 2) { + var propName = attributes[i], + propValue = attributes[i + 1]; + element.setAttribute(propName, propValue); + } + return element; + } + + var DOMRenderer = (function () { + function DOMRenderer() { + _classCallCheck(this, DOMRenderer); + } + + _createClass(DOMRenderer, [{ + key: 'render', + + /** + * @param mobiledoc + * @param rootElement optional, defaults to an empty div + * @return DOMNode + */ + value: function render(mobiledoc) { + var _this = this; + + var rootElement = arguments.length <= 1 || arguments[1] === undefined ? utils.createElement('div') : arguments[1]; + + var _mobiledoc = _slicedToArray(mobiledoc, 2); + + var markerTypes = _mobiledoc[0]; + var sections = _mobiledoc[1]; + + this.root = rootElement; + this.markerTypes = markerTypes; + + sections.forEach(function (section) { + return _this.renderSection(section); + }); + + return this.root; + } + }, { + key: 'renderSection', + value: function renderSection(section) { + var _section = _slicedToArray(section, 1); + + var type = _section[0]; + + switch (type) { + case 1: + var rendered = this.renderParagraphSection(section); + utils.appendChild(this.root, rendered); + break; + default: + throw new Error('Unimplement renderer for type ' + type); + } + } + }, { + key: 'renderParagraphSection', + value: function renderParagraphSection(_ref3) { + var _ref32 = _slicedToArray(_ref3, 3); + + var type = _ref32[0]; + var tagName = _ref32[1]; + var markers = _ref32[2]; + + var element = utils.createElement(tagName); + var elements = [element]; + var currentElement = element; + + for (var i = 0, l = markers.length; i < l; i++) { + var marker = markers[i]; + + var _marker = _slicedToArray(marker, 3); + + var openTypes = _marker[0]; + var closeTypes = _marker[1]; + var text = _marker[2]; + + for (var j = 0, m = openTypes.length; j < m; j++) { + var markerType = this.markerTypes[openTypes[j]]; + var openedElement = createElementFromMarkerType(markerType); + utils.appendChild(currentElement, openedElement); + elements.push(openedElement); + currentElement = openedElement; + } + + utils.appendChild(currentElement, utils.createTextNode(text)); + + for (var j = 0, m = closeTypes; j < m; j++) { + elements.pop(); + currentElement = elements[elements.length - 1]; + } + } + + return element; + } + }]); + + return DOMRenderer; + })(); + + exports['default'] = DOMRenderer; +}); +define('mobiledoc-dom-renderer', ['exports', 'mobiledoc-dom-renderer/dom-renderer'], function (exports, _mobiledocDomRendererDomRenderer) { + 'use strict'; + + exports.registerGlobal = registerGlobal; + + function registerGlobal(window) { + window.MobiledocDOMRenderer = _mobiledocDomRendererDomRenderer['default']; + } + + exports['default'] = _mobiledocDomRendererDomRenderer['default']; +}); +require("mobiledoc-dom-renderer")["registerGlobal"](window, document); +})(); \ No newline at end of file diff --git a/website/demo/mobiledoc-html-renderer.js b/website/demo/mobiledoc-html-renderer.js new file mode 100644 index 000000000..4e3c6b419 --- /dev/null +++ b/website/demo/mobiledoc-html-renderer.js @@ -0,0 +1,444 @@ +;(function() { + +var define, requireModule, require, requirejs; + +(function() { + + var _isArray; + if (!Array.isArray) { + _isArray = function (x) { + return Object.prototype.toString.call(x) === "[object Array]"; + }; + } else { + _isArray = Array.isArray; + } + + var registry = {}, seen = {}; + var FAILED = false; + + var uuid = 0; + + function tryFinally(tryable, finalizer) { + try { + return tryable(); + } finally { + finalizer(); + } + } + + function unsupportedModule(length) { + throw new Error("an unsupported module was defined, expected `define(name, deps, module)` instead got: `" + length + "` arguments to define`"); + } + + var defaultDeps = ['require', 'exports', 'module']; + + function Module(name, deps, callback, exports) { + this.id = uuid++; + this.name = name; + this.deps = !deps.length && callback.length ? defaultDeps : deps; + this.exports = exports || { }; + this.callback = callback; + this.state = undefined; + this._require = undefined; + } + + + Module.prototype.makeRequire = function() { + var name = this.name; + + return this._require || (this._require = function(dep) { + return require(resolve(dep, name)); + }); + } + + define = function(name, deps, callback) { + if (arguments.length < 2) { + unsupportedModule(arguments.length); + } + + if (!_isArray(deps)) { + callback = deps; + deps = []; + } + + registry[name] = new Module(name, deps, callback); + }; + + // we don't support all of AMD + // define.amd = {}; + // we will support petals... + define.petal = { }; + + function Alias(path) { + this.name = path; + } + + define.alias = function(path) { + return new Alias(path); + }; + + function reify(mod, name, seen) { + var deps = mod.deps; + var length = deps.length; + var reified = new Array(length); + var dep; + // TODO: new Module + // TODO: seen refactor + var module = { }; + + for (var i = 0, l = length; i < l; i++) { + dep = deps[i]; + if (dep === 'exports') { + module.exports = reified[i] = seen; + } else if (dep === 'require') { + reified[i] = mod.makeRequire(); + } else if (dep === 'module') { + mod.exports = seen; + module = reified[i] = mod; + } else { + reified[i] = requireFrom(resolve(dep, name), name); + } + } + + return { + deps: reified, + module: module + }; + } + + function requireFrom(name, origin) { + var mod = registry[name]; + if (!mod) { + throw new Error('Could not find module `' + name + '` imported from `' + origin + '`'); + } + return require(name); + } + + function missingModule(name) { + throw new Error('Could not find module ' + name); + } + requirejs = require = requireModule = function(name) { + var mod = registry[name]; + + + if (mod && mod.callback instanceof Alias) { + mod = registry[mod.callback.name]; + } + + if (!mod) { missingModule(name); } + + if (mod.state !== FAILED && + seen.hasOwnProperty(name)) { + return seen[name]; + } + + var reified; + var module; + var loaded = false; + + seen[name] = { }; // placeholder for run-time cycles + + tryFinally(function() { + reified = reify(mod, name, seen[name]); + module = mod.callback.apply(this, reified.deps); + loaded = true; + }, function() { + if (!loaded) { + mod.state = FAILED; + } + }); + + var obj; + if (module === undefined && reified.module.exports) { + obj = reified.module.exports; + } else { + obj = seen[name] = module; + } + + if (obj !== null && + (typeof obj === 'object' || typeof obj === 'function') && + obj['default'] === undefined) { + obj['default'] = obj; + } + + return (seen[name] = obj); + }; + + function resolve(child, name) { + if (child.charAt(0) !== '.') { return child; } + + var parts = child.split('/'); + var nameParts = name.split('/'); + var parentBase = nameParts.slice(0, -1); + + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + + if (part === '..') { + if (parentBase.length === 0) { + throw new Error('Cannot access parent module of root'); + } + parentBase.pop(); + } else if (part === '.') { continue; } + else { parentBase.push(part); } + } + + return parentBase.join('/'); + } + + requirejs.entries = requirejs._eak_seen = registry; + requirejs.clear = function(){ + requirejs.entries = requirejs._eak_seen = registry = {}; + seen = state = {}; + }; +})(); + +define('mobiledoc-html-renderer/html-renderer', ['exports', 'mobiledoc-html-renderer/utils/dom'], function (exports, _mobiledocHtmlRendererUtilsDom) { + /** + * runtime HTML renderer + * renders a mobiledoc to HTML + * + * input: mobiledoc + * output: HTML + */ + + 'use strict'; + + var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function createElementFromMarkerType() { + var _ref = arguments[0] === undefined ? ['', []] : arguments[0]; + + var _ref2 = _slicedToArray(_ref, 2); + + var tagName = _ref2[0]; + var attributes = _ref2[1]; + + var element = _mobiledocHtmlRendererUtilsDom['default'].createElement(tagName); + attributes = attributes || []; + + for (var i = 0, l = attributes.length; i < l; i = i + 2) { + var propName = attributes[i], + propValue = attributes[i + 1]; + _mobiledocHtmlRendererUtilsDom['default'].setAttribute(element, propName, propValue); + } + return element; + } + + var DOMRenderer = (function () { + function DOMRenderer() { + _classCallCheck(this, DOMRenderer); + } + + _createClass(DOMRenderer, [{ + key: 'render', + + /** + * @param mobiledoc + * @param rootElement optional, defaults to an empty div + * @return DOMNode + */ + value: function render(mobiledoc) { + var _this = this; + + var rootElement = arguments[1] === undefined ? _mobiledocHtmlRendererUtilsDom['default'].createElement('div') : arguments[1]; + + var _mobiledoc = _slicedToArray(mobiledoc, 2); + + var markerTypes = _mobiledoc[0]; + var sections = _mobiledoc[1]; + + this.root = rootElement; + this.markerTypes = markerTypes; + + sections.forEach(function (section) { + return _this.renderSection(section); + }); + + return this.root.toString(); + } + }, { + key: 'renderSection', + value: function renderSection(section) { + var _section = _slicedToArray(section, 1); + + var type = _section[0]; + + switch (type) { + case 1: + var rendered = this.renderParagraphSection(section); + _mobiledocHtmlRendererUtilsDom['default'].appendChild(this.root, rendered); + break; + default: + throw new Error('Unimplement renderer for type ' + type); + } + } + }, { + key: 'renderParagraphSection', + value: function renderParagraphSection(_ref3) { + var _ref32 = _slicedToArray(_ref3, 3); + + var type = _ref32[0]; + var tagName = _ref32[1]; + var markers = _ref32[2]; + + var element = _mobiledocHtmlRendererUtilsDom['default'].createElement(tagName); + var elements = [element]; + var currentElement = element; + + for (var i = 0, l = markers.length; i < l; i++) { + var marker = markers[i]; + + var _marker = _slicedToArray(marker, 3); + + var openTypes = _marker[0]; + var closeTypes = _marker[1]; + var text = _marker[2]; + + for (var j = 0, m = openTypes.length; j < m; j++) { + var markerType = this.markerTypes[openTypes[j]]; + var openedElement = createElementFromMarkerType(markerType); + _mobiledocHtmlRendererUtilsDom['default'].appendChild(currentElement, openedElement); + elements.push(openedElement); + currentElement = openedElement; + } + + _mobiledocHtmlRendererUtilsDom['default'].appendChild(currentElement, _mobiledocHtmlRendererUtilsDom['default'].createTextNode(text)); + + for (var j = 0, m = closeTypes; j < m; j++) { + elements.pop(); + currentElement = elements[elements.length - 1]; + } + } + + return element; + } + }]); + + return DOMRenderer; + })(); + + exports['default'] = DOMRenderer; +}); +define('mobiledoc-html-renderer', ['exports', 'mobiledoc-html-renderer/html-renderer'], function (exports, _mobiledocHtmlRendererHtmlRenderer) { + 'use strict'; + + exports.registerGlobal = registerGlobal; + + function registerGlobal(window) { + window.MobiledocHTMLRenderer = _mobiledocHtmlRendererHtmlRenderer['default']; + } + + exports['default'] = _mobiledocHtmlRendererHtmlRenderer['default']; +}); +define("mobiledoc-html-renderer/utils/dom", ["exports"], function (exports) { + "use strict"; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + var Element = (function () { + function Element(tagName) { + _classCallCheck(this, Element); + + this.tagName = tagName.toLowerCase(); + this.childNodes = []; + this.attributes = []; + } + + _createClass(Element, [{ + key: "appendChild", + value: function appendChild(element) { + this.childNodes.push(element); + } + }, { + key: "setAttribute", + value: function setAttribute(propName, propValue) { + this.attributes.push(propName, propValue); + } + }, { + key: "toString", + value: function toString() { + var html = "<" + this.tagName; + + if (this.attributes.length) { + for (var i = 0; i < this.attributes.length; i = i + 2) { + var propName = this.attributes[i], + propValue = this.attributes[i + 1]; + html += " " + propName + "=\"" + propValue + "\""; + } + } + html += ">"; + + for (var i = 0; i < this.childNodes.length; i++) { + html += this.childNodes[i].toString(); + } + html += ""; + return html; + } + }]); + + return Element; + })(); + + var TextNode = (function () { + function TextNode(value) { + _classCallCheck(this, TextNode); + + this.value = value; + } + + _createClass(TextNode, [{ + key: "toString", + value: function toString() { + return this.value; + } + }]); + + return TextNode; + })(); + + var Document = (function () { + function Document() { + _classCallCheck(this, Document); + } + + _createClass(Document, [{ + key: "createElement", + value: function createElement(tagName) { + return new Element(tagName); + } + }, { + key: "createTextNode", + value: function createTextNode(text) { + return new TextNode(text); + } + }]); + + return Document; + })(); + + var doc = new Document(); + + exports["default"] = { + createElement: function createElement(tagName) { + return doc.createElement(tagName); + }, + appendChild: function appendChild(target, child) { + target.appendChild(child); + }, + createTextNode: function createTextNode(text) { + return doc.createTextNode(text); + }, + setAttribute: function setAttribute(element, propName, propValue) { + element.setAttribute(propName, propValue); + } + }; +}); +require("mobiledoc-html-renderer")["registerGlobal"](window, document); +})(); \ No newline at end of file diff --git a/website/global/content-kit-editor.js b/website/global/content-kit-editor.js index 1a0cfe368..a195327b0 100644 --- a/website/global/content-kit-editor.js +++ b/website/global/content-kit-editor.js @@ -1063,17 +1063,13 @@ define('content-kit-editor/editor/editor', ['exports', 'content-kit-editor/views exports['default'] = Editor; }); -define('content-kit-editor', ['exports', 'content-kit-editor/editor/editor', 'content-kit-editor/runtime/renderers/mobiledoc-dom'], function (exports, _contentKitEditorEditorEditor, _contentKitEditorRuntimeRenderersMobiledocDom) { +define('content-kit-editor', ['exports', 'content-kit-editor/editor/editor'], function (exports, _contentKitEditorEditorEditor) { 'use strict'; exports.registerGlobal = registerGlobal; - var Runtime = { - DOMRenderer: _contentKitEditorRuntimeRenderersMobiledocDom['default'] - }; - var ContentKit = { - Editor: _contentKitEditorEditorEditor['default'], Runtime: Runtime + Editor: _contentKitEditorEditorEditor['default'] }; function registerGlobal(global) { @@ -1611,11 +1607,6 @@ define('content-kit-editor/renderers/mobiledoc', ['exports', 'content-kit-editor } }; }); -define('content-kit-editor/runtime/renderers/mobiledoc-dom', ['exports', 'mobiledoc-dom-renderer'], function (exports, _mobiledocDomRenderer) { - 'use strict'; - - exports['default'] = _mobiledocDomRenderer['default']; -}); define('content-kit-editor/utils/compat', ['exports', 'content-kit-editor/utils/doc', 'content-kit-editor/utils/win'], function (exports, _contentKitEditorUtilsDoc, _contentKitEditorUtilsWin) { 'use strict'; @@ -1942,7 +1933,7 @@ define('content-kit-editor/utils/http-utils', ['exports'], function (exports) { return null; } try { - return JSON.parse(jsonString); + return window.JSON.parse(jsonString); } catch (e) { return jsonString; } @@ -3038,159 +3029,5 @@ define('content-kit-utils/string-utils', ['exports'], function (exports) { exports.sanitizeWhitespace = sanitizeWhitespace; exports.injectIntoString = injectIntoString; }); -define('mobiledoc-dom-renderer/dom-renderer', ['exports'], function (exports) { - /** - * runtime DOM renderer - * renders a mobiledoc to DOM - * - * input: mobiledoc - * output: DOM - */ - - 'use strict'; - - var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - - var utils = { - createElement: function createElement(tagName) { - return document.createElement(tagName); - }, - appendChild: function appendChild(target, child) { - target.appendChild(child); - }, - createTextNode: function createTextNode(text) { - return document.createTextNode(text); - } - }; - - function createElementFromMarkerType() { - var _ref = arguments[0] === undefined ? ['', []] : arguments[0]; - - var _ref2 = _slicedToArray(_ref, 2); - - var tagName = _ref2[0]; - var attributes = _ref2[1]; - - var element = utils.createElement(tagName); - attributes = attributes || []; - - for (var i = 0, l = attributes.length; i < l; i = i + 2) { - var propName = attributes[i], - propValue = attributes[i + 1]; - element.setAttribute(propName, propValue); - } - return element; - } - - var DOMRenderer = (function () { - function DOMRenderer() { - _classCallCheck(this, DOMRenderer); - } - - _createClass(DOMRenderer, [{ - key: 'render', - - /** - * @param mobiledoc - * @param rootElement optional, defaults to an empty div - * @return DOMNode - */ - value: function render(mobiledoc) { - var _this = this; - - var rootElement = arguments[1] === undefined ? utils.createElement('div') : arguments[1]; - - var _mobiledoc = _slicedToArray(mobiledoc, 2); - - var markerTypes = _mobiledoc[0]; - var sections = _mobiledoc[1]; - - this.root = rootElement; - this.markerTypes = markerTypes; - - sections.forEach(function (section) { - return _this.renderSection(section); - }); - - return this.root; - } - }, { - key: 'renderSection', - value: function renderSection(section) { - var _section = _slicedToArray(section, 1); - - var type = _section[0]; - - switch (type) { - case 1: - var rendered = this.renderParagraphSection(section); - utils.appendChild(this.root, rendered); - break; - default: - throw new Error('Unimplement renderer for type ' + type); - } - } - }, { - key: 'renderParagraphSection', - value: function renderParagraphSection(_ref3) { - var _ref32 = _slicedToArray(_ref3, 3); - - var type = _ref32[0]; - var tagName = _ref32[1]; - var markers = _ref32[2]; - - var element = utils.createElement(tagName); - var elements = [element]; - var currentElement = element; - - for (var i = 0, l = markers.length; i < l; i++) { - var marker = markers[i]; - - var _marker = _slicedToArray(marker, 3); - - var openTypes = _marker[0]; - var closeTypes = _marker[1]; - var text = _marker[2]; - - for (var j = 0, m = openTypes.length; j < m; j++) { - var markerType = this.markerTypes[openTypes[j]]; - var openedElement = createElementFromMarkerType(markerType); - utils.appendChild(currentElement, openedElement); - elements.push(openedElement); - currentElement = openedElement; - } - - utils.appendChild(currentElement, utils.createTextNode(text)); - - for (var j = 0, m = closeTypes; j < m; j++) { - elements.pop(); - currentElement = elements[elements.length - 1]; - } - } - - return element; - } - }]); - - return DOMRenderer; - })(); - - exports['default'] = DOMRenderer; -}); -define('mobiledoc-dom-renderer', ['exports', 'mobiledoc-dom-renderer/dom-renderer'], function (exports, _mobiledocDomRendererDomRenderer) { - 'use strict'; - - exports.registerGlobal = registerGlobal; - - function registerGlobal(window) { - window.MobiledocDOMRenderer = _mobiledocDomRendererDomRenderer['default']; - } - - exports['default'] = _mobiledocDomRendererDomRenderer['default']; -}); require("content-kit-editor")["registerGlobal"](window, document); })(); \ No newline at end of file