Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
4ed2f4d
EXO-5 add publishedAt field/input
LSSArosa May 3, 2017
e21a1f6
Merge pull request #1 from LSSArosa/exo5
LSSArosa May 3, 2017
25ce588
add route ALGO1 but doesent display Html
LSSArosa May 3, 2017
b6b7187
move Up input field PublishedAt
LSSArosa May 3, 2017
1e7e662
correction ok, page Algo1 OK
LSSArosa May 3, 2017
afceff1
Merge pull request #2 from LSSArosa/exo4
LSSArosa May 3, 2017
58643b7
Merge pull request #3 from LSSArosa/exo5_publishedDate
LSSArosa May 3, 2017
79fa5c9
install package moment.js
LSSArosa May 3, 2017
bd97960
display time OK; refresh KO
LSSArosa May 3, 2017
f98b046
refresh OK
LSSArosa May 3, 2017
c91df44
Merge pull request #4 from LSSArosa/exo3_horloge
LSSArosa May 3, 2017
f1e7139
add chekbox
LSSArosa May 3, 2017
90e0b2d
corr bug date exo5
LSSArosa May 3, 2017
446106f
exo6 c est pas encore ca
LSSArosa May 3, 2017
a6c340e
exo6 c est pas encore ca
LSSArosa May 3, 2017
0ae9d38
exo5 date edit OK
LSSArosa May 3, 2017
4d4064f
Merge pull request #5 from LSSArosa/exo6_published
LSSArosa May 3, 2017
3aa4721
export mongo TEST
LSSArosa May 3, 2017
4b1aca8
Merge pull request #6 from LSSArosa/with-db-dump
LSSArosa May 3, 2017
9c41d7f
corr bugg edit date OK
LSSArosa May 3, 2017
8be849b
Merge pull request #7 from LSSArosa/exo5_publishedDate
LSSArosa May 3, 2017
1b0f30f
add field 'publish' in post model
LSSArosa May 3, 2017
5557763
add field 'publish' in post model
LSSArosa May 3, 2017
7248333
TODO filter Publish by id
LSSArosa May 3, 2017
148d316
Merge pull request #8 from LSSArosa/exo6_published
LSSArosa May 3, 2017
6d10721
new DB export
LSSArosa May 3, 2017
e6cd63c
Merge branch 'master' into with-db-dump
LSSArosa May 3, 2017
04086e9
download DB for EXO2
LSSArosa May 3, 2017
94e2b09
Merge pull request #9 from LSSArosa/exo2_meanstack
LSSArosa May 3, 2017
c831f0c
download DB for EXO2
LSSArosa May 3, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions app/controllers/PostsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,25 @@ class PostsController extends Controller {

constructor() {
super(Post)
console.log("I am in PostsController");
}

findPublished(req, res, next) {
// Get all documents and filter with queries string (req.query : ex. http://domain.ext/api/?query=string)
// this.model.find(req.query, (err, documents) => {
console.log("in findPublished ");
// GET /search?q=tobi+ferret
// req.query.q
// => "tobi ferret"
this.model.find('req.query.publish' , (err, documents) => {
// this.model.find('/app/blog/posts/?publish=true' , (err, documents) => {
res.json(documents)
console.log("posts.publish", req.query.publish);

})
}


}

