diff --git a/data/templates.json b/data/templates.json
index cf7ac49..4902f62 100644
--- a/data/templates.json
+++ b/data/templates.json
@@ -1,6 +1,6 @@
{
- "imageTemplate": "
{{content.title}}
{{content.description}}
",
- "videoTemplate": "
{{content.title}}
{{content.description}}
",
- "noteTemplate": "
{{content.title}}
{{content.data}}
"
+ "image": "
{{content.title}}
{{content.description}}
",
+ "video": "
{{content.title}}
{{content.description}}
",
+ "notes": "
{{content.title}}
{{content.data}}
"
}
diff --git a/js/app.js b/js/app.js
index a9afb10..8d64822 100644
--- a/js/app.js
+++ b/js/app.js
@@ -16,13 +16,44 @@ app.factory('DataService', function ($http, URL) {
};
});
-app.factory('TemplateService', function ($http, URL) {
- var getTemplates = function () {
- return $http.get(URL + 'templates.json');
+app.factory('TemplateService', function ($http, $compile, $q, URL) {
+
+ var deferred = $q.defer(),
+ templates = null,
+ loadPromise = deferred.promise;
+
+ var loadTemplates = function () {
+ $http.get(URL + 'templates.json').then(function(res){
+ templates = res.data;
+ deferred.resolve();
+ });
+ };
+
+ var getTemplate = function (name) {
+ return templates[name] || '';
};
return {
- getTemplates: getTemplates
+ load: function(){
+ loadTemplates();
+
+ return this;
+ },
+
+ compile:function(params){
+ var _compile = function(){
+ params.element.html( getTemplate(params.templateName) );
+
+ $compile( params.element.contents() )(params.scope);
+ }
+
+ if(null !== templates){
+ _compile();
+ }
+ else{
+ loadPromise.then(_compile);
+ }
+ }
};
});
@@ -40,35 +71,22 @@ app.controller('ContentCtrl', function (DataService) {
ctrl.fetchContent();
});
-app.directive('contentItem', function ($compile, TemplateService) {
+app.directive('contentItem', function (TemplateService) {
var getTemplate = function (templates, contentType) {
- var template = '';
-
- switch (contentType) {
- case 'image':
- template = templates.imageTemplate;
- break;
- case 'video':
- template = templates.videoTemplate;
- break;
- case 'notes':
- template = templates.noteTemplate;
- break;
- }
-
- return template;
+ return templates[contentType] || '';
};
var linker = function (scope, element, attrs) {
scope.rootDirectory = 'images/';
- TemplateService.getTemplates().then(function (response) {
- var templates = response.data;
-
- element.html(getTemplate(templates, scope.content.content_type));
+ TemplateService
+ .load()
+ .compile({
+ templateName : scope.content.content_type,
+ scope : scope,
+ element : element
+ });
- $compile(element.contents())(scope);
- });
};
return {