Author: obruce Date: 2014-06-13 17:23:28 +0200 (Fri, 13 Jun 2014) New Revision: 3000 Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3000 Log: Ajout jettywebsocket avec un simple echo Added: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/websocket/ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/websocket/WebsocketHandler.java Modified: branches/ng-jtimer/pom.xml branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimesResource.java branches/ng-jtimer/src/main/resources/jtimer-default.properties branches/ng-jtimer/src/main/webapp/css/app.css branches/ng-jtimer/src/main/webapp/js/app.js branches/ng-jtimer/src/main/webapp/js/controllers.js branches/ng-jtimer/src/main/webapp/partials/reportModal.html branches/ng-jtimer/src/main/webapp/partials/tasks.html branches/ng-jtimer/src/main/webapp/webtimer.appcache Modified: branches/ng-jtimer/pom.xml =================================================================== --- branches/ng-jtimer/pom.xml 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/pom.xml 2014-06-13 15:23:28 UTC (rev 3000) @@ -34,7 +34,7 @@ <restletVersion>2.2.1</restletVersion> <gsonVersion>2.2.4</gsonVersion> <h2Version>1.4.178</h2Version> - <jettyVersion>9.1.5.v20140505</jettyVersion> + <jettyVersion>9.2.1.v20140609</jettyVersion> </properties> <build> @@ -116,7 +116,7 @@ <version>${jettyVersion}</version> <configuration> <httpConnector> - <port>8080</port> + <port>8081</port> </httpConnector> </configuration> Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -253,7 +253,59 @@ return tasks; } + /** + * Query that returns not removed tasks + * @return tasks arraylist of tasks + */ + public ArrayList<TimerTask> getRemovedTasks(Long date) { + ArrayList<TimerTask> tasks = new ArrayList<>(); + PreparedStatement statement = null; + PreparedStatement statement2 = null; + try { + statement = connection.prepareStatement("SELECT TA.*, sum(TI.duration) AS totalduration FROM " + + TABLE_TASK + " TA, " + TABLE_TIME + " TI" + + " WHERE TA.taskId = TI.taskid" + + " AND TA.removed > 0"+ + " GROUP BY TA.taskId"); + ResultSet rs = statement.executeQuery(); + while (rs.next()) { + TimerTask task = new TimerTask(); + task.setTaskId(rs.getString("taskId")); + task.setName(rs.getString("name")); + task.setParent(rs.getString("parent")); + task.setRemoved(rs.getLong("removed")); + task.setTodayTime(0); + task.setModificationDate(new java.util.Date(rs.getLong("modificationDate"))); + task.setTotalTime(rs.getLong("totalduration")); + tasks.add(task); + } + // not timed tasks + statement2 = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + + " WHERE (taskId not in (SELECT taskid FROM " + TABLE_TIME + "))" + + " AND "+ TABLE_TASK +".modificationDate >" +date); + rs = statement2.executeQuery(); + while (rs.next()) { + TimerTask task = new TimerTask(); + task.setName(rs.getString("name")); + task.setTaskId(rs.getString("taskId")); + task.setParent(rs.getString("parent")); + task.setModificationDate(new java.util.Date(rs.getLong("modificationDate"))); + task.setRemoved(rs.getLong("removed")); + task.setTodayTime(0); + task.setTotalTime(0); + tasks.add(task); + } + } catch (SQLException ex) { + throw new StorageException("Can't get task", ex); + } finally { + closeStatement(statement); + closeStatement(statement2); + } + return tasks; + } + + /* Insert, Update, Delete */ public void addTask(TimerTask task) { Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -1,5 +1,8 @@ package org.chorem.jtimer.web; +import org.restlet.representation.Representation; +import org.restlet.resource.Get; + /** * Created by olivia on 11/06/14. * <p/> @@ -7,5 +10,46 @@ * <p/> * Package name : org.chorem.jtimer.web */ -public class ReportResource extends AbstractResource{ -} +public class ReportResource extends AbstractResource { + + /** + * Methode qui retourne la representation du rapport + * Suite a une requete de type GET + * + * @return representation du rapport + */ + @Get("json") + public Representation getReport() { + + String type =""; + + try { + type = String.valueOf(getQuery().getValues("type")); + } catch (Exception e) { + e.printStackTrace(); + } + + switch (type){ + case "BY_DAY": + break; + + case "BY_WEEK": + break; + + case "BY_MONTH": + break; + + case "BY_YEAR": + break; + + case "BY_PROJECT": + break; + + default: + //By project + break; + } + + return null; + } +} \ No newline at end of file Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -26,7 +26,7 @@ protected static final Log log = LogFactory.getLog(RestApplication.class); /** Determine si la connexion est établie */ //TODO obruce 05/06/2014 to change when configuration available - protected boolean connected = false; + protected boolean connected = true; /**Application configuration */ JtimerConfig jtimerConf; @@ -58,12 +58,14 @@ router.attach("/tasks/report", ReportResource.class); //router.attach("/tiers", TiersServerResource.class); + + return router; } /** * Initialise le context de l'application REST - * @param context + * @param context le contexte de l'application */ protected void initContext(Context context) throws Exception { @@ -168,7 +170,5 @@ } } - }; - - + } } \ No newline at end of file Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -73,7 +73,7 @@ * Methode qui retourne la representation de la liste de toutes les taches * Suite a une requete de type GET * - * @return + * @return reprentation des taches */ @Get("json") public Representation getTasks() { @@ -83,7 +83,9 @@ try { date = Long.valueOf(getQuery().getValues("date")); } catch (Exception e) { - date = (long) 0; + if(log.isErrorEnabled()){ + log.error("enttities.getTasks date revenu null"); + } } ArrayList<TimerTask> timerTasks; Gson gson = builder.create(); @@ -116,7 +118,7 @@ public void createTask(Representation representation) throws IOException { Gson gson = builder.create(); - String repr1 = ""; + String repr1; dispatch = getDispatch(); @@ -139,7 +141,7 @@ /** * Recupere la valeur de dispatch dans l'url * TODO 04/06/14 obruce : remove this method when config will be available - * @return + * @return la valeur du dispatch */ private boolean getDispatch() { boolean res; Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -143,7 +143,9 @@ if (dispatch) { String taskId = (String) getRequest().getAttributes().get("taskId"); Pair p = Pair.of(taskId, jsonRepr); - log.info(" la pair cree" + p.toString()+ p.getKey().toString()+p.getValue().toString()); + + //log.info(" la pair cree" + p.toString()+ p.getKey().toString()+p.getValue().toString()); + todoList.pushCreatedTime(p); } } @@ -164,6 +166,10 @@ String jsonRepr = representation.getText(); TimerTime t = gson.fromJson(jsonRepr, TimerTime.class); + if (log.isInfoEnabled()) { + log.info("La periode suivante est en maj : " + t.toString()); + } + storage.modifyTime(t); if (dispatch) { Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimesResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimesResource.java 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimesResource.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -86,10 +86,6 @@ String json = gson.toJson(timerTasks); - if (log.isInfoEnabled()) { - log.info(json); - } - return new StringRepresentation(json, MediaType.APPLICATION_JSON); } Added: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/websocket/WebsocketHandler.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/websocket/WebsocketHandler.java (rev 0) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/websocket/WebsocketHandler.java 2014-06-13 15:23:28 UTC (rev 3000) @@ -0,0 +1,62 @@ +package org.chorem.jtimer.web.websocket; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; +import org.eclipse.jetty.websocket.api.annotations.WebSocket; +import org.eclipse.jetty.websocket.servlet.WebSocketServlet; +import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; + +import javax.servlet.annotation.WebServlet; +import java.io.IOException; + +/** + * Created by olivia on 12/06/14. + * <p/> + * Project name : jtimer + * <p/> + * Package name : org.chorem.jtimer.web.websocket + */ + +@WebSocket +@WebServlet(name = "MyEcho WebSocket Servlet", urlPatterns = { "/echo" }) +public class WebsocketHandler extends WebSocketServlet { + + + private static final Log log = LogFactory.getLog(WebsocketHandler.class); + + @OnWebSocketClose + public void onClose(int statusCode, String reason) { + log.info("Close: statusCode=" + statusCode + ", reason=" + reason); + } + + @OnWebSocketError + public void onError(Throwable t) throws Throwable { + throw t; + } + + @OnWebSocketConnect + public void onConnect(Session session) { + log.info("Connect: " + session.getRemoteAddress().getAddress()); + try { + session.getRemote().sendString("Hello World!"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @OnWebSocketMessage + public void onMessage(String message) { + log.info("Message de l'interface : " + message); + } + + @Override + public void configure(WebSocketServletFactory factory) { + factory.getPolicy().setIdleTimeout(10000); + factory.register(WebsocketHandler.class); + } +} Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties =================================================================== --- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-06-13 15:23:28 UTC (rev 3000) @@ -2,5 +2,5 @@ # jTimer default properties ### # jTimer storage path -jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/jtimer +jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/jtimer8081 Modified: branches/ng-jtimer/src/main/webapp/css/app.css =================================================================== --- branches/ng-jtimer/src/main/webapp/css/app.css 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/webapp/css/app.css 2014-06-13 15:23:28 UTC (rev 3000) @@ -261,3 +261,11 @@ width : 50%; margin : auto; } + +.small_input{ + width : 100px; +} + +.medium_input{ + width : 200px; +} \ No newline at end of file Modified: branches/ng-jtimer/src/main/webapp/js/app.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/app.js 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/webapp/js/app.js 2014-06-13 15:23:28 UTC (rev 3000) @@ -242,8 +242,67 @@ return service; }]; +/** + * Pour le websocket + */ +var wtJTIMERWebSocketService = [function() { + var service = {}; + service.connect = function() { + if(service.ws) { return; } + var ws = new WebSocket("ws://localhost:8081/echo"); + + ws.onopen = function() { + console.log('Websocket open'); + service.callback.status(true); + }; + + ws.onerror = function() { + console.log('Websocket error'); + }; + + ws.onclose = function() { + service.callback.status(false); + console.log('Websocket closing'); + }; + + ws.onmessage = function(message) { + console.log("Un message reçu venant du websocket :" + message.data) + }; + + service.ws = ws; + }; + + service.send = function(message) { + waitForConnection(function () { + service.ws.send(message); + if (typeof callback !== 'undefined') { + callback(); + } + }, 1000); + }; + + service.subscribe = function(callback) { + service.callback = callback; + }; + + waitForConnection = function (callback, interval) { + if (service.ws.readyState === 1) { + callback(); + } else { + var that = this; + setTimeout(function () { + that.waitForConnection(callback); + }, interval); + } + }; + + return service; +}]; + + + /** * Module de webtimer **/ @@ -295,7 +354,9 @@ .directive('wtTreeRepeat', wtTreeRepeatDirective) .service('wtWebsocket', wtWebSocketService); +angular.module('webtimer').factory('jTimerWebsocket', wtJTIMERWebSocketService); + /** * Cette directive permet de confirmer/ infirmer une action. * Usage: Ajouter attributs: ng-really-message="Êtes vous d'accord?" ng-really-click="takeAction()" Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-06-13 15:23:28 UTC (rev 3000) @@ -1,4 +1,4 @@ -function TasksCtrl($scope, $interval, $timeout, $q, serverTaskAccess, serverTimeAccess, $localStorage, $window, $document, $modal, wtWebsocket) { +function TasksCtrl($scope, $interval, $timeout, $q, serverTaskAccess, serverTimeAccess, $localStorage, $window, $document, $modal, wtWebsocket, jTimerWebsocket) { // {Boolean} vrai si on est online $scope.online = $window.navigator.onLine; @@ -15,7 +15,7 @@ //interval de conec var interval = 30000; //TODO: obruce 05-05-14 decider d'un intervalle interessant // periode de delais = 3 periode +1msec - var delayAccess = 2 * interval +1; + var delayAccess = interval + 1; // {TreeNode} l'arbre regenere automatiquement lorsque les donnees changent $scope.tree; @@ -160,7 +160,7 @@ */ var initTasksFromServ = function(){ - serverTaskAccess.query({}, function (response) { + serverTaskAccess.query({date : 0}, function (response) { angular.forEach(response, function (item) { @@ -182,10 +182,6 @@ //Un noeud avec un parent est ajoute à l'arbre de son parent $scope.data.tasks[newTask.taskId] = newTask; save(); - //Les temps sont recuperes du serveur - getTimesFromServerWithTask(newTask); - - save(); } save(); } @@ -197,11 +193,11 @@ $scope.taskAccess = Date.now(); $scope.todo.lastTaskAccess= $scope.taskAccess; - $scope.timeAccess = Date.now(); - $scope.todo.lastTimeAccess= $scope.timeAccess; save(); }); + + updateTimesFromServer(); }; @@ -211,7 +207,6 @@ * */ var updateTasksFromServ = function(){ - console.log("updateTasksFromServ debut"); serverTaskAccess.query({date : ($scope.taskAccess-delayAccess)}, function (response) { @@ -228,7 +223,9 @@ if(item.removed != 0){ $scope.removeTask(tmp); }else{ - tmp.task.name = item.name; + if(item.name != "New task"){ + tmp.task.name = item.name; + } } save(); @@ -267,7 +264,6 @@ save(); } } - }); }); @@ -275,8 +271,6 @@ $scope.taskAccess = Date.now(); $scope.todo.lastTaskAccess= $scope.taskAccess; save(); - - console.log("updateTasksFromServ fin"); } /** @@ -409,7 +403,7 @@ angular.forEach($scope.todo.stockedNewTasks, function(task){ //On change la date au dernier acces - task['modificationDate']=$scope.taskAccess; + task['modificationDate']= Date.now(); serverTaskAccess.create({dispatch:true}, angular.toJson(task), //TODO obruce 04/06/14 dispatch a enlever function(){ @@ -423,7 +417,7 @@ //On ajoute au serveur les taches stockees pour l'ajout angular.forEach($scope.todo.stockedEditedTasks, function(task){ //On change la date au dernier acces - task["modificationDate"]=$scope.taskAccess; + task["modificationDate"]=Date.now(); serverTaskAccess.update({dispatch:true},angular.toJson(task), //TODO function(){ @@ -439,7 +433,7 @@ angular.forEach($scope.todo.stockedNewTimes, function(times,task){ angular.forEach(times, function(time){ //On change la date au dernier acces - time["modificationDate"]=$scope.timeAccess; + time["modificationDate"]=Date.now(); serverTimeAccess.create({taskId: task,dispatch:true} , angular.toJson(time), function(){ @@ -456,7 +450,7 @@ angular.forEach($scope.todo.stockedEditedTimes, function(times,task){ angular.forEach(times, function(time){ - time["modificationDate"]=$scope.timeAccess; + time["modificationDate"]=Date.now(); serverTimeAccess.update({taskId: task,dispatch:true}, angular.toJson(time), function(){ @@ -765,6 +759,26 @@ return moment().format("HH:mm DD/MM/YYYY"); }; + console.log(jTimerWebsocket); + + jTimerWebsocket.subscribe({ + message: function(data) { + //var jsData = JSON.parse(data); + console.log("data " +data); + }, + status: function(status) { + $scope.webSocketClientOnline = status; + } + }); + + + var testWebsocket = function(){ + jTimerWebsocket.send(JSON.stringify($scope.data.tasks)); + console.log("un message est envoyé websocket") + }; + + /** Idleness*/ + /** * Subscribe to websocket messages queue. */ @@ -801,6 +815,7 @@ modalInstance.result.then($scope.restartFromIdleness); }; + /** * Called by modal dialog to resume from idle. * @@ -930,7 +945,11 @@ // connect to webscocket server (go client) wtWebsocket.connect(); + jTimerWebsocket.connect(); + testWebsocket(); + + } Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html =================================================================== --- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-06-13 15:23:28 UTC (rev 3000) @@ -1,55 +1,63 @@ -Option du rapport: +<div> + <h2>Option du rapport:</h2> +</div> +<hr/> + <div> + <div> + De : + <div ng-controller="ReportDatePickerCtrl" class="row"> + <div class="col-md-6"> + <p class="input-group medium_input"> + <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.startDate" is-open="opened" min-date="minDate" max-date="obj.endDate" ng-required="true" close-text="Close" /> + <span class="input-group-btn"> + <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button> + </span> + </p> + </div> + </div> - <br/> - De : - <div ng-controller="ReportDatePickerCtrl" class="row"> - <div class="col-md-6"> - <p class="input-group"> - <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.startDate" is-open="opened" min-date="minDate" max-date="obj.endDate" ng-required="true" close-text="Close" /> + A : + <div class="row" ng-controller="ReportDatePickerCtrl"> + <div class="col-md-6"> + <p class="input-group medium_input"> + <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.endDate" is-open="opened" min-date="obj.startDate" max-date="maxDate" ng-required="true" close-text="Close" /> <span class="input-group-btn"> <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button> </span> - </p> + </p> + </div> </div> - </div> - A : - <div class="row" ng-controller="ReportDatePickerCtrl"> - <div class="col-md-6"> - <p class="input-group"> - <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.endDate" is-open="opened" min-date="obj.startDate" max-date="maxDate" ng-required="true" close-text="Close" /> - <span class="input-group-btn"> - <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button> - </span> - </p> + + <p> + + </p> + + <div class="btn-group" ng-show="false"> + <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'1'">Jour</label> + <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'2'">Semaine</label> + <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'3'">Mois</label> + <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'4'">Année</label> + <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'5'">Projet</label> </div> - </div> - <p> - - </p> - - <div class="btn-group" ng-show="false"> - <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'1'">Jour</label> - <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'2'">Semaine</label> - <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'3'">Mois</label> - <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'4'">Année</label> - <label class="btn btn-primary" ng-change="changeFonc()" ng-model="radioModel" btn-radio="'5'">Projet</label> + <p> + + </p> </div> - <p> - - </p> + <div> - <alert type="info" > - Rapport :<br/> - ========= - <div ng-repeat="elem in obj.report"> - {{elem.task}} : {{elem.time | time}} - </div> + <alert type="info" > + Rapport :<br/> + ========= + <div ng-repeat="elem in obj.report"> + {{elem.task}} : {{elem.time | time}} + </div> - </alert> + </alert> + </div> </div> Modified: branches/ng-jtimer/src/main/webapp/partials/tasks.html =================================================================== --- branches/ng-jtimer/src/main/webapp/partials/tasks.html 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/webapp/partials/tasks.html 2014-06-13 15:23:28 UTC (rev 3000) @@ -1,9 +1,9 @@ <div id="header"> <!--Header partie gauche --> <span class='left form-inline'> - <input class='search-query form-group form-control input-sm' ng-model="query" placeholder="Search"> + <input class='search-query form-group form-control input-sm small_input' ng-model="query" placeholder="Search"> <form ng-submit="addTask()"> - <input class='search-query form-group form-group form-control input-sm' ng-model="name" placeholder="New Task"> + <input class='search-query form-group form-control input-sm small_input' ng-model="name" placeholder="New Task"> </form> </span> Modified: branches/ng-jtimer/src/main/webapp/webtimer.appcache =================================================================== --- branches/ng-jtimer/src/main/webapp/webtimer.appcache 2014-06-11 15:48:49 UTC (rev 2999) +++ branches/ng-jtimer/src/main/webapp/webtimer.appcache 2014-06-13 15:23:28 UTC (rev 3000) @@ -7,6 +7,7 @@ partials/contact.html partials/tasks.html partials/timeModal.html +partials/reportModal.html css/app.css css/jtimer.css js/app.js