gulp copy-server to update the ammico app on the server
authorrougeronj
Wed, 08 Apr 2015 17:24:35 +0200
changeset 85 5c8d95d96c58
parent 84 57a60c21a059
child 86 2deead259283
gulp copy-server to update the ammico app on the server
server/ammico/static/ammico/js/app.js
server/ammico/static/ammico/js/app.min.js
server/ammico/static/ammico/js/templates.js
--- a/server/ammico/static/ammico/js/app.js	Wed Apr 08 17:16:31 2015 +0200
+++ b/server/ammico/static/ammico/js/app.js	Wed Apr 08 17:24:35 2015 +0200
@@ -308,7 +308,7 @@
 			controller: 'searchCtrl'
 		});
 	})
-	.controller('searchCtrl', function($scope, $location, $routeParams, searchApi, $modal){
+	.controller('searchCtrl', function($scope, $location, $routeParams, searchApi, ammicoApi, $modal){
 		$scope.q = $routeParams.q || '';
 		$scope.results = searchApi.searchResource({q:$scope.q, of: 'json', synthesis: 'false', nresults:'10', callback: 'JSON_CALLBACK'}).getJsonp();
 		
@@ -325,7 +325,7 @@
 					book: idBook,
 					idInventory: $scope.results.hits[index].metas_dict.inventorynumber
 				};
-				searchApi.listSlides.save(newSlide);
+				ammicoApi.listSlides.save(newSlide);
 			});
 		};
 	})
