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": "

 

entry photo
{{content.title}}
{{content.description}}
", - "videoTemplate": "

 

{{content.title}}
{{content.description}}
", - "noteTemplate": "

 

{{content.title}}
{{content.data}}
" + "image": "

 

entry photo
{{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 {