Здравствуйте. Решил попробовать в деле концепцию web components. Есть код:
<template id="load-task">
<div class="load-task">
<div class="load-task-name">
<content></content>
</div>
<div class="load-task-progress">
<div class="load-task-progress-inner"></div>
</div>
</div>
</template>
И есть JS логика:
var template=document.querySelector('#load-task');
var loadTask=Object.create(HTMLElement.prototype, {});
loadTask.progress=0;
loadTask.state=0;
var getState=function(n) {
if (n>0) return 'success';
if (n<0) return 'fail';
return '';
};
var attribs={
progress:function(oldV,newV) {
this.querySelector('.load-task-progress-inner').style.width=progress+'%';
},
state:function(oldV,newV) {
var _state=getState(oldV);
if (_state.length>0&&this.classList.contains(_state))
this.classList.remove(_state);
_state=getState(newV);
if (_state.length>0&&!this.classList.contains(_state))
this.classList.add(_state);
}
};
loadTask.createdCallback=function() {
var shadow = this.createShadowRoot();
shadow.resetStyleInheritance = true;
shadow.appendChild(template.content);
for (var name in attribs)
attribs[name].call(this,undefined,this[name]);
};
loadTask.attributeChangedCallback=function(name, oldV, newV) {
if (!!attribs[name])
attribs[name].call(this,oldV,newV);
};
document.registerElement('load-task', { prototype: loadTask });
При запуске сего кода всё работает хорошо,
но стоит подключить его к другому при помощи
link rel="import" как всё ломается.
Обращаем внимание на первую строку логики
var template=document.querySelector('#load-task');
По не понятным мне причинам в импортируемых документах не находятся вообще никакие элементы и не важно в каком месте их объявить. Поиск в интернетах ничего не дал.
Подкажите, пожалуйста, как решить проблему.