--- a/server/ammico/static/ammico/js/app.min.js	Wed Apr 08 17:16:31 2015 +0200
+++ b/server/ammico/static/ammico/js/app.min.js	Wed Apr 08 17:24:35 2015 +0200
@@ -1,1 +1,1 @@
-!function(){"use strict";angular.module("ammico",["ngRoute","ammicoHome","ammicoBooks","ammicoSlides","ammicoSlideshow","ammicoSearch","ammicoAuth","templates"]).config(function(o){o.when("/",{controller:"homeCtrl",templateUrl:"home/home.html",authRequired:!1}).when("/books",{controller:"booksCtrl",templateUrl:"books/books.html",authRequired:!0}).when("/books/:idBook",{controller:"bookCtrl",templateUrl:"books/book.html",authRequired:!0}).when("/slide/:idSlide",{controller:"slidesCtrl",templateUrl:"slides/slides.html",authRequired:!0}).when("/slideshow/",{controller:"slideshowCtrl",templateUrl:"slideshow/slideshow.html",authRequired:!0}).when("/slideshow/:iSlide",{controller:"slideshowCtrl",templateUrl:"slideshow/slideshow.html",authRequired:!0}).when("/search/:q",{controller:"searchCtrl",templateUrl:"search/search.html",authRequired:!0}).when("/auth/:action",{controller:"authCtrl",templateUrl:"home/home.html",authRequired:!1}).otherwise({redirectTo:"/"})}).run(function(o,e,t,s){o.globals={},t.sessionStorage.token&&(o.globals.userLogged=!0,s.defaults.headers.common.Authorization="Token "+t.sessionStorage.token),o.$on("$routeChangeStart",function(t,s){s.authRequired&&!o.globals.userLogged&&e.path("/auth/login")})}).service("searchApi",function(o,e){this.searchResource=function(t){return o(e.urls.searchUrl,{callback:"JSON_CALLBACK"},{getJsonp:{method:"JSONP",params:t,isArray:!1,transformResponse:function(o){for(var e=o.hits.length,t=0;e>t;t++){var s=o.hits[t].metas.length;o.hits[t].metas_dict={};for(var i=0;s>i;i++)"undefined"==typeof o.hits[t].metas[i].images?o.hits[t].metas_dict[o.hits[t].metas[i].name]=o.hits[t].metas[i].value:o.hits[t].metas_dict.images=o.hits[t].metas[i].images[0].value}return o}}})}}).service("ammicoApi",function(o,e,t){this.listBooks=o(e.urls.ammicoUrl+"/books"),this.book=o(e.urls.ammicoUrl+"/books/:idBook",{idBook:"@idBook"}),this.order=o(e.urls.ammicoUrl+"/books/:idBook/order",{idBook:"@idBook"}),this.booksSlides=o(e.urls.ammicoUrl+"/books/:idBook/slides",{idBook:"@idBook"}),this.listSlides=o(e.urls.ammicoUrl+"/slides"),this.slide=o(e.urls.ammicoUrl+"/slides/:idSlide",{idSlide:"@idSlide"}),this.sanitizeUrls=function(o){return o.details.audio=t.trustAsResourceUrl(o.details.audio),o.details.video=t.trustAsResourceUrl(o.details.video),o.audio=t.trustAsResourceUrl(o.audio),o.video=t.trustAsResourceUrl(o.video),o}}).service("authApi",function(o,e){this.login=o(e.urls.ammicoUrl+"/auth/api-token-auth"),this.logout=o(e.urls.ammicoUrl+"/auth/logout"),this.user=o(e.urls.ammicoUrl+"/auth/user"),this.test=o(e.urls.ammicoUrl+"/auth/auth")})}(),function(){"use strict";angular.module("ammico").controller("routeClassCtrl",function(o,e){o.isActive=function(o){return o===e.path()}})}(),function(){"use strict";angular.module("ammicoAuth",["ngRoute"]).controller("authCtrl",function(o,e,t,s){s.open({templateUrl:"auth/"+t.action+"_modal.html",controller:"auth"+t.action+"Ctrl"}).result.then(function(e){o.path(e)},function(){o.path("/")})}).controller("authloginCtrl",function(o,e,t,s,i,l){e.login=function(){t.login.save({username:e.username,password:e.password},function(e){l.globals.userLogged=!0,s.sessionStorage.token=e.token,i.defaults.headers.common.Authorization="Token "+s.sessionStorage.token,o.close("/books")})},e.register=function(){o.close("/auth/register")},e.cancel=function(){o.close("/")}}).controller("authlogoutCtrl",function(o,e,t,s,i){delete t.sessionStorage.token,i.globals.userLogged=!1,delete s.defaults.headers.common.Authorization,e.cancel=function(){o.close("/")}}).controller("authregisterCtrl",function(o,e,t){o.register=function(){t.user.save({username:o.username,email:o.email,password:o.password},function(){e.close("/auth/login")})},o.back=function(){e.close("/auth/login")}})}(),function(){"use strict";angular.module("ammicoBooks",["ngRoute","ui.sortable"]).controller("booksCtrl",function(o,e,t,s){o.books=s.listBooks.query({format:"json"},function(o){o.sort(function(o,e){return o.date<e.date})}),o.searchSubmit=function(){e.path("/search/"+o.q)},o.addBook=function(e){t.open({templateUrl:"books/add_modal.html",controller:"ModalAddBookCtrl"}).result.then(function(t){s.listBooks.save({idParent:e,title:t},function(e){o.books.push(e)})})},o.deleteItem=function(e){window.confirm("Êtes-vous sûr(e) de vouloir effacer cet élément ? Cette action est irrémédiable.")&&s.book.delete({idBook:e.id},function(){o.books.splice(o.books.indexOf(e),1)},function(t){404===t.status&&o.books.splice(o.books.indexOf(e),1)})}}).controller("bookCtrl",function(o,e,t){o.slides=e.booksSlides.query({idBook:t.idBook,format:"json"},function(o){o.sort(function(o,e){return o.orderIndex>e.orderIndex})}),o.sortableOptions={stop:function(){var s=o.slides.map(function(o){return o.id});e.order.save({idBook:t.idBook},{order:s})}},o.deleteItem=function(t){t>=0&&t<o.slides.length&&window.confirm("Êtes-vous sûr(e) de vouloir effacer cet élément ? Cette action est irrémédiable.")&&e.slide.delete({idSlide:o.slides[t].id},function(){o.slides.splice(t,1)},function(e){404===e.status&&o.slides.splice(t,1)})}}).controller("ModalAddBookCtrl",function(o,e,t){o.add=function(){t.close(o.title)},o.cancel=function(){t.dismiss("cancel")}})}(),function(){"use strict";angular.module("ammicoHome",["ngRoute"]).config(function(o){o.when("/",{templateUrl:"home/home.html",controller:"homeCtrl"})}).controller("homeCtrl",function(o,e){o.searchSubmit=function(){e.path("/search/"+o.q)}}).filter("meta",function(){return function(o,e){for(var t=o.length,s=0,i=!1;i===!1&&t>s;){if(o[s].name===e)return i=!0,o[s].value;s++}return""}})}(),function(){"use strict";angular.module("ammicoSearch",["ngResource","ngRoute","ui.bootstrap"]).config(function(o){o.when("/",{templateUrl:"search/search.html",controller:"searchCtrl"})}).controller("searchCtrl",function(o,e,t,s,i){o.q=t.q||"",o.results=s.searchResource({q:o.q,of:"json",synthesis:"false",nresults:"10",callback:"JSON_CALLBACK"}).getJsonp(),o.toggleModal=function(e){var t=i.open({templateUrl:"search/modal.html",controller:"ModalInstanceCtrl",size:"sm"});t.result.then(function(t){var i={book:t,idInventory:o.results.hits[e].metas_dict.inventorynumber};s.listSlides.save(i)})}}).controller("ModalInstanceCtrl",function(o,e,t){o.books=e.listBooks.query({format:"json"}),o.addToBook=function(o){t.close(o)},o.cancel=function(){t.dismiss("cancel")}})}(),function(){"use strict";angular.module("ammicoSlides",["ngResource","ngRoute"]).controller("slidesCtrl",function(o,e,t){o.slide=t.slide.get({idSlide:e.idSlide,format:"json"},function(o){o=t.sanitizeUrls(o)})}).directive("slideEditor",function(){return{restrict:"AE",replace:!0,scope:!1,templateUrl:"slides/data_editor.html",controller:function(o){o.slidesave=function(){if("string"==typeof o.slide.tags){o.slide.tags=o.slide.tags.split(",");for(var e=o.slide.tags.length-1;e>=0;e--)o.slide.tags[e]=o.slide.tags[e].trim()}o.slide.editMode=!1,o.slide.$save({idSlide:o.slide.id,format:"json"})},o.doubleClick=function(){o.slide.editMode=!0}}}})}(),function(){"use strict";angular.module("ammicoSlideshow",["ngResource","ngRoute","ui.bootstrap"]).controller("slideshowCtrl",function(o,e,t){o.slideshow=e.booksSlides.query({idBook:t.iSlide,format:"json"},function(o){o=e.sanitizeUrls(o)}),o.book=e.book.get({idBook:t.iSlide,format:"json"})})}();
\ No newline at end of file
+!function(){"use strict";angular.module("ammico",["ngRoute","ammicoHome","ammicoBooks","ammicoSlides","ammicoSlideshow","ammicoSearch","ammicoAuth","templates"]).config(function(o){o.when("/",{controller:"homeCtrl",templateUrl:"home/home.html",authRequired:!1}).when("/books",{controller:"booksCtrl",templateUrl:"books/books.html",authRequired:!0}).when("/books/:idBook",{controller:"bookCtrl",templateUrl:"books/book.html",authRequired:!0}).when("/slide/:idSlide",{controller:"slidesCtrl",templateUrl:"slides/slides.html",authRequired:!0}).when("/slideshow/",{controller:"slideshowCtrl",templateUrl:"slideshow/slideshow.html",authRequired:!0}).when("/slideshow/:iSlide",{controller:"slideshowCtrl",templateUrl:"slideshow/slideshow.html",authRequired:!0}).when("/search/:q",{controller:"searchCtrl",templateUrl:"search/search.html",authRequired:!0}).when("/auth/:action",{controller:"authCtrl",templateUrl:"home/home.html",authRequired:!1}).otherwise({redirectTo:"/"})}).run(function(o,e,t,s){o.globals={},t.sessionStorage.token&&(o.globals.userLogged=!0,s.defaults.headers.common.Authorization="Token "+t.sessionStorage.token),o.$on("$routeChangeStart",function(t,s){s.authRequired&&!o.globals.userLogged&&e.path("/auth/login")})}).service("searchApi",function(o,e){this.searchResource=function(t){return o(e.urls.searchUrl,{callback:"JSON_CALLBACK"},{getJsonp:{method:"JSONP",params:t,isArray:!1,transformResponse:function(o){for(var e=o.hits.length,t=0;e>t;t++){var s=o.hits[t].metas.length;o.hits[t].metas_dict={};for(var i=0;s>i;i++)"undefined"==typeof o.hits[t].metas[i].images?o.hits[t].metas_dict[o.hits[t].metas[i].name]=o.hits[t].metas[i].value:o.hits[t].metas_dict.images=o.hits[t].metas[i].images[0].value}return o}}})}}).service("ammicoApi",function(o,e,t){this.listBooks=o(e.urls.ammicoUrl+"/books"),this.book=o(e.urls.ammicoUrl+"/books/:idBook",{idBook:"@idBook"}),this.order=o(e.urls.ammicoUrl+"/books/:idBook/order",{idBook:"@idBook"}),this.booksSlides=o(e.urls.ammicoUrl+"/books/:idBook/slides",{idBook:"@idBook"}),this.listSlides=o(e.urls.ammicoUrl+"/slides"),this.slide=o(e.urls.ammicoUrl+"/slides/:idSlide",{idSlide:"@idSlide"}),this.sanitizeUrls=function(o){return o.details.audio=t.trustAsResourceUrl(o.details.audio),o.details.video=t.trustAsResourceUrl(o.details.video),o.audio=t.trustAsResourceUrl(o.audio),o.video=t.trustAsResourceUrl(o.video),o}}).service("authApi",function(o,e){this.login=o(e.urls.ammicoUrl+"/auth/api-token-auth"),this.logout=o(e.urls.ammicoUrl+"/auth/logout"),this.user=o(e.urls.ammicoUrl+"/auth/user"),this.test=o(e.urls.ammicoUrl+"/auth/auth")})}(),function(){"use strict";angular.module("ammico").controller("routeClassCtrl",function(o,e){o.isActive=function(o){return o===e.path()}})}(),function(){"use strict";angular.module("ammicoAuth",["ngRoute"]).controller("authCtrl",function(o,e,t,s){s.open({templateUrl:"auth/"+t.action+"_modal.html",controller:"auth"+t.action+"Ctrl"}).result.then(function(e){o.path(e)},function(){o.path("/")})}).controller("authloginCtrl",function(o,e,t,s,i,l){e.login=function(){t.login.save({username:e.username,password:e.password},function(e){l.globals.userLogged=!0,s.sessionStorage.token=e.token,i.defaults.headers.common.Authorization="Token "+s.sessionStorage.token,o.close("/books")})},e.register=function(){o.close("/auth/register")},e.cancel=function(){o.close("/")}}).controller("authlogoutCtrl",function(o,e,t,s,i){delete t.sessionStorage.token,i.globals.userLogged=!1,delete s.defaults.headers.common.Authorization,e.cancel=function(){o.close("/")}}).controller("authregisterCtrl",function(o,e,t){o.register=function(){t.user.save({username:o.username,email:o.email,password:o.password},function(){e.close("/auth/login")})},o.back=function(){e.close("/auth/login")}})}(),function(){"use strict";angular.module("ammicoBooks",["ngRoute","ui.sortable"]).controller("booksCtrl",function(o,e,t,s){o.books=s.listBooks.query({format:"json"},function(o){o.sort(function(o,e){return o.date<e.date})}),o.searchSubmit=function(){e.path("/search/"+o.q)},o.addBook=function(e){t.open({templateUrl:"books/add_modal.html",controller:"ModalAddBookCtrl"}).result.then(function(t){s.listBooks.save({idParent:e,title:t},function(e){o.books.push(e)})})},o.deleteItem=function(e){window.confirm("Êtes-vous sûr(e) de vouloir effacer cet élément ? Cette action est irrémédiable.")&&s.book.delete({idBook:e.id},function(){o.books.splice(o.books.indexOf(e),1)},function(t){404===t.status&&o.books.splice(o.books.indexOf(e),1)})}}).controller("bookCtrl",function(o,e,t){o.slides=e.booksSlides.query({idBook:t.idBook,format:"json"},function(o){o.sort(function(o,e){return o.orderIndex>e.orderIndex})}),o.sortableOptions={stop:function(){var s=o.slides.map(function(o){return o.id});e.order.save({idBook:t.idBook},{order:s})}},o.deleteItem=function(t){t>=0&&t<o.slides.length&&window.confirm("Êtes-vous sûr(e) de vouloir effacer cet élément ? Cette action est irrémédiable.")&&e.slide.delete({idSlide:o.slides[t].id},function(){o.slides.splice(t,1)},function(e){404===e.status&&o.slides.splice(t,1)})}}).controller("ModalAddBookCtrl",function(o,e,t){o.add=function(){t.close(o.title)},o.cancel=function(){t.dismiss("cancel")}})}(),function(){"use strict";angular.module("ammicoHome",["ngRoute"]).config(function(o){o.when("/",{templateUrl:"home/home.html",controller:"homeCtrl"})}).controller("homeCtrl",function(o,e){o.searchSubmit=function(){e.path("/search/"+o.q)}}).filter("meta",function(){return function(o,e){for(var t=o.length,s=0,i=!1;i===!1&&t>s;){if(o[s].name===e)return i=!0,o[s].value;s++}return""}})}(),function(){"use strict";angular.module("ammicoSearch",["ngResource","ngRoute","ui.bootstrap"]).config(function(o){o.when("/",{templateUrl:"search/search.html",controller:"searchCtrl"})}).controller("searchCtrl",function(o,e,t,s,i,l){o.q=t.q||"",o.results=s.searchResource({q:o.q,of:"json",synthesis:"false",nresults:"10",callback:"JSON_CALLBACK"}).getJsonp(),o.toggleModal=function(e){var t=l.open({templateUrl:"search/modal.html",controller:"ModalInstanceCtrl",size:"sm"});t.result.then(function(t){var s={book:t,idInventory:o.results.hits[e].metas_dict.inventorynumber};i.listSlides.save(s)})}}).controller("ModalInstanceCtrl",function(o,e,t){o.books=e.listBooks.query({format:"json"}),o.addToBook=function(o){t.close(o)},o.cancel=function(){t.dismiss("cancel")}})}(),function(){"use strict";angular.module("ammicoSlides",["ngResource","ngRoute"]).controller("slidesCtrl",function(o,e,t){o.slide=t.slide.get({idSlide:e.idSlide,format:"json"},function(o){o=t.sanitizeUrls(o)})}).directive("slideEditor",function(){return{restrict:"AE",replace:!0,scope:!1,templateUrl:"slides/data_editor.html",controller:function(o){o.slidesave=function(){if("string"==typeof o.slide.tags){o.slide.tags=o.slide.tags.split(",");for(var e=o.slide.tags.length-1;e>=0;e--)o.slide.tags[e]=o.slide.tags[e].trim()}o.slide.editMode=!1,o.slide.$save({idSlide:o.slide.id,format:"json"})},o.doubleClick=function(){o.slide.editMode=!0}}}})}(),function(){"use strict";angular.module("ammicoSlideshow",["ngResource","ngRoute","ui.bootstrap"]).controller("slideshowCtrl",function(o,e,t){o.slideshow=e.booksSlides.query({idBook:t.iSlide,format:"json"},function(o){o=e.sanitizeUrls(o)}),o.book=e.book.get({idBook:t.iSlide,format:"json"})})}();
\ No newline at end of file
--- a/server/ammico/static/ammico/js/templates.js	Wed Apr 08 17:16:31 2015 +0200
+++ b/server/ammico/static/ammico/js/templates.js	Wed Apr 08 17:24:35 2015 +0200
@@ -2,11 +2,11 @@
 $templateCache.put("auth/logout_modal.html","<div class=\"modal-header ng-scope\">\n	<h3 class=\"modal-title\">Deconnection</h3>\n</div>\n\n<div class=\"modal-body ng-scope\">\n	<p>Vous n\'est plus connecté</p>\n</div>\n\n<div class=\"modal-footer ng-scope\">\n	<button ng-click=\"cancel()\" class=\"btn btn-warning\">Acceuil</button>\n</div>");
 $templateCache.put("auth/register_modal.html","<div class=\"modal-header ng-scope\">\n	<h3 class=\"modal-title\">Créer un Compte</h3>\n</div>\n\n<form ng-submit=\"register()\">\n	<div class=\"modal-body ng-scope\">\n			<input type=\"text\" class=\"form-control\" ng-model=\'username\' placeholder=\"Nom d\'utilisateur\"></input>\n			<input type=\"text\" class=\"form-control\" ng-model=\'email\' placeholder=\"Email\"></input>\n			<input type=\"password\" class=\"form-control\" ng-model=\'password\' placeholder=\"Mot de passe\"></input>\n			<input type=\"password\" class=\"form-control\" ng-model=\'password2\' placeholder=\"Confirmer le mot de pass\"></input>\n	</div>\n	\n	<div class=\"modal-footer ng-scope\">\n		<button type=\"button\" ng-click=\"back()\" class=\"btn btn-warning\">Retour</button>\n		<button type=\"submit\" class=\"btn btn-primary\">Créer</button>\n	</div>\n</form>");
 $templateCache.put("books/add_modal.html","<div class=\"modal-header ng-scope\">\n	<h3 class=\"modal-title\">Ajouter un nouveau Book</h3>\n</div>\n\n<form ng-submit=\"add()\" novalidate>\n	<div class=\"modal-body ng-scope\">\n		<input type=\"text\" class=\"form-control\" ng-model=\'title\' placeholder=\"Titre\"></input>\n	</div>\n	\n	<div class=\"modal-footer ng-scope\">\n		<button type=\"button\" ng-click=\"cancel()\" class=\"btn btn-warning\">Cancel</button>\n		<button type=\"submit\" class=\"btn btn-primary\">Create</button>\n	</div>	\n</form>");
