From 8d2159b5f9268efaebf83c805d10781a78d4d59e Mon Sep 17 00:00:00 2001 From: newick Date: Tue, 3 May 2016 11:40:10 +0200 Subject: [PATCH 01/11] removed crews everywhere but home --- src/layout-home.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/layout-home.js diff --git a/src/layout-home.js b/src/layout-home.js new file mode 100644 index 0000000..029b407 --- /dev/null +++ b/src/layout-home.js @@ -0,0 +1,18 @@ +{ + layout.create('home') + layout.home.html(` +
+

multiBàO

+
+
+
+
+
+

Partager en équipe et au monde ses apprentissages sur le faire ensemble

+ Commencer ici + Guide d'utilisation +
+
+
+
`) +} \ No newline at end of file From 586b94ef9c58d104ec11ec3e146ffd95e9a0c5d5 Mon Sep 17 00:00:00 2001 From: newick Date: Wed, 4 May 2016 08:07:45 +0200 Subject: [PATCH 02/11] changed header design, added uxperiment basic styles --- css/daktary.css | 33 ++++++++++++++++++++++++++++----- css/layout-repositories.css | 18 +----------------- css/tpl-list.css | 3 --- css/tpl-search.css | 9 +++++++++ index-dev.html | 2 ++ src/layout-folders.js | 7 +------ src/layout-home.js | 2 +- src/layout-repositories.js | 7 +------ src/layout-searchList.js | 7 +------ src/routes.js | 4 ++++ src/tpl-search.js | 3 +-- 11 files changed, 49 insertions(+), 46 deletions(-) diff --git a/css/daktary.css b/css/daktary.css index e593516..b471915 100644 --- a/css/daktary.css +++ b/css/daktary.css @@ -2,11 +2,12 @@ GENERAL */ body { - font-family: "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif; + font-family: "Open Sans", Arial, sans-serif; font-size: 1rem; - color: #6c6c6c; + color: #4d4d4d; -webkit-font-smoothing: antialiased; background: #f8f8f8; + border-top: 3px solid #29abe2; } .container { margin: 0px auto; @@ -17,10 +18,32 @@ p { margin-bottom: 10px; } a { - color: #9b4e4e; + color: #29abe2; } -h1, + h2, h3 { - color: #9b4e4e; + color: #29abe2; } + +h1 { +font-family: "Montserrat", Arial, sans-serif; +} +h1 span { + color: #29abe2; +} + +header { + display: table; + width: 100%; + padding: 20px 0 30px; + margin-bottom: 30px; + border-bottom: 1px solid #000; +} +header h1, +header .search-engine-wrapper { + display: table-cell; +} +header .search-engine-wrapper { + width: 50%; +} \ No newline at end of file diff --git a/css/layout-repositories.css b/css/layout-repositories.css index bcfbd99..8b13789 100644 --- a/css/layout-repositories.css +++ b/css/layout-repositories.css @@ -1,17 +1 @@ -/* -GENERAL -*/ -header { - padding: 20px 0 30px; - border-bottom: 1px solid #000; -} -aside { - position: fixed; - left: 0; - top: 0; - padding: 15px; - height: 100%; - max-width: 25%; - background-color: #efefef; - overflow-y: auto; -} + diff --git a/css/tpl-list.css b/css/tpl-list.css index 4ae6d67..2bf9737 100644 --- a/css/tpl-list.css +++ b/css/tpl-list.css @@ -1,9 +1,6 @@ /* CONTRIBUTIONS LIST */ -header h1 { - text-align: center; -} /*list of article*/ .gh-list { diff --git a/css/tpl-search.css b/css/tpl-search.css index 2f9c9c9..6ef7353 100644 --- a/css/tpl-search.css +++ b/css/tpl-search.css @@ -6,3 +6,12 @@ padding: 5px; width: calc(100% - 105px); } + +.search-engine-wrapper input[type="submit"] { + padding: 5px; + color: #fff; + font-size: 0.8rem; + background-color: #29abe2; + border: none; + cursor: pointer; +} \ No newline at end of file diff --git a/index-dev.html b/index-dev.html index bc74076..38c007d 100644 --- a/index-dev.html +++ b/index-dev.html @@ -2,6 +2,7 @@ + @@ -17,6 +18,7 @@ + diff --git a/src/layout-folders.js b/src/layout-folders.js index 8f1de87..0773d0b 100644 --- a/src/layout-folders.js +++ b/src/layout-folders.js @@ -6,15 +6,10 @@ layout.create('folders') layout.folders.html(`
-

MultiBao

+

multiBàO

-
diff --git a/src/layout-home.js b/src/layout-home.js index 029b407..73fb853 100644 --- a/src/layout-home.js +++ b/src/layout-home.js @@ -2,7 +2,7 @@ layout.create('home') layout.home.html(`
-

multiBàO

+

multiBàO

diff --git a/src/layout-repositories.js b/src/layout-repositories.js index 557844b..7f825b0 100644 --- a/src/layout-repositories.js +++ b/src/layout-repositories.js @@ -6,15 +6,10 @@ layout.create('repos') layout.repos.html(`
-

MultiBao

+

multiBàO

-
diff --git a/src/layout-searchList.js b/src/layout-searchList.js index cab7c38..59d84b7 100644 --- a/src/layout-searchList.js +++ b/src/layout-searchList.js @@ -6,15 +6,10 @@ layout.create('searchList') layout.searchList.html(`
-

MultiBao

+

multiBàO

-
diff --git a/src/routes.js b/src/routes.js index 14ce467..a6a0611 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1,6 +1,10 @@ // Create a router const router = new Router() +router.route('home', function () { + this.currentRoute = 'home' + layout.home.render() +}) router.route('search/code', function () { this.currentRoute = 'search' layout.searchList.render() diff --git a/src/tpl-search.js b/src/tpl-search.js index fae6f11..64c0e2b 100644 --- a/src/tpl-search.js +++ b/src/tpl-search.js @@ -3,10 +3,9 @@ template.search.data = () => { template.search.html(` -

Recherche

- +
From 42f0d56f2f47fb42c224345d92c352417a59f50e Mon Sep 17 00:00:00 2001 From: newick Date: Wed, 4 May 2016 08:53:06 +0200 Subject: [PATCH 03/11] corrected breadcrumbs issue, edited contribution links and lists --- css/tpl-breadcrumb.css | 3 +++ css/tpl-contribution.css | 30 +++++++++++++++++++++++++----- src/tpl-breadcrumb.js | 8 ++++---- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/css/tpl-breadcrumb.css b/css/tpl-breadcrumb.css index c3bf01f..2d41a2d 100644 --- a/css/tpl-breadcrumb.css +++ b/css/tpl-breadcrumb.css @@ -6,6 +6,9 @@ display: inline-block; list-style-type: none; } +.breadcrumb li:not(:first-child) { + margin-left: 5px; +} .breadcrumb li:not(:first-child):before { content: '> '; } diff --git a/css/tpl-contribution.css b/css/tpl-contribution.css index 8a8033b..5bfdc29 100644 --- a/css/tpl-contribution.css +++ b/css/tpl-contribution.css @@ -50,6 +50,26 @@ CONTRIBUTIONS font-size: 1.188rem; line-height: 1.473684211em; } +#contribution ul { + margin-left: 20px; +} +#contribution ul ul { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + margin-left: 36px; +} +#contribution li { + position: relative; + padding-left: 20px; + list-style-type: none; +} +#contribution li:before { + content: '>'; + position: absolute; + left: 0; + top: 0; + font-weight: bold; +} #contribution img { display: block; vertical-align: middle; @@ -64,15 +84,15 @@ CONTRIBUTIONS transition: all .2s ease-in-out; } #contribution a { - transition: all 200ms linear 0s; - border-bottom: 1px solid #1995D3; - color: #333; + color: #4d4d4d; text-decoration: none; + border-bottom: 1px solid #4d4d4d; } #contribution a:hover, #contribution a:focus { - border-bottom: 1px solid #0067AF; - background: #EBF4F6; + color: #29abe2; + border-bottom-color: #29abe2; +; } #contribution blockquote p { font-family: Georgia,Cambria,"Times New Roman",Times,serif; diff --git a/src/tpl-breadcrumb.js b/src/tpl-breadcrumb.js index 3971e6a..8ad4844 100644 --- a/src/tpl-breadcrumb.js +++ b/src/tpl-breadcrumb.js @@ -28,11 +28,11 @@ template.breadcrumb.html( ``) } From 87722f2075b0154885ca3ef8e2c168643eabcad9 Mon Sep 17 00:00:00 2001 From: newick Date: Wed, 4 May 2016 10:15:40 +0200 Subject: [PATCH 04/11] corrected breadcrumbs display --- css/tpl-breadcrumb.css | 2 +- src/tpl-breadcrumb.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/css/tpl-breadcrumb.css b/css/tpl-breadcrumb.css index 2d41a2d..09eb992 100644 --- a/css/tpl-breadcrumb.css +++ b/css/tpl-breadcrumb.css @@ -3,7 +3,7 @@ padding: 20px 0; } .breadcrumb li { - display: inline-block; + display: inline; list-style-type: none; } .breadcrumb li:not(:first-child) { diff --git a/src/tpl-breadcrumb.js b/src/tpl-breadcrumb.js index 8ad4844..3971e6a 100644 --- a/src/tpl-breadcrumb.js +++ b/src/tpl-breadcrumb.js @@ -28,11 +28,11 @@ template.breadcrumb.html( ``) } From d69f05c3e38ff957d970268f0f796cd55a18e89a Mon Sep 17 00:00:00 2001 From: pointbar Date: Wed, 4 May 2016 11:07:42 +0200 Subject: [PATCH 05/11] Optimize files --- dist/dk.min.css | 2 +- dist/dk.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/dk.min.css b/dist/dk.min.css index 3c95f7b..b76f51d 100644 --- a/dist/dk.min.css +++ b/dist/dk.min.css @@ -1 +1 @@ -body{margin:0}h1,h2,h3,h4,h5{margin-top:0;margin-bottom:0}fieldset{padding:0;margin-right:0;margin-left:0;border:0}ul{margin-top:0;margin-bottom:0;padding-left:0}body{font-family:"Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;font-size:1rem;color:#6c6c6c;-webkit-font-smoothing:antialiased;background:#f8f8f8}.container{margin:0 auto;width:620px}p{margin-top:0;margin-bottom:10px}a{color:#9b4e4e}h1,h2,h3{color:#9b4e4e}header{padding:20px 0 30px;border-bottom:1px solid #000}aside{position:fixed;left:0;top:0;padding:15px;height:100%;max-width:25%;background-color:#efefef;overflow-y:auto}#contribution{font-family:"Sentinel SSm A","Sentinel SSm B",Palatino Linotype,Book Antiqua,Palatino,serif;content:"medium";box-sizing:border-box;padding:0;margin:19px 0;letter-spacing:.01rem;color:rgba(0,0,0,0.7)}#contribution h1,#contribution h2,#contribution h3{font-family:'Quattrocento Sans',sans-serif}#contribution h1{font-size:2.25rem;line-height:2.5rem;margin-top:0;margin-bottom:1.75rem}#contribution h2{font-size:1.9375rem;line-height:1.75rem;margin-top:3.5rem;margin-bottom:1.75rem}#contribution h3{font-size:1.1875rem;line-height:1.75rem;margin-top:1.75rem;margin-bottom:1.75rem}#contribution h4{font-size:1.1875rem;line-height:1.75rem;margin-top:1.75rem;margin-bottom:1.75rem}#contribution p,#contribution ul,#contribution ol,#contribution pre,#contribution table,#contribution blockquote{margin-top:1.75rem;margin-bottom:1.75rem;font-size:1.188rem;line-height:1.473684211em}#contribution img{display:block;vertical-align:middle;padding:4px;max-width:605px;margin:.75rem 0;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#contribution a{transition:all 200ms linear 0s;border-bottom:1px solid #1995d3;color:#333;text-decoration:none}#contribution a:hover,#contribution a:focus{border-bottom:1px solid #0067af;background:#ebf4f6}#contribution blockquote p{font-family:Georgia,Cambria,"Times New Roman",Times,serif;letter-spacing:.01rem;font-weight:400;font-style:italic;border-left:3px solid rgba(0,0,0,0.8);padding-left:20px;margin-left:-23px;padding-bottom:3px}#contribution table[data-table-type="yaml-metadata"],#contribution svg.octicon{display:none}.tags,.tags ul{font-family:"Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;font-size:13px;color:rgba(0,0,0,0.44);letter-spacing:0}.tags ul{list-style:outside none none;margin:5px 0;padding:0}.tags li{display:inline-block;float:left;background:#fafafa;border-radius:2px;border:1px solid #f0f0f0;padding:3px 10px;margin-right:8px;margin-bottom:8px}aside h3{margin-bottom:20px}#gh-crew-list ul{padding-bottom:20px}#gh-crew-list li{margin-bottom:15px;line-height:1;list-style-type:none}#gh-crew-list li:before{content:'> '}#gh-crew-list a{color:#000;text-decoration:none}#gh-crew-list a:hover{text-decoration:underline}#gh-crew-list a.selected{color:#9b4e4e;font-weight:bold}.search-engine-wrapper input[type="text"]{padding:5px;width:calc(100% - 105px)}.breadcrumb{padding:20px 0}.breadcrumb li{display:inline-block;list-style-type:none}.breadcrumb li:not(:first-child):before{content:'> '}header h1{text-align:center}.gh-list-item{position:relative;padding:20px 0}.gh-list-item:not(:last-child){margin-bottom:30px}.gh-list-item:not(:last-child):after{content:'';position:absolute;bottom:0;left:0;right:0;display:block;width:25%;height:1px;margin:auto;background:#000}.gh-list-title{margin-top:0;margin-bottom:15px;line-height:1}.gh-list-meta{margin-bottom:10px;font-size:.8em}.gh-list-meta p{margin:0} +body{margin:0}h1,h2,h3,h4,h5{margin-top:0;margin-bottom:0}fieldset{padding:0;margin-right:0;margin-left:0;border:0}ul{margin-top:0;margin-bottom:0;padding-left:0}body{font-family:"Open Sans",Arial,sans-serif;font-size:1rem;color:#4d4d4d;-webkit-font-smoothing:antialiased;background:#f8f8f8;border-top:3px solid #29abe2}.container{margin:0 auto;width:620px}p{margin-top:0;margin-bottom:10px}a{color:#29abe2}h2,h3{color:#29abe2}h1{font-family:"Montserrat",Arial,sans-serif}h1 span{color:#29abe2}header{display:table;width:100%;padding:20px 0 30px;margin-bottom:30px;border-bottom:1px solid #000}header h1,header .search-engine-wrapper{display:table-cell}header .search-engine-wrapper{width:50%}#contribution{font-family:"Sentinel SSm A","Sentinel SSm B",Palatino Linotype,Book Antiqua,Palatino,serif;content:"medium";box-sizing:border-box;padding:0;margin:19px 0;letter-spacing:.01rem;color:rgba(0,0,0,0.7)}#contribution h1,#contribution h2,#contribution h3{font-family:'Quattrocento Sans',sans-serif}#contribution h1{font-size:2.25rem;line-height:2.5rem;margin-top:0;margin-bottom:1.75rem}#contribution h2{font-size:1.9375rem;line-height:1.75rem;margin-top:3.5rem;margin-bottom:1.75rem}#contribution h3{font-size:1.1875rem;line-height:1.75rem;margin-top:1.75rem;margin-bottom:1.75rem}#contribution h4{font-size:1.1875rem;line-height:1.75rem;margin-top:1.75rem;margin-bottom:1.75rem}#contribution p,#contribution ul,#contribution ol,#contribution pre,#contribution table,#contribution blockquote{margin-top:1.75rem;margin-bottom:1.75rem;font-size:1.188rem;line-height:1.473684211em}#contribution ul{margin-left:20px}#contribution ul ul{margin-top:.5rem;margin-bottom:.5rem;margin-left:36px}#contribution li{position:relative;padding-left:20px;list-style-type:none}#contribution li:before{content:'>';position:absolute;left:0;top:0;font-weight:bold}#contribution img{display:block;vertical-align:middle;padding:4px;max-width:605px;margin:.75rem 0;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#contribution a{color:#4d4d4d;text-decoration:none;border-bottom:1px solid #4d4d4d}#contribution a:hover,#contribution a:focus{color:#29abe2;border-bottom-color:#29abe2}#contribution blockquote p{font-family:Georgia,Cambria,"Times New Roman",Times,serif;letter-spacing:.01rem;font-weight:400;font-style:italic;border-left:3px solid rgba(0,0,0,0.8);padding-left:20px;margin-left:-23px;padding-bottom:3px}#contribution table[data-table-type="yaml-metadata"],#contribution svg.octicon{display:none}.tags,.tags ul{font-family:"Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;font-size:13px;color:rgba(0,0,0,0.44);letter-spacing:0}.tags ul{list-style:outside none none;margin:5px 0;padding:0}.tags li{display:inline-block;float:left;background:#fafafa;border-radius:2px;border:1px solid #f0f0f0;padding:3px 10px;margin-right:8px;margin-bottom:8px}aside h3{margin-bottom:20px}#gh-crew-list ul{padding-bottom:20px}#gh-crew-list li{margin-bottom:15px;line-height:1;list-style-type:none}#gh-crew-list li:before{content:'> '}#gh-crew-list a{color:#000;text-decoration:none}#gh-crew-list a:hover{text-decoration:underline}#gh-crew-list a.selected{color:#9b4e4e;font-weight:bold}.search-engine-wrapper input[type="text"]{padding:5px;width:calc(100% - 105px)}.search-engine-wrapper input[type="submit"]{padding:5px;color:#fff;font-size:.8rem;background-color:#29abe2;border:0;cursor:pointer}.breadcrumb{padding:20px 0}.breadcrumb li{display:inline-block;list-style-type:none}.breadcrumb li:not(:first-child){margin-left:5px}.breadcrumb li:not(:first-child):before{content:'> '}.gh-list-item{position:relative;padding:20px 0}.gh-list-item:not(:last-child){margin-bottom:30px}.gh-list-item:not(:last-child):after{content:'';position:absolute;bottom:0;left:0;right:0;display:block;width:25%;height:1px;margin:auto;background:#000}.gh-list-title{margin-top:0;margin-bottom:15px;line-height:1}.gh-list-meta{margin-bottom:10px;font-size:.8em}.gh-list-meta p{margin:0} diff --git a/dist/dk.min.js b/dist/dk.min.js index eb3bfc1..483a732 100644 --- a/dist/dk.min.js +++ b/dist/dk.min.js @@ -1 +1 @@ -"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _slicedToArray(arr,i){if(Array.isArray(arr))return arr;if(Symbol.iterator in Object(arr)){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{!_n&&_i["return"]&&_i["return"]()}finally{if(_d)throw _e}}return _arr}throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _slicedToArray(arr,i){if(Array.isArray(arr))return arr;if(Symbol.iterator in Object(arr)){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{!_n&&_i["return"]&&_i["return"]()}finally{if(_d)throw _e}}return _arr}throw new TypeError("Invalid attempt to destructure non-iterable instance")}var GH_SECRET="M2NmYjI1YmNlOWE4MGFjN2E2NzIxZTg5YzkwMGVhZjM5NzEwN2Y2MA==",GH_ID="NGEzOWM4YzE4NjA3NDkxNWU1NDY=",CREWS={crews:[{title:"Bienvenue sur multiBàO",label:"Accueil Multibao",owner:"multibao"},{title:"Réseau Transition BE",label:"Réseau Transition BE",owner:"reseautransitionwb"},{title:"Réseau Coop-tic",label:"Coop-TIC",owner:"supagroflorac"},{title:"Traducteurs agiles",label:"Traducteurs agiles",owner:"les-traducteurs-agiles"},{title:"Onpassealacte",label:"Onpassealacte",owner:"onpassealacte"}]},_createClass=function(){function defineProperties(target,props){for(var i=0;i\n \n
\n
\n
\n '),layout.create("folders"),layout.folders.html('\n
\n

MultiBao

\n
\n
\n
\n \n
\n \n
\n
\n
'),layout.create("repos"),layout.repos.html('\n
\n

MultiBao

\n
\n
\n
\n \n
\n \n
\n
\n
'),layout.create("searchList"),layout.searchList.html('\n
\n

MultiBao

\n
\n
\n
\n \n
\n
\n
\n
');var router=new Router;router.route("search/code",function(){this.currentRoute="search",layout.searchList.render()}),router.route(":owner/:repo/blob/:branch/:path(.*)",function(){this.currentRoute="blob",layout.viewer.render()}),router.route(":owner/:repo/tree/:branch/:path(.*)?",function(){this.currentRoute="tree",layout.folders.render()}),router.route(":owner/:repo",function(){this.currentRoute="list",layout.folders.render()}),router.route(":owner",function(){this.currentRoute="repos",layout.repos.render()}),template.create("contribution"),template.contribution.data=function(){var apiUrl=new GithubUrl(router.params).toGhApiUrl();fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3.html"}}).then(function(response){return response.text()}).then(function(html){template.contribution.html(html),template.contribution.renderAsync()})},template.create("parentRepo"),template.parentRepo.data=function(){var _router$params=router.params,owner=_router$params.owner,repo=_router$params.repo,branch=_router$params.branch,path=_router$params.path,_link$label={link:"#"+owner+"/"+repo+"/tree/"+branch+"/"+path.replace(/(\/|)[0-9A-Za-z\u00C0-\u017F\-\_\.]*$/,""),label:""+owner+" - "+repo},link=_link$label.link,label=_link$label.label;template.parentRepo.html('À retrouver dans le dépôt : '+label+"")};var crewsWithSelectedClass=function(owner,crews){return crews.map(function(elt){return elt.owner===owner&&(elt.classAttr="selected"),elt})};template.create("crews"),template.crews.data=function(){var ownerRoute=router.params.owner,_crews={crews:crewsWithSelectedClass(ownerRoute,CREWS.crews)},crews=_crews.crews;template.crews.html("
    "+crews.map(function(_ref){var title=_ref.title,label=(_ref.repo,_ref.label),owner=(_ref.link,_ref.owner),classAttr=_ref.classAttr;return'
  • '+label+"
  • ")}).join("\n")+"
")},template.create("search"),template.search.data=function(){template.search.html('\n

Recherche

\n
\n
\n \n \n
\n
\n '),template.search.events({"click #button-gh-search":function(){if(document.querySelector("#gh-search").value.length>2){var userQuery=document.querySelector("#gh-search").value,apiUrl=new GithubUrl(router.params).toGhApiSearch(userQuery);router.go(apiUrl.replace("https://api.github.com/",""))}},"keypress #gh-search":function(evt){if("Enter"===evt.key&&evt.target.value.length>2){var userQuery=evt.target.value,apiUrl=new GithubUrl(router.params).toGhApiSearch(userQuery);router.go(apiUrl.replace("https://api.github.com/",""))}}})},template.create("breadcrumb"),template.breadcrumb.data=function(){var _router$params=router.params,owner=_router$params.owner,repo=_router$params.repo,branch=_router$params.branch,path=_router$params.path,folders=[];path&&!function(){var pathByFolder=[];path.split("/").map(function(elt){pathByFolder.push("/"+elt),folders.push({link:"#"+owner+"/"+repo+"/tree/"+branch+pathByFolder.join(""),label:elt})})}();var _ownerTpl$repoTpl$foldersTpl={ownerTpl:{label:owner,link:"#"+owner},repoTpl:{label:repo,link:"#"+owner+"/"+repo+"/tree/"+branch},foldersTpl:folders},ownerTpl=_ownerTpl$repoTpl$foldersTpl.ownerTpl,repoTpl=_ownerTpl$repoTpl$foldersTpl.repoTpl,foldersTpl=_ownerTpl$repoTpl$foldersTpl.foldersTpl;template.breadcrumb.html('")},template.create("folders"),template.folders.data=function(){var apiUrl=new GithubUrl(router.params).toGhApiUrl();fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3"}}).then(function(response){return response.json()}).then(function(json){var ressources=json.map(function(_ref){var name=_ref.name,type=_ref.type,html_url=_ref.html_url;return{name:name,type:type,prose_url:("http://prose.io/#"+html_url.match(/^https:\/\/github.com\/(.*)/)[1]).replace("blob","edit"),git_url:html_url,url:""+html_url.match(/^https:\/\/github.com\/(.*)/)[1]}});template.folders.html(ressources.map(function(_ref2){var type=_ref2.type,name=_ref2.name,url=_ref2.url,prose_url=_ref2.prose_url,git_url=_ref2.git_url;return''}).join("\n")),template.folders.renderAsync(template.folders._htmlTpl)})},template.create("repos"),template.repos.data=function(){var apiUrl=new GithubUrl(router.params).toGhRepoApiUrl();fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3"}}).then(function(response){return response.json()}).then(function(json){var ressources=json.map(function(_ref){var name=_ref.name,type=_ref.type,html_url=_ref.html_url;return{name:name,type:type,git_url:html_url,url:""+html_url.match(/^https:\/\/github.com\/(.*)/)[1]}});template.repos.html(ressources.map(function(_ref2){var name=_ref2.name,url=_ref2.url,git_url=_ref2.git_url;return''}).join("\n")),template.repos.renderAsync(template.repos._htmlTpl)})},template.create("searchList"),template.searchList.data=function(){var _router$queries$q$match=router.queries.q.match(/(.*)\+language:Markdown\+user:([0-9A-Za-z\u00C0-\u017F\-\_\.]*)/),_router$queries$q$match2=_slicedToArray(_router$queries$q$match,3),query=(_router$queries$q$match2[0],_router$queries$q$match2[1]),user=_router$queries$q$match2[2];router.params.owner=user;var apiUrl=new GithubUrl(router.params).toGhApiSearch(query);fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3.html"}}).then(function(response){return response.json()}).then(function(json){var ressources=json.items.map(function(_ref){var name=_ref.name,type=_ref.type,path=_ref.path,html_url=_ref.html_url,repository=_ref.repository;return{name:name,type:type,prose_url:("http://prose.io/#"+html_url.match(/^https:\/\/github.com\/(.*)/)[1]).replace("blob","edit"),git_url:html_url,url:""+repository.full_name+"/blob/master/"+path}});template.searchList.html(ressources.map(function(_ref2){var type=_ref2.type,name=_ref2.name,url=_ref2.url,prose_url=_ref2.prose_url,git_url=_ref2.git_url;return''}).join("\n")),template.searchList.renderAsync(template.searchList._htmlTpl)})}; \ No newline at end of file +"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _slicedToArray(arr,i){if(Array.isArray(arr))return arr;if(Symbol.iterator in Object(arr)){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{!_n&&_i["return"]&&_i["return"]()}finally{if(_d)throw _e}}return _arr}throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _slicedToArray(arr,i){if(Array.isArray(arr))return arr;if(Symbol.iterator in Object(arr)){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{!_n&&_i["return"]&&_i["return"]()}finally{if(_d)throw _e}}return _arr}throw new TypeError("Invalid attempt to destructure non-iterable instance")}var GH_SECRET="M2NmYjI1YmNlOWE4MGFjN2E2NzIxZTg5YzkwMGVhZjM5NzEwN2Y2MA==",GH_ID="NGEzOWM4YzE4NjA3NDkxNWU1NDY=",CREWS={crews:[{title:"Bienvenue sur multiBàO",label:"Accueil Multibao",owner:"multibao"},{title:"Réseau Transition BE",label:"association Réseau Transition Wallonie Bruxelles",owner:"reseautransitionwb"},{title:"Réseau Coop-tic",label:"associations Outils Réseaux (FR) et CRIE Mouscron (BE); établissement SupAgro Florac (FR)",owner:"supagroflorac"},{title:"Captain Berrotte",label:"stagiaires travaillant sur multiBàO",owner:"captain-berrotte"},{title:"Traducteurs agiles",label:"Les Traducteurs Agiles sont une communauté d’Agilistes et de … Traducteurs.",owner:"les-traducteurs-agiles"},{title:"Onpassealacte",label:"Media web citoyen montrant des initiatives positives en vidéos",owner:"onpassealacte"}]},_createClass=function(){function defineProperties(target,props){for(var i=0;i\n \n
\n
\n
\n '),layout.create("folders"),layout.folders.html('\n
\n

