--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,6 @@
+syntax: regexp
+.DS_Store
+Thumbs.db
+^client/node_modules/
+^client/bower_components/
+^client/build/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/.bowerrc Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,3 @@
+{
+ "directory": "bower_components"
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/.editorconfig Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,13 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/.jscsrc Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,25 @@
+{
+ "requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"],
+ "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "try", "catch"],
+ "requireParenthesesAroundIIFE": true,
+ "requireSpacesInFunctionExpression": {
+ "beforeOpeningCurlyBrace": true
+ },
+ "disallowSpacesInsideArrayBrackets": true,
+ "disallowSpacesInsideParentheses": true,
+ "requireSpacesInsideObjectBrackets": "all",
+ "disallowQuotedKeysInObjects": true,
+ "disallowSpaceAfterObjectKeys": true,
+ "requireCommaBeforeLineBreak": true,
+ "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
+ "disallowSpaceBeforePostfixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
+ "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+ "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+ "requireCamelCaseOrUpperCaseIdentifiers": true,
+ "disallowKeywords": ["with"],
+ "disallowMultipleLineBreaks": true,
+ "validateQuoteMarks": "'",
+ "validateIndentation": 2,
+ "disallowKeywordsOnNewLine": ["else", "catch"],
+ "requireLineFeedAtFileEnd": true
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/.jshintrc Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,24 @@
+{
+ "browser": true,
+ "node": true,
+ "esnext": true,
+ "bitwise": true,
+ "camelcase": true,
+ "eqeqeq": true,
+ "immed": true,
+ "indent": 4,
+ "latedef": true,
+ "newcap": true,
+ "noarg": true,
+ "quotmark": "single",
+ "regexp": true,
+ "undef": true,
+ "unused": true,
+ "globalstrict": true,
+ "strict": true,
+ "trailing": true,
+ "smarttabs": true,
+ "indent": 2,
+ "predef": ["angular"],
+ "devel": true
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/README.md Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,14 @@
+Ammico client webapp
+====================
+
+Dev:
+---
+
+- `npm install`
+- `node_modules/.bin/gulp`
+- `node_modules/.bin/bower install -D <some-packages>`
+
+TODO:
+-----
+
+- unit tests
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/app.css Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,18 @@
+#logo {
+ padding-top: 0;
+}
+
+.navbar-inverse {
+ background-color: #222222;
+ border-color: #080808;
+}
+
+.ammico-content {
+ min-height: 500px;
+}
+
+/*
+.ng-scope{
+ border: red 1px solid;
+}
+*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/app.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,33 @@
+(function(){
+ 'use strict';
+
+ angular.module('ammico', [ 'ngRoute','ammicoHome', 'ammicoGallery', 'ammicoSlideshow', 'templates' ])
+ .config(function($routeProvider) {
+ $routeProvider.
+ when('/', {
+ controller: 'homeCtrl',
+ templateUrl: 'home/home.html'
+ }).
+ when('/gallery', {
+ controller: 'galleryCtrl',
+ templateUrl: 'gallery/gallery.html'
+ }).
+ when('/slideshow', {
+ controller: 'slideshowCtrl',
+ templateUrl: 'slideshow/slideshow.html'
+ }).
+ otherwise({
+ redirectTo: '/gallery'
+ });
+ })
+ // .config(function ($routeProvider) {
+ // $routeProvider
+ // .otherwise({
+ // redirectTo: '/'
+ // });
+ // });
+ .config(function($logProvider){
+ $logProvider.debugEnabled(true);
+ });
+
+})();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/app_controller.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,11 @@
+(function(){
+ 'use strict';
+
+ angular.module('ammico')
+ .controller('routeClassCtrl', function($scope, $location) {
+ $scope.isActive = function(route) {
+ return route === $location.path();
+ };
+ });
+
+})();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/app_controller_test.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,7 @@
+'use strict';
+
+describe("app_controller_test", function(){
+ it("should assert something",function(){
+ expect(true).toBe(true);
+ })
+})
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/components/app_service.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,1 @@
+'common service goes here';
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/components/app_service_test.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,7 @@
+'use strict';
+
+describe("app_service_test", function(){
+ it("should assert something",function(){
+ expect(true).toBe(true);
+ })
+})
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/gallery/gallery.css Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,34 @@
+.gallery .item {
+ overflow:hidden; position:relative; height: 250px; padding: 5px;
+}
+
+.img-ctn {
+ height: 100%; width: 100%; border: 1px solid #DDD; padding: 5px; overflow: hidden;
+}
+
+.img-ctn:hover {
+ background-color: #DDD;
+}
+
+.img-ctn p {
+ display: none;
+ position: absolute;
+ bottom: -5px;
+ background-color: #DDD;
+ width: 100%;
+}
+
+.img-ctn:hover p {
+ display: block;
+}
+
+.gallery .item img {
+ margin: 0 auto;
+}
+
+.subtitle {
+ border-top: 1px solid #000;
+ border-bottom: 1px dotted #000;
+ margin-top: 20px;
+ padding: 6px 0 10px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/gallery/gallery.html Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,11 @@
+<h1>{{ gallery.title }}</h1>
+<p>{{ gallery.description }}</p>
+<h4 class="subtitle">{{ gallery.images.length }} points d'intérêt</h4>
+<ul class="list-unstyled list-inline row gallery">
+ <li class="col-md-3 item" ng-repeat="i in gallery.images">
+ <div class="img-ctn">
+ <img class="img img-responsive image" src="{{ i.url }}" />
+ <p>{{ i.title }}</p>
+ </div>
+ </li>
+</ul>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/gallery/gallery_controller.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,37 @@
+(function(){
+ 'use strict';
+
+ angular.module('ammicoGallery',['ngResource', 'ngRoute'])
+ .config(function ($routeProvider) {
+ $routeProvider
+ .when('/', {
+ templateUrl: 'gallery/gallery.html',
+ controller: 'galleryCtrl'
+ });
+ })
+ .service('galleryApi', function($resource, context) {
+ this.gallery = $resource(context.urls.galleryUrl,
+ {
+ get: {
+ method: 'GET',
+ isArray: false
+ }
+ });
+ })
+ .service('galleryModel', function(galleryApi, context) {
+ console.log('4', context.gallery);
+ if(typeof context.gallery === 'undefined') {
+ console.log('4-1');
+ this.gallery = galleryApi.gallery.get();
+ }
+ else {
+ console.log('4-2');
+ this.gallery = new galleryApi.gallery(context.gallery);
+ }
+ })
+ .controller('galleryCtrl', function($scope, $location, galleryModel){
+ console.log('5',$scope, $location, galleryModel);
+ $scope.gallery = galleryModel.gallery;
+ });
+
+})();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/gallery/gallery_controller_test.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,7 @@
+'use strict';
+
+describe("gallery_controller_test", function(){
+ it("should assert something",function(){
+ expect(true).toBe(true);
+ })
+})
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/home/home.html Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,7 @@
+<h1>Ammico Application</h1>
+<p>Liste des pages :</p>
+<ul>
+ <li><a href="#">Home</a></li>
+ <li><a href="#gallery">Galerie</a></li>
+ <li><a href="#slideshow">Diaporama</a></li>
+</ul>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/home/home_controller.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,17 @@
+(function(){
+ 'use strict';
+
+
+ angular.module('ammicoHome',['ngRoute'])
+ .config(function ($routeProvider) {
+ $routeProvider
+ .when('/', {
+ templateUrl: 'home/home.html',
+ controller: 'homeCtrl'
+ });
+ })
+ .controller('homeCtrl', function($scope, $location){
+ console.log('5-0',$scope, $location);
+ });
+
+})();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/home/home_controller_test.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,7 @@
+'use strict';
+
+describe("home_controller_test", function(){
+ it("should assert something",function(){
+ expect(true).toBe(true);
+ })
+})
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/index.html Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,61 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Ammico : Home</title>
+ <link rel="stylesheet" href="lib.css">
+ <link rel="stylesheet" href="app.css">
+</head>
+<body ng-controller="homeCtrl" ng-app="ammico" ng-cloak>
+ <div class="navbar navbar-inverse" role="navigation">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" id="logo" href="index.html"><img src="img/ammico_logo_small.png"></a>
+ </div>
+ <div class="collapse navbar-collapse">
+ <ul class="nav navbar-nav" ng-controller="routeClassCtrl">
+ <li ng-class="{active:isActive('/')}"><a href="#/">Home</a></li>
+ <li ng-class="{active:isActive('/gallery')}"><a href="#/gallery">Galerie</a></li>
+ <li ng-class="{active:isActive('/slideshow')}"><a href="#/slideshow">Diaporama</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="container">
+ <div class="ammico-content">
+ <div ng-view></div>
+ </div>
+ <footer>
+ <div class="row">
+ <div class="footer-img col-md-6">
+ <a href="http://www.iri.centrepompidou.fr" target="_blank"><img src="img/logo_IRI_footer.png" alt="Logo IRI" /></a>
+ </div>
+ <div class="col-md-6 text-right">
+ ammico vBeta - ©2014
+ </div>
+ </div>
+ </footer>
+ </div>
+ <script type="text/javascript" src="lib.js"></script>
+ <script type="text/javascript" src="templates.js"></script>
+ <script type="text/javascript" src="app.js"></script>
+ <script type="text/javascript">
+ angular.module("ammico")
+ .value('context', {
+ record: angular.fromJson('{"record": "record value"}'),
+ urls: {
+ base_static: "./",
+ galleryUrl: "data/gallery.json",
+ slideshowUrl: "data/slideshow.json"
+ }
+ });
+
+ </script>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/slideshow/dataEditor.html Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,14 @@
+<div>
+<div ng-hide="editMode">
+ <h4>{{slide.user_title}}</h4>
+ <p>{{slide.user_description}}</p>
+ <p><em>{{slide.tags.join(', ')}}</em></p>
+ <p class="text-right"><button id="btn-search-annotations" class="btn" ng-click="editMode=true"><span class="glyphicon glyphicon-pencil"></span></button></p>
+</div>
+<div ng-show="editMode">
+ <input type="text" class="form-control" ng-model='slide.user_title'></input>
+ <textarea class="form-control editor-textarea" ng-model='slide.user_description'></textarea>
+ <input type="text" class="form-control" ng-model='slide.tags'></input>
+ <p class="text-right"><button id="btn-search-annotations" class="btn" ng-click="slidesave()"><span class="glyphicon glyphicon-ok"></span></button></p>
+</div>
+</div>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/slideshow/slideshow.css Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,26 @@
+.carousel-caption {
+ color: #000;
+ position: static;
+ text-shadow: none;
+ text-align: left;
+}
+
+.carousel-indicators {
+ display: none;
+}
+
+.carousel-control {
+ width: 3%;
+}
+
+.carousel-control .icon-next, .carousel-control .glyphicon-chevron-right {
+ right: 2%;
+}
+
+.original-text {
+ font-style: italic;
+}
+
+textarea.form-control {
+ height: 140px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/slideshow/slideshow.html Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,18 @@
+<h1>{{ slideshow.title }}</h1>
+<p>{{ slideshow.description }}</p>
+<div class="carousel-holder row">
+ <carousel >
+ <slide ng-repeat="slide in slideshow.images" active="slide.active">
+ <div class="row">
+ <div class="col-md-7 col-md-offset-1">
+ <img ng-src="{{slide.url}}" style="margin:auto;">
+ </div>
+ <div class="carousel-caption col-md-3">
+ <slide-editor index="{{$index}}"></slide-editor>
+ <hr/>
+ <h4 class="original-text">{{slide.title}}</h4>
+ <p class="original-text">{{slide.description}}</p>
+ </div>
+ </slide>
+ </carousel>
+</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/slideshow/slideshow_controller.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,76 @@
+(function(){
+ 'use strict';
+
+ angular.module('ammicoSlideshow',['ngResource', 'ngRoute', 'ui.bootstrap'])
+ .config(function ($routeProvider) {
+ $routeProvider
+ .when('/', {
+ templateUrl: 'slideshow/slideshow.html',
+ controller: 'slideshowCtrl'
+ });
+ })
+ .service('slideshowApi', function($resource, context) {
+ this.slideshow = $resource(context.urls.slideshowUrl,
+ {
+ get: {
+ method: 'GET',
+ isArray: false
+ },
+ save:{
+ method:'PUT',
+ isArray:false//, headers:{'X-CSRFToken':context.csrf_token}
+ }
+ });
+ })
+ .service('slideshowModel', function(slideshowApi, context) {
+ console.log('6',this);
+ if(typeof context.slideshow === 'undefined') {
+ console.log('6-1');
+ this.slideshow = slideshowApi.slideshow.get();
+ }
+ else {
+ console.log('6-2');
+ this.slideshow = new slideshowApi.slideshow(context.slideshow);
+ }
+ })
+ .controller('slideshowCtrl', function($scope, $location, slideshowModel){
+ console.log('6',$scope, $location, slideshowModel);
+ $scope.slideshow = slideshowModel.slideshow;
+
+ $scope.save = function(){
+ $scope.slideshow
+ .$save()
+ .then(
+ function(response) {
+ console.log('NICE SAVING!', response);
+ },
+ function(reason){
+ alert('An error occured while saving : ' + reason);
+ }
+ );
+ };
+ })
+ //.directive('slideEditor', function(context) {
+ .directive('slideEditor', function() {
+ return {
+ restrict: 'AE',
+ replace: true,
+ scope: false,
+ templateUrl: 'slideshow/dataEditor.html',
+ //controller: function($scope, $element, $attrs){
+ controller: function($scope){
+ $scope.slidesave = function(){
+ if(typeof $scope.slide.tags === 'string'){
+ $scope.slide.tags = $scope.slide.tags.split(',');
+ }
+ for (var i = $scope.slide.tags.length - 1; i >= 0; i--) {
+ $scope.slide.tags[i] = $scope.slide.tags[i].trim();
+ }
+ $scope.editMode = false;
+ $scope.save();
+ };
+ }
+ };
+ });
+
+})();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/app/slideshow/slideshow_controller_test.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,7 @@
+'use strict';
+
+describe("slideshow_controller_test", function(){
+ it("should assert something",function(){
+ expect(true).toBe(true);
+ })
+})
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/bower.json Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,24 @@
+{
+ "name": "ammico",
+ "main": "app.js",
+ "version": "0.0.0",
+ "authors": [
+ "IRI"
+ ],
+ "license": "Ceccill-C",
+ "private": true,
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "devDependencies": {
+ "angular": "~1.3",
+ "angular-route": "~1.3",
+ "angular-resource": "~1.3",
+ "angular-bootstrap": "~0.11.0",
+ "bootstrap": "~3.1.1"
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/data/gallery.json Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,56 @@
+{
+ "title": "bae0704f-b0e1-11e2-8479-c8bcc896c290",
+ "description": "description DESC",
+ "images": [
+ {
+ "id": "im001",
+ "title": "im 1 ceci est un titre très très long vraiment très très très long",
+ "url": "data/images/ImageAccueilCM1.jpg"
+ },
+ {
+ "id": "im002",
+ "title": "im 2",
+ "url": "data/images/ImageAccueilCM2.jpg"
+ },
+ {
+ "id": "im003",
+ "title": "im 3",
+ "url": "data/images/ImageAccueilCM3.jpg"
+ },
+ {
+ "id": "im004",
+ "title": "im 4",
+ "url": "data/images/ImageAccueilCM4.jpg"
+ },
+ {
+ "id": "im005",
+ "title": "im 5",
+ "url": "data/images/ImageAccueilCM5.jpg"
+ },
+ {
+ "id": "im006",
+ "title": "im 6",
+ "url": "data/images/ImageAccueilCM6.jpg"
+ },
+ {
+ "id": "im007",
+ "title": "im 7",
+ "url": "data/images/ImageAccueilCM7.jpg"
+ },
+ {
+ "id": "im008",
+ "title": "im 8",
+ "url": "data/images/ImageAccueilCM8.jpg"
+ },
+ {
+ "id": "im009",
+ "title": "im 9",
+ "url": "data/images/ImageAccueilCM3.jpg"
+ },
+ {
+ "id": "im010",
+ "title": "im 10",
+ "url": "data/images/ImageAccueilCM8.jpg"
+ }
+ ]
+}
\ No newline at end of file
Binary file client/data/images/ImageAccueilCM1.jpg has changed
Binary file client/data/images/ImageAccueilCM2.jpg has changed
Binary file client/data/images/ImageAccueilCM3.jpg has changed
Binary file client/data/images/ImageAccueilCM4.jpg has changed
Binary file client/data/images/ImageAccueilCM5.jpg has changed
Binary file client/data/images/ImageAccueilCM6.jpg has changed
Binary file client/data/images/ImageAccueilCM7.jpg has changed
Binary file client/data/images/ImageAccueilCM7_ORIG.jpg has changed
Binary file client/data/images/ImageAccueilCM8.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/data/slideshow.json Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,133 @@
+{
+ "title": "titre de mon slideshow",
+ "description": "description DESC SLIDESHOW BEST EvER",
+ "images": [
+ {
+ "id": "im001",
+ "url": "data/images/ImageAccueilCM1.jpg",
+ "title": "im 1 ceci est un titre très très long vraiment très très très long",
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "user_title": "U R im 1 ceci est un titre très très long vraiment très très très long",
+ "user_description": "U Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "tags":[
+ "tag 1",
+ "tag 2",
+ "tag 3"
+ ]
+ },
+ {
+ "id": "im002",
+ "url": "data/images/ImageAccueilCM2.jpg",
+ "title": "im 2",
+ "description": "Lorem ipsum dolor sit amet",
+ "user_title": "U im 2",
+ "user_description": "U Lorem ipsum dolor sit amet",
+ "tags":[
+ "tag C",
+ "tag 5",
+ "tag 7"
+ ]
+ },
+ {
+ "id": "im003",
+ "url": "data/images/ImageAccueilCM3.jpg",
+ "title": "im 3",
+ "description": "adipiscing elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "user_title": "U im 3",
+ "user_description": "U adipiscing elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "tags":[
+ "tag F",
+ "tag 6",
+ "tag 8"
+ ]
+ },
+ {
+ "id": "im004",
+ "url": "data/images/ImageAccueilCM4.jpg",
+ "title": "im 4",
+ "description": "elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "user_title": "U im 4",
+ "user_description": "U elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "tags":[
+ "tag 1"
+ ]
+ },
+ {
+ "id": "im005",
+ "url": "data/images/ImageAccueilCM5.jpg",
+ "title": "im 5",
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing",
+ "user_title": "U im 5",
+ "user_description": "U Lorem ipsum dolor sit amet, consectetur adipiscing",
+ "tags":[
+ "tag 2",
+ "tag 3"
+ ]
+ },
+ {
+ "id": "im006",
+ "url": "data/images/ImageAccueilCM6.jpg",
+ "title": "im 6",
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "user_title": "U im 6",
+ "user_description": "U Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "tags":[
+ "tag 4",
+ "tag 5",
+ "tag 6"
+ ]
+ },
+ {
+ "id": "im007",
+ "url": "data/images/ImageAccueilCM7.jpg",
+ "title": "im 7",
+ "description": "luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "user_title": "U im 7",
+ "user_description": "U luctus turpis at neque bibendum, non porttitor neque porta. Donec euismod neque et orci dictum",
+ "tags":[
+ "tag A",
+ "tag b",
+ "tag c",
+ "tag d",
+ "tag e"
+ ]
+ },
+ {
+ "id": "im008",
+ "url": "data/images/ImageAccueilCM8.jpg",
+ "title": "im 8",
+ "description": "non porttitor neque porta. Donec euismod neque et orci dictum",
+ "user_title": "U im 8",
+ "user_description": "U non porttitor neque porta. Donec euismod neque et orci dictum",
+ "tags":[
+ "tag 1",
+ "tag 3"
+ ]
+ },
+ {
+ "id": "im009",
+ "url": "data/images/ImageAccueilCM3.jpg",
+ "title": "im 9",
+ "description": "Lorem ipsum",
+ "user_title": "U im 9",
+ "user_description": "U Lorem ipsum",
+ "tags":[
+ "tag 3",
+ "tag 1",
+ "tag 2"
+ ]
+ },
+ {
+ "id": "im010",
+ "url": "data/images/ImageAccueilCM8.jpg",
+ "title": "im 10",
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
+ "user_title": "U im 10",
+ "user_description": "U Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
+ "tags":[
+ "tag 2 fjhds klfjhqs kldjfh qksljhdf kljqsd fkljq skldjf lkqjshdf kljqdfsklj",
+ "tag 3"
+ ]
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/gulpfile.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,137 @@
+var gulp = require('gulp');
+var gutil = require('gulp-util')
+var plugins = require("gulp-load-plugins")({lazy:false});
+//var flatten = require('gulp-flatten');
+//var uglify = require('gulp-uglify');
+//var clean = require('gulp-clean');
+//var rename = require('gulp-rename');
+//var filesize = require('gulp-filesize');
+//var cssmin = require('gulp-cssmin');
+
+gulp.task('clean', function () {
+ return gulp.src('build', {read: false})
+ .pipe(clean());
+});
+
+var scriptsSrc = ['!./app/**/*_test.js','./app/**/*.js'];
+
+gulp.task('scripts', function(){
+ //combine all js files of the app
+ gulp.src(scriptsSrc)
+ .pipe(plugins.jshint())
+ .pipe(plugins.jshint.reporter('default'))
+ .pipe(plugins.jshint.reporter('fail'))
+ .pipe(plugins.concat('app.js'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize())
+ .pipe(plugins.uglify())
+ .pipe(plugins.rename('app.min.js'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize())
+ .on('error', gutil.log);
+});
+
+gulp.task('templates',function(){
+ //combine all template files of the app into a js file
+ gulp.src(['!./app/index.html',
+ './app/**/*.html'])
+ .pipe(plugins.angularTemplatecache('templates.js',{standalone:true}))
+ .pipe(gulp.dest('./build'));
+});
+
+gulp.task('css', function(){
+ gulp.src('./app/**/*.css')
+// .pipe(plugins.csslint())
+// .pipe(plugins.csslint.reporter())
+ .pipe(plugins.concat('app.css'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize())
+ .pipe(plugins.minifyCss({keepBreaks:true}))
+ .pipe(plugins.rename('app.min.css'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize());
+});
+
+var vendorJSsrc = [
+ '!./bower_components/**/*.min.js',
+ '!./bower_components/bootstrap/Gruntfile.js',
+ '!./bower_components/bootstrap/grunt/*',
+ '!./bower_components/bootstrap/js/*',
+ '!./bower_components/jquery/src/**/*',
+ '!./bower_components/angular-bootstrap/ui-bootstrap.js',
+ './bower_components/jquery/dist/jquery.js',
+ './bower_components/**/*.js'
+];
+
+gulp.task('vendorJS', function(){
+ //concatenate vendor JS files
+ gulp.src(vendorJSsrc)
+ .pipe(plugins.concat('lib.js'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize())
+ .pipe(plugins.uglify())
+ .pipe(plugins.rename('lib.min.js'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize())
+ .on('error', gutil.log);
+});
+
+gulp.task('vendorCSS', function(){
+ //concatenate vendor CSS files
+ gulp.src(['!./bower_components/**/*.min.css',
+ './bower_components/**/*.css'])
+ .pipe(plugins.concat('lib.css'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize())
+ .pipe(plugins.minifyCss({keepBreaks:true}))
+ .pipe(plugins.rename('lib.min.css'))
+ .pipe(gulp.dest('./build'))
+ .pipe(plugins.filesize());
+});
+
+gulp.task('vendorFonts', function(){
+ gulp.src(['./bower_components/**/fonts/*'])
+ .pipe(plugins.flatten())
+ .pipe(gulp.dest('./build/fonts'));
+});
+
+gulp.task('copy-index', function() {
+ gulp.src('./app/index.html')
+ .pipe(gulp.dest('./build'));
+});
+
+gulp.task('copy-data', function() {
+ gulp.src('./data/**/*')
+ .pipe(gulp.dest('./build/data'));
+});
+
+gulp.task('copy-img', function() {
+ gulp.src('./img/**/*')
+ .pipe(gulp.dest('./build/img'));
+});
+
+gulp.task('watch',function(){
+ gulp.watch([
+ 'build/**/*.html',
+ 'build/**/*.js',
+ 'build/**/*.css'
+ ], function(event) {
+ return gulp.src(event.path)
+ .pipe(plugins.connect.reload());
+ });
+ gulp.watch(['./app/**/*.js','!./app/**/*test.js'],['scripts']);
+ gulp.watch(['!./app/index.html','./app/**/*.html'],['templates']);
+ gulp.watch('./app/**/*.css',['css']);
+ gulp.watch('./app/index.html',['copy-index']);
+ gulp.watch('./data/**/*',['copy-data']);
+ gulp.watch('./img/**/*',['copy-img']);
+
+});
+
+gulp.task('connect', plugins.connect.server({
+ root: ['build'],
+ port: 9000,
+ livereload: true
+}));
+
+gulp.task('default',['connect','scripts','templates','css','copy-index','copy-data','copy-img','vendorJS','vendorCSS','vendorFonts','watch']);
Binary file client/img/ammico_logo_small.png has changed
Binary file client/img/loader.gif has changed
Binary file client/img/logo_IRI_footer.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/karma-unit.js Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,70 @@
+// Karma configuration
+// Generated on Thu Mar 27 2014 15:49:13 GMT+0800 (PHT)
+
+module.exports = function(config) {
+ config.set({
+
+ // base path that will be used to resolve all patterns (eg. files, exclude)
+ basePath: '',
+
+
+ // frameworks to use
+ // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+ frameworks: ['jasmine'],
+
+
+ // list of files / patterns to load in the browser
+ files: [
+ './build/lib.js',
+ './build/app.js',
+ './build/templates.js',
+ './app/**/*test.js'
+ ],
+
+
+ // list of files to exclude
+ exclude: [
+
+ ],
+
+
+ // preprocess matching files before serving them to the browser
+ // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+ preprocessors: {
+
+ },
+
+
+ // test results reporter to use
+ // possible values: 'dots', 'progress'
+ // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+ reporters: ['progress'],
+
+
+ // web server port
+ port: 9876,
+
+
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+
+
+ // level of logging
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+ logLevel: config.LOG_DEBUG,
+
+
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: true,
+
+
+ // start these browsers
+ // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+ browsers: ['Chrome'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false
+ });
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/package.json Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,33 @@
+{
+ "name": "ammico",
+ "version": "0.0.0",
+ "description": "Ammico client application",
+ "main": "app.js",
+ "repository": {
+ "type": "mercurial",
+ "url": "http://www.iri.centrepompidou.fr/dev/hg/ammico"
+ },
+ "author": "IRI",
+ "license": "Cecill-C",
+ "devDependencies": {
+ "bower": "^1.3.4",
+ "grunt-cli": "^0.1.13",
+ "gulp": "~3.5.5",
+ "gulp-angular-templatecache": "^1.1.0",
+ "gulp-clean": "^0.3.0",
+ "gulp-concat": "~2.1.7",
+ "gulp-connect": "^1.0.7",
+ "gulp-csslint": "^0.1.4",
+ "gulp-filesize": "0.0.6",
+ "gulp-flatten": "0.0.2",
+ "gulp-jshint": "~1.5.0",
+ "gulp-load-plugins": "~0.4.0",
+ "gulp-minify-css": "^0.3.4",
+ "gulp-rename": "^1.2.0",
+ "gulp-uglify": "^0.3.0",
+ "gulp-util": "^2.2.16",
+ "karma": "^0.12.1",
+ "karma-chrome-launcher": "^0.1.2",
+ "karma-jasmine": "^0.1.5"
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/README.md Wed Jun 11 01:26:59 2014 +0200
@@ -0,0 +1,2 @@
+Ammico server
+=============