-$templateCache.put("books/book.html","<p>Books {{idBook}}&nbsp;:</p>\n\n<ul ui-sortable=\"sortableOptions\" ng:model=\"slides\" class=\"list-unstyled list-inline gallery container\">\n  <li class=\"col-md-3 item\" ng-repeat=\"i in slides\">\n    <div class=\"img-ctn\">\n        <img class=\"img img-responsive image\" ng-src=\"{{ i.details.image }}\" />\n        <p>{{ i.details.title }}</p>\n        <div class=\"gallery-buttons\">\n          <a class=\"btn btn-default\" href=\"#/slide/{{ i.id }}\"><span class=\"glyphicon glyphicon-pencil\"></span></a>\n          <a class=\"btn btn-default\" ng-click=\"deleteItem($index)\"><span class=\"glyphicon glyphicon-trash\"></span></a>\n        </div>\n    </div>\n  </li>\n</ul>\n");
-$templateCache.put("books/books.html","<p>Liste des books&nbsp;:</p>\n\n<accordion close-others=\"false\">\n	<accordion-group ng-repeat=\"parentBook in books | filter:{ parent_visit: \'null\', idArticle: \'!null\' }\" is-open=true>\n		<accordion-heading>\n			{{ parentBook.title }}\n			<a class=\"pull-right\" ng-click=\"$event.preventDefault(); $event.stopPropagation(); addBook(parentBook.id)\"><span class=\"glyphicon glyphicon-plus\"></span></a>\n            <a class=\"pull-right\" ng-click=\"$event.preventDefault(); $event.stopPropagation(); edit()\"><span class=\"glyphicon glyphicon-wrench\"></span></a>\n            <a class=\"pull-right\" ng-click=\"$event.stopPropagation();\" href=\"#/slideshow/{{ parentBook.id }}\"><span class=\"glyphicon glyphicon-eye-open\"></span></a>\n        </accordion-heading>\n        <div class=\"list-books\" ng-repeat=\"childBook in books | filter:{ parent_visit: parentBook.id }:true\">\n		        <a href=\"#/books/{{ childBook.id }}\">{{ childBook.title }}</a>\n		        <a class=\"pull-right\" ng-click=\"deleteItem(childBook)\"><span class=\"glyphicon glyphicon-minus\"></span></a>\n        </div>\n	</accordion-group>\n	<accordion-group ng-repeat=\"parentBook in books | filter:{ parent_visit: \'null\', idArticle: \'null\' }\" is-open=true>\n		<accordion-heading>\n			Autres Books\n		</accordion-heading>\n		<div class=\"list-books\" ng-repeat=\"childBook in books | filter:{ parent_visit: \'null\', idArticle: \'null\' }\">\n		        <a href=\"#/books/{{ childBook.id }}\">{{ childBook.title }}</a>\n		        <a class=\"pull-right\" ng-click=\"deleteItem(childBook)\"><span class=\"glyphicon glyphicon-minus\"></span></a>\n        </div>\n	</accordion-group>\n</accordion>\n\n<a class=\"btn btn-default\" ng-click=\"addBook()\"><span class=\"glyphicon glyphicon-plus\"></span></a>");
+$templateCache.put("books/book.html","<p>Books {{idBook}}&nbsp;:</p>\n\n<ul ui-sortable=\"sortableOptions\" ng:model=\"slides\" class=\"list-unstyled list-inline gallery container\">\n  <li class=\"col-md-3 item\" ng-repeat=\"i in slides\">\n    <div class=\"img-ctn\">\n        <img class=\"img img-responsive image\" ng-src=\"{{ i.details.images[0] }}\" />\n        <p>{{ i.details.title }}</p>\n        <div class=\"gallery-buttons\">\n          <a class=\"btn btn-default\" href=\"#/slide/{{ i.id }}\"><span class=\"glyphicon glyphicon-pencil\"></span></a>\n          <a class=\"btn btn-default\" ng-click=\"deleteItem($index)\"><span class=\"glyphicon glyphicon-trash\"></span></a>\n        </div>\n    </div>\n  </li>\n</ul>\n");
+$templateCache.put("books/books.html","<p>Liste des books&nbsp;:</p>\n\n<accordion close-others=\"false\">\n	<accordion-group ng-repeat=\"parentBook in books | filter:{ parent_visit: \'null\', idArticle: \'!null\' }\" is-open=true>\n		<accordion-heading>\n			{{ parentBook.title }}\n			<a class=\"pull-right\" ng-click=\"$event.preventDefault(); $event.stopPropagation(); addBook(parentBook.id)\"><span class=\"glyphicon glyphicon-plus\"></span></a>\n            <a class=\"pull-right\" ng-click=\"$event.preventDefault(); $event.stopPropagation(); edit()\"><span class=\"glyphicon glyphicon-wrench\"></span></a>\n            <a class=\"pull-right\" ng-click=\"$event.stopPropagation();\" href=\"#/slideshow/{{ parentBook.id }}\"><span class=\"glyphicon glyphicon-eye-open\"></span></a>\n        </accordion-heading>\n        <div class=\"list-books\" ng-repeat=\"childBook in books | filter:{ parent_visit: parentBook.id }:true\">\n		        <a href=\"#/books/{{ childBook.id }}\">{{ childBook.title }}</a>\n		        <a class=\"pull-right\" ng-click=\"deleteItem(childBook)\"><span class=\"glyphicon glyphicon-minus\"></span></a>\n        </div>\n	</accordion-group>\n	<accordion-group is-open=true>\n		<accordion-heading>\n			Autres Books\n		</accordion-heading>\n		<div class=\"list-books\" ng-repeat=\"childBook in books | filter:{ parent_visit: \'null\', idArticle: \'null\' }\">\n		        <a href=\"#/books/{{ childBook.id }}\">{{ childBook.title }}</a>\n		        <a class=\"pull-right\" ng-click=\"deleteItem(childBook)\"><span class=\"glyphicon glyphicon-minus\"></span></a>\n        </div>\n	</accordion-group>\n</accordion>\n\n<a class=\"btn btn-default\" ng-click=\"addBook()\"><span class=\"glyphicon glyphicon-plus\"></span></a>");
 $templateCache.put("home/home.html","<h1>Ammico Application</h1>\n\n<p>\n	Le Lorem Ipsum est simplement du faux texte employé dans la composition \n	et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de \n	l\'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des \n	morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n\'a pas fait \n	que survivre cinq siècles, mais s\'est aussi adapté à la bureautique informatique, sans \n	que son contenu n\'en soit modifié. Il a été popularisé dans les années 1960 grâce à la \n	vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment,\n	par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.\n</p>");
