From 4dc11b075a5c02754e7e7fac8c04857a6089d48c Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Mon, 27 Aug 2018 15:17:00 +0200 Subject: [PATCH 01/24] Gulp: watch Pillar styles folder for changes and compile Sass --- gulpfile.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gulpfile.js b/gulpfile.js index 0245b31..3e605c2 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,6 +29,7 @@ var destination = { js: 'cloud/static/assets/js', } +var pillar = '../pillar/'; /* CSS */ gulp.task('styles', function() { @@ -103,6 +104,8 @@ gulp.task('watch',function() { } gulp.watch('src/styles/**/*.sass',['styles']); + gulp.watch(pillar + 'src/styles/**/*.sass',['styles']); + gulp.watch('src/templates/**/*.pug',['templates']); gulp.watch('src/scripts/*.js',['scripts']); gulp.watch('src/scripts/tutti/**/*.js',['scripts_concat_tutti']); From 2be601d0b0e445a9804d2b918d4e1400431d3b16 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Mon, 27 Aug 2018 16:52:22 +0200 Subject: [PATCH 02/24] Introducing Bootstrap 4 Bootstrap (and its dependency popper.js) are now used from npm packages, allowing better version control and custom building of only the required components for both styling and javascript. At this moment the whole styling of bootstrap is included, once the Cloud redesign is over it will be stripped to only the used components. --- .gitignore | 1 + gulpfile.js | 34 ++++++++++++++-- package.json | 4 ++ src/styles/main.sass | 87 ++++++++++++++++++++++++++++++++++++++-- src/templates/layout.pug | 3 +- 5 files changed, 120 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index b9623fc..e00f0a2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ __pycache__ /cloud/templates/ /cloud/static/assets/css/ +/cloud/static/assets/js/bootstrap.min.js node_modules/ /config_local.py diff --git a/gulpfile.js b/gulpfile.js index 3e605c2..173cbfd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,7 +29,12 @@ var destination = { js: 'cloud/static/assets/js', } -var pillar = '../pillar/'; +var source = { + pillar: '../pillar/', + bootstrap: 'node_modules/bootstrap/', + popper: 'node_modules/popper.js/' +} + /* CSS */ gulp.task('styles', function() { @@ -95,6 +100,28 @@ gulp.task('scripts_concat_tutti', function() { }); +// Combine all needed Bootstrap JavaScript into a single file. +gulp.task('scripts_concat_bootstrap', function() { + + toUglify = [ + source.popper + 'dist/umd/popper.min.js', + source.bootstrap + 'js/dist/index.js', + source.bootstrap + 'js/dist/util.js', + source.bootstrap + 'js/dist/tooltip.js', + source.bootstrap + 'js/dist/dropdown.js', + ]; + + gulp.src(toUglify) + .pipe(gulpif(enabled.failCheck, plumber())) + .pipe(gulpif(enabled.maps, sourcemaps.init())) + .pipe(concat("bootstrap.min.js")) + .pipe(gulpif(enabled.uglify, uglify())) + .pipe(gulpif(enabled.maps, sourcemaps.write("."))) + .pipe(chmod(644)) + .pipe(gulp.dest(destination.js)) + .pipe(gulpif(argv.livereload, livereload())); +}); + // While developing, run 'gulp watch' gulp.task('watch',function() { @@ -104,7 +131,7 @@ gulp.task('watch',function() { } gulp.watch('src/styles/**/*.sass',['styles']); - gulp.watch(pillar + 'src/styles/**/*.sass',['styles']); + gulp.watch(source.pillar + 'src/styles/**/*.sass',['styles']); gulp.watch('src/templates/**/*.pug',['templates']); gulp.watch('src/scripts/*.js',['scripts']); @@ -128,4 +155,5 @@ gulp.task('cleanup', function() { // Run 'gulp' to build everything at once var tasks = []; if (enabled.cleanup) tasks.push('cleanup'); -gulp.task('default', tasks.concat(['styles', 'templates', 'scripts', 'scripts_concat_tutti'])); + +gulp.task('default', tasks.concat(['styles', 'templates', 'scripts', 'scripts_concat_tutti', 'scripts_concat_bootstrap'])); diff --git a/package.json b/package.json index f988f0b..377b536 100644 --- a/package.json +++ b/package.json @@ -23,5 +23,9 @@ "gulp-sourcemaps": "~1.6.0", "gulp-uglify": "~1.5.3", "minimist": "^1.2.0" + }, + "dependencies": { + "bootstrap": "^4.1.3", + "popper.js": "^1.14.4" } } diff --git a/src/styles/main.sass b/src/styles/main.sass index 6d2da95..7d7f19c 100644 --- a/src/styles/main.sass +++ b/src/styles/main.sass @@ -1,14 +1,93 @@ -@import ../../../pillar/src/styles/_normalize -@import ../../../pillar/src/styles/_config -@import ../../../pillar/src/styles/_utils +// Boi-tstrap +@import "../../node_modules/bootstrap/scss/functions" +@import "../../node_modules/bootstrap/scss/variables" +@import "../../node_modules/bootstrap/scss/mixins" -/* Generic styles (comments, notifications, etc) come from base.css */ +@import ../../../pillar/src/styles/config + +$primary: $color-primary + +$body-bg: $color-background +$body-color: $color-text + +$color-background-nav: #fff +$link-color: $primary + +$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" +$font-size-base: .9rem + +@import "../../node_modules/bootstrap/scss/root" +@import "../../node_modules/bootstrap/scss/reboot" + +@import "../../node_modules/bootstrap/scss/type" +@import "../../node_modules/bootstrap/scss/images" + +@import "../../node_modules/bootstrap/scss/code" +@import "../../node_modules/bootstrap/scss/grid" +@import "../../node_modules/bootstrap/scss/tables" +@import "../../node_modules/bootstrap/scss/forms" +@import "../../node_modules/bootstrap/scss/buttons" +@import "../../node_modules/bootstrap/scss/transitions" +@import "../../node_modules/bootstrap/scss/dropdown" +@import "../../node_modules/bootstrap/scss/button-group" +@import "../../node_modules/bootstrap/scss/input-group" +@import "../../node_modules/bootstrap/scss/custom-forms" + +@import "../../node_modules/bootstrap/scss/nav" +@import "../../node_modules/bootstrap/scss/navbar" + +@import "../../node_modules/bootstrap/scss/card" +@import "../../node_modules/bootstrap/scss/breadcrumb" +@import "../../node_modules/bootstrap/scss/pagination" +@import "../../node_modules/bootstrap/scss/badge" +@import "../../node_modules/bootstrap/scss/jumbotron" +@import "../../node_modules/bootstrap/scss/alert" +@import "../../node_modules/bootstrap/scss/progress" +@import "../../node_modules/bootstrap/scss/media" +@import "../../node_modules/bootstrap/scss/list-group" +@import "../../node_modules/bootstrap/scss/close" +@import "../../node_modules/bootstrap/scss/modal" +@import "../../node_modules/bootstrap/scss/tooltip" +@import "../../node_modules/bootstrap/scss/popover" +@import "../../node_modules/bootstrap/scss/carousel" + +@import "../../node_modules/bootstrap/scss/utilities" +@import "../../node_modules/bootstrap/scss/print" + +@import ../../../pillar/src/styles/normalize +@import ../../../pillar/src/styles/utils +@import ../../../pillar/src/styles/apps_base +@import ../../../pillar/src/styles/error + +@import ../../../pillar/src/styles/components/base + +@import ../../../pillar/src/styles/components/jumbotron +@import ../../../pillar/src/styles/components/alerts +@import ../../../pillar/src/styles/components/navbar +@import ../../../pillar/src/styles/components/footer +@import ../../../pillar/src/styles/components/shortcode +@import ../../../pillar/src/styles/components/statusbar +@import ../../../pillar/src/styles/components/search + +@import ../../../pillar/src/styles/components/flyout +@import ../../../pillar/src/styles/components/forms +@import ../../../pillar/src/styles/components/inputs +@import ../../../pillar/src/styles/components/buttons +@import ../../../pillar/src/styles/components/popover +@import ../../../pillar/src/styles/components/tooltip +@import ../../../pillar/src/styles/components/checkbox +@import ../../../pillar/src/styles/components/overlay +@import ../../../pillar/src/styles/components/card + +@import ../../../pillar/src/styles/comments +@import ../../../pillar/src/styles/notifications /* Blender Cloud specific styles */ @import ../../../pillar/src/styles/_project @import ../../../pillar/src/styles/_project-sharing @import ../../../pillar/src/styles/_project-dashboard @import ../../../pillar/src/styles/_user + @import _welcome @import _homepage @import _services diff --git a/src/templates/layout.pug b/src/templates/layout.pug index 96b0579..059d417 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -46,7 +46,6 @@ html(lang="en") link(href="{{ url_for('static', filename='assets/img/favicon.png') }}", rel="shortcut icon") link(href="{{ url_for('static', filename='assets/img/apple-touch-icon-precomposed.png') }}", rel="icon apple-touch-icon-precomposed", sizes="192x192") - link(href="{{ url_for('static_pillar', filename='assets/css/vendor/bootstrap.min.css') }}", rel="stylesheet") link(href="{{ url_for('static', filename='assets/google-font-roboto/roboto.css') }}", rel="stylesheet") | {% block head %}{% endblock %} @@ -318,10 +317,10 @@ html(lang="en") span.nc-date a(href="") + script(src="{{ url_for('static_cloud', filename='assets/js/bootstrap.min.js') }}") noscript link(href='//fonts.googleapis.com/css?family=Roboto:300,400', rel='stylesheet', type='text/css') - script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.bootstrap-3.3.7.min.js') }}") | {% if current_user.is_authenticated %} script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.typewatch-3.0.0.min.js') }}") From 012ba06655acce1ca6d12a804fee7b8aabaae1aa Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Mon, 27 Aug 2018 16:55:48 +0200 Subject: [PATCH 03/24] Use system fonts (see main.sass) --- src/templates/layout.pug | 5 - ...Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 | Bin 1468 -> 0 bytes ...6m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2 | Bin 1460 -> 0 bytes ...6luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2 | Bin 15228 -> 0 bytes .../CWB0XYA8bzo0kSThX0UTuA.woff2 | Bin 14600 -> 0 bytes ...8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 | Bin 11788 -> 0 bytes ...OxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2 | Bin 9740 -> 0 bytes ...tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2 | Bin 14696 -> 0 bytes ...Sg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2 | Bin 7232 -> 0 bytes ...4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2 | Bin 5120 -> 0 bytes ...OpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2 | Bin 5208 -> 0 bytes ...ShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2 | Bin 11748 -> 0 bytes ...GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 | Bin 15516 -> 0 bytes ...g_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2 | Bin 9848 -> 0 bytes static/assets/google-font-roboto/roboto.css | 112 ------------------ ...82MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 | Bin 7236 -> 0 bytes 16 files changed, 117 deletions(-) delete mode 100644 static/assets/google-font-roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 delete mode 100644 static/assets/google-font-roboto/-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2 delete mode 100644 static/assets/google-font-roboto/0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2 delete mode 100644 static/assets/google-font-roboto/CWB0XYA8bzo0kSThX0UTuA.woff2 delete mode 100644 static/assets/google-font-roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 delete mode 100644 static/assets/google-font-roboto/Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2 delete mode 100644 static/assets/google-font-roboto/Hgo13k-tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2 delete mode 100644 static/assets/google-font-roboto/I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2 delete mode 100644 static/assets/google-font-roboto/NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2 delete mode 100644 static/assets/google-font-roboto/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2 delete mode 100644 static/assets/google-font-roboto/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2 delete mode 100644 static/assets/google-font-roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 delete mode 100644 static/assets/google-font-roboto/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2 delete mode 100644 static/assets/google-font-roboto/roboto.css delete mode 100644 static/assets/google-font-roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 diff --git a/src/templates/layout.pug b/src/templates/layout.pug index 059d417..47e902a 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -46,8 +46,6 @@ html(lang="en") link(href="{{ url_for('static', filename='assets/img/favicon.png') }}", rel="shortcut icon") link(href="{{ url_for('static', filename='assets/img/apple-touch-icon-precomposed.png') }}", rel="icon apple-touch-icon-precomposed", sizes="192x192") - link(href="{{ url_for('static', filename='assets/google-font-roboto/roboto.css') }}", rel="stylesheet") - | {% block head %}{% endblock %} | {% block css %} @@ -318,9 +316,6 @@ html(lang="en") a(href="") script(src="{{ url_for('static_cloud', filename='assets/js/bootstrap.min.js') }}") - noscript - link(href='//fonts.googleapis.com/css?family=Roboto:300,400', rel='stylesheet', type='text/css') - | {% if current_user.is_authenticated %} script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.typewatch-3.0.0.min.js') }}") diff --git a/static/assets/google-font-roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 b/static/assets/google-font-roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 deleted file mode 100644 index 870072d8bb0d57bdf83b37cafd8a5479bada0180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1468 zcmV;t1w;CGPew8T0RR9100q1N5&!@I014m#00mzF0RR9100000000000000000000 z0000QCL3@ZECyfzSO`=JgFF!o3WI2aN(&GG5)=V80we<*1Rw>13I`wzf=L^E2*{4a zbbEum6oe`BBY2*F&+pehIf=_FWgvI#c0@k&^Eo$9)Gyuswf5Wliiq4IdV-1EqT-D% z{t#v&QON&(i|dtTq>RQ@tWJD*)v&oeAoq z>)x+JP$U6>N(2i*5EKvq0Rjl%(Vd~_QDfrLkkRtarW$0lx~a4p8Eq(RsY6C+fPdt` z`jt&}NCCVq8U^+aigL8BmX% z3NYu)jxkGURgl`S&XxU4BV6-j}dbb&jIDdCFrPCLIdOLft2f6 z(k4)D8Bif>WUNb)*2h=?5uGQ3o0LBg>Y~C!@_#Zq(a`LQ7cXK#n2-*y3!gPkQ+seF{Z=esdfsUf^C=(7Odw< zS*^Fy;GtlrEC&&DHn(O9kW)Ph=gu`+mKct}uJDCX2&CFlqkg)tA2c4N^ zZl=BQy`^9bt!4@ko_Q!uSN>ot!9+Q0XUM$#K?g?F4MK;|DEJm6C>&I&L<#^KfF$4o zLxD9-4D@eeLIu?Fv^M9_v* zuRmta@lW*Vqgf1m40G($x%;z~$$P7O-k&||UD`i~89isLT!5r@=Gf?6KmP7-Z#Afe zXC&9yI&JB;4=x^RuSa*f8<+K$yS49JI^4Vc&U?I#i*xTkA>ud7AAR7ha`n6Z-**}x ze&p4p`fpH;&dT=Tw-sLuF5u*i`D)+Pv?!m0MUS?kEqV;d#{B1OSXNeMQq9)np|lsoDBz_%5QPdQ6xs7 zG@6q-*S*JKm{2EBqZX~xG@2^}JjXo#toyAH>AF+Byl&+4k^LBo8U&=}YebrZE}4%t zcABpq|L1@Jfop3}mbL)|P_42%S6?}4vHIZOof-!LJoi(kD+1n^8NdBg_y7BDcc&SI zivmEv-cSs{9sf^Vae~_&!F8~W3s}K7%fDbAVV4oI*?ghc69H^4rjl7m5de~)P_3~h z?B^jyw2OhSGAoh42)S4~o$(@vB7CEF)Pf-Ld68)@F%4wyBLYl~+lqQ;~ zq@FrxdeW61^r9bw5W64lxAiC%%N4W)`UZUHrr7;+97}1SkYXw*g<~^Kl*6-uN{T6^ zj%G?}hG!Ddgc42ysf5E`{YTv~0HCyv63m%V;26<~STvNQ9A+fB!&zpaleMu1ays## zL=EDwPPy(uC5-d36U;~%>1M6Rblzk?M?+?Mbha>5XIA6F2p3~!FYaF8W67Mp)k)q) z%uO5ZVWY#mwk5G1ragan#grv1_=?XhAIuUuX%$6_CH;EZnrO0AP;YxvomzTY@PiHz zXMK66h~IVX;jmh&IbIyoVdy5b#8YWAT}<~-37Uk~co;3F!{wBjY?CSd2u(suyqGSg WH>m`}gw}X-t6NAl7nP7|1^@so$)`vF diff --git a/static/assets/google-font-roboto/-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2 b/static/assets/google-font-roboto/-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2 deleted file mode 100644 index 471b519115e3909a3310b439390676867c809719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1460 zcmV;l1xxyOPew8T0RR9100p!F5&!@I015B_00mh90RR9100000000000000000000 z0000QCL3@ZECyfzSO{1NgFF!o3WI!uTMG~X5)=V80we<*1Rw>15(gj*f;t zxrz0f1w$+`xq3?QJbmZaxz*L+qk2FmZ>VHMuKBrtJz2xar7c|<2qgpROu#bm8HtiU z8=ww*;_1_UQF*>{*#G}~Rqwr-`af9K0{;nc4BpKcqhs#lDQFEtodZLm&H-Ap0%#R= zOE*VcU-)nciU+~}Ab)h-9%v#lF$N%BFViB?GYm!(qXrpjny4(G z`A2sn00h9?DFDVp;s1z5M^;fzEhXGAi7qyHib>Rx!Uv!{zX&sRPH_QY{z^&>hOY-w zt~V(*k#ft53hNEUssa;R4byrX3m~EMc+}3zJSOCV>|I28JV`Y?c2yTHkWhF`lUtLJ z)OJC|6Y**xp~2%6RCR4GD03EcEj}}L*&1!8Ep?5k=9+TnjpQ}ajUv-CtrVG&VK_W% z>n>a_M1+KT3zb@KEsHX3TdZnhW_RBuG5Pq`4Yw&}`DHkhs>9(aVapgz#y3+k_$F1y zgpkm>AE#ZDtyVV$J7;;Zl(V{TdKt#4A+l%IYJJWO4~fybGp(|=kB4@ACBVJn`cTz1 zE%P%|dN~myVcQTy$X$dj6G;-fe0*V9a#BUl#F)pEj%flub~;_a&$W}4_{{Xo>p0X{ zdY2ZQnqiy_9gY8+vbNZ2dKuDFcNNnPys$6i$#8RR%$&?)Z&G!=&?%M@Z2>{ypb72-uBPFYwVq?OU9ey^ZLvwKi-h`k6|W{8O!H^x?OT4y+h&e z{Pbpn%s(Z6oUw7zyVFmf=_U_uDOeYB^yGOx<>3@=&$d(V_7vIQcX;vHpE?F7hN9~W zFMr+9PpkNL$?+kFDjw)P`hM)@I6n)M>W*DpsvxmGC|Kf!+zEM22fMf*1P+|l3HSa3WNp$>GO>e zO+ha-Kh-3rZ?%kj1$aF3j{^b(uBAa)h6NyiYE^1}@?UnL;o#q$8V3L#`>CWW0I$om zPydPkf8DKh`T<-N00Q>9d;o60f8u=Ftwr!WY~wtZ(PsGt%r#7^J6LEY`J)J6b0L*v zQAYrXK%usvG2%D}RYbd39V#t~i0Ve8uTjHd(w4Sy3z`Y9C1M7R6wpmQ-3-tTWdf}< z)4~7+$TTxZ2X*vOf=nO%w9-u%l%8~@2fgUWARD`H@3)Uq;*f=*hX}fsOWiR5psUo5&)O|8reV6f@C+qL!5ZoSHIgW237a7={628;9Pq0+_b9s?Gkeh*? z{=r;qZ97o|ng(BaAeT$sv`vpl364BF0IH$syrILAe0O6`(+LFuM|mJuL)-L`l=0X( OQqDJycSBS=+LL~h6Or}+ diff --git a/static/assets/google-font-roboto/0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2 b/static/assets/google-font-roboto/0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2 deleted file mode 100644 index 83e3cea7e107f6b0634cf3bb8b648adb6db33097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15228 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 C2MVA7 diff --git a/static/assets/google-font-roboto/CWB0XYA8bzo0kSThX0UTuA.woff2 b/static/assets/google-font-roboto/CWB0XYA8bzo0kSThX0UTuA.woff2 deleted file mode 100644 index e44dd20d0f93c2c4abc818f918e9b2aea842c710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14600 zcmV+jIrqkQPew8T0RR91067Q%5&!@I0EBb^063%o0RR9100000000000000000000 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 yOe2RZ2!+f5|0B|6 diff --git a/static/assets/google-font-roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 b/static/assets/google-font-roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 deleted file mode 100644 index 719f8102afe81f4e2a3db0dd1000c7db4814f88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11788 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 diff --git a/static/assets/google-font-roboto/Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2 b/static/assets/google-font-roboto/Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2 deleted file mode 100644 index 2885a7f005c15c00b61ee9f2bc92c3d4754aa943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9740 zcmV+nCiB^MPew8T0RR910459o5&!@I09ptD041sb0RR9100000000000000000000 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 diff --git a/static/assets/google-font-roboto/I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2 b/static/assets/google-font-roboto/I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2 deleted file mode 100644 index f85eac479aa06dd132cf85d93961f84887382d9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7232 zcmV-G9KYjtPew8T0RR91031L75&!@I06ORZ02|)`0RR9100000000000000000000 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 OMG;=mmpMQA0RRBD#RIMY diff --git a/static/assets/google-font-roboto/NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2 b/static/assets/google-font-roboto/NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2 deleted file mode 100644 index 83bd25ad32c450dfbbf824daee0cb6e9e787815a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 zcmV+b6#wgYPew8T0RR9102BZK5&!@I05J>z027}80RR9100000000000000000000 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 S|6s4e%mYW?hX@AShX?@IDg7t_ diff --git a/static/assets/google-font-roboto/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2 b/static/assets/google-font-roboto/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2 deleted file mode 100644 index 397bac3ecd693135b5545ff111864b15d431de72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11748 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 Gxg-F{H^RjL diff --git a/static/assets/google-font-roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 b/static/assets/google-font-roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 deleted file mode 100644 index e7d54f24fe95f4f0f0ec7001692ccc0fdb806a03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15516 zcmV;NJY&OmPew8T0RR9106d%k5&!@I0FN9106aJV0RR9100000000000000000000 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 diff --git a/static/assets/google-font-roboto/roboto.css b/static/assets/google-font-roboto/roboto.css deleted file mode 100644 index 56bf7b9..0000000 --- a/static/assets/google-font-roboto/roboto.css +++ /dev/null @@ -1,112 +0,0 @@ -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(Hgo13k-tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(CWB0XYA8bzo0kSThX0UTuA.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; -} diff --git a/static/assets/google-font-roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 b/static/assets/google-font-roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 deleted file mode 100644 index e1b700ccc1c7bfc5b1fce9755cb9d18d23cd2852..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7236 zcmV-K9J}LpPew8T0RR91031XB5&!@I06N3~02|~00RR9100000000000000000000 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 SbV3K`Iuv(^Xr}c Date: Mon, 27 Aug 2018 16:56:38 +0200 Subject: [PATCH 04/24] Cleanup styling. Use bootstrap classes instead --- src/styles/_homepage.sass | 29 +----- src/styles/_welcome.sass | 4 +- src/styles/project-landing.sass | 2 +- src/templates/homepage.pug | 14 +-- src/templates/layout.pug | 161 +++++++++++++++++++------------- 5 files changed, 110 insertions(+), 100 deletions(-) diff --git a/src/styles/_homepage.sass b/src/styles/_homepage.sass index ece9b66..9f202f4 100644 --- a/src/styles/_homepage.sass +++ b/src/styles/_homepage.sass @@ -33,7 +33,7 @@ section.dashboard-main, section.dashboard-secondary - h4 + .section-title padding-bottom: 5px margin-bottom: 20px position: relative @@ -139,11 +139,8 @@ border-bottom: thin solid $color-background-dark ul.activity-stream__list - list-style: none - margin: 0 - padding: 0 - $activity-stream-thumbnail-size: 110px + > li position: relative display: flex @@ -180,17 +177,6 @@ transition: font-size 100ms ease-in-out &.comment - .activity-stream__list-thumbnail - background: transparent - color: $node-type-comment - font-size: 1.2em - box-shadow: none - - i - +position-center-translate - left: 22px - top: 19px - .activity-stream__list-details padding: 0 .title @@ -300,7 +286,6 @@ overflow: hidden position: relative max-width: 100% - margin-right: auto padding: 10px 0 +media-xs @@ -310,18 +295,14 @@ +ribbon right: -47px top: 5px - font: - size: 12px - weight: 500 + font-size: 12px span padding: 1px 50px .title - display: inline-block padding: 0 10px color: $color-text-dark - font-size: 1.1em span @include badge(hsl(hue($color-success), 60%, 45%), 3px) @@ -653,10 +634,6 @@ section.announcement .title padding-bottom: 10px - font: - family: $font-body - size: 1.4em - weight: 300 +media-xs font-size: 1.4em diff --git a/src/styles/_welcome.sass b/src/styles/_welcome.sass index 99f92c5..8b317f2 100644 --- a/src/styles/_welcome.sass +++ b/src/styles/_welcome.sass @@ -334,9 +334,7 @@ section.pricing +button($color-primary, 3px, true) h3 - font: - size: 1.8em - family: $font-body + font-size: 1.8em padding-bottom: 0 margin: 25px 0 0 10px diff --git a/src/styles/project-landing.sass b/src/styles/project-landing.sass index 7eaa671..c1d8998 100644 --- a/src/styles/project-landing.sass +++ b/src/styles/project-landing.sass @@ -57,11 +57,11 @@ nav.navbar .node-details-container max-width: 620px - font-family: $font-body font-size: 1.3em line-height: 1.5em margin: 0 auto 40px auto padding-bottom: 40px + +media-xs padding-left: 10px padding-right: 10px diff --git a/src/templates/homepage.pug b/src/templates/homepage.pug index e9f7274..50691c7 100644 --- a/src/templates/homepage.pug +++ b/src/templates/homepage.pug @@ -51,7 +51,7 @@ meta(name="twitter:image", content="{% if main_project.picture_header %}{{ main_ | {{ navigation_tabs(title) }} section.dashboard-in-production - h4 In Production + h6.section-title In Production span.section-lead. Check out these projects currently in production! @@ -68,9 +68,9 @@ meta(name="twitter:image", content="{% if main_project.picture_header %}{{ main_ section.stream - h4 Latest Assets + h6.section-title Latest Assets - ul.activity-stream__list + ul.activity-stream__list.list-unstyled | {% for n in activity_stream %} li( class="{{ n.node_type }} {{ n.properties.content_type }} {% if n.picture %}with-picture{% endif %}", @@ -135,11 +135,11 @@ meta(name="twitter:image", content="{% if main_project.picture_header %}{{ main_ section.random-asset - h4 + h6.section-title a(href="/search") Explore the Cloud span.section-lead Random selection of the best assets & tutorials - ul.random-asset__list + ul.random-asset__list.list-unstyled | {% for n in random_featured %} | {% if n.picture and loop.first %} li.random-asset__list-item.project @@ -220,9 +220,9 @@ meta(name="twitter:image", content="{% if main_project.picture_header %}{{ main_ section.comments - h4 Latest Comments + h6.section-title Latest Comments - ul + ul.list-unstyled | {% if latest_comments %} | {% for n in latest_comments %} li( diff --git a/src/templates/layout.pug b/src/templates/layout.pug index 47e902a..a886b1d 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -3,7 +3,7 @@ html(lang="en") head meta(charset="utf-8") title {% if self.page_title() %}{% block page_title %}{% endblock %} — {% endif %}Blender Cloud - meta(name="viewport", content="width=device-width, initial-scale=1.0") + meta(name="viewport", content="width=device-width, initial-scale=1, shrink-to-fit=no") meta(name="description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.") meta(name="author", content="Blender Institute") meta(name="theme-color", content="#3e92aa") @@ -50,7 +50,6 @@ html(lang="en") | {% block css %} link(href="{{ url_for('static_pillar', filename='assets/css/font-pillar.css') }}", rel="stylesheet") - link(href="{{ url_for('static_pillar', filename='assets/css/base.css') }}", rel="stylesheet") | {% if title == 'blog' %} link(href="{{ url_for('static_pillar', filename='assets/css/blog.css') }}", rel="stylesheet") | {% else %} @@ -58,14 +57,11 @@ html(lang="en") | {% endif %} | {% endblock css %} - - | {% if not title %}{% set title="default" %}{% endif %} - + | {% if not title %}{% set title="default" %}{% endif %} body(class="{{ title }}") .container-page | {% with messages = get_flashed_messages(with_categories=True) %} - | {% if messages %} - + | {% if messages %} | {% for (category, message) in messages %} .alert(role="alert", class="alert-{{ category }}") i.alert-icon(class="{{ category }}") @@ -73,21 +69,25 @@ html(lang="en") button.close(type="button", data-dismiss="alert") i.pi-cancel | {% endfor %} - - | {% endif %} + | {% endif %} | {% endwith %} - nav.navbar + nav.navbar.navbar-expand-md .navbar-container - header.navbar-header - button.navbar-toggle(data-target=".navbar-collapse", data-toggle="collapse", type="button") - span.sr-only Toggle navigation + //- header.navbar-header + a.navbar-brand( + href="{{ url_for('main.homepage') }}", + title="Blender Cloud") + span.app-logo + i.pi-blender-cloud-logo + + button.navbar-toggler.text-light( + data-target=".navbar-collapse", + data-toggle="collapse", + type="button") + span.sr-only Toggle navigation + span.navbar-toggler-icon.d-flex.align-items-center i.pi-menu - a.navbar-brand( - href="{{ url_for('main.homepage') }}", - title="Blender Cloud") - span.app-logo - i.pi-blender-cloud | {% block navigation_search %} .search-input @@ -97,8 +97,8 @@ html(lang="en") i.search-icon.pi-search | {% endblock navigation_search %} - nav.collapse.navbar-collapse - ul.nav.navbar-nav.navbar-right + .collapse.navbar-collapse + ul.nav.navbar-nav.ml-auto | {% if node and node.properties and node.properties.category %} | {% set category = node.properties.category %} | {% else %} @@ -234,40 +234,95 @@ html(lang="en") .container .row .col-md-4.col-xs-6 - .footer-support - h4 Support & Feedback - p. - Let us know what you think or if you have any issues - just write to cloudsupport at blender dot org - - .col-md-2.col-xs-6 - ul.footer-social - li - a(href="https://www.facebook.com/BlenderCloudOfficial/", - title="Follow us on Facebook") - i.pi-social-facebook - li - a(href="https://twitter.com/Blender_Cloud", - title="Follow us on Twitter") - i.pi-social-twitter - - .col-md-2.col-xs-6 h4 a(href="{{ url_for('main.homepage') }}") - | Blender Cloud - ul.footer-links + i.pi-blender-cloud-logo + + p.pl-2. + Blender Cloud is the creative hub for your projects, + powered by Free and Open Source Software. + + h5.d-flex + a.px-2(href="https://twitter.com/Blender_Cloud", + title="Follow us on Twitter") + i.pi-social-youtube + + a.px-2(href="https://twitter.com/Blender_Cloud", + title="Follow us on Twitter") + i.pi-social-twitter + + a.px-2(href="https://www.facebook.com/BlenderCloudOfficial/", + title="Follow us on Facebook") + i.pi-social-facebook + + .col-md-2.col-xs-6 + h7.font-weight-bold + | TRAINING + + ul.list-unstyled + li + a(href="{{ url_for('cloud.courses') }}") + | Courses + li + a(href="{{ url_for('cloud.workshops') }}") + | Workshops + li + a(href="{{ url_for('projects.view', project_url='gallery') }}") + | Art Gallery + + .col-md-2.col-xs-6 + h7.font-weight-bold + | LIBRARIES + + ul.list-unstyled li a(href="{{ url_for('main.main_blog') }}", title="Blender Cloud Blog") - | Blog + | HDRIs li a(href="{{ url_for('cloud.services') }}", title="Blender Cloud Services") - | Services + | Textures li a(href="{{ url_for('cloud.about') }}", title="About Blender Cloud") - | About + | Characters + + .col-md-2.col-xs-6 + h7.font-weight-bold + a(href="{{ url_for('cloud.services') }}") + | SERVICES + + ul.list-unstyled + li + a(href="{{ url_for('main.main_blog') }}", + title="Blender Cloud Blog") + | Add-on + li + a(href="{{ url_for('main.main_blog') }}", + title="Blender Cloud Blog") + | Blender Sync + li + a(href="{{ url_for('cloud.services') }}", + title="Blender Cloud Services") + | Attract + li + a(href="{{ url_for('cloud.about') }}", + title="About Blender Cloud") + | Flamenco + li + a(href="{{ url_for('cloud.about') }}", + title="About Blender Cloud") + | Image Sharing + + .col-md-2.col-xs-6 + h7.font-weight-bold + | BLENDER + ul.list-unstyled + li + a(href="{{ url_for('main.main_blog') }}", + title="Blender Cloud Blog") + | blender.org li a(href="{{ url_for('cloud.terms_and_conditions') }}", title="Terms and Conditions") @@ -276,26 +331,6 @@ html(lang="en") a(href="{{ url_for('cloud.privacy') }}", title="Privacy") | Privacy - - .col-md-2.col-xs-6 - h4 - a(href="https://www.blender.org", - title="Blender official Website") - | Blender - ul.footer-links - li - a(href="https://www.blender.org", - title="Blender official Website") - | Blender.org - li - a(href="https://store.blender.org/", - title="The official Blender Store") - | Blender Store - - .col-md-2.col-xs-6.special - | With the support of the
MEDIA Programme of the European Union

- img(alt="MEDIA Programme of the European Union", - src="https://gooseberry.blender.org/wp-content/uploads/2014/01/media_programme.png") | {% endblock footer_navigation %} | {% block footer %} From f48a4883aebe6519086949952325856d90eb31ed Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Mon, 27 Aug 2018 16:58:01 +0200 Subject: [PATCH 05/24] Index collection redesign --- src/templates/projects_index_collection.pug | 89 +++++++++++---------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/src/templates/projects_index_collection.pug b/src/templates/projects_index_collection.pug index d8a829c..ab33296 100644 --- a/src/templates/projects_index_collection.pug +++ b/src/templates/projects_index_collection.pug @@ -9,13 +9,13 @@ | {% if title == 'courses' %} | {% set page_title = 'Courses' %} | {% set page_description = 'Production quality training by 3D professionals' %} -| {% set page_header_image = url_for('static', filename='assets/img/backgrounds/background_caminandes_3_03.jpg') %} +| {% set page_header_image = url_for('static', filename='assets/img/backgrounds/background_agent327_04.jpg') %} | {% set page_header_text = 'Character modeling, 3D printing, VFX, rigging and more.' %} | {% elif title == 'workshops' %} | {% set page_title = 'Workshops' %} | {% set page_description = 'Production quality training by 3D professionals' %} -| {% set page_header_image = url_for('static', filename='assets/img/backgrounds/background_caminandes_3_03.jpg') %} +| {% set page_header_image = url_for('static', filename='assets/img/backgrounds/background_agent327_04.jpg') %} | {% set page_header_text = 'Enter the artist workshop and learn by example.' %} | {% endif %} @@ -39,58 +39,63 @@ meta(name="twitter:image", content="{{ page_header_image }}") | {% endblock %} | {% block body %} +.jumbotron.jumbotron-overlay.text-white(style="background-image: url({{ page_header_image }})") + .container + .row + .col-md-8 + .display-4.text-uppercase.font-weight-bold {{ page_title }} + .lead {{ page_header_text }} -#project-container +.container.pb-5 + ul.nav.nav-secondary.justify-content-center.mb-5 + li.nav-item.nav-title + | {% if title in ['courses', 'workshops'] %}Training{% else %}Open Projects{% endif %} - #node_index-container - #node_index-header.collection - img.background-header(src="{{ page_header_image }}") - #node_index-collection-info - .node_index-collection-name - span {{ page_title }} - .node_index-collection-description - span. - {{ page_header_text }} + li.nav-item + a.nav-link( + class="{% if title == 'workshops' %}active{% endif %}", + href="{{ url_for('cloud.workshops') }}") Workshops + li.nav-item + a.nav-link( + class="{% if title == 'courses' %}active{% endif %}", + href="{{ url_for('cloud.courses') }}") Courses + li.nav-item + a.nav-link( + class="{% if title == 'gallery' %}active{% endif %}", + href="{{ url_for('projects.view', project_url='gallery') }}") Art Gallery - .node_index-collection + .card-deck.card-padless.card-3-columns + | {% for project in projects %} + | {% if (project.status == 'published') or (project.status == 'pending' and current_user.is_authenticated) and project._id != config.MAIN_PROJECT_ID %} + .card.card-fade.cursor-pointer.mb-4.js-project-go( + data-url="{{ url_for('projects.view', project_url=project.url) }}", + tabindex="{{ loop.index }}") + | {% if project.picture_header %} + a(href="{{ url_for('projects.view', project_url=project.url) }}") + img.card-img-top.rounded-0( + src="{{ project.picture_header.thumbnail('l', api=api) }}", alt="{{ project.name }}") + | {% endif %} - | {% for project in projects %} - | {% if (project.status == 'published') or (project.status == 'pending' and current_user.is_authenticated) and project._id != config.MAIN_PROJECT_ID %} - - .node_index-collection-card.project( - data-url="{{ url_for('projects.view', project_url=project.url) }}", - tabindex="{{ loop.index }}") - | {% if project.picture_header %} - a.item-header( - href="{{ url_for('projects.view', project_url=project.url) }}") - img(src="{{ project.picture_header.thumbnail('l', api=api) }}") - | {% endif %} - - .item-info - a.item-title( - href="{{ url_for('projects.view', project_url=project.url) }}") - | {{project.name}} - | {% if project.status == 'pending' and current_user.is_authenticated and current_user.has_role('admin') %} - small (pending) - | {% endif %} - - | {% if project.summary %} - p.item-description - | {{project.summary|safe}} + .card-body + h5.card-title + | {{ project.name }} + | {% if project.status == 'pending' and current_user.is_authenticated and current_user.has_role('admin') %} + small (pending) | {% endif %} - a.learn-more LEARN MORE - - | {% endif %} - | {% endfor %} - + | {% if project.summary %} + p.card-text + | {{project.summary|safe}} + | {% endif %} + | {% endif %} + | {% endfor %} | {% endblock %} | {% block footer_scripts %} script. - $('.node_index-collection-card.project').on('click', function(e){ + $('.js-project-go').on('click', function(e){ e.preventDefault(); window.location.href = $(this).data('url'); }); From 169a7f51f0544584a1fa02e1925f6eb2621dd109 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Tue, 28 Aug 2018 15:55:32 +0200 Subject: [PATCH 06/24] navbar-container: cleanup --- src/styles/_welcome.sass | 3 - src/styles/project-landing.sass | 5 - src/templates/layout.pug | 242 ++++++++++++++++---------------- 3 files changed, 120 insertions(+), 130 deletions(-) diff --git a/src/styles/_welcome.sass b/src/styles/_welcome.sass index 8b317f2..03862d1 100644 --- a/src/styles/_welcome.sass +++ b/src/styles/_welcome.sass @@ -10,9 +10,6 @@ li a.navbar-item color: $color-text - .navbar-container - +container-behavior - .navbar-toggle border: 2px solid $color-text-dark-primary color: $color-text diff --git a/src/styles/project-landing.sass b/src/styles/project-landing.sass index c1d8998..879cd02 100644 --- a/src/styles/project-landing.sass +++ b/src/styles/project-landing.sass @@ -39,8 +39,6 @@ nav.navbar &:hover color: black background-color: white - .navbar-container - +container-behavior .navbar-toggle border: none @@ -117,9 +115,6 @@ a.btn max-width: 620px margin: 0 auto - .navbar-container - border-bottom: 1px solid #dddddd - .navbar-collapse padding-left: 0 diff --git a/src/templates/layout.pug b/src/templates/layout.pug index a886b1d..7986da4 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -72,151 +72,149 @@ html(lang="en") | {% endif %} | {% endwith %} - nav.navbar.navbar-expand-md - .navbar-container - //- header.navbar-header - a.navbar-brand( - href="{{ url_for('main.homepage') }}", - title="Blender Cloud") - span.app-logo - i.pi-blender-cloud-logo + nav.navbar.navbar-expand-md.fixed-top + a.navbar-brand( + href="{{ url_for('main.homepage') }}", + title="Blender Cloud") + span.app-logo + i.pi-blender-cloud-logo - button.navbar-toggler.text-light( - data-target=".navbar-collapse", - data-toggle="collapse", - type="button") - span.sr-only Toggle navigation - span.navbar-toggler-icon.d-flex.align-items-center - i.pi-menu + button.navbar-toggler.text-light( + data-target=".navbar-collapse", + data-toggle="collapse", + type="button") + span.sr-only Toggle navigation + span.navbar-toggler-icon.d-flex.align-items-center + i.pi-menu - | {% block navigation_search %} - .search-input - input#cloud-search( - type="text", - placeholder="Search assets, tutorials...") - i.search-icon.pi-search - | {% endblock navigation_search %} + | {% block navigation_search %} + .search-input + input#cloud-search( + type="text", + placeholder="Search assets, tutorials...") + i.search-icon.pi-search + | {% endblock navigation_search %} - .collapse.navbar-collapse - ul.nav.navbar-nav.ml-auto - | {% if node and node.properties and node.properties.category %} - | {% set category = node.properties.category %} - | {% else %} - | {% set category = title %} - | {% endif %} + .collapse.navbar-collapse + ul.navbar-nav.ml-auto + | {% if node and node.properties and node.properties.category %} + | {% set category = node.properties.category %} + | {% else %} + | {% set category = title %} + | {% endif %} - | {% block navigation_sections %} - li - a.navbar-item( - href="{{ url_for('main.main_blog') }}", - title="Blender Cloud Blog", - data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'blog' %}active{% endif %}") - span Blog + | {% block navigation_sections %} + li + a.navbar-item( + href="{{ url_for('main.main_blog') }}", + title="Blender Cloud Blog", + data-toggle="tooltip", + data-placement="bottom", + class="{% if category == 'blog' %}active{% endif %}") + span Blog - li(class="dropdown libraries") - a.navbar-item.dropdown-toggle( - href="", - data-toggle="dropdown", - title="Libraries") - span Libraries - i.pi-angle-down - - ul.dropdown-menu - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='hdri') }}", - title="HDRI Library", - data-toggle="tooltip", - data-placement="left") - i.pi-globe - | HDRI - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='textures') }}", - title="Textures Library", - data-toggle="tooltip", - data-placement="left") - i.pi-folder-texture - | Textures - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='characters') }}", - title="Character Library", - data-toggle="tooltip", - data-placement="left") - i.pi-character - | Characters - - - li(class="dropdown libraries") - a.navbar-item.dropdown-toggle( + li.dropdown + a.navbar-item.dropdown-toggle( href="", data-toggle="dropdown", - title="Training") - span Training - i.pi-angle-down + title="Libraries") + span Libraries + i.pi-angle-down - ul.dropdown-menu - li - a.navbar-item( - href="{{ url_for('cloud.courses') }}", - title="Courses", + ul.dropdown-menu.p-0 + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='hdri') }}", + title="HDRI Library", data-toggle="tooltip", data-placement="left") - i.pi-graduation-cap - | Courses - li - a.navbar-item( - href="{{ url_for('cloud.workshops') }}", - title="Workshops", + i.pi-globe + | HDRI + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='textures') }}", + title="Textures Library", data-toggle="tooltip", data-placement="left") - i.pi-lightbulb - | Workshops - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='gallery') }}", - title="Curated artwork collection", + i.pi-folder-texture + | Textures + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='characters') }}", + title="Character Library", data-toggle="tooltip", data-placement="left") - i.pi-image - | Art Gallery + i.pi-character + | Characters - li - a.navbar-item( - href="{{ url_for('cloud.open_projects') }}", - title="Browse all the Open Projects", + + li(class="dropdown libraries") + a.navbar-item.dropdown-toggle( + href="", + data-toggle="dropdown", + title="Training") + span Training + i.pi-angle-down + + ul.dropdown-menu + li + a.navbar-item( + href="{{ url_for('cloud.courses') }}", + title="Courses", data-toggle="tooltip", - data-placement="bottom", - class="{% if category in ['open-projects', 'film'] %}active{% endif %}") - span Open Projects - li - a.navbar-item( - href="{{ url_for('cloud.services') }}", - title="Blender Cloud Services", + data-placement="left") + i.pi-graduation-cap + | Courses + li + a.navbar-item( + href="{{ url_for('cloud.workshops') }}", + title="Workshops", data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'services' %}active{% endif %}") - span Services - | {% endblock navigation_sections %} + data-placement="left") + i.pi-lightbulb + | Workshops + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='gallery') }}", + title="Curated artwork collection", + data-toggle="tooltip", + data-placement="left") + i.pi-image + | Art Gallery + + li + a.navbar-item( + href="{{ url_for('cloud.open_projects') }}", + title="Browse all the Open Projects", + data-toggle="tooltip", + data-placement="bottom", + class="{% if category in ['open-projects', 'film'] %}active{% endif %}") + span Open Projects + li + a.navbar-item( + href="{{ url_for('cloud.services') }}", + title="Blender Cloud Services", + data-toggle="tooltip", + data-placement="bottom", + class="{% if category == 'services' %}active{% endif %}") + span Services + | {% endblock navigation_sections %} - | {% if current_user.is_anonymous %} - li - a.navbar-item( - href="https://store.blender.org/product/membership/", - title="Sign up") Sign up - | {% endif %} + | {% if current_user.is_anonymous %} + li + a.navbar-item( + href="https://store.blender.org/product/membership/", + title="Sign up") Sign up + | {% endif %} - | {% block navigation_user %} + | {% block navigation_user %} - | {% include 'menus/notifications.html' %} - | {% include 'menus/user.html' %} + | {% include 'menus/notifications.html' %} + | {% include 'menus/user.html' %} - | {% endblock navigation_user %} + | {% endblock navigation_user %} .page-content From 68d09dc886c2a24b14ebe647690000518ba42b65 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Tue, 28 Aug 2018 15:56:06 +0200 Subject: [PATCH 07/24] CSS: cleanup --- src/styles/main.sass | 75 ++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/styles/main.sass b/src/styles/main.sass index 7d7f19c..ea4bf9f 100644 --- a/src/styles/main.sass +++ b/src/styles/main.sass @@ -1,9 +1,11 @@ -// Boi-tstrap +// Bootstrap variables and utilities. @import "../../node_modules/bootstrap/scss/functions" @import "../../node_modules/bootstrap/scss/variables" @import "../../node_modules/bootstrap/scss/mixins" -@import ../../../pillar/src/styles/config +// Pillar variables and utilities. +@import "../../../pillar/src/styles/config" +@import "../../../pillar/src/styles/utils" $primary: $color-primary @@ -16,6 +18,10 @@ $link-color: $primary $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" $font-size-base: .9rem +$dropdown-border-width: 0 +$dropdown-box-shadow: 0 10px 25px rgba($black, .1) + +// Bootstrap components. @import "../../node_modules/bootstrap/scss/root" @import "../../node_modules/bootstrap/scss/reboot" @@ -54,52 +60,53 @@ $font-size-base: .9rem @import "../../node_modules/bootstrap/scss/utilities" @import "../../node_modules/bootstrap/scss/print" -@import ../../../pillar/src/styles/normalize -@import ../../../pillar/src/styles/utils -@import ../../../pillar/src/styles/apps_base -@import ../../../pillar/src/styles/error -@import ../../../pillar/src/styles/components/base +// Pillar components. +@import "../../../pillar/src/styles/apps_base" +@import "../../../pillar/src/styles/error" -@import ../../../pillar/src/styles/components/jumbotron -@import ../../../pillar/src/styles/components/alerts -@import ../../../pillar/src/styles/components/navbar -@import ../../../pillar/src/styles/components/footer -@import ../../../pillar/src/styles/components/shortcode -@import ../../../pillar/src/styles/components/statusbar -@import ../../../pillar/src/styles/components/search +@import "../../../pillar/src/styles/components/base" -@import ../../../pillar/src/styles/components/flyout -@import ../../../pillar/src/styles/components/forms -@import ../../../pillar/src/styles/components/inputs -@import ../../../pillar/src/styles/components/buttons -@import ../../../pillar/src/styles/components/popover -@import ../../../pillar/src/styles/components/tooltip -@import ../../../pillar/src/styles/components/checkbox -@import ../../../pillar/src/styles/components/overlay -@import ../../../pillar/src/styles/components/card +@import "../../../pillar/src/styles/components/jumbotron" +@import "../../../pillar/src/styles/components/alerts" +@import "../../../pillar/src/styles/components/navbar" +@import "../../../pillar/src/styles/components/dropdown" +@import "../../../pillar/src/styles/components/footer" +@import "../../../pillar/src/styles/components/shortcode" +@import "../../../pillar/src/styles/components/statusbar" +@import "../../../pillar/src/styles/components/search" -@import ../../../pillar/src/styles/comments -@import ../../../pillar/src/styles/notifications +@import "../../../pillar/src/styles/components/flyout" +@import "../../../pillar/src/styles/components/forms" +@import "../../../pillar/src/styles/components/inputs" +@import "../../../pillar/src/styles/components/buttons" +@import "../../../pillar/src/styles/components/popover" +@import "../../../pillar/src/styles/components/tooltip" +@import "../../../pillar/src/styles/components/checkbox" +@import "../../../pillar/src/styles/components/overlay" +@import "../../../pillar/src/styles/components/card" + +@import "../../../pillar/src/styles/comments" +@import "../../../pillar/src/styles/notifications" /* Blender Cloud specific styles */ -@import ../../../pillar/src/styles/_project -@import ../../../pillar/src/styles/_project-sharing -@import ../../../pillar/src/styles/_project-dashboard -@import ../../../pillar/src/styles/_user +@import "../../../pillar/src/styles/_project" +@import "../../../pillar/src/styles/_project-sharing" +@import "../../../pillar/src/styles/_project-dashboard" +@import "../../../pillar/src/styles/_user" @import _welcome @import _homepage @import _services @import _about -@import ../../../pillar/src/styles/_search -@import ../../../pillar/src/styles/_organizations +@import "../../../pillar/src/styles/_search" +@import "../../../pillar/src/styles/_organizations" /* services, about, etc */ -@import ../../../pillar/src/styles/_pages +@import "../../../pillar/src/styles/_pages" /* plugins are included here, don't include in base unless needed by other pillar apps */ -@import ../../../pillar/src/styles/plugins/_jstree -@import ../../../pillar/src/styles/plugins/_js_select2 +@import "../../../pillar/src/styles/plugins/_jstree" +@import "../../../pillar/src/styles/plugins/_js_select2" /* CSS for pillar-font comes from fontello.com using static/assets/font/config.json */ From fcf715b5b1d3d87eb248f908e01e1715040b5a5a Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:52:40 +0200 Subject: [PATCH 08/24] Services page: move to bootstrap 4 --- src/templates/services.pug | 298 ++++++++++++++++++------------------- 1 file changed, 146 insertions(+), 152 deletions(-) diff --git a/src/templates/services.pug b/src/templates/services.pug index 18c94e1..f0a03f1 100644 --- a/src/templates/services.pug +++ b/src/templates/services.pug @@ -20,204 +20,198 @@ meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/ba | {% endblock %} | {% block body %} -#page-container - #page-header(style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/services_projects.jpg')}})") - .container - .page-title - | Blender Cloud Services - .page-title-summary - span.text-background - p. - Blender Cloud is the creative hub for your projects, powered by Free and Open Source software. +.jumbotron.jumbotron-overlay.text-white.mb-1(style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/services_projects.jpg')}})") + .container + .row + .col-md-8 + .display-4.text-uppercase.font-weight-bold + | Services + .lead. + On Blender Cloud you can create and share personal projects, access our texture and HDRI + library (or create your own), keep track of your production, manage your renders and much more! - p. - On Blender Cloud you can create and share personal projects, access our texture and HDRI - library (or create your own), keep track of your production, manage your renders and much more! +- var addon_text = 'Available through the
Blender Cloud add-on' +section#blender-cloud-add-on.page-card + .page-card-side + h2.page-card-title + | Blender Cloud add-on + .page-card-summary + p. + The Blender Cloud add-on provides access to most of our services directly within Blender. + p. + Use the add-on to share images online, submit renders to Flamenco or browse textures and HDRI libraries! - .navbar-backdrop-overlay + hr - - var addon_text = 'Available through the Blender Cloud add-on' + small Blender Cloud add-on requires Blender 2.78 or newer - #page-content + a.btn-success( + href="https://cloud.blender.org/r/downloads/blender_cloud-latest-addon.zip") + i.pi-download + | Download add-on  v {{ config.BLENDER_CLOUD_ADDON_VERSION }} - section#blender-cloud-add-on.page-card - .page-card-side - h2.page-card-title - | Blender Cloud add-on - .page-card-summary - p. - The Blender Cloud add-on provides access to most of our services directly within Blender. - p. - Use the add-on to share images online, submit renders to Flamenco or browse textures and HDRI libraries! + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/blender_cloud_addon_thumbnail.png')}}") - hr +section#blender-sync.page-card.right + .page-card-side + h2.page-card-title Blender Sync + .page-card-summary + | Save your settings once. Use them anywhere. + | Carry your Blender configuration with you, + | use our add-on to sync your keymaps and preferences. + hr + small Blender Sync is free for everyone! No subscription required. + small This add-on requires Blender 2.78 or newer. - small Blender Cloud add-on requires Blender 2.78 or newer - - a.page-card-cta.download( - href="https://cloud.blender.org/r/downloads/blender_cloud-latest-addon.zip") - i.pi-download - | Download add-on  v {{ config.BLENDER_CLOUD_ADDON_VERSION }} - - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/blender_cloud_addon_thumbnail.png')}}") - - section#blender-sync.page-card.right - .page-card-side - h2.page-card-title Blender Sync - .page-card-summary - | Save your settings once. Use them anywhere. - | Carry your Blender configuration with you, - | use our add-on to sync your keymaps and preferences. - hr - small Blender Sync is free for everyone! No subscription required. - small This add-on requires Blender 2.78 or newer. - - .tip !{addon_text} + .tip !{addon_text} - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-blender-sync") - | Learn More + a.page-card-cta( + href="https://cloud.blender.org/blog/introducing-blender-sync") + | Learn More - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/sync_thumbnail.jpg')}}") + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/sync_thumbnail.jpg')}}") - section#texture-browser.page-card.right - .page-card-side - h2.page-card-title Texture & HDRI Browser - .page-card-summary - p. - Access the Blender Cloud Textures - library from within Blender using our exclusive add-on. - Create, manage and share your own texture libraries! +section#texture-browser.page-card.right + .page-card-side + h2.page-card-title Texture & HDRI Browser + .page-card-summary + p. + Access the Blender Cloud Textures + library from within Blender using our exclusive add-on. + Create, manage and share your own texture libraries! - .tip !{addon_text} + .tip !{addon_text} - a.page-card-cta.js-watch-video.download( - href="https://www.youtube.com/watch?v=-srXYv2Osjw", - data-youtube-id="-srXYv2Osjw") - i.pi-play - | Watch Video + a.btn-success.js-watch-video( + href="https://www.youtube.com/watch?v=-srXYv2Osjw", + data-youtube-id="-srXYv2Osjw") + i.pi-play + | Watch Video - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/tex_library_thumbnail.jpg')}}") + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/tex_library_thumbnail.jpg')}}") - section#image-sharing.page-card.right - .page-card-side - h2.page-card-title Image Sharing - .page-card-summary - | Got a nice render, a Blender oddity, a cool screenshot? - | Share it instantly from within Blender to the Cloud, to the world! +section#image-sharing.page-card.right + .page-card-side + h2.page-card-title Image Sharing + .page-card-summary + | Got a nice render, a Blender oddity, a cool screenshot? + | Share it instantly from within Blender to the Cloud, to the world! - .tip !{addon_text} + .tip !{addon_text} - a.page-card-cta.download.js-watch-video( - href="https://www.youtube.com/watch?v=yvtqeMBOAyk", - data-youtube-id="yvtqeMBOAyk") - i.pi-play - | Watch Video + a.btn-success.js-watch-video( + href="https://www.youtube.com/watch?v=yvtqeMBOAyk", + data-youtube-id="yvtqeMBOAyk") + i.pi-play + | Watch Video - a.page-card-cta.outline( - href="https://cloud.blender.org/blog/introducing-image-sharing") - | Learn More + a.page-card-cta.outline( + href="https://cloud.blender.org/blog/introducing-image-sharing") + | Learn More - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/image_sharing_thumbnail.jpg')}}") + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/image_sharing_thumbnail.jpg')}}") - section#projects.page-card.right - .page-card-side - h2.page-card-title Private Projects - .page-card-summary. - Create and manage your own personal projects. - Upload assets and collaborate with other Blender Cloud members. +section#projects.page-card.right + .page-card-side + h2.page-card-title Private Projects + .page-card-summary. + Create and manage your own personal projects. + Upload assets and collaborate with other Blender Cloud members. - a.page-card-cta( - href="https://cloud.blender.org/blog/introducing-private-projects") - | Learn More + a.page-card-cta( + href="https://cloud.blender.org/blog/introducing-private-projects") + | Learn More - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/projects_thumbnail.jpg')}}") + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/projects_thumbnail.jpg')}}") - section#attract.page-card.right - .page-card-side - h2.page-card-title - | Attract - .page-card-summary. - Production-management software for your film, game, or commercial projects. +section#attract.page-card.right + .page-card-side + h2.page-card-title + | Attract + .page-card-summary. + Production-management software for your film, game, or commercial projects. - a.page-card-cta.download.js-watch-video( - href="https://www.youtube.com/watch?v=b9x1rlyyt_o", - data-youtube-id="b9x1rlyyt_o") - i.pi-play - | Watch Video + a.btn-success.js-watch-video( + href="https://www.youtube.com/watch?v=b9x1rlyyt_o", + data-youtube-id="b9x1rlyyt_o") + i.pi-play + | Watch Video - a.page-card-cta( - href="https://cloud.blender.org/blog/attract-and-flamenco-public-beta", - title="Learn more about Attract") - | Learn More + a.page-card-cta( + href="https://cloud.blender.org/blog/attract-and-flamenco-public-beta", + title="Learn more about Attract") + | Learn More - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/attract_thumbnail.jpg')}}") + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/attract_thumbnail.jpg')}}") - section#flamenco.page-card.right - .page-card-side - h2.page-card-title - | Flamenco - .page-card-summary. - Take control of your computing infrastructure and get things done. +section#flamenco.page-card.right + .page-card-side + h2.page-card-title + | Flamenco + .page-card-summary. + Take control of your computing infrastructure and get things done. - a.page-card-cta.download.js-watch-video( - href="https://www.youtube.com/watch?v=7cnFKhsM67Q", - data-youtube-id="7cnFKhsM67Q") - i.pi-play - | Watch Video + a.btn-success.js-watch-video( + href="https://www.youtube.com/watch?v=7cnFKhsM67Q", + data-youtube-id="7cnFKhsM67Q") + i.pi-play + | Watch Video - a.page-card-cta( - href="https://flamenco.io", - title="Learn more about Flamenco") - | Learn More + a.page-card-cta( + href="https://flamenco.io", + title="Learn more about Flamenco") + | Learn More - .page-card-side - img( - src="{{ url_for('static', filename='assets/img/features/flamenco_thumbnail.jpg')}}") + .page-card-side + img( + src="{{ url_for('static', filename='assets/img/features/flamenco_thumbnail.jpg')}}") - | {% if not current_user.has_role('subscriber') %} - section.page-card.subscribe( - style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})") - .page-card-side - h2.page-card-title - | All of this, plus hours of training and production assets. - .page-card-summary - | Join us for only $9.90/month! - a.page-card-cta( - href="https://store.blender.org/product/membership/") - | Subscribe Now - | {% endif %} +| {% if not current_user.has_role('subscriber') %} +section.page-card( + style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})") + .page-card-side + + h2.page-card-title + | All of this, plus hours of training and production assets. + + .page-card-summary.text-white + | Join us for only $9.90/month! + + a.page-card-cta(href="https://store.blender.org/product/membership/") + | Subscribe Now +| {% endif %} | {% endblock %} | {% block footer_scripts %} script. - // Click anywhere in the page to hide the overlay + // Hide the video overlay. function hideOverlay() { $('#page-overlay.video').removeClass('active'); $('#page-overlay.video .video-embed').html(''); } + // Click anywhere in the page or hit Esc to hide the overlay. $(document).click(function() { hideOverlay(); }); @@ -229,12 +223,12 @@ script. }); $('a.js-watch-video').click(function(e){ + var videoId = $(this).attr('data-youtube-id'); + e.preventDefault(); e.stopPropagation(); $('#page-overlay.video').addClass('active'); - - var videoId = $(this).attr('data-youtube-id'); $('#page-overlay .video-embed').html('') }); From 7dc1e6f9a12df013efa41d39cf60fec921f60b77 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:53:37 +0200 Subject: [PATCH 09/24] Gulp: Only chmod files when in --production --- gulpfile.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 173cbfd..7116cfe 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -21,6 +21,7 @@ var enabled = { prettyPug: !argv.production, cachify: !argv.production, cleanup: argv.production, + chmod: argv.production, }; var destination = { @@ -79,7 +80,7 @@ gulp.task('scripts', function() { .pipe(gulpif(enabled.uglify, uglify())) .pipe(rename({suffix: '.min'})) .pipe(gulpif(enabled.maps, sourcemaps.write("."))) - .pipe(chmod(644)) + .pipe(gulpif(enabled.chmod, chmod(644))) .pipe(gulp.dest(destination.js)) .pipe(gulpif(argv.livereload, livereload())); }); @@ -94,7 +95,7 @@ gulp.task('scripts_concat_tutti', function() { .pipe(concat("tutti.min.js")) .pipe(gulpif(enabled.uglify, uglify())) .pipe(gulpif(enabled.maps, sourcemaps.write("."))) - .pipe(chmod(644)) + .pipe(gulpif(enabled.chmod, chmod(644))) .pipe(gulp.dest(destination.js)) .pipe(gulpif(argv.livereload, livereload())); }); @@ -117,7 +118,7 @@ gulp.task('scripts_concat_bootstrap', function() { .pipe(concat("bootstrap.min.js")) .pipe(gulpif(enabled.uglify, uglify())) .pipe(gulpif(enabled.maps, sourcemaps.write("."))) - .pipe(chmod(644)) + .pipe(gulpif(enabled.chmod, chmod(644))) .pipe(gulp.dest(destination.js)) .pipe(gulpif(argv.livereload, livereload())); }); From cc1635113655cf9bd98e3d76be16239723f03e6e Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:54:39 +0200 Subject: [PATCH 10/24] NPM: Upgrade libraries New dependency is jQuery, we already depended on it it but now we use it from npm package for easier version control and upgrades. --- gulpfile.js | 4 ++-- package.json | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 7116cfe..a5aa879 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,5 +1,6 @@ var argv = require('minimist')(process.argv.slice(2)); var autoprefixer = require('gulp-autoprefixer'); +var cache = require('gulp-cached'); var chmod = require('gulp-chmod'); var concat = require('gulp-concat'); var git = require('gulp-git'); @@ -11,8 +12,7 @@ var plumber = require('gulp-plumber'); var rename = require('gulp-rename'); var sass = require('gulp-sass'); var sourcemaps = require('gulp-sourcemaps'); -var uglify = require('gulp-uglify'); -var cache = require('gulp-cached'); +var uglify = require('gulp-uglify-es').default; var enabled = { uglify: argv.production, diff --git a/package.json b/package.json index 377b536..1894f5d 100644 --- a/package.json +++ b/package.json @@ -8,24 +8,24 @@ }, "devDependencies": { "gulp": "~3.9.1", - "gulp-autoprefixer": "~2.3.1", - "gulp-cached": "~1.1.0", - "gulp-chmod": "~1.3.0", - "gulp-concat": "~2.6.0", - "gulp-if": "^2.0.1", - "gulp-git": "~2.4.2", - "gulp-pug": "~3.2.0", - "gulp-jade": "~1.1.0", - "gulp-livereload": "~3.8.1", - "gulp-plumber": "~1.1.0", - "gulp-rename": "~1.2.2", - "gulp-sass": "~2.3.1", - "gulp-sourcemaps": "~1.6.0", - "gulp-uglify": "~1.5.3", + "gulp-autoprefixer": "~6.0.0", + "gulp-cached": "~1.1.1", + "gulp-chmod": "~2.0.0", + "gulp-concat": "~2.6.1", + "gulp-if": "^2.0.2", + "gulp-git": "~2.8.0", + "gulp-livereload": "~4.0.0", + "gulp-plumber": "~1.2.0", + "gulp-pug": "~4.0.1", + "gulp-rename": "~1.4.0", + "gulp-sass": "~4.0.1", + "gulp-sourcemaps": "~2.6.4", + "gulp-uglify-es": "^1.0.4", "minimist": "^1.2.0" }, "dependencies": { "bootstrap": "^4.1.3", + "jquery": "^3.3.1", "popper.js": "^1.14.4" } } From 7a4c7d75f6bbb63af5f69a8f791f1133bb9c9d90 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:55:35 +0200 Subject: [PATCH 11/24] Project Landing uses new CSS --- src/styles/project-landing.sass | 78 +++++++++++++++++++++++++++++- src/templates/projects/landing.pug | 2 - 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/src/styles/project-landing.sass b/src/styles/project-landing.sass index 879cd02..28c6404 100644 --- a/src/styles/project-landing.sass +++ b/src/styles/project-landing.sass @@ -1,5 +1,79 @@ -@import ../../../pillar/src/styles/_config -@import ../../../pillar/src/styles/_utils +// Bootstrap variables and utilities. +@import "../../node_modules/bootstrap/scss/functions" +@import "../../node_modules/bootstrap/scss/variables" +@import "../../node_modules/bootstrap/scss/mixins" + +// Pillar variables and utilities. +@import "../../../pillar/src/styles/config" +@import "../../../pillar/src/styles/utils" + +// Bootstrap components. +@import "../../node_modules/bootstrap/scss/root" +@import "../../node_modules/bootstrap/scss/reboot" + +@import "../../node_modules/bootstrap/scss/type" +@import "../../node_modules/bootstrap/scss/images" + +@import "../../node_modules/bootstrap/scss/code" +@import "../../node_modules/bootstrap/scss/grid" +@import "../../node_modules/bootstrap/scss/tables" +@import "../../node_modules/bootstrap/scss/forms" +@import "../../node_modules/bootstrap/scss/buttons" +@import "../../node_modules/bootstrap/scss/transitions" +@import "../../node_modules/bootstrap/scss/dropdown" +@import "../../node_modules/bootstrap/scss/button-group" +@import "../../node_modules/bootstrap/scss/input-group" +@import "../../node_modules/bootstrap/scss/custom-forms" + +@import "../../node_modules/bootstrap/scss/nav" +@import "../../node_modules/bootstrap/scss/navbar" + +@import "../../node_modules/bootstrap/scss/card" +@import "../../node_modules/bootstrap/scss/breadcrumb" +@import "../../node_modules/bootstrap/scss/pagination" +@import "../../node_modules/bootstrap/scss/badge" +@import "../../node_modules/bootstrap/scss/jumbotron" +@import "../../node_modules/bootstrap/scss/alert" +@import "../../node_modules/bootstrap/scss/progress" +@import "../../node_modules/bootstrap/scss/media" +@import "../../node_modules/bootstrap/scss/list-group" +@import "../../node_modules/bootstrap/scss/close" +@import "../../node_modules/bootstrap/scss/modal" +@import "../../node_modules/bootstrap/scss/tooltip" +@import "../../node_modules/bootstrap/scss/popover" +@import "../../node_modules/bootstrap/scss/carousel" + +@import "../../node_modules/bootstrap/scss/utilities" +@import "../../node_modules/bootstrap/scss/print" + + +// Pillar components. +@import "../../../pillar/src/styles/apps_base" +@import "../../../pillar/src/styles/error" + +@import "../../../pillar/src/styles/components/base" + +@import "../../../pillar/src/styles/components/jumbotron" +@import "../../../pillar/src/styles/components/alerts" +@import "../../../pillar/src/styles/components/navbar" +@import "../../../pillar/src/styles/components/dropdown" +@import "../../../pillar/src/styles/components/footer" +@import "../../../pillar/src/styles/components/shortcode" +@import "../../../pillar/src/styles/components/statusbar" +@import "../../../pillar/src/styles/components/search" + +@import "../../../pillar/src/styles/components/flyout" +@import "../../../pillar/src/styles/components/inputs" +@import "../../../pillar/src/styles/components/buttons" +@import "../../../pillar/src/styles/components/popover" +@import "../../../pillar/src/styles/components/tooltip" +@import "../../../pillar/src/styles/components/checkbox" +@import "../../../pillar/src/styles/components/overlay" +@import "../../../pillar/src/styles/components/card" + +@import "../../../pillar/src/styles/notifications" + +@import "../../../pillar/src/styles/_search" $node-latest-thumbnail-size: 160px $node-latest-gallery-thumbnail-size: 200px diff --git a/src/templates/projects/landing.pug b/src/templates/projects/landing.pug index f603238..01d291b 100644 --- a/src/templates/projects/landing.pug +++ b/src/templates/projects/landing.pug @@ -78,8 +78,6 @@ script(src="{{ url_for('static_pillar', filename='assets/js/vendor/videojs-hotke | {% endblock %} | {% block css %} -link(href="{{ url_for('static_pillar', filename='assets/css/font-pillar.css') }}", rel="stylesheet") -link(href="{{ url_for('static_pillar', filename='assets/css/base.css') }}", rel="stylesheet") link(href="{{ url_for('static_cloud', filename='assets/css/project-landing.css') }}", rel="stylesheet") | {% endblock %} From ed211f9473fd967285f1c2031b8d78c6e1a02b80 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:57:09 +0200 Subject: [PATCH 12/24] Introducing Pug mixin components For now added jumbotron, secondary navigation, card decks and individual cards. Thanks @sybren for the suggestion. --- src/templates/mixins/components.pug | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/templates/mixins/components.pug diff --git a/src/templates/mixins/components.pug b/src/templates/mixins/components.pug new file mode 100644 index 0000000..35fc8c1 --- /dev/null +++ b/src/templates/mixins/components.pug @@ -0,0 +1,52 @@ + +// Header of landing pages. title or text can be skipped: +// +jumbotron("{{ page_title }}", null, "{{ page_header_image }}") +// Any extra attributes added (in a separate group) will be passed as is: +// +jumbotron("{{ page_title }}", null, "{{ page_header_image }}")(data-node-id='{{ node._id }}') +mixin jumbotron(title, text, image) + .jumbotron.jumbotron-overlay.text-white.mb-1(style='background-image: url(' + image + ');')&attributes(attributes) + .container + .row + .col-md-8 + if title + .display-4.text-uppercase.font-weight-bold + =title + if text + .lead + =text + +// Secondary navigation. +// e.g. Workshops, Courses. +mixin nav-secondary(title) + ul.nav.nav-secondary.justify-content-center.mb-5 + if title + li.nav-item.font-weight-bold + =title + + if block + block + else + p No items defined. + +mixin nav-secondary-link() + li.nav-item + a.nav-link&attributes(attributes) + block + +// Takes as argument the number of columns to use in this deck. 1-6 +mixin card-deck(columns) + .card-deck.card-padless(class='card-' + columns + '-columns') + if block + block + else + p No cards defined. + +// Passes all attributes to the card. +// You can do fun stuff in a loop even like: +// +card(data-url="{{ url_for('projects.view', project_url=project.url) }}", tabindex='{{ loop.index }}') +mixin card() + .card.card-fade.cursor-pointer.mb-4.js-project-go&attributes(attributes) + if block + block + else + p No card content defined. From f0b18e88f446e21df1e7325514f5f28488ed879c Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:57:51 +0200 Subject: [PATCH 13/24] Use pug mixins for header, cards and navigation --- src/templates/projects_index_collection.pug | 45 +++++++++------------ src/templates/services.pug | 24 +++++------ 2 files changed, 29 insertions(+), 40 deletions(-) diff --git a/src/templates/projects_index_collection.pug b/src/templates/projects_index_collection.pug index ab33296..9df7eaa 100644 --- a/src/templates/projects_index_collection.pug +++ b/src/templates/projects_index_collection.pug @@ -1,4 +1,5 @@ | {% extends 'layout.html' %} +include mixins/components | {# Default case is Open Projects #} | {% set page_title = 'Open Projects' %} @@ -39,37 +40,31 @@ meta(name="twitter:image", content="{{ page_header_image }}") | {% endblock %} | {% block body %} -.jumbotron.jumbotron-overlay.text-white(style="background-image: url({{ page_header_image }})") - .container - .row - .col-md-8 - .display-4.text-uppercase.font-weight-bold {{ page_title }} - .lead {{ page_header_text }} + ++jumbotron("{{ page_title }}", "{{ page_header_text }}", "{{ page_header_image }}") .container.pb-5 - ul.nav.nav-secondary.justify-content-center.mb-5 - li.nav-item.nav-title - | {% if title in ['courses', 'workshops'] %}Training{% else %}Open Projects{% endif %} - - li.nav-item - a.nav-link( + +nav-secondary("{% if title in ['courses', 'workshops'] %}Training{% else %}Open Projects{% endif %}") + +nav-secondary-link( class="{% if title == 'workshops' %}active{% endif %}", - href="{{ url_for('cloud.workshops') }}") Workshops - li.nav-item - a.nav-link( - class="{% if title == 'courses' %}active{% endif %}", - href="{{ url_for('cloud.courses') }}") Courses - li.nav-item - a.nav-link( - class="{% if title == 'gallery' %}active{% endif %}", - href="{{ url_for('projects.view', project_url='gallery') }}") Art Gallery + href="{{ url_for('cloud.workshops') }}") + | Workshops - .card-deck.card-padless.card-3-columns + +nav-secondary-link( + class="{% if title == 'courses' %}active{% endif %}", + href="{{ url_for('cloud.courses') }}") + | Courses + + +nav-secondary-link( + class="{% if title == 'gallery' %}active{% endif %}", + href="{{ url_for('projects.view', project_url='gallery') }}") + | Art Gallery + + +card-deck(3) | {% for project in projects %} + | {% if (project.status == 'published') or (project.status == 'pending' and current_user.is_authenticated) and project._id != config.MAIN_PROJECT_ID %} - .card.card-fade.cursor-pointer.mb-4.js-project-go( - data-url="{{ url_for('projects.view', project_url=project.url) }}", - tabindex="{{ loop.index }}") + +card(data-url="{{ url_for('projects.view', project_url=project.url) }}", tabindex='{{ loop.index }}') | {% if project.picture_header %} a(href="{{ url_for('projects.view', project_url=project.url) }}") img.card-img-top.rounded-0( diff --git a/src/templates/services.pug b/src/templates/services.pug index f0a03f1..daa0bbc 100644 --- a/src/templates/services.pug +++ b/src/templates/services.pug @@ -1,6 +1,7 @@ | {% extends 'layout.html' %} | {% block page_title %}Services{% endblock %} | {% set title = 'services' %} +include mixins/components | {% block og %} meta(property="og:type", content="website") @@ -20,17 +21,10 @@ meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/ba | {% endblock %} | {% block body %} -.jumbotron.jumbotron-overlay.text-white.mb-1(style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/services_projects.jpg')}})") - .container - .row - .col-md-8 - .display-4.text-uppercase.font-weight-bold - | Services - .lead. - On Blender Cloud you can create and share personal projects, access our texture and HDRI - library (or create your own), keep track of your production, manage your renders and much more! +- var header_text = "On Blender Cloud you can create and share personal projects, access our texture and HDRI library (or create your own), keep track of your production, manage your renders and much more!"; ++jumbotron("Services", header_text, "{{ url_for('static', filename='assets/img/backgrounds/services_projects.jpg')}}") -- var addon_text = 'Available through the Blender Cloud add-on' +- var addon_text = 'Available through the Blender Cloud add-on'; section#blender-cloud-add-on.page-card .page-card-side h2.page-card-title @@ -45,7 +39,7 @@ section#blender-cloud-add-on.page-card small Blender Cloud add-on requires Blender 2.78 or newer - a.btn-success( + a.btn.btn-outline-success( href="https://cloud.blender.org/r/downloads/blender_cloud-latest-addon.zip") i.pi-download | Download add-on  v {{ config.BLENDER_CLOUD_ADDON_VERSION }} @@ -88,7 +82,7 @@ section#texture-browser.page-card.right .tip !{addon_text} - a.btn-success.js-watch-video( + a.btn.btn-outline-success.js-watch-video( href="https://www.youtube.com/watch?v=-srXYv2Osjw", data-youtube-id="-srXYv2Osjw") i.pi-play @@ -108,7 +102,7 @@ section#image-sharing.page-card.right .tip !{addon_text} - a.btn-success.js-watch-video( + a.btn.btn-outline-success.js-watch-video( href="https://www.youtube.com/watch?v=yvtqeMBOAyk", data-youtube-id="yvtqeMBOAyk") i.pi-play @@ -146,7 +140,7 @@ section#attract.page-card.right .page-card-summary. Production-management software for your film, game, or commercial projects. - a.btn-success.js-watch-video( + a.btn.btn-outline-success.js-watch-video( href="https://www.youtube.com/watch?v=b9x1rlyyt_o", data-youtube-id="b9x1rlyyt_o") i.pi-play @@ -169,7 +163,7 @@ section#flamenco.page-card.right .page-card-summary. Take control of your computing infrastructure and get things done. - a.btn-success.js-watch-video( + a.btn.btn-outline-success.js-watch-video( href="https://www.youtube.com/watch?v=7cnFKhsM67Q", data-youtube-id="7cnFKhsM67Q") i.pi-play From 9ffcde3348a195db5c9eba4b8407bb0332cdccda Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:58:08 +0200 Subject: [PATCH 14/24] Use styling from Pillar --- src/styles/_welcome.sass | 16 ---------------- src/styles/main.sass | 13 ------------- 2 files changed, 29 deletions(-) diff --git a/src/styles/_welcome.sass b/src/styles/_welcome.sass index 03862d1..ae4f5df 100644 --- a/src/styles/_welcome.sass +++ b/src/styles/_welcome.sass @@ -264,22 +264,6 @@ +media-xs margin-top: 20px - .navbar - .nav-item-sign-in - a.navbar-item - background-color: $color-primary - border: none - border-radius: 3px - color: white - height: auto - font-weight: bold - margin-top: 5px - margin-left: 10px - padding: 10px 20px - - &:hover - background-color: lighten($color-primary, 10%) - box-shadow: none .container.wide-on-sm +media-sm diff --git a/src/styles/main.sass b/src/styles/main.sass index ea4bf9f..d7524a5 100644 --- a/src/styles/main.sass +++ b/src/styles/main.sass @@ -7,19 +7,6 @@ @import "../../../pillar/src/styles/config" @import "../../../pillar/src/styles/utils" -$primary: $color-primary - -$body-bg: $color-background -$body-color: $color-text - -$color-background-nav: #fff -$link-color: $primary - -$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" -$font-size-base: .9rem - -$dropdown-border-width: 0 -$dropdown-box-shadow: 0 10px 25px rgba($black, .1) // Bootstrap components. @import "../../node_modules/bootstrap/scss/root" From 73e8a81f3c483039c4edb7cb23d7867564d79820 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 13:58:26 +0200 Subject: [PATCH 15/24] Minor style tweaks --- src/templates/layout.pug | 2 +- src/templates/welcome.pug | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/templates/layout.pug b/src/templates/layout.pug index 7986da4..2a70c07 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -72,7 +72,7 @@ html(lang="en") | {% endif %} | {% endwith %} - nav.navbar.navbar-expand-md.fixed-top + nav.navbar.navbar-expand-md.fixed-top.bg-white a.navbar-brand( href="{{ url_for('main.homepage') }}", title="Blender Cloud") diff --git a/src/templates/welcome.pug b/src/templates/welcome.pug index 17a9a82..b4a0def 100644 --- a/src/templates/welcome.pug +++ b/src/templates/welcome.pug @@ -28,12 +28,12 @@ li | {% endblock navigation_sections %} | {% block navigation_user %} -li.nav-item-sign-in +li.pt-1.pr-1 | {% if current_user.is_anonymous %} - a.navbar-item(href="{{ url_for('users.login', next='/') }}") + a.btn.btn-outline-success(href="{{ url_for('users.login', next='/') }}") | Log in and Explore | {% else %} - a.navbar-item(href="{{ url_for('main.homepage') }}") + a.btn.btn-outline-success(href="{{ url_for('main.homepage') }}") | Explore | {% endif %} | {% endblock navigation_user %} From 9ba2735c8c99d49947c25c826b64393a69cc2994 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 19:08:23 +0200 Subject: [PATCH 16/24] CSS Cleanup --- src/styles/_homepage.sass | 50 --------------------------------- src/styles/project-landing.sass | 31 -------------------- 2 files changed, 81 deletions(-) diff --git a/src/styles/_homepage.sass b/src/styles/_homepage.sass index 9f202f4..0c4fcb2 100644 --- a/src/styles/_homepage.sass +++ b/src/styles/_homepage.sass @@ -113,27 +113,6 @@ border-color: $color-background-light pointer-events: none - li.create - cursor: pointer - display: inline-block - float: right - font: - size: 1.2em - weight: 400 - padding: 5px 10px - margin-top: 3px - - a - color: $color-success - text-decoration: none - - &.disabled - cursor: wait - border-color: $color-success - opacity: .8 - a - cursor: wait - section.stream background-color: white border-bottom: thin solid $color-background-dark @@ -670,35 +649,6 @@ section.announcement justify-content: space-around flex-wrap: wrap - a - +button($color-text-light, 3px) - padding: 5px 0 - margin: - bottom: 5px - right: auto - left: auto - font-size: .9em - opacity: 1 - flex: 1 - - +media-xs - margin: 10px auto - width: 100% - - &:first-child - margin-right: 15px - - &.blue - +button(hsl(hue($color-info), 60%, 45%), 3px) - - &.orange - +button(hsl(hue($color-secondary), 50%, 50%), 3px) - padding: 5px 15px - - &.green - +button(hsl(hue($color-success), 60%, 40%), 3px, true) - - section.dashboard-in-production .in-production-project border-bottom: thin solid $color-background-dark diff --git a/src/styles/project-landing.sass b/src/styles/project-landing.sass index 28c6404..81e4be2 100644 --- a/src/styles/project-landing.sass +++ b/src/styles/project-landing.sass @@ -77,43 +77,12 @@ $node-latest-thumbnail-size: 160px $node-latest-gallery-thumbnail-size: 200px -body - background-color: white -.page-body - background-color: white nav.navbar - background-color: white .navbar-header +media-xs width: 100% - .navbar-brand - color: $color-text - - li a.navbar-item - color: $color-text - &:hover - color: black - &:focus - color: black - &.active - color: black - .dropdown.open - a - background-color: white - .dropdown.libraries - &:hover - background: none - ul.dropdown-menu - background-color: white - li - a - color: $color-text - &:hover - color: black - background-color: white - .navbar-toggle border: none color: $color-text From 813750a006db6aeb24c3f224106d9d767a0067c9 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 19:08:52 +0200 Subject: [PATCH 17/24] Layout cleanup --- src/templates/layout.pug | 289 +++++++++++++++++++-------------------- 1 file changed, 143 insertions(+), 146 deletions(-) diff --git a/src/templates/layout.pug b/src/templates/layout.pug index 2a70c07..a9f2363 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -59,176 +59,175 @@ html(lang="en") | {% if not title %}{% set title="default" %}{% endif %} body(class="{{ title }}") - .container-page - | {% with messages = get_flashed_messages(with_categories=True) %} - | {% if messages %} - | {% for (category, message) in messages %} - .alert(role="alert", class="alert-{{ category }}") - i.alert-icon(class="{{ category }}") - span {{ message }} - button.close(type="button", data-dismiss="alert") - i.pi-cancel - | {% endfor %} - | {% endif %} - | {% endwith %} + | {% with messages = get_flashed_messages(with_categories=True) %} + | {% if messages %} + | {% for (category, message) in messages %} + .alert(role="alert", class="alert-{{ category }}") + i.alert-icon(class="{{ category }}") + span {{ message }} + button.close(type="button", data-dismiss="alert") + i.pi-cancel + | {% endfor %} + | {% endif %} + | {% endwith %} - nav.navbar.navbar-expand-md.fixed-top.bg-white - a.navbar-brand( - href="{{ url_for('main.homepage') }}", - title="Blender Cloud") - span.app-logo - i.pi-blender-cloud-logo + nav.navbar.navbar-expand-md.fixed-top.bg-white + a.navbar-brand( + href="{{ url_for('main.homepage') }}", + title="Blender Cloud") + span.app-logo + i.pi-blender-cloud-logo - button.navbar-toggler.text-light( - data-target=".navbar-collapse", - data-toggle="collapse", - type="button") - span.sr-only Toggle navigation - span.navbar-toggler-icon.d-flex.align-items-center - i.pi-menu + button.navbar-toggler.text-light( + data-target=".navbar-collapse", + data-toggle="collapse", + type="button") + span.sr-only Toggle navigation + span.navbar-toggler-icon.d-flex.align-items-center + i.pi-menu - | {% block navigation_search %} - .search-input - input#cloud-search( - type="text", - placeholder="Search assets, tutorials...") - i.search-icon.pi-search - | {% endblock navigation_search %} + | {% block navigation_search %} + .search-input + input#cloud-search( + type="text", + placeholder="Search assets, tutorials...") + i.search-icon.pi-search + | {% endblock navigation_search %} - .collapse.navbar-collapse - ul.navbar-nav.ml-auto - | {% if node and node.properties and node.properties.category %} - | {% set category = node.properties.category %} - | {% else %} - | {% set category = title %} - | {% endif %} + .collapse.navbar-collapse + ul.navbar-nav.ml-auto + | {% if node and node.properties and node.properties.category %} + | {% set category = node.properties.category %} + | {% else %} + | {% set category = title %} + | {% endif %} - | {% block navigation_sections %} - li - a.navbar-item( - href="{{ url_for('main.main_blog') }}", - title="Blender Cloud Blog", - data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'blog' %}active{% endif %}") - span Blog + | {% block navigation_sections %} + li + a.navbar-item( + href="{{ url_for('main.main_blog') }}", + title="Blender Cloud Blog", + data-toggle="tooltip", + data-placement="bottom", + class="{% if category == 'blog' %}active{% endif %}") + span Blog - li.dropdown - a.navbar-item.dropdown-toggle( - href="", - data-toggle="dropdown", - title="Libraries") - span Libraries - i.pi-angle-down - - ul.dropdown-menu.p-0 - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='hdri') }}", - title="HDRI Library", - data-toggle="tooltip", - data-placement="left") - i.pi-globe - | HDRI - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='textures') }}", - title="Textures Library", - data-toggle="tooltip", - data-placement="left") - i.pi-folder-texture - | Textures - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='characters') }}", - title="Character Library", - data-toggle="tooltip", - data-placement="left") - i.pi-character - | Characters - - - li(class="dropdown libraries") - a.navbar-item.dropdown-toggle( + li.dropdown + a.navbar-item.dropdown-toggle( href="", data-toggle="dropdown", - title="Training") - span Training - i.pi-angle-down + title="Libraries") + span Libraries + i.pi-angle-down - ul.dropdown-menu - li - a.navbar-item( - href="{{ url_for('cloud.courses') }}", - title="Courses", + ul.dropdown-menu.p-0 + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='hdri') }}", + title="HDRI Library", data-toggle="tooltip", data-placement="left") - i.pi-graduation-cap - | Courses - li - a.navbar-item( - href="{{ url_for('cloud.workshops') }}", - title="Workshops", + i.pi-globe + | HDRI + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='textures') }}", + title="Textures Library", data-toggle="tooltip", data-placement="left") - i.pi-lightbulb - | Workshops - li - a.navbar-item( - href="{{ url_for('projects.view', project_url='gallery') }}", - title="Curated artwork collection", + i.pi-folder-texture + | Textures + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='characters') }}", + title="Character Library", data-toggle="tooltip", data-placement="left") - i.pi-image - | Art Gallery + i.pi-character + | Characters - li - a.navbar-item( - href="{{ url_for('cloud.open_projects') }}", - title="Browse all the Open Projects", + + li(class="dropdown libraries") + a.navbar-item.dropdown-toggle( + href="", + data-toggle="dropdown", + title="Training") + span Training + i.pi-angle-down + + ul.dropdown-menu + li + a.navbar-item( + href="{{ url_for('cloud.courses') }}", + title="Courses", data-toggle="tooltip", - data-placement="bottom", - class="{% if category in ['open-projects', 'film'] %}active{% endif %}") - span Open Projects - li - a.navbar-item( - href="{{ url_for('cloud.services') }}", - title="Blender Cloud Services", + data-placement="left") + i.pi-graduation-cap + | Courses + li + a.navbar-item( + href="{{ url_for('cloud.workshops') }}", + title="Workshops", data-toggle="tooltip", - data-placement="bottom", - class="{% if category == 'services' %}active{% endif %}") - span Services - | {% endblock navigation_sections %} + data-placement="left") + i.pi-lightbulb + | Workshops + li + a.navbar-item( + href="{{ url_for('projects.view', project_url='gallery') }}", + title="Curated artwork collection", + data-toggle="tooltip", + data-placement="left") + i.pi-image + | Art Gallery + + li + a.navbar-item( + href="{{ url_for('cloud.open_projects') }}", + title="Browse all the Open Projects", + data-toggle="tooltip", + data-placement="bottom", + class="{% if category in ['open-projects', 'film'] %}active{% endif %}") + span Open Projects + li + a.navbar-item( + href="{{ url_for('cloud.services') }}", + title="Blender Cloud Services", + data-toggle="tooltip", + data-placement="bottom", + class="{% if category == 'services' %}active{% endif %}") + span Services + | {% endblock navigation_sections %} - | {% if current_user.is_anonymous %} - li - a.navbar-item( - href="https://store.blender.org/product/membership/", - title="Sign up") Sign up - | {% endif %} + | {% if current_user.is_anonymous %} + li + a.navbar-item( + href="https://store.blender.org/product/membership/", + title="Sign up") Sign up + | {% endif %} - | {% block navigation_user %} + | {% block navigation_user %} - | {% include 'menus/notifications.html' %} - | {% include 'menus/user.html' %} + | {% include 'menus/notifications.html' %} + | {% include 'menus/user.html' %} - | {% endblock navigation_user %} + | {% endblock navigation_user %} - .page-content - #search-overlay - | {% block page_overlay %} - #page-overlay - | {% endblock page_overlay %} - .page-body - | {% block body %}{% endblock %} + .page-content + #search-overlay + | {% block page_overlay %} + #page-overlay + | {% endblock page_overlay %} + .page-body + | {% block body %}{% endblock %} | {% block footer_container %} - #footer-container + .footer-wrapper | {% block footer_navigation %} - #footer-navigation + .footer-navigation .container .row .col-md-4.col-xs-6 @@ -331,11 +330,9 @@ html(lang="en") | Privacy | {% endblock footer_navigation %} - | {% block footer %} - footer.container - #hop(title="Be awesome in space") - i.pi-angle-up - | {% endblock footer %} + #hop(title="Be awesome in space") + i.pi-angle-up + | {% endblock footer_container %} #notification-pop(data-url="", data-read-toggle="") From c25df6f0adee875ab34684da80ea9a5d43b0b388 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Fri, 31 Aug 2018 19:33:14 +0200 Subject: [PATCH 18/24] Cleanup --- src/templates/layout.pug | 17 ++++++----------- src/templates/users/settings/billing.pug | 2 +- src/templates/users/settings/emails.pug | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/templates/layout.pug b/src/templates/layout.pug index a9f2363..a1de43d 100644 --- a/src/templates/layout.pug +++ b/src/templates/layout.pug @@ -199,23 +199,18 @@ html(lang="en") span Services | {% endblock navigation_sections %} + | {% block navigation_user %} + | {% include 'menus/notifications.html' %} + | {% include 'menus/user.html' %} + | {% endblock navigation_user %} | {% if current_user.is_anonymous %} - li - a.navbar-item( + li.pt-1 + a.btn.btn-sm.btn-primary.px-3.mx-1( href="https://store.blender.org/product/membership/", title="Sign up") Sign up | {% endif %} - - | {% block navigation_user %} - - | {% include 'menus/notifications.html' %} - | {% include 'menus/user.html' %} - - | {% endblock navigation_user %} - - .page-content #search-overlay | {% block page_overlay %} diff --git a/src/templates/users/settings/billing.pug b/src/templates/users/settings/billing.pug index befe663..2c50f16 100644 --- a/src/templates/users/settings/billing.pug +++ b/src/templates/users/settings/billing.pug @@ -65,7 +65,7 @@ p Your organisation provides you with your subscription. hr p - button#recheck_subscription.btn.btn-default(onclick="javascript:recheck_subscription(this)") Re-check my subscription + button#recheck_subscription.btn.btn-outline-secondary(onclick="javascript:recheck_subscription(this)") Re-check my subscription hr diff --git a/src/templates/users/settings/emails.pug b/src/templates/users/settings/emails.pug index 2411997..cf91972 100644 --- a/src/templates/users/settings/emails.pug +++ b/src/templates/users/settings/emails.pug @@ -11,7 +11,7 @@ | {% endfor %} .buttons - button.btn.btn-default.button-submit(type='submit') + button.btn.btn-outline-success.button-submit(type='submit') i.pi-check | Save Changes | {% endblock %} From 59e0adf3caef15dcba81a567e82922b62d625153 Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Thu, 6 Sep 2018 12:54:15 +0200 Subject: [PATCH 19/24] Pug: Bring new templates from Pillar --- src/templates/_macros/_navigation.pug | 26 + src/templates/nodes/custom/blog/_macros.pug | 164 +++++ src/templates/organizations/index.pug | 213 ++++++ src/templates/projects/home_index.pug | 59 ++ src/templates/projects/home_layout.pug | 51 ++ src/templates/projects/index_dashboard.pug | 300 +++++++++ src/templates/projects/view.pug | 687 ++++++++++++++++++++ 7 files changed, 1500 insertions(+) create mode 100644 src/templates/_macros/_navigation.pug create mode 100644 src/templates/nodes/custom/blog/_macros.pug create mode 100644 src/templates/organizations/index.pug create mode 100644 src/templates/projects/home_index.pug create mode 100644 src/templates/projects/home_layout.pug create mode 100644 src/templates/projects/index_dashboard.pug create mode 100644 src/templates/projects/view.pug diff --git a/src/templates/_macros/_navigation.pug b/src/templates/_macros/_navigation.pug new file mode 100644 index 0000000..46290fe --- /dev/null +++ b/src/templates/_macros/_navigation.pug @@ -0,0 +1,26 @@ +include ../mixins/components + +| {% macro navigation_tabs(title) %} ++nav-secondary() + +nav-secondary-link( + class="{% if title == 'homepage' %}active{% endif %}", + href="{{ url_for('main.homepage') }}") + | Activity + + +nav-secondary-link( + class="{% if title == 'home' %}active{% endif %}", + href="{{ url_for('projects.home_project') }}") + | Home + + +nav-secondary-link( + class="{% if title == 'dashboard' %}active{% endif %}", + href="{{ url_for('projects.index') }}") + | My Projects + + | {% if current_user.has_organizations() %} + +nav-secondary-link( + class="{% if title == 'organizations' %}active{% endif %}", + href="{{ url_for('pillar.web.organizations.index') }}") + | My Organizations + | {% endif %} +| {% endmacro %} diff --git a/src/templates/nodes/custom/blog/_macros.pug b/src/templates/nodes/custom/blog/_macros.pug new file mode 100644 index 0000000..84ec904 --- /dev/null +++ b/src/templates/nodes/custom/blog/_macros.pug @@ -0,0 +1,164 @@ +include ../../../mixins/components + +| {% import 'projects/_macros.html' as projectmacros %} +| {% macro render_blog_post(node, project=None, pages=None) %} + +.expand-image-links.imgs-fluid + | {% if node.picture %} + +jumbotron( + "{{ node.name }}", + "{{ node._created | pretty_date }}", + "{{ node.picture.thumbnail('h', api=api) }}", + "{{ node.url }}")(class="row") + | {% else %} + .pt-3.text-center.text-muted + h2 + a.text-muted(href="{{ node.url }}") + | {{ node.name }} + ul.d-flex.list-unstyled.justify-content-center + | {% if node.project.name %} + li.pr-2 {{ node.project.name }} + | {% endif %} + | {% if node.user.full_name %} + li.pr-2 + | {{ node.user.full_name }} + | {% endif %} + li + a.px-2.text-muted(href="{{ node.url }}", + title="Updated {{ node._updated | pretty_date }}") + | {{ node._created | pretty_date }} + li + a.px-2(href="{{ node.url }}#comments") + | Leave a comment + + | {% if node.has_method('PUT') %} + li + a.px-2(href="{{url_for('nodes.edit', node_id=node._id)}}") + i.pi-edit + | Edit Post + | {% endif %} + | {% endif %} + + | {% if project and project._id != config.MAIN_PROJECT_ID %} + | {{ projectmacros.render_secondary_navigation(project, pages=pages) }} + | {% endif %} + + .row + .col-md-9.mx-auto + + .item-content.pt-4 + | {{ node.properties | markdowned('content') }} + + hr.my-4 +| {% endmacro %} + +//- ******************************************************* -// +| {% macro render_blog_list_item(node) %} +.row.position-relative.py-2 + .col-md-1 + | {% if node.picture %} + a.imgs-fluid(href="{{ node.url }}") + img(src="{{ node.picture.thumbnail('s', api=api) }}") + | {% else %} + .bg-primary.rounded.h-100 + a.d-flex.align-items-center.justify-content-center.h-100.text-white(href="{{ node.url }}") + i.pi-document-text + | {% endif %} + + .col-md-11 + h5 + a.text-muted(href="{{ node.url }}") {{node.name}} + + .text-muted. + #[span(title="{{node._created}}") {{node._created | pretty_date }}] + {% if node._created != node._updated %} + #[span(title="{{node._updated}}") (updated {{node._updated | pretty_date }})] + {% endif %} + {% if node.properties.category %} · {{node.properties.category}}{% endif %} + · {{node.user.full_name}} + {% if node.properties.status != 'published' %} · {{ node.properties.status}} {% endif %} + +| {% endmacro %} + + +//- ******************************************************* -// +| {% macro render_blog_index(project, posts, can_create_blog_posts, api, more_posts_available, posts_meta, pages=None) %} +| {% if can_create_blog_posts %} ++nav-secondary + +nav-secondary-link(href="{{url_for('nodes.posts_create', project_id=project._id)}}") + span.text-success + i.pi-plus + | Create New Blog Post +| {% endif %} + +| {% if posts %} +| {{ render_blog_post(posts[0], project=project, pages=pages) }} + +.container + .row + .col-md-9.mx-auto + | {% for node in posts[1:] %} + | {% if loop.first %} + h5.text-muted.text-center Blasts from the past + | {% endif %} + | {{ render_blog_list_item(node) }} + | {% endfor %} + + | {% if more_posts_available %} + .blog-archive-navigation + a(href="{{ project.blog_archive_url }}") + | {{posts_meta.total - posts|length}} more blog posts over here + i.pi-angle-right + | {% endif %} + +| {% else %} + +.text-center + p No posts... yet! + +| {% endif %} {# posts #} +| {% endmacro %} + + +//- Macro for rendering the navigation buttons for prev/next pages -// +| {% macro render_archive_pagination(project) %} +.blog-archive-navigation + | {% if project.blog_archive_prev %} + a.archive-nav-button( + href="{{ project.blog_archive_prev }}", rel="prev") + i.pi-angle-left + | Previous page + | {% else %} + span.archive-nav-button + i.pi-angle-left + | Previous page + | {% endif %} + + a.archive-nav-button( + href="{{ url_for('main.project_blog', project_url=project.url) }}") + | Blog Index + + | {% if project.blog_archive_next %} + a.archive-nav-button( + href="{{ project.blog_archive_next }}", rel="next") + | Next page + i.pi-angle-right + | {% else %} + span.archive-nav-button + | Next page + i.pi-angle-right + | {% endif %} + +| {% endmacro %} + +| {% macro render_archive(project, posts, posts_meta) %} + +| {{ render_archive_pagination(project) }} + +| {% for node in posts %} +| {{ render_blog_list_item(node) }} +| {% endfor %} + +| {{ render_archive_pagination(project) }} + +| {% endmacro %} diff --git a/src/templates/organizations/index.pug b/src/templates/organizations/index.pug new file mode 100644 index 0000000..4c3f6eb --- /dev/null +++ b/src/templates/organizations/index.pug @@ -0,0 +1,213 @@ +| {% extends 'layout.html' %} +| {% from '_macros/_navigation.html' import navigation_tabs %} +include ../mixins/components + +| {% set title = 'organizations' %} +| {% block page_title %}Organizations{% endblock %} + +| {% block og %} +meta(property="og:title", content="Dashboard") +meta(name="twitter:title", content="Blender Cloud") + +meta(property="og:url", content="https://cloud.blender.org/{{ request.path }}") +meta(property="og:type", content="website") + +meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/cloud_services_oti.jpg')}}") +meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/cloud_services_oti.jpg')}}") +| {% endblock %} + + +| {% block navigation_tabs %} +| {{ navigation_tabs(title) }} +| {% endblock navigation_tabs %} + +| {% block body %} ++nav-secondary + | {% if can_create_organization %} + +nav-secondary-link( + class="create", + onclick='createNewOrganization(this)') + span.text-success + i.pi-plus + | Create Organization + | {% endif %} + + li#create_organization_result_panel.result + +.container-fluid.dashboard-container + .row + .col-md-6 + ul.projects__list + | {% if organizations %} + | {% for organization in organizations['_items'] %} + | {% set link_url = url_for('pillar.web.organizations.view_embed', organization_id=organization._id) %} + li.projects__list-item( + data-url="{{ link_url }}", + id="organization-{{ organization._id }}") + a.projects__list-thumbnail( + href="{{ link_url }}") + i.pi-users + .projects__list-details + a.title(href="{{ link_url }}") + | {{ organization.name }} + + ul.meta + li(title="Members") + | {{ organization.members|hide_none|count }} Member{{ organization.members|hide_none|count|pluralize }} + | {% if (organization.unknown_members|count) != 0 %} + | ({{ organization.unknown_members|hide_none|count }} pending) + | {% endif %} + li(title="Seats") + | {{ organization.seat_count }} Seat{{ organization.seat_count|pluralize }} + + | {% endfor %} + | {% else %} + li.projects__list-item + a.projects__list-thumbnail + i.pi-blender-cloud + .projects__list-details + span Create an Organization to get started! + | {% endif %} + + .col-md-6.py-1.pb-3 + #item-details + +| {% endblock %} + + +| {% block footer_scripts %} +script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.typeahead-0.11.1.min.js')}}") +script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.autocomplete-0.22.0.min.js') }}", async=true) + +script. + + /* Returns a more-or-less reasonable message given an error response object. */ + function xhrErrorResponseMessage(err) { + if (typeof err.responseJSON == 'undefined') + return err.statusText; + + if (typeof err.responseJSON._error != 'undefined' && typeof err.responseJSON._error.message != 'undefined') + return err.responseJSON._error.message; + + if (typeof err.responseJSON._message != 'undefined') + return err.responseJSON._message + + return err.statusText; + } + + /** + * Open an organization in the #item-details div. + */ + function item_open(item_id, pushState) + { + if (item_id === undefined ) { + throw new ReferenceError("item_open(" + item_id + ") called."); + } + + // Style elements starting with item_type and dash, e.g. "#job-uuid" + var clean_classes = 'active processing'; + var current_item = $('#organization-' + item_id); + + $('[id^="organization-"]').removeClass(clean_classes); + current_item + .removeClass(clean_classes) + .addClass('processing'); + + var item_url = '/o/' + item_id; + + $.get(item_url, function(item_data) { + $('#item-details').html(item_data); + + current_item + .removeClass(clean_classes) + .addClass('active'); + + }).fail(function(xhr) { + if (console) { + console.log('Error fetching organization', item_id, 'from', item_url); + console.log('XHR:', xhr); + } + + current_item.removeClass(clean_classes); + toastr.error('Failed to open organization'); + + if (xhr.status) { + $('#item-details').html(xhr.responseText); + } else { + $('#item-details').html('

Opening ' + item_type + ' failed. There possibly was ' + + 'an error connecting to the server. Please check your network connection and ' + + 'try again.

'); + } + }); + + // Determine whether we should push the new state or not. + pushState = (typeof pushState !== 'undefined') ? pushState : true; + if (!pushState) return; + + // Push the correct URL onto the history. + var push_state = {itemId: item_id}; + + window.history.pushState( + push_state, + 'Organization: ' + item_id, + item_url + ); + } + + $('li.projects__list-item').click(function(e){ + url = $(this).data('url'); + if (typeof url === 'undefined') return; + + window.location.href = url; + if (console) console.log(url); + + $(this).addClass('active'); + $(this).find('.projects__list-thumbnail i') + .removeAttr('class') + .addClass('pi-spin spin'); + }); + + + {% if open_organization_id %} + $(function() { item_open('{{ open_organization_id }}', false); }); + {% endif %} + + {% if can_create_organization %} + function createNewOrganization(button) { + $(button) + .attr('disabled', 'disabled') + .fadeTo(200, 0.1); + $('#create_organization_result_panel').html(''); + + // TODO: create a form to get the initial info from the user. + $.post( + '{{ url_for('pillar.web.organizations.create_new') }}', + { + name: 'New Organization', + seat_count: 1, + } + ) + .done(function(result) { + var $p = $('

').text('organization created, reloading list.') + $('#create_organization_result_panel').html($p); + + window.location.href = result.location; + }) + .fail(function(err) { + var msg = xhrErrorResponseMessage(err); + $('#create_organization_result_panel').html('Error creating organization: ' + msg); + + $(button) + .fadeTo(1000, 1.0) + .queue(function() { + $(this) + .removeAttr('disabled') + .dequeue() + ; + }) + }) + ; + return false; + } + {% endif %} +| {% endblock %} diff --git a/src/templates/projects/home_index.pug b/src/templates/projects/home_index.pug new file mode 100644 index 0000000..610ff0d --- /dev/null +++ b/src/templates/projects/home_index.pug @@ -0,0 +1,59 @@ +| {% extends 'projects/home_layout.html' %} +| {% set subtab = 'blender_sync' %} +| {% set learn_more_btn_url = '/blog/introducing-blender-sync' %} +| {% block currenttab %} +.container-fluid + section.nav-tabs__tab.active#tab-blender_sync + .tab_header-container + .tab_header-intro( + style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})") + .tab_header-intro_text + h2 Connect Blender with the Cloud + p + | Save your Blender preferences and keymaps once, load them anywhere. +
+ | Use the + =' ' + a(href='https://cloud.blender.org/r/downloads/blender_cloud-latest-bundle.zip') Blender Cloud add-on + =' ' + | to synchronise your settings from within Blender. + + | {% if show_addon_download_buttons %} + .row + .col-md-6 + a.btn.btn-block.btn-outline-success( + href="https://cloud.blender.org/r/downloads/blender_cloud-latest-bundle.zip") + i.pi-download + | Download v{{ config.BLENDER_CLOUD_ADDON_VERSION }} + .col-md-6 + a.btn.btn-link( + href="{{ learn_more_btn_url }}") + | Learn More + i.pi-angle-right + | {% endif %} + + .tab_header-intro_icons + i.pi-blender + i.pi-heart-filled + i.pi-blender-cloud + + | {% for version in synced_versions %} + .blender_sync-main + .blender_sync-main-header + h5.blender_sync-main-title + i.pi-blender + | Blender {{ version.version }} + .blender_sync-main-last + | Last synced on: {{ version.date|pretty_date }} + | {% else %} + .blender_sync-main.empty + .blender_sync-main-header + span.blender_sync-main-title + | No settings synced yet +


+ a.download( + href='https://cloud.blender.org/r/downloads/blender_cloud-latest-bundle.zip') + | Download add-on + | {% endfor %} +| {% endblock %} + diff --git a/src/templates/projects/home_layout.pug b/src/templates/projects/home_layout.pug new file mode 100644 index 0000000..454f508 --- /dev/null +++ b/src/templates/projects/home_layout.pug @@ -0,0 +1,51 @@ +| {% extends 'layout.html' %} +| {% from '_macros/_navigation.html' import navigation_tabs %} +include ../mixins/components + +| {% set title = 'home' %} + +| {% block og %} +meta(property="og:type", content="website") +meta(property="og:url", content="https://cloud.blender.org{{ request.path }}") + +meta(property="og:title", content="Blender Cloud - Home") +meta(name="twitter:title", content="Blender Cloud") + +meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/cloud_services_oti.jpg')}}") +meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/cloud_services_oti.jpg')}}") +| {% endblock %} + +| {% block page_title %} +| {{current_user.full_name}} +| {% endblock %} + +| {% block navigation_tabs %} +| {{ navigation_tabs(title) }} +| {% endblock navigation_tabs %} + +| {% block body %} +.dashboard-container + + section#projects.bg-white + +nav-secondary()(id='sub-nav-tabs__list') + +nav-secondary-link(id="subtab-blender_sync", data-tab-url="{{ url_for('projects.home_project')}}") + | Blender Sync + + +nav-secondary-link(id="subtab-images", data-tab-url="{{ url_for('projects.home_project_shared_images')}}") + | Images + + | {% block currenttab %}{% endblock %} +| {% endblock %} + +| {% block footer_scripts %} +script. + $(document).ready(function () { + $('#subtab-{{ subtab }}').addClass('active'); + + var $nav_tabs = $('#sub-nav-tabs__list').find('a.nav-link'); + $nav_tabs.on('click', function (e) { + console.log($(this)); + window.location = $(this).attr('data-tab-url'); + }); + }); +| {% endblock %} diff --git a/src/templates/projects/index_dashboard.pug b/src/templates/projects/index_dashboard.pug new file mode 100644 index 0000000..4297dd1 --- /dev/null +++ b/src/templates/projects/index_dashboard.pug @@ -0,0 +1,300 @@ +| {% extends 'layout.html' %} +| {% from '_macros/_navigation.html' import navigation_tabs %} +include ../mixins/components + +| {% set title = 'dashboard' %} + +| {% block og %} +meta(property="og:title", content="Dashboard") +meta(name="twitter:title", content="Blender Cloud") + +meta(property="og:url", content="https://cloud.blender.org/{{ request.path }}") +meta(property="og:type", content="website") + +meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/cloud_services_oti.jpg')}}") +meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/cloud_services_oti.jpg')}}") +| {% endblock %} + +| {% block page_title %} +| {{current_user.full_name}} +| {% endblock %} + +| {% block css %} +| {{ super() }} +style. + .deleted-projects-toggle { + z-index: 10; + position: absolute; + right: 0; + font-size: 20px; + padding: 3px; + text-shadow: 0 0 2px white; + } + .deleted-projects-toggle .show-deleted { + color: #aaa; + } + .deleted-projects-toggle .hide-deleted { + color: #bbb; + } +| {% endblock %} + +| {% block navigation_tabs %} +| {{ navigation_tabs(title) }} +| {% endblock navigation_tabs %} + + +| {% block body %} +.dashboard-container + section.dashboard-main + section#projects.bg-white + +nav-secondary()(id='sub-nav-tabs__list') + +nav-secondary-link(data-tab-toggle='own_projects', class="active") + | Own Projects + | {% if projects_user|length != 0 %} + span ({{ projects_user|length }}) + | {% endif %} + + +nav-secondary-link(data-tab-toggle='shared') + | Shared with me + | {% if projects_shared|length != 0 %} + span ({{ projects_shared|length }}) + | {% endif %} + + | {% if current_user.has_cap('subscriber') %} + +nav-secondary-link( + id="project-create", + data-url="{{ url_for('projects.create') }}", + href="{{ url_for('projects.create') }}") + span.text-success + | #[i.pi-plus] Create New Project + | {% elif current_user.has_cap('can-renew-subscription') %} + +nav-secondary-link( + id="project-create", + data-url="{{ url_for('projects.create') }}", + href="/renew", + target="_blank") + | #[i.pi-heart-filled.text-danger] Resubscribe to Create a Project + | {% endif %} + + nav.nav-tabs__tab.active#own_projects + .deleted-projects-toggle + | {% if show_deleted_projects %} + a.hide-deleted(href="{{ request.base_url }}", title='Hide deleted projects') + i.pi-trash + | {% else %} + a.show-deleted(href="{{ request.base_url }}?deleted=1", title='Show deleted projects') + i.pi-trash + | {% endif %} + + ul.projects__list + | {% for project in projects_deleted %} + li.projects__list-item.deleted + span.projects__list-thumbnail + | {% if project.picture_square %} + img(src="{{ project.picture_square.thumbnail('s', api=api) }}") + | {% else %} + i.pi-blender-cloud + | {% endif %} + .projects__list-details + span.title {{ project.name }} + ul.meta + li.status.deleted Deleted + li.edit + a(href="javascript:undelete_project('{{ project._id }}')") Restore project + | {% else %} + | {% if show_deleted_projects %} + li.projects__list-item.deleted You have no recenly deleted projects. Deleted projects can be restored within a month after deletion. + | {% endif %} + | {% endfor %} + + | {% for project in projects_user %} + li.projects__list-item( + data-url="{{ url_for('projects.view', project_url=project.url) }}") + a.projects__list-thumbnail( + href="{{ url_for('projects.view', project_url=project.url) }}") + | {% if project.picture_square %} + img(src="{{ project.picture_square.thumbnail('s', api=api) }}") + | {% else %} + i.pi-blender-cloud + | {% endif %} + .projects__list-details + a.title(href="{{ url_for('projects.view', project_url=project.url) }}") + | {{ project.name }} + + ul.meta + li.status( + class="{{ project.is_private | yesno('private,public,') }}", + title="{{ project.is_private | yesno('Private Project,Public Project,') }}") + | {{ project.is_private | yesno('Private,Public,') }} + li.when(title="{{ project._created }}") {{ project._created | pretty_date }} + li.edit + a(href="{{ url_for('projects.edit', project_url=project.url) }}") Edit + | {% if project.status == 'pending' and current_user.has_cap('view-pending-nodes') %} + li.pending Not Published + | {% endif %} + | {% else %} + | {% if current_user.has_cap('subscriber') %} + li.projects__list-item(data-url="{{ url_for('projects.create') }}") + a.projects__list-thumbnail + i.pi-plus + .projects__list-details + a.title(href="{{ url_for('projects.create') }}") + | Create a project to get started! + | {% elif current_user.has_cap('can-renew-subscription') %} + li.projects__list-item(data-url="https://store.blender.org/renew-my-subscription.php") + a.projects__list-thumbnail + i.pi-plus + .projects__list-details + a.title(href="https://store.blender.org/renew-my-subscription.php") + | Renew your Blender Cloud subscription to create your own projects! + | {% else %} + li.projects__list-item(data-url="/join") + a.projects__list-thumbnail + i.pi-plus + .projects__list-details + a.title(href="/join") + | Join Blender Cloud to create your own projects! + | {% endif %} + | {% endfor %} + + section.nav-tabs__tab#shared(style='display: none') + ul.projects__list + | {% if projects_shared %} + | {% for project in projects_shared %} + li.projects__list-item( + data-url="{{ url_for('projects.view', project_url=project.url) }}") + a.projects__list-thumbnail( + href="{{ url_for('projects.view', project_url=project.url) }}") + | {% if project.picture_square %} + img(src="{{ project.picture_square.thumbnail('s', api=api) }}") + | {% else %} + i.pi-blender-cloud + | {% endif %} + .projects__list-details + a.title(href="{{ url_for('projects.view', project_url=project.url) }}") + | {{ project.name }} + + ul.meta + li.status( + class="{{ project.is_private | yesno('private,public,') }}", + title="{{ project.is_private | yesno('Private Project,Public Project,') }}") + | {{ project.is_private | yesno('Private,Public,') }} + li.when {{ project._created | pretty_date }} + li.who by {{ project.user.full_name }} + li.edit + a(href="{{ url_for('projects.edit', project_url=project.url) }}") Edit + | {% if project.status == 'pending' and current_user.has_cap('view-pending-nodes') %} + li.pending Not Published + | {% endif %} + + li.leave + span.user-remove-prompt + | Leave Project + + span.user-remove + | Are you sure? + span.user-remove-confirm( + user-id="{{ current_user.objectid }}", + project-url="{{url_for('projects.sharing', project_url=project.url)}}") + i.pi-check + | Yes, leave + span.user-remove-cancel + i.pi-cancel + | No, cancel + + | {% endfor %} + | {% else %} + li.projects__list-item + a.projects__list-thumbnail + i.pi-heart-broken + .projects__list-details + .title + | No projects shared with you... yet! + | {% endif %} +| {% endblock %} + + +| {% block footer_scripts %} +script. + $(document).ready(function() { + + $('li.projects__list-item').click(function(e){ + url = $(this).data('url'); + if (typeof url === 'undefined') return; + + window.location.href = url; + if (console) console.log(url); + + $(this).addClass('active'); + $(this).find('.projects__list-thumbnail i') + .removeAttr('class') + .addClass('pi-spin spin'); + }); + + // Tabs behavior + var $nav_tabs_list = $('#sub-nav-tabs__list'); + var $nav_tabs = $nav_tabs_list.find('a.nav-link'); + $nav_tabs.on('click', function(e){ + e.preventDefault(); + + $nav_tabs.removeClass('active'); + $(this).addClass('active'); + + $('.nav-tabs__tab').hide(); + $('#' + $(this).attr('data-tab-toggle')).show(); + }); + + // Leave project + var $projects_list = $('ul.projects__list'); + $projects_list.find('span.user-remove-prompt').on('click', function(e){ + e.stopPropagation(); + e.preventDefault(); + + $(this).next().show(); + $(this).hide(); + }); + + $projects_list.find('span.user-remove-cancel').on('click', function(e){ + e.stopPropagation(); + e.preventDefault(); + + $(this).parent().prev().show(); + $(this).parent().hide(); + }); + + $projects_list.find('span.user-remove-confirm').on('click', function(e){ + e.stopPropagation(); + e.preventDefault(); + var parent = $(this).closest('.projects__list-item'); + + function removeUser(userId, projectUrl){ + $.post(projectUrl, {user_id: userId, action: 'remove'}) + .done(function (data) { + parent.remove(); + }); + } + + removeUser($(this).attr('user-id'), $(this).attr('project-url')); + }); + + hopToTop(); // Display jump to top button + }); + + + var patch_url = '{{ url_for('projects.patch.patch_project', project_id='PROJECTID') }}'; + function undelete_project(project_id) { + console.log('undeleting project', project_id); + $.ajax({ + url: patch_url.replace('PROJECTID', project_id), + method: 'PATCH', + data: JSON.stringify({'op': 'undelete'}), + contentType: 'application/json' + }) + .done(function(data, textStatus, jqXHR) { + location.href = jqXHR.getResponseHeader('Location'); + }) + .fail(function(err) { + toastr.error(xhrErrorResponseMessage(err), 'Undeletion failed'); + }) + } +| {% endblock %} diff --git a/src/templates/projects/view.pug b/src/templates/projects/view.pug new file mode 100644 index 0000000..709e080 --- /dev/null +++ b/src/templates/projects/view.pug @@ -0,0 +1,687 @@ +| {% extends 'layout.html' %} +| {% from '_macros/_add_new_menu.html' import add_new_menu %} +include ../mixins/components + +| {% block page_title %}{{ project.name }}{% endblock%} +| {% set title = 'project' %} + +| {% block og %} +meta(property="og:type", content="website") + +| {% if og_picture %} +meta(property="og:image", content="{{ og_picture.thumbnail('l', api=api) }}") +meta(name="twitter:image", content="{{ og_picture.thumbnail('l', api=api) }}") +| {% elif node and node.picture %} +meta(property="og:image", content="{{ node.picture.thumbnail('l', api=api) }}") +meta(name="twitter:image", content="{{ node.picture.thumbnail('l', api=api) }}") +| {% elif project.picture_header %} +meta(property="og:image", content="{{ project.picture_header.thumbnail('l', api=api) }}") +meta(name="twitter:image", content="{{ project.picture_header.thumbnail('l', api=api) }}") +| {% endif %} + +| {% if show_project %} +meta(property="og:title", content="{{ project.name }} - Blender Cloud") +meta(name="twitter:title", content="{{ project.name }} - Blender Cloud") +meta(property="og:description", content="{{ project.summary }}") +meta(name="twitter:description", content="{{ project.summary }}") + +meta(property="og:url", content="{{ url_for('projects.view', project_url=project.url, _external=True) }}") +| {% else %} + +| {% if node %} +meta(property="og:title", content="{{ node.name }} - Blender Cloud") +meta(name="twitter:title", content="{{ node.name }} on Blender Cloud") + +| {% if node.node_type == 'post' %} + +| {% if node.properties.content %} +meta(property="og:description", content="{{ node.properties.content | truncate(180) }}") +meta(name="twitter:description", content="{{ node.properties.content | truncate(180) }}") +| {% else %} +meta(property="og:description", content="Blender Cloud, your source for open content and training") +meta(name="twitter:description", content="Blender Cloud, your source for open content and training") +| {% endif %} + +| {% else %} + +| {% if node.description %} +meta(property="og:description", content="{{ node.description | truncate(180) }}") +meta(name="twitter:description", content="{{ node.description | truncate(180) }}") +| {% else %} +meta(property="og:description", content="Blender Cloud, your source for open content and training") +meta(name="twitter:description", content="Blender Cloud, your source for open content and training") +| {% endif %} + +| {% endif %} + +meta(property="og:url", content="{{url_for('projects.view_node', project_url=project.url, node_id=node._id)}}") +| {% else %} +meta(property="og:title", content="{{ project.name }} Blog on Blender Cloud") +meta(name="twitter:title", content="{{ project.name }} Blog on Blender Cloud") +meta(property="og:description", content="{{ project.summary }}") +meta(name="twitter:description", content="{{ project.summary }}") + +meta(property="og:url", content="{{url_for('projects.view', project_url=project.url, _external=True)}}") +| {% endif %} + +| {% endif %} +| {% endblock %} + +| {% block head %} +link(href="{{ url_for('static_pillar', filename='assets/jstree/themes/default/style.min.css') }}", rel="stylesheet") +| {% if node %} +link(rel="amphtml", href="{{ url_for('nodes.view', node_id=node._id, _external=True, format='amp') }}") +| {% endif %} + +script(src="{{ url_for('static_pillar', filename='assets/js/vendor/videojs-6.2.8.min.js') }}") +script(src="{{ url_for('static_pillar', filename='assets/js/vendor/videojs-ga-0.4.2.min.js') }}") +script(src="{{ url_for('static_pillar', filename='assets/js/vendor/videojs-hotkeys-0.2.20.min.js') }}") +| {% endblock %} + +| {% block css %} +link(href="{{ url_for('static_pillar', filename='assets/css/font-pillar.css') }}", rel="stylesheet") +link(href="{{ url_for('static_pillar', filename='assets/css/project-main.css') }}", rel="stylesheet") +| {% endblock %} + +| {% block navigation_tabs %} ++nav-secondary()(class="bg-white") + | {% if project.category == 'course' %} + li.text-capitalize + a.nav-link.text-muted.px-0(href="{{ url_for('cloud.courses') }}") + | Courses + | {% elif project.category == 'workshop' %} + li.text-capitalize + a.nav-link.text-muted.px-0(href="{{ url_for('cloud.workshops') }}") + | Workshops + li.px-1 + i.pi-angle-right + | {% endif %} + + +nav-secondary-link( + class="px-0", + href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + | {{ project.name }} + + | {% if project.category == "open_project" %} + +nav-secondary-link( + class="active", + href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + | Explore + +nav-secondary-link( + href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + | Blog + +nav-secondary-link( + href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + | About + +nav-secondary-link( + href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + | Team + +nav-secondary-link( + href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + | Awards + | {% endif %} +| {% endblock navigation_tabs %} + +| {% block body %} +#project-container + #project-side-container + #project_sidebar.bg-white + ul.project-tabs.p-0 + //- li.tabs-thumbnail(class="{% if project.picture_square %}image{% endif %}") + //- a(href="{{url_for('projects.view', project_url=project.url)}}") + //- #project-loading + //- i.pi-spin + //- | {% if project.picture_square %} + //- img(src="{{ project.picture_square.thumbnail('b', api=api) }}") + //- | {% else %} + //- i.pi-home + //- | {% endif %} + + li.tabs-browse( + title="Browse", + data-toggle="tooltip", + data-placement="right", + class="active") + a(href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + i.pi-folder + + | {% if not project.is_private %} + | {% if current_user_is_subscriber %} + li.tabs-search( + title="Search", + data-toggle="tooltip", + data-placement="right") + a(href="{{ url_for('projects.search', project_url=project.url, _external=True)}} ") + i.pi-search + | {% else %} + li.tabs-search( + title="Search (subscribers only)", + data-toggle="tooltip", + data-placement="right") + a(href="{{ url_for('cloud.join') }}") + i.pi-search + | {% endif %} + | {% endif %} + | {{ extension_sidebar_links }} + + | {% if project.has_method('PUT') %} + li( + title="Edit Project", + data-toggle="tooltip", + data-placement="right") + a(href="{{ url_for('projects.edit', project_url=project.url) }}") + i.pi-cog + | {% endif %} + + + #project_nav(class="{{ title }}") + #project_nav-container + | {% if title != 'about' %} + //- +nav-secondary(class="bg-white") + //- +nav-secondary-link( + //- class="active", + //- href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + //- | {{ project.name }} + //- #project_nav-header.bg-white + + //- a.project-title.p-2.font-weight-bold.text-dark( + //- href="{{url_for('projects.view', project_url=project.url, _external=True)}}") + //- | {{ project.name }} + + | {% block project_tree %} + #project_tree.bg-white + | {% endblock project_tree %} + | {% endif %} + + + #project_context-container.border-left + | {% if project.has_method('PUT') %} + #project_context-header.bg-white + span#status-bar + + ul.project-edit-tools.disabled + li.dropdown + button#item_add.project-mode-view.btn.btn-sm.btn-outline-secondary.dropdown-toggle( + type="button", + data-toggle="dropdown", + aria-haspopup="true", + aria-expanded="false") + i.button-add-icon.pi-collection-plus + | New... + + ul.dropdown-menu.add_new-menu + | {{ add_new_menu(project.node_types) }} + + li.button-edit + a#item_edit.project-mode-view.btn.btn-sm.btn-outline-secondary.ml-2( + href="javascript:void(0);", + title="Edit", + data-project_id="{{project._id}}") + i.button-edit-icon.pi-edit + | Edit Project + + li.dropdown + button.dropdown-toggle.project-mode-view.btn.btn-sm.btn-outline-secondary.mx-2( + type="button", + data-toggle="dropdown", + aria-haspopup="true", + aria-expanded="false") + i.pi-more-vertical.p-0 + + ul.dropdown-menu + | {% if current_user.has_cap('admin') %} + li.dropdown-item + a#item_featured( + href="javascript:void(0);", + title="Feature on project's homepage", + data-toggle="tooltip", + data-placement="left") + i.pi-star + | Toggle Featured + + li.dropdown-item + a#item_toggle_public( + href="javascript:void(0);", + title="Make it accessible to anyone", + data-toggle="tooltip", + data-placement="left") + i.pi-lock-open + | Toggle Public + | {% endif %} + + li.dropdown-item + a#item_toggle_projheader( + href="javascript:void(0);", + title="Feature as project's header", + data-toggle="tooltip", + data-placement="left") + i.pi-star + | Toggle Project Header video + + li.dropdown-item.button-move + a#item_move( + href="javascript:void(0);", + title="Move into a folder...", + data-toggle="tooltip", + data-placement="left") + i.button-move-icon.pi-move + | Move + + li.dropdown-item.button-delete + a#item_delete( + href="javascript:void(0);", + title="Can be undone within a month", + data-toggle="tooltip", + data-placement="left") + i.pi-trash + | Delete Project + + // Edit Mode + li.button-cancel + a#item_cancel.project-mode-edit.btn.btn-outline-secondary( + href="javascript:void(0);", + title="Cancel changes") + i.button-cancel-icon.pi-cancel + | Cancel + + li.button-save + a#item_save.project-mode-edit.btn.btn-outline-success.mx-2( + href="javascript:void(0);", + title="Save changes") + i.button-save-icon.pi-check + | Save Changes + + | {% endif %} + + | {% set utm_source = request.args.get('utm_source') %} + | {% if config.UTM_LINKS and utm_source in config.UTM_LINKS %} + #utm_container + a(href="{{config.UTM_LINKS[utm_source]['link']}}") + img(src="{{config.UTM_LINKS[utm_source]['image']}}", alt="gift", class="img-responsive") + | {% endif %} + #project_context + | {% block project_context %} + | {% if show_project %} + | {% include "projects/view_embed.html" %} + | {% endif %} + | {% endblock project_context %} + + #overlay-mode-move-container + .overlay-container + .title + i.pi-angle-left + | Select the folder where you want to move it + .buttons + button#item_move_accept.move.disabled + | Select a Folder + button#item_move_cancel.cancel + i.pi-cancel + | Cancel + +| {% endblock %} + +| {% block footer_container %}{% endblock %} + +| {% block footer_scripts_pre %} + +| {% if project.has_method('PUT') %} +| {# JS containing the Edit, Add, Featured, and Move functions #} +script(type="text/javascript", src="{{ url_for('static_pillar', filename='assets/js/project-edit.min.js') }}") +| {% endif %} + +script. + function updateToggleProjHeaderMenuItem() { + var $toggle_projheader = $('#item_toggle_projheader'); + + if (ProjectUtils.isProject()) { + $toggle_projheader.hide(); + return; + } + if (ProjectUtils.nodeType() == 'asset') { + $toggle_projheader.show(); + } else { + $toggle_projheader.hide(); + } + } + $(updateToggleProjHeaderMenuItem); + + // Function to update the interface on loadNodeContent, and edit/saving assets + function updateUi(nodeId, mode) { + + if (mode === 'view') { + $('.project-mode-view').displayAs('inline-block'); + $('.project-mode-edit').hide(); + + $("#node-edit-form").unbind("submit"); + $("#item_save").unbind("click"); + $("#item_cancel").unbind("click"); + } else if (mode === 'edit') { + $('.project-mode-view').hide(); + $('.project-mode-edit').displayAs('inline-block'); + } else { + if (console) console.log('Invalid mode:', mode); + } + + // Prevent flicker by scrolling to top. + $("#project_context-container").scrollTop(0); + + // Enable specific items under the Add New dropdown + if (ProjectUtils.nodeType() === 'group') { + addMenuEnable(['asset', 'group']); + + } else if (ProjectUtils.nodeType() === 'group_texture') { + addMenuEnable(['group_texture', 'texture']); + + } else if (ProjectUtils.nodeType() === 'group_hdri') { + addMenuEnable(['group_hdri', 'hdri']); + + } else if (!ProjectUtils.isProject()) { + addMenuEnable(false); + } + + updateToggleProjHeaderMenuItem(); + + // Set the page title on the document + var page_title = $('#node-title').text() + " - {{ project.name }} — Blender Cloud"; + DocumentTitleAPI.set_page_title(page_title); + + // TODO: Maybe remove this, now it's also in loadNodeContent(), but double-check + // it's done like that in all users of updateUi(). + $('#project-loading').removeAttr('class'); + } +| {% endblock %} + +| {% block footer_scripts %} +script(src="{{ url_for('static_pillar', filename='assets/jstree/jstree.min.js') }}") + +script. + {% if show_project %} + ProjectUtils.setProjectAttributes({projectId: "{{project._id}}", isProject: true, nodeId: ''}); + {% else %} + {% if node %} + ProjectUtils.setProjectAttributes({projectId: "{{project._id}}", isProject: false, nodeId: '{{node._id}}'}); + {% endif %} + {% endif %} + + var projectTree = document.getElementById('project_tree'); + + var urlNodeMove = "{{url_for('projects.move_node')}}"; + var urlNodeFeature = "{{url_for('projects.add_featured_node')}}"; + var urlNodeDelete = "{{url_for('projects.delete_node')}}"; + var urlNodeTogglePublic = "{{url_for('projects.toggle_node_public')}}"; + var urlNodeToggleProjHeader = "{{url_for('projects.toggle_node_project_header')}}"; + var urlProjectDelete = "{{url_for('projects.delete')}}"; + var urlProjectEdit = "{{url_for('projects.edit', project_url=project.url)}}"; + + + function loadNodeContent(url, nodeId) { + $('#project-loading').addClass('active'); + $.get(url, function(dataHtml) { + // Update the DOM injecting the generate HTML into the page + $('#project_context').html(dataHtml); + }) + .done(function(){ + updateUi(nodeId, 'view'); + }) + .fail(function(dataResponse) { + $('#project_context').html($('