multiBàO

\n
\n
\n
\n
\n \n
\n
\n
'),layout.create("repos"),layout.repos.html('\n
\n

multiBàO

\n
\n
\n
\n
\n \n
\n
\n
'),layout.create("searchList"),layout.searchList.html('\n
\n

multiBàO

\n
\n
\n
\n
\n
\n
\n
');var router=new Router;router.route("/",function(){this.currentRoute="home",layout.home.render()}),router.route("search/code",function(){this.currentRoute="search",layout.searchList.render()}),router.route(":owner/:repo/blob/:branch/:path(.*)",function(){this.currentRoute="blob",layout.viewer.render()}),router.route(":owner/:repo/tree/:branch/:path(.*)?",function(){this.currentRoute="tree",layout.folders.render()}),router.route(":owner/:repo",function(){this.currentRoute="list",layout.folders.render()}),router.route(":owner",function(){this.currentRoute="repos",layout.repos.render()}),template.create("contribution"),template.contribution.data=function(){var apiUrl=new GithubUrl(router.params).toGhApiUrl();fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3.html"}}).then(function(response){return response.text()}).then(function(html){template.contribution.html(html),template.contribution.renderAsync()})},template.create("parentRepo"),template.parentRepo.data=function(){var _router$params=router.params,owner=_router$params.owner,repo=_router$params.repo,branch=_router$params.branch,path=_router$params.path,_link$label={link:"#"+owner+"/"+repo+"/tree/"+branch+"/"+path.replace(/(\/|)[0-9A-Za-z\u00C0-\u017F\-\_\.]*$/,""),label:""+owner+" - "+repo},link=_link$label.link,label=_link$label.label;template.parentRepo.html('À retrouver dans le dépôt : '+label+"")};var crewsWithSelectedClass=function(owner,crews){return crews.map(function(elt){return elt.owner===owner&&(elt.classAttr="selected"),elt})};template.create("crews"),template.crews.data=function(){var ownerRoute=router.params.owner,_crews={crews:crewsWithSelectedClass(ownerRoute,CREWS.crews)},crews=_crews.crews;template.crews.html("
    "+crews.map(function(_ref){var title=_ref.title,label=(_ref.repo,_ref.label),owner=(_ref.link,_ref.owner),classAttr=_ref.classAttr;return'
  • '+label+"
  • ")}).join("\n")+"