-$templateCache.put("search/modal.html","<div class=\"modal-header ng-scope\">\n	<h3 class=\"modal-title\">A quel Book ajouter cet element ?</h3>\n</div>\n\n<div class=\"modal-body ng-scope\">\n	<ul class=\"row \">\n		<li class=\"\" ng-repeat=\"i in books | orderBy:\'-date\'\">\n			<div>\n				<a ng-click=\"addToBook(i.id)\">{{ i.title }}</a>\n			</div>\n		</li>\n	</ul>\n</div>\n\n<div class=\"modal-footer ng-scope\">\n	<button ng-click=\"cancel()\" class=\"btn btn-warning\">Cancel</button>\n</div>");
+$templateCache.put("search/modal.html","<div class=\"modal-header ng-scope\">\n	<h3 class=\"modal-title\">A quel Book ajouter cet element ?</h3>\n</div>\n\n<div class=\"modal-body ng-scope\">\n	<ul class=\"row \">\n		Les books de vos visites:\n		<li class=\"\" ng-repeat=\"i in books | filter:{parent_visit:\'!null\'}:filter:{ parent_visit: \'null\', idArticle: \'null\' }\">\n			<div>\n				<a ng-click=\"addToBook(i.id)\">{{ i.title }}</a>\n			</div>\n		</li>\n		Autres Books:\n		<li class=\"\" ng-repeat=\"i in books | filter:{ parent_visit: \'null\', idArticle: \'null\' }\">\n			<div>\n				<a ng-click=\"addToBook(i.id)\">{{ i.title }}</a>\n			</div>\n		</li>\n	</ul>\n</div>\n\n<div class=\"modal-footer ng-scope\">\n	<button ng-click=\"cancel()\" class=\"btn btn-warning\">Cancel</button>\n</div>");
 $templateCache.put("search/search.html","<h1>\n	Recherche <span ng-if=\"q !=\'\' \"> : {{ q }}</span>\n</h1>\n<h4 class=\"subtitle\" ng-if=\"results.nhits>0\">{{ results.nhits }} résultat(s)</h4>\n\n<div ng-if=\"results.nhits>0\">\n	<div class=\"row search-item\" ng-repeat=\"h in results.hits\"\n		ng-init=\"h.imgbig=false\">\n		<div ng-class=\"{\'col-md-5\': h.imgbig, \'col-md-3\': !h.imgbig}\">\n			<img ng-src=\"{{ h.metas_dict.images }}\" ng-class=\"{\'search-img-max\': !h.imgbig}\" ng-click=\"h.imgbig=!h.imgbig\" />\n		</div>\n		<div ng-class=\"{\'col-md-5\': h.imgbig, \'col-md-7\': !h.imgbig}\">\n			<p>\n				<strong>Nom&nbsp;:</strong> {{ h.metas_dict.name }}\n			</p>\n			<p>\n				<strong>Description&nbsp;:</strong> {{ h.metas_dict.description }}\n			</p>\n			<div ng-show=\"h.imgbig\">\n				<p>\n					<small><strong>Classification&nbsp;:</strong> {{ h.metas_dict.classification }}</small>\n				</p>\n				<p>\n					<small><strong>Propriétaire actuel&nbsp;:</strong> {{ h.metas_dict.currentcustody }}</small>\n				</p>\n				<p>\n					<small><strong>Ancien propriétaire&nbsp;:</strong> {{ h.metas_dict.formercustody }}</small>\n				</p>\n				<p>\n					<small><strong>Mesures&nbsp;:</strong> {{ h.metas_dict.measures }}</small>\n				</p>\n				<p>\n					<small><strong>Acteurs&nbsp;:</strong> {{ h.metas_dict.actors }}</small>\n				</p>\n				<p>\n					<small><strong>Lieux&nbsp;:</strong> {{ h.metas_dict.places }}</small>\n				</p>\n			</div>\n		</div>\n		<div class=\"col-md-1\">\n			<a class=\"btn btn-default\" ng-click=\"toggleModal($index)\"><span class=\"glyphicon glyphicon-plus\"></span></a>\n			<a class=\"btn btn-default\" ng-click=\"h.imgbig=!h.imgbig\"><span class=\"glyphicon glyphicon-eye-open\"></span></a>\n		</div> 		\n	</div>\n</div>\n");
 $templateCache.put("slides/data_editor.html","<div class=\"user-details\">\n	<div ng-hide=\"slide.editMode\">\n		<h4 ng-dblClick=\"doubleClick()\">{{slide.title}}</h4>\n		<p ng-dblClick=\"doubleClick()\" class=\"description\">{{slide.description}}</p>\n		<p ng-dblClick=\"doubleClick()\">{{slide.comment}}</p>\n		<p ng-dblClick=\"doubleClick()\"><em>{{slide.tags.join(\', \')}}</em></p>\n		<div class=\"text-right\"><button id=\"btn-search-annotations\" class=\"btn\" ng-click=\"slide.editMode=true\"><span class=\"glyphicon glyphicon-pencil\"></span></button></div>\n	</div>\n\n	<div ng-show=\"slide.editMode\">\n		<input type=\"text\" class=\"form-control\" ng-model=\'slide.title\' placeholder=\"Titre\"></input>\n		<textarea class=\"form-control editor-textarea\" ng-model=\'slide.description\' placeholder=\"Description\"></textarea>\n		<input type=\"text\" class=\"form-control\" ng-model=\'slide.comment\' placeholder=\"Commentaire\"></input>\n		<input type=\"text\" class=\"form-control\" ng-model=\'slide.tags\' placeholder=\"Tags\"></input>\n		<div class=\"text-right\"><button id=\"btn-search-annotations\" class=\"btn\" ng-click=\"slidesave()\"><span class=\"glyphicon glyphicon-ok\"></span></button></div>\n	</div>\n</div>");
