I´m trying to make a custom polymer element be contenteditable
. I´m a polymer newbie so I´m probably doing something stupid. I can create the element and it renders and reacts to events but it does not go into editable mode when clicked. Any ideas?
<polymer-element name="editable-h1">
<template>
<h1 contenteditable="true">
<content></content>
</h1>
</template>
</polymer-element>
The elements declared within custom tag are considered part of the light DOM, and I'm guessing that, due to shadow boundaries, there is a problem with using contenteditable
on them. You would need to reinsert the content nodes into the shadow root of your custom element to make this work.
Here is an example of how you can accomplish that:
http://codepen.io/anon/pen/WbNWdw
<html>
<head>
<link rel="import" href="http://www.polymer-project.org/components/platform/platform.js">
<link rel="import" href="http://www.polymer-project.org/components/core-tooltip/core-tooltip.html">
<polymer-element name="editable-h1">
<script>
Polymer('editable-h1', {
ready: function() {
var sroot = this.$;
var nodes = sroot.mycontent.getDistributedNodes();
[].forEach.call(nodes, function(node) {
sroot.editableportion.appendChild(node);
});
},
blur: function () {
console.log('blur');
},
click: function () {
console.log('click');
},
focus: function () {
console.log('focus');
}
});
</script>
<template>
<h1 contenteditable="true" on-click="{{click}}" on-blur="{{blur}}" on-focus={{focus}} id="editableportion">
</h1>
<content id="mycontent"></content>
</template>
</polymer-element>
</head>
<body>
<h1 contenteditable="true">I´m a regular heading</h1>
<editable-h1>
I'm an polymer enhanced heading
<span>With a span for good measure</span>
</editable-h1>
</body>
</html>