")},template.create("search"),template.search.data=function(){template.search.html('\n
\n
\n \n \n
\n
\n '),template.search.events({"click #button-gh-search":function(){if(document.querySelector("#gh-search").value.length>2){var userQuery=document.querySelector("#gh-search").value,apiUrl=new GithubUrl(router.params).toGhApiSearch(userQuery);router.go(apiUrl.replace("https://api.github.com/",""))}},"keypress #gh-search":function(evt){if("Enter"===evt.key&&evt.target.value.length>2){var userQuery=evt.target.value,apiUrl=new GithubUrl(router.params).toGhApiSearch(userQuery);router.go(apiUrl.replace("https://api.github.com/",""))}}})},template.create("breadcrumb"),template.breadcrumb.data=function(){var _router$params=router.params,owner=_router$params.owner,repo=_router$params.repo,branch=_router$params.branch,path=_router$params.path,folders=[];path&&!function(){var pathByFolder=[];path.split("/").map(function(elt){pathByFolder.push("/"+elt),folders.push({link:"#"+owner+"/"+repo+"/tree/"+branch+pathByFolder.join(""),label:elt})})}();var _ownerTpl$repoTpl$foldersTpl={ownerTpl:{label:owner,link:"#"+owner},repoTpl:{label:repo,link:"#"+owner+"/"+repo+"/tree/"+branch},foldersTpl:folders},ownerTpl=_ownerTpl$repoTpl$foldersTpl.ownerTpl,repoTpl=_ownerTpl$repoTpl$foldersTpl.repoTpl,foldersTpl=_ownerTpl$repoTpl$foldersTpl.foldersTpl;template.breadcrumb.html('")},template.create("folders"),template.folders.data=function(){var apiUrl=new GithubUrl(router.params).toGhApiUrl();fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3"}}).then(function(response){return response.json()}).then(function(json){var ressources=json.map(function(_ref){var name=_ref.name,type=_ref.type,html_url=_ref.html_url;return{name:name,type:type,prose_url:("http://prose.io/#"+html_url.match(/^https:\/\/github.com\/(.*)/)[1]).replace("blob","edit"),git_url:html_url,url:""+html_url.match(/^https:\/\/github.com\/(.*)/)[1]}});template.folders.html(ressources.map(function(_ref2){var type=_ref2.type,name=_ref2.name,url=_ref2.url,prose_url=_ref2.prose_url,git_url=_ref2.git_url;return''}).join("\n")),template.folders.renderAsync(template.folders._htmlTpl)})},template.create("repos"),template.repos.data=function(){var apiUrl=new GithubUrl(router.params).toGhRepoApiUrl();fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3"}}).then(function(response){return response.json()}).then(function(json){var ressources=json.map(function(_ref){var name=_ref.name,type=_ref.type,html_url=_ref.html_url;return{name:name,type:type,git_url:html_url,url:""+html_url.match(/^https:\/\/github.com\/(.*)/)[1]}});template.repos.html(ressources.map(function(_ref2){var name=_ref2.name,url=_ref2.url,git_url=_ref2.git_url;return''}).join("\n")),template.repos.renderAsync(template.repos._htmlTpl)})},template.create("searchList"),template.searchList.data=function(){var _router$queries$q$match=router.queries.q.match(/(.*)\+language:Markdown\+user:([0-9A-Za-z\u00C0-\u017F\-\_\.]*)/),_router$queries$q$match2=_slicedToArray(_router$queries$q$match,3),query=(_router$queries$q$match2[0],_router$queries$q$match2[1]),user=_router$queries$q$match2[2];router.params.owner=user;var apiUrl=new GithubUrl(router.params).toGhApiSearch(query);fetch(apiUrl,{headers:{Accept:"application/vnd.github.v3.html"}}).then(function(response){return response.json()}).then(function(json){var ressources=json.items.map(function(_ref){var name=_ref.name,type=_ref.type,path=_ref.path,html_url=_ref.html_url,repository=_ref.repository;return{name:name,type:type,prose_url:("http://prose.io/#"+html_url.match(/^https:\/\/github.com\/(.*)/)[1]).replace("blob","edit"),git_url:html_url,url:""+repository.full_name+"/blob/master/"+path}});template.searchList.html(ressources.map(function(_ref2){var type=_ref2.type,name=_ref2.name,url=_ref2.url,prose_url=_ref2.prose_url,git_url=_ref2.git_url;return''}).join("\n")),template.searchList.renderAsync(template.searchList._htmlTpl)})}; \ No newline at end of file From 709018eabea0a5b7093b0ffa5d464b2c6d43e2ea Mon Sep 17 00:00:00 2001 From: pointbar Date: Wed, 4 May 2016 11:08:26 +0200 Subject: [PATCH 06/11] Add no-route mangement in router --- dist/dk.js | 32 ++++++++++++++++++++------------ src/init.js | 3 +-- src/lib/dk-router.js | 4 ++-- src/routes.js | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/dist/dk.js b/dist/dk.js index c6db9b5..edaf87b 100644 --- a/dist/dk.js +++ b/dist/dk.js @@ -8,19 +8,23 @@ var CREWS = { crews: [{ title: 'Bienvenue sur multiBàO', owner: 'multibao' }, { title: 'Réseau Transition BE', - label: 'Réseau Transition BE', + label: 'association Réseau Transition Wallonie Bruxelles', owner: 'reseautransitionwb' }, { title: 'Réseau Coop-tic', - label: 'Coop-TIC', + label: 'associations Outils Réseaux (FR) et CRIE Mouscron (BE); établissement SupAgro Florac (FR)', owner: 'supagroflorac' + }, { + title: 'Captain Berrotte', + label: 'stagiaires travaillant sur multiBàO', + owner: 'captain-berrotte' }, { title: 'Traducteurs agiles', - label: 'Traducteurs agiles', + label: 'Les Traducteurs Agiles sont une communauté d’Agilistes et de … Traducteurs.', owner: 'les-traducteurs-agiles' }, { title: 'Onpassealacte', - label: 'Onpassealacte', + label: 'Media web citoyen montrant des initiatives positives en vidéos', owner: 'onpassealacte' }] }; /** @@ -226,7 +230,7 @@ var Router = (function () { key: 'go', value: function go(url) { this._resetRoute(); - this.url = url; + this.url = url || '/'; this._findAndSetCurrentRoute(); this.injectLayout(); } @@ -405,7 +409,7 @@ window.addEventListener('hashchange', function () { return window.location.reload(true); }); window.addEventListener('load', function () { - var ghUrl = window.location.toString().split('#')[1] || 'multibao/contributions/tree/master/pages'; + var ghUrl = window.location.toString().split('#')[1]; router.go(ghUrl); if (router.isNoRoute()) { window.location = './404.html'; @@ -431,7 +435,7 @@ var layout = new Layout(); { layout.create('folders'); - layout.folders.html('\n
\n

MultiBao

\n
\n
\n
\n \n
\n \n
\n
\n
'); + layout.folders.html('\n
\n

multiBàO

\n
\n
\n
\n
\n \n
\n
\n
'); } /** * Layout for manage and display Github repositories. @@ -441,7 +445,7 @@ var layout = new Layout(); { layout.create('repos'); - layout.repos.html('\n
\n

MultiBao

\n
\n
\n
\n \n
\n \n
\n
\n
'); + layout.repos.html('\n
\n

multiBàO

\n
\n
\n
\n
\n \n
\n
\n
'); } /** * Layout for manage and display Github repositories. @@ -451,13 +455,17 @@ var layout = new Layout(); { layout.create('searchList'); - layout.searchList.html('\n
\n

MultiBao

\n
\n
\n
\n \n
\n
\n
\n
'); + layout.searchList.html('\n
\n

multiBàO

\n
\n
\n
\n
\n
\n
\n
'); } // Create a router 'use strict'; var router = new Router(); +router.route('/', function () { + this.currentRoute = 'home'; + layout.home.render(); +}); router.route('search/code', function () { this.currentRoute = 'search'; layout.searchList.render(); @@ -552,7 +560,7 @@ template.crews.data = function () { template.create('search'); template.search.data = function () { - template.search.html('\n

Recherche

\n
\n
\n \n \n
\n
\n '); + template.search.html('\n
\n
\n \n \n
\n
\n '); template.search.events({ 'click #button-gh-search': function clickButtonGhSearch() { if (document.querySelector('#gh-search').value.length > 2) { @@ -611,8 +619,8 @@ template.crews.data = function () { var repoTpl = _ownerTpl$repoTpl$foldersTpl.repoTpl; var foldersTpl = _ownerTpl$repoTpl$foldersTpl.foldersTpl; - template.breadcrumb.html('
    \n
  • Accueil
  • \n
  • ' + ownerTpl.label + '
  • \n ' + (repoTpl.label ? '
  • ' + repoTpl.label + '
  • ' : '') + foldersTpl.map(function (folder) { - return '
  • ' + folder.label + '
  • '; + template.breadcrumb.html(''); }; } diff --git a/src/init.js b/src/init.js index 2e823db..df4fc58 100644 --- a/src/init.js +++ b/src/init.js @@ -1,7 +1,6 @@ window.addEventListener('hashchange', () => window.location.reload(true)) window.addEventListener('load', () => { - const ghUrl = window.location.toString().split('#')[1] || - 'multibao/contributions/tree/master/pages' + const ghUrl = window.location.toString().split('#')[1] router.go(ghUrl) if (router.isNoRoute()) { window.location = './404.html' diff --git a/src/lib/dk-router.js b/src/lib/dk-router.js index 6e0ef46..cbb3337 100644 --- a/src/lib/dk-router.js +++ b/src/lib/dk-router.js @@ -87,7 +87,7 @@ const Router = class Router { } _findAndSetCurrentRoute() { let route = {} - for(let index in this._routes) { + for (let index in this._routes) { route = this._routes[index] if (this._checkPatternWithUrl(route.pattern)) { // Execute the action attach on a route @@ -104,7 +104,7 @@ const Router = class Router { } go(url) { this._resetRoute() - this.url = url + this.url = url || '/' this._findAndSetCurrentRoute() this.injectLayout() } diff --git a/src/routes.js b/src/routes.js index a6a0611..85f5782 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1,7 +1,7 @@ // Create a router const router = new Router() -router.route('home', function () { +router.route('/', function () { this.currentRoute = 'home' layout.home.render() }) From 7e86342196558f56843d13b8514ebe75d81f1cae Mon Sep 17 00:00:00 2001 From: newick Date: Wed, 4 May 2016 11:46:54 +0200 Subject: [PATCH 07/11] started home design --- css/daktary.css | 9 +++++++++ css/layout-home.css | 25 +++++++++++++++++++++++++ css/tpl-crews.css | 31 +++++++++++++++++-------------- img/home-intro.jpg | Bin 0 -> 16993 bytes index-dev.html | 1 + src/layout-home.js | 2 +- src/tpl-crews.js | 2 +- 7 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 css/layout-home.css create mode 100644 img/home-intro.jpg diff --git a/css/daktary.css b/css/daktary.css index b471915..d80febc 100644 --- a/css/daktary.css +++ b/css/daktary.css @@ -1,6 +1,14 @@ /* GENERAL */ + + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + body { font-family: "Open Sans", Arial, sans-serif; font-size: 1rem; @@ -9,6 +17,7 @@ body { background: #f8f8f8; border-top: 3px solid #29abe2; } + .container { margin: 0px auto; width: 620px; diff --git a/css/layout-home.css b/css/layout-home.css new file mode 100644 index 0000000..16f7ab1 --- /dev/null +++ b/css/layout-home.css @@ -0,0 +1,25 @@ +.home-intro { + padding: 5px 15px; + height: 310px; + margin-bottom: 30px; + text-align: center; + background: url(../img/home-intro.jpg) center 0 no-repeat; +} +.home-intro h2 { + margin-bottom: 20px; + color: #4d4d4d; + line-height: 1.2; +} +.home-intro h2 span { + display: block; + font-weight: normal; +} +.home-intro a { + padding: 5px 10px; + background-color: #29abe2; + color: #fff; + text-decoration: none; +} +.home-intro a + a { + margin-left: 30px; +} \ No newline at end of file diff --git a/css/tpl-crews.css b/css/tpl-crews.css index 4ba4bd6..f42e735 100644 --- a/css/tpl-crews.css +++ b/css/tpl-crews.css @@ -2,28 +2,31 @@ /* REPOSITORIES LIST */ -aside h3 { - margin-bottom: 20px; -} #gh-crew-list ul { + display: flex; + flex-wrap: wrap; padding-bottom: 20px; } #gh-crew-list li { - margin-bottom: 15px; + position: relative; + width: 30%; + margin-bottom: 30px; + padding: 10px 10px 30px; line-height: 1; list-style-type: none; + box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.75); } -#gh-crew-list li:before { - content: '> '; +#gh-crew-list li:not(:nth-child(3n+1)) { + margin-left: 5%; } #gh-crew-list a { - color: #000; - text-decoration: none; -} -#gh-crew-list a:hover { - text-decoration: underline; +display: table; } -#gh-crew-list a.selected { - color: #9b4e4e; - font-weight: bold; +#gh-crew-list h3 { + display: table-row; + min-height: 80%; } +#gh-crew-list p { + display: table-row; + min-height: 20%; +} \ No newline at end of file diff --git a/img/home-intro.jpg b/img/home-intro.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9431818ac04b9cc113ab2166c90a8c83729c5a4c GIT binary patch literal 16993 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 + diff --git a/src/layout-home.js b/src/layout-home.js index 73fb853..9d000f8 100644 --- a/src/layout-home.js +++ b/src/layout-home.js @@ -8,7 +8,7 @@
    -

    Partager en équipe et au monde ses apprentissages sur le faire ensemble

    +

    Partager en équipe et au monde ses apprentissages sur le faire ensemble

    Commencer ici Guide d'utilisation
    diff --git a/src/tpl-crews.js b/src/tpl-crews.js index e438166..02083b5 100644 --- a/src/tpl-crews.js +++ b/src/tpl-crews.js @@ -20,7 +20,7 @@ template.crews.data = () => { `
      ` + crews.map(({title, repo, label, link, owner, classAttr}) => `
    • ${label}
    • ` + ` data-owner="${owner}">

      ${label}

      ${title}

      ` ).join('\n') + `
    `) } From a22e8707239cda34e8af75b9f8d25f93f556509f Mon Sep 17 00:00:00 2001 From: Erick Gardin Date: Wed, 4 May 2016 12:00:19 +0200 Subject: [PATCH 08/11] Update README.md --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 527bdf3..c38f066 100644 --- a/README.md +++ b/README.md @@ -46,23 +46,22 @@ Dans un [Firefox](https://www.mozilla.org/fr/firefox/developer/) **récent** lan http://127.0.0.1:8000/tests ## Intégration +* Affichage home * Affichage repo * Affichage folder -* Affichage ressources * Bouton recherche avec entrée * Résultats recherche : nombre (en dur) * Résultats recherche : afficher ou non la requète * Résultats recherche : cacher breadcrumbs * Résultats recherche : afficher repo où a été effectué la recherche -* Espace manquant breadcrumbs -* Affichage champs recherche grand -* Changer "Liste des repos" -* Meta : semantique + affichage -* Affichage fiches (typo, justified text) -* Fiche : liens -> couleurs, title hover +* Résultats recherche : afficher si pas de résultat +* Meta fiche: semantique + affichage +* Affichage fiches : typo, justified text, couleurs +* Affichage fiches : éléments html (img, embed, abbr, acronym, cite, code, small, sub, sup, ol) +* Affichage fiches : édition prose.io, lien help, retour haut de page * Responsive : mobile first ? -* notification : ex. aucune fiche trouvée +* Class autour notes pied de page * Simplify tests writes merge on async ## Discussion intégration From 8d1783c755f168b7b3216497c4efa9fb566909ca Mon Sep 17 00:00:00 2001 From: pointbar Date: Fri, 6 May 2016 10:19:50 +0200 Subject: [PATCH 09/11] Extract metadata from a markdown content --- index-dev.html | 1 + sh/optimize.sh | 1 + src/lib/dk-markdown.js | 21 +++++++++++++++++++++ tests/index.html | 2 ++ tests/test.dk-markdown.js | 26 ++++++++++++++++++++++++++ 5 files changed, 51 insertions(+) create mode 100644 src/lib/dk-markdown.js create mode 100644 tests/test.dk-markdown.js diff --git a/index-dev.html b/index-dev.html index e488876..595184d 100644 --- a/index-dev.html +++ b/index-dev.html @@ -18,6 +18,7 @@ + diff --git a/sh/optimize.sh b/sh/optimize.sh index 814d0ec..e8f97c1 100755 --- a/sh/optimize.sh +++ b/sh/optimize.sh @@ -7,6 +7,7 @@ babel \ ./src/lib/dk-router.js \ ./src/lib/dk-layout.js \ ./src/lib/dk-template.js \ + ./src/lib/dk-markdown.js \ ./src/init.js \ ./src/layout-viewer.js \ ./src/layout-folders.js \ diff --git a/src/lib/dk-markdown.js b/src/lib/dk-markdown.js new file mode 100644 index 0000000..74ef0d5 --- /dev/null +++ b/src/lib/dk-markdown.js @@ -0,0 +1,21 @@ +class Markdown { + constructor(content) { + this.content = content + this.metas = {} + if (this._isMetas()) { + this._extractMetas() + } + } + _isMetas() { + return !! this.content.match(/---([\s\S]*?)---/) + } + _extractMetas() { + this.content.match(/---([\s\S]*?)---/)[1] + .split('\n') + .filter(elt => elt.trim()) + .map(elt => { + const [key, value] = elt.split(':') + this.metas[key.trim()] = value.trim() + }) + } +} diff --git a/tests/index.html b/tests/index.html index 93b1e8f..efd5467 100644 --- a/tests/index.html +++ b/tests/index.html @@ -16,10 +16,12 @@ + + diff --git a/tests/test.dk-markdown.js b/tests/test.dk-markdown.js new file mode 100644 index 0000000..eb6b1d9 --- /dev/null +++ b/tests/test.dk-markdown.js @@ -0,0 +1,26 @@ +describe('#Markdown', () => { + it('should retrieve a metadata from markdown', () => { + const mdContent = + '---\n' + + 'type: astringent\n' + + 'mood: doom\n' + + '---\n' + + 'Comme je descendais des fleuves...' + const md = new Markdown(mdContent) + expect(md.metas.mood).to.be('doom') + }) + it('should retrieve a metadata from markdown with just one metadata', () => { + const mdContent = + '---\n' + + 'type: astringent\n' + + '---\n' + + 'Comme je descendais des fleuves...' + const md = new Markdown(mdContent) + expect(md.metas.type).to.be('astringent') + }) + it('should accept markdown without metadata', () => { + const mdContent = 'Comme je descendais des fleuves...' + const md = new Markdown(mdContent) + expect(md.metas.keys).to.be(undefined) + }) +}) From 2060bcc8b329447d6486bb2e9092742ed1709154 Mon Sep 17 00:00:00 2001 From: pointbar Date: Fri, 6 May 2016 14:03:01 +0200 Subject: [PATCH 10/11] Refine method to extract metas --- src/lib/dk-markdown.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/dk-markdown.js b/src/lib/dk-markdown.js index 74ef0d5..d665c9e 100644 --- a/src/lib/dk-markdown.js +++ b/src/lib/dk-markdown.js @@ -14,7 +14,7 @@ class Markdown { .split('\n') .filter(elt => elt.trim()) .map(elt => { - const [key, value] = elt.split(':') + const [, key, value] = elt.match(/([\s\S]*?): (.*)/) this.metas[key.trim()] = value.trim() }) } From 6b6b50b12b824639060a83eedec4eb76064c3eb1 Mon Sep 17 00:00:00 2001 From: pointbar Date: Fri, 6 May 2016 14:03:21 +0200 Subject: [PATCH 11/11] Display metas for repos list --- src/tpl-repos.js | 69 ++++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/src/tpl-repos.js b/src/tpl-repos.js index 65b17bc..81a43ed 100644 --- a/src/tpl-repos.js +++ b/src/tpl-repos.js @@ -2,39 +2,46 @@ template.create('repos') template.repos.data = () => { - const apiUrl = new GithubUrl(router.params).toGhRepoApiUrl() - fetch(apiUrl, {headers: {Accept: 'application/vnd.github.v3'}}) + const reposUrl = new GithubUrl(router.params).toGhRepoApiUrl() + const html = [] + fetch(reposUrl, {headers: {Accept: 'application/vnd.github.v3'}}) .then(response => response.json()) .then(json => { - const ressources = json.map(({name, type, html_url}) => ({ - name: name, - type: type, - git_url: html_url, - url: `${html_url.match(/^https:\/\/github.com\/(.*)/)[1]}` - })) - template.repos.html( - ressources.map(({name, url, git_url}) => - ``).join('\n') - ) - template.repos.renderAsync(template.repos._htmlTpl) + const ressources = json.map(({name, type, html_url, url}) => { + const readmeUrl = { owner: router.params.owner, repo: name, branch: 'master', path: 'README.md' } + const apiUrl = new GithubUrl(readmeUrl).toGhApiUrl() + fetch(apiUrl, {headers: {Accept: 'application/vnd.github.v3.raw'}}) + .then(response => response.text()) + .then(md => { + let contribution = new Markdown(md) + contribution.fullMetas = contribution.metas + contribution.fullMetas.name = name + contribution.fullMetas.type = type + contribution.fullMetas.url = html_url.replace('https://github.com/', '') + contribution.fullMetas.git_url = html_url + contribution.fullMetas.readme_url = html_url.replace('https://github.com/', '') + '/blob/master/README.md' + ;({name, type, bandeau_url, url, git_url, readme_url, description, contributeurs, dossiers, fiches} = contribution.fullMetas) + html.push( + ``) + template.repos.html(html.join('\n')) + template.repos.renderAsync(template.repos._htmlTpl) + }) + }) }) } }