-$templateCache.put("slides/slides.html","<div class=\"slide row\">\n	<div class=\"slide-title\">\n		<h1>{{slide.title}} - {{slide.details.title}}</h1>\n	</div>\n	<div class=\"slide-nav\">\n		<a id=\"back\" href=\"#/books/{{slide.book}}\">&laquoRetour galerie</a>\n		<a id=\"next\" href=\"#\">Suivant&raquo</a>\n		<a id=\"previous\" href=\"#\">&laquoPrecedents</a>\n	</div>\n	<div class=\"container slide-content\">\n		<div class=\"col-md-7 media\">\n			<img ng-if=\"slide.details.image\" ng-src=\"{{ slide.details.image }}\" style=\"margin: auto;\">\n			<p ng-if=\"slide.details.caption\" ng-src=\"{{ slide.details.caption }}\" style=\"margin: auto;\"></p>\n			<audio ng-if=\"slide.details.audio\" ng-src=\"{{ slide.details.audio }}\" style=\"margin: auto; controls loop\"></audio>\n			<video ng-if=\"slide.details.video\" ng-src=\"{{ slide.details.video }}\" style=\"margin: auto;\" controls></video>\n		</div>\n		<div class=\"col-md-5 caption\">\n			<slide-editor index=\"{{$index}}\"></slide-editor>\n			<hr />\n			<div class=\"details\">\n				<p>\n					<strong>Titre&nbsp;:&nbsp;</strong><small>{{slide.details.title}}</small>\n				</p>\n				<p>\n					<strong>Description&nbsp;:&nbsp;</strong><small>{{slide.details.description}}</small>\n				</p>\n			</div>\n		</div>\n	</div>\n</div>\n");
+$templateCache.put("slides/slides.html","<div class=\"slide row\">\n	<div class=\"slide-title\">\n		<h1>{{slide.title}} - {{slide.details.title}}</h1>\n	</div>\n	<div class=\"slide-nav\">\n		<a id=\"back\" href=\"#/books/{{slide.book}}\">&laquoRetour galerie</a>\n		<a id=\"next\" href=\"#\">Suivant&raquo</a>\n		<a id=\"previous\" href=\"#\">&laquoPrecedents</a>\n	</div>\n	<div class=\"container slide-content\">\n		<div class=\"col-md-7 media\">\n			<figure ng-if=\"slide.details.images && !slide.details.video\" ng-repeat=\"image in slide.details.images\">\n				<img ng-src=\"{{image}}\" style=\"margin: auto;\">\n  				<figcaption>{{slide.details.captions[$index]}}</figcaption>\n			</figure> \n			<audio ng-if=\"slide.details.audio\" ng-src=\"{{ slide.details.audio }}\" style=\"margin: auto; controls loop\"></audio>\n			<video ng-if=\"slide.details.video\" ng-src=\"{{ slide.details.video }}\" style=\"margin: auto;\" controls></video>\n		</div>\n		<div class=\"col-md-5 caption\">\n			<slide-editor index=\"{{$index}}\"></slide-editor>\n			<hr />\n			<div class=\"details\">\n				<p><strong>Titre&nbsp;:&nbsp;</strong><small>{{slide.details.title}}</small></p>\n				<p><strong>Description&nbsp;:&nbsp;</strong><small>{{slide.details.description}}</small></p>\n				<p><strong>Numéro d\'Inventaire&nbsp;:&nbsp;</strong><small>{{slide.details.idInventory}}</small></p>\n			</div>\n		</div>\n	</div>\n</div>\n");
 $templateCache.put("slideshow/slideshow.html","<div class=\"slideshow\">\n	<div class=\"slide-title\">\n			<h1>Diaporama - {{book.title}}</h1>\n	</div>\n	<div class=\"carousel-holder row\">\n		<carousel>\n			<slide ng-repeat=\"slide in slideshow\" active=\"slide.active\">\n				<div class=\"container slide-content\">\n					<div class=\"col-md-7 media\">\n						<img ng-if=\"slide.details.images\" ng-src=\"{{ slide.details.images }}\" style=\"margin: auto;\">\n						<audio ng-if=\"slide.details.audio\" ng-src=\"{{ slide.details.audio }}\" style=\"margin: auto; controls loop\"></audio>\n						<video ng-if=\"slide.details.video\" ng-src=\"{{ slide.details.video }}\" style=\"margin: auto;\" controls></video>\n					</div>\n					<div class=\"col-md-5 caption\">\n						<div class=\"user-details\">\n							<h4>{{slide.title}}</h4>\n							<p>{{slide.description}}</p>\n							<p>{{slide.comment}}</p>\n							<p>\n								<em>{{slide.tags.join(\', \')}}</em>\n							</p>\n						</div>\n						<hr />\n						<div class=\"details\">\n							<p>\n								<strong>Titre&nbsp;:&nbsp;</strong><small>{{slide.details.title}}</small>\n							</p>\n							<p>\n								<strong>Description&nbsp;:&nbsp;</strong><small>{{slide.details.captionImg}}</small>\n							</p>\n						</div>\n					</div>\n				</div>\n			</slide> \n		</carousel>\n		<ul class=\"list-unstyled list-inline row insight\" >\n			<li class=\"col-md-2 item\" ng-repeat=\"slide in slideshow\">\n				<div class=\"img-ctn\" ng-click=\"showSlide($index)\">\n				    <img class=\"img img-responsive image\" ng-src=\"{{ slide.details.images }}\" />\n				    <p>{{ slide.details.title }}</p>\n				</div>\n			</li>\n		</ul>\n	</div>\n</div>\n");}]);
\ No newline at end of file