aurelia-kendoui-bridge
Version:
A set of Telerik KendoUI wrappers for Aurelia allowing developers to easily use KendoUI components in their Aurelia application.
166 lines (127 loc) • 4.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TemplateCompiler = undefined;
var _dec, _class;
var _aureliaDependencyInjection = require('aurelia-dependency-injection');
var _aureliaTemplating = require('aurelia-templating');
var _aureliaBinding = require('aurelia-binding');
var _util = require('./util');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var TemplateCompiler = exports.TemplateCompiler = (_dec = (0, _aureliaDependencyInjection.inject)(_aureliaTemplating.TemplatingEngine, _util.Util), _dec(_class = function () {
function TemplateCompiler(templatingEngine, util) {
_classCallCheck(this, TemplateCompiler);
this.isInitialized = false;
this.templatingEngine = templatingEngine;
this.util = util;
}
TemplateCompiler.prototype.initialize = function initialize() {
if (this.isInitialized) return;
if (!window.kendo) return;
var _this = this;
kendo.ui.Widget.prototype.angular = function (_event, _args) {
_this.handleTemplateEvents(this, _event, _args);
};
kendo.mobile.ui.Widget.prototype.angular = function (_event, _args) {
_this.handleTemplateEvents(this, _event, _args);
};
this.isInitialized = true;
};
TemplateCompiler.prototype.handleTemplateEvents = function handleTemplateEvents(widget, _event, _args) {
if (_event !== 'compile' && _event !== 'cleanup') return;
var $parent = void 0;
var container = void 0;
var $angular = widget.$angular || widget.options.$angular;
if ($angular) {
$parent = $angular[0]._$parent;
container = $angular[0]._$container;
}
if (!$parent) return;
var args = _args();
var elements = args.elements;
var data = args.data;
var scopeFrom = args.scopeFrom;
switch (_event) {
case 'compile':
this.compile($parent, elements, data, scopeFrom, container);
break;
case 'cleanup':
this.cleanup(elements);
break;
default:
break;
}
};
TemplateCompiler.prototype.compile = function compile($parent, elements, data, scopeFrom, container) {
var _this2 = this;
var _loop = function _loop(i) {
var element = elements[i];
var ctx = undefined;
if (data && data[i]) {
var _data = data[i];
var dataItem = _data.dataItem || _data.aggregate || _data;
if (!_this2.util.isObject(dataItem)) {
ctx = {
dataItem: dataItem
};
} else {
ctx = dataItem;
}
} else if (scopeFrom) {
ctx = scopeFrom;
}
if (element instanceof kendo.jQuery) {
element.each(function (index, elem) {
return _this2.enhanceView($parent, elem, ctx, container);
});
} else {
_this2.enhanceView($parent, element, ctx, container);
}
};
for (var i = 0; i < elements.length; i++) {
_loop(i);
}
};
TemplateCompiler.prototype.enhanceView = function enhanceView($parent, element, ctx, container) {
var view = kendo.jQuery(element).data('viewInstance');
kendo.jQuery(element).data('$$kendoScope', ctx);
if (element.querySelectorAll('.au-target').length === 0) {
if (container) {
var childContainer = container.createChild();
var resources = container.get(_aureliaTemplating.ViewResources);
view = this.templatingEngine.enhance({
bindingContext: ctx,
overrideContext: (0, _aureliaBinding.createOverrideContext)(ctx, $parent),
container: childContainer,
element: element,
resources: resources
});
} else {
view = this.templatingEngine.enhance({
bindingContext: ctx,
overrideContext: (0, _aureliaBinding.createOverrideContext)(ctx, $parent),
element: element
});
}
kendo.jQuery(element).data('viewInstance', view);
} else {
view.bind(ctx, (0, _aureliaBinding.createOverrideContext)(ctx, $parent));
}
view.attached();
};
TemplateCompiler.prototype.cleanup = function cleanup(elements) {
if (!elements) return;
for (var i = 0; i < elements.length; i++) {
var _element = elements[i];
this.cleanupView(_element);
}
};
TemplateCompiler.prototype.cleanupView = function cleanupView(element) {
var view = kendo.jQuery(element).data('viewInstance');
if (!view) return;
view.detached();
view.unbind();
};
return TemplateCompiler;
}()) || _class);