module.exports = PostsController
6 changes: 6 additions & 0 deletions app/models/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ module.exports = mongoose.model('Post', new mongoose.Schema({
},
content: {
type: String
},
publishedAt: {
type: Date
},
publish: {
type: Boolean
}
}, {
timestamps: true
Expand Down
2 changes: 1 addition & 1 deletion app/routes/posts.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module.exports = (app) => {
// Create new controller
let ctrl = new PostsController();

//GET (for READ) method
// //GET (for READ) method
app.get('/posts', (req, res, next) => {
return ctrl.find(req, res, next)
})
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"express-jwt": "^5.1.0",
"jsonwebtoken": "^7.3.0",
"method-override": "~2.3.6",
"moment": "^2.18.1",
"mongoose": "^4.8.7",
"morgan": "~1.7.0",
"passport": "^0.3.2",
Expand Down
11 changes: 11 additions & 0 deletions posts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{"_id":{"$oid":"59098efab395541750ab50a1"},"updatedAt":{"$date":"2017-05-03T08:50:39.820Z"},"createdAt":{"$date":"2017-05-03T08:04:10.369Z"},"title":"Exercice 1","content":"elsadd@hotmail.fr \nle mot de passe c'est la première lettre de l'alphabet\n\n1. Ce qu’est un fork Github ?\n c'est quand on duplique un projet présent sur GitHub afin de le faire évoluer de son coté différemment de la version originale.\n\\n\n2. A quoi sert-il ?\n cela permet de faire des évolutions sans qu'li n'y ait d'impact sur la version d'origine tout en gardant un lien avec elle. De nombreux logiciels sont issus de Forks. \n\n3. Qu’est-ce qu’une pull request ? Quel est l’intérêt ?\n c'est du code qui est présenté aux propriétaires du projet afin d’être validé publiquement avant de l'intégrer (merge) dans le code existant du projet. Ce peut être en interne ou en externe. Cela permet d'intégrer des contributions.\n \n4. Qu’est-ce qu’une branche ?\n\"Créer une branche signifie diverger de la ligne principale de développement et continuer à travailler sans se préoccuper de cette ligne principale.\"\n cela permet de séparer le modifications de code et de les fusionner plus tard si on le souhaite\n\n5. Quelle est la différence entre une branche et un fork ? \nune branche appartient à un projet donné, un fork c'est un autre projet, qui a lui même ses propres branches.","__v":0,"publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"publish":true}
{"_id":{"$oid":"5909946c41cbd21c20468bc8"},"updatedAt":{"$date":"2017-05-03T18:07:03.677Z"},"createdAt":{"$date":"2017-05-03T08:27:24.820Z"},"title":"exo 5 publishedAt","content":"Instructions : \nLors de l’ajout/édition d’un article, un troisième champ « date de publication » doit être visible et on doit pouvoir y inscrire une date\nL’usage d’un Datepicker est un gros plus mais pas indispensable. Si vous n’utilisez pas de datepicker, mettez au moins un message d’aide pour que l’utilisateur renseigne la date sous le bon format. \nLe contenu de ce champ doit apparaître sur la page de visualisation d’un article, en dessous de son titre : « publié le JJ-MM-AAAA »\nPensez à la mise à jour du schéma Mongoose pour l’enregistrement, réfléchissez à un bon nom de champs, en prenant exemple sur les « createdAt » / « updatedAt »","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"__v":0,"publish":true}
{"_id":{"$oid":"5909963341cbd21c20468bc9"},"updatedAt":{"$date":"2017-05-03T20:54:32.295Z"},"createdAt":{"$date":"2017-05-03T08:34:59.426Z"},"title":"exo5","content":"Nous aimerions ajouter une date de publication à l’article sous la forme «JJ-MM-AAAA », par exemple : 03-05-2017.","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"__v":0,"publish":true}
{"_id":{"$oid":"5909ee89848fc51ce01353b6"},"updatedAt":{"$date":"2017-05-03T18:31:38.771Z"},"createdAt":{"$date":"2017-05-03T14:51:53.136Z"},"title":"EXO 6","publishedAt":{"$date":"2017-05-03T22:00:00.000Z"},"content":"Ajouter un champ « publié » à l’article","__v":0,"publish":true}
{"_id":{"$oid":"5909feacdd2af62e3fe6253d"},"updatedAt":{"$date":"2017-05-03T16:04:30.339Z"},"createdAt":{"$date":"2017-05-03T16:00:44.519Z"},"title":"exo16 export mongo","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"content":"mongoexport --db blog --collection posts --out posts.json\nmongoexport --db blog --collection users --out users.json","__v":0,"publish":true}
{"_id":{"$oid":"590a0a4782f7713bdcac8f45"},"updatedAt":{"$date":"2017-05-03T18:11:19.947Z"},"createdAt":{"$date":"2017-05-03T16:50:15.392Z"},"title":"exo 11 debugg","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"__v":0,"content":"pb dans Mongo, arrive pas à faire ménage des anciens Id bookmark en double","publish":true}
{"_id":{"$oid":"590a1cfb4fa3a545d429d612"},"updatedAt":{"$date":"2017-05-03T18:10:03.606Z"},"createdAt":{"$date":"2017-05-03T18:10:03.606Z"},"title":"test favori","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"__v":0,"publish":true}
{"_id":{"$oid":"590a41e01aa4026008f6af0d"},"updatedAt":{"$date":"2017-05-03T20:47:28.893Z"},"createdAt":{"$date":"2017-05-03T20:47:28.893Z"},"title":"EXO6 not Published","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"content":"this article is not published","__v":0,"publish":false}
{"_id":{"$oid":"590a42281aa4026008f6af0e"},"updatedAt":{"$date":"2017-05-03T20:48:40.042Z"},"createdAt":{"$date":"2017-05-03T20:48:40.042Z"},"title":"EXO6 Published yes","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"content":"article publié","__v":0,"publish":true}
{"_id":{"$oid":"590a43b81aa4026008f6af0f"},"updatedAt":{"$date":"2017-05-03T20:55:45.723Z"},"createdAt":{"$date":"2017-05-03T20:55:20.955Z"},"title":"exo6","publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"content":"this.Publish no","publish":false,"__v":0}
{"_id":{"$oid":"590a4b8d64ded768e72a0da9"},"updatedAt":{"$date":"2017-05-03T21:51:37.449Z"},"createdAt":{"$date":"2017-05-03T21:28:45.738Z"},"publish":true,"publishedAt":{"$date":"2017-05-02T22:00:00.000Z"},"title":"La MEAN Stack","content":"Angular\n1. A quoi elle sert ? C'est un framework MVC pour définir l'architecture du projet\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? On peut l'utiliser des 2 cotés front \u0026 back mais pas obligé\n3. Si elle est facultative ou non pour ce projet : non\nAngular UI Router\n1. A quoi elle sert ? C'est un outil qui permet de faciliter la navigation sur un site sans avoir à recharger toute la page, très pratique pour les sites Single page\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? En front car c'est pour afficher\n3. Si elle est facultative ou non pour ce projet, si on l'en lève on n'affiche plus rien sur notre site, il aurait fallu le concevoir différement.\nExpress\n1. A quoi elle sert ? C'est un framework basé sur Node .js pour construire le serveur\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? En back\n3. Si elle est facultative ou non pour ce projet, Non, si on n'a pas de serveur on n'a pas de données à afficher\nJSONWebToken\n1. A quoi elle sert ? C'est un standard utilisé pour l'authentification\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? front \u0026 back\n3. Si elle est facultative ou non pour ce projet. On peut faire autrement oui\nMongoose\n1. A quoi elle sert ? C'est pour l'accès à la base de données\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? Accès par le back et par le terminal on peut aussi\n3. Si elle est facultative ou non pour ce projet . Si on utilise une autre DB NoSQL oui\nMaterializeCSS\n1. A quoi elle sert ? C'est un framework pour le CSS\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? Coté front\n3. Si elle est facultative ou non pour ce projet, oui mais c'est moins joli et pratique à coder, on pourrait changer pour bootstrap\nPassport\n1. A quoi elle sert ? C'est pout l'authentification\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? Les deux\n3. Si elle est facultative ou non pour ce projet, on pourrait\nBabel\n1. A quoi elle sert ? C'est un compilateur pour la rétrocompatibilité avec d'anciens navigateurs\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? front\n3. Si elle est facultative ou non pour ce projet. Oui si notre navigateur est à jour avec les technos utilisées\nSCSS\n1. A quoi elle sert ? Ça prend moins de place que le css\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? front\n3. Si elle est facultative ou non pour ce projet. oui\nNodemon\n1. A quoi elle sert ? Ça sert au dev . C'est un service qui relance les scripts en cas de modifications, on voit les résultats (ok ou Ko) sur le terminal\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? Que en dev - Back affiché sur terminal. Se trouve dans \"devDependencies\" du package.json\n3. Si elle est facultative ou non pour ce projet, oui mais pour tester et débuger c'est plus pratique\nWebpack\n1. A quoi elle sert ? Comme audessus mais coté front Ça sert au dev, regénère le js pour l'afficher sans tout rafraichir\n2. Où va-t-on l’utiliser  ? Que en dev- Front affiché sur terminal. Se trouve dans \"devDependencies\" du package.json\n3. Si elle est facultative ou non pour ce projet, oui mais pour tester et débuger c'est plus pratique\n\nLivereload \n1. A quoi elle sert ? pour rafraichir le navigateur automatiquement (au lieu de faire F5)\n2. Où va-t-on l’utiliser (côté front, côté back, front \u0026 back, terminal…) ? Que en dev- Front \n3. Si elle est facultative ou non pour ce projet, oui mais pour tester et débuger c'est plus pratique","__v":0}
6 changes: 4 additions & 2 deletions public/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ import services from './services/services.md'
import common from './components/common/common.md'
import login from './components/login/login.md'
import blog from './components/blog/blog.md'
import algo1 from './components/algo1/algo1.md'

console.log("In app.js")
console.log(services)

angular.module('app', [
angularUIRouter,
angularCookies,
Expand All @@ -27,5 +28,6 @@ angular.module('app', [
services,
common,
login,
blog
blog,
algo1
])
12 changes: 12 additions & 0 deletions public/js/components/algo1/algo1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<section>
<navbar />
<div class="container">
<div class="row">
<div class="col s12 center">
<h1>algo1</h1>
<p>{{$ctrl.myFriend}}</p>
</div>
</div>

</div>
</section>
42 changes: 42 additions & 0 deletions public/js/components/algo1/algo1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
Create Angular component algo1 into module app.blog
*/
let algo1 = {
templateUrl: 'js/components/algo1/algo1.html',
controller: [ 'UsersService', '$state', function( UsersService, $state ) {
'use strict'
console.log("algo1.js");
angular.extend( this, {
$onInit() {
UsersService.getCurrent().then( ( user ) => {
this.user = user
} ).catch( ( err ) => {

} )
},
disconnect() {
UsersService.disconnect().then( () => {
Materialize.toast( 'Disconnected', 4000, 'toast-warning' )
this.user = null
$state.reload()
} )
}
} )

function friend(friends){
//your code here
// for each friend in array friends
// test if lenght = 4 then push it in return array
let isFriend = [];
friends.forEach(function(y) {
if (y.length === 4) { isFriend.push(y)}
})
return isFriend ;
}
this.myFriend = friend(["Ryan", "Kieran", "Mark"]);
console.log("I have this friends: ", this.myFriend );

} ]
}

export default algo1
25 changes: 25 additions & 0 deletions public/js/components/algo1/algo1.md.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
Create Angular module app.blog and define all states
blog : parent state, is an abstrat state too with templateUrl
*/

import algo1Component from './algo1'

let algo1Module = angular.module('app.algo1', [])
.component('algo1', algo1Component)
.config(['$stateProvider', ($stateProvider, $urlRouterProvider, $locationProvider) => {
console.log("algo1.md.js");
/*
Define a state with name 'blog' this state is abstract and url is empty (root of application)
template is ui-view it's used to display nested views
*/
// $stateProvider
// .state('algo1', {
// url: '/algo1',
// abstract: true,
// templateUrl: 'js/components/algo1/algo1.html'
// })
}])
.name

export default algo1Module
25 changes: 24 additions & 1 deletion public/js/components/blog/blogItem/blogItem.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<blog-item-menu ng-if="$ctrl.editable" user="$ctrl.user" edit-mode="$ctrl.editMode" on-undo="$ctrl.undo()" on-edit="$ctrl.editMode = !$ctrl.editMode" on-delete="$ctrl.delete()" on-save="$ctrl.save()" />
<div class="col s12 m4">
<div class="card">

<!-- In general if it's not editable it's when this component is used in the blogList component -->
<div class="card-content">
<!-- Display post.title if this component is not editable or editable and not in edit mode -->
Expand All @@ -11,12 +11,34 @@
</span>
<!-- Display input for editing post.title only if editable and in edit mode -->
<input type="text" ng-if="($ctrl.editable && $ctrl.editMode)" ng-model="$ctrl.post.title" placeholder="Title">

<!-- Display post.publishedAt if this component is not editable or editable and not in edit mode -->
<!-- <span class="card-date" ng-if="(!$ctrl.editable || ($ctrl.editable && !$ctrl.editMode))"> -->
<p class="card-date">
<!-- "class="datepicker" -->
<span ng-if="(!$ctrl.editable || ($ctrl.editable && !$ctrl.editMode))">
Publié le {{$ctrl.post.publishedAt | date: "dd-MM-yyyy"}}
</span>
<!-- Display input for editing post.publishedAt only if editable and in edit mode -->
<input type="date" ng-if="($ctrl.editable && $ctrl.editMode)" ng-model="$ctrl.post.publishedAt" placeholder="publishedAt">
<!-- Switch -->
<div class="switch" ng-if="($ctrl.editable && $ctrl.editMode)">
<label>
Off
<input id="mycheckbox" type="checkbox" ng-model="$ctrl.post.publish">
<span class="lever"></span>
On
</label>
</div>
</p>

<!-- Display post.content if this component is not editable or editable and not in edit mode -->
<div ng-if="(!$ctrl.editable || ($ctrl.editable && !$ctrl.editMode))">
{{$ctrl.post.content | limitTo: ($ctrl.editable ? $ctrl.post.content.length : 110)}}
</div>
<!-- Display textarea for editing post.content only if editable and in edit mode -->
<textarea class="materialize-textarea" ng-if="($ctrl.editable && $ctrl.editMode)" ng-model="$ctrl.post.content" placeholder="Content"></textarea>

</div>

<div class="card-action">
Expand All @@ -32,6 +54,7 @@
<!-- Change icon from post.isFav value -->
<i class="material-icons pull-right">{{($ctrl.isFav() ? 'turned_in' : 'turned_in_not')}}</i>
</a>

</div>
</div>
</div>
2 changes: 2 additions & 0 deletions public/js/components/blog/blogItem/blogItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,15 @@ let blogItem = {
PostsService.getById($stateParams.id).then((res) => {
// when this request receives response we affect response data to this controller variable post
this.post = res.data;
this.post.publishedAt = new Date(this.post.publishedAt)
// save into initialPost a copy of this post (used for undo)
initialPost = angular.copy(this.post)
})
}
} else {
//If $stateParams.id doesn't exist we change state to app.blog.list (redirection to list)
$state.go('blog.list')
console.log("redirect to blog.list");
}

// Create delete function.
Expand Down
2 changes: 1 addition & 1 deletion public/js/components/blog/blogItem/blogItemMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Create Angular component blogItemMenu into module app.blog with databindings pro
- onEdit : function
- onDelete : function
- onSave : function
About bindings:
About bindings:
http://stackoverflow.com/questions/37818740/use-of-symbols-and-in-custom-directives-scope-binding-angula
*/
let blogItemMenu = {
Expand Down
3 changes: 1 addition & 2 deletions public/js/components/blog/blogList/blogList.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ let blogList = {
this.posts = res.data
}).catch((err) => {
this.posts = [{
title: "Hello There",
title: "Hello There",
content: "I am an intersting article. There was an error by the way because API doesn't exist yet"
}]
})
Expand All @@ -33,7 +33,6 @@ let blogList = {
// Add 3 to startIndex
this.startIndex += 3
}

}]
}

Expand Down
Loading