draft-js-import-element
Advanced tools
Comparing version 0.1.5 to 0.1.6
@@ -38,2 +38,49 @@ 'use strict'; | ||
// Map element attributes to entity data. | ||
var ELEM_ATTR_MAP = { | ||
a: { href: 'url', rel: 'rel', target: 'target' } | ||
}; | ||
// Functions to convert elements to entities. | ||
var ELEM_TO_ENTITY = { | ||
a: function a(tagName, element) { | ||
var data = {}; | ||
if (ELEM_ATTR_MAP.hasOwnProperty(tagName)) { | ||
var attrMap = ELEM_ATTR_MAP[tagName]; | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
try { | ||
for (var _iterator = Object.keys(attrMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var attr = _step.value; | ||
var dataKey = attrMap[attr]; | ||
var dataValue = element.getAttribute(attr); | ||
if (dataValue != null) { | ||
data[dataKey] = dataValue; | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
} | ||
// Don't add `<a>` elmeents with no href. | ||
if (data.url != null) { | ||
return _draftJs.Entity.create(_draftJsTools.ENTITY_TYPE.LINK, 'MUTABLE', data); | ||
} | ||
} | ||
}; | ||
// TODO: Move this out to a module. | ||
@@ -204,7 +251,5 @@ var INLINE_ELEMENTS = { | ||
style = addStyleFromTagName(style, tagName); | ||
if (tagName === 'a') { | ||
var url = element.getAttribute('href'); | ||
if (url != null) { | ||
entityKey = _draftJs.Entity.create(_draftJsTools.ENTITY_TYPE.LINK, 'MUTABLE', { url: url }); | ||
} | ||
if (ELEM_TO_ENTITY.hasOwnProperty(tagName)) { | ||
// If the to-entity function returns nothing, use the existing entity. | ||
entityKey = ELEM_TO_ENTITY[tagName](tagName, element) || entityKey; | ||
} | ||
@@ -211,0 +256,0 @@ block.styleStack.push(style); |
{ | ||
"name": "draft-js-import-element", | ||
"version": "0.1.5", | ||
"version": "0.1.6", | ||
"description": "DraftJS: Import Element to ContentState", | ||
@@ -14,4 +14,4 @@ "main": "lib/main.js", | ||
"dependencies": { | ||
"draft-js-tools": "^0.1.1", | ||
"synthetic-dom": "^0.1.0" | ||
"draft-js-tools": "^0.1.2", | ||
"synthetic-dom": "^0.1.1" | ||
}, | ||
@@ -18,0 +18,0 @@ "devDependencies": { |
@@ -21,2 +21,10 @@ # Plain text | ||
# Entity missing required attribute | ||
{"entityMap":{},"blocks":[{"key":"3n6ro","text":"a","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[]}]} | ||
<p><a id="foo">a</a></p> | ||
# Entity with supported and unsupported attributes | ||
{"entityMap":{"0":{"type":"LINK","mutability":"MUTABLE","data":{"url":"/","rel":"foo","target":"_blank"}}},"blocks":[{"key":"8r91j","text":"a","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[{"offset":0,"length":1,"key":0}]}]} | ||
<p><a href="/" rel="foo" target="_blank" id="bar" baz="baz">a</a></p> | ||
# Entity with inline style | ||
@@ -23,0 +31,0 @@ {"entityMap":{"0":{"type":"LINK","mutability":"MUTABLE","data":{"url":"/"}}},"blocks":[{"key":"8r91j","text":"a","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":1,"style":"ITALIC"}],"entityRanges":[{"offset":0,"length":1,"key":0}]}]} |
35526
387
Updateddraft-js-tools@^0.1.2
Updatedsynthetic-dom@^0.1.1