From f089f177ca7a39cf41c414e3efcff15a7104d910 Mon Sep 17 00:00:00 2001 From: Erik Trautman Date: Tue, 19 Aug 2014 18:34:31 -0700 Subject: [PATCH 01/61] Initial commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..4c2a8d349 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +danebook_pages +============== + +Prototyping all the Danebook Pages for Midnight Sun Social From d21472b0e4a23b832c18b68950d205af156a309d Mon Sep 17 00:00:00 2001 From: Erik Trautman Date: Tue, 19 Aug 2014 18:50:09 -0700 Subject: [PATCH 02/61] initial commit --- README.md | 34 +++++++++++++++++++++++++++++++--- about.html | 1 + about_edit.html | 1 + friends.html | 1 + photos.html | 1 + timeline.html | 1 + 6 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 about.html create mode 100644 about_edit.html create mode 100644 friends.html create mode 100644 photos.html create mode 100644 timeline.html diff --git a/README.md b/README.md index 4c2a8d349..bb21780d4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,32 @@ -danebook_pages -============== +# Prototyping Additional Danebook Pages -Prototyping all the Danebook Pages for Midnight Sun Social +This pair project concludes Week 1 of the [Viking Code School](http://vikingcodeschool.com) + +### Your Task + +The project is created using an Agile Development approach and managed with [a Pivotal Tracker project](https://www.pivotaltracker.com/s/projects/1149270). You will complete it by pair programming with your partner, making sure to switch off every 25 minutes (determined by a [pomodoro timer](http://tomato-timer.com/). + +#### Getting Started + +2. Check out the [Pivotal Tracker Project](https://www.pivotaltracker.com/s/projects/1149270) to see the stories for this project. The Acceptance Criteria for each story is listed in the Tasks field. The mockups are included as comments on their respective Epics (you might need to click the "Epics" tab to display them). Familiarize yourself with what you'll be building. +1. Each partner should [fork this repository](https://help.github.com/articles/fork-a-repo) to make a copy and then clone their fork locally. +2. Each partner should [add a remote](https://help.github.com/articles/adding-a-remote) to their local clone called "pair" which points to their partner's fork (e.g. `$ git remote add pair https://github.com/partner_username/repo_name.git`). This is how you'll pass changes between each other when it's time to switch roles. + +#### Diving In + +You will produce the desired pages using your understanding of HTML, CSS, SASS and Bootstrap. + +1. Choose the first driver and start screen sharing. For starters, add a link to each partner's Github repo to this README on the first driver's machine. +2. Begin working through the stories on the first driver's machine. Start the [pomodoro timer](http://tomato-timer.com) for 25 minutes. +2. Commit often -- do it whenever some useful piece of markup is finished. +2. When the pomodoro interval is up, commit all current changes and then push them up to Github. +3. The new driver should update their repo from their partner's fork using the remote you set up already -- `$ git pull pair`. + +#### Finishing Up + +Once you've completed all the stories and pages, you will need to submit your work back to the main repository and perform code review. + +4. When all stories are complete, the last driver should push their copy to their fork as normal. The last navigator should update their repository as if he/she was about to switch roles and then push these changes to his/her fork. Now both partners should have current forks. +4. **Each partner** should submit their fork as a separate pull request back to [the main upstream repository](https://github.com/vikingeducation/danebook_pages). +3. After submitting your pull request, you will perform a code review on your assigned partner for the upcoming week. As before, identify that person's pull request on the Pull Requests tab and reviewing the files it contains. +4. Submit your review as [comments to the pull request](https://help.github.com/articles/using-pull-requests#pull-request-discussion). diff --git a/about.html b/about.html new file mode 100644 index 000000000..e75acb1d5 --- /dev/null +++ b/about.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/about_edit.html b/about_edit.html new file mode 100644 index 000000000..e75acb1d5 --- /dev/null +++ b/about_edit.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/friends.html b/friends.html new file mode 100644 index 000000000..e75acb1d5 --- /dev/null +++ b/friends.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/photos.html b/photos.html new file mode 100644 index 000000000..e75acb1d5 --- /dev/null +++ b/photos.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/timeline.html b/timeline.html new file mode 100644 index 000000000..e75acb1d5 --- /dev/null +++ b/timeline.html @@ -0,0 +1 @@ + \ No newline at end of file From a4889e077c405555f2dc21bc16cb762c6dd73d49 Mon Sep 17 00:00:00 2001 From: Erik Trautman Date: Sat, 3 Jan 2015 18:34:06 -0800 Subject: [PATCH 03/61] Update README.md --- README.md | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index bb21780d4..6c577c3b2 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,3 @@ -# Prototyping Additional Danebook Pages +# assignment_danebook_pages -This pair project concludes Week 1 of the [Viking Code School](http://vikingcodeschool.com) - -### Your Task - -The project is created using an Agile Development approach and managed with [a Pivotal Tracker project](https://www.pivotaltracker.com/s/projects/1149270). You will complete it by pair programming with your partner, making sure to switch off every 25 minutes (determined by a [pomodoro timer](http://tomato-timer.com/). - -#### Getting Started - -2. Check out the [Pivotal Tracker Project](https://www.pivotaltracker.com/s/projects/1149270) to see the stories for this project. The Acceptance Criteria for each story is listed in the Tasks field. The mockups are included as comments on their respective Epics (you might need to click the "Epics" tab to display them). Familiarize yourself with what you'll be building. -1. Each partner should [fork this repository](https://help.github.com/articles/fork-a-repo) to make a copy and then clone their fork locally. -2. Each partner should [add a remote](https://help.github.com/articles/adding-a-remote) to their local clone called "pair" which points to their partner's fork (e.g. `$ git remote add pair https://github.com/partner_username/repo_name.git`). This is how you'll pass changes between each other when it's time to switch roles. - -#### Diving In - -You will produce the desired pages using your understanding of HTML, CSS, SASS and Bootstrap. - -1. Choose the first driver and start screen sharing. For starters, add a link to each partner's Github repo to this README on the first driver's machine. -2. Begin working through the stories on the first driver's machine. Start the [pomodoro timer](http://tomato-timer.com) for 25 minutes. -2. Commit often -- do it whenever some useful piece of markup is finished. -2. When the pomodoro interval is up, commit all current changes and then push them up to Github. -3. The new driver should update their repo from their partner's fork using the remote you set up already -- `$ git pull pair`. - -#### Finishing Up - -Once you've completed all the stories and pages, you will need to submit your work back to the main repository and perform code review. - -4. When all stories are complete, the last driver should push their copy to their fork as normal. The last navigator should update their repository as if he/she was about to switch roles and then push these changes to his/her fork. Now both partners should have current forks. -4. **Each partner** should submit their fork as a separate pull request back to [the main upstream repository](https://github.com/vikingeducation/danebook_pages). -3. After submitting your pull request, you will perform a code review on your assigned partner for the upcoming week. As before, identify that person's pull request on the Pull Requests tab and reviewing the files it contains. -4. Submit your review as [comments to the pull request](https://help.github.com/articles/using-pull-requests#pull-request-discussion). +[An HTML5, CSS3, Bootstrap, and SASS project of the Viking Code School](http://www.vikingcodeschool.com) From 48776f179a6a9af60160faf36fd04dbf58782488 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Mon, 25 Jul 2016 18:52:41 -0700 Subject: [PATCH 04/61] update readme and assets --- .gitignore | 1 + README.md | 8 ++++++++ assets/images/danish_flag.gif | Bin 0 -> 2268 bytes assets/images/harry_potter_small.jpg | Bin 0 -> 12773 bytes assets/images/hogwarts_small.jpg | Bin 0 -> 73659 bytes assets/images/icon_photo_small.png | Bin 0 -> 7321 bytes assets/images/user_silhouette_generic.gif | Bin 0 -> 2750 bytes assets/stylesheets/styles.css | 3 +++ assets/stylesheets/styles.css.map | 7 +++++++ assets/stylesheets/styles.scss | 0 10 files changed, 19 insertions(+) create mode 100644 .gitignore create mode 100644 assets/images/danish_flag.gif create mode 100644 assets/images/harry_potter_small.jpg create mode 100644 assets/images/hogwarts_small.jpg create mode 100644 assets/images/icon_photo_small.png create mode 100644 assets/images/user_silhouette_generic.gif create mode 100644 assets/stylesheets/styles.css create mode 100644 assets/stylesheets/styles.css.map create mode 100644 assets/stylesheets/styles.scss diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..08b6c3bc3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.sass-cache* diff --git a/README.md b/README.md index 6c577c3b2..0e30b636d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ # assignment_danebook_pages [An HTML5, CSS3, Bootstrap, and SASS project of the Viking Code School](http://www.vikingcodeschool.com) + +
+

Kenny Kottenstette

+
+ +

Click for preview

+ + diff --git a/assets/images/danish_flag.gif b/assets/images/danish_flag.gif new file mode 100644 index 0000000000000000000000000000000000000000..132d8cff8a645f566b9d1c8c25adc571f653d830 GIT binary patch literal 2268 zcmV<22qX7LNk%w1VXpxo0mJ|RN*pBc#LUu9W|5DOavCYf$jDh&SCEg7RY*%tD={n{ zAvPT%^V8URH$&v)Qp>z@TtQEEG-_9{XP5te`$MzgoTEOhjvYfjE#JNkda}6j+K^|m~@JnoSA)+pl6hwq@|{po2ROS zpP{Z|qpPyBv}>ugxNNPjud%tmz_ho)#8tbzp}xh-%#Op&%*V)*%Fx!=ns?aC($kRD z+u`C{&*Qb--ht-p>{sROs_5yW@b&fY_N4OjW#IY$%LS{X7{emyj=Gp>+9Dg;H-jq5iX4KFxJGq7?X8O6|$?vl0j0A zYB^bEuA8BD28H>v#n4MfQ!|YfHB!})O0#b0`Y7y?v&C-BUDj+r-b-r>y$wh<@PER8 z62E%fXL6s*{TOe4Z#VGhXQ|`0&Kvtz?asO9_Wm3E&F4DFqcMM8{A~3H+5dIV8a^!f zG11?&9}#~`{WkFj#&rH|17J)7YE)qVWAvGpAb|^7bD&EPMo7|xEmde?M;M}{;fAL* z_}PabO4MOVB$lYqi6o_{;y^5d9SiI~}pG};qmM>ysP&yF1R=p#EoS|sF<<`g;6 zkw}W8q(n?MX`qdgMJeSqPc~%bmC$6V(3V^VL?vTjhFOf436*JPFlY{>=9<5>3DBEx z;v(libk-@%n1$u3r!05oZnJ2`X%Y4m_XXjrI=cx zDLb5Y>P)3~g(@l|pRQx-sfmyZ*Q%@*lBzkd#tM|HY1L}09#lh8D$cLK;)E+( zzLi(3oyX3V?0U;GyGV1yM*D{Uu;El|Z5!BbqwTh~G^^LM@qr7dxPg&-pSi1ai_N#} zl7lW{>h>3}qVqmh?|}E3ly7DGD%fu+?p_1$z*ZD&&A|v$p)fQIH!Q`&%|t9Q6ck4j zFoYL(kuf(Lcbw_JoP{j1rzDGJ^2wu4dz{50e_RaA9m`A%%@^Ao49*hk3=Gc=`}_;g z2n(GH(E}Te3)1~6ea^}(qndJRP)FUW%hy$HwX9RWruEjhV%^=>VDs9wZDf}n?AgPm zt+ugZkLUK=aoB-C0C?xE_uhQ>?f2h+2QK*Fgcojj-V6l%z~PKH?)c-7M=tr~lvkcN z0tFZl@aCL%?)m4Shc0^mBnD(Y`st{ruKMb%i(b0st;a6=?6lWz`|GynuKVu1_nr~% zz6US-@Wk&9eDTO9ul(}+9?$&q&_^%5B+gH7{q@)@Uw!u6cklh|+kY?q_~dgQe);I9 zuf9R&ukZf*@cYqz{Pfqq{`~gmuYdRW@9+Qr&+8um2S~u+39x_&Od$A7r@#g}@OBJ* zpadtFx&u=1f*ACQ1vALO4tisQ9t@!fApyb>n(%~SC?N`07(x}Y@P!z3Aq;2uKpE2T zh6uDF4tMxJ9rEyp_VXbShxk4r67h)WGa?d~_&p^u@rl@TA{3_>Jt0w{1coFZNx%t6;Vb^G*%Tw z#6?+^(ThC)^qCzs#70jQ(n5?>R3#Vc+{vS}W0>L{J2 z;DIIv4D51`QsDv`A9FY1arOE`TwR9>Rn5rkKzJaQBvZ@=f3MZ|0MO`p8rB`(U zRalO74P0H*S=EqMGp%(fWsNC2Jrq~5&J{&<4dq+8(AF^Rbqjsv(qFX@*eeZ|DS74O zVX;tHDJ}L2jcw9ntq@rxO|~j8eWx2PONGh~iL+DitdBq|1<~e+v{5iEjZg~()xLss6T q*0|2Ku6NDrUi0RTI^bbqA) literal 0 HcmV?d00001 diff --git a/assets/images/harry_potter_small.jpg b/assets/images/harry_potter_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d660d77d5774558ed2514cb52ef4972e34aab36 GIT binary patch literal 12773 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 OQPqUisc7r<=l=yD>bA82 literal 0 HcmV?d00001 diff --git a/assets/images/hogwarts_small.jpg b/assets/images/hogwarts_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94a8abeff8c8b2c336d837008f00ad9e1c580f13 GIT binary patch literal 73659 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 literal 0 HcmV?d00001 diff --git a/assets/images/icon_photo_small.png b/assets/images/icon_photo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..0a900d16fb0ee5b0eeb92447a8b48871a29a5c08 GIT binary patch literal 7321 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 jdP{w Date: Tue, 26 Jul 2016 01:16:59 -0700 Subject: [PATCH 05/61] top navbar story via the original bootstrap copied/pasted navbar w/ needing formatting --- about.html | 73 +++++++++++++++++++++++++++++- assets/stylesheets/styles.css | 19 ++++++++ assets/stylesheets/styles.css.map | 4 +- assets/stylesheets/styles.scss | 31 +++++++++++++ timeline.html | 74 ++++++++++++++++++++++++++++++- 5 files changed, 197 insertions(+), 4 deletions(-) diff --git a/about.html b/about.html index e75acb1d5..07fbbbfab 100644 --- a/about.html +++ b/about.html @@ -1 +1,72 @@ - \ No newline at end of file + + + + Welcome to Danebook + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index c6386fcb0..7921bfec9 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -1,3 +1,22 @@ +.navbar { + background-color: #2B78E4; } + .navbar .navbar-brand { + color: white; + font-size: 200%; } + .navbar .navbar-brand img { + width: 35px; + height: 35px; + border-radius: 50%; } +.navbar-default .navbar-nav > li > a { + color: white; } + +.asdf { + background-color: green; + height: 1500px; + width: 50px; } + +body { + padding-top: 70px; } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index a8e4238de..5c3a0f12b 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,7 +1,7 @@ { "version": 3, -"mappings": "", -"sources": [], +"mappings": "AAAA,OAAQ;EAGN,gBAAgB,EAAE,OAAO;EAEzB,qBAAc;IACZ,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IAEf,yBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,aAAa,EAAE,GAAG;;AAKxB,oCAAiC;EAC7B,KAAK,EAAE,KAAK;;AAIhB,KAAM;EACJ,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,IAAI;;AAGb,IAAK;EACH,WAAW,EAAE,IAAI", +"sources": ["styles.scss"], "names": [], "file": "styles.css" } \ No newline at end of file diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index e69de29bb..ba04a3a0c 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -0,0 +1,31 @@ +.navbar { + + //min-height: 65px; + background-color: #2B78E4; + + .navbar-brand { + color: white; + font-size: 200%; + + img { + width: 35px; + height: 35px; + border-radius: 50%; + } + } +} + +.navbar-default .navbar-nav>li>a { + color: white; +} + + +.asdf { + background-color: green; + height: 1500px; + width: 50px; +} + +body { + padding-top: 70px; +} \ No newline at end of file diff --git a/timeline.html b/timeline.html index e75acb1d5..a0cacd1a1 100644 --- a/timeline.html +++ b/timeline.html @@ -1 +1,73 @@ - \ No newline at end of file + + + + Welcome to Danebook + + + + + + + + + + + + + + + + + + + + + + +
+
+







































+
+ + + + + + + + + + + + + + \ No newline at end of file From d124b8070a6f628bf04d550406afe577e3595823 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Tue, 26 Jul 2016 19:07:16 -0700 Subject: [PATCH 06/61] story 1, top navbar satisifed --- about.html | 33 +++++++------- about_edit.html | 75 ++++++++++++++++++++++++++++++- assets/stylesheets/styles.css | 28 +++++++++--- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 44 +++++++++++++----- mynotes.md | 3 ++ 6 files changed, 151 insertions(+), 34 deletions(-) create mode 100644 mynotes.md diff --git a/about.html b/about.html index 07fbbbfab..8f6500a1f 100644 --- a/about.html +++ b/about.html @@ -1,4 +1,4 @@ - + Welcome to Danebook @@ -6,6 +6,8 @@ + + @@ -15,20 +17,20 @@ + + + + + + +
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 7921bfec9..cf95ea9c4 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -1,5 +1,8 @@ .navbar { - background-color: #2B78E4; } + padding-left: 10%; + padding-right: 10%; + min-height: 65px; + background-color: #3C5A99; } .navbar .navbar-brand { color: white; font-size: 200%; } @@ -7,16 +10,27 @@ width: 35px; height: 35px; border-radius: 50%; } + .navbar .navbar-nav > li > a { + color: white; + font-size: 150%; } + +.form-group input { + width: 200%; + margin-left: 15%; } + @media (max-width: 864px) { + .form-group input { + width: 160%; } } + +.navbar-right, +.navbar-left { + padding-top: 5px; } -.navbar-default .navbar-nav > li > a { - color: white; } +body { + padding-top: 100px; } .asdf { - background-color: green; + background-color: red; height: 1500px; width: 50px; } -body { - padding-top: 70px; } - /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index 5c3a0f12b..b2439d42a 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,OAAQ;EAGN,gBAAgB,EAAE,OAAO;EAEzB,qBAAc;IACZ,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IAEf,yBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,aAAa,EAAE,GAAG;;AAKxB,oCAAiC;EAC7B,KAAK,EAAE,KAAK;;AAIhB,KAAM;EACJ,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,IAAI;;AAGb,IAAK;EACH,WAAW,EAAE,IAAI", +"mappings": "AAAA,OAAQ;EACN,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EAEzB,qBAAc;IACZ,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IAEf,yBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,aAAa,EAAE,GAAG;EAItB,4BAAqB;IACnB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;;AAKjB,iBAAM;EACJ,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;EACd,yBAAwB;IAH5B,iBAAM;MAIA,KAAK,EAAE,IAAI;;AAKnB;YACa;EACX,WAAW,EAAE,GAAG;;AAOlB,IAAK;EACH,WAAW,EAAE,KAAK;;AAOpB,KAAM;EACJ,gBAAgB,EAAE,GAAG;EACrB,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,IAAI", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index ba04a3a0c..a4e61ed4d 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -1,7 +1,8 @@ .navbar { - - //min-height: 65px; - background-color: #2B78E4; + padding-left: 10%; + padding-right: 10%; + min-height: 65px; + background-color: #3C5A99; .navbar-brand { color: white; @@ -13,19 +14,42 @@ border-radius: 50%; } } -} -.navbar-default .navbar-nav>li>a { + .navbar-nav > li > a { color: white; + font-size: 150%; + } +} + +.form-group { + input { + width: 200%; + margin-left: 15%; + @media(max-width:864px) { + width: 160%; + } + } } +.navbar-right, +.navbar-left { + padding-top: 5px; +} + + + + + +body { + padding-top: 100px; +} + + + + .asdf { - background-color: green; + background-color: red; height: 1500px; width: 50px; -} - -body { - padding-top: 70px; } \ No newline at end of file diff --git a/mynotes.md b/mynotes.md new file mode 100644 index 000000000..a91e13399 --- /dev/null +++ b/mynotes.md @@ -0,0 +1,3 @@ +navbar fixed to the top... viewport or webpage? + + \ No newline at end of file From 9d8dc05e3b49f800c2b651f96e3e524d073a0b83 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Tue, 26 Jul 2016 19:08:38 -0700 Subject: [PATCH 07/61] Update mynotes.md --- mynotes.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mynotes.md b/mynotes.md index a91e13399..57f3d3175 100644 --- a/mynotes.md +++ b/mynotes.md @@ -1,3 +1,6 @@ navbar fixed to the top... viewport or webpage? - \ No newline at end of file + + + + Address images flashing large on start up From e1fa830c30588d3db86f68a2edded67bf50c230c Mon Sep 17 00:00:00 2001 From: test Date: Wed, 27 Jul 2016 03:15:08 +0000 Subject: [PATCH 08/61] Revisit mobile section note --- mynotes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mynotes.md b/mynotes.md index 57f3d3175..7132b256e 100644 --- a/mynotes.md +++ b/mynotes.md @@ -4,3 +4,6 @@ navbar fixed to the top... viewport or webpage? Address images flashing large on start up + + + Revist mobile button \ No newline at end of file From a49e74f09ea759b9d48c67e4db35e2a7234d1aa5 Mon Sep 17 00:00:00 2001 From: test Date: Wed, 27 Jul 2016 06:59:20 +0000 Subject: [PATCH 09/61] story 2, About page - Main Photos satisifed --- about.html | 66 ++++++++++++++++++------------- assets/stylesheets/styles.css | 33 ++++++++++++---- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 50 ++++++++++++++++++----- mynotes.md | 5 ++- 5 files changed, 110 insertions(+), 46 deletions(-) diff --git a/about.html b/about.html index 8f6500a1f..d989f0442 100644 --- a/about.html +++ b/about.html @@ -18,46 +18,56 @@ - - - - - - + + + - - - - - -
-
+
+
+
+
+
+
+
+
+
+
+
+ + Large User Avatar + +
+ +
diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index cf95ea9c4..2d0b1c7dc 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -8,8 +8,7 @@ font-size: 200%; } .navbar .navbar-brand img { width: 35px; - height: 35px; - border-radius: 50%; } + height: 35px; } .navbar .navbar-nav > li > a { color: white; font-size: 150%; } @@ -26,11 +25,31 @@ padding-top: 5px; } body { - padding-top: 100px; } + padding-top: 65px; } -.asdf { - background-color: red; - height: 1500px; - width: 50px; } +.cover-banner { + height: 450px; + background-image: url("../images/hogwarts_small.jpg"); + background-size: 100% 100%; + background-repeat: no-repeat; } + +header { + position: relative; } + +.avatar-lg { + bottom: 25px; + left: 25px; + position: absolute; + z-index: 3; + border: 4px solid black; } + +.yy { + height: 55px; + background-color: green; } + +.qq { + height: 55px; + background-color: orange; + border: 2px solid black; } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index b2439d42a..55c3fc267 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,OAAQ;EACN,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EAEzB,qBAAc;IACZ,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IAEf,yBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,aAAa,EAAE,GAAG;EAItB,4BAAqB;IACnB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;;AAKjB,iBAAM;EACJ,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;EACd,yBAAwB;IAH5B,iBAAM;MAIA,KAAK,EAAE,IAAI;;AAKnB;YACa;EACX,WAAW,EAAE,GAAG;;AAOlB,IAAK;EACH,WAAW,EAAE,KAAK;;AAOpB,KAAM;EACJ,gBAAgB,EAAE,GAAG;EACrB,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,IAAI", +"mappings": "AAAA,OAAQ;EACN,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EAEzB,qBAAc;IACZ,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IAEf,yBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;EAKhB,4BAAqB;IACnB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;;AAKjB,iBAAM;EACJ,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;EACd,yBAAwB;IAH5B,iBAAM;MAIA,KAAK,EAAE,IAAI;;AAKnB;YACa;EACX,WAAW,EAAE,GAAG;;AAIlB,IAAK;EACH,WAAW,EAAE,IAAI;;AAOnB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;;AAI9B,MAAO;EACL,QAAQ,EAAE,QAAQ;;AAGpB,UAAW;EACT,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EAEV,MAAM,EAAE,eAAe;;AAOzB,GAAI;EACF,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,KAAK;;AAGzB,GAAI;EACF,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,MAAM;EACxB,MAAM,EAAE,eAAe", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index a4e61ed4d..a5cf51db4 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -11,7 +11,7 @@ img { width: 35px; height: 35px; - border-radius: 50%; + //border-radius: 50%; } } @@ -37,19 +37,51 @@ } +body { + padding-top: 65px; +} + +// +// TOP NAV END +// +.cover-banner { + height: 450px; + background-image: url("../images/hogwarts_small.jpg"); + background-size: 100% 100%; + background-repeat: no-repeat; + +} +header { + position: relative; +} -body { - padding-top: 100px; +.avatar-lg { + bottom: 25px; + left: 25px; + position: absolute; + z-index: 3; + // height: 45%; + border: 4px solid black; } +// +// TEMP NAV BUTTONS +// +.yy { + height: 55px; + background-color: green; +} + +.qq { + height: 55px; + background-color: orange; + border: 2px solid black; +} + + + - -.asdf { - background-color: red; - height: 1500px; - width: 50px; -} \ No newline at end of file diff --git a/mynotes.md b/mynotes.md index 7132b256e..11d4d9f55 100644 --- a/mynotes.md +++ b/mynotes.md @@ -6,4 +6,7 @@ navbar fixed to the top... viewport or webpage? Address images flashing large on start up - Revist mobile button \ No newline at end of file + Revist mobile button + + Have only the lower page change, since all have the same header? + From 05b2b3dde0d22752d9ddaf7b727fb87b6b85d87b Mon Sep 17 00:00:00 2001 From: Kenneth Date: Wed, 27 Jul 2016 16:54:48 -0700 Subject: [PATCH 10/61] Refractored --- about.html | 46 +++++++++------- assets/stylesheets/styles.css | 56 ++++++-------------- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 87 +++++++------------------------ 4 files changed, 62 insertions(+), 129 deletions(-) diff --git a/about.html b/about.html index d989f0442..3fdb5bb9c 100644 --- a/about.html +++ b/about.html @@ -26,7 +26,7 @@ - Danish Flag + Danish Flag Danebook @@ -50,25 +50,33 @@ - -
-
-
-
-
-
-
-
-
-
-
- - Large User Avatar - -
+ + + + +
+ Timeline + About + Photos123 + Friends542 + + Edit Profile +
+ + + + + +
+ +
+ - -
diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 2d0b1c7dc..a0ad340f5 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -1,28 +1,10 @@ -.navbar { - padding-left: 10%; - padding-right: 10%; - min-height: 65px; - background-color: #3C5A99; } - .navbar .navbar-brand { - color: white; - font-size: 200%; } - .navbar .navbar-brand img { - width: 35px; - height: 35px; } - .navbar .navbar-nav > li > a { - color: white; - font-size: 150%; } - -.form-group input { - width: 200%; - margin-left: 15%; } - @media (max-width: 864px) { - .form-group input { - width: 160%; } } - -.navbar-right, -.navbar-left { - padding-top: 5px; } +.navbar-default { + padding: 0 15%; } + .navbar-default .img-small { + width: 35px; + height: 35px; + display: inline-block; + margin-top: -6px; } body { padding-top: 65px; } @@ -31,25 +13,17 @@ body { height: 450px; background-image: url("../images/hogwarts_small.jpg"); background-size: 100% 100%; - background-repeat: no-repeat; } - -header { + background-repeat: no-repeat; position: relative; } -.avatar-lg { - bottom: 25px; - left: 25px; - position: absolute; - z-index: 3; - border: 4px solid black; } - -.yy { +.mid-nav button { height: 55px; - background-color: green; } + width: 55px; } -.qq { - height: 55px; - background-color: orange; - border: 2px solid black; } +.avatar-lg { + position: absolute; + bottom: 15px; + left: 15px; + height: 40%; } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index 55c3fc267..9cfa81744 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,OAAQ;EACN,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EAEzB,qBAAc;IACZ,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IAEf,yBAAI;MACF,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;EAKhB,4BAAqB;IACnB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;;AAKjB,iBAAM;EACJ,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;EACd,yBAAwB;IAH5B,iBAAM;MAIA,KAAK,EAAE,IAAI;;AAKnB;YACa;EACX,WAAW,EAAE,GAAG;;AAIlB,IAAK;EACH,WAAW,EAAE,IAAI;;AAOnB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;;AAI9B,MAAO;EACL,QAAQ,EAAE,QAAQ;;AAGpB,UAAW;EACT,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EAEV,MAAM,EAAE,eAAe;;AAOzB,GAAI;EACF,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,KAAK;;AAGzB,GAAI;EACF,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,MAAM;EACxB,MAAM,EAAE,eAAe", +"mappings": "AAAA,eAAgB;EACd,OAAO,EAAE,KAAK;EAEd,0BAAW;IACT,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,IAAI;;AAIpB,IAAK;EACH,WAAW,EAAE,IAAI;;AAInB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,GAAG", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index a5cf51db4..7f45e9b7d 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -1,87 +1,38 @@ -.navbar { - padding-left: 10%; - padding-right: 10%; - min-height: 65px; - background-color: #3C5A99; - - .navbar-brand { - color: white; - font-size: 200%; - - img { - width: 35px; - height: 35px; - //border-radius: 50%; - } - } - - .navbar-nav > li > a { - color: white; - font-size: 150%; - } -} - -.form-group { - input { - width: 200%; - margin-left: 15%; - @media(max-width:864px) { - width: 160%; - } - } +.navbar-default { + padding: 0 15%; + //background-color: #2B78E4; + .img-small { + width: 35px; + height: 35px; + display: inline-block; + margin-top: -6px; + } } -.navbar-right, -.navbar-left { - padding-top: 5px; -} - - body { padding-top: 65px; } -// -// TOP NAV END -// .cover-banner { height: 450px; background-image: url("../images/hogwarts_small.jpg"); background-size: 100% 100%; - background-repeat: no-repeat; - + background-repeat: no-repeat; + position: relative; } -header { - position: relative; +.mid-nav { + button { + height: 55px; + width: 55px; + } } .avatar-lg { - bottom: 25px; - left: 25px; position: absolute; - z-index: 3; - // height: 45%; - border: 4px solid black; -} - - -// -// TEMP NAV BUTTONS -// -.yy { - height: 55px; - background-color: green; -} - -.qq { - height: 55px; - background-color: orange; - border: 2px solid black; + bottom: 15px; + left: 15px; + height: 40%; } - - - - From 47550c906b3b49ca1cc9f7f2df6c786517cb4126 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Wed, 27 Jul 2016 19:53:13 -0700 Subject: [PATCH 11/61] about.html complete --- about.html | 179 ++++++++++++++++++++++++++---- assets/stylesheets/styles.css | 37 ++++-- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 62 +++++++++-- mynotes.md | 1 + 5 files changed, 241 insertions(+), 40 deletions(-) diff --git a/about.html b/about.html index 3fdb5bb9c..ff3579189 100644 --- a/about.html +++ b/about.html @@ -17,7 +17,7 @@
diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index a0ad340f5..bb9ebc1c6 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -1,13 +1,11 @@ -.navbar-default { - padding: 0 15%; } - .navbar-default .img-small { - width: 35px; - height: 35px; - display: inline-block; - margin-top: -6px; } - body { - padding-top: 65px; } + padding-top: 51px; } + +.navbar-default .img-small { + width: 35px; + height: 35px; + display: inline-block; + margin-top: -6px; } .cover-banner { height: 450px; @@ -23,7 +21,24 @@ body { .avatar-lg { position: absolute; bottom: 15px; - left: 15px; - height: 40%; } + left: 15px; } + .avatar-lg img { + height: 225px; } + .avatar-lg h3 { + font-weight: 900; + text-shadow: 0px 0px 15px white; + font-size: 200%; } + +.mid-title { + border: 2px solid black; + height: 80px; } + .mid-title h2 { + font-weight: bold; } + .mid-title a { + margin-top: 14px; } + +.bottom-box { + border: 2px solid black; + margin-bottom: 55px; } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index 9cfa81744..b5fff136c 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,eAAgB;EACd,OAAO,EAAE,KAAK;EAEd,0BAAW;IACT,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,IAAI;;AAIpB,IAAK;EACH,WAAW,EAAE,IAAI;;AAInB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,GAAG", +"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index 7f45e9b7d..2e2dce741 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -1,19 +1,21 @@ -.navbar-default { - padding: 0 15%; - //background-color: #2B78E4; +body { + padding-top: 51px; +} + + +.navbar-default { .img-small { width: 35px; height: 35px; display: inline-block; margin-top: -6px; } -} -body { - padding-top: 65px; } + + .cover-banner { height: 450px; background-image: url("../images/hogwarts_small.jpg"); @@ -29,10 +31,54 @@ body { } } -.avatar-lg { +.avatar-lg { position: absolute; bottom: 15px; left: 15px; - height: 40%; + img { + height: 225px; + } + h3 { + font-weight:900; + text-shadow: 0px 0px 15px white; + font-size: 200%; + } +} + +.mid-title { + border: 2px solid black; + height: 80px; + + h2 { + font-weight: bold; + } + + a { + margin-top: 14px; + } +} + + +.bottom-box { + border: 2px solid black; + margin-bottom: 55px; } + + + +// +// +// +// +// +//END OF ABOUT PAGE && UPPER PORTION TO BE RE-USED +// +// +// +// +// + + + + diff --git a/mynotes.md b/mynotes.md index 11d4d9f55..98e0fcefc 100644 --- a/mynotes.md +++ b/mynotes.md @@ -10,3 +10,4 @@ navbar fixed to the top... viewport or webpage? Have only the lower page change, since all have the same header? +--Add links to buttons \ No newline at end of file From 998a40f679db3f57f777c918d8f6bc9f52d62ef9 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Thu, 28 Jul 2016 14:29:13 -0700 Subject: [PATCH 12/61] about_edit.html complete --- about.html | 109 +++++++------- about_edit.html | 241 +++++++++++++++++++++++++----- assets/stylesheets/styles.css | 12 ++ assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 20 +++ friends.html | 123 ++++++++++++++- photos.html | 123 ++++++++++++++- timeline.html | 129 +++++++++++----- 8 files changed, 621 insertions(+), 138 deletions(-) diff --git a/about.html b/about.html index ff3579189..459259e98 100644 --- a/about.html +++ b/about.html @@ -1,7 +1,7 @@ - Welcome to Danebook + Welcome to Danebook - About @@ -68,11 +68,11 @@

- Timeline - About - Photos123 - Friends542 - Edit Profile + Timeline + About + Photos123 + Friends542 + Edit Profile
@@ -84,7 +84,7 @@

-

+

About

@@ -94,47 +94,47 @@

-
-
-

Basic Information

-
+
+
+

Basic Information

+
-
-
-

Birthday:

-
-
-

July 31st, 1980

-
+
+
+

Birthday:

- -
-
-

College:

-
-
-

Hogwarts College

-
-
- -
-
-

Hometown:

-
-
-

Godrick's Hollow, England

-
+
+

July 31st, 1980

+
+
+ +
+
+

College:

- -
-
-

Currently Lives:

-
-
-

Godrick's Hollow, England

-
-
+
+

Hogwarts College

+
+
+ +
+
+

Hometown:

+
+
+

Godrick's Hollow, England

+
+
+ +
+
+

Currently Lives:

+
+
+

Godrick's Hollow, England

+
+
@@ -161,7 +161,7 @@

Contact Information

555-123-4567

-
+
@@ -202,18 +202,13 @@

About Me

proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

- - - - - - - - - - - - + + + + + + + diff --git a/about_edit.html b/about_edit.html index c3fa1ea1e..16ebc7d7f 100644 --- a/about_edit.html +++ b/about_edit.html @@ -1,7 +1,7 @@ - Welcome to Danebook + Welcome to Danebook - About @@ -17,47 +17,209 @@ - - - +
+ + +
+ + + + + + + + + +
+ + +
+ Timeline + About + Photos123 + Friends542 + Edit Profile +
+
+ + + + +
+
+
+
+
+

+ Edit Profile +

+
+ + +
+
+ +
+
+

Basic Information

+
+
+ +
+
+

Birthday:

+
+
+

July 31st, 1980

+
+
+ +
+
+

College:

+
+
+ +
+
+ +
+
+

Hometown:

+
+
+ +
+
+ +
+
+

Currently Lives:

+
+
+ +
+
+ +
+
+

Contact Information

+
+
+ +
+
+

Email:

+
+
+

harry_potter@hogwarts.edu

+
+
+ +
+
+

Telephone:

+
+
+ +
+
+
+ + + + + +
+
+
+

Words to Live By

+
+
+ +
+
+ +
+
+ + +
+
+

About Me

+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ + + +
+ - -
-
-
@@ -71,4 +233,7 @@ - \ No newline at end of file + + + + diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index bb9ebc1c6..43c93abee 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -40,5 +40,17 @@ body { .bottom-box { border: 2px solid black; margin-bottom: 55px; } + .bottom-box input[type=text] { + width: 90%; } + +.save-changes { + border: 2px solid black; + margin: 45px 0 100px 0; + font-size: 200%; + height: 75px; } + +.asdf { + height: 500px; + background-color: green; } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index b5fff136c..ffdf5afc4 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI", +"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAMd,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index 2e2dce741..aead3aa6d 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -62,6 +62,26 @@ body { .bottom-box { border: 2px solid black; margin-bottom: 55px; + + //EDIT PROFILE -- text input widths + input[type=text] { + width: 90%; + } +} + +.save-changes { + border: 2px solid black; + margin: 45px 0 100px 0; + font-size: 200%; + height: 75px; +} + + + + +.asdf { + height: 500px; + background-color: green; } diff --git a/friends.html b/friends.html index e75acb1d5..c10611596 100644 --- a/friends.html +++ b/friends.html @@ -1 +1,122 @@ - \ No newline at end of file + + + + Welcome to Danebook - Friends + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ Timeline + About + Photos123 + Friends542 + Edit Profile +
+
+ + + + +
+
+
+
+
+

+ Friends +

+
+ + + +
+ + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/photos.html b/photos.html index e75acb1d5..22fe18924 100644 --- a/photos.html +++ b/photos.html @@ -1 +1,122 @@ - \ No newline at end of file + + + + Welcome to Danebook - Photos + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ Timeline + About + Photos123 + Friends542 + Edit Profile +
+
+ + + + +
+
+
+
+
+

+ Photos +

+
+ + + +
+ + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/timeline.html b/timeline.html index a0cacd1a1..38620dcee 100644 --- a/timeline.html +++ b/timeline.html @@ -1,11 +1,13 @@ - + - Welcome to Danebook + Welcome to Danebook - Timeline + + @@ -15,48 +17,95 @@ - - - +
+ + +
+ + + + + + + + + +
+ + +
+ Timeline + About + Photos123 + Friends542 + Edit Profile +
+
+ + + + +
+
+
+
+
+

+ TIMELINE! +

+
+ - +
+ + + + + + +
+
+ + + +
+ - -
-
-







































-
From 4dda5d582385703590ad17b79667a0557cfb31fa Mon Sep 17 00:00:00 2001 From: Kenneth Date: Thu, 28 Jul 2016 15:01:53 -0700 Subject: [PATCH 13/61] Story: timeline_page -- Post Creation Form Complete --- assets/stylesheets/styles.css | 11 ++++++++++ assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 23 +++++++++++++++++++++ timeline.html | 34 +++++++++++++++++++++++++++---- 4 files changed, 65 insertions(+), 5 deletions(-) diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 43c93abee..1fb9743b9 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -49,6 +49,17 @@ body { font-size: 200%; height: 75px; } +.post { + border: 2px solid black; } + .post header { + border-bottom: 2px solid black; } + .post .form-control { + margin: 20px 0 20px 0; } + .post footer { + border-top: 2px solid black; } + .post footer a { + margin: 15px 0 15px 0; } + .asdf { height: 500px; background-color: green; } diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index ffdf5afc4..d2d22027d 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAMd,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK", +"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAOd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAGhC,mBAAc;IACZ,MAAM,EAAE,aAAa;EAGvB,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index aead3aa6d..b66410a47 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -79,6 +79,29 @@ body { + +.post { + border: 2px solid black; + + header { + border-bottom: 2px solid black; + } + + .form-control { + margin: 20px 0 20px 0; + } + + footer { + border-top: 2px solid black; + a { + margin: 15px 0 15px 0; + } + } +} + + + + .asdf { height: 500px; background-color: green; diff --git a/timeline.html b/timeline.html index 38620dcee..0eac38655 100644 --- a/timeline.html +++ b/timeline.html @@ -85,20 +85,46 @@

- TIMELINE! + Timeline

- +
+ + +
+ + + + + +
+ + + +
+
+

+ Post +

+
+
+ +
+ +
+ - -
+
+
From 7d1336409fab30cab94c69a91e89578f8d14fb79 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Thu, 28 Jul 2016 19:52:20 -0700 Subject: [PATCH 14/61] temp save --- assets/stylesheets/styles.css | 19 ++++ assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 37 ++++++- mynotes.md | 8 +- timeline.html | 171 +++++++++++++++++++++++++++--- 5 files changed, 217 insertions(+), 20 deletions(-) diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 1fb9743b9..960b0a816 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -49,6 +49,10 @@ body { font-size: 200%; height: 75px; } +.col1 { + background-color: red; + height: 55px; } + .post { border: 2px solid black; } .post header { @@ -60,6 +64,21 @@ body { .post footer a { margin: 15px 0 15px 0; } +figure { + overflow: hidden; + height: 70px; + width: 70px; + display: inline-block; + margin: 15px 5px 25px auto; } + figure img { + display: inline-block; } + +.img-xs { + display: inline-block; } + +figcaption { + display: inline-block; } + .asdf { height: 500px; background-color: green; } diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index d2d22027d..9fda78d90 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAOd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAGhC,mBAAc;IACZ,MAAM,EAAE,aAAa;EAGvB,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK", +"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAGd,KAAM;EACJ,gBAAgB,EAAE,GAAG;EACrB,MAAM,EAAE,IAAI;;AAKd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAGhC,mBAAc;IACZ,MAAM,EAAE,aAAa;EAGvB,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAErB,MAAM,EAAE,kBAAkB;EAE1B,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAYvB,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index b66410a47..edf7dd7da 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -76,7 +76,10 @@ body { height: 75px; } - +.col1 { + background-color: red; + height: 55px; +} @@ -102,6 +105,38 @@ body { +figure { + overflow: hidden; + height: 70px; + width: 70px; + display: inline-block; + + margin: 15px 5px 25px auto; + + img { + display: inline-block; + } +} + +.img-xs { + display: inline-block; + //height: 115px; +} + + +figcaption { + display: inline-block; + +} + + + + + + + + + .asdf { height: 500px; background-color: green; diff --git a/mynotes.md b/mynotes.md index 98e0fcefc..f40da79bc 100644 --- a/mynotes.md +++ b/mynotes.md @@ -10,4 +10,10 @@ navbar fixed to the top... viewport or webpage? Have only the lower page change, since all have the same header? ---Add links to buttons \ No newline at end of file +--Add links to buttons + +--Fix your broken lorem ipsum snippet, fix div.col-xs-2 snipper, + + + +bootstrap components >> "Media Heading" \ No newline at end of file diff --git a/timeline.html b/timeline.html index 0eac38655..060cd650b 100644 --- a/timeline.html +++ b/timeline.html @@ -83,16 +83,13 @@

-
-

- Timeline -

-
+ +
-
+
asdf
@@ -100,24 +97,164 @@

- +
+ + + + +
+
+

+ Post +

+
+
+ +
+ +
+ + + + +
- - +
+
+
+ +
+ User's Extra-Small Avatar +
+
+ + Harry Potter + +
+ Posted on Thursday +
+
+ + + + + + +
+
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ +
+ + + + + + + + + + + + + + + + +
+
+ +
-

- Post -

+
+ +
+
+ + Harry Potter + +
+ Posted on Thursday +
+
+ +
- +
-
+ + + + + + @@ -132,7 +269,7 @@

- +




From 1a47a8e76b08bc89ff189992712a455dce2f4e79 Mon Sep 17 00:00:00 2001 From: test Date: Fri, 29 Jul 2016 04:26:13 +0000 Subject: [PATCH 15/61] temp save 2 --- assets/stylesheets/styles.css | 14 +-- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 23 ++++- mynotes.md | 5 +- timeline.html | 149 +++++++++++++----------------- 5 files changed, 96 insertions(+), 97 deletions(-) diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 960b0a816..9395df55a 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -49,10 +49,6 @@ body { font-size: 200%; height: 75px; } -.col1 { - background-color: red; - height: 55px; } - .post { border: 2px solid black; } .post header { @@ -68,8 +64,7 @@ figure { overflow: hidden; height: 70px; width: 70px; - display: inline-block; - margin: 15px 5px 25px auto; } + display: inline-block; } figure img { display: inline-block; } @@ -83,4 +78,11 @@ figcaption { height: 500px; background-color: green; } +.box, .b { + width: 200px; + height: 100px; } + +.b { + background-color: red; } + /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index 9fda78d90..1592bb878 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAGd,KAAM;EACJ,gBAAgB,EAAE,GAAG;EACrB,MAAM,EAAE,IAAI;;AAKd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAGhC,mBAAc;IACZ,MAAM,EAAE,aAAa;EAGvB,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAErB,MAAM,EAAE,kBAAkB;EAE1B,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAYvB,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK", +"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKjB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EACV,MAAM,EAAE,eAAe;EACvB,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAId,aAAc;EACZ,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,cAAc;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;;AAOd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAGhC,mBAAc;IACZ,MAAM,EAAE,aAAa;EAGvB,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAYvB,KAAM;EACJ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,KAAK;;AAKzB,QAAK;EACH,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;;AAGf,EAAG;EAED,gBAAgB,EAAE,GAAG", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index edf7dd7da..00a1da5ab 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -76,10 +76,7 @@ body { height: 75px; } -.col1 { - background-color: red; - height: 55px; -} + @@ -111,7 +108,7 @@ figure { width: 70px; display: inline-block; - margin: 15px 5px 25px auto; + //margin: 15px 5px 25px auto; img { display: inline-block; @@ -144,6 +141,22 @@ figcaption { +.box { + width: 200px; + height: 100px; +} + +.b { + @extend .box; + background-color: red; +} + + + + + + + // // diff --git a/mynotes.md b/mynotes.md index f40da79bc..cceced333 100644 --- a/mynotes.md +++ b/mynotes.md @@ -14,6 +14,9 @@ navbar fixed to the top... viewport or webpage? --Fix your broken lorem ipsum snippet, fix div.col-xs-2 snipper, +--Remove BRs + +bootstrap components >> "Media Heading" + -bootstrap components >> "Media Heading" \ No newline at end of file diff --git a/timeline.html b/timeline.html index 060cd650b..ac8a1790a 100644 --- a/timeline.html +++ b/timeline.html @@ -77,7 +77,7 @@

- +
@@ -89,8 +89,8 @@


-
asdf - +
+
@@ -121,35 +121,37 @@

+ - + + +
-
- -
- User's Extra-Small Avatar -
-
+ + +
- Harry Potter +

+ Harry Potter +

- Posted on Thursday + Posted on Thursday
-
- - - - - - -
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, @@ -176,17 +178,38 @@

+ + + +
+ +
+
+ + +
+ +

+ Harry Potter +

+
+
+ Posted on Thursday +
+
+
- - - - - + -
-
- - -
-
-
- -
-
- - Harry Potter - -
- Posted on Thursday -
-
-
- - -
- -
- -
- - - - - - - - -
From 25392193383eec40f058f1ed700c15a00b0c9b63 Mon Sep 17 00:00:00 2001 From: test Date: Fri, 29 Jul 2016 10:15:58 +0000 Subject: [PATCH 16/61] temp save 3 --- about.html | 37 +++++++++++++++++---------- about_edit.html | 42 ++++++++++++++++++------------- assets/stylesheets/styles.css | 1 - assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 2 +- friends.html | 21 +++++++++------- mynotes.md | 2 ++ photos.html | 22 ++++++++++------ timeline.html | 11 +++++--- 9 files changed, 85 insertions(+), 55 deletions(-) diff --git a/about.html b/about.html index 459259e98..09b2bcd4b 100644 --- a/about.html +++ b/about.html @@ -15,7 +15,7 @@ - +

diff --git a/about_edit.html b/about_edit.html index 16ebc7d7f..235d959a1 100644 --- a/about_edit.html +++ b/about_edit.html @@ -83,15 +83,15 @@

-
-

- Edit Profile -

-
- - - -
+ +
+
+

+ About +

+
+
+
@@ -123,7 +123,7 @@

Basic Information

Hometown:

- +
@@ -132,7 +132,7 @@

Basic Information

Currently Lives:

- +
@@ -157,7 +157,7 @@

Contact Information

Telephone:

-
+
@@ -176,7 +176,7 @@

Words to Live By

- +
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -263,7 +739,6 @@
-




From 68a9a117845658b400329013d5ac8bcbedd1c25b Mon Sep 17 00:00:00 2001 From: test Date: Sat, 30 Jul 2016 07:38:05 +0000 Subject: [PATCH 19/61] add save changes button @ editprofile.html --- about_edit.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/about_edit.html b/about_edit.html index 8e2029b4d..c8e0a1a63 100644 --- a/about_edit.html +++ b/about_edit.html @@ -210,6 +210,16 @@

About Me

+ + + + From 133917331101e1aed36623f6ead8d9b9e36f07d0 Mon Sep 17 00:00:00 2001 From: test Date: Sat, 30 Jul 2016 08:00:04 +0000 Subject: [PATCH 20/61] fix timeline.html's about section --- timeline.html | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/timeline.html b/timeline.html index 4dd9832ed..253a03241 100644 --- a/timeline.html +++ b/timeline.html @@ -100,18 +100,16 @@

-
-
- - +
+

About

- - + +
@@ -133,6 +131,7 @@

Born on: July 31st, 1980
+
From 67e31923606699d39863a1d9a53c2cc65377b0e8 Mon Sep 17 00:00:00 2001 From: test Date: Sun, 31 Jul 2016 07:20:38 +0000 Subject: [PATCH 21/61] almost finish photos.html --- assets/stylesheets/styles.css | 20 +- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 32 +-- friends.html | 322 ++++++++++++++++++++++-------- mynotes.md | 10 +- photos.html | 33 ++- 6 files changed, 309 insertions(+), 110 deletions(-) diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 92c736d36..beada94f0 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -74,11 +74,21 @@ figure { figcaption { display: inline-block; } -.box, .b { - width: 200px; - height: 100px; } +.img-caption { + position: relative; } + +.img-caption:hover .pub-date { + visibility: visible; } -.b { - background-color: red; } +.pub-date { + position: absolute; + width: 85%; + bottom: 15px; + left: 18px; + box-sizing: border-box; + padding: 0 30px; + background-color: black; + color: white; + opacity: .5; } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index 8e649675d..b041b5b82 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKnB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAOhB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EAEV,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAQd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAOhC,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAYvB,QAAK;EACH,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;;AAGf,EAAG;EAED,gBAAgB,EAAE,GAAG", +"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKnB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAOhB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EAEV,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAQd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAOhC,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAOvB,YAAa;EAEX,QAAQ,EAAE,QAAQ;;AAIpB,4BAA6B;EAC3B,UAAU,EAAE,OAAO;;AAKrB,SAAU;EAER,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,UAAU,EAAE,UAAU;EACtB,OAAO,EAAE,MAAM;EAEf,gBAAgB,EAAE,KAAK;EACvB,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,EAAE", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index 74b17098f..8b1a06c19 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -138,25 +138,31 @@ figcaption { - - - - - -.box { - width: 200px; - height: 100px; -} - -.b { - @extend .box; - background-color: red; +.img-caption { + + position: relative; } +.img-caption:hover .pub-date { + visibility: visible; +} +.pub-date { + // visibility: hidden; + position: absolute; + width: 85%; + bottom: 15px; + left: 18px; + box-sizing: border-box; + padding: 0 30px; + // margin: 0 10px; + background-color: black; + color: white; + opacity: .5; +} diff --git a/friends.html b/friends.html index ae5e7a537..b906a30a9 100644 --- a/friends.html +++ b/friends.html @@ -1,51 +1,55 @@ - + + - - Welcome to Danebook - Friends - - - - - - - - - - - - - - - - - -
- + + +
+ + @@ -53,76 +57,220 @@ - -
- + -
- Timeline - About - Photos123 - Friends542 - Edit Profile -
-
+
+ Timeline + About + Photos123 + Friends542 + Edit Profile +
+ -
-
-
- - - - - + + + + + - + - - + + + \ No newline at end of file diff --git a/mynotes.md b/mynotes.md index 1ec370e33..8eca0aba8 100644 --- a/mynotes.md +++ b/mynotes.md @@ -20,7 +20,15 @@ navbar fixed to the top... viewport or webpage? --add underlines on a href links -bootstrap components >> "Media Heading" +--
+ +--minimum-height vs regular height? + +--use glyphicons +--revisit image caption + +bootstrap components >> "Media Heading" +

...

diff --git a/photos.html b/photos.html index 17708dd23..bd468820b 100644 --- a/photos.html +++ b/photos.html @@ -4,7 +4,7 @@ Welcome to Danebook - Photos - + @@ -92,8 +92,35 @@

Photos

-
- Panel content +
+ + + + + + + + + + + + + + + + + +
From fbaa3faeedc01a3d445402cbf5076033290cd3cb Mon Sep 17 00:00:00 2001 From: test Date: Sun, 31 Jul 2016 22:23:11 +0000 Subject: [PATCH 22/61] temp save --- about.html | 4 +- friends.html | 4 +- mynotes.md | 66 +++++++++++++++++++++++ photos.html | 150 +++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 217 insertions(+), 7 deletions(-) diff --git a/about.html b/about.html index f1ec5ab8a..e7cbf494a 100644 --- a/about.html +++ b/about.html @@ -95,13 +95,13 @@

-
+

Basic Information

-
+

Birthday:

diff --git a/friends.html b/friends.html index b906a30a9..fbe3ead8e 100644 --- a/friends.html +++ b/friends.html @@ -216,9 +216,9 @@

-

+

Hermoine Granger -

+

432 Friends

diff --git a/mynotes.md b/mynotes.md index 8eca0aba8..7106c8e05 100644 --- a/mynotes.md +++ b/mynotes.md @@ -28,6 +28,72 @@ navbar fixed to the top... viewport or webpage? --revisit image caption +--
VS
+ + + +-- FOR ABOUT PAGES *** +
+
...
+
...
+
+*** + + + + + + +
Link + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~ + +CSS > Search for > + "Horizontal form group sizes" + "Horizontal form" + "Showing and hiding content" + +~~~~~~~~~~~~~~~~~~~~~~~ +--Must go back to -- +http://getbootstrap.com/javascript/#tabs +------------------------------------------- + +components > Search for > + " Star" + "Button addons" + "Pills" + "Brand image" + "Aligned links" + "Jumbotron" + "class="page-header" FOR TIMELINE + "Thumbnials" >>
+ "ON LOGIN"... >> .alert-success + .alert-dismissible + "Nested media heading" >> TIMELINE.html + "Contextual alternatives" + +http://getbootstrap.com/javascript/#js-overview > Search for > + "Collapse" + "Accordion example" + "Static tooltip" + + + +inline form stuff >> http://www.bootply.com/127826 + + + +**Check SB's bootstrap + + + + + + + bootstrap components >> "Media Heading" diff --git a/photos.html b/photos.html index bd468820b..27cadd87c 100644 --- a/photos.html +++ b/photos.html @@ -92,13 +92,41 @@

Photos

-
+
- - + + + From 655cd58b5aefdd390237886853fae66b67988f61 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Mon, 1 Aug 2016 03:10:11 -0700 Subject: [PATCH 23/61] Stories complete --- about.html | 4 + about_edit.html | 14 +- assets/stylesheets/styles.css | 50 +-- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 97 ++++-- friends.html | 513 +++++++++++++++++++----------- mynotes.md | 24 ++ photos.html | 44 ++- timeline.html | 8 +- 9 files changed, 524 insertions(+), 232 deletions(-) diff --git a/about.html b/about.html index e7cbf494a..418d0341c 100644 --- a/about.html +++ b/about.html @@ -59,9 +59,11 @@
@@ -87,9 +89,11 @@

+

About

+
diff --git a/about_edit.html b/about_edit.html index c8e0a1a63..d87d0f2a2 100644 --- a/about_edit.html +++ b/about_edit.html @@ -60,9 +60,11 @@
@@ -85,14 +87,16 @@


-
+ -
-
+
+
+

About

+
@@ -213,7 +217,7 @@

About Me

@@ -234,7 +238,7 @@

About Me

-
+
diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index beada94f0..9370c6494 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -1,5 +1,8 @@ -body { - padding-top: 51px; } +.pts, .panel-heading .panel-title, .navbar-header span, .navbar-right li a { + color: white !important; } + +.panel-heading { + background-color: #337ab7 !important; } .rs15 { margin-top: 15px; } @@ -10,11 +13,17 @@ body { .rs45 { margin-top: 45px; } -.navbar-default .img-small { - width: 35px; - height: 35px; - display: inline-block; - margin-top: -6px; } +body { + padding-top: 51px; + background-color: #eee; } + +.navbar-default { + background-color: #337ab7; } + .navbar-default .img-small { + width: 35px; + height: 35px; + display: inline-block; + margin-top: -6px; } .cover-banner { height: 450px; @@ -33,10 +42,13 @@ body { left: 15px; } .avatar-lg img { height: 225px; } + .avatar-lg a { + text-decoration: none; } .avatar-lg h3 { font-weight: 900; - text-shadow: 0px 0px 15px white; - font-size: 200%; } + text-shadow: 0px 0px 15px black; + font-size: 200%; + color: white; } .mid-title { border: 2px solid black; @@ -74,21 +86,17 @@ figure { figcaption { display: inline-block; } -.img-caption { - position: relative; } - .img-caption:hover .pub-date { - visibility: visible; } + display: block; } .pub-date { + display: none; } + +.vertical-align { position: absolute; - width: 85%; - bottom: 15px; - left: 18px; - box-sizing: border-box; - padding: 0 30px; - background-color: black; - color: white; - opacity: .5; } + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } /*# sourceMappingURL=styles.css.map */ diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index b041b5b82..065c564c9 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,IAAK;EACH,WAAW,EAAE,IAAI;;AAKnB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAOhB,0BAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;AAQpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAEd,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;;AAIrB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EAEV,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAQd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAOhC,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAOvB,YAAa;EAEX,QAAQ,EAAE,QAAQ;;AAIpB,4BAA6B;EAC3B,UAAU,EAAE,OAAO;;AAKrB,SAAU;EAER,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,UAAU,EAAE,UAAU;EACtB,OAAO,EAAE,MAAM;EAEf,gBAAgB,EAAE,KAAK;EACvB,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,EAAE", +"mappings": "AAIA,0EAAK;EAEH,KAAK,EAAE,gBAAgB;;AAGzB,cAAe;EACb,gBAAgB,EAAE,kBAAe;;AAYnC,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAYlB,IAAK;EACH,WAAW,EAAE,IAAI;EACjB,gBAAgB,EAAE,IAAI;;AAKxB,eAAgB;EACd,gBAAgB,EAlDZ,OAAO;EAmDX,0BAAW;IACT,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,IAAI;;AA6BpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAGd,YAAE;IACN,eAAe,EAAE,IAAI;EAGjB,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,KAAK;;AAIlB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EAEV,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAQd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAOhC,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AASvB,4BAA6B;EAC3B,OAAO,EAAE,KAAK;;AAGhB,SAAU;EACR,OAAO,EAAE,IAAI;;AAOf,eAAgB;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,iBAAiB,EAAE,gBAAgB;EACnC,aAAa,EAAE,gBAAgB;EAC/B,SAAS,EAAE,gBAAgB", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index 8b1a06c19..4efc128a1 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -1,7 +1,23 @@ -body { - padding-top: 51px; +//panel theme color - light blue +$ptc: #337ab7; + +//panel title styling +.pts { + + color: white !important; } +.panel-heading { + background-color: $ptc !important; + .panel-title { + @extend .pts; + } +} + + + + + //For space between rows .rs15 { @@ -19,7 +35,21 @@ body { -.navbar-default { + + + + + + +body { + padding-top: 51px; + background-color: #eee; + +} + + +.navbar-default { + background-color: $ptc; .img-small { width: 35px; height: 35px; @@ -30,6 +60,27 @@ body { } +.navbar-header { + span { + @extend .pts; + } +} + +.navbar-right { + li { + a { + @extend .pts; + } + } +} + + + + + + + + .cover-banner { @@ -54,10 +105,16 @@ body { img { height: 225px; } + + a { +text-decoration: none; + } + h3 { font-weight:900; - text-shadow: 0px 0px 15px white; + text-shadow: 0px 0px 15px black; font-size: 200%; + color: white; } } @@ -138,34 +195,34 @@ figcaption { -.img-caption { - - position: relative; -} .img-caption:hover .pub-date { - visibility: visible; + display: block; } +.pub-date { + display: none; +} -.pub-date { - // visibility: hidden; + + + +.vertical-align { position: absolute; - width: 85%; - bottom: 15px; - left: 18px; - box-sizing: border-box; - padding: 0 30px; - // margin: 0 10px; - background-color: black; - color: white; - opacity: .5; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + + + + // // // diff --git a/friends.html b/friends.html index fbe3ead8e..17c2e8a54 100644 --- a/friends.html +++ b/friends.html @@ -1,55 +1,50 @@ - - + - - - Welcome to Danebook - Friends - - - - - - - - - - - - - - - - - - + + +

+ @@ -57,220 +52,378 @@ - -
- - - -
- Timeline - About - Photos123 - Friends542 - Edit Profile -
-
+
+ Timeline + About + Photos123 + Friends542 + Edit Profile +
+ - -
-
-
-
-

+
+
+
+ + +
+
+
+

Friends -

-
- +

+
+
+
-
- - - - - - - - - - - - - - - +
  • + +
  • - - + -
    + +
  • + +
  • - - User's Medium Photo - - -

    + + + + + + + + + + + + + +

    - - - User's Medium Photo - - - -

    + + + +
  • + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + +
    + + + + + + - - Unfriend Me - -

    +
    - - - User's Medium Photo - - - -

    + + + +
  • + +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    - - User's Medium Photo - + + + + + - -

    + + + + + + + +

    432 Friends

    -
    - - - Unfriend Me - -
    +
  • + +
  • + +
    -
    -
    - - - -
    + + + +
    + + + + + -
    -

    -
    -
    + + + + + + + + + + + +
    +

    + +
    - - - - - + + + + + - + - - - + + \ No newline at end of file diff --git a/mynotes.md b/mynotes.md index 7106c8e05..5b87390a6 100644 --- a/mynotes.md +++ b/mynotes.md @@ -1,3 +1,27 @@ +1) Using forms properly +2) Screen Reader stuff +3) Use glyphcons (especially for mobile) +4) Really nuance different mobile techniques +5) Navbar "next level" -- sb +6) Have cover caption not increase size +7) Add an "extra bottom margin" to the bottom of the page, to give the page some room to breath. +8) Change user's MAIN AVATAR PICTURE to be SQUARE +9) Pills or Tabs over buttons for mid menu +10) Read up/Revisit forms + + +
    ...
    + +For "user's name" form/inputs +

    Capitalized text.

    + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + navbar fixed to the top... viewport or webpage? diff --git a/photos.html b/photos.html index 27cadd87c..17ab30fe2 100644 --- a/photos.html +++ b/photos.html @@ -58,10 +58,12 @@ @@ -88,16 +90,36 @@

    +

    Photos

    +
    -
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - From 4733f492da8d22f61e06d216836328dd143bad10 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Mon, 1 Aug 2016 03:11:19 -0700 Subject: [PATCH 24/61] update mynotes.md --- mynotes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mynotes.md b/mynotes.md index 5b87390a6..e804f1b2c 100644 --- a/mynotes.md +++ b/mynotes.md @@ -1,3 +1,5 @@ +**Images flashing large on start up ** + 1) Using forms properly 2) Screen Reader stuff 3) Use glyphcons (especially for mobile) From f99e8ac057946a5b8264b9dd101c32b80b7ee284 Mon Sep 17 00:00:00 2001 From: test Date: Mon, 1 Aug 2016 23:47:07 +0000 Subject: [PATCH 25/61] Version 1 complete --- about.html | 358 +++++------ about_edit.html | 371 +++++------- assets/stylesheets/styles.css | 15 +- assets/stylesheets/styles.css.map | 2 +- assets/stylesheets/styles.scss | 74 +-- friends.html | 607 ++++++------------- mynotes.md | 3 +- photos.html | 526 ++++++---------- timeline.html | 959 +++++++++++------------------- 9 files changed, 1058 insertions(+), 1857 deletions(-) diff --git a/about.html b/about.html index 418d0341c..1a6a94ae1 100644 --- a/about.html +++ b/about.html @@ -1,244 +1,194 @@ - + - - Welcome to Danebook - About - - - - - - - - - - - - - - - - - - - - - - - - - -
    - +
    + Timeline About Photos123 Friends542 Edit + Profile +
    +
    -
    -
    -
    - -
    -
    -
    -

    - About -

    -
    -
    -
    -
    -
    - -
    -
    -

    Basic Information

    -
    -
    - -
    -
    -

    Birthday:

    +
    +
    +
    +
    +
    +
    +

    About

    +
    +
    +
    +
    +
    +
    +
    +

    Basic Information

    +
    -
    -

    July 31st, 1980

    -
    -
    - -
    -
    -

    College:

    +
    +
    +

    Birthday:

    +
    +
    +

    July 31st, 1980

    +
    -
    -

    Hogwarts College

    -
    -
    - -
    -
    -

    Hometown:

    +
    +
    +

    College:

    +
    +
    +

    Hogwarts College

    +
    -
    -

    Godrick's Hollow, England

    -
    -
    - -
    -
    -

    Currently Lives:

    +
    +
    +

    Hometown:

    +
    +
    +

    Godrick's Hollow, England

    +
    -
    -

    Godrick's Hollow, England

    -
    -
    - - -
    -
    -

    Contact Information

    -
    -
    - +
    +

    Currently Lives:

    +
    +
    +

    Godrick's Hollow, England

    +
    +
    + + +
    +
    +

    Contact Information

    +
    +

    Email:

    harry_potter@hogwarts.edu

    -
    +
    -

    Telephone:

    555-123-4567

    -
    -
    -
    - - - - - -
    +
    +
    +
    + + +

    Words to Live By

    -
    +
    -
    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    -
    -
    - - -
    +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis + aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint + occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum.

    +
    +
    +

    About Me

    -
    +
    -
    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    -
    -
    -
    -
    - - - - - - - - +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis + aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint + occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum.

    +
    +
    - - -
    -
    - -
    +
    +

    +
    - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/about_edit.html b/about_edit.html index d87d0f2a2..85294fb65 100644 --- a/about_edit.html +++ b/about_edit.html @@ -1,262 +1,199 @@ - + + - - Welcome to Danebook - About - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - +
    + Timeline About Photos123 + Friends542 Edit Profile +
    +
    -
    -
    -
    - - -
    -
    -
    -

    - About -

    -
    -
    -
    -
    -
    - -
    -
    -

    Basic Information

    -
    -
    - -
    -
    -

    Birthday:

    +
    +
    +
    +
    +
    +
    +

    About

    +
    +
    +
    +
    +
    +
    +
    +

    Basic Information

    +
    -
    -

    July 31st, 1980

    -
    -
    - -
    -
    -

    College:

    +
    +
    +

    Birthday:

    +
    +
    +

    July 31st, 1980

    +
    -
    - -
    -
    - -
    -
    -

    Hometown:

    +
    +
    +

    College:

    +
    +
    + +
    -
    - -
    -
    - -
    -
    -

    Currently Lives:

    +
    +
    +

    Hometown:

    +
    +
    + +
    -
    - -
    -
    - - -
    -
    -

    Contact Information

    -
    -
    - +
    +

    Currently Lives:

    +
    +
    + +
    +
    + + +
    +
    +

    Contact Information

    +
    +

    Email:

    harry_potter@hogwarts.edu

    -
    +
    -

    Telephone:

    -
    -
    -
    - - - - - -
    +
    +
    +
    + + +

    Words to Live By

    -
    +
    -
    - -
    -
    - - -
    +proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +
    +
    +

    About Me

    -
    +
    -
    - -
    -
    -
    - - - - -
    - - - - - - - - +proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +
    +
    -
    - -
    -
    - -

    +
    + +
    +
    + +
    + + - - - - - - - - - + + - - - - - - - - - + + + + + \ No newline at end of file diff --git a/assets/stylesheets/styles.css b/assets/stylesheets/styles.css index 9370c6494..7ddb640d2 100644 --- a/assets/stylesheets/styles.css +++ b/assets/stylesheets/styles.css @@ -86,11 +86,22 @@ figure { figcaption { display: inline-block; } +.word { + position: relative; } + .img-caption:hover .pub-date { - display: block; } + visibility: visible; } .pub-date { - display: none; } + visibility: hidden; + background-color: black; + color: white; + bottom: -7px; + left: 3%; + width: 94%; + display: inline; + position: absolute; + border-radius: 5px; } .vertical-align { position: absolute; diff --git a/assets/stylesheets/styles.css.map b/assets/stylesheets/styles.css.map index 065c564c9..a07cd7224 100644 --- a/assets/stylesheets/styles.css.map +++ b/assets/stylesheets/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAIA,0EAAK;EAEH,KAAK,EAAE,gBAAgB;;AAGzB,cAAe;EACb,gBAAgB,EAAE,kBAAe;;AAYnC,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAYlB,IAAK;EACH,WAAW,EAAE,IAAI;EACjB,gBAAgB,EAAE,IAAI;;AAKxB,eAAgB;EACd,gBAAgB,EAlDZ,OAAO;EAmDX,0BAAW;IACT,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,IAAI;;AA6BpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAGd,YAAE;IACN,eAAe,EAAE,IAAI;EAGjB,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,KAAK;;AAIlB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EAEV,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAQd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAOhC,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AASvB,4BAA6B;EAC3B,OAAO,EAAE,KAAK;;AAGhB,SAAU;EACR,OAAO,EAAE,IAAI;;AAOf,eAAgB;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,iBAAiB,EAAE,gBAAgB;EACnC,aAAa,EAAE,gBAAgB;EAC/B,SAAS,EAAE,gBAAgB", +"mappings": "AAIA,0EAAK;EAEH,KAAK,EAAE,gBAAgB;;AAGzB,cAAe;EACb,gBAAgB,EAAE,kBAAe;;AAYnC,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAGlB,KAAM;EACJ,UAAU,EAAE,IAAI;;AAYlB,IAAK;EACH,WAAW,EAAE,IAAI;EACjB,gBAAgB,EAAE,IAAI;;AAKxB,eAAgB;EACd,gBAAgB,EAlDZ,OAAO;EAmDX,0BAAW;IACT,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,IAAI;;AA6BpB,aAAc;EACZ,MAAM,EAAE,KAAK;EACb,gBAAgB,EAAE,mCAAmC;EACrD,eAAe,EAAE,SAAS;EAC1B,iBAAiB,EAAE,SAAS;EAC5B,QAAQ,EAAE,QAAQ;;AAIhB,eAAO;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIf,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACR,cAAI;IACH,MAAM,EAAE,KAAK;EAGd,YAAE;IACN,eAAe,EAAE,IAAI;EAGjB,aAAG;IACD,WAAW,EAAC,GAAG;IACf,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,KAAK;;AAIlB,UAAW;EACT,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,IAAI;EAEZ,aAAG;IACD,WAAW,EAAE,IAAI;EAGnB,YAAE;IACA,UAAU,EAAE,IAAI;;AAKpB,WAAY;EAEV,aAAa,EAAE,IAAI;EAGnB,4BAAiB;IACf,KAAK,EAAE,GAAG;;AAQd,KAAM;EACJ,MAAM,EAAE,eAAe;EAEvB,YAAO;IACL,aAAa,EAAE,eAAe;EAOhC,YAAO;IACL,UAAU,EAAE,eAAe;IACzB,cAAE;MACA,MAAM,EAAE,aAAa;;AAQ7B,MAAO;EACL,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EAIrB,UAAI;IACJ,OAAO,EAAE,YAAY;;AAIvB,OAAQ;EACN,OAAO,EAAE,YAAY;;AAKvB,UAAW;EACT,OAAO,EAAE,YAAY;;AAMvB,KAAM;EACJ,QAAQ,EAAE,QAAQ;;AAKpB,4BAA6B;EAC3B,UAAU,EAAE,OAAO;;AAGrB,SAAU;EACR,UAAU,EAAE,MAAM;EAEhB,gBAAgB,EAAE,KAAK;EAEvB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,EAAE;EACR,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,MAAM;EACf,QAAQ,EAAE,QAAQ;EAClB,aAAa,EAAE,GAAG;;AAOtB,eAAgB;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,iBAAiB,EAAE,gBAAgB;EACnC,aAAa,EAAE,gBAAgB;EAC/B,SAAS,EAAE,gBAAgB", "sources": ["styles.scss"], "names": [], "file": "styles.css" diff --git a/assets/stylesheets/styles.scss b/assets/stylesheets/styles.scss index 4efc128a1..5cf19b6ed 100644 --- a/assets/stylesheets/styles.scss +++ b/assets/stylesheets/styles.scss @@ -15,11 +15,7 @@ $ptc: #337ab7; } - - - - -//For space between rows +//my "palette": space between rows .rs15 { margin-top: 15px; } @@ -33,13 +29,7 @@ $ptc: #337ab7; } - - - - - - - +//CSS begins body { padding-top: 51px; @@ -75,14 +65,6 @@ body { } - - - - - - - - .cover-banner { height: 450px; background-image: url("../images/hogwarts_small.jpg"); @@ -133,7 +115,6 @@ text-decoration: none; .bottom-box { - // border: 2px solid black; margin-bottom: 55px; //EDIT PROFILE -- text input widths @@ -143,9 +124,6 @@ text-decoration: none; } - - - .post { border: 2px solid black; @@ -166,8 +144,6 @@ text-decoration: none; } - - figure { overflow: hidden; height: 70px; @@ -189,25 +165,30 @@ figure { figcaption { display: inline-block; - -} - - - + } +.word { + position: relative; + } .img-caption:hover .pub-date { - display: block; + visibility: visible; } .pub-date { - display: none; -} - - - + visibility: hidden; + background-color: black; + + color: white; + bottom: -7px; + left: 3%; + width: 94%; + display: inline; + position: absolute; + border-radius: 5px; +} .vertical-align { position: absolute; @@ -219,22 +200,3 @@ figcaption { - - - - -// -// -// -// -// -//END OF ABOUT PAGE && UPPER PORTION TO BE RE-USED -// -// -// -// -// - - - - diff --git a/friends.html b/friends.html index 17c2e8a54..e2be92c0e 100644 --- a/friends.html +++ b/friends.html @@ -1,429 +1,196 @@ - + - - Welcome to Danebook - Photos - - - - - - - - - - - - - - - - - - - - - - - - - -
    - +
    + Timeline About Photos123 Friends542 Edit Profile +
    +
    -
    -
    -
    - +
    +
    +
    +
    +
    +
    +

    Friends

    +
    +
    +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    + +
    + +
    + +
    +
    -
    -
    -
    -

    - Friends -

    -
    -
    -
    - - - - -
    -
    - - - - - -
    - - - - - - - - -
    - - - - - -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - - - - - - - - -
    - - - - - -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    - - - - - - - - -
    - - - - - -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/mynotes.md b/mynotes.md index e804f1b2c..ba88d1624 100644 --- a/mynotes.md +++ b/mynotes.md @@ -1,4 +1,6 @@ +**SUBLIME CODE CLEANUP** **Images flashing large on start up ** +**Clean up extraneous/unused** 1) Using forms properly 2) Screen Reader stuff @@ -112,7 +114,6 @@ inline form stuff >> http://www.bootply.com/127826 -**Check SB's bootstrap diff --git a/photos.html b/photos.html index 17ab30fe2..027915b9b 100644 --- a/photos.html +++ b/photos.html @@ -1,341 +1,199 @@ - + + - - Welcome to Danebook - Photos - - - - - - - - - - - - - - - - - - - - - - - - - -
    - +
    + Timeline About Photos123 Friends542 Edit + Profile +
    +
    -
    -
    - - - - -
    - - - - - - - - - - - - - - - + + + + + + + \ No newline at end of file diff --git a/timeline.html b/timeline.html index 16d2b329c..11fe512b0 100644 --- a/timeline.html +++ b/timeline.html @@ -1,368 +1,262 @@ - + - - Welcome to Danebook - Timeline - - - - - - - - - - - - - - - - - - - - - - - - - -
    - +
    + Timeline About + Photos123 Friends542 Edit + Profile +
    +
    -
    -
    -
    - -
    - - - - -
    +
    +
    +
    + +
    + + + +
    - - - - - - - +
    -
    -
    -
    -
    -

    - About -

    +
    +
    +
    +
    +

    About

    +
    + + + + + + + + + + + + + + + + + +
    Born on:July 31st, 1980
    Went to school at:Hogwards
    Hometown:Godrick's Hollow, England
    Currently Lives:Godrick's Hollow, England
    +
    - - - - - - - - - - - - - - - - - - - - - - -
    Born on:July 31st, 1980
    Went to school at:Hogwards
    Hometown:Godrick's Hollow, England
    Currently Lives:Godrick's Hollow, England
    - -
    - - -
    -
    - - - -
    -
    -
    -
    -

    - Photos - - 123 - -

    +
    + +
    +
    +
    +
    +

    Photos 123

    +
    + + + + + + + + + + + + + + + + +
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    + +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - User's Medium Photo - - User's Medium Photo - - User's Medium Photo -
    - User's Medium Photo - - User's Medium Photo - - User's Medium Photo -
    - User's Medium Photo - - User's Medium Photo - - User's Medium Photo -
    - - + +
    +
    +
    +
    +

    Friends 542

    +
    + + + + + + + + + + + +
    + + + Ron Weasley + + + + Ginny Weasley + + + + Hermoine Granger +
    + + + Warren Buffet + + + + Uncle Bob + + + + Aunt Sue +
    + +
    -
    -
    -
    - - - - - - - - -
    -
    +
    +
    + + +
    + +
    -

    - Friends - - 542 - -

    +

    Post

    - - - - - - - - - - - - - - - - - - - - -
    - - User's Medium Photo - - Ron Weasley - - User's Medium Photo - Ginny Weasley - - User's Medium Photo - Hermoine Granger -
    - User's Medium Photo - Warren Buffet - - User's Medium Photo - Uncle Bob - - User's Medium Photo - Aunt Sue -
    - - -
    -
    -
    - - - - - -
    - - - - - - - - - -
    - - - - -
    -
    -

    - Post -

    -
    - +
    - - - - - - - - -
    - +
    + + +
    -
    -
    - User's Extra-Small Avatar -
    -
    +
    + User's Extra-Small Avatar +
    -

    - Harry Potter -

    -
    -
    - Posted on Thursday -
    +

    Harry Potter

    +
    Posted on Thursday
    -

    -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

    +

    Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    -
    -
    - - - - - - - -
    - +
    + + +
    -
    -
    - User's Extra-Small Avatar -
    -
    +
    + User's Extra-Small Avatar +
    -

    - Harry Potter -

    -
    -
    - Posted on Thursday -
    +

    Harry Potter

    +
    Posted on Thursday
    -

    -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

    +

    Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    - -
    - - - - - - - - - - - -
    - +
    + + + +
    -
    -
    - User's Extra-Small Avatar -
    -
    +
    + User's Extra-Small Avatar +
    -

    - Harry Potter -

    -
    -
    - Posted on Thursday -
    - - - +

    Harry Potter

    +
    Posted on Thursday
    -

    -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

    +

    Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    - -
    -
    -
    - - -
    +
    +
    +
    +
    - - - - - - - - + - - - - - + + + + \ No newline at end of file From af0d4b4af1e8b48f093b67d4c52a83e5aaeb9e4d Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 7 Dec 2016 14:41:03 -0800 Subject: [PATCH 26/61] add index.html --- .gitignore | 18 +- Gemfile | 51 +++++ Gemfile.lock | 213 ++++++++++++++++++ Rakefile | 6 + app/assets/config/manifest.js | 3 + app/assets/images/.keep | 0 app/assets/javascripts/application.js | 16 ++ app/assets/javascripts/cable.js | 13 ++ app/assets/javascripts/channels/.keep | 0 app/assets/javascripts/users.coffee | 3 + app/assets/stylesheets/application.css | 15 ++ app/assets/stylesheets/users.scss | 3 + app/channels/application_cable/channel.rb | 4 + app/channels/application_cable/connection.rb | 4 + app/controllers/application_controller.rb | 3 + app/controllers/concerns/.keep | 0 app/controllers/users_controller.rb | 31 +++ app/helpers/application_helper.rb | 2 + app/helpers/users_helper.rb | 2 + app/jobs/application_job.rb | 2 + app/mailers/application_mailer.rb | 4 + app/models/application_record.rb | 3 + app/models/concerns/.keep | 0 app/models/user.rb | 2 + app/views/layouts/application.html.erb | 14 ++ app/views/layouts/mailer.html.erb | 13 ++ app/views/layouts/mailer.text.erb | 1 + app/views/users/new.html.erb | 126 +++++++++++ bin/bundle | 3 + bin/rails | 9 + bin/rake | 9 + bin/setup | 34 +++ bin/spring | 16 ++ bin/update | 29 +++ config.ru | 5 + config/application.rb | 15 ++ config/boot.rb | 3 + config/cable.yml | 9 + config/database.yml | 85 +++++++ config/environment.rb | 5 + config/environments/development.rb | 54 +++++ config/environments/production.rb | 86 +++++++ config/environments/test.rb | 42 ++++ .../application_controller_renderer.rb | 6 + config/initializers/assets.rb | 11 + config/initializers/backtrace_silencers.rb | 7 + config/initializers/cookies_serializer.rb | 5 + .../initializers/filter_parameter_logging.rb | 4 + config/initializers/inflections.rb | 16 ++ config/initializers/jazz_fingers.rb | 9 + config/initializers/mime_types.rb | 4 + config/initializers/new_framework_defaults.rb | 24 ++ config/initializers/session_store.rb | 3 + config/initializers/wrap_parameters.rb | 14 ++ config/locales/en.yml | 23 ++ config/puma.rb | 47 ++++ config/routes.rb | 3 + config/secrets.yml | 22 ++ config/spring.rb | 6 + db/migrate/20161207223126_create_users.rb | 10 + db/schema.rb | 25 ++ db/seeds.rb | 7 + index.html | 152 +++++++++++++ lib/assets/.keep | 0 lib/tasks/.keep | 0 log/.keep | 0 public/404.html | 67 ++++++ public/422.html | 67 ++++++ public/500.html | 66 ++++++ public/apple-touch-icon-precomposed.png | 0 public/apple-touch-icon.png | 0 public/favicon.ico | 0 public/robots.txt | 5 + styles.css | 30 +++ styles.css.map | 7 + styles.scss | 52 +++++ test/controllers/.keep | 0 test/controllers/users_controller_test.rb | 7 + test/fixtures/.keep | 0 test/fixtures/files/.keep | 0 test/fixtures/users.yml | 9 + test/helpers/.keep | 0 test/integration/.keep | 0 test/mailers/.keep | 0 test/models/.keep | 0 test/models/user_test.rb | 7 + test/test_helper.rb | 10 + tmp/.keep | 0 vendor/assets/javascripts/.keep | 0 vendor/assets/stylesheets/.keep | 0 90 files changed, 1680 insertions(+), 1 deletion(-) create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 Rakefile create mode 100644 app/assets/config/manifest.js create mode 100644 app/assets/images/.keep create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/javascripts/cable.js create mode 100644 app/assets/javascripts/channels/.keep create mode 100644 app/assets/javascripts/users.coffee create mode 100644 app/assets/stylesheets/application.css create mode 100644 app/assets/stylesheets/users.scss create mode 100644 app/channels/application_cable/channel.rb create mode 100644 app/channels/application_cable/connection.rb create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/concerns/.keep create mode 100644 app/controllers/users_controller.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/users_helper.rb create mode 100644 app/jobs/application_job.rb create mode 100644 app/mailers/application_mailer.rb create mode 100644 app/models/application_record.rb create mode 100644 app/models/concerns/.keep create mode 100644 app/models/user.rb create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/mailer.html.erb create mode 100644 app/views/layouts/mailer.text.erb create mode 100644 app/views/users/new.html.erb create mode 100755 bin/bundle create mode 100755 bin/rails create mode 100755 bin/rake create mode 100755 bin/setup create mode 100755 bin/spring create mode 100755 bin/update create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/boot.rb create mode 100644 config/cable.yml create mode 100644 config/database.yml create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/application_controller_renderer.rb create mode 100644 config/initializers/assets.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/cookies_serializer.rb create mode 100644 config/initializers/filter_parameter_logging.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/jazz_fingers.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/new_framework_defaults.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.yml create mode 100644 config/puma.rb create mode 100644 config/routes.rb create mode 100644 config/secrets.yml create mode 100644 config/spring.rb create mode 100644 db/migrate/20161207223126_create_users.rb create mode 100644 db/schema.rb create mode 100644 db/seeds.rb create mode 100644 index.html create mode 100644 lib/assets/.keep create mode 100644 lib/tasks/.keep create mode 100644 log/.keep create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/apple-touch-icon-precomposed.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/robots.txt create mode 100644 styles.css create mode 100644 styles.css.map create mode 100644 styles.scss create mode 100644 test/controllers/.keep create mode 100644 test/controllers/users_controller_test.rb create mode 100644 test/fixtures/.keep create mode 100644 test/fixtures/files/.keep create mode 100644 test/fixtures/users.yml create mode 100644 test/helpers/.keep create mode 100644 test/integration/.keep create mode 100644 test/mailers/.keep create mode 100644 test/models/.keep create mode 100644 test/models/user_test.rb create mode 100644 test/test_helper.rb create mode 100644 tmp/.keep create mode 100644 vendor/assets/javascripts/.keep create mode 100644 vendor/assets/stylesheets/.keep diff --git a/.gitignore b/.gitignore index 08b6c3bc3..48fb168f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,17 @@ -*.sass-cache* +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# Ignore Byebug command history file. +.byebug_history diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..7ac655a41 --- /dev/null +++ b/Gemfile @@ -0,0 +1,51 @@ +source 'https://rubygems.org' + +gem 'bootstrap-sass' +gem 'binding_of_caller' + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '~> 5.0.0', '>= 5.0.0.1' +# Use postgresql as the database for Active Record +gem 'pg', '~> 0.18' +# Use Puma as the app server +gem 'puma', '~> 3.0' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.2' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks +gem 'turbolinks', '~> 5' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.5' +# Use Redis adapter to run Action Cable in production +# gem 'redis', '~> 3.0' +# Use ActiveModel has_secure_password +gem 'bcrypt', '~> 3.1.7' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug', platform: :mri + gem 'jazz_fingers' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. + gem 'web-console' + gem 'listen', '~> 3.0.5' + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' + gem 'spring-watcher-listen', '~> 2.0.0' +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..a23c12454 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,213 @@ +GEM + remote: https://rubygems.org/ + specs: + actioncable (5.0.0.1) + actionpack (= 5.0.0.1) + nio4r (~> 1.2) + websocket-driver (~> 0.6.1) + actionmailer (5.0.0.1) + actionpack (= 5.0.0.1) + actionview (= 5.0.0.1) + activejob (= 5.0.0.1) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (5.0.0.1) + actionview (= 5.0.0.1) + activesupport (= 5.0.0.1) + rack (~> 2.0) + rack-test (~> 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.0.0.1) + activesupport (= 5.0.0.1) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (5.0.0.1) + activesupport (= 5.0.0.1) + globalid (>= 0.3.6) + activemodel (5.0.0.1) + activesupport (= 5.0.0.1) + activerecord (5.0.0.1) + activemodel (= 5.0.0.1) + activesupport (= 5.0.0.1) + arel (~> 7.0) + activesupport (5.0.0.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (~> 0.7) + minitest (~> 5.1) + tzinfo (~> 1.1) + arel (7.1.4) + autoprefixer-rails (6.5.3.1) + execjs + awesome_print (1.7.0) + bcrypt (3.1.11) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + bootstrap-sass (3.3.6) + autoprefixer-rails (>= 5.2.1) + sass (>= 3.3.4) + builder (3.2.2) + byebug (9.0.6) + coderay (1.1.1) + coffee-rails (4.2.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.2.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + concurrent-ruby (1.0.2) + coolline (0.5.0) + unicode_utils (~> 1.4) + debug_inspector (0.0.2) + erubis (2.7.0) + execjs (2.7.0) + ffi (1.9.14) + globalid (0.3.7) + activesupport (>= 4.1.0) + hirb (0.7.3) + i18n (0.7.0) + jazz_fingers (4.0.1) + awesome_print (~> 1.6) + hirb (~> 0.7) + pry (~> 0.10) + pry-byebug (~> 3.4) + pry-coolline (~> 0.2) + pry-doc (~> 0.6) + jbuilder (2.6.1) + activesupport (>= 3.0.0, < 5.1) + multi_json (~> 1.2) + jquery-rails (4.2.1) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + listen (3.0.8) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + loofah (2.0.3) + nokogiri (>= 1.5.9) + mail (2.6.4) + mime-types (>= 1.16, < 4) + method_source (0.8.2) + mime-types (3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0521) + mini_portile2 (2.1.0) + minitest (5.10.1) + multi_json (1.12.1) + nio4r (1.2.1) + nokogiri (1.6.8.1) + mini_portile2 (~> 2.1.0) + pg (0.19.0) + pry (0.10.4) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + pry-byebug (3.4.1) + byebug (~> 9.0) + pry (~> 0.10) + pry-coolline (0.2.5) + coolline (~> 0.5) + pry-doc (0.9.0) + pry (~> 0.9) + yard (~> 0.8) + puma (3.6.2) + rack (2.0.1) + rack-test (0.6.3) + rack (>= 1.0) + rails (5.0.0.1) + actioncable (= 5.0.0.1) + actionmailer (= 5.0.0.1) + actionpack (= 5.0.0.1) + actionview (= 5.0.0.1) + activejob (= 5.0.0.1) + activemodel (= 5.0.0.1) + activerecord (= 5.0.0.1) + activesupport (= 5.0.0.1) + bundler (>= 1.3.0, < 2.0) + railties (= 5.0.0.1) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.1) + activesupport (>= 4.2.0, < 6.0) + nokogiri (~> 1.6.0) + rails-html-sanitizer (1.0.3) + loofah (~> 2.0) + railties (5.0.0.1) + actionpack (= 5.0.0.1) + activesupport (= 5.0.0.1) + method_source + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.0.0) + rb-fsevent (0.9.8) + rb-inotify (0.9.7) + ffi (>= 0.5.0) + sass (3.4.22) + sass-rails (5.0.6) + railties (>= 4.0.0, < 6) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + slop (3.6.0) + spring (2.0.0) + activesupport (>= 4.2) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (3.7.0) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.0) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (0.19.4) + thread_safe (0.3.5) + tilt (2.0.5) + turbolinks (5.0.1) + turbolinks-source (~> 5) + turbolinks-source (5.0.0) + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (3.0.4) + execjs (>= 0.3.0, < 3) + unicode_utils (1.4.0) + web-console (3.4.0) + actionview (>= 5.0) + activemodel (>= 5.0) + debug_inspector + railties (>= 5.0) + websocket-driver (0.6.4) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.2) + yard (0.9.5) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + binding_of_caller + bootstrap-sass + byebug + coffee-rails (~> 4.2) + jazz_fingers + jbuilder (~> 2.5) + jquery-rails + listen (~> 3.0.5) + pg (~> 0.18) + puma (~> 3.0) + rails (~> 5.0.0, >= 5.0.0.1) + sass-rails (~> 5.0) + spring + spring-watcher-listen (~> 2.0.0) + turbolinks (~> 5) + tzinfo-data + uglifier (>= 1.3.0) + web-console + +BUNDLED WITH + 1.13.6 diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..e85f91391 --- /dev/null +++ b/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require_relative 'config/application' + +Rails.application.load_tasks diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js new file mode 100644 index 000000000..b16e53d6d --- /dev/null +++ b/app/assets/config/manifest.js @@ -0,0 +1,3 @@ +//= link_tree ../images +//= link_directory ../javascripts .js +//= link_directory ../stylesheets .css diff --git a/app/assets/images/.keep b/app/assets/images/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 000000000..b12018d09 --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. JavaScript code in this file should be added after the last require_* statement. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/app/assets/javascripts/cable.js b/app/assets/javascripts/cable.js new file mode 100644 index 000000000..71ee1e66d --- /dev/null +++ b/app/assets/javascripts/cable.js @@ -0,0 +1,13 @@ +// Action Cable provides the framework to deal with WebSockets in Rails. +// You can generate new channels where WebSocket features live using the rails generate channel command. +// +//= require action_cable +//= require_self +//= require_tree ./channels + +(function() { + this.App || (this.App = {}); + + App.cable = ActionCable.createConsumer(); + +}).call(this); diff --git a/app/assets/javascripts/channels/.keep b/app/assets/javascripts/channels/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/assets/javascripts/users.coffee b/app/assets/javascripts/users.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/app/assets/javascripts/users.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 000000000..0ebd7fe82 --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/app/assets/stylesheets/users.scss b/app/assets/stylesheets/users.scss new file mode 100644 index 000000000..1efc835cc --- /dev/null +++ b/app/assets/stylesheets/users.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the users controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb new file mode 100644 index 000000000..d67269728 --- /dev/null +++ b/app/channels/application_cable/channel.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb new file mode 100644 index 000000000..0ff5442f4 --- /dev/null +++ b/app/channels/application_cable/connection.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 000000000..1c07694e9 --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,3 @@ +class ApplicationController < ActionController::Base + protect_from_forgery with: :exception +end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 000000000..de6969487 --- /dev/null +++ b/app/controllers/users_controller.rb @@ -0,0 +1,31 @@ +class UsersController < ApplicationController + + def index + + end + + def show + + end + + def new + + end + + def create + + end + + def edit + + end + + def update + + end + + def destroy + + end + +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 000000000..de6be7945 --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb new file mode 100644 index 000000000..2310a240d --- /dev/null +++ b/app/helpers/users_helper.rb @@ -0,0 +1,2 @@ +module UsersHelper +end diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 000000000..a009ace51 --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,2 @@ +class ApplicationJob < ActiveJob::Base +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 000000000..286b2239d --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,4 @@ +class ApplicationMailer < ActionMailer::Base + default from: 'from@example.com' + layout 'mailer' +end diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 000000000..10a4cba84 --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 000000000..379658a50 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,2 @@ +class User < ApplicationRecord +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 000000000..555da27ce --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + ProjectDanebook + <%= csrf_meta_tags %> + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> + <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> + + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 000000000..cbd34d2e9 --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,13 @@ + + + + + + + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb new file mode 100644 index 000000000..37f0bddbd --- /dev/null +++ b/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb new file mode 100644 index 000000000..d5589e4b0 --- /dev/null +++ b/app/views/users/new.html.erb @@ -0,0 +1,126 @@ + + + + + + + + +
    +
    + + + + +
    +
    +

    + Sign Up +

    +
    + +
    + + + + +
    + +
    + +
    + + +

    Birthday

    + + + + + + + +
    + + + + +
    + + + + +
    +
    +
    +
    diff --git a/bin/bundle b/bin/bundle new file mode 100755 index 000000000..66e9889e8 --- /dev/null +++ b/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/bin/rails b/bin/rails new file mode 100755 index 000000000..5badb2fde --- /dev/null +++ b/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../config/application', __dir__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/bin/rake b/bin/rake new file mode 100755 index 000000000..d87d5f578 --- /dev/null +++ b/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/bin/setup b/bin/setup new file mode 100755 index 000000000..e620b4dad --- /dev/null +++ b/bin/setup @@ -0,0 +1,34 @@ +#!/usr/bin/env ruby +require 'pathname' +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + # puts "\n== Copying sample files ==" + # unless File.exist?('config/database.yml') + # cp 'config/database.yml.sample', 'config/database.yml' + # end + + puts "\n== Preparing database ==" + system! 'bin/rails db:setup' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/bin/spring b/bin/spring new file mode 100755 index 000000000..9bc076b9e --- /dev/null +++ b/bin/spring @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) + if spring = lockfile.specs.detect { |spec| spec.name == "spring" } + Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path + gem 'spring', spring.version + require 'spring/binstub' + end +end diff --git a/bin/update b/bin/update new file mode 100755 index 000000000..a8e4462f2 --- /dev/null +++ b/bin/update @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a way to update your development environment automatically. + # Add necessary update steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + puts "\n== Updating database ==" + system! 'bin/rails db:migrate' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/config.ru b/config.ru new file mode 100644 index 000000000..f7ba0b527 --- /dev/null +++ b/config.ru @@ -0,0 +1,5 @@ +# This file is used by Rack-based servers to start the application. + +require_relative 'config/environment' + +run Rails.application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 000000000..af54ad3ac --- /dev/null +++ b/config/application.rb @@ -0,0 +1,15 @@ +require_relative 'boot' + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module ProjectDanebook + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + end +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 000000000..30f5120df --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 000000000..0bbde6f74 --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,9 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: redis://localhost:6379/1 diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 000000000..e7c6a08cf --- /dev/null +++ b/config/database.yml @@ -0,0 +1,85 @@ +# PostgreSQL. Versions 9.1 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + +development: + <<: *default + database: project_danebook_development + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + #username: project_danebook + + # The password associated with the postgres role (username). + #password: + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + #host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: project_danebook_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: project_danebook_production + username: project_danebook + password: <%= ENV['PROJECT_DANEBOOK_DATABASE_PASSWORD'] %> diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 000000000..426333bb4 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require_relative 'application' + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 000000000..6f7197045 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,54 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Enable/disable caching. By default caching is disabled. + if Rails.root.join('tmp/caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => 'public, max-age=172800' + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 000000000..9f3378f91 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,86 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + config.log_tags = [ :request_id ] + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "project_danebook_#{Rails.env}" + config.action_mailer.perform_caching = false + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 000000000..30587ef6d --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => 'public, max-age=3600' + } + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 000000000..51639b67a --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,6 @@ +# Be sure to restart your server when you modify this file. + +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 000000000..01ef3e663 --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 000000000..59385cdf3 --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb new file mode 100644 index 000000000..5a6a32d37 --- /dev/null +++ b/config/initializers/cookies_serializer.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 000000000..4a994e1e7 --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 000000000..ac033bf9d --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/jazz_fingers.rb b/config/initializers/jazz_fingers.rb new file mode 100644 index 000000000..7719a65bb --- /dev/null +++ b/config/initializers/jazz_fingers.rb @@ -0,0 +1,9 @@ +if defined?(JazzFingers) + JazzFingers.configure do |config| + config.colored_prompt = false + config.awesome_print = false + config.coolline = false + end + + require 'jazz_fingers/setup' +end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 000000000..dc1899682 --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/config/initializers/new_framework_defaults.rb b/config/initializers/new_framework_defaults.rb new file mode 100644 index 000000000..0706cafd4 --- /dev/null +++ b/config/initializers/new_framework_defaults.rb @@ -0,0 +1,24 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains migration options to ease your Rails 5.0 upgrade. +# +# Read the Rails 5.0 release notes for more info on each option. + +# Enable per-form CSRF tokens. Previous versions had false. +Rails.application.config.action_controller.per_form_csrf_tokens = true + +# Enable origin-checking CSRF mitigation. Previous versions had false. +Rails.application.config.action_controller.forgery_protection_origin_check = true + +# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`. +# Previous versions had false. +ActiveSupport.to_time_preserves_timezone = true + +# Require `belongs_to` associations by default. Previous versions had false. +Rails.application.config.active_record.belongs_to_required_by_default = true + +# Do not halt callback chains when a callback returns false. Previous versions had true. +ActiveSupport.halt_callback_chains_on_return_false = false + +# Configure SSL options to enable HSTS with subdomains. Previous versions had false. +Rails.application.config.ssl_options = { hsts: { subdomains: true } } diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 000000000..f2d118131 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_project_danebook_session' diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 000000000..bbfc3961b --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 000000000..065395716 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 000000000..c7f311f81 --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,47 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum, this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests, default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. If you use this option +# you need to make sure to reconnect any threads in the `on_worker_boot` +# block. +# +# preload_app! + +# The code in the `on_worker_boot` will be called if you are using +# clustered mode by specifying a number of `workers`. After each worker +# process is booted this block will be run, if you are using `preload_app!` +# option you will want to use this block to reconnect to any threads +# or connections that may have been created at application boot, Ruby +# cannot share connections between processes. +# +# on_worker_boot do +# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) +# end + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 000000000..787824f88 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,3 @@ +Rails.application.routes.draw do + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html +end diff --git a/config/secrets.yml b/config/secrets.yml new file mode 100644 index 000000000..73dfdabcc --- /dev/null +++ b/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 56d08f5eb3562a50c92b883fe334e2ef1a4fe704108f895a27e5fd0d41a7c181571a63c18037eb1959ec38547a08612ca29e5e8058f40ff4105bc17e68e03960 + +test: + secret_key_base: f5a6a279edce99c1a691bbf89d23217a3e5a8abef9d7829b0b31cfc0d83cf78a19d784c847e80e51ce0716835b016becbfaede6aabead1bb386a3292541cbeb2 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 000000000..c9119b40c --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w( + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +).each { |path| Spring.watch(path) } diff --git a/db/migrate/20161207223126_create_users.rb b/db/migrate/20161207223126_create_users.rb new file mode 100644 index 000000000..91a2a95c6 --- /dev/null +++ b/db/migrate/20161207223126_create_users.rb @@ -0,0 +1,10 @@ +class CreateUsers < ActiveRecord::Migration[5.0] + def change + create_table :users do |t| + t.string :email + t.string :password_digest + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 000000000..a60062a2e --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,25 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20161207223126) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "users", force: :cascade do |t| + t.string "email" + t.string "password_digest" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 000000000..1beea2acc --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). +# +# Examples: +# +# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) +# Character.create(name: 'Luke', movie: movies.first) diff --git a/index.html b/index.html new file mode 100644 index 000000000..beb5d4c27 --- /dev/null +++ b/index.html @@ -0,0 +1,152 @@ + + + + Welcome to Danebook + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    +

    + Sign Up +

    +
    + +
    + + + + +
    + +
    + +
    + + +

    Birthday

    + + + + + + + +
    + + + + +
    + + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/lib/tasks/.keep b/lib/tasks/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/log/.keep b/log/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/public/404.html b/public/404.html new file mode 100644 index 000000000..b612547fc --- /dev/null +++ b/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
    +
    +

    The page you were looking for doesn't exist.

    +

    You may have mistyped the address or the page may have moved.

    +
    +

    If you are the application owner check the logs for more information.

    +
    + + diff --git a/public/422.html b/public/422.html new file mode 100644 index 000000000..a21f82b3b --- /dev/null +++ b/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
    +
    +

    The change you wanted was rejected.

    +

    Maybe you tried to change something you didn't have access to.

    +
    +

    If you are the application owner check the logs for more information.

    +
    + + diff --git a/public/500.html b/public/500.html new file mode 100644 index 000000000..061abc587 --- /dev/null +++ b/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
    +
    +

    We're sorry, but something went wrong.

    +
    +

    If you are the application owner check the logs for more information.

    +
    + + diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png new file mode 100644 index 000000000..e69de29bb diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 000000000..e69de29bb diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 000000000..e69de29bb diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 000000000..3c9c7c01f --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/styles.css b/styles.css new file mode 100644 index 000000000..c34134cd5 --- /dev/null +++ b/styles.css @@ -0,0 +1,30 @@ +nav h1, +nav h6 { + font-weight: bold; + color: white; } +nav h1 { + font-size: 400%; } + +.navbar-default { + background-color: #3C5A99; } + +.right-side h1, +.right-side h4 { + font-weight: bold; } + +.navbar-toggle { + margin-top: 25px; } + +.navbar-default .navbar-toggle .icon-bar { + background-color: #f3f0f0; } + +.short { + width: 200px; } + +.big-three { + width: 400px; } + +#email-login { + margin: 10px 0; } + +/*# sourceMappingURL=styles.css.map */ diff --git a/styles.css.map b/styles.css.map new file mode 100644 index 000000000..4c21c4977 --- /dev/null +++ b/styles.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "AACI;MACG;EACC,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,KAAK;AAGhB,MAAG;EACC,SAAS,EAAE,IAAI;;AAUnB,eAAgB;EACZ,gBAAgB,EAAE,OAAO;;AAI7B;cACG;EACC,WAAW,EAAE,IAAI;;AAOzB,cAAe;EACb,UAAU,EAAE,IAAI;;AAIlB,wCAAyC;EACrC,gBAAgB,EAAE,OAAO;;AAG7B,MAAO;EACC,KAAK,EAAE,KAAK;;AAGpB,UAAW;EACP,KAAK,EAAE,KAAK;;AAGZ,YAAa;EACT,MAAM,EAAE,MAAM", +"sources": ["styles.scss"], +"names": [], +"file": "styles.css" +} \ No newline at end of file diff --git a/styles.scss b/styles.scss new file mode 100644 index 000000000..a42d4d16b --- /dev/null +++ b/styles.scss @@ -0,0 +1,52 @@ +nav { + h1, + h6 { + font-weight: bold; + color: white; + } + + h1 { + font-size: 400%; + } + + .icon-bar { + // background-color: white; + } + +} + + + .navbar-default { + background-color: #3C5A99; + } + +.right-side { + h1, + h4 { + font-weight: bold; + } + + +} + + +.navbar-toggle { + margin-top: 25px; + +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #f3f0f0; +} + +.short { + width: 200px; + } + +.big-three { + width: 400px; +} + + #email-login { + margin: 10px 0; + } \ No newline at end of file diff --git a/test/controllers/.keep b/test/controllers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb new file mode 100644 index 000000000..6c3da770c --- /dev/null +++ b/test/controllers/users_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UsersControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end diff --git a/test/fixtures/.keep b/test/fixtures/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/fixtures/files/.keep b/test/fixtures/files/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml new file mode 100644 index 000000000..0821459be --- /dev/null +++ b/test/fixtures/users.yml @@ -0,0 +1,9 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + email: MyString + password_digest: MyString + +two: + email: MyString + password_digest: MyString diff --git a/test/helpers/.keep b/test/helpers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/integration/.keep b/test/integration/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/mailers/.keep b/test/mailers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/models/.keep b/test/models/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/test/models/user_test.rb b/test/models/user_test.rb new file mode 100644 index 000000000..82f61e010 --- /dev/null +++ b/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 000000000..92e39b2d7 --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/tmp/.keep b/tmp/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/vendor/assets/javascripts/.keep b/vendor/assets/javascripts/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/vendor/assets/stylesheets/.keep b/vendor/assets/stylesheets/.keep new file mode 100644 index 000000000..e69de29bb From e5faccc0f0e4635f5c7e8e50768f678b1b1d485b Mon Sep 17 00:00:00 2001 From: luke-schleicher Date: Wed, 7 Dec 2016 17:10:45 -0600 Subject: [PATCH 27/61] added sessions and users controller --- Gemfile | 1 + Gemfile.lock | 3 +++ app/assets/javascripts/sessions.coffee | 3 +++ app/assets/stylesheets/sessions.scss | 3 +++ app/controllers/sessions_controller.rb | 7 +++++++ app/controllers/users_controller.rb | 19 +++++++++++++++++-- app/helpers/sessions_helper.rb | 2 ++ app/models/user.rb | 7 +++++++ app/views/layouts/application.html.erb | 3 +++ app/views/sessions/create.html.erb | 2 ++ app/views/sessions/destroy.html.erb | 2 ++ app/views/shared/_flash.html.erb | 9 +++++++++ config/routes.rb | 10 ++++++++++ db/seeds.rb | 7 +++++++ test/controllers/sessions_controller_test.rb | 14 ++++++++++++++ 15 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/sessions.coffee create mode 100644 app/assets/stylesheets/sessions.scss create mode 100644 app/controllers/sessions_controller.rb create mode 100644 app/helpers/sessions_helper.rb create mode 100644 app/views/sessions/create.html.erb create mode 100644 app/views/sessions/destroy.html.erb create mode 100644 app/views/shared/_flash.html.erb create mode 100644 test/controllers/sessions_controller_test.rb diff --git a/Gemfile b/Gemfile index 7ac655a41..807990e70 100644 --- a/Gemfile +++ b/Gemfile @@ -45,6 +45,7 @@ group :development do # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' + gem 'faker' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem diff --git a/Gemfile.lock b/Gemfile.lock index a23c12454..763bed8b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -64,6 +64,8 @@ GEM debug_inspector (0.0.2) erubis (2.7.0) execjs (2.7.0) + faker (1.6.6) + i18n (~> 0.5) ffi (1.9.14) globalid (0.3.7) activesupport (>= 4.1.0) @@ -194,6 +196,7 @@ DEPENDENCIES bootstrap-sass byebug coffee-rails (~> 4.2) + faker jazz_fingers jbuilder (~> 2.5) jquery-rails diff --git a/app/assets/javascripts/sessions.coffee b/app/assets/javascripts/sessions.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/app/assets/javascripts/sessions.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/sessions.scss b/app/assets/stylesheets/sessions.scss new file mode 100644 index 000000000..7bef9cf82 --- /dev/null +++ b/app/assets/stylesheets/sessions.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the sessions controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 000000000..ca48c61a6 --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,7 @@ +class SessionsController < ApplicationController + def create + end + + def destroy + end +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index de6969487..d12b280ea 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -9,11 +9,18 @@ def show end def new - + @user = User.new end def create - + @user = User.new(whitelisted_params) + if @user.save + flash[:success] = "Welcome" + redirect_to @user + else + flash[:error] = "Try again" + render :new + end end def edit @@ -28,4 +35,12 @@ def destroy end + private + + def whitelisted_params + params.require(:user).permit(:email, + :password, + :password_confirmation) + end + end diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb new file mode 100644 index 000000000..309f8b2eb --- /dev/null +++ b/app/helpers/sessions_helper.rb @@ -0,0 +1,2 @@ +module SessionsHelper +end diff --git a/app/models/user.rb b/app/models/user.rb index 379658a50..aad940036 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,9 @@ class User < ApplicationRecord + + has_secure_password + + validates :password, + length: { minimum: 6 }, + allow_nil: true + end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 555da27ce..001964b22 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -9,6 +9,9 @@ + + <% render "shared/flash" %> + <%= yield %> diff --git a/app/views/sessions/create.html.erb b/app/views/sessions/create.html.erb new file mode 100644 index 000000000..c251174fe --- /dev/null +++ b/app/views/sessions/create.html.erb @@ -0,0 +1,2 @@ +

    Sessions#create

    +

    Find me in app/views/sessions/create.html.erb

    diff --git a/app/views/sessions/destroy.html.erb b/app/views/sessions/destroy.html.erb new file mode 100644 index 000000000..d75237d98 --- /dev/null +++ b/app/views/sessions/destroy.html.erb @@ -0,0 +1,2 @@ +

    Sessions#destroy

    +

    Find me in app/views/sessions/destroy.html.erb

    diff --git a/app/views/shared/_flash.html.erb b/app/views/shared/_flash.html.erb new file mode 100644 index 000000000..5aa08d352 --- /dev/null +++ b/app/views/shared/_flash.html.erb @@ -0,0 +1,9 @@ +<% if flash.any? %> +
    + <% flash.keys each do |k| %> +
    + <%= flash[key] %> +
    + <% end %> +
    +<% end %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 787824f88..d297c3ccc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,3 +1,13 @@ Rails.application.routes.draw do + + root 'users#new' + + resources :users + + resource :session, only: [:new, :create, :destroy] + + get 'login' => 'sessions#new' + get 'logout' => 'sessions#destroy' + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/db/seeds.rb b/db/seeds.rb index 1beea2acc..53a25c02c 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -5,3 +5,10 @@ # # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) # Character.create(name: 'Luke', movie: movies.first) + + +NUM_USERS = 10 + +NUM_USERS.times do |i| + User.create(email: Faker::Internet.email, password: 'asdf' ) +end \ No newline at end of file diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb new file mode 100644 index 000000000..239d9ce62 --- /dev/null +++ b/test/controllers/sessions_controller_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class SessionsControllerTest < ActionDispatch::IntegrationTest + test "should get create" do + get sessions_create_url + assert_response :success + end + + test "should get destroy" do + get sessions_destroy_url + assert_response :success + end + +end From 56d4b58b73d74dbd1a24497a5a3fc25b4d644172 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 7 Dec 2016 15:53:17 -0800 Subject: [PATCH 28/61] implement bootstrap --- {assets => app/assets}/images/danish_flag.gif | Bin .../assets}/images/harry_potter_small.jpg | Bin .../assets}/images/hogwarts_small.jpg | Bin .../assets}/images/icon_photo_small.png | Bin .../images/user_silhouette_generic.gif | Bin app/assets/stylesheets/custom.scss | 261 ++++++++++ app/controllers/users_controller.rb | 6 +- app/views/shared/_flash.html.erb | 6 +- app/views/users/_nav.html.erb | 40 ++ app/views/users/new.html.erb | 79 ++- app/views/users/show.html.erb | 448 ++++++++++++++++++ db/seeds.rb | 9 +- about.html => old_files/about.html | 0 about_edit.html => old_files/about_edit.html | 0 old_files/assets222222/images/danish_flag.gif | Bin 0 -> 2268 bytes .../images/harry_potter_small.jpg | Bin 0 -> 12773 bytes .../assets222222/images/hogwarts_small.jpg | Bin 0 -> 73659 bytes .../assets222222/images/icon_photo_small.png | Bin 0 -> 7321 bytes .../images/user_silhouette_generic.gif | Bin 0 -> 2750 bytes .../assets222222/stylesheets/custom.scss | 0 .../assets222222}/stylesheets/styles.css | 0 .../assets222222}/stylesheets/styles.css.map | 0 .../assets222222}/stylesheets/styles.scss | 0 friends.html => old_files/friends.html | 0 index.html => old_files/index.html | 0 mynotes.md => old_files/mynotes.md | 0 photos.html => old_files/photos.html | 0 styles.css => old_files/styles.css | 0 styles.css.map => old_files/styles.css.map | 0 styles.scss => old_files/styles.scss | 0 timeline.html => old_files/timeline.html | 0 31 files changed, 788 insertions(+), 61 deletions(-) rename {assets => app/assets}/images/danish_flag.gif (100%) rename {assets => app/assets}/images/harry_potter_small.jpg (100%) rename {assets => app/assets}/images/hogwarts_small.jpg (100%) rename {assets => app/assets}/images/icon_photo_small.png (100%) rename {assets => app/assets}/images/user_silhouette_generic.gif (100%) create mode 100644 app/assets/stylesheets/custom.scss create mode 100644 app/views/users/_nav.html.erb create mode 100644 app/views/users/show.html.erb rename about.html => old_files/about.html (100%) rename about_edit.html => old_files/about_edit.html (100%) create mode 100644 old_files/assets222222/images/danish_flag.gif create mode 100644 old_files/assets222222/images/harry_potter_small.jpg create mode 100644 old_files/assets222222/images/hogwarts_small.jpg create mode 100644 old_files/assets222222/images/icon_photo_small.png create mode 100644 old_files/assets222222/images/user_silhouette_generic.gif create mode 100644 old_files/assets222222/stylesheets/custom.scss rename {assets => old_files/assets222222}/stylesheets/styles.css (100%) rename {assets => old_files/assets222222}/stylesheets/styles.css.map (100%) rename {assets => old_files/assets222222}/stylesheets/styles.scss (100%) rename friends.html => old_files/friends.html (100%) rename index.html => old_files/index.html (100%) rename mynotes.md => old_files/mynotes.md (100%) rename photos.html => old_files/photos.html (100%) rename styles.css => old_files/styles.css (100%) rename styles.css.map => old_files/styles.css.map (100%) rename styles.scss => old_files/styles.scss (100%) rename timeline.html => old_files/timeline.html (100%) diff --git a/assets/images/danish_flag.gif b/app/assets/images/danish_flag.gif similarity index 100% rename from assets/images/danish_flag.gif rename to app/assets/images/danish_flag.gif diff --git a/assets/images/harry_potter_small.jpg b/app/assets/images/harry_potter_small.jpg similarity index 100% rename from assets/images/harry_potter_small.jpg rename to app/assets/images/harry_potter_small.jpg diff --git a/assets/images/hogwarts_small.jpg b/app/assets/images/hogwarts_small.jpg similarity index 100% rename from assets/images/hogwarts_small.jpg rename to app/assets/images/hogwarts_small.jpg diff --git a/assets/images/icon_photo_small.png b/app/assets/images/icon_photo_small.png similarity index 100% rename from assets/images/icon_photo_small.png rename to app/assets/images/icon_photo_small.png diff --git a/assets/images/user_silhouette_generic.gif b/app/assets/images/user_silhouette_generic.gif similarity index 100% rename from assets/images/user_silhouette_generic.gif rename to app/assets/images/user_silhouette_generic.gif diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss new file mode 100644 index 000000000..a65e2c65a --- /dev/null +++ b/app/assets/stylesheets/custom.scss @@ -0,0 +1,261 @@ +@import "bootstrap-sprockets"; +@import "bootstrap"; + + +//panel theme color - light blue +$ptc: #337ab7; + +//panel title styling +.pts { + + color: white !important; +} + +.panel-heading { + background-color: $ptc !important; + .panel-title { + @extend .pts; + } +} + + +//my "palette": space between rows +.rs15 { + margin-top: 15px; +} + +.rs30 { + margin-top: 30px; +} + +.rs45 { + margin-top: 45px; +} + + +//CSS begins + +body { + padding-top: 51px; + background-color: #eee; + +} + + +.navbar-default { + background-color: $ptc; + .img-small { + width: 35px; + height: 35px; + display: inline-block; + margin-top: -6px; + } + +} + + +.navbar-header { + span { + @extend .pts; + } +} + +.navbar-right { + li { + a { + @extend .pts; + } + } +} + + +.cover-banner { + height: 450px; + background-image: url("../images/hogwarts_small.jpg"); + background-size: 100% 100%; + background-repeat: no-repeat; + position: relative; +} + +.mid-nav { + button { + height: 55px; + width: 55px; + } +} + +.avatar-lg { + position: absolute; + bottom: 15px; + left: 15px; + img { + height: 225px; + } + + a { +text-decoration: none; + } + + h3 { + font-weight:900; + text-shadow: 0px 0px 15px black; + font-size: 200%; + color: white; + } +} + +.mid-title { + border: 2px solid black; + height: 80px; + + h2 { + font-weight: bold; + } + + a { + margin-top: 14px; + } +} + + +.bottom-box { + margin-bottom: 55px; + + //EDIT PROFILE -- text input widths + input[type=text] { + width: 90%; + } +} + + +.post { + border: 2px solid black; + + header { + border-bottom: 2px solid black; + } + + .form-control { + //margin: 20px 0 20px 0; + } + + footer { + border-top: 2px solid black; + a { + margin: 15px 0 15px 0; + } + } +} + + +figure { + overflow: hidden; + height: 70px; + width: 70px; + display: inline-block; + + //margin: 15px 5px 25px auto; + + img { + display: inline-block; + } +} + +.img-xs { + display: inline-block; + //height: 115px; +} + + +figcaption { + display: inline-block; + } + +.word { + position: relative; + } + + +.img-caption:hover .pub-date { + visibility: visible; +} + +.pub-date { + visibility: hidden; + + background-color: black; + + color: white; + bottom: -7px; + left: 3%; + width: 94%; + display: inline; + position: absolute; + border-radius: 5px; +} + +.vertical-align { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} + + + + + +//~!~ + +nav { + h1, + h6 { + font-weight: bold; + color: white; + } + + h1 { + font-size: 400%; + } + + .icon-bar { + // background-color: white; + } + +} + + + .navbar-default { + background-color: #3C5A99; + } + +.right-side { + h1, + h4 { + font-weight: bold; + } + +} + + +.navbar-toggle { + margin-top: 25px; + +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #f3f0f0; +} + +.short { + width: 200px; + } + +.big-three { + width: 400px; +} + + #email-login { + margin: 10px 0; + } diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d12b280ea..fb749a41a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,7 +5,7 @@ def index end def show - + @user = User.find(params[:id]) end def new @@ -38,8 +38,8 @@ def destroy private def whitelisted_params - params.require(:user).permit(:email, - :password, + params.require(:user).permit(:email, + :password, :password_confirmation) end diff --git a/app/views/shared/_flash.html.erb b/app/views/shared/_flash.html.erb index 5aa08d352..dba070ac0 100644 --- a/app/views/shared/_flash.html.erb +++ b/app/views/shared/_flash.html.erb @@ -1,9 +1,9 @@ <% if flash.any? %>
    - <% flash.keys each do |k| %> + <% flash.keys.each do |k| %>
    - <%= flash[key] %> + <%= flash[k] %>
    <% end %>
    -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/users/_nav.html.erb b/app/views/users/_nav.html.erb new file mode 100644 index 000000000..7a6458bc7 --- /dev/null +++ b/app/views/users/_nav.html.erb @@ -0,0 +1,40 @@ + diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb index d5589e4b0..f842a498e 100644 --- a/app/views/users/new.html.erb +++ b/app/views/users/new.html.erb @@ -1,47 +1,4 @@ - - - - - +<%= render 'nav' %> @@ -72,19 +29,37 @@

    -
    + -
    + + + + <%= form_for @user do |user_fields| %> + <%= user_fields.label :email %> + <%= user_fields.email_field :email %> + + <%= user_fields.label :password %> + <%= user_fields.password_field :password %> + + <%= user_fields.label :password_confirmation %> + <%= user_fields.password_field :password_confirmation %> + + <%= user_fields.submit "Create Account" %> + <% end %> + + + + -

    Birthday

    + - + -
    + diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb new file mode 100644 index 000000000..70891a8be --- /dev/null +++ b/app/views/users/show.html.erb @@ -0,0 +1,448 @@ +

    Welcome <%= @user.email %>

    +
    + + + + +
    + +
    + Timeline About + Photos123 Friends542 Edit + Profile +
    +
    + + +
    +
    +
    + +
    + + + +
    +
    + +
    +
    +
    +
    +
    +

    About

    +
    + + + + + + + + + + + + + + + + + +
    Born on:July 31st, 1980
    Went to school at:Hogwards
    Hometown:Godrick's Hollow, England
    Currently Lives:Godrick's Hollow, England
    +
    +
    +
    + +
    +
    +
    +
    +

    Photos 123

    +
    + + + + + + + + + + + + + + + + +
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    + +
    +
    +
    + +
    +
    +
    +
    +

    Friends 542

    +
    + + + + + + + + + + + +
    + + + Ron Weasley + + + + Ginny Weasley + + + + Hermoine Granger +
    + + + Warren Buffet + + + + Uncle Bob + + + + Aunt Sue +
    + +
    +
    +
    +
    + + +
    + + +
    +
    +

    Post

    +
    +
    + +
    + +
    + + +
    +
    +
    + +
    + +

    Harry Potter

    +
    Posted on Thursday
    +
    +
    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    +
    +
    + +
    + + +
    +
    +
    + +
    + +

    Harry Potter

    +
    Posted on Thursday
    +
    +
    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    +
    +
    + +
    + + + +
    +
    +
    + +
    + +

    Harry Potter

    +
    Posted on Thursday
    +
    +
    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur + adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa + qui officia deserunt mollit anim id est laborum.

    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/db/seeds.rb b/db/seeds.rb index 53a25c02c..7446ef647 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -6,9 +6,12 @@ # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) # Character.create(name: 'Luke', movie: movies.first) +puts 'destroying users' +User.destroy_all -NUM_USERS = 10 +puts 'creating users' +NUM_USERS = 10 NUM_USERS.times do |i| - User.create(email: Faker::Internet.email, password: 'asdf' ) -end \ No newline at end of file + User.create(email: Faker::Internet.email, password: 'password' ) +end diff --git a/about.html b/old_files/about.html similarity index 100% rename from about.html rename to old_files/about.html diff --git a/about_edit.html b/old_files/about_edit.html similarity index 100% rename from about_edit.html rename to old_files/about_edit.html diff --git a/old_files/assets222222/images/danish_flag.gif b/old_files/assets222222/images/danish_flag.gif new file mode 100644 index 0000000000000000000000000000000000000000..132d8cff8a645f566b9d1c8c25adc571f653d830 GIT binary patch literal 2268 zcmV<22qX7LNk%w1VXpxo0mJ|RN*pBc#LUu9W|5DOavCYf$jDh&SCEg7RY*%tD={n{ zAvPT%^V8URH$&v)Qp>z@TtQEEG-_9{XP5te`$MzgoTEOhjvYfjE#JNkda}6j+K^|m~@JnoSA)+pl6hwq@|{po2ROS zpP{Z|qpPyBv}>ugxNNPjud%tmz_ho)#8tbzp}xh-%#Op&%*V)*%Fx!=ns?aC($kRD z+u`C{&*Qb--ht-p>{sROs_5yW@b&fY_N4OjW#IY$%LS{X7{emyj=Gp>+9Dg;H-jq5iX4KFxJGq7?X8O6|$?vl0j0A zYB^bEuA8BD28H>v#n4MfQ!|YfHB!})O0#b0`Y7y?v&C-BUDj+r-b-r>y$wh<@PER8 z62E%fXL6s*{TOe4Z#VGhXQ|`0&Kvtz?asO9_Wm3E&F4DFqcMM8{A~3H+5dIV8a^!f zG11?&9}#~`{WkFj#&rH|17J)7YE)qVWAvGpAb|^7bD&EPMo7|xEmde?M;M}{;fAL* z_}PabO4MOVB$lYqi6o_{;y^5d9SiI~}pG};qmM>ysP&yF1R=p#EoS|sF<<`g;6 zkw}W8q(n?MX`qdgMJeSqPc~%bmC$6V(3V^VL?vTjhFOf436*JPFlY{>=9<5>3DBEx z;v(libk-@%n1$u3r!05oZnJ2`X%Y4m_XXjrI=cx zDLb5Y>P)3~g(@l|pRQx-sfmyZ*Q%@*lBzkd#tM|HY1L}09#lh8D$cLK;)E+( zzLi(3oyX3V?0U;GyGV1yM*D{Uu;El|Z5!BbqwTh~G^^LM@qr7dxPg&-pSi1ai_N#} zl7lW{>h>3}qVqmh?|}E3ly7DGD%fu+?p_1$z*ZD&&A|v$p)fQIH!Q`&%|t9Q6ck4j zFoYL(kuf(Lcbw_JoP{j1rzDGJ^2wu4dz{50e_RaA9m`A%%@^Ao49*hk3=Gc=`}_;g z2n(GH(E}Te3)1~6ea^}(qndJRP)FUW%hy$HwX9RWruEjhV%^=>VDs9wZDf}n?AgPm zt+ugZkLUK=aoB-C0C?xE_uhQ>?f2h+2QK*Fgcojj-V6l%z~PKH?)c-7M=tr~lvkcN z0tFZl@aCL%?)m4Shc0^mBnD(Y`st{ruKMb%i(b0st;a6=?6lWz`|GynuKVu1_nr~% zz6US-@Wk&9eDTO9ul(}+9?$&q&_^%5B+gH7{q@)@Uw!u6cklh|+kY?q_~dgQe);I9 zuf9R&ukZf*@cYqz{Pfqq{`~gmuYdRW@9+Qr&+8um2S~u+39x_&Od$A7r@#g}@OBJ* zpadtFx&u=1f*ACQ1vALO4tisQ9t@!fApyb>n(%~SC?N`07(x}Y@P!z3Aq;2uKpE2T zh6uDF4tMxJ9rEyp_VXbShxk4r67h)WGa?d~_&p^u@rl@TA{3_>Jt0w{1coFZNx%t6;Vb^G*%Tw z#6?+^(ThC)^qCzs#70jQ(n5?>R3#Vc+{vS}W0>L{J2 z;DIIv4D51`QsDv`A9FY1arOE`TwR9>Rn5rkKzJaQBvZ@=f3MZ|0MO`p8rB`(U zRalO74P0H*S=EqMGp%(fWsNC2Jrq~5&J{&<4dq+8(AF^Rbqjsv(qFX@*eeZ|DS74O zVX;tHDJ}L2jcw9ntq@rxO|~j8eWx2PONGh~iL+DitdBq|1<~e+v{5iEjZg~()xLss6T q*0|2Ku6NDrUi0RTI^bbqA) literal 0 HcmV?d00001 diff --git a/old_files/assets222222/images/harry_potter_small.jpg b/old_files/assets222222/images/harry_potter_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d660d77d5774558ed2514cb52ef4972e34aab36 GIT binary patch literal 12773 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 OQPqUisc7r<=l=yD>bA82 literal 0 HcmV?d00001 diff --git a/old_files/assets222222/images/hogwarts_small.jpg b/old_files/assets222222/images/hogwarts_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94a8abeff8c8b2c336d837008f00ad9e1c580f13 GIT binary patch literal 73659 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 literal 0 HcmV?d00001 diff --git a/old_files/assets222222/images/icon_photo_small.png b/old_files/assets222222/images/icon_photo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..0a900d16fb0ee5b0eeb92447a8b48871a29a5c08 GIT binary patch literal 7321 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 jdP{w Date: Wed, 7 Dec 2016 18:38:35 -0600 Subject: [PATCH 29/61] adding cookie-based auth --- app/controllers/application_controller.rb | 26 +++++++++++++++++++ app/controllers/sessions_controller.rb | 15 +++++++++++ app/models/user.rb | 15 +++++++++++ app/views/users/_nav.html.erb | 24 +++++++++++++++++ .../20161208001543_add_auth_token_to_users.rb | 8 ++++++ db/schema.rb | 4 ++- 6 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20161208001543_add_auth_token_to_users.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c07694e9..60baa22f9 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,3 +1,29 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception + + private + + def sign_in(user) + user.regenerate_auth_token + cookies[:auth_token] = user.auth_token + @current_user = user + end + + def permanent_sign_in(user) + user.regenerate_auth_token + cookies.permanent[:auth_token] = user.auth_token + @current_user = user + end + + def sign_out + @current_user = nil + cookies.delete(:auth_token) + end + + def current_user + @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token] + end + helper_method :current_user + + end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index ca48c61a6..1a6646a9d 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,7 +1,22 @@ class SessionsController < ApplicationController + def create + @user = User.find_by_email(params[:email]) + if @user && @user.authenticate(params[:password]) + if params[:remember_me] + permanent_sign_in(@user) + else + sign_in(@user) + end + flash[:success] = "Welcome!" + redirect_to @user + else + flash.now[:error] = "Couldn't log in" + render :new + end end def destroy end + end diff --git a/app/models/user.rb b/app/models/user.rb index aad940036..9d0fa325b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,9 +1,24 @@ class User < ApplicationRecord + before_create :generate_token + has_secure_password validates :password, length: { minimum: 6 }, allow_nil: true + + + def generate_token + begin + self[:auth_token] = SecureRandom.urlsafe_base64 + end while User.exists?(:auth_token => self[:auth_token]) + end + + def regenerate_auth_token + self.auth_token = nil + generate_token + save! + end end diff --git a/app/views/users/_nav.html.erb b/app/views/users/_nav.html.erb index 7a6458bc7..936df0212 100644 --- a/app/views/users/_nav.html.erb +++ b/app/views/users/_nav.html.erb @@ -17,6 +17,28 @@ diff --git a/db/migrate/20161208001543_add_auth_token_to_users.rb b/db/migrate/20161208001543_add_auth_token_to_users.rb new file mode 100644 index 000000000..69cdfe3ee --- /dev/null +++ b/db/migrate/20161208001543_add_auth_token_to_users.rb @@ -0,0 +1,8 @@ +class AddAuthTokenToUsers < ActiveRecord::Migration[5.0] + def change + + add_column :users, :auth_token, :string + add_index :users, :auth_token, :unique => true + + end +end diff --git a/db/schema.rb b/db/schema.rb index a60062a2e..e66734ca3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161207223126) do +ActiveRecord::Schema.define(version: 20161208001543) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -20,6 +20,8 @@ t.string "password_digest" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "auth_token" + t.index ["auth_token"], name: "index_users_on_auth_token", unique: true, using: :btree end end From cb6cecb16ad0ca99f627581a193b2b97484ebad0 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 7 Dec 2016 17:01:24 -0800 Subject: [PATCH 30/61] 5pm --- app/controllers/application_controller.rb | 17 ++++++++++++++++- app/controllers/sessions_controller.rb | 6 ++++++ app/controllers/users_controller.rb | 6 ++++++ app/views/users/show.html.erb | 3 +++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 60baa22f9..a88e156d2 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,7 +1,8 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception - private + before_action :require_login + def sign_in(user) user.regenerate_auth_token @@ -23,7 +24,21 @@ def sign_out def current_user @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token] end + + def signed_in_user? + !!current_user + end + + helper_method :sign_in_user? + helper_method :current_user + def require_login + unless signed_in_user? + flash[:error] = "Please sign in!" + redirect_to login_path + end + end + end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 1a6646a9d..55f97763a 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,5 +1,7 @@ class SessionsController < ApplicationController + skip_before_action :require_login, :only => [:new, :create] + def create @user = User.find_by_email(params[:email]) if @user && @user.authenticate(params[:password]) @@ -17,6 +19,10 @@ def create end def destroy + sign_out + flash[:success] = "Signed Out" + redirect_to login_path end + end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index fb749a41a..cb20622e3 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,5 +1,8 @@ class UsersController < ApplicationController + before_action :require_login, :except => [:new, :create] + skip_before_action :require_login, :only => [:new, :create] + def index end @@ -15,6 +18,7 @@ def new def create @user = User.new(whitelisted_params) if @user.save + sign_in(@user) flash[:success] = "Welcome" redirect_to @user else @@ -43,4 +47,6 @@ def whitelisted_params :password_confirmation) end + + end diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 70891a8be..dd8c7b1e6 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,4 +1,7 @@

    Welcome <%= @user.email %>

    + +<%= link_to "Sign Out", logout_path, method: :delete%> +
    diff --git a/app/views/users/_nav.html.erb b/app/views/users/_nav.html.erb index 936df0212..7c37af47d 100644 --- a/app/views/users/_nav.html.erb +++ b/app/views/users/_nav.html.erb @@ -16,7 +16,10 @@ -
    diff --git a/config/routes.rb b/config/routes.rb index d297c3ccc..08fbf510e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,12 +2,13 @@ root 'users#new' - resources :users + resources :users do + resource :profile + end resource :session, only: [:new, :create, :destroy] get 'login' => 'sessions#new' get 'logout' => 'sessions#destroy' - # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/db/seeds.rb b/db/seeds.rb index 7446ef647..5b971e08a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -8,10 +8,11 @@ puts 'destroying users' User.destroy_all +Profile.destroy_all -puts 'creating users' -NUM_USERS = 10 - -NUM_USERS.times do |i| - User.create(email: Faker::Internet.email, password: 'password' ) -end +# puts 'creating users' +# NUM_USERS = 10 +# +# NUM_USERS.times do |i| +# User.create(email: Faker::Internet.email, password: 'password' ) +# end diff --git a/notes.txt b/notes.txt new file mode 100644 index 000000000..3c494aefa --- /dev/null +++ b/notes.txt @@ -0,0 +1,5 @@ +SIGN UP - user#new + --->EDIT PAGE - profile#edit (with :birthday, :email) and the rest to fill out + + --->ABOUT PAGE - profile#edit(with :birthday, :email) and the rest to fill out + --->ABOUT PAGE - profile#show diff --git a/test/controllers/profiles_controller_test.rb b/test/controllers/profiles_controller_test.rb new file mode 100644 index 000000000..6c8c33d28 --- /dev/null +++ b/test/controllers/profiles_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ProfilesControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end From 20cb5c0da6e6c81b5a627804bb3b601c7630880b Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Thu, 8 Dec 2016 16:34:11 -0800 Subject: [PATCH 33/61] start about options --- app/controllers/users_controller.rb | 2 +- app/views/layouts/application.html.erb | 3 +- app/views/profiles/edit.html.erb | 123 +++++++++++++++ app/views/sessions/new.html.erb | 90 ++++------- app/views/shared/_banner_nav.html.erb | 29 ++++ app/views/shared/_search_nav.html.erb | 34 +++++ app/views/users/new.html.erb | 151 +++++++------------ db/migrate/20161208184007_create_profiles.rb | 2 +- notes.txt | 14 ++ 9 files changed, 284 insertions(+), 164 deletions(-) create mode 100644 app/views/profiles/edit.html.erb create mode 100644 app/views/shared/_banner_nav.html.erb create mode 100644 app/views/shared/_search_nav.html.erb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 74ddac07a..de86ea0ed 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -21,7 +21,7 @@ def create if @user.save sign_in(@user) flash[:success] = "Welcome" - redirect_to @user + redirect_to edit_user_profile_url(@user) else flash[:error] = "Try again" render :new diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 9ce6f2e88..0b3f5fc0f 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -10,9 +10,8 @@ - <% render "shared/flash" %> - <%= yield %> + <% render "shared/flash" %> <%= debug(params) if Rails.env.development? %> diff --git a/app/views/profiles/edit.html.erb b/app/views/profiles/edit.html.erb new file mode 100644 index 000000000..19486e3f0 --- /dev/null +++ b/app/views/profiles/edit.html.erb @@ -0,0 +1,123 @@ +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> + +
    +
    +
    +
    +
    +

    About

    +
    +
    + +
    +
    +
    +
    +
    +

    Basic Information

    +
    +
    +
    +
    +

    Birthday:

    +
    +
    +

    July 31st, 1980

    +
    +
    +
    +
    +

    College:

    +
    +
    + +
    +
    +
    +
    +

    Hometown:

    +
    +
    + +
    +
    +
    +
    +

    Currently Lives:

    +
    +
    + +
    +
    + + +
    +
    +

    Contact Information

    +
    +
    +
    +
    +

    Email:

    +
    +
    +

    harry_potter@hogwarts.edu

    +
    +
    +
    +
    +

    Telephone:

    +
    +
    + +
    +
    +
    + + +
    +
    +
    +

    Words to Live By

    +
    +
    +
    +
    + +
    +
    +
    +
    +

    About Me

    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb index 9cfe51f68..fc0a75de1 100644 --- a/app/views/sessions/new.html.erb +++ b/app/views/sessions/new.html.erb @@ -1,67 +1,37 @@ diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb new file mode 100644 index 000000000..4ac236b98 --- /dev/null +++ b/app/views/shared/_banner_nav.html.erb @@ -0,0 +1,29 @@ +
    + +
    + + Timeline + + About + + Photos123 + + Friends542 + + Edit Profile +
    +
    diff --git a/app/views/shared/_search_nav.html.erb b/app/views/shared/_search_nav.html.erb new file mode 100644 index 000000000..21c9f2387 --- /dev/null +++ b/app/views/shared/_search_nav.html.erb @@ -0,0 +1,34 @@ + diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb index d0029d336..f9a3eae66 100644 --- a/app/views/users/new.html.erb +++ b/app/views/users/new.html.erb @@ -1,117 +1,68 @@ <%= render 'nav' %> - -
    -
    - - - - -
    -
    -

    - Sign Up -

    -
    - - - - - - - <%= form_for @user do |user_fields| %> - <%= user_fields.label :email, class: 'big-three' %> - <%= user_fields.email_field :email, class: 'big-three', placeholder: "Your Email" %> - - - <%= user_fields.label :password, class: 'big-three' %> - <%= user_fields.password_field :password, class: 'big-three', placeholder: "Password" %> - - <%= user_fields.label :password_confirmation, class: 'big-three' %> - <%= user_fields.password_field :password_confirmation, class: 'big-three', placeholder: "Confirm Password" %> -

    +
    +
    + + + + +
    +
    +

    + Sign Up +

    +
    + + <%= form_for @user do |user_fields| %> + <%= user_fields.label :email, class: 'big-three' %> + <%= user_fields.email_field :email, class: 'big-three', placeholder: "Your Email", :required => true %> + + <%= user_fields.label :password, class: 'big-three' %> + <%= user_fields.password_field :password, class: 'big-three', placeholder: "Password", :required => true %> + + <%= user_fields.label :password_confirmation, class: 'big-three' %> + <%= user_fields.password_field :password_confirmation, class: 'big-three', placeholder: "Confirm Password", :required => true %> +

    <%= user_fields.fields_for :profile do |profile_builder| %> <%= profile_builder.label :first_name, class: 'big-three' %> <%= profile_builder.text_field :first_name, class: 'big-three', placeholder: "First Name" %> <%= profile_builder.label :last_name, class: 'big-three' %> - <%= profile_builder.text_field :last_name, class: 'big-three', placeholder: "Last Name" %> - - - + <%= profile_builder.text_field :last_name, class: 'big-three', placeholder: "Last Name", :required => true %> +

    <%= profile_builder.label :birthday %> - <%= profile_builder.date_select :birthday, {start_year: Date.current.year, end_year: 100.years.ago.year } %>
    - <%= profile_builder.radio_button :gender, "male" %> + <%= profile_builder.date_select :birthday, { start_year: 18.years.ago.year, end_year: 100.years.ago.year, + order: [:month, :day, :year], prompt: { day: 'Select day', + month: 'Select month', year: 'Select year' } }, {required: true} %> +

    + <%= profile_builder.radio_button :gender, "male", {required: true} %> <%= profile_builder.label "male" %> - <%= profile_builder.radio_button :gender, "female" %> + <%= profile_builder.radio_button :gender, "female", {required: true} %> <%= profile_builder.label "female" %> -
    - <% end %> - - <%= user_fields.submit "Create Account", class: 'btn btn-lg btn-success' %> - - +
    + <% end %> - <% end %> + <%= user_fields.submit "Create Account", class: 'btn btn-lg btn-success' %> - - - - - - + <% end %>
    -
    -
    +
    +
    diff --git a/db/migrate/20161208184007_create_profiles.rb b/db/migrate/20161208184007_create_profiles.rb index 7cf715464..6209a5181 100644 --- a/db/migrate/20161208184007_create_profiles.rb +++ b/db/migrate/20161208184007_create_profiles.rb @@ -6,7 +6,7 @@ def change t.date :birthday t.string :gender - t.references :user + t.timestamps end diff --git a/notes.txt b/notes.txt index 3c494aefa..df5805afe 100644 --- a/notes.txt +++ b/notes.txt @@ -3,3 +3,17 @@ SIGN UP - user#new --->ABOUT PAGE - profile#edit(with :birthday, :email) and the rest to fill out --->ABOUT PAGE - profile#show + + + +TO DOS: + + -Implement validations on database level + + -let non-signed in users view other's pages + optional(allow user to hide their profile) + + -change birthday defaults! + + -Refactor html/css + -Put things into partials From c2c0f796aadef263e9a965789bc759ed2af59378 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Fri, 9 Dec 2016 08:44:29 -0800 Subject: [PATCH 34/61] view tweak --- Gemfile | 1 + Gemfile.lock | 5 ++ app/controllers/profiles_controller.rb | 3 +- app/controllers/users_controller.rb | 2 - app/models/profile.rb | 6 ++- app/models/user.rb | 12 ++--- app/views/profiles/edit.html.erb | 2 +- app/views/users/_nav.html.erb | 6 +-- app/views/users/new.html.erb | 57 ++++++++++---------- db/migrate/20161207223126_create_users.rb | 4 +- db/migrate/20161208184007_create_profiles.rb | 19 +++++-- db/schema.rb | 18 ++++--- notes.txt | 10 ++++ 13 files changed, 91 insertions(+), 54 deletions(-) diff --git a/Gemfile b/Gemfile index 807990e70..ab236788a 100644 --- a/Gemfile +++ b/Gemfile @@ -35,6 +35,7 @@ gem 'bcrypt', '~> 3.1.7' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platform: :mri + gem 'better_errors' gem 'jazz_fingers' end diff --git a/Gemfile.lock b/Gemfile.lock index 763bed8b0..bb538ca08 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,6 +43,10 @@ GEM execjs awesome_print (1.7.0) bcrypt (3.1.11) + better_errors (2.1.1) + coderay (>= 1.0.0) + erubis (>= 2.6.6) + rack (>= 0.9.0) binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) bootstrap-sass (3.3.6) @@ -192,6 +196,7 @@ PLATFORMS DEPENDENCIES bcrypt (~> 3.1.7) + better_errors binding_of_caller bootstrap-sass byebug diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index a24305aa7..110feca04 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -35,7 +35,8 @@ def create end def edit - + @user = User.find(params[:user_id]) + @profile = @user.profile end def update diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index de86ea0ed..9462f9d1c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -53,6 +53,4 @@ def whitelisted_params ) end - - end diff --git a/app/models/profile.rb b/app/models/profile.rb index f7cdb10f4..7e985879e 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -1,7 +1,11 @@ class Profile < ApplicationRecord belongs_to :user, inverse_of: :profile + #after_validation { first_name.strip.titleize ; last_name.strip.titleize } + validates :gender, :first_name, :last_name, presence: true - #validates_presence_of :user + +#whitelist valid letters (ie no numbers/symbols) + end diff --git a/app/models/user.rb b/app/models/user.rb index eafd6e1e5..2893978aa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,17 +1,17 @@ class User < ApplicationRecord + before_create :generate_token - has_one :profile, inverse_of: :user + after_save { email.downcase.strip } + has_one :profile, inverse_of: :user accepts_nested_attributes_for :profile - - before_create :generate_token - has_secure_password validates :password, - length: { minimum: 6 }, - allow_nil: true + length: { minimum: 6 }, + allow_nil: true + validates :email, :format => /@/ def generate_token begin diff --git a/app/views/profiles/edit.html.erb b/app/views/profiles/edit.html.erb index 19486e3f0..42e240347 100644 --- a/app/views/profiles/edit.html.erb +++ b/app/views/profiles/edit.html.erb @@ -23,7 +23,7 @@

    Birthday:

    -

    July 31st, 1980

    +

    <%= @profile.birthday.strftime("%B %d, %Y") %>

    diff --git a/app/views/users/_nav.html.erb b/app/views/users/_nav.html.erb index 7c37af47d..74422779c 100644 --- a/app/views/users/_nav.html.erb +++ b/app/views/users/_nav.html.erb @@ -16,10 +16,10 @@
    +
    +
    - - -

    + <%= @user.errors.full_messages.first if @user.errors.any? %> <%= form_for @user do |user_fields| %> - <%= user_fields.label :email, class: 'big-three' %> - <%= user_fields.email_field :email, class: 'big-three', placeholder: "Your Email", :required => true %> + <%= user_fields.label :email, class: 'big-three' %> + <%= user_fields.email_field :email, class: 'big-three', placeholder: "Your Email", :required => true %> - <%= user_fields.label :password, class: 'big-three' %> - <%= user_fields.password_field :password, class: 'big-three', placeholder: "Password", :required => true %> + <%= user_fields.label :password, class: 'big-three' %> + <%= user_fields.password_field :password, class: 'big-three', placeholder: "Password", :required => true %> - <%= user_fields.label :password_confirmation, class: 'big-three' %> - <%= user_fields.password_field :password_confirmation, class: 'big-three', placeholder: "Confirm Password", :required => true %> -

    - <%= user_fields.fields_for :profile do |profile_builder| %> - - <%= profile_builder.label :first_name, class: 'big-three' %> - <%= profile_builder.text_field :first_name, class: 'big-three', placeholder: "First Name" %> - - <%= profile_builder.label :last_name, class: 'big-three' %> - <%= profile_builder.text_field :last_name, class: 'big-three', placeholder: "Last Name", :required => true %> -

    - <%= profile_builder.label :birthday %> -
    - <%= profile_builder.date_select :birthday, { start_year: 18.years.ago.year, end_year: 100.years.ago.year, - order: [:month, :day, :year], prompt: { day: 'Select day', - month: 'Select month', year: 'Select year' } }, {required: true} %> + <%= user_fields.label :password_confirmation, class: 'big-three' %> + <%= user_fields.password_field :password_confirmation, class: 'big-three', placeholder: "Confirm Password", :required => true %>

    - <%= profile_builder.radio_button :gender, "male", {required: true} %> - <%= profile_builder.label "male" %> - <%= profile_builder.radio_button :gender, "female", {required: true} %> - <%= profile_builder.label "female" %> -
    - <% end %> + <%= user_fields.fields_for :profile do |profile_builder| %> + + <%= profile_builder.label :first_name, class: 'big-three' %> + <%= profile_builder.text_field :first_name, class: 'big-three', placeholder: "First Name" %> - <%= user_fields.submit "Create Account", class: 'btn btn-lg btn-success' %> + <%= profile_builder.label :last_name, class: 'big-three' %> + <%= profile_builder.text_field :last_name, class: 'big-three', placeholder: "Last Name", :required => true %> +

    + <%= profile_builder.label :birthday %> +
    + <%= profile_builder.date_select :birthday, { start_year: 18.years.ago.year, end_year: 100.years.ago.year, + order: [:month, :day, :year], + prompt: { day: 'Select day', month: 'Select month', + year: 'Select year' } }, + { required: true } %> +

    + <%= profile_builder.radio_button :gender, "male", {required: true} %> + <%= profile_builder.label "male" %> + <%= profile_builder.radio_button :gender, "female", {required: true} %> + <%= profile_builder.label "female" %> +
    + <% end %> +
    + <%= user_fields.submit "Create Account", class: 'btn btn-lg btn-success' %> <% end %> diff --git a/db/migrate/20161207223126_create_users.rb b/db/migrate/20161207223126_create_users.rb index 91a2a95c6..23114d46e 100644 --- a/db/migrate/20161207223126_create_users.rb +++ b/db/migrate/20161207223126_create_users.rb @@ -1,8 +1,8 @@ class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| - t.string :email - t.string :password_digest + t.string :email, null: false + t.string :password_digest, null: false t.timestamps end diff --git a/db/migrate/20161208184007_create_profiles.rb b/db/migrate/20161208184007_create_profiles.rb index 6209a5181..8108aa4db 100644 --- a/db/migrate/20161208184007_create_profiles.rb +++ b/db/migrate/20161208184007_create_profiles.rb @@ -1,12 +1,21 @@ class CreateProfiles < ActiveRecord::Migration[5.0] def change create_table :profiles do |t| - t.string :first_name - t.string :last_name - t.date :birthday - t.string :gender + t.string :first_name, null: false + t.string :last_name, null: false + t.date :birthday, null: false + t.string :gender, null: false - + t.text :motto + t.text :about + + t.string :college + t.string :hometown + t.string :residing + + t.string :phone + + t.references :user t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index 4fa96a6a3..fba587d7c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -16,10 +16,16 @@ enable_extension "plpgsql" create_table "profiles", force: :cascade do |t| - t.string "first_name" - t.string "last_name" - t.date "birthday" - t.string "gender" + t.string "first_name", null: false + t.string "last_name", null: false + t.date "birthday", null: false + t.string "gender", null: false + t.text "motto" + t.text "about" + t.string "college" + t.string "hometown" + t.string "residing" + t.string "phone" t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -27,8 +33,8 @@ end create_table "users", force: :cascade do |t| - t.string "email" - t.string "password_digest" + t.string "email", null: false + t.string "password_digest", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "auth_token" diff --git a/notes.txt b/notes.txt index df5805afe..5249a73ee 100644 --- a/notes.txt +++ b/notes.txt @@ -15,5 +15,15 @@ TO DOS: -change birthday defaults! + -titilize user's names + + + + -#whitelist valid letters (ie no numbers/symbols) + -Include this on edit? + + + + -Refactor html/css -Put things into partials From 7161cd336011d560df172067f6f0002f0397bfa1 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Fri, 9 Dec 2016 12:54:33 -0800 Subject: [PATCH 35/61] add ssl --- Gemfile | 4 + Gemfile.lock | 6 + app/assets/javascripts/timelines.coffee | 3 + app/assets/stylesheets/timelines.scss | 3 + app/controllers/profiles_controller.rb | 38 +- app/controllers/sessions_controller.rb | 4 +- app/controllers/timelines_controller.rb | 26 + app/controllers/users_controller.rb | 4 +- app/helpers/profiles_helper.rb | 3 + app/helpers/timelines_helper.rb | 2 + app/views/profiles/_about_form.html.erb | 0 app/views/profiles/edit.html.erb | 45 +- app/views/profiles/show.html.erb | 106 ++++ app/views/shared/_banner_nav.html.erb | 45 +- app/views/shared/_search_nav.html.erb | 16 +- app/views/timelines/create.html.erb | 2 + app/views/timelines/destroy.html.erb | 2 + app/views/timelines/edit.html.erb | 394 +++++++++++++++ app/views/timelines/new.html.erb | 2 + app/views/timelines/show.html.erb | 2 + app/views/timelines/update.html.erb | 2 + app/views/users/show.html.erb | 453 +----------------- config/environments/production.rb | 2 +- config/routes.rb | 14 + test/controllers/timelines_controller_test.rb | 34 ++ 25 files changed, 681 insertions(+), 531 deletions(-) create mode 100644 app/assets/javascripts/timelines.coffee create mode 100644 app/assets/stylesheets/timelines.scss create mode 100644 app/controllers/timelines_controller.rb create mode 100644 app/helpers/timelines_helper.rb create mode 100644 app/views/profiles/_about_form.html.erb create mode 100644 app/views/profiles/show.html.erb create mode 100644 app/views/timelines/create.html.erb create mode 100644 app/views/timelines/destroy.html.erb create mode 100644 app/views/timelines/edit.html.erb create mode 100644 app/views/timelines/new.html.erb create mode 100644 app/views/timelines/show.html.erb create mode 100644 app/views/timelines/update.html.erb create mode 100644 test/controllers/timelines_controller_test.rb diff --git a/Gemfile b/Gemfile index ab236788a..55a1cc8fe 100644 --- a/Gemfile +++ b/Gemfile @@ -49,5 +49,9 @@ group :development do gem 'faker' end +group :production do + gem 'rails_12factor' +end + # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] diff --git a/Gemfile.lock b/Gemfile.lock index bb538ca08..e2106f975 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -140,6 +140,11 @@ GEM nokogiri (~> 1.6.0) rails-html-sanitizer (1.0.3) loofah (~> 2.0) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.5) + rails_stdout_logging (0.0.5) railties (5.0.0.1) actionpack (= 5.0.0.1) activesupport (= 5.0.0.1) @@ -209,6 +214,7 @@ DEPENDENCIES pg (~> 0.18) puma (~> 3.0) rails (~> 5.0.0, >= 5.0.0.1) + rails_12factor sass-rails (~> 5.0) spring spring-watcher-listen (~> 2.0.0) diff --git a/app/assets/javascripts/timelines.coffee b/app/assets/javascripts/timelines.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/app/assets/javascripts/timelines.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/timelines.scss b/app/assets/stylesheets/timelines.scss new file mode 100644 index 000000000..3af9e3207 --- /dev/null +++ b/app/assets/stylesheets/timelines.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Timelines controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 110feca04..91a627f73 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -1,7 +1,7 @@ class ProfilesController < ApplicationController - #before_action :require_login, :except => [:new, :create] + before_action :require_login, :except => [:show ] # skip_before_action :require_login, :only => [:new, :create] def new @@ -14,7 +14,8 @@ def index end def show - # @user = User.find(params[:id]) + @user = User.find(params[:user_id]) + @profile = current_user.profile end def new @@ -40,30 +41,27 @@ def edit end def update - + @user = User.find(params[:user_id]) + @profile = @user.profile + if @profile.update_attributes(whitelisted_params) + flash[:success] = "Profile Updated" + redirect_to user_profile_url @user + else + flash[:error] = "Try again" + render :edit + end end - def destroy - end private - # def whitelisted_params - # params.require(:user).permit(:email, - # :password, - # :password_confirmation, - # { profile_attributes: [:birthday, - # :gender, - # :first_name, - # :last_name]} - # ) - # end - - - - - + def whitelisted_params + params.require(:profile).permit( :motto, :college, :residing, :phone, :home_town, :about, + :gender, + :first_name, + :last_name) + end end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 0c3282a8d..8b877045a 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -12,10 +12,10 @@ def create sign_in(@user) end flash[:success] = "Welcome!" - redirect_to @user + redirect_to edit_user_profile_url(current_user) else flash.now[:error] = "Couldn't log in" - render :new + render root_url end end diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb new file mode 100644 index 000000000..e40e183ff --- /dev/null +++ b/app/controllers/timelines_controller.rb @@ -0,0 +1,26 @@ +class TimelinesController < ApplicationController + def new + end + + def index + # + end + + def show + @user = User.find(params[:id]) + end + + def create + end + + def edit + @user = User.find(params[:id]) + end + + def update + end + + def destroy + end + +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 9462f9d1c..21e5faced 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,7 +1,7 @@ class UsersController < ApplicationController #before_action :require_login, :except => [:new, :create] - skip_before_action :require_login, :only => [:new, :create] + skip_before_action :require_login, :only => [:new, :create, :index, :show] def index @users = User.all @@ -21,7 +21,7 @@ def create if @user.save sign_in(@user) flash[:success] = "Welcome" - redirect_to edit_user_profile_url(@user) + redirect_to edit_user_profile_path(current_user) else flash[:error] = "Try again" render :new diff --git a/app/helpers/profiles_helper.rb b/app/helpers/profiles_helper.rb index 4e430508f..eae2a72b6 100644 --- a/app/helpers/profiles_helper.rb +++ b/app/helpers/profiles_helper.rb @@ -1,2 +1,5 @@ module ProfilesHelper + + + end diff --git a/app/helpers/timelines_helper.rb b/app/helpers/timelines_helper.rb new file mode 100644 index 000000000..1f1a4f076 --- /dev/null +++ b/app/helpers/timelines_helper.rb @@ -0,0 +1,2 @@ +module TimelinesHelper +end diff --git a/app/views/profiles/_about_form.html.erb b/app/views/profiles/_about_form.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/profiles/edit.html.erb b/app/views/profiles/edit.html.erb index 42e240347..95ec6a5c1 100644 --- a/app/views/profiles/edit.html.erb +++ b/app/views/profiles/edit.html.erb @@ -10,6 +10,8 @@ + + <%= form_for [@user, @profile] do |profile_builder| %>
    @@ -23,7 +25,8 @@

    Birthday:

    -

    <%= @profile.birthday.strftime("%B %d, %Y") %>

    +

    <%= @profile.birthday.strftime("%B %d, %Y") %> +

    @@ -31,7 +34,8 @@

    College:

    - + <%= profile_builder.label :college %> + <%= profile_builder.text_field :college %>
    @@ -39,7 +43,8 @@

    Hometown:

    - + <%= profile_builder.label :hometown %> + <%= profile_builder.text_field :hometown %>
    @@ -47,7 +52,8 @@

    Currently Lives:

    - + <%= profile_builder.label :residing %> + <%= profile_builder.text_field :residing %>
    @@ -62,7 +68,7 @@

    Email:

    -

    harry_potter@hogwarts.edu

    +

    <%= @user.email %>

    @@ -70,7 +76,8 @@

    Telephone:

    - + <%= profile_builder.label :phone %> + <%= profile_builder.text_field :phone %>
    @@ -79,40 +86,32 @@
    -

    Words to Live By

    +
    - +

    <%= profile_builder.label :motto, "Words to Live By" %>

    + <%= profile_builder.text_area :motto, cols: "30", rows: "10" %>
    -

    About Me

    +
    - +

    <%= profile_builder.label :about, "About Me" %>

    + <%= profile_builder.text_area :about, cols: "30", rows: "10" %>
    - Save Changes + <%= profile_builder.submit "Save Changes", class: 'btn btn-lg btn-success' %> + +<% end %>
    diff --git a/app/views/profiles/show.html.erb b/app/views/profiles/show.html.erb new file mode 100644 index 000000000..ba56553c9 --- /dev/null +++ b/app/views/profiles/show.html.erb @@ -0,0 +1,106 @@ +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> + +
    +
    +
    +
    +
    +

    About

    +
    +
    +
    +
    +
    +
    +
    +

    Basic Information

    +
    +
    +
    +
    +

    Birthday:

    +
    +
    +

    <%= @profile.birthday.strftime("%B %d, %Y") %>

    +
    +
    +
    +
    +

    College:

    +
    +
    +

    <%= @profile.college || "" %>

    +
    +
    +
    +
    +

    Hometown:

    +
    +
    +

    <%= @profile.hometown || "" %>

    +
    +
    +
    +
    +

    Currently Lives:

    +
    +
    +

    <%= @profile.residing || "" %>

    +
    +
    + + +
    +
    +

    Contact Information

    +
    +
    +
    +
    +

    Email:

    +
    +
    +

    <%= @user.email || "" %>

    +
    +
    +
    +
    +

    Telephone:

    +
    +
    +

    <%= @profile.college || "" %>

    +
    +
    +
    + + +
    +
    +
    +

    Words to Live By

    +
    +
    +
    +
    +

    <%= @profile.motto || "" %>

    +
    +
    +
    +
    +

    About Me

    +
    +
    +
    +
    +

    <%= @profile.about || "" %>

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index 4ac236b98..df50670da 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -1,29 +1,30 @@
    - -
    + +
    - About + Timeline - Photos123 + About - Friends542 + Photos123 + - Edit Profile -
    + Friends542 + + + <% if current_user.id == @user.id %> + Edit Profile + <% end %> +
    diff --git a/app/views/shared/_search_nav.html.erb b/app/views/shared/_search_nav.html.erb index 21c9f2387..c894d6a1e 100644 --- a/app/views/shared/_search_nav.html.erb +++ b/app/views/shared/_search_nav.html.erb @@ -1,21 +1,17 @@

    Find me in app/views/posts/update.html.erb

    diff --git a/app/views/profiles/show.html.erb b/app/views/profiles/show.html.erb index ba56553c9..8a9c4acc1 100644 --- a/app/views/profiles/show.html.erb +++ b/app/views/profiles/show.html.erb @@ -69,7 +69,7 @@

    Telephone:

    -

    <%= @profile.college || "" %>

    +

    <%= @profile.phone || "" %>

    diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index 8f021fa60..cfb150839 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -6,16 +6,16 @@ -

    <%= current_user.profile.first_name || "" %>

    +

    <%= @user.profile.first_name || "" %>

    - Timeline + Timeline - About + About Photos123 @@ -23,8 +23,10 @@ Friends542 + + <% if current_user.id == @user.id %> - Edit Profile + <% end %>
    diff --git a/app/views/shared/_flash.html.erb b/app/views/shared/_flash.html.erb index dba070ac0..fac688b8a 100644 --- a/app/views/shared/_flash.html.erb +++ b/app/views/shared/_flash.html.erb @@ -1,9 +1,5 @@ -<% if flash.any? %> -
    - <% flash.keys.each do |k| %> -
    - <%= flash[k] %> -
    - <% end %> -
    +<% flash.each do |message_type, message| %> +
    <%= message %>
    <% end %> + + diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb new file mode 100644 index 000000000..1ec55bdea --- /dev/null +++ b/app/views/timelines/_display_post.html.erb @@ -0,0 +1,47 @@ +
    +
    +
    + +
    + +

    <%= user.profile.first_name %>

    +
    Posted on Thursday
    +
    +
    +
    +
    +

    <%= post.body %>

    + +
    +
    + +
    diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index 7278e9292..fa8456617 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -144,8 +144,13 @@ + <% if current_user.id == @user.id %> + <%= render 'posts/post_form' %> + <% end %> - <%= render 'posts/post_form' %> + <% @posts.each do |post| %> + <%= render partial: 'display_post', locals: { user: @user, post: post } %> + <% end %> @@ -198,6 +203,11 @@ + + + + + + + --> - + +
    diff --git a/config/routes.rb b/config/routes.rb index 5c03d0bb6..bdc3ceee3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,9 +5,19 @@ resources :users do resource :profile resource :timeline, only: [:show] - resource :posts, only: [:new, :create, :destroy] + resources :posts, only: [:new, :create, :destroy] do + resources :likes, only: [:create, :destroy], :defaults => { :likeable => 'Post' } #only temporary! + end + end + # + # resources :comments do + # resources :likes, only: [:create, :destroy], :defaults => { :likeable => 'Comment' } + # end + + # resources :likes, :defaults => { :likeable => 'Like' } + resource :session, only: [:new, :create, :destroy] @@ -15,19 +25,3 @@ get 'logout' => 'sessions#destroy' end - - -# -# Rails.application.routes.draw do - - -# root 'static_pages#home' -# get '/help', to: 'static_pages#help' -# get '/about', to: 'static_pages#about' -# get '/contact', to: 'static_pages#contact' -# get '/signup', to: 'users#new' -# get '/login', to: 'sessions#new' -# post '/login', to: 'sessions#create' -# delete '/logout', to: 'sessions#destroy' -# resources :users -# end diff --git a/db/migrate/20161211220814_create_likes.rb b/db/migrate/20161211220814_create_likes.rb new file mode 100644 index 000000000..28115c5e0 --- /dev/null +++ b/db/migrate/20161211220814_create_likes.rb @@ -0,0 +1,13 @@ +class CreateLikes < ActiveRecord::Migration[5.0] + def change + create_table :likes do |t| + t.integer :user_id + t.integer :likeable_id + t.string :likeable_type + + t.timestamps + end + add_index :likes, [:likeable_type, :likeable_id] + + end +end diff --git a/db/migrate/20161211221508_create_comments.rb b/db/migrate/20161211221508_create_comments.rb new file mode 100644 index 000000000..376f4fc93 --- /dev/null +++ b/db/migrate/20161211221508_create_comments.rb @@ -0,0 +1,10 @@ +class CreateComments < ActiveRecord::Migration[5.0] + def change + create_table :comments do |t| + t.text :body + t.integer :post_id #post_id + t.integer :like_count, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20161211222609_add_like_count_to_post.rb b/db/migrate/20161211222609_add_like_count_to_post.rb new file mode 100644 index 000000000..16e51a74e --- /dev/null +++ b/db/migrate/20161211222609_add_like_count_to_post.rb @@ -0,0 +1,5 @@ +class AddLikeCountToPost < ActiveRecord::Migration[5.0] + def change + add_column :posts, :like_count, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index ecd4c1fe8..20e49bc3a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,16 +10,34 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161209220914) do +ActiveRecord::Schema.define(version: 20161211222609) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "comments", force: :cascade do |t| + t.text "body" + t.integer "post_id" + t.integer "like_count", default: 0 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "likes", force: :cascade do |t| + t.integer "user_id" + t.integer "likeable_id" + t.string "likeable_type" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["likeable_type", "likeable_id"], name: "index_likes_on_likeable_type_and_likeable_id", using: :btree + end + create_table "posts", force: :cascade do |t| t.text "body" t.integer "user_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "like_count", default: 0 end create_table "profiles", force: :cascade do |t| diff --git a/notes.txt b/notes.txt index 52e30d850..2a11415ac 100644 --- a/notes.txt +++ b/notes.txt @@ -1,63 +1,51 @@ -- restrict edit path on the route level - - -TIMELINE - - - POST(deletable, should destroy all it's comments & likes) - body:text - - + -body:text + -like_count: integer COMMENT(deletable, should destroy all it's likes) - -linked to user - -linked to post - - LIKE(deletable) - -linked to user - -linked to post/comment - - - - - - - - - + -body:text + -like_count: integer + LIKE(deletable) + t.integer: user_id AKA liker + t.integer: comment / post + -likeable_id:integer + -likeable_type:string -SIGN UP - user#new - --->EDIT PAGE - profile#edit (with :birthday, :email) and the rest to fill out + add_index :likes, [:likeable_type, :likeable_id] - --->ABOUT PAGE - profile#edit(with :birthday, :email) and the rest to fill out - --->ABOUT PAGE - profile#show +model: +belongs_to :commentable, :polymorphic => true -TO DOS: +## +class Comment < ActiveRecord::Base + has_many :likes, :as => :likeable +end - -Implement validations on database level +class Post < ActiveRecord::Base + has_many :likes, :as => :likeable +end - -let non-signed in users view other's pages - optional(allow user to hide their profile) - -change birthday defaults! - -titilize user's names +TODO: + http://localhost:3000/users/ path is broken + You must be logged into your own account to post on your timeline + Timelines render all Posts for that User - -#whitelist valid letters (ie no numbers/symbols) - -Include this on edit? + Users can "like" posts by clicking the "like" link +Posts display the total number of Likes +Posts display the first few names of who liked them - -Refactor html/css - -Put things into partials +-add indexes diff --git a/test/controllers/comments_controller_test.rb b/test/controllers/comments_controller_test.rb new file mode 100644 index 000000000..a812ddae9 --- /dev/null +++ b/test/controllers/comments_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class CommentsControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end diff --git a/test/controllers/likes_controller_test.rb b/test/controllers/likes_controller_test.rb new file mode 100644 index 000000000..78e007545 --- /dev/null +++ b/test/controllers/likes_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class LikesControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end diff --git a/test/fixtures/comments.yml b/test/fixtures/comments.yml new file mode 100644 index 000000000..80aed36e3 --- /dev/null +++ b/test/fixtures/comments.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/fixtures/likes.yml b/test/fixtures/likes.yml new file mode 100644 index 000000000..80aed36e3 --- /dev/null +++ b/test/fixtures/likes.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/models/comment_test.rb b/test/models/comment_test.rb new file mode 100644 index 000000000..b6d6131a9 --- /dev/null +++ b/test/models/comment_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class CommentTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/models/like_test.rb b/test/models/like_test.rb new file mode 100644 index 000000000..1eea9915b --- /dev/null +++ b/test/models/like_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class LikeTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end From e3010388b233b5049c49a22fa15262736842ef4c Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 12 Dec 2016 15:46:32 -0800 Subject: [PATCH 39/61] like/unliking fixed --- app/controllers/likes_controller.rb | 29 ++++++++++++---------- app/controllers/timelines_controller.rb | 3 ++- app/views/timelines/_display_post.html.erb | 9 ++++++- config/routes.rb | 8 +++--- notes.txt | 6 +++++ 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index 18f46b7e4..b44354615 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -6,33 +6,36 @@ class LikesController < ApplicationController #Like.create(user_id: b.user_id, likeable_id: b.id, likeable_type: "Post") - def create @post = Post.find(params[:post_id]) - @user = User.find(params[:user_id]) + @user = current_user @type = params[:likeable] @like = Like.new + @like.update_attributes(user_id: @user.id, + likeable_id: @post.id, + likeable_type: @type) - @like.update_attributes(user_id: @user.id, - likeable_id: @post.id, - likeable_type: @type, - ) - - @post.increment(:like_count) - - redirect_to user_timeline_url + @post.like_count += 1 + @post.save + redirect_to user_timeline_url(current_user) end def destroy - @post = Post.find(params[:id]) - end + @post = Post.find(params[:post_id]) + @like = @post.likes.find_by_user_id(current_user.id) + # @post.likes.find_by_user_id(current_user) - private + @like.destroy + @post.like_count -= 1 + @post.save + redirect_to user_timeline_url(current_user) + end + private end diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb index 6522f101a..d87a9ee6d 100644 --- a/app/controllers/timelines_controller.rb +++ b/app/controllers/timelines_controller.rb @@ -6,9 +6,10 @@ def show @user = User.find(params[:user_id]) @posts = @user.posts @post = Post.new - @like = Like.new @post.user_id = current_user.id end + + # # def whitelisted_params # params.require(:user).permit(:email, diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index 1ec55bdea..7971d5852 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -26,8 +26,15 @@
    + <% if post.likes.find_by_user_id(current_user) %> + <%= link_to "Unlike", post_like_path(post), method: :delete %> + <% else %> + <%= link_to "Like", post_like_path(post), method: :post %> + <% end %> + + <%= "#{pluralize(post.like_count, "like")}" if post.like_count > 0 %> + - <%= link_to "Like", user_post_likes_path(user, post), method: :post %> diff --git a/config/routes.rb b/config/routes.rb index bdc3ceee3..8528fe38a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,10 +5,12 @@ resources :users do resource :profile resource :timeline, only: [:show] - resources :posts, only: [:new, :create, :destroy] do - resources :likes, only: [:create, :destroy], :defaults => { :likeable => 'Post' } #only temporary! - end + resources :posts, only: [:new, :create, :destroy] + end + + resources :posts, only: [:new, :create, :destroy] do + resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Post' } #only temporary! end # diff --git a/notes.txt b/notes.txt index 2a11415ac..839e04aed 100644 --- a/notes.txt +++ b/notes.txt @@ -1,3 +1,9 @@ +#check out shallow nesting --> http://guides.rubyonrails.org/routing.html +~~ +# the explicit way + get 'users/sample' => 'users#sample', :as => 'sample_users' +~~ + POST(deletable, should destroy all it's comments & likes) -body:text -like_count: integer From a7f1f92e3e3619eea72478925aa9c3397aea7afb Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 12 Dec 2016 21:15:47 -0800 Subject: [PATCH 40/61] form commenting --- app/controllers/comments_controller.rb | 44 ++++++++ app/controllers/likes_controller.rb | 3 +- app/models/comment.rb | 2 + app/models/post.rb | 1 + app/models/user.rb | 4 + app/views/comments/_comment_form.html.erb | 16 +++ app/views/timelines/_display_post.html.erb | 104 ++++++++++-------- app/views/timelines/show.html.erb | 4 +- config/routes.rb | 15 ++- .../20161213004439_add_authors_to_comments.rb | 7 ++ db/schema.rb | 12 +- 11 files changed, 152 insertions(+), 60 deletions(-) create mode 100644 app/views/comments/_comment_form.html.erb create mode 100644 db/migrate/20161213004439_add_authors_to_comments.rb diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 93cdfe8c5..d5926cdd9 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,4 +1,48 @@ class CommentsController < ApplicationController + before_action :require_login, :except => [:show ] + # + # @commentable = extract_commentable + # @comment = @commentable.comments.build(comment_params) + # @comment.author = current_user + # resource :session, only: [:new, :create, :destroy] + + + + def create + @post = Post.find(params[:post_id]) + @user = current_user + @comment.build(whitelisted_params) + @type = params[:commentable] + + @comment.update_attributes(user_id: @user.id, + commentable_id: @post.id, + commentable_type: @type) + + @comment.save + redirect_to user_timeline_url(current_user) + + + end + + def destroy + @post = Post.find(params[:post_id]) + @like = @post.likes.find_by_user_id(current_user.id) + # @post.likes.find_by_user_id(current_user) + + @like.destroy + + @post.like_count -= 1 + @post.save + + redirect_to user_timeline_url(current_user) + end + + private + def whitelisted_params + params.require(:comment).permit(:body) + end + + diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index b44354615..399e64608 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -1,11 +1,10 @@ class LikesController < ApplicationController - # before_action :require_login, :except => [:show ] + before_action :require_login, :except => [:show ] #likeable_type #Like.create(user_id: b.user_id, likeable_id: b.id, likeable_type: "Post") - def create @post = Post.find(params[:post_id]) @user = current_user diff --git a/app/models/comment.rb b/app/models/comment.rb index 2a48a8645..dc926ef09 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,4 +1,6 @@ class Comment < ApplicationRecord has_many :likes, :as => :likeable validates :body, presence: true + belongs_to :post + has_many :comments, :as => :commentable end diff --git a/app/models/post.rb b/app/models/post.rb index 0065c87fd..858803425 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -2,5 +2,6 @@ class Post < ApplicationRecord belongs_to :user validates :body, presence: true, length: { maximum: 255 } has_many :likes, :as => :likeable + has_many :comments, :as => :commentable end diff --git a/app/models/user.rb b/app/models/user.rb index 3c60c3255..c6b5d1fb3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,12 +4,16 @@ class User < ApplicationRecord after_save { email.downcase.strip } has_many :posts, dependent: :nullify + has_many :comments + has_one :profile, inverse_of: :user accepts_nested_attributes_for :profile has_secure_password + + validates :password, length: { minimum: 6 }, allow_nil: true diff --git a/app/views/comments/_comment_form.html.erb b/app/views/comments/_comment_form.html.erb new file mode 100644 index 000000000..bc5fd462a --- /dev/null +++ b/app/views/comments/_comment_form.html.erb @@ -0,0 +1,16 @@ +
    +
    + <%= form_for @comment, post_comment_path(@post), method: :post do |comment_builder| %> + + + <%= comment_builder.label :body, "Write a comment..." %> + <%= comment_builder.text_area :body, cols: "50", rows: "10" %> +
    +
    +
    +
    + Cancel + <%= comment_builder.submit "Save Comment", class: 'btn btn-success pull-right' %> + <% end %> +
    +
    diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index 7971d5852..81e9ee9d4 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -1,54 +1,72 @@
    -
    -
    - -
    - -

    <%= user.profile.first_name %>

    -
    Posted on Thursday
    -
    -
    -
    -
    -

    <%= post.body %>

    +
    +
    + +
    + +

    <%= user.profile.first_name %>

    +
    +
    Posted on Thursday + +
    +
    +
    +
    +
    +

    <%= post.body %>

    +
    -
    - +
    + +<% post.comments.each do |comment| %> + <%= comment.body %> + <% end %> diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index fa8456617..6666ab3ed 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -379,7 +379,7 @@
    -
    +
    diff --git a/config/routes.rb b/config/routes.rb index 8528fe38a..26a02ad43 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,21 +6,20 @@ resource :profile resource :timeline, only: [:show] resources :posts, only: [:new, :create, :destroy] + resources :comments end resources :posts, only: [:new, :create, :destroy] do - resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Post' } #only temporary! + resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Post' } + resource :comment, only: [:create, :destroy], :defaults => { :commentable => 'Post' } end - # - # resources :comments do - # resources :likes, only: [:create, :destroy], :defaults => { :likeable => 'Comment' } - # end - - # resources :likes, :defaults => { :likeable => 'Like' } + resources :comments do + resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Comment' } + resource :comment, only: [:create, :destroy], :defaults => { :commentable => 'Comment' } + end - resource :session, only: [:new, :create, :destroy] get 'login' => 'sessions#new' diff --git a/db/migrate/20161213004439_add_authors_to_comments.rb b/db/migrate/20161213004439_add_authors_to_comments.rb new file mode 100644 index 000000000..f0371a3e5 --- /dev/null +++ b/db/migrate/20161213004439_add_authors_to_comments.rb @@ -0,0 +1,7 @@ +class AddAuthorsToComments < ActiveRecord::Migration[5.0] + def change + rename_column :comments, :post_id, :user_id + add_column :comments, :commentable_type, :string + add_column :comments, :commentable_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 20e49bc3a..931e2deb2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,17 +10,19 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161211222609) do +ActiveRecord::Schema.define(version: 20161213004439) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "comments", force: :cascade do |t| t.text "body" - t.integer "post_id" - t.integer "like_count", default: 0 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "user_id" + t.integer "like_count", default: 0 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "commentable_type" + t.integer "commentable_id" end create_table "likes", force: :cascade do |t| From 3d679148df3f5739f17bc06b56d43f0e02699831 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 12 Dec 2016 21:37:43 -0800 Subject: [PATCH 41/61] Include Rspec Testing --- .rspec | 2 + Gemfile | 4 ++ Gemfile.lock | 56 ++++++++++++++++++++ Guardfile | 70 ++++++++++++++++++++++++ spec/factories.rb | 16 ++++++ spec/models/comment_spec.rb | 1 + spec/models/like_spec.rb | 1 + spec/models/post_spec.rb | 1 + spec/models/profile_spec.rb | 1 + spec/models/timeline_spec.rb | 1 + spec/models/user_spec.rb | 1 + spec/rails_helper.rb | 58 ++++++++++++++++++++ spec/spec_helper.rb | 100 +++++++++++++++++++++++++++++++++++ 13 files changed, 312 insertions(+) create mode 100644 .rspec create mode 100644 Guardfile create mode 100644 spec/factories.rb create mode 100644 spec/models/comment_spec.rb create mode 100644 spec/models/like_spec.rb create mode 100644 spec/models/post_spec.rb create mode 100644 spec/models/profile_spec.rb create mode 100644 spec/models/timeline_spec.rb create mode 100644 spec/models/user_spec.rb create mode 100644 spec/rails_helper.rb create mode 100644 spec/spec_helper.rb diff --git a/.rspec b/.rspec new file mode 100644 index 000000000..83e16f804 --- /dev/null +++ b/.rspec @@ -0,0 +1,2 @@ +--color +--require spec_helper diff --git a/Gemfile b/Gemfile index 55a1cc8fe..c3736ead7 100644 --- a/Gemfile +++ b/Gemfile @@ -37,6 +37,10 @@ group :development, :test do gem 'byebug', platform: :mri gem 'better_errors' gem 'jazz_fingers' + gem 'factory_girl_rails' + gem 'rspec-rails' + gem 'guard-rspec' + gem 'rails-controller-testing' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index e2106f975..fa273eae1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -66,13 +66,34 @@ GEM coolline (0.5.0) unicode_utils (~> 1.4) debug_inspector (0.0.2) + diff-lcs (1.2.5) erubis (2.7.0) execjs (2.7.0) + factory_girl (4.7.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.7.0) + factory_girl (~> 4.7.0) + railties (>= 3.0.0) faker (1.6.6) i18n (~> 0.5) ffi (1.9.14) + formatador (0.2.5) globalid (0.3.7) activesupport (>= 4.1.0) + guard (2.14.0) + formatador (>= 0.2.4) + listen (>= 2.7, < 4.0) + lumberjack (~> 1.0) + nenv (~> 0.1) + notiffany (~> 0.0) + pry (>= 0.9.12) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-compat (1.2.1) + guard-rspec (4.7.3) + guard (~> 2.1) + guard-compat (~> 1.1) + rspec (>= 2.99.0, < 4.0) hirb (0.7.3) i18n (0.7.0) jazz_fingers (4.0.1) @@ -94,6 +115,7 @@ GEM rb-inotify (~> 0.9, >= 0.9.7) loofah (2.0.3) nokogiri (>= 1.5.9) + lumberjack (1.0.10) mail (2.6.4) mime-types (>= 1.16, < 4) method_source (0.8.2) @@ -103,9 +125,13 @@ GEM mini_portile2 (2.1.0) minitest (5.10.1) multi_json (1.12.1) + nenv (0.3.0) nio4r (1.2.1) nokogiri (1.6.8.1) mini_portile2 (~> 2.1.0) + notiffany (0.1.1) + nenv (~> 0.1) + shellany (~> 0.0) pg (0.19.0) pry (0.10.4) coderay (~> 1.1.0) @@ -135,6 +161,10 @@ GEM bundler (>= 1.3.0, < 2.0) railties (= 5.0.0.1) sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.1) + actionpack (~> 5.x) + actionview (~> 5.x) + activesupport (~> 5.x) rails-dom-testing (2.0.1) activesupport (>= 4.2.0, < 6.0) nokogiri (~> 1.6.0) @@ -155,6 +185,27 @@ GEM rb-fsevent (0.9.8) rb-inotify (0.9.7) ffi (>= 0.5.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-rails (3.5.2) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) sass (3.4.22) sass-rails (5.0.6) railties (>= 4.0.0, < 6) @@ -162,6 +213,7 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) + shellany (0.0.1) slop (3.6.0) spring (2.0.0) activesupport (>= 4.2) @@ -206,7 +258,9 @@ DEPENDENCIES bootstrap-sass byebug coffee-rails (~> 4.2) + factory_girl_rails faker + guard-rspec jazz_fingers jbuilder (~> 2.5) jquery-rails @@ -214,7 +268,9 @@ DEPENDENCIES pg (~> 0.18) puma (~> 3.0) rails (~> 5.0.0, >= 5.0.0.1) + rails-controller-testing rails_12factor + rspec-rails sass-rails (~> 5.0) spring spring-watcher-listen (~> 2.0.0) diff --git a/Guardfile b/Guardfile new file mode 100644 index 000000000..3215f0137 --- /dev/null +++ b/Guardfile @@ -0,0 +1,70 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +## Uncomment and set this to only include directories you want to watch +# directories %w(app lib config test spec features) \ +# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")} + +## Note: if you are using the `directories` clause above and you are not +## watching the project directory ('.'), then you will want to move +## the Guardfile to a watched dir and symlink it back, e.g. +# +# $ mkdir config +# $ mv Guardfile config/ +# $ ln -s config/Guardfile . +# +# and, you'll have to watch "config/Guardfile" instead of "Guardfile" + +# Note: The cmd option is now required due to the increasing number of ways +# rspec may be run, below are examples of the most common uses. +# * bundler: 'bundle exec rspec' +# * bundler binstubs: 'bin/rspec' +# * spring: 'bin/rspec' (This will use spring if running and you have +# installed the spring binstubs per the docs) +# * zeus: 'zeus rspec' (requires the server to be started separately) +# * 'just' rspec: 'rspec' + +guard :rspec, cmd: "bundle exec rspec" do + require "guard/rspec/dsl" + dsl = Guard::RSpec::Dsl.new(self) + + # Feel free to open issues for suggestions and improvements + + # RSpec files + rspec = dsl.rspec + watch(rspec.spec_helper) { rspec.spec_dir } + watch(rspec.spec_support) { rspec.spec_dir } + watch(rspec.spec_files) + + # Ruby files + ruby = dsl.ruby + dsl.watch_spec_files_for(ruby.lib_files) + + # Rails files + rails = dsl.rails(view_extensions: %w(erb haml slim)) + dsl.watch_spec_files_for(rails.app_files) + dsl.watch_spec_files_for(rails.views) + + watch(rails.controllers) do |m| + [ + rspec.spec.call("routing/#{m[1]}_routing"), + rspec.spec.call("controllers/#{m[1]}_controller"), + rspec.spec.call("acceptance/#{m[1]}") + ] + end + + # Rails config changes + watch(rails.spec_helper) { rspec.spec_dir } + watch(rails.routes) { "#{rspec.spec_dir}/routing" } + watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" } + + # Capybara features specs + watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") } + watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") } + + # Turnip features and steps + watch(%r{^spec/acceptance/(.+)\.feature$}) + watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m| + Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance" + end +end diff --git a/spec/factories.rb b/spec/factories.rb new file mode 100644 index 000000000..5851a1913 --- /dev/null +++ b/spec/factories.rb @@ -0,0 +1,16 @@ +FactoryGirl.define do + + factory :user do + sequence(:email){ |n| "#{n}@example.com" } + password "asdfasdf" + end + + factory :profile do + first_name + last_name + + association :user, factory: :user + end + + +end diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb new file mode 100644 index 000000000..63f198bcc --- /dev/null +++ b/spec/models/comment_spec.rb @@ -0,0 +1 @@ +require 'rails_helper' diff --git a/spec/models/like_spec.rb b/spec/models/like_spec.rb new file mode 100644 index 000000000..63f198bcc --- /dev/null +++ b/spec/models/like_spec.rb @@ -0,0 +1 @@ +require 'rails_helper' diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb new file mode 100644 index 000000000..63f198bcc --- /dev/null +++ b/spec/models/post_spec.rb @@ -0,0 +1 @@ +require 'rails_helper' diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb new file mode 100644 index 000000000..63f198bcc --- /dev/null +++ b/spec/models/profile_spec.rb @@ -0,0 +1 @@ +require 'rails_helper' diff --git a/spec/models/timeline_spec.rb b/spec/models/timeline_spec.rb new file mode 100644 index 000000000..63f198bcc --- /dev/null +++ b/spec/models/timeline_spec.rb @@ -0,0 +1 @@ +require 'rails_helper' diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 000000000..63f198bcc --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1 @@ +require 'rails_helper' diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 000000000..39d805953 --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,58 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'spec_helper' +require 'rspec/rails' +require 'factory_girl_rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } + +# Checks for pending migration and applies them before tests are run. +# If you are not using ActiveRecord, you can remove this line. +ActiveRecord::Migration.maintain_test_schema! + +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, :type => :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 000000000..172020629 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,100 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# The `.rspec` file also contains a few flags that are not defaults but that +# users commonly want. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + config.include FactoryGirl::Syntax::Methods + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = 'doc' + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end From 6b55f170686055d1cf84f6dd03e6705c040552c9 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Tue, 13 Dec 2016 07:47:20 -0800 Subject: [PATCH 42/61] add friending --- app/controllers/comments_controller.rb | 63 ++++++++++--------- app/controllers/timelines_controller.rb | 17 ++--- app/models/friending.rb | 8 +++ app/models/user.rb | 12 ++-- app/views/timelines/_display_post.html.erb | 3 +- app/views/timelines/show.html.erb | 2 +- config/routes.rb | 9 +-- .../20161213153803_create_friendings.rb | 11 ++++ db/schema.rb | 10 ++- spec/factories.rb | 3 + spec/models/friending_spec.rb | 5 ++ 11 files changed, 87 insertions(+), 56 deletions(-) create mode 100644 app/models/friending.rb create mode 100644 db/migrate/20161213153803_create_friendings.rb create mode 100644 spec/models/friending_spec.rb diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index d5926cdd9..94d64d53a 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,46 +1,49 @@ class CommentsController < ApplicationController - before_action :require_login, :except => [:show ] - # - # @commentable = extract_commentable - # @comment = @commentable.comments.build(comment_params) - # @comment.author = current_user - # resource :session, only: [:new, :create, :destroy] + before_action :require_login, :except => [:show ] + # + # @commentable = extract_commentable + # @comment = @commentable.comments.build(comment_params) + # @comment.author = current_user + # resource :session, only: [:new, :create, :destroy] + def new + end - def create - @post = Post.find(params[:post_id]) - @user = current_user - @comment.build(whitelisted_params) - @type = params[:commentable] - @comment.update_attributes(user_id: @user.id, - commentable_id: @post.id, - commentable_type: @type) + def create + @post = Post.find(params[:post_id]) + @user = current_user + @comment.build(whitelisted_params) + @type = params[:commentable] - @comment.save - redirect_to user_timeline_url(current_user) + @comment.update_attributes(user_id: @user.id, + commentable_id: @post.id, + commentable_type: @type) + @comment.save + redirect_to user_timeline_url(current_user) - end - def destroy - @post = Post.find(params[:post_id]) - @like = @post.likes.find_by_user_id(current_user.id) - # @post.likes.find_by_user_id(current_user) + end - @like.destroy + def destroy + @post = Post.find(params[:post_id]) + @like = @post.likes.find_by_user_id(current_user.id) + # @post.likes.find_by_user_id(current_user) - @post.like_count -= 1 - @post.save + @like.destroy - redirect_to user_timeline_url(current_user) - end + @post.like_count -= 1 + @post.save - private - def whitelisted_params - params.require(:comment).permit(:body) - end + redirect_to user_timeline_url(current_user) + end + + private + def whitelisted_params + params.require(:comment).permit(:body) + end diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb index d87a9ee6d..2f2482759 100644 --- a/app/controllers/timelines_controller.rb +++ b/app/controllers/timelines_controller.rb @@ -2,6 +2,12 @@ class TimelinesController < ApplicationController before_action :require_login, :except => [:show ] + def new + end + + def create + end + def show @user = User.find(params[:user_id]) @posts = @user.posts @@ -10,17 +16,6 @@ def show end - # - # def whitelisted_params - # params.require(:user).permit(:email, - # :password, - # :password_confirmation, - # { profile_attributes: [:birthday, - # :gender, - # :first_name, - # :last_name]} - # ) - # end end diff --git a/app/models/friending.rb b/app/models/friending.rb new file mode 100644 index 000000000..c0db916d4 --- /dev/null +++ b/app/models/friending.rb @@ -0,0 +1,8 @@ +class Friending < ApplicationRecord + + belongs_to :friend_initiator, foreign_key: :friender_id, class_name: "User" + belongs_to :friend_recipient, foreign_key: :friend_id, class_name: "User" + + validates :friend_id, uniqueness: { scope: :friender_id } + +end diff --git a/app/models/user.rb b/app/models/user.rb index c6b5d1fb3..219937809 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,19 +1,21 @@ class User < ApplicationRecord before_create :generate_token - after_save { email.downcase.strip } has_many :posts, dependent: :nullify - has_many :comments - has_one :profile, inverse_of: :user + has_many :initiated_friendings, foreign_key: :friender_id, class_name: "Friending" + has_many :friended_users, through: :initiated_friendings, source: :friend_recipient - accepts_nested_attributes_for :profile - has_secure_password + has_many :received_friendings, foreign_key: :friend_id, class_name: "Friending" + has_many :users_friended_by, through: :received_friendings, source: :friend_initiator + # has_many :comments + accepts_nested_attributes_for :profile + has_secure_password validates :password, length: { minimum: 6 }, allow_nil: true diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index 81e9ee9d4..b1518a939 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -46,8 +46,7 @@
    - <%= form_for post_comment_url(post) do |comment_builder| %> - + <%= form_for post_comment_path do |comment_builder| %> <%= comment_builder.label :body, "Write a comment..." %> diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index 6666ab3ed..939aa9a17 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -148,7 +148,7 @@ <%= render 'posts/post_form' %> <% end %> - <% @posts.each do |post| %> + <% @posts.reverse.each do |post| %> <%= render partial: 'display_post', locals: { user: @user, post: post } %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 26a02ad43..7416bf6a6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,22 +6,19 @@ resource :profile resource :timeline, only: [:show] resources :posts, only: [:new, :create, :destroy] - resources :comments - end + end resources :posts, only: [:new, :create, :destroy] do resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Post' } - resource :comment, only: [:create, :destroy], :defaults => { :commentable => 'Post' } + resource :comment, :defaults => { :commentable => 'Post' } end resources :comments do resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Comment' } - resource :comment, only: [:create, :destroy], :defaults => { :commentable => 'Comment' } + # resource :comment, :defaults => { :commentable => 'Comment' } end - - get 'login' => 'sessions#new' get 'logout' => 'sessions#destroy' diff --git a/db/migrate/20161213153803_create_friendings.rb b/db/migrate/20161213153803_create_friendings.rb new file mode 100644 index 000000000..89edffbb7 --- /dev/null +++ b/db/migrate/20161213153803_create_friendings.rb @@ -0,0 +1,11 @@ +class CreateFriendings < ActiveRecord::Migration[5.0] + def change + create_table :friendings do |t| + t.integer :friend_id, null: false + t.integer :friender_id, null: false + + t.timestamps + end + add_index :friendings, [:friend_id, :friender_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 931e2deb2..184067aec 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161213004439) do +ActiveRecord::Schema.define(version: 20161213153803) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,6 +25,14 @@ t.integer "commentable_id" end + create_table "friendings", force: :cascade do |t| + t.integer "friend_id", null: false + t.integer "friender_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["friend_id", "friender_id"], name: "index_friendings_on_friend_id_and_friender_id", unique: true, using: :btree + end + create_table "likes", force: :cascade do |t| t.integer "user_id" t.integer "likeable_id" diff --git a/spec/factories.rb b/spec/factories.rb index 5851a1913..32a966e76 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,4 +1,7 @@ FactoryGirl.define do + factory :friending do + + end factory :user do sequence(:email){ |n| "#{n}@example.com" } diff --git a/spec/models/friending_spec.rb b/spec/models/friending_spec.rb new file mode 100644 index 000000000..e5b208edf --- /dev/null +++ b/spec/models/friending_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Friending, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 13fe921b1b2c829766d8bbf0bfbe98a6521ca6fc Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Tue, 13 Dec 2016 07:54:15 -0800 Subject: [PATCH 43/61] clean up routes, add friendings controller --- app/assets/javascripts/friendings.coffee | 3 +++ app/assets/stylesheets/friendings.scss | 3 +++ app/controllers/friendings_controller.rb | 7 +++++++ app/helpers/friendings_helper.rb | 2 ++ app/views/friendings/create.html.erb | 2 ++ app/views/friendings/destroy.html.erb | 2 ++ config/routes.rb | 8 +++++--- .../controllers/friendings_controller_spec.rb | 19 +++++++++++++++++++ spec/helpers/friendings_helper_spec.rb | 15 +++++++++++++++ spec/views/friendings/create.html.erb_spec.rb | 5 +++++ .../views/friendings/destroy.html.erb_spec.rb | 5 +++++ 11 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 app/assets/javascripts/friendings.coffee create mode 100644 app/assets/stylesheets/friendings.scss create mode 100644 app/controllers/friendings_controller.rb create mode 100644 app/helpers/friendings_helper.rb create mode 100644 app/views/friendings/create.html.erb create mode 100644 app/views/friendings/destroy.html.erb create mode 100644 spec/controllers/friendings_controller_spec.rb create mode 100644 spec/helpers/friendings_helper_spec.rb create mode 100644 spec/views/friendings/create.html.erb_spec.rb create mode 100644 spec/views/friendings/destroy.html.erb_spec.rb diff --git a/app/assets/javascripts/friendings.coffee b/app/assets/javascripts/friendings.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/app/assets/javascripts/friendings.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/friendings.scss b/app/assets/stylesheets/friendings.scss new file mode 100644 index 000000000..25e6461f0 --- /dev/null +++ b/app/assets/stylesheets/friendings.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the friendings controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/friendings_controller.rb b/app/controllers/friendings_controller.rb new file mode 100644 index 000000000..0373cda57 --- /dev/null +++ b/app/controllers/friendings_controller.rb @@ -0,0 +1,7 @@ +class FriendingsController < ApplicationController + def create + end + + def destroy + end +end diff --git a/app/helpers/friendings_helper.rb b/app/helpers/friendings_helper.rb new file mode 100644 index 000000000..fce356995 --- /dev/null +++ b/app/helpers/friendings_helper.rb @@ -0,0 +1,2 @@ +module FriendingsHelper +end diff --git a/app/views/friendings/create.html.erb b/app/views/friendings/create.html.erb new file mode 100644 index 000000000..262587e8f --- /dev/null +++ b/app/views/friendings/create.html.erb @@ -0,0 +1,2 @@ +

    Friendings#create

    +

    Find me in app/views/friendings/create.html.erb

    diff --git a/app/views/friendings/destroy.html.erb b/app/views/friendings/destroy.html.erb new file mode 100644 index 000000000..4806ce78c --- /dev/null +++ b/app/views/friendings/destroy.html.erb @@ -0,0 +1,2 @@ +

    Friendings#destroy

    +

    Find me in app/views/friendings/destroy.html.erb

    diff --git a/config/routes.rb b/config/routes.rb index 7416bf6a6..6d7614046 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,15 +10,17 @@ end resources :posts, only: [:new, :create, :destroy] do - resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Post' } - resource :comment, :defaults => { :commentable => 'Post' } + resource :like, only: [:create, :destroy], defaults: { likeable: 'Post' } + resource :comment, defaults: { commentable: 'Post' } end resources :comments do - resource :like, only: [:create, :destroy], :defaults => { :likeable => 'Comment' } + resource :like, only: [:create, :destroy], defaults: { likeable: 'Comment' } # resource :comment, :defaults => { :commentable => 'Comment' } end + resources :friendings, only: [:create, :destroy] + get 'login' => 'sessions#new' get 'logout' => 'sessions#destroy' diff --git a/spec/controllers/friendings_controller_spec.rb b/spec/controllers/friendings_controller_spec.rb new file mode 100644 index 000000000..27637f27d --- /dev/null +++ b/spec/controllers/friendings_controller_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe FriendingsController, type: :controller do + + describe "GET #create" do + it "returns http success" do + get :create + expect(response).to have_http_status(:success) + end + end + + describe "GET #destroy" do + it "returns http success" do + get :destroy + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/helpers/friendings_helper_spec.rb b/spec/helpers/friendings_helper_spec.rb new file mode 100644 index 000000000..e8a5977d7 --- /dev/null +++ b/spec/helpers/friendings_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the FriendingsHelper. For example: +# +# describe FriendingsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe FriendingsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/friendings/create.html.erb_spec.rb b/spec/views/friendings/create.html.erb_spec.rb new file mode 100644 index 000000000..ec8ec1d81 --- /dev/null +++ b/spec/views/friendings/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "friendings/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/friendings/destroy.html.erb_spec.rb b/spec/views/friendings/destroy.html.erb_spec.rb new file mode 100644 index 000000000..81d78d98d --- /dev/null +++ b/spec/views/friendings/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "friendings/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end From 0792161a5067cfa6994cdcafc523fdac3ffe0c67 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Tue, 13 Dec 2016 11:38:34 -0800 Subject: [PATCH 44/61] Comments working --- .rspec | 1 + Gemfile | 2 ++ Gemfile.lock | 16 ++++++++++++++++ app/controllers/comments_controller.rb | 6 ++++-- app/controllers/friendings_controller.rb | 1 + app/models/comment.rb | 4 ++-- app/models/post.rb | 2 ++ app/models/user.rb | 2 +- app/views/timelines/_display_post.html.erb | 4 ++-- app/views/timelines/show.html.erb | 2 +- config/routes.rb | 12 +++++++----- spec/features/users_spec.rb | 0 spec/rails_helper.rb | 3 +++ spec/spec_helper.rb | 1 - spec/support/login_macros.rb | 3 +++ 15 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 spec/features/users_spec.rb create mode 100644 spec/support/login_macros.rb diff --git a/.rspec b/.rspec index 83e16f804..7e3eb5c7c 100644 --- a/.rspec +++ b/.rspec @@ -1,2 +1,3 @@ --color --require spec_helper +--format doc diff --git a/Gemfile b/Gemfile index c3736ead7..424f08a64 100644 --- a/Gemfile +++ b/Gemfile @@ -41,6 +41,8 @@ group :development, :test do gem 'rspec-rails' gem 'guard-rspec' gem 'rails-controller-testing' + gem 'capybara' + gem 'launchy' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index fa273eae1..4d9709992 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,6 +38,8 @@ GEM i18n (~> 0.7) minitest (~> 5.1) tzinfo (~> 1.1) + addressable (2.5.0) + public_suffix (~> 2.0, >= 2.0.2) arel (7.1.4) autoprefixer-rails (6.5.3.1) execjs @@ -54,6 +56,13 @@ GEM sass (>= 3.3.4) builder (3.2.2) byebug (9.0.6) + capybara (2.7.1) + addressable + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + xpath (~> 2.0) coderay (1.1.1) coffee-rails (4.2.1) coffee-script (>= 2.2.0) @@ -110,6 +119,8 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) + launchy (2.4.3) + addressable (~> 2.3) listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -145,6 +156,7 @@ GEM pry-doc (0.9.0) pry (~> 0.9) yard (~> 0.8) + public_suffix (2.0.4) puma (3.6.2) rack (2.0.1) rack-test (0.6.3) @@ -246,6 +258,8 @@ GEM websocket-driver (0.6.4) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.2) + xpath (2.0.0) + nokogiri (~> 1.3) yard (0.9.5) PLATFORMS @@ -257,6 +271,7 @@ DEPENDENCIES binding_of_caller bootstrap-sass byebug + capybara coffee-rails (~> 4.2) factory_girl_rails faker @@ -264,6 +279,7 @@ DEPENDENCIES jazz_fingers jbuilder (~> 2.5) jquery-rails + launchy listen (~> 3.0.5) pg (~> 0.18) puma (~> 3.0) diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 94d64d53a..a03dff56f 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -14,14 +14,15 @@ def new def create @post = Post.find(params[:post_id]) @user = current_user - @comment.build(whitelisted_params) + + @comment = @post.comments.build(whitelisted_params) @type = params[:commentable] @comment.update_attributes(user_id: @user.id, commentable_id: @post.id, commentable_type: @type) - @comment.save + redirect_to user_timeline_url(current_user) @@ -41,6 +42,7 @@ def destroy end private + def whitelisted_params params.require(:comment).permit(:body) end diff --git a/app/controllers/friendings_controller.rb b/app/controllers/friendings_controller.rb index 0373cda57..e2fcaa5ed 100644 --- a/app/controllers/friendings_controller.rb +++ b/app/controllers/friendings_controller.rb @@ -1,5 +1,6 @@ class FriendingsController < ApplicationController def create + end def destroy diff --git a/app/models/comment.rb b/app/models/comment.rb index dc926ef09..69e9c5377 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,6 +1,6 @@ class Comment < ApplicationRecord has_many :likes, :as => :likeable validates :body, presence: true - belongs_to :post - has_many :comments, :as => :commentable + + belongs_to :commentable, :polymorphic => true end diff --git a/app/models/post.rb b/app/models/post.rb index 858803425..b676d5790 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1,7 +1,9 @@ class Post < ApplicationRecord belongs_to :user validates :body, presence: true, length: { maximum: 255 } + has_many :likes, :as => :likeable + has_many :comments, :as => :commentable end diff --git a/app/models/user.rb b/app/models/user.rb index 219937809..a87e71d63 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,7 +9,7 @@ class User < ApplicationRecord has_many :friended_users, through: :initiated_friendings, source: :friend_recipient has_many :received_friendings, foreign_key: :friend_id, class_name: "Friending" - has_many :users_friended_by, through: :received_friendings, source: :friend_initiator + has_many :users_friended_by, through: :received_friendings, source: :friend_initiato # has_many :comments diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index b1518a939..cb068ffd3 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -46,11 +46,11 @@
    - <%= form_for post_comment_path do |comment_builder| %> + <%= form_for [post, post.comments.build] do |comment_builder| %> <%= comment_builder.label :body, "Write a comment..." %> - <%= comment_builder.text_area :body, cols: "50", rows: "10" %> + <%= comment_builder.text_field :body, cols: "50", rows: "10" %>
    diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index 939aa9a17..bdfe22ff0 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -149,7 +149,7 @@ <% end %> <% @posts.reverse.each do |post| %> - <%= render partial: 'display_post', locals: { user: @user, post: post } %> + <%= render partial: 'display_post', locals: { user: @user, post: post } if post.persisted? %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 6d7614046..c0dfed7d1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,22 +6,24 @@ resource :profile resource :timeline, only: [:show] resources :posts, only: [:new, :create, :destroy] - end resources :posts, only: [:new, :create, :destroy] do resource :like, only: [:create, :destroy], defaults: { likeable: 'Post' } - resource :comment, defaults: { commentable: 'Post' } + resources :comments, defaults: { commentable: 'Post' } end - resources :comments do - resource :like, only: [:create, :destroy], defaults: { likeable: 'Comment' } + # resources :comments do + # resource :like, only: [:create, :destroy], defaults: { likeable: 'Comment' } # resource :comment, :defaults => { :commentable => 'Comment' } - end + # end resources :friendings, only: [:create, :destroy] get 'login' => 'sessions#new' get 'logout' => 'sessions#destroy' + # + # get 'comment_create' => 'comments#new' + # post 'comment/:post_id' => 'comments#create' end diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb new file mode 100644 index 000000000..e69de29bb diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 39d805953..64769f327 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -6,6 +6,7 @@ require 'spec_helper' require 'rspec/rails' require 'factory_girl_rails' +require 'capybara/rails' # Add additional requires below this line. Rails is not loaded until this point! # Requires supporting ruby files with custom matchers and macros, etc, in @@ -28,6 +29,8 @@ ActiveRecord::Migration.maintain_test_schema! RSpec.configure do |config| + config.include LoginMacros + config.include FactoryGirl::Syntax::Methods # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 172020629..8f698be46 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -17,7 +17,6 @@ # # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration RSpec.configure do |config| - config.include FactoryGirl::Syntax::Methods # rspec-expectations config goes here. You can use an alternate # assertion/expectation library such as wrong or the stdlib/minitest # assertions if you prefer. diff --git a/spec/support/login_macros.rb b/spec/support/login_macros.rb new file mode 100644 index 000000000..3cb1a93ae --- /dev/null +++ b/spec/support/login_macros.rb @@ -0,0 +1,3 @@ +module LoginMacros + +end From 53005b0a3fb5942a79190cbc3a2ca95a578c8d22 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Tue, 13 Dec 2016 17:00:40 -0800 Subject: [PATCH 45/61] feature testing users --- README.md | 7 +-- app/controllers/sessions_controller.rb | 11 ++--- app/controllers/timelines_controller.rb | 3 -- config/routes.rb | 6 +-- notes.txt | 4 ++ .../controllers/friendings_controller_spec.rb | 19 -------- spec/factories.rb | 16 +++---- spec/features/users_spec.rb | 32 +++++++++++++ spec/helpers/friendings_helper_spec.rb | 15 ------- spec/models/friending_spec.rb | 5 --- spec/models/user_spec.rb | 45 +++++++++++++++++++ spec/rails_helper.rb | 2 +- spec/support/login_macros.rb | 29 ++++++++++++ spec/views/friendings/create.html.erb_spec.rb | 5 --- .../views/friendings/destroy.html.erb_spec.rb | 5 --- 15 files changed, 126 insertions(+), 78 deletions(-) delete mode 100644 spec/controllers/friendings_controller_spec.rb delete mode 100644 spec/views/friendings/create.html.erb_spec.rb delete mode 100644 spec/views/friendings/destroy.html.erb_spec.rb diff --git a/README.md b/README.md index b38bf59d4..b8d37e905 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,5 @@ This is the Real Dane Deal. [An HTML5, CSS3, Bootstrap, and SASS project of the Viking Code School](http://www.vikingcodeschool.com) -
    -

    Kenny Kottenstette

    -
    - -

    Click for preview

    +*** +###Kenny Kottenstette diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 7919b2ae7..37649d8a1 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -2,12 +2,6 @@ class SessionsController < ApplicationController skip_before_action :require_login, :only => [:new, :create] - - def new - - end - - def create @user = User.find_by_email(params[:email]) if @user && @user.authenticate(params[:password]) @@ -17,10 +11,11 @@ def create sign_in(@user) end flash[:success] = "Welcome!" - redirect_to edit_user_profile_url(current_user) + redirect_to user_timeline_path(current_user) + # redirect_to edit_user_profile_url(current_user) else flash.now[:error] = "Couldn't log in" - render root_url + redirect_to root_url end end diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb index 2f2482759..c546ee0b3 100644 --- a/app/controllers/timelines_controller.rb +++ b/app/controllers/timelines_controller.rb @@ -15,7 +15,4 @@ def show @post.user_id = current_user.id end - - - end diff --git a/config/routes.rb b/config/routes.rb index c0dfed7d1..cc613759f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -18,12 +18,10 @@ # resource :comment, :defaults => { :commentable => 'Comment' } # end - resources :friendings, only: [:create, :destroy] + # resources :friendings, only: [:create, :destroy] + resource :session, only: [:new, :create, :destroy] get 'login' => 'sessions#new' get 'logout' => 'sessions#destroy' - # - # get 'comment_create' => 'comments#new' - # post 'comment/:post_id' => 'comments#create' end diff --git a/notes.txt b/notes.txt index 839e04aed..822099610 100644 --- a/notes.txt +++ b/notes.txt @@ -1,3 +1,7 @@ +# print page.html +# save_and_open_pag + + #check out shallow nesting --> http://guides.rubyonrails.org/routing.html ~~ # the explicit way diff --git a/spec/controllers/friendings_controller_spec.rb b/spec/controllers/friendings_controller_spec.rb deleted file mode 100644 index 27637f27d..000000000 --- a/spec/controllers/friendings_controller_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe FriendingsController, type: :controller do - - describe "GET #create" do - it "returns http success" do - get :create - expect(response).to have_http_status(:success) - end - end - - describe "GET #destroy" do - it "returns http success" do - get :destroy - expect(response).to have_http_status(:success) - end - end - -end diff --git a/spec/factories.rb b/spec/factories.rb index 32a966e76..da6bec1e8 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,17 +1,17 @@ FactoryGirl.define do - factory :friending do - - end factory :user do - sequence(:email){ |n| "#{n}@example.com" } - password "asdfasdf" + email "asdf@asdf.com" + # sequence(:email){ |n| "#{n}@example.com" } + password "123456" end factory :profile do - first_name - last_name - + first_name "Bob" + last_name "Bob" + birthday Date.today + gender "Male" + association :user, factory: :user end diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb index e69de29bb..781c7eeed 100644 --- a/spec/features/users_spec.rb +++ b/spec/features/users_spec.rb @@ -0,0 +1,32 @@ +require 'rails_helper' + +feature "sign in" do + let(:user) { profile.user } + let(:profile) { create(:profile) } + + context "unauthenticated user" do + + + scenario "can create a profile" do + expect{create_account}.to change(User, :count).by(1) + end + end + + + + context "returning user" do + scenario "signing in brings a user to their timeline page" do + sign_in(user) + expect(current_path).to eq(user_timeline_path(user)) + end + end + + # click_on "Enter the Danebook" + + + + + + + +end diff --git a/spec/helpers/friendings_helper_spec.rb b/spec/helpers/friendings_helper_spec.rb index e8a5977d7..e69de29bb 100644 --- a/spec/helpers/friendings_helper_spec.rb +++ b/spec/helpers/friendings_helper_spec.rb @@ -1,15 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the FriendingsHelper. For example: -# -# describe FriendingsHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end -RSpec.describe FriendingsHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/models/friending_spec.rb b/spec/models/friending_spec.rb index e5b208edf..e69de29bb 100644 --- a/spec/models/friending_spec.rb +++ b/spec/models/friending_spec.rb @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe Friending, type: :model do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 63f198bcc..c39279531 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1 +1,46 @@ require 'rails_helper' + +describe User do + let(:user){ create(:user) } + + describe "on creation" do + + it "is valid with default attributes" do + expect(user).to be_valid + end + + it "is invalid without an '@'" do + invalid_user = build :user, email: "asdf" + expect(user).to be_valid + end + + it "is valid without an '@'" do + invalid_user = build :user, email: "asdf" + expect(user).to be_valid + end + + it "is valid with a password length greater than 5" do + expect(user).to be_valid + end + + it "is invalid with a password length less than 6" do + invalid_user = build :user, password: "12345" + expect(invalid_user).to be_invalid + end + + it "is invalid without an unique password" do + invalid_user = build :user, email: user.email + expect(invalid_user).to be_invalid + end + + end + + context "associations" do + + it "responds to its profile association" do + expect(user).to respond_to(:profile) + end + + end + +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 64769f327..82d6145d6 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -22,7 +22,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } +Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } # Checks for pending migration and applies them before tests are run. # If you are not using ActiveRecord, you can remove this line. diff --git a/spec/support/login_macros.rb b/spec/support/login_macros.rb index 3cb1a93ae..2236940c9 100644 --- a/spec/support/login_macros.rb +++ b/spec/support/login_macros.rb @@ -1,3 +1,32 @@ module LoginMacros + def sign_in(user) + visit root_url + within "#navbar form" do + fill_in "Email", with: user.email + fill_in "Password", with: user.password + click_on "Enter the Danebook" + end + end + + def sign_out + # + end + + def create_account + visit root_url + within "form#new_user" do + fill_in "Email", with: "ermusk@spacex.com" + fill_in "Password", with: "asdfasdf" + fill_in "Password confirmation", with: "asdfasdf" + fill_in "First name", with: "Elon" + fill_in "Last name", with: "Musk" + select('January', from: 'Select month') + select('1', from: 'Select day') + select('1980', from: 'Select year') + choose('Male') + click_on "Create Account" + end + end + end diff --git a/spec/views/friendings/create.html.erb_spec.rb b/spec/views/friendings/create.html.erb_spec.rb deleted file mode 100644 index ec8ec1d81..000000000 --- a/spec/views/friendings/create.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe "friendings/create.html.erb", type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/views/friendings/destroy.html.erb_spec.rb b/spec/views/friendings/destroy.html.erb_spec.rb deleted file mode 100644 index 81d78d98d..000000000 --- a/spec/views/friendings/destroy.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe "friendings/destroy.html.erb", type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end From 57d2c1c5f5ab7687d56616069b78f4ca74f885c3 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Tue, 13 Dec 2016 19:49:40 -0800 Subject: [PATCH 46/61] create account test functioning --- notes.txt | 26 ++++++++++++++++++++++++++ spec/factories.rb | 2 +- spec/features/users_spec.rb | 21 +++++---------------- spec/support/login_macros.rb | 8 ++++---- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/notes.txt b/notes.txt index 822099610..31bdd6454 100644 --- a/notes.txt +++ b/notes.txt @@ -59,3 +59,29 @@ Posts display the first few names of who liked them -add indexes +------------------ + +# Highlights a potential bug where a nested resource could have the same ID as the current user causing the logical expression `params[:id] == current_user.id.to_s` to be true and not redirecting when it should + +# user/:user_id/posts/:id/update +# user_id == 1 +# post.id == 1 + + +# HAS BUG +def require_current_user + unless params[:id] == current_user.id.to_s || params[:user_id] == current_user.id.to_s + # redirect here + end +end + + +# Fixes bug +def require_current_user + user_id_key = controller_name == 'users' ? :id : :user_id + unless params[user_id_key] == current_user.id.to_s + # + end +end + +---------------------- diff --git a/spec/factories.rb b/spec/factories.rb index da6bec1e8..7ab4935ca 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,5 +1,5 @@ FactoryGirl.define do - +#call back to create profile factory :user do email "asdf@asdf.com" # sequence(:email){ |n| "#{n}@example.com" } diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb index 781c7eeed..5755cd544 100644 --- a/spec/features/users_spec.rb +++ b/spec/features/users_spec.rb @@ -6,27 +6,16 @@ context "unauthenticated user" do - scenario "can create a profile" do expect{create_account}.to change(User, :count).by(1) end end - - - context "returning user" do - scenario "signing in brings a user to their timeline page" do - sign_in(user) - expect(current_path).to eq(user_timeline_path(user)) - end + context "returning user" do + scenario "signing in brings a user to their timeline page" do + sign_in(user) + expect(current_path).to eq(user_timeline_path(user)) end - - # click_on "Enter the Danebook" - - - - - - + end end diff --git a/spec/support/login_macros.rb b/spec/support/login_macros.rb index 2236940c9..c91c08ed3 100644 --- a/spec/support/login_macros.rb +++ b/spec/support/login_macros.rb @@ -20,10 +20,10 @@ def create_account fill_in "Password confirmation", with: "asdfasdf" fill_in "First name", with: "Elon" fill_in "Last name", with: "Musk" - select('January', from: 'Select month') - select('1', from: 'Select day') - select('1980', from: 'Select year') - choose('Male') + find("#user_profile_attributes_birthday_2i").select("January") + find("#user_profile_attributes_birthday_3i").select("1") + find("#user_profile_attributes_birthday_1i").select("1980") + choose('user_profile_attributes_gender_male') click_on "Create Account" end end From 726818664d91e241ab2408941ce5c5191a0f44b6 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Tue, 13 Dec 2016 21:16:38 -0800 Subject: [PATCH 47/61] clean up comments --- app/assets/stylesheets/custom.scss | 4 ++ app/views/comments/_posted_comment.html.erb | 28 +++++++++++ app/views/friendings/create.html.erb | 2 - app/views/friendings/destroy.html.erb | 2 - app/views/likes/_like_button.html.erb | 8 +-- app/views/likes/_likes_display.html.erb | 1 + app/views/posts/_post_form.html.erb | 14 ++---- app/views/posts/_posted_header.html.erb | 28 +++++++++++ app/views/timelines/_display_post.html.erb | 54 ++++++++++++++------- app/views/timelines/show.html.erb | 12 +++-- 10 files changed, 114 insertions(+), 39 deletions(-) create mode 100644 app/views/comments/_posted_comment.html.erb delete mode 100644 app/views/friendings/create.html.erb delete mode 100644 app/views/friendings/destroy.html.erb create mode 100644 app/views/likes/_likes_display.html.erb create mode 100644 app/views/posts/_posted_header.html.erb diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index 7befbd633..aaf540bd5 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -259,3 +259,7 @@ nav { #email-login { margin: 10px 0; } + + .hidden{ + display: none; + } diff --git a/app/views/comments/_posted_comment.html.erb b/app/views/comments/_posted_comment.html.erb new file mode 100644 index 000000000..95d3cc960 --- /dev/null +++ b/app/views/comments/_posted_comment.html.erb @@ -0,0 +1,28 @@ +
    + +
    + +

    <%= user.profile.first_name %>

    +
    +
    + <%= "Posted on #{comment.created_at.strftime('%B, %d, %Y')}" %> +
    +
    +
    +
    +
    +

    + <%= comment.body %> +

    + +
    + + diff --git a/app/views/friendings/create.html.erb b/app/views/friendings/create.html.erb deleted file mode 100644 index 262587e8f..000000000 --- a/app/views/friendings/create.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

    Friendings#create

    -

    Find me in app/views/friendings/create.html.erb

    diff --git a/app/views/friendings/destroy.html.erb b/app/views/friendings/destroy.html.erb deleted file mode 100644 index 4806ce78c..000000000 --- a/app/views/friendings/destroy.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

    Friendings#destroy

    -

    Find me in app/views/friendings/destroy.html.erb

    diff --git a/app/views/likes/_like_button.html.erb b/app/views/likes/_like_button.html.erb index 74eb7d176..8906e7aa9 100644 --- a/app/views/likes/_like_button.html.erb +++ b/app/views/likes/_like_button.html.erb @@ -1,3 +1,5 @@ -<%= link_to "Like", user_post_likes_path(user, post), method: :post %> - -<%= link_to "Unlike", user_post_likes_path(user, post), method: :delete %> +<% if post.likes.find_by_user_id(current_user.id) %> + <%= link_to "Unlike", post_like_path(post), method: :delete %> +<% else %> + <%= link_to "Like", post_like_path(post), method: :post %> +<% end %> diff --git a/app/views/likes/_likes_display.html.erb b/app/views/likes/_likes_display.html.erb new file mode 100644 index 000000000..b5edeeda4 --- /dev/null +++ b/app/views/likes/_likes_display.html.erb @@ -0,0 +1 @@ +<%= "#{pluralize(post.like_count, "like")}" if post.like_count > 0 %> diff --git a/app/views/posts/_post_form.html.erb b/app/views/posts/_post_form.html.erb index cb5ee34d5..a2a64410c 100644 --- a/app/views/posts/_post_form.html.erb +++ b/app/views/posts/_post_form.html.erb @@ -4,15 +4,11 @@
    <%= form_for [@user, @post] do |post_builder| %> -

    <%= post_builder.label :body, label: false %>

    - <%= post_builder.text_area :body, cols: "30", rows: "10" %> - - <%= post_builder.submit "Post", class: 'btn btn-success' %> -<% end %> - + <%= post_builder.label :body, class: 'hidden' %> + <%= post_builder.text_area :body, placeholder: placeholder="Tell the world something...", rows: 4, class: 'form-control' %>
    -
    + diff --git a/app/views/posts/_posted_header.html.erb b/app/views/posts/_posted_header.html.erb new file mode 100644 index 000000000..7f4a409db --- /dev/null +++ b/app/views/posts/_posted_header.html.erb @@ -0,0 +1,28 @@ +
    +
    + +
    + +

    <%= "#{user.profile.first_name} #{user.profile.last_name}" %>

    +
    +
    + + <%= "Posted on #{post.created_at.strftime('%B, %d, %Y')}" %> + +
    +
    +
    +
    +
    +

    + <%= post.body %> +

    + +
    +
    diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index cb068ffd3..912d9bf16 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -1,5 +1,5 @@
    -
    + + <%= render partial: 'posts/posted_header', locals: { user: user, post: post } %> +
    - -<% post.comments.each do |comment| %> - <%= comment.body %> - <% end %> diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index bdfe22ff0..6e84e795f 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -143,18 +143,20 @@
    - + <% if current_user.id == @user.id %> <%= render 'posts/post_form' %> <% end %> + <% @posts.reverse.each do |post| %> - <%= render partial: 'display_post', locals: { user: @user, post: post } if post.persisted? %> + <% if post.persisted? %> + <%= render partial: 'display_post', locals: { user: @user, post: post } %> + <% end %> <% end %> -
    @@ -379,7 +381,7 @@
    - + From 75fc2d8d9182519d3274070b0d1cfdbf10402758 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 14 Dec 2016 11:46:05 -0800 Subject: [PATCH 48/61] remove old /test directory, add views/controllers test directories --- Gemfile | 1 + Gemfile.lock | 3 ++ app/controllers/likes_controller.rb | 11 ++++- app/views/comments/_posted_comment.html.erb | 12 +++-- app/views/posts/_posted_header.html.erb | 39 ++++++---------- app/views/timelines/_display_post.html.erb | 44 +++++-------------- config/routes.rb | 3 +- .../controllers/profiles_controller_spec.rb | 0 .../controllers/timelines_controller_spec.rb | 0 .../controllers/users_controller_spec.rb | 0 .../.keep => spec/views/profiles/edit_spec.rb | 0 .../.keep => spec/views/profiles/show_spec.rb | 0 .../views/profiles/update_spec.rb | 0 .../views/timelines/show_spec.rb | 0 test/controllers/comments_controller_test.rb | 7 --- test/controllers/likes_controller_test.rb | 7 --- test/controllers/posts_controller_test.rb | 34 -------------- test/controllers/profiles_controller_test.rb | 7 --- test/controllers/sessions_controller_test.rb | 14 ------ test/controllers/timelines_controller_test.rb | 34 -------------- test/controllers/users_controller_test.rb | 7 --- test/fixtures/comments.yml | 11 ----- test/fixtures/likes.yml | 11 ----- test/fixtures/posts.yml | 11 ----- test/fixtures/profiles.yml | 13 ------ test/fixtures/users.yml | 9 ---- test/models/comment_test.rb | 7 --- test/models/like_test.rb | 7 --- test/models/post_test.rb | 7 --- test/models/profile_test.rb | 7 --- test/models/user_test.rb | 7 --- test/test_helper.rb | 10 ----- 32 files changed, 46 insertions(+), 277 deletions(-) rename test/controllers/.keep => spec/controllers/profiles_controller_spec.rb (100%) rename test/fixtures/.keep => spec/controllers/timelines_controller_spec.rb (100%) rename test/fixtures/files/.keep => spec/controllers/users_controller_spec.rb (100%) rename test/helpers/.keep => spec/views/profiles/edit_spec.rb (100%) rename test/integration/.keep => spec/views/profiles/show_spec.rb (100%) rename test/mailers/.keep => spec/views/profiles/update_spec.rb (100%) rename test/models/.keep => spec/views/timelines/show_spec.rb (100%) delete mode 100644 test/controllers/comments_controller_test.rb delete mode 100644 test/controllers/likes_controller_test.rb delete mode 100644 test/controllers/posts_controller_test.rb delete mode 100644 test/controllers/profiles_controller_test.rb delete mode 100644 test/controllers/sessions_controller_test.rb delete mode 100644 test/controllers/timelines_controller_test.rb delete mode 100644 test/controllers/users_controller_test.rb delete mode 100644 test/fixtures/comments.yml delete mode 100644 test/fixtures/likes.yml delete mode 100644 test/fixtures/posts.yml delete mode 100644 test/fixtures/profiles.yml delete mode 100644 test/fixtures/users.yml delete mode 100644 test/models/comment_test.rb delete mode 100644 test/models/like_test.rb delete mode 100644 test/models/post_test.rb delete mode 100644 test/models/profile_test.rb delete mode 100644 test/models/user_test.rb delete mode 100644 test/test_helper.rb diff --git a/Gemfile b/Gemfile index 424f08a64..884630357 100644 --- a/Gemfile +++ b/Gemfile @@ -43,6 +43,7 @@ group :development, :test do gem 'rails-controller-testing' gem 'capybara' gem 'launchy' + gem 'shoulda-matchers', '~> 3.1' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 4d9709992..ecd45fd36 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -226,6 +226,8 @@ GEM sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) shellany (0.0.1) + shoulda-matchers (3.1.1) + activesupport (>= 4.0.0) slop (3.6.0) spring (2.0.0) activesupport (>= 4.2) @@ -288,6 +290,7 @@ DEPENDENCIES rails_12factor rspec-rails sass-rails (~> 5.0) + shoulda-matchers (~> 3.1) spring spring-watcher-listen (~> 2.0.0) turbolinks (~> 5) diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index 399e64608..aed399454 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -1,8 +1,7 @@ class LikesController < ApplicationController - before_action :require_login, :except => [:show ] + before_action :require_login, :except => [:show] -#likeable_type #Like.create(user_id: b.user_id, likeable_id: b.id, likeable_type: "Post") def create @@ -36,5 +35,13 @@ def destroy private + def context + if params[:likeable_type] == 'Post' + # + elsif params[:likeable_type] == 'Comment' + # + end + end + end diff --git a/app/views/comments/_posted_comment.html.erb b/app/views/comments/_posted_comment.html.erb index 95d3cc960..81669b140 100644 --- a/app/views/comments/_posted_comment.html.erb +++ b/app/views/comments/_posted_comment.html.erb @@ -1,4 +1,4 @@ -
    +
    -
    +

    <%= comment.body %>

    +
    +
    +
    +
    - <%= render partial: 'posts/posted_header', locals: { user: user, post: post } %> +
    diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index 956eaa3ae..028e75700 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -34,11 +34,24 @@
    <% post.comments.each do |comment| %>

    - <%# if comment.persisted? %> - <%#= render partial: 'comments/posted_comment', locals: { user: user, comment: comment, post: post } %> - <%# end %> - <%= comment.body %> -

    + <% if comment.persisted? %> + <%= render partial: 'comments/posted_comment', locals: { user: user, comment: comment, post: post } %> + <% end %> + + +

    + + <% if comment.likes.find_by_user_id(current_user.id) %> + <%= link_to "Unlike", comment_like_path(comment), method: :delete %> + <% else %> + <%= link_to "Like", comment_like_path(comment), method: :post %> + <% end %> + + <%= "#{pluralize(comment.like_count, "like")}" if comment.like_count > 0 %> + + + + <% end %>
    diff --git a/config/routes.rb b/config/routes.rb index ff9bebbc7..272bae9e4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,9 +13,9 @@ resources :comments, defaults: { commentable: 'Post' } end - # resources :comments do - # resource :like, only: [:create, :destroy], defaults: { likeable: 'Comment' } - # end + resources :comments do + resource :like, only: [:create, :destroy], defaults: { likeable: 'Comment' } + end # resources :friendings, only: [:create, :destroy] From 790d850b056033964009535df626bdd5afe8d8b7 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 14 Dec 2016 21:25:14 -0800 Subject: [PATCH 50/61] Preliminary controllers/views tests --- app/controllers/timelines_controller.rb | 15 ++++----- spec/controllers/likes_controller_spec.rb | 21 +++++++++++++ spec/controllers/users_controller_spec.rb | 37 +++++++++++++++++++++++ spec/factories.rb | 31 +++++++++++++++---- spec/features/users_spec.rb | 10 +++--- spec/support/login_macros.rb | 28 ++++++++--------- spec/views/timelines/show_spec.rb | 10 ++++++ 7 files changed, 120 insertions(+), 32 deletions(-) create mode 100644 spec/controllers/likes_controller_spec.rb diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb index c546ee0b3..a6c8b91b9 100644 --- a/app/controllers/timelines_controller.rb +++ b/app/controllers/timelines_controller.rb @@ -2,17 +2,18 @@ class TimelinesController < ApplicationController before_action :require_login, :except => [:show ] - def new - end - - def create - end - def show @user = User.find(params[:user_id]) @posts = @user.posts @post = Post.new - @post.user_id = current_user.id end + private + def whitelisted_params + params.require(:profile).permit( :motto, :college, :residing, :phone, :hometown, :about, + :gender, + :first_name, + :last_name) + end + end diff --git a/spec/controllers/likes_controller_spec.rb b/spec/controllers/likes_controller_spec.rb new file mode 100644 index 000000000..f6049ca7c --- /dev/null +++ b/spec/controllers/likes_controller_spec.rb @@ -0,0 +1,21 @@ +# require 'rails_helper' +# +# describe LikesController do +# let(:user) { profile.user } +# let(:post) { post.user } +# # let(:profile) { create(:profile) } +# +# before do +# session[:user_id] = user.id +# end +# +# describe 'POST #create' do +# context 'valid liking on a post' do +# it 'creates a like' do +# expect { +# process :create, params: { like: attributes_for(:like) } +# }.to change(Like, :count).by(1)} +# end +# end +# end +# end diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index e69de29bb..73b264214 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -0,0 +1,37 @@ +require 'rails_helper' +describe UsersController do + # let(:user) { profile.user } + # let(:profile) { create(:profile) } + + describe 'POST #create' do + context 'with valid input' do + it 'creates users' do + expect { + process :create, params: { user: attributes_for(:user) } + }.to change(User, :count).by(1) + end + it 'redirects to timeline' do + process :create, params: { user: attributes_for(:user) } + expect(response).to redirect_to(edit_user_profile_path(User.last)) + end + it 'authenticates user' do + process :create, params: { user: attributes_for(:user) } + expect(cookies[:auth_token]).to eq(User.last.auth_token) + end + end + context 'with invalid input' do + it 'doesn\'t create user' do + expect { + process :create, params: { user: attributes_for(:user, password: 'no') } + }.to change(User, :count).by(0) + end + + it 'doesn\'t create user' do + process :create, params: { user: attributes_for(:user, password: 'no') } + expect(flash[:error]).to eq("Try again") + end + end + + + end +end diff --git a/spec/factories.rb b/spec/factories.rb index 7ab4935ca..295888ace 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,17 +1,36 @@ FactoryGirl.define do #call back to create profile factory :user do - email "asdf@asdf.com" - # sequence(:email){ |n| "#{n}@example.com" } - password "123456" + email 'asdf@asdf.com' + password '123456' end factory :profile do - first_name "Bob" - last_name "Bob" + first_name 'Bob' + last_name 'Bob' birthday Date.today - gender "Male" + gender 'Male' + association :user, factory: :user + end + + factory :post do + body 'posting body' + like_count 0 + created_at Date.yesterday + association :user, factory: :user + end + + factory :comment do + body 'commenting body' + like_count 0 + created_at Date.yesterday + association :user, factory: :user + end + factory :post_like do + likeable_type 'Post' + created_at Date.yesterday + association :post, factory: :post association :user, factory: :user end diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb index 5755cd544..473af44ff 100644 --- a/spec/features/users_spec.rb +++ b/spec/features/users_spec.rb @@ -1,18 +1,18 @@ require 'rails_helper' -feature "sign in" do +feature 'sign in' do let(:user) { profile.user } let(:profile) { create(:profile) } - context "unauthenticated user" do + context 'unauthenticated user' do - scenario "can create a profile" do + scenario 'can create a profile' do expect{create_account}.to change(User, :count).by(1) end end - context "returning user" do - scenario "signing in brings a user to their timeline page" do + context 'returning user' do + scenario 'signing in brings a user to their timeline page' do sign_in(user) expect(current_path).to eq(user_timeline_path(user)) end diff --git a/spec/support/login_macros.rb b/spec/support/login_macros.rb index c91c08ed3..0b4b2a117 100644 --- a/spec/support/login_macros.rb +++ b/spec/support/login_macros.rb @@ -1,10 +1,10 @@ module LoginMacros def sign_in(user) visit root_url - within "#navbar form" do - fill_in "Email", with: user.email - fill_in "Password", with: user.password - click_on "Enter the Danebook" + within '#navbar form' do + fill_in 'Email', with: user.email + fill_in 'Password', with: user.password + click_on 'Enter the Danebook' end end @@ -14,17 +14,17 @@ def sign_out def create_account visit root_url - within "form#new_user" do - fill_in "Email", with: "ermusk@spacex.com" - fill_in "Password", with: "asdfasdf" - fill_in "Password confirmation", with: "asdfasdf" - fill_in "First name", with: "Elon" - fill_in "Last name", with: "Musk" - find("#user_profile_attributes_birthday_2i").select("January") - find("#user_profile_attributes_birthday_3i").select("1") - find("#user_profile_attributes_birthday_1i").select("1980") + within 'form#new_user' do + fill_in 'Email', with: 'ermusk@spacex.com' + fill_in 'Password', with: 'asdfasdf' + fill_in 'Password confirmation', with: 'asdfasdf' + fill_in 'First name', with: 'Elon' + fill_in 'Last name', with: 'Musk' + find('#user_profile_attributes_birthday_2i').select('January') + find('#user_profile_attributes_birthday_3i').select('1') + find('#user_profile_attributes_birthday_1i').select('1980') choose('user_profile_attributes_gender_male') - click_on "Create Account" + click_on 'Create Account' end end diff --git a/spec/views/timelines/show_spec.rb b/spec/views/timelines/show_spec.rb index e69de29bb..718b6703b 100644 --- a/spec/views/timelines/show_spec.rb +++ b/spec/views/timelines/show_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +describe 'timelines/show.html.erb' do + let(:user) { profile.user } + let(:profile) { create(:profile) } + + context '' + + +end From 5fa003e718750cc1942e228c9292a6c5f37c8454 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 14 Dec 2016 22:07:13 -0800 Subject: [PATCH 51/61] redirect refractorings --- app/controllers/comments_controller.rb | 30 +++------------------- app/controllers/likes_controller.rb | 6 ++--- app/controllers/posts_controller.rb | 1 - app/controllers/sessions_controller.rb | 1 - app/models/comment.rb | 2 +- app/models/like.rb | 2 +- app/models/post.rb | 5 ++-- app/models/profile.rb | 29 +++++---------------- app/models/user.rb | 10 ++++---- app/views/posts/update.html.erb | 2 -- app/views/shared/_banner_nav.html.erb | 4 +++ app/views/timelines/_display_post.html.erb | 4 ++- 12 files changed, 29 insertions(+), 67 deletions(-) delete mode 100644 app/views/posts/update.html.erb diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index a03dff56f..1b3f47f7d 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,16 +1,9 @@ class CommentsController < ApplicationController before_action :require_login, :except => [:show ] - # - # @commentable = extract_commentable - # @comment = @commentable.comments.build(comment_params) - # @comment.author = current_user - # resource :session, only: [:new, :create, :destroy] def new - end - def create @post = Post.find(params[:post_id]) @user = current_user @@ -22,23 +15,14 @@ def create commentable_id: @post.id, commentable_type: @type) @comment.save - - redirect_to user_timeline_url(current_user) - - + redirect_to :back end def destroy - @post = Post.find(params[:post_id]) - @like = @post.likes.find_by_user_id(current_user.id) - # @post.likes.find_by_user_id(current_user) - - @like.destroy + @comment = Comment.find(params[:id]) + @comment.destroy - @post.like_count -= 1 - @post.save - - redirect_to user_timeline_url(current_user) + redirect_to :back end private @@ -46,10 +30,4 @@ def destroy def whitelisted_params params.require(:comment).permit(:body) end - - - - - - end diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index c03b614ab..8ee69466c 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -10,7 +10,7 @@ def create @likeable.like_count += 1 @likeable.save - redirect_to user_timeline_url(current_user) + redirect_to :back end def destroy @@ -19,8 +19,8 @@ def destroy like = @likeable.likes.find_by_user_id(current_user.id) like.destroy @likeable.like_count -= 1 - @likeable.save #go back to - redirect_to user_timeline_url(current_user) + @likeable.save + redirect_to :back end private diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 2901724f8..705e06ef6 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -1,7 +1,6 @@ class PostsController < ApplicationController skip_before_action :require_login, only: [:show, :index] - # before_action :require_current_user, :only => [:create] def new @post = Post.new diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 37649d8a1..861368e48 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -12,7 +12,6 @@ def create end flash[:success] = "Welcome!" redirect_to user_timeline_path(current_user) - # redirect_to edit_user_profile_url(current_user) else flash.now[:error] = "Couldn't log in" redirect_to root_url diff --git a/app/models/comment.rb b/app/models/comment.rb index 6108f8cd4..2b95d38e2 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -2,5 +2,5 @@ class Comment < ApplicationRecord validates :body, presence: true belongs_to :commentable, :polymorphic => true - has_many :likes, :as => :likeable + has_many :likes, as: :likeable, dependent: :destroy end diff --git a/app/models/like.rb b/app/models/like.rb index dd423b06b..e0f33c7a3 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -1,3 +1,3 @@ class Like < ApplicationRecord - belongs_to :likeable, :polymorphic => true + belongs_to :likeable, polymorphic: true end diff --git a/app/models/post.rb b/app/models/post.rb index b676d5790..cdfcf7c5d 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -2,8 +2,7 @@ class Post < ApplicationRecord belongs_to :user validates :body, presence: true, length: { maximum: 255 } - has_many :likes, :as => :likeable - - has_many :comments, :as => :commentable + has_many :likes, as: :likeable + has_many :comments, as: :commentable end diff --git a/app/models/profile.rb b/app/models/profile.rb index 40fadb1af..58e6961fb 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -1,28 +1,11 @@ class Profile < ApplicationRecord belongs_to :user, inverse_of: :profile - #after_validation { first_name.strip.titleize ; last_name.strip.titleize } - - # before_save { self.first_name.downcase!.strip! } - # before_save { self.last_name.downcase!.strip! } - # - # validates :first_name, :last_name, presence: true, - # length: { maximum: 20 }, - # :format => /[a-z]\s[a-z]/ - - - - # - # validates :motto, :about, - # length: { maximum: 20 }, - # validates :gender, - # validates :phone - - -#whitelist valid letters (ie no numbers/symbols) + validates :first_name, :last_name, presence: true, + length: { maximum: 20 }, + :format => /[a-z]\s[a-z]/ + validates :motto, :about, length: { maximum: 600 } + validates :gender, presence: true + validates :phone, length: { maximum: 10 }, :format => /[0-9]/ end -# validates :email, presence: true, -# length: { maximum: 255 }, -# :format => /@/, -# uniqueness: { case_sensitive: false } diff --git a/app/models/user.rb b/app/models/user.rb index c73202427..b459dbf14 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,18 +2,18 @@ class User < ApplicationRecord before_create :generate_token after_save { email.downcase.strip } - has_many :posts, dependent: :nullify - has_one :profile, inverse_of: :user + has_many :posts, dependent: :destroy + has_one :profile, inverse_of: :user, dependent: :destroy has_many :initiated_friendings, foreign_key: :friender_id, class_name: "Friending" has_many :friended_users, through: :initiated_friendings, source: :friend_recipient has_many :received_friendings, foreign_key: :friend_id, class_name: "Friending" - has_many :users_friended_by, through: :received_friendings, source: :friend_initiato + has_many :users_friended_by, through: :received_friendings, source: :friend_initiator - has_many :likes + has_many :likes, dependent: :destroy - has_many :comments + has_many :comments, dependent: :destroy accepts_nested_attributes_for :profile diff --git a/app/views/posts/update.html.erb b/app/views/posts/update.html.erb deleted file mode 100644 index 40b27c46e..000000000 --- a/app/views/posts/update.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -1>Posts#update

    -

    Find me in app/views/posts/update.html.erb

    diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index cfb150839..775b38b75 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -28,5 +28,9 @@ <% if current_user.id == @user.id %> <% end %> + + + + diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index 028e75700..cb48a753c 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -49,7 +49,9 @@ <%= "#{pluralize(comment.like_count, "like")}" if comment.like_count > 0 %> - + <% if comment.user_id == current_user.id %> + <%= link_to "Delete", { :controller => 'comments', :action => 'destroy', :id => comment.id }, method: :delete, data: { confirm: 'Delete comment?' } %> + <% end %> <% end %> From ee74a79754850dca727ebb75b31e7d5de78f6da0 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 14 Dec 2016 23:04:24 -0800 Subject: [PATCH 52/61] add friending! --- app/controllers/friendings_controller.rb | 11 +++++++++++ app/views/comments/_posted_comment.html.erb | 5 ----- app/views/shared/_banner_nav.html.erb | 8 ++++++++ config/routes.rb | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/controllers/friendings_controller.rb b/app/controllers/friendings_controller.rb index e2fcaa5ed..49f265786 100644 --- a/app/controllers/friendings_controller.rb +++ b/app/controllers/friendings_controller.rb @@ -1,8 +1,19 @@ class FriendingsController < ApplicationController + + def index + end + def create + friending_recipient = User.find(params[:id]) + current_user.friended_users << friending_recipient + redirect_to :back end def destroy + unfriended_user = User.find(params[:id]) + current_user.friended_users.delete(unfriended_user) + redirect_to :back end + end diff --git a/app/views/comments/_posted_comment.html.erb b/app/views/comments/_posted_comment.html.erb index 00495d6cf..31f04d763 100644 --- a/app/views/comments/_posted_comment.html.erb +++ b/app/views/comments/_posted_comment.html.erb @@ -16,7 +16,6 @@
    -

    <%= comment.body %>

    @@ -26,7 +25,3 @@
    - - diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index 775b38b75..cafe7cfb8 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -30,6 +30,14 @@ <% end %> + <% if current_user.id != @user.id %> + <% if current_user.friended_users.pluck(:id).include?(@user.id) %> + <%= link_to "Unfriend", friending_path(@user), method: :delete, class: "btn btn-danger col-sm-2" %> + <% else %> + <%= link_to "Friend", friendings_path(id: @user.id), method: :post, class: "btn btn-success col-sm-2" %> + <% end %> + <% end %> + diff --git a/config/routes.rb b/config/routes.rb index 272bae9e4..1ca6864b7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -17,7 +17,7 @@ resource :like, only: [:create, :destroy], defaults: { likeable: 'Comment' } end - # resources :friendings, only: [:create, :destroy] + resources :friendings, only: [:create, :destroy] resource :session, only: [:new, :create, :destroy] get 'login' => 'sessions#new' From 4e9783915d6e80199212bf7b56c5c0fb2e2996d2 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Wed, 14 Dec 2016 23:15:33 -0800 Subject: [PATCH 53/61] changed required auth to view others --- app/controllers/posts_controller.rb | 1 + app/controllers/profiles_controller.rb | 4 ++-- app/controllers/timelines_controller.rb | 2 +- app/views/timelines/_display_post.html.erb | 2 -- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 705e06ef6..fb0a1e489 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -1,6 +1,7 @@ class PostsController < ApplicationController skip_before_action :require_login, only: [:show, :index] + before_action :require_current_user, :only => [:edit, :update, :destroy] def new @post = Post.new diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 5fe530dc2..b218af51e 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -1,6 +1,6 @@ class ProfilesController < ApplicationController - before_action :require_login, :except => [:show ] - before_action :require_current_user, :only => [:edit, :update, :destroy] + before_action :require_login + before_action :require_current_user, :only => [:update, :destroy] def show @user = User.find(params[:user_id]) diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb index a6c8b91b9..a75e3f191 100644 --- a/app/controllers/timelines_controller.rb +++ b/app/controllers/timelines_controller.rb @@ -1,6 +1,6 @@ class TimelinesController < ApplicationController - before_action :require_login, :except => [:show ] + before_action :require_login#, :only => [:show ] def show @user = User.find(params[:user_id]) diff --git a/app/views/timelines/_display_post.html.erb b/app/views/timelines/_display_post.html.erb index cb48a753c..fee37cc62 100644 --- a/app/views/timelines/_display_post.html.erb +++ b/app/views/timelines/_display_post.html.erb @@ -37,8 +37,6 @@ <% if comment.persisted? %> <%= render partial: 'comments/posted_comment', locals: { user: user, comment: comment, post: post } %> <% end %> - -

    <% if comment.likes.find_by_user_id(current_user.id) %> From 348c26d7f92fd72047cee88816e7ebce50ea5d98 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Fri, 16 Dec 2016 14:13:20 -0800 Subject: [PATCH 54/61] friends fixed --- .gitignore | 3 + Gemfile | 4 + Gemfile.lock | 25 ++ app/assets/javascripts/photos.coffee | 3 + app/assets/stylesheets/photos.scss | 3 + app/controllers/friendings_controller.rb | 2 + app/controllers/photos_controller.rb | 38 +++ app/controllers/users_controller.rb | 2 - app/helpers/friendings_helper.rb | 5 + app/helpers/photos_helper.rb | 2 + app/models/friending.rb | 3 +- app/models/photo.rb | 9 + app/models/profile.rb | 11 +- app/models/user.rb | 18 +- app/views/friendings/index.html.erb | 48 +++ app/views/photos/_picture_grid.html.erb | 10 + app/views/photos/index.html.erb | 154 ++++++++++ app/views/photos/new.html.erb | 10 + app/views/shared/_banner_nav.html.erb | 6 +- app/views/shared/_search_nav.html.erb | 2 +- app/views/timelines/show.html.erb | 284 ++---------------- config/environments/development.rb | 39 +++ config/routes.rb | 2 + config/secrets.yml | 8 +- db/migrate/20161216001719_create_photos.rb | 10 + .../20161216002516_add_paperclip_to_photo.rb | 5 + db/schema.rb | 13 +- old_files/timeline.html | 11 +- spec/controllers/photos_controller_spec.rb | 5 + spec/factories.rb | 3 + spec/features/photos_spec.rb | 16 + spec/helpers/photos_helper_spec.rb | 15 + spec/models/photo_spec.rb | 5 + 33 files changed, 498 insertions(+), 276 deletions(-) create mode 100644 app/assets/javascripts/photos.coffee create mode 100644 app/assets/stylesheets/photos.scss create mode 100644 app/controllers/photos_controller.rb create mode 100644 app/helpers/photos_helper.rb create mode 100644 app/models/photo.rb create mode 100644 app/views/friendings/index.html.erb create mode 100644 app/views/photos/_picture_grid.html.erb create mode 100644 app/views/photos/index.html.erb create mode 100644 app/views/photos/new.html.erb create mode 100644 db/migrate/20161216001719_create_photos.rb create mode 100644 db/migrate/20161216002516_add_paperclip_to_photo.rb create mode 100644 spec/controllers/photos_controller_spec.rb create mode 100644 spec/features/photos_spec.rb create mode 100644 spec/helpers/photos_helper_spec.rb create mode 100644 spec/models/photo_spec.rb diff --git a/.gitignore b/.gitignore index 48fb168f6..10f5eb295 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ # Ignore Byebug command history file. .byebug_history + +# Ignore application configuration +/config/application.yml diff --git a/Gemfile b/Gemfile index 884630357..03c9feef4 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,9 @@ source 'https://rubygems.org' +gem 'paperclip' +gem 'aws-sdk' +gem 'figaro' + gem 'bootstrap-sass' gem 'binding_of_caller' diff --git a/Gemfile.lock b/Gemfile.lock index ecd45fd36..7dbac9501 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -44,6 +44,14 @@ GEM autoprefixer-rails (6.5.3.1) execjs awesome_print (1.7.0) + aws-sdk (2.6.36) + aws-sdk-resources (= 2.6.36) + aws-sdk-core (2.6.36) + aws-sigv4 (~> 1.0) + jmespath (~> 1.0) + aws-sdk-resources (2.6.36) + aws-sdk-core (= 2.6.36) + aws-sigv4 (1.0.0) bcrypt (3.1.11) better_errors (2.1.1) coderay (>= 1.0.0) @@ -63,6 +71,10 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + climate_control (0.0.3) + activesupport (>= 3.0) + cocaine (0.5.8) + climate_control (>= 0.0.3, < 1.0) coderay (1.1.1) coffee-rails (4.2.1) coffee-script (>= 2.2.0) @@ -86,6 +98,8 @@ GEM faker (1.6.6) i18n (~> 0.5) ffi (1.9.14) + figaro (1.1.1) + thor (~> 0.14) formatador (0.2.5) globalid (0.3.7) activesupport (>= 4.1.0) @@ -115,6 +129,7 @@ GEM jbuilder (2.6.1) activesupport (>= 3.0.0, < 5.1) multi_json (~> 1.2) + jmespath (1.3.1) jquery-rails (4.2.1) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) @@ -133,6 +148,7 @@ GEM mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) + mimemagic (0.3.2) mini_portile2 (2.1.0) minitest (5.10.1) multi_json (1.12.1) @@ -143,6 +159,12 @@ GEM notiffany (0.1.1) nenv (~> 0.1) shellany (~> 0.0) + paperclip (5.1.0) + activemodel (>= 4.2.0) + activesupport (>= 4.2.0) + cocaine (~> 0.5.5) + mime-types + mimemagic (~> 0.3.0) pg (0.19.0) pry (0.10.4) coderay (~> 1.1.0) @@ -268,6 +290,7 @@ PLATFORMS ruby DEPENDENCIES + aws-sdk bcrypt (~> 3.1.7) better_errors binding_of_caller @@ -277,12 +300,14 @@ DEPENDENCIES coffee-rails (~> 4.2) factory_girl_rails faker + figaro guard-rspec jazz_fingers jbuilder (~> 2.5) jquery-rails launchy listen (~> 3.0.5) + paperclip pg (~> 0.18) puma (~> 3.0) rails (~> 5.0.0, >= 5.0.0.1) diff --git a/app/assets/javascripts/photos.coffee b/app/assets/javascripts/photos.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/app/assets/javascripts/photos.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/photos.scss b/app/assets/stylesheets/photos.scss new file mode 100644 index 000000000..1a3e082cd --- /dev/null +++ b/app/assets/stylesheets/photos.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the photos controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/friendings_controller.rb b/app/controllers/friendings_controller.rb index 49f265786..988a3b496 100644 --- a/app/controllers/friendings_controller.rb +++ b/app/controllers/friendings_controller.rb @@ -1,6 +1,8 @@ class FriendingsController < ApplicationController def index + @user = User.find(params[:user_id]) + @friends = @user.friended_users end def create diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb new file mode 100644 index 000000000..6ada80772 --- /dev/null +++ b/app/controllers/photos_controller.rb @@ -0,0 +1,38 @@ +class PhotosController < ApplicationController + + def index + @user = User.find(params[:user_id]) + @posts = @user.posts + @photos = @user.photos + end + + def new + @user = User.find(params[:user_id]) + @photo = Photo.new + end + + def show + @user = User.find(params[:user_id]) + end + + def create + @photo = current_user.photos.build(photo_params) + + if @photo.save + redirect_to user_photos_path + # 'Photo was successfully created.' + else + render action: 'new' + end + end + + def destroy + end + + + private + def photo_params + params.require(:photo).permit(:picture) + end + +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1bbc13081..ff8cf7ea4 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,8 +1,6 @@ class UsersController < ApplicationController skip_before_action :require_login, :only => [:new, :create, :index, :show] - def index - end def show @user = User.find(params[:id]) diff --git a/app/helpers/friendings_helper.rb b/app/helpers/friendings_helper.rb index fce356995..ce024e784 100644 --- a/app/helpers/friendings_helper.rb +++ b/app/helpers/friendings_helper.rb @@ -1,2 +1,7 @@ module FriendingsHelper + + def friend_count(user_id) + User.find(user_id).users_friended_by.count + end + end diff --git a/app/helpers/photos_helper.rb b/app/helpers/photos_helper.rb new file mode 100644 index 000000000..0a10d472b --- /dev/null +++ b/app/helpers/photos_helper.rb @@ -0,0 +1,2 @@ +module PhotosHelper +end diff --git a/app/models/friending.rb b/app/models/friending.rb index c0db916d4..d313db118 100644 --- a/app/models/friending.rb +++ b/app/models/friending.rb @@ -4,5 +4,6 @@ class Friending < ApplicationRecord belongs_to :friend_recipient, foreign_key: :friend_id, class_name: "User" validates :friend_id, uniqueness: { scope: :friender_id } - + + end diff --git a/app/models/photo.rb b/app/models/photo.rb new file mode 100644 index 000000000..37fb216ad --- /dev/null +++ b/app/models/photo.rb @@ -0,0 +1,9 @@ +class Photo < ApplicationRecord + belongs_to :user + has_attached_file :picture, styles: { + thumb: "100x100", small: "200x200" } + + validates_attachment_content_type :picture, content_type: /\Aimage\/.*\Z/ + + +end diff --git a/app/models/profile.rb b/app/models/profile.rb index 58e6961fb..a6eb72d6e 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -1,11 +1,10 @@ class Profile < ApplicationRecord belongs_to :user, inverse_of: :profile - validates :first_name, :last_name, presence: true, - length: { maximum: 20 }, - :format => /[a-z]\s[a-z]/ + # validates :first_name, :last_name, presence: true, + # length: { maximum: 20 } - validates :motto, :about, length: { maximum: 600 } - validates :gender, presence: true - validates :phone, length: { maximum: 10 }, :format => /[0-9]/ + # validates :motto, :about, length: { maximum: 600 } + # validates :gender, presence: true + # validates :phone, length: { maximum: 10 }, :format => /[0-9]/ end diff --git a/app/models/user.rb b/app/models/user.rb index b459dbf14..a89cfa2b8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,15 +5,21 @@ class User < ApplicationRecord has_many :posts, dependent: :destroy has_one :profile, inverse_of: :user, dependent: :destroy - has_many :initiated_friendings, foreign_key: :friender_id, class_name: "Friending" - has_many :friended_users, through: :initiated_friendings, source: :friend_recipient + has_many :initiated_friendings, foreign_key: :friender_id, + class_name: "Friending" - has_many :received_friendings, foreign_key: :friend_id, class_name: "Friending" - has_many :users_friended_by, through: :received_friendings, source: :friend_initiator + has_many :friended_users, through: :initiated_friendings, + source: :friend_recipient - has_many :likes, dependent: :destroy + has_many :received_friendings, foreign_key: :friend_id, + class_name: "Friending" + + has_many :users_friended_by, through: :received_friendings, + source: :friend_initiator + has_many :likes, dependent: :destroy has_many :comments, dependent: :destroy + has_many :photos accepts_nested_attributes_for :profile @@ -40,4 +46,6 @@ def regenerate_auth_token save! end + + end diff --git a/app/views/friendings/index.html.erb b/app/views/friendings/index.html.erb new file mode 100644 index 000000000..83a7de04c --- /dev/null +++ b/app/views/friendings/index.html.erb @@ -0,0 +1,48 @@ +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> + +
    +
    +
    +
    +
    +

    Friends

    +
    +
    +
    +
    + + <% @friends.each do |friend| %> + +
    +
      +
    • + User's Medium Photo +
    • +
    • +

      + <%= link_to "#{friend.profile.first_name} #{friend.profile.last_name}", user_timeline_path(friend.id) %> +

      +

      + <%= "#{pluralize(friend_count(friend.id), 'Friend') unless friend_count(friend.id).zero?}" %> +

      +
    • + + <% if current_user.id == current_user.id %> +
    • + <%= button_to "Unfriend", friending_path(friend.id), method: :delete, data: { confirm: "Unfriend #{friend.profile.first_name} #{friend.profile.last_name}" }, class: "btn btn-danger" %> +
    • + <% end %> + +
    +
    + + <% end %> + + +
    +
    +
    +
    diff --git a/app/views/photos/_picture_grid.html.erb b/app/views/photos/_picture_grid.html.erb new file mode 100644 index 000000000..5b85b8110 --- /dev/null +++ b/app/views/photos/_picture_grid.html.erb @@ -0,0 +1,10 @@ + diff --git a/app/views/photos/index.html.erb b/app/views/photos/index.html.erb new file mode 100644 index 000000000..bb9c5238f --- /dev/null +++ b/app/views/photos/index.html.erb @@ -0,0 +1,154 @@ +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> + +
    +
    +
    +
    +
    +

    + Photos +

    + + <% if current_user.id == @user.id %> + <%= button_to "Add Photo!", new_user_photo_path(@user), :method => "get", class: "btn btn-info col-xs-2 col-xs-offset-3" %> + <% end %> + +
    +
    +
    +
    + + <% @photos.each do |photo| %> + <%= render partial: 'picture_grid', locals: { user: @user, photo: photo } %> + <% end %> + +
    + + + + + +
    +
    +
    +
    diff --git a/app/views/photos/new.html.erb b/app/views/photos/new.html.erb new file mode 100644 index 000000000..283111676 --- /dev/null +++ b/app/views/photos/new.html.erb @@ -0,0 +1,10 @@ +<%= form_for [@user, @photo] do |f| %> + +
    + <%= f.file_field :picture %> +
    + +
    + <%= f.submit %> +
    +<% end %> diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index cafe7cfb8..20669f477 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -17,10 +17,9 @@ About - Photos123 - + Photos<%= @user.photos.count %> - Friends542 + Friends<%= current_user.friended_users.count %> @@ -42,3 +41,4 @@ +
    diff --git a/app/views/shared/_search_nav.html.erb b/app/views/shared/_search_nav.html.erb index c894d6a1e..41ff019a3 100644 --- a/app/views/shared/_search_nav.html.erb +++ b/app/views/shared/_search_nav.html.erb @@ -8,7 +8,7 @@ - <%= link_to "#", class: "navbar-brand" do %> + <%= link_to user_timeline_path(current_user.id), class: "navbar-brand" do %> <%= image_tag "danish_flag.gif", class: "img-circle img-responsive img-small" %> Danebook <% end %> diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index 6e84e795f..9c81cc618 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -21,20 +21,34 @@ - + + + <% if @user.profile.college %> - + + <% end %> + + <% if @user.profile.hometown %> - + + <% end %> + + <% if @user.profile.residing %> - + + <% end %> + + +
    Born on:July 31st, 1980 + <%= @user.profile.birthday.strftime("%B %d, %Y") %> +
    Went to school at:Hogwards<%= @user.profile.college %>
    Hometown:Godrick's Hollow, England<%= @user.hometown.college %>
    Currently Lives:Godrick's Hollow, England<%= @user.profile.residing %>
    @@ -44,8 +58,14 @@
    -

    Photos 123

    + + +

    + Photos <%= @user.photos.count %> +

    + + +
    @@ -74,8 +94,9 @@
    - -
    See More Photos
    +
    + <%= link_to "See More Photos", user_photos_path(@user.id), class: "col-xs-12 text-center" %> +
    @@ -86,7 +107,7 @@

    Friends 542

    + "badge"><%= @user.friended_users.count%>

    @@ -131,8 +152,9 @@
    - -
    See More Friends
    +
    + <%= link_to "See More Friends", user_friendings_path(@user.id), class: "col-xs-12 text-center" %> +
    @@ -156,246 +178,6 @@ <% end %> - - - -
    -
    -
    - -
    - -

    Harry Potter

    -
    Posted on Thursday
    -
    -
    -
    -
    -

    Lorem ipsum dolor sit amet, consectetur - adipisicing elit, sed do eiusmod tempor incididunt ut labore - et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud - exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in - voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa - qui officia deserunt mollit anim id est laborum.

    -
    -
    - -
    - - - - - - - - - - - -
    -
    -
    -
    - -
    - -

    Harry Potter

    -
    Posted on Thursday
    -
    -
    -
    -
    -

    Lorem ipsum dolor sit amet, consectetur - adipisicing elit, sed do eiusmod tempor incididunt ut labore - et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud - exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in - voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa - qui officia deserunt mollit anim id est laborum.

    -
    -
    - -
    - diff --git a/config/environments/development.rb b/config/environments/development.rb index 6f7197045..bd163a44d 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,4 +1,43 @@ Rails.application.configure do + + + Paperclip.options[:command_path] = "/usr/local/bin" + + config.paperclip_defaults = { + :storage => :s3, + + :s3_credentials => { + + :s3_host_name => "us-west-1.amazonaws.com", + :s3_region => "us-west-1", + + # NOTE: these lines are changed to use secrets.yml + # from the examples (which use ENV vars instead) + :bucket => Rails.application.secrets.s3_bucket_name, + :access_key_id => Rails.application.secrets.aws_access_key_id, + :secret_access_key => Rails.application.secrets.aws_secret_access_key, + :force_path_style => true + } + } + + + + + + + + + + + + + + + + + + + # Settings specified here will take precedence over those in config/application.rb. # In the development environment your application's code is reloaded on diff --git a/config/routes.rb b/config/routes.rb index 1ca6864b7..627bdef56 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,8 @@ resources :users do resource :profile resource :timeline, only: [:show] + resources :photos + resources :friendings, only: [:index, :create, :destroy] resources :posts, only: [:new, :create, :destroy] end diff --git a/config/secrets.yml b/config/secrets.yml index 73dfdabcc..f1e61db76 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -12,7 +12,10 @@ development: secret_key_base: 56d08f5eb3562a50c92b883fe334e2ef1a4fe704108f895a27e5fd0d41a7c181571a63c18037eb1959ec38547a08612ca29e5e8058f40ff4105bc17e68e03960 - + s3_bucket_name: <%= ENV["S3_BUCKET_NAME"] %> + aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> + aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> + test: secret_key_base: f5a6a279edce99c1a691bbf89d23217a3e5a8abef9d7829b0b31cfc0d83cf78a19d784c847e80e51ce0716835b016becbfaede6aabead1bb386a3292541cbeb2 @@ -20,3 +23,6 @@ test: # instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> + s3_bucket_name: <%= ENV["S3_BUCKET_NAME"] %> + aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> + aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> diff --git a/db/migrate/20161216001719_create_photos.rb b/db/migrate/20161216001719_create_photos.rb new file mode 100644 index 000000000..df93974f8 --- /dev/null +++ b/db/migrate/20161216001719_create_photos.rb @@ -0,0 +1,10 @@ +class CreatePhotos < ActiveRecord::Migration[5.0] + def change + create_table :photos do |t| + t.integer :user_id, null: false + t.integer :like_count, default: 0 + + t.timestamps + end + end +end diff --git a/db/migrate/20161216002516_add_paperclip_to_photo.rb b/db/migrate/20161216002516_add_paperclip_to_photo.rb new file mode 100644 index 000000000..68c121072 --- /dev/null +++ b/db/migrate/20161216002516_add_paperclip_to_photo.rb @@ -0,0 +1,5 @@ +class AddPaperclipToPhoto < ActiveRecord::Migration[5.0] + def change + add_attachment :photos, :picture + end +end diff --git a/db/schema.rb b/db/schema.rb index 184067aec..2642b2a11 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161213153803) do +ActiveRecord::Schema.define(version: 20161216002516) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -42,6 +42,17 @@ t.index ["likeable_type", "likeable_id"], name: "index_likes_on_likeable_type_and_likeable_id", using: :btree end + create_table "photos", force: :cascade do |t| + t.integer "user_id", null: false + t.integer "like_count", default: 0 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "picture_file_name" + t.string "picture_content_type" + t.integer "picture_file_size" + t.datetime "picture_updated_at" + end + create_table "posts", force: :cascade do |t| t.text "body" t.integer "user_id" diff --git a/old_files/timeline.html b/old_files/timeline.html index 11fe512b0..cc420a4d8 100644 --- a/old_files/timeline.html +++ b/old_files/timeline.html @@ -139,8 +139,9 @@

    Photos
    - -
    See More Photos
    +
    + <%= link_to "See More Photos", user_photos_path(@user.id), class: "col-xs-12 text-center" %> +
    @@ -457,14 +458,14 @@

    Like

    3 - + - + - \ No newline at end of file + diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb new file mode 100644 index 000000000..89e503b82 --- /dev/null +++ b/spec/controllers/photos_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe PhotosController, type: :controller do + +end diff --git a/spec/factories.rb b/spec/factories.rb index 295888ace..5f68c0fd3 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,4 +1,7 @@ FactoryGirl.define do + factory :photo do + + end #call back to create profile factory :user do email 'asdf@asdf.com' diff --git a/spec/features/photos_spec.rb b/spec/features/photos_spec.rb new file mode 100644 index 000000000..db016aee2 --- /dev/null +++ b/spec/features/photos_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +feature 'Photo albums' do + let(:user){ create(:user) } + before { sign_in(user) } + + context 'any visitor' do + + scenario 'can visit their photos page' do + click_link("Photos") + expect(page).to have_content("Add Photo") + end + end + + +end diff --git a/spec/helpers/photos_helper_spec.rb b/spec/helpers/photos_helper_spec.rb new file mode 100644 index 000000000..6b5aa7d30 --- /dev/null +++ b/spec/helpers/photos_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the PhotosHelper. For example: +# +# describe PhotosHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe PhotosHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb new file mode 100644 index 000000000..568cabbc1 --- /dev/null +++ b/spec/models/photo_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Photo, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 1fb91e531c8734e2f2196e8fe83c791d963a989f Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Fri, 16 Dec 2016 15:47:46 -0800 Subject: [PATCH 55/61] update photo functionality --- app/controllers/photos_controller.rb | 16 ++- app/views/layouts/application.html.erb | 1 - app/views/photos/_picture_grid.html.erb | 14 ++- app/views/photos/edit.html.erb | 0 app/views/photos/index.html.erb | 124 ------------------------ app/views/photos/new.html.erb | 40 ++++++-- app/views/photos/show.html.erb | 32 ++++++ app/views/shared/_banner_nav.html.erb | 4 +- app/views/shared/_search_nav.html.erb | 2 +- app/views/timelines/show.html.erb | 45 +++------ notes.txt | 26 +++++ 11 files changed, 122 insertions(+), 182 deletions(-) create mode 100644 app/views/photos/edit.html.erb create mode 100644 app/views/photos/show.html.erb diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index 6ada80772..95181ac55 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -13,22 +13,30 @@ def new def show @user = User.find(params[:user_id]) + @photo = @user.photos.find(params[:id]) end def create @photo = current_user.photos.build(photo_params) - if @photo.save redirect_to user_photos_path - # 'Photo was successfully created.' else - render action: 'new' + render action: 'new' end end - def destroy + def edit end + def destroy + @photo = current_user.photos.find(params[:id]) + + if @photo.destroy + redirect_to user_photos_path + else + render action: 'show' + end + end private def photo_params diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 6244216e5..712ac6825 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -11,6 +11,5 @@ <%= render "shared/flash" %> <%= yield %> - <%= debug(params) if Rails.env.development? %> diff --git a/app/views/photos/_picture_grid.html.erb b/app/views/photos/_picture_grid.html.erb index 5b85b8110..f1dd785e0 100644 --- a/app/views/photos/_picture_grid.html.erb +++ b/app/views/photos/_picture_grid.html.erb @@ -1,10 +1,8 @@
    - - <%= image_tag photo.picture.expiring_url(10) %> - - User's Medium Photo -
    Posted on - -
    -
    + <%= link_to user_photo_path(@user, photo), class: "thumbnail word" do %> + <%= image_tag photo.picture.expiring_url(10), class: "img-responsive" %> +
    + <%= "Posted on #{photo.created_at.strftime("%B %d, %Y")}" %> +
    + <% end %>
    diff --git a/app/views/photos/edit.html.erb b/app/views/photos/edit.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/photos/index.html.erb b/app/views/photos/index.html.erb index bb9c5238f..05b67ef0a 100644 --- a/app/views/photos/index.html.erb +++ b/app/views/photos/index.html.erb @@ -24,130 +24,6 @@ <% end %> - - - - - diff --git a/app/views/photos/new.html.erb b/app/views/photos/new.html.erb index 283111676..b75c83aa2 100644 --- a/app/views/photos/new.html.erb +++ b/app/views/photos/new.html.erb @@ -1,10 +1,34 @@ -<%= form_for [@user, @photo] do |f| %> +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> -
    - <%= f.file_field :picture %> -
    +
    +
    +
    +
    +
    +

    + Photos +

    -
    - <%= f.submit %> -
    -<% end %> + <% if current_user.id == @user.id %> + <%= button_to "Add Photo!", new_user_photo_path(@user), :method => "get", class: "btn btn-info col-xs-2 col-xs-offset-3" %> + <% end %> + +
    +
    +
    +
    + <%= form_for [@user, @photo] do |f| %> +
    + <%= f.file_field :picture %> +
    + +
    + <%= f.submit class: "btn btn-success"%> +
    + <% end %> +
    +
    +
    +
    +
    diff --git a/app/views/photos/show.html.erb b/app/views/photos/show.html.erb new file mode 100644 index 000000000..ce5119add --- /dev/null +++ b/app/views/photos/show.html.erb @@ -0,0 +1,32 @@ +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> + +
    +
    +
    +
    +
    +

    + Photos +

    + <% if current_user.id == @user.id %> + <%= button_to "Add Photo!", new_user_photo_path(@user), :method => "get", class: "btn btn-info col-xs-2 col-xs-offset-3" %> + <% end %> +
    +
    +
    +
    + <%= image_tag @photo.picture.expiring_url(10), class: "img-responsive" %> + <% if current_user.id == @user.id %> +
    + <%= link_to "Delete", user_photo_path(@photo), method: :delete, class: "btn btn-danger col-sm-2 col-sm-offset-3" %> + <%= link_to "Set as Avatar", '#', method: :delete, class: "btn btn-default col-sm-2" %> + <%= link_to "Set as Cover", '#', method: :delete, class: "btn btn-default col-sm-2" %> + <% end %> +
    + + +
    +
    +
    +
    diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index 20669f477..7131509c6 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -17,9 +17,9 @@ About - Photos<%= @user.photos.count %> + Photos<%= @user.photos.count unless 0 %> - Friends<%= current_user.friended_users.count %> + Friends<%= current_user.friended_users.count unless 0 %> diff --git a/app/views/shared/_search_nav.html.erb b/app/views/shared/_search_nav.html.erb index 41ff019a3..c514ecfc1 100644 --- a/app/views/shared/_search_nav.html.erb +++ b/app/views/shared/_search_nav.html.erb @@ -22,7 +22,7 @@ diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index 9c81cc618..fe76e8fd1 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -36,7 +36,7 @@ <% if @user.profile.hometown %> Hometown: - <%= @user.hometown.college %> + <%= @user.profile.hometown %> <% end %> @@ -58,40 +58,17 @@
    - -

    - Photos <%= @user.photos.count %> -

    - - - + Photos <%= @user.photos.count unless 0 %> +

    - - - - - - - - - - - - - - - - + +
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    User's Medium PhotoUser's Medium PhotoUser's Medium Photo
    + <% @user.photos.each do |photo| %> + <%= link_to user_photo_path(@user, photo), class: "thumbnail word" do %> + <%= image_tag photo.picture.expiring_url(10), class: "img-responsive" %> + <% end %> + <% end %>
    @@ -107,7 +84,7 @@

    Friends <%= @user.friended_users.count%>

    + "badge"><%= @user.friended_users.count unless 0 %>
    diff --git a/notes.txt b/notes.txt index 31bdd6454..10847aa95 100644 --- a/notes.txt +++ b/notes.txt @@ -1,3 +1,29 @@ +**photo upload page add! +**photo show page add! + + + +3 PHOTO SIZES: + +The photo collection should display a thumbnail-sized photo which +is a smaller version of the main photo (ie. two separate files) + +As a user browsing photos +I want to see a single photo large version +To fully appreciate it +~~~~~~ + +**COVER PHOTO +**PROFILE PHOTO + + + + + + + + + # print page.html # save_and_open_pag From 094c29444fb6717e417c51522d5cf114d41a0194 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 19 Dec 2016 07:06:32 -0800 Subject: [PATCH 56/61] heroku push --- Gemfile | 3 + Gemfile.lock | 9 ++ app/assets/images/banner.png | Bin 0 -> 345143 bytes ...ser_silhouette_generic.gif => default.gif} | Bin app/assets/images/favicon.ico | Bin 0 -> 318 bytes app/assets/images/hogwarts_small.jpg | Bin 73659 -> 0 bytes app/assets/stylesheets/custom.scss | 25 +++++ app/controllers/application_controller.rb | 6 +- app/controllers/comments_controller.rb | 4 - app/controllers/friendings_controller.rb | 4 +- app/controllers/likes_controller.rb | 2 + app/controllers/photos_controller.rb | 27 +++-- app/controllers/posts_controller.rb | 4 +- app/controllers/profiles_controller.rb | 4 +- app/controllers/timelines_controller.rb | 2 - app/controllers/users_controller.rb | 10 +- app/helpers/application_helper.rb | 7 ++ app/helpers/profiles_helper.rb | 1 - app/mailers/user_mailer.rb | 10 ++ app/models/photo.rb | 12 ++- app/models/profile.rb | 11 +- app/models/user.rb | 10 +- app/views/comments/_comment_form.html.erb | 2 + app/views/comments/_posted_comment.html.erb | 15 +-- app/views/friendings/index.html.erb | 6 +- app/views/layouts/application.html.erb | 3 +- app/views/layouts/user_mailer.html.erb | 1 + app/views/photos/index.html.erb | 6 +- app/views/photos/show.html.erb | 18 ++-- app/views/posts/_posted_header.html.erb | 6 +- app/views/sessions/new.html.erb | 24 ++++- app/views/shared/_banner_nav.html.erb | 33 ++++-- app/views/shared/_search_nav.html.erb | 8 +- app/views/timelines/show.html.erb | 77 ++++++-------- app/views/user_mailer/welcome.html.erb | 3 + app/views/user_mailer/welcome.txt | 1 + app/views/users/index.html.erb | 29 +++++- config/environments/development.rb | 2 + config/routes.rb | 2 + ...7091039_add_avatar_reference_to_profile.rb | 6 ++ db/schema.rb | 4 +- notes.txt | 94 +++++------------- spec/mailers/previews/user_mailer_preview.rb | 4 + spec/mailers/user_mailer_spec.rb | 5 + 44 files changed, 313 insertions(+), 187 deletions(-) create mode 100644 app/assets/images/banner.png rename app/assets/images/{user_silhouette_generic.gif => default.gif} (100%) create mode 100644 app/assets/images/favicon.ico delete mode 100644 app/assets/images/hogwarts_small.jpg create mode 100644 app/mailers/user_mailer.rb create mode 100644 app/views/layouts/user_mailer.html.erb create mode 100644 app/views/user_mailer/welcome.html.erb create mode 100644 app/views/user_mailer/welcome.txt create mode 100644 db/migrate/20161217091039_add_avatar_reference_to_profile.rb create mode 100644 spec/mailers/previews/user_mailer_preview.rb create mode 100644 spec/mailers/user_mailer_spec.rb diff --git a/Gemfile b/Gemfile index 03c9feef4..6dec1ed30 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,7 @@ source 'https://rubygems.org' +gem 'delayed_job_active_record' + gem 'paperclip' gem 'aws-sdk' gem 'figaro' @@ -58,6 +60,7 @@ group :development do gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'faker' + gem 'letter_opener' end group :production do diff --git a/Gemfile.lock b/Gemfile.lock index 7dbac9501..84ff37668 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -87,6 +87,11 @@ GEM coolline (0.5.0) unicode_utils (~> 1.4) debug_inspector (0.0.2) + delayed_job (4.1.2) + activesupport (>= 3.0, < 5.1) + delayed_job_active_record (4.1.1) + activerecord (>= 3.0, < 5.1) + delayed_job (>= 3.0, < 5) diff-lcs (1.2.5) erubis (2.7.0) execjs (2.7.0) @@ -136,6 +141,8 @@ GEM thor (>= 0.14, < 2.0) launchy (2.4.3) addressable (~> 2.3) + letter_opener (1.4.1) + launchy (~> 2.2) listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -298,6 +305,7 @@ DEPENDENCIES byebug capybara coffee-rails (~> 4.2) + delayed_job_active_record factory_girl_rails faker figaro @@ -306,6 +314,7 @@ DEPENDENCIES jbuilder (~> 2.5) jquery-rails launchy + letter_opener listen (~> 3.0.5) paperclip pg (~> 0.18) diff --git a/app/assets/images/banner.png b/app/assets/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..da76a7afe2302ccfbd42a3c6d2b6778d35a87758 GIT binary patch literal 345143 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

    m|++-fTnL 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�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 z zZv4dT%nfwm&wQ(%vez$~2IWJu+p@h;*+#C*XjYWo5GJ;Y!`PeAq4qOMhSo-2AY1U# zU)UK{^L;fWjIHpi%U83^%ZF?$5MuhT#@qh5EHyZ>g8?fpF}k&_JE}^YY3`zEBeuHo z*gR5mulOdtWYjNNHQBQ@<`fDmCkIjsJGL(UaE|TY#)<7Sr;4Yg&X??VhwUUI+v5Bg z^o$9B7kg~Cr5s{S6b8dJ(KBnq(V87-?nu5E8Q~(fw1Mtv4eT#UNquWGK~XZiDBV4$ z6_vKE2aWvqb z1j1+}EVcGe;6)AHJ-i4#>I^_4#+SwPVq?Y<-XfyVGhqOPm&rdTi#Z+*Zsbqu$+CSC za09IPl=MV3t9Za8H)VAb@~NTD(9=)?+Dgrh%@Hfh#3$re!tzxWA|9wrb)}tY1AK8*HPV_rnx3`eO8=xisyK)`Y9stT z2udmq%EPWo(o=nLbksMZ?^r8pOC}&kinbhAG(gSSQo3wkwjUB*;8N!*Y^#44Y%jen z3|H-TTD22uIsM;##^(O0RDsj0R*k2;@0DIq?W~HqngEP%s$G|qFZa6|?DGk}uj2z+`0~^LrS|}}?tu3fe$qkeaR^92DmpK?y{m?j!MhR); z&ni#dv9*8%w!{o+l}BGZM3X?S!wAV^|9l@~Ep%dxAu4o)>_n@ikbj`FR8`fj4Nva0Rq|@*yoazz4t4UBHzm_mzx#piOzk zT#A?Rn&#$Zh0pY144SMw0-bb#lmEW|8=7)lktZF}Q&>x?ei!QeaA8E@FIzb!E}Z!^WO z*s1bURw^%8t+s4+KX5fG-)}cevhO3RIUW98i(3Ds#O`Su-npzYNM3VpM55VCdSJb1 z*Q!HwQVknfn%jl4olFPP&NW{V;wLorQ*)Xg`VheO+dE6=HC8l)gE5Nqbvu}9N@Nf1 zeC0{$DAL7hpVv6T{--CUE;pq@NFQc1Ta2j8L_{-10B2qlTy#x*gBx^^a2JZne2;s8 z=cA{P)^(N)cqTmeV@`r;2qR3Mb}~NUJO?)n5WzA51fwLoL^99G)8%>aOBhQ*NJ)B( zlK^=VJAVcy^Tk-pA3I4h4-T>EQi0CAgn=jbrUi1k!~Id2LVV1z_~&_lTzk!P!{#$` zGvh!MfdOC2mK%4upfB;&0>Y`fKT3V{Gx9TPpegse7oe5HkT496&_m@1-6OTFvh=E< z^zgo}ZX6ao#k_P-TzItG+cpl1sz?uN54*NM*!O$l^^%e8^xIzcvD(~d+_5zdw$@)& z`a(}SNLl)VANcI$D_D_5W=>To2T+uLLTQ0Gle2sRK3ki$3Jc|OIV|wSe!{k!p7NSZ zBr{fPYWov$0G?(vui#T~2jQeV_}@9`+0E9j^+o?cIuM`LZ}mHNZU4Y|(j6aYN)_8@ zme1NyW!hKgBz#))!wY-c;z8dwM{M;M+HcsxKzhCA>a+n?-{;g|qzv5FltlU^#@Gt_ zrRb>?IF$O1O&4~oUjCfT)$3N(TxC}D%(~&TYzw7%t5s?9g z)lt0ZDnB>Yf^#D8?+Zj#8}Z2?$~4GmSD8Ny@Ks#kqa6HWIAmf=Tnw|548vtbkj8+B z&cn(tPb5UX%pCKS!eeO`)q<1`CL!`toU|uDi~?m1BAQ5rRi7e;RTN{D7~_K`O3o}M z)$lu!K;iTI_O3ML zKwAU*#;Xznx0da~Mr2=XEZB-B!XK!EUL3RPQvwA8rl7C#?MngT4b%Bz!&i{r8g*?> zv*j~|DZ4c6XihY?&lXpdE|}XoQO|awP1_$$*=(_8cSc1C;em zzC&i<2fR~jc2}ZO?v(YXpVS=mnDuIHtF$p&cCFNFDI7jT)^D!JpG|r8HKA0S8L}Pm zMSD;DA+}UO9|*oIx@x+>%o|lq*9cDD*1cuh9$zY?HxcPy_G!g^+?w{j)Cg9PZp)8% z%)H-0g`5|8(_e_}T>bZ3Ja^oBou1Vfr!?o2z}>iGyB9vN_by$qM;AnYZOW>ZJ!_m? zvPyr|UjNR|*=BMe9*wLu9(fa?G!Fu58py+;4?k!?eS0oyShN0PHrx3TtENkKyK+{2 z@VG|1bGEIBp#}q>OTu0B-m-nT`iT}_wm1$##E8mf^M(bZLY4Fva5 zM?VhS5353{v+wC|Q@HL#>r%e6sD*{q#ayD5+PL`zgvf6eX;E4IyQ zyW(vttN*drOI3pQc4wj${dPf|jfPk3lpU^mH#=-mj(H@nT4Q*hMM~rvLLYg#(i`z_D+ryOYKr zAa5kOo54N96lvHul$S5uyNppBKC3UQ&0-{EFziW1YA7WJAPi0z?J)Re`-L8UGA@M$ z<8iXCa&PH=8~G#u(<*zZY=x6^%0~Y6d5h0Z1$jA8zmXK9aZr$?IHZM!cp;vSYr>&=qID~3#C9YA_@D>l8YpPR{<*zB z=w8@Z(dtGb;_DJ?Fox1ReeYAkh|WP#Qo5)YcYS50E=6VazKCAfTw zE+xr(3*!$)I3I^}Nfw7OMVa+_mh7wk<>hscQO)Vsg^@~Q682m_;Kn5Y36Yn$_yHuu z!H*Xi7;AZ1pm51?Uoil3K5G`;0U!5@?<*ifT3;OsDtG~^NyxLhA3VVXU?>D~fAYQ` z+&Cs6PEK3y2Vihxm1uriytfYl^z+P2E}?x;--IikKf@m&!^h)2hEd%>9$#nVpKCkd zW^_6exDjsRJKuGA6uHzNMp9gY@W+V9J%0X7#_*O0T^I@huUGlg=NVt!_{XJm+`B)Wl>KM_HxmATJ{U2WyiD>~Xaa;A*Sv%loy?vnp$&mckq85ve(;c7KO&jxAcdD1e*pCOBUhaNJm@|{ zsW6m`NU9?1FkIzF2>fddRy;Y5=eT^MGNey05 zMN)KF;n>;L7^TN~jdd%Zw&?t)Ek5_hq!j;9mJa}32!Kg|#*YK&MNS+F0*7{b#oC?g zHtt`y>+Nm3IQY8V-Tj^w4z6l0s-j92`|7;e6Q@NwO6^28ZK)zR_k^|lm|a~vX?F%^ z?CF`~cKpPT+wsEF3RtkM(G}~qu3ItPviCaQwkzxZo#sv*dn2veYUweXDV( zH=HUoEgneEEh$bc9nZJlnNs@LR*UB>?k@;2`XDnZxrG_W4N$_o+Mow*1|U2uysk$%|GlWFpmnOHGcU7Cl5l-N^_45T^a zamX*njbRLWfurz1Yo6!*^yZNJ6OTV2zn}Ea?|~doZhSp@hSrc5&`J36@+fasj`A7$ zQ0)ypzo7Yjs`*GX!gPKwZN%>>97AGwKB`B4+4GWz-k7cb*n5+erWi=k)sAp+m(w@d z|1so&uU4%3Rsi|E+i?^foa8vt+_#{)`8b~Tuqnx~mh_4`wv)oh%1KRigdQA9O}bDY zVYvl)OUn`l>X*Jzbb~Pl?IXaLJhrMrhrVC~2yI{zvQixS`$uD%U+j)|y*wOZ)E@Aa zPhxEavYHcrjP9*rU%W5d0bgZN#>$@ZV!@2U)hV%qIkgiyO5i}Md9lhUzE)$!4?#A= zSB3n^qsd%M>Fdlx3N>38Z`&j7|Eu-WS-U*<|4?j?>3`79AN&DV$m8D}h_3wJpH2s_ zU$;_;1|$ZHfhe*x)B6u!@`CAyZQ@)fRmBkM2290e1?J>|Mlds9DT?dwNl34B;SeR_ zDdt2ac}o2R!>Hm&xuwyeWMd>f+9wqJA$_%8S4EYr*WUAqzN1r6_FqOB;=z8bkka3;unqA7vH{&cK3qa?omQt{Iw>;B+41geAx5R5g- z)(>_nX_Czfs8UJUO2`!X_#43{`gpsijvx6XLXS8iEzIq7(-0ET60nft7og6@yrm8NrLoK~dA1FEy;+ShnK$ zyp4(*R^7d*VDZQWr|JsBOvG#u-l^?GYij?jE`y(Ad&AdahJlvB{iSHm+wi97*-;(M zseHU|V&{`v*0OIZe{5Wo7xm+e{C~81-uC(j_Hw#z9KJ-Y(DwK=eOc9leQf4Mv(sNT zyZhbKcKwa7*o&W;vg+*E1~=K2bJuom?Ax%FShdo!QKx2=<8yZP>f3g0oq~{4c+Z3Y)PEjRlU@OyCmL9 zVu%+7@vEyCeIGRAu*;?b6EtWgB5g$*`J~!=~DKLj#oh z`Ka5n=wR1UUE?(XfJHwfdh~#3`ZJo%Km_SDxWnT`u-GKlL(=Ev6V&}dK9OMa3HaOZ2}a* zKa*E%>_y(-g;$TtR+xGtMOWU^pnX+4FIc!{W-U6|P`;r6>F&_Rw_BFnyld&}x2?Q( z&C;&Y?{_TT+_S;_3CSsy`?)16EJ~SPP%oU3iZWZVgl!1MWlJ{IpQTLm`8q4y5>63^ z7|9SfWMYuQpw*XDs)(n2=EA4s9PH4 zidH{;-+8QOXuwd!J%&u=c~(7CM(QgIv&X~AxgVfa^kflzA4>JZV2oG#qUeSvDwFSB zt#KzNKgKON&SFptd@hz1!B>jj51wEG@^S;ddJ<&tD&Rka+|Lb`Ss93be>@=1!pC~t z?Bdb+rF6c6Q=XLB!wD4L+@R{83z3g5CT;8q4v;@`#Oq#hST;pn^QN7>7T_f-LfL;7 z9#J>c2dHqJUb#6?kr8lo>_=}d7=7lCRj(QqL!c8E-+n?~s-=jDQ3Uj?n9&Y@ECfc_8 zr|y|bu-e1h55eklushHS=*IIo^awC%GzGk_vU?z>5r6s?$(bdiUO?2$<4@d@KT zIERpDf4~1H0Z*GD@Vpn!Vy>#-SI=fN!;twa@$uV zW_0zgO9bx7U)o?-E-xX$hs?^xmUvh569#cHUr>{h?y0(tqKdWqdvZHgy79HpoRpM3ABSnlDuWYt z^VB&j_mwst+pyZO5k>|@a$~!kh416;8(Lnk<_gs}4 zyV4x;r}R7pE?_rGtfclfQXFhz#C87Yp0wa|KB(|H{rJI8S}DgQO_nx+NrHlK=J|%4 zzaJ=2qI zU!~U2gsWuz)}GT{RzQD`t6<#ic6qbs< z3Wi4tD!OVIXO-Pp6L;vECZ4+d+spRW8;NaPp0&NgK=b0U?-}}hVb)$tw(J7?@JLX> zo>>iub8%VqNxdZY#nOr`MRjWl&wkpqlhM4jtz%ys-m+8ijGY!9met=(HHa!blX8sY zqlA;!&E_>BJ=K0!w6lhjieM z26740c(koz9;j#-CMYt(tR&j^?7O1yrZ92HxxA zvlFvFYVZ7V*KY4$v+CUgtDao7>Z;0iqiuJ^|K7EmR_br@w6!Pg`m9S-YIh+PT6{+llm)%_UFx%2mV}91MS~1|7J0P`L|F=tIo@ zKd|qpuJ-J1^uB-AzM3xCT*^oCpHi7-RQjfWUNfaw^k20Y)e5_S)@5P zOWfU5$UD&mr8%(Oh?Rd*GSd^bBD}{$*?BvolrzGxr!w9W=GeAW=Ux3V%tI@=JS)s) zd(4{8Q1Y?GCm&HAm(*tZwz;piqPTng8=fAn_^0G96d24Bo3BbKElk^Vd0Fx$wY}~& zyE?vUo#B?Hx?k({?M(T!^OJ*%rloLs>6FK|=pUp=!#EA2{gSQD1VDpo!I zn9ZM>x6yLl;%81+%;7{2GMGI8uz#gDBp0sSvZ&j$^lsONUwhk1*VV^;uPv2HgGs`t zDb0pO%TsoD>xMc(#p2n9&92N@W%{h8PcBYoVH{^%J1IdBnAfNbF<882%z zhNOd%(y2_6o#C(`g|V+Fd%k)SWDztg=}>i5mW1Vnmap_tzN$-!UZbMPF&1Q4FP{-#u!<31=ZkY^20w{G~+?eR~r3<69=K+3Q(C$W46_69> zF#_w+@le0uA#F)`*xwUA9_kc&G4d$H&v1|jFG9fYbgPZ9l6<5w-oIPWYLFCdfve4dB| zS)80d?&yayIOraQkx4Ud9v(1exOC<1$vcZY2&N2Kv_l{%fdBnrpA?+WzYzov;UWBM z0PkZNOx`=FEz_LcJL}9m(4AboWNn?k=CYE9%x@BgE%o<3OZPPn52R1^?^?Qh*P`|X zi(0oOX4aJ!xhSN#iN<5TX5kb2#m`AU`J9yE-y3i_hz6J0avzXgfGhyo{niU1m`uQZ zc6r&3;9%Uh{o!R>DsEZ1@J`4p*-*S!6#7k(%HcHTyQXb)&3;iuyC&WJP2D4!*=1>d z_OvZmAD3z~rQFN*!Hm!9=}f2TvvZ6IQmp2i^OaPKwg6PGM%94L|)r7^d)`-Tl_ z-?p^%wtvOf(AbbxzG8hACX81#SyF==OONdCYo5FzF*~&N(KQVrY6A{5MuFr!C%@A` zF}}O)BCA%umRN{S=x$EB(1P^~E2{FUg2$R7pVQnmmHs}fp|WX-^!qrjXf8KzD}_1R zj+>r?H*;NilR|3>OTF-6WMhUKfRQf541jTwC+1Sz5tn-mso@|dM#&JLv2qd!0T=#< zhDiMpKcwLIXtn13K;F!ILayN+$m8SYaDRG?lPp?-*KUN=9RSS$^iQTD51yd&L9{#w z_%uGy7r2lcJ9BVbi-1y&-KGG)!Zv*5U>`sJANT;Xq0Yr^t(?0L}ebOjF|{-B>q@Kw%lR5V6I~+UUjrGs@JqgW{)uW=_awBP=a~$=ouSiqsq$i^l z<-z1$=`>r9(wD7#fUy&1OJGUK>P;a{0su$!B-Z#^Id!M-SXBeiv zFIOUa_E^CV_D1%u$T>@S9gO~@)VGwqWNy4b5yxG~QLdOQH@D z*_Gs2^wpvb@uqK=s3YOLYH!(l@!Pt`AUm{%l)pKZ>U?_EUbJTvqob51b|_WaebIOH z$DrBJ-?$Omsmh+sbv|v$qw+m2iq-zRtcFtE-`#&z@`8yy^($4xC&$#Ag9 zrL3?miDZj-pQd~aQnr=ShF!fQlVDR(A{z{Lt+W5O(5l5xWao`e%qdKj?Nh}^ ztx|u?qJyf$+KiRHIOD58jZZf?TukgJtjt?Km+N<%D+jWL-dh%2gcD2F@w_ zZK-~5UAE-a+g7=%7T1;Pw$-xI-nw1Cd@H2Y%%z8c5n^V?w)Dv7t-xy47mr)ztd!$) z%A!@#Fs?{}SN}LreQ@9na(O6e#y#a2sm*b6Ifg>H$xvftiB+EpgRrr9s&*B`IzOz! z6ODYLt!FqMK66$+l4 zigwbX?SENsivcfAw2=yumY^QA~z4BxQwXn#a)~PYnSEK3lwKrKr4-B9MmaC=mg&s0VbGAV3aj3`FAU2Yz{b)H9h70N>!@A&+pgXK*+# zRyo2bkUN%_k_Bu=L7ZMJ&m~>>{_>Y`6aW*|6S<;XEgTbD@l=a zSw8o4=9~uI-V>~!!)W^PG9xeY2wVU(-$!>AZDJtr4_$QCP~w)5q4n$AhXkNNtFF}Yy9 z!KPgseA7DPw`@Z^`p&Iy*i7@ZJ=!SS^3spl%J_NlVp&>uVpG+VR$)KWoVMQ(cqzl} z$HHX1oOiCR_+JPM;lVfDBfc@WnRIPtp8k~u%0#hY$w)lyy(-=7S1nrmuIBb)adcp% zrPz|{msBgCRr)8D7DKg|8cVO^MPF^!2DN`*aizZ|JHmR`lEIqAy$>`Ox+orMtQ)SY z?)U~!c_x}GsUrD`p`bZ+msQPxS1y%>>5chjaGAZ;ijUhsZKgRsX2o(-D#&qLPo(!1 zn^IfFe~rVGvmKRfB-+?^t)O-oYit~+99mS<9H3@hg~ggz1n$s=X%!l4oo4{E1^jca z!nyD_>CYWu8kqA)Hy@}ikT-dH8KqB1gLY$P;A!AOo}(MK(UU|A{@`XsXh}LIKCCze z!hx8?_=NQSYX)iwGj)^<)P~#EXuWRr@tf8hy(!&o*0w6Y-&*xAN|n}pg}F_Zs@saK z)`TA_Wj+QtOy2*_g1lW%LiF~tUr1Z;zpep@F2G4=fqYFty*rVlp~82h>`rNbib_qZ za&mHML7h9SC&E5hVe)lf!D+V`BYA@Z9#)|OKFO9ptS3!wPb7X=6)G_#+_*0Lh@~)^ zF`Wu*bc||qT4UqT`khX|FFd%Q^QFs5&vpQ;AjJ=(C=@sj-G^+m%)cLiSbfzgR^F__ zN%)ja5Z6Q@D{&xT66h?f^Z|%UUk4A984lCnvvyWO@(GG78Z;)wCk{E`VwV}HR_1i6 z9LB*%nl$^0(LrC6<@HIJCedY0SQwr4%xCgUDx-3KTu@%ya0Gy} zeep@SVht1xwSw)Uz45J@^>-R}eJ$1CtvXkQQQPsjV4qD_G+!Co;JIryyBOK8{^FDk z+5c4K;B5{pd9*NR$KtB*FM1={mtSNv8W`Rg@@Yk4KVCWmRuTTORrkLsKh|Z^Vc9b<7|B9;!GsW}+@VDg z!spp<*oGS#S!MZUV#H@{pw7>V*`#owd86<|yBbLQcDsGSTDIey`#=|~HGfojp0!zf zPkDY@p_pPZK{s^KpU8Dud9iCpOZpvlfT>MUuYhmqS`~SXrrFF+LGi~nC+v&rHSEy2 zE}VQO&w)o6Ld(Tt_UZTqD-52szooo}@hR)ZbE@|hThn#Y*IYL3IsX8?Yzs;QXM=bT zrKjBdGMvL1%5p)adB1tnt`**~gJ@gI*4UO>B|BSq$(DM@?UXGke?E*a8olnUT~rw# zcMj9P=iC@tSG>Nxt=yWz_g=(0&zp89LJ=z1LON^9YBy&^<$_X#ome>4p98CQojw3c zPpI_ur>DHHvFGg4c+t`))V6#Dp4mb7j&=L02esL~-gO^*QA9kw+8cNmYmcf61k?0< z?TqbpuiE>gTh^Hs$B;f=8Na07^|O)*!j{qwcTrBC8+*(MpvCC zOpZAm4)_@p+;KsG8yueVIf1`9$3HiCqIL2ww|G)D+mI5YKL2c8ia4LopJRVvMUYHj zOAJ4-X^gQg81>?5wF%KMzAdEy1C*emK37irlJjNjuFlwOA+dP{ad?@8u*v{Q{04A? zF2*MWJ9*)HnIt2pG=_ZPyp2$Jx_ygwx*}KpoT|PcK1~T{M`3i1^|s5qLYD&{)OyQm z2Yk{zqfSy#zg5|y3VA70R_zTXGfp3~Xg)}cq$8PfW!>TpwU18U>{qVY`ak*yw$&a; z2d77B^y0H&_&FF`wOX<2@<~fi^I3kw>d!7)9lSr#fZjB zDL)0DC7CRrq&HDP^eA{pow~{-QpIytcMe2jQT2mS6#33c|0UsOH7cL%cQI%Rr{+ju z|5SzHVi;wgQvW0$zAA4wj%L|W4SEc#`1HW1^YA9?p@E)EqN)+8szW?M#6IJQIPd_l zR(QQQDl&5y@E;mR31beY2Vbo!*T*l(Y~rQji+_giLHr0@Psse;5C}cWD3Bzidd^pZ z=5YVYQ0_gS4CnnodjOyVaO19AK8weYN!w(+B~SVdeHC82VUdW!>q{R+BXZ^tkNn-( ztU|+cylK|}p53@gxd`J2W@m{(M=(aeJdV?t;SZIl zByzp1;8cM3J*A=I;30hqf66YGm!NTcS7=Y0-Tcoix%+n&PZH_WUoczwGn!bcZwR-r z90IFEeOn1fqx$Aq{Dd-q(nDG}gaBIQ0wCd*i%9tAeD%1v6FKE&!lfK}d~Zj@lS`)f zVWjnXmFsDUqMu3kK>(VZ@Lvz)^l?3ehw#5Bpg-le`Ar6s{mT0Qad}q9c2^fk4*mTh zi<@;g?p>Z|VUvJvu(zh^%euz!8)oh6mhN1$c>f*A9_a+D(#hw)YSH=Mlf_4%fagBQ z^Ukx#U81`zm&XJ9?j$ZE19?0bI@$Fg_?`_rui9E?WS2$v_0B)H@7;dQHl!A?Vw7wT z*`tf$f^!L%t2L=fkxe%rv$@*y_I&ektCv@8VeT`&Cw@a3bq+)6tLyzY?ApQmN}ou> zU$=g>YE#nV+QlWC)wL8oVogqk_tm&RC`>X8;Qj{#jSAUa0G>5k96mir@Z!tmMpM;Y zqCtk?ZJcaK_qm~>ylaKw1sm^fDxS(U>S+AAtx49j724A0>KAReQL=b;R{HEyHa>RV zqVAL8x$tm!sr06S^t4i>x$lV0!q{taEH$iao1@#RY3U{!-)F~Lc6-dmUqhQpx1<_$ z?YiA{V`0^9t4ReTDzq|p%FBvQ5A>tsD&DkwRYreVT2|NC)|7wA8qu6}G`}d8mNZ6| zG-o@Z@pr+>(SlU+InO^WuSo4<)`-1=6^WeB5>B({nKp?wIg)S4@u>X=3rEgv=IKYz z+=p5XVUv&>MDv54`184iAdj1;!=Dw9`RDGy{rDaP;ozj4V(1D+N}(xKfQ0ngye-QO7i|8t-o@@Ials!uEh+~=BXbmb5H*>w2I zdsaYdYtU-#U$Sjz@J>S1#GmKMNRq38_jr5)vKV4KEP@S65pfI+6>wrWa>Z?I@=f+iH z>w%T3tRThTjkI!U%*4qD&QH={^UeZL9!{gbXT>O=pZdOX6QDGH3cM71-&+S;9hpM} z6ALlYNv~_7&*Wt|a3h6JE+YzSMOM%(YLq%${D-3C!wh_Be*!t?Xx~ePucBs*V<}Rk45Y) zI<#+(Z`qWvJW*J%wRGPF&YT8={j_5%8dNI2G6(+h=A|xI&xr>5sHZvI+hVQg9eqY& zq6xCnbt?}4ffWXCi$oaAZy3NLrN5_LX5ko30aj#wTgnEa@wBLVVfs&4W$?1aJrJ`p zl(QFEjd`GyU3*RGNJ*6-2p>_uDWw|J)V+Suc6_f-)u<0`m?IcIR6Fk1(FGmMp+EJM z+5D>6cYYBAYHTMJ@`UnXcw*<8O%0;A(u%!>;j{E5TQ59kN&iz8&Ae}gy(h%uIpv5N zQP3b>cEjFTVR+I@g1AR?u>d}lI5azDEPv=}vG%mkwf9snFV}v~lIEWElfKPvKWmSS zFUmlt|(lCO<~?P$4%R}o5Fa-HVRifel@8ob=mg} zUG+7%t4ecKw6F>FNcVlm$3abO@j9cwQ_r5V@toSwxTt2WvZx&-8W;yj+xlbGZ2zVm z3^p{^m#W}$C)7q9*R9GSM2dT?@tl;Zfd;DB4u)&C-Men@shzM|t*p4Th-V9I=1!S{ ziSj@cRh0Iv@pTP$YRhR~RBEuO92eCy_E_Unp3_?E726rBO^buB=g3|bj`T(o>!677^z|KKVy`d#L3eSy} z#NzYZaI3luy(K*6JxU-&oO?)+Hb0b%*)+X3!N|7ShIt8wq(UG zyeK*5!bwQg4;7~2;|BsSOZH;wkU0D>03nyvMxsWT6daz6t31YQZ7ckpZ`jSh|IaNs zXo-zXdibh z8KEN64spjKMQLFzl}Vjb)Qa%4@{=-SWMz+1(Uz9gQ+aVE5`A^2Fob8htSVJIU=?0E zibbbfH-OPdf})#@)K*|8D@WP9(T(y*9YTqRI|<4IoQy3Z%|ErrC5Y%wNFbYM%He*Q zKNr;b_(jnuBR7g1_LWqGL}iM_4-%_#BP^~0^=LI=`9mgSaBl1bsK5LIUO66R3V@fFlduR@5!dt3Lskwbb%Z?U#zX*PrhkEv#l_g_ zlWcGkUt#%1zt967_8dK26{^fUKWLEaW%3ZY*-ie;4RLcCFl^$-J;Y<31fZQV;j;3U zeoVP&$M};60R9P{IqK1_`UP)a)j8hz^OkhpvbZXx_t}4}?kxXAV+k@M)1AD{U_)k0 zAIdI#)T6Tp)I|06#pt66o#-ghUNi7EO}zs-Ej+>>@WB&22qGQ)%7Hw1(@ObVJ`pAt zeBS2tn8){fNA_UIlKS=QfxInF@be)&g#Sgtr2NS5-N`#q))#Q;hk1YGnJ$>G+{Q(g z0J`;`!*p`;dlEgUUrETM4CdSK`lt99OQXe4nH~SK;`5@@Bk9U<%FR(a?O9L`E{7&P z9t3$D1WFG0zE~QK*X_#S6}#U4rro&xHM`!~kUqFCT~=4WCp|L5Ak>I0 z*0Mk{SEW2<3p3By35^4b3s2fY`30M*JY#2zk6Ed@s@$E)PF8_0oN_ui?1q=u4wEzk z52p2A$jd&NHusx^?~jYoLz3U!@Ejn_)R{-*rZQqMu7&t$L-03`e}7Jdqg$kDPs4@E z>upTx^Wc((!>iJBZ(7>AW7gU;Th;t}YG8#m&9;WKnqMp`?y42ai`I*mHP2p9^0Dh>}L!Fni(*evE?6{w2Gs`Ra_WZgR`^RG;y9!&lf<(`#NbZ#4-g zoioFr{dSakESi~{QW|1m{A0WXyZl^#3n_-tj17G2EcQGz`|Q7M~J6=~Cro zRXnq4Fa?9E^GmeDRlaKTm8R;ui4;ZJ3*qoOZ`bgjgQ0>c8bd6zJLn4`0O^AN(JEBx z=#v5qpMZch7-Qimy8PiDoO%%!;4#Kp!1oYULgKo8MA5&mVKkt0!zC*}Q@MDt z&nG9?SJIG&ZxN=8Q2HtuS>ZX5F2|?utTgq~D!(Gn;s<k^Z)5{lcehYl?&MLi-FWL^J08 z4u)LT0J-6s(vMY-)GKw$%3h4#wDrmO(WRgG(`o6o_if;-N+g6Om6_=9seCfpv7}4m z9N1oe&7xk%x9WmDIe?tEF{M(&DpNC7E=u62;d(a8r-&l$3OwSDj6>suz|cMK1=585 zK|>sr=&>e=tVrb~d7v!iztotv{sH@nvg$>7Wa$80f6t)D`wgR^J1cMQauo7Z6Sd~r^0)9$2U72vY&uO)l7YaKggvvwRKl4=A&)t6w|RR^VQ zv3JQ*6n5l{IkrF101&mMFkF)#1|AMjqI%~PHfM$Y*R3%4RdEBeW5$&-rDx1tSuwcoa8=bAkq&Dn8#Tv6Cvl+Mq}TH-R~#I|m0_JN)efnec-p0lE%sUFg| zJ>J_|`;VvA*oo}U&zrreSlD}7SzKBV!xq=$V%6$&Y}+5i3gdkl6*shBm9ld?p0|E- z+pZU8t(|<;whBLG#U2J1Xks{F2pfur&kI-Ip0#OFv1F%(;kv@W&)PKd<%1125@5iA zmJL0vN4IT#dP8wlnyFh>+FMoKs=g@a;M4XeM`vtNwN6dEYs*UMLx$H4c<3)QeIy2I z*PAN&mBKgeZx-LMU+&-5K=HDg?u+(+tk*Db~TXm3XRQ4A6BeIe(sY4v#OM?Zal*~mK}C8y zkiYXWgawypWPNx>cH-lyXiCZ+z0h4cbe^xGyB(4Gai1(8OYNWAt6brPebG@6Za0P= zxg<%2)QzHUpd)#XO>r>zO#*RpBi|td6#x6ROQNEfFfJb&F|#!IV{ju<=J<`TvXv{I zJI};_Z;$GyZluF-$(w&qlQ9b5P$l1{L#`V^kta$=p1vwG%a;|s;0JKvhtrXR?)|_g zTs<?q*?$8K35uYIMUkbzZb}QF;oW;#~OJu*N4so{CCo~}4`KBdT z{$0^NZ_&yBPy^JzBfUm)ktD+5dJwq$(|5@)-I6W8zP~Pg-s7TYk!Kh)oVOWZR}MDf z!fe>o0095=NklmfXZ|22VkwXDD4=C?WIeFJ}Pz0YLNxu^I43D^D9sa@_#Fu8ys9brHoCw~_3 zg+_N>^C6Bib!j8;OakP$j!Uk~dY=7Sc<6Q%E`}%nW@IS4b#3gN;Rt&n|5;MdFjB<*j%(~bJM47 zTDn5BBpo?AWwm(e*HzL7LtfZPK7ie|mhdR>apDueWSVf7|AvrYEeOwC!(CXF7mfKQkrKD9lCI&SuAxy@4Z}H* z^{+v6Qcv8Mg@0Dfy`VYCYKWuXVM+64e{su9Y}$sr;MZL$+DU`aw-G<$I9OaVEYGS8 z=r{q0%TkZ9vJ;MiIRFcT@+YS`dkS?Yen^MHsER*}qcC~~1M5+$aN0ceL`|i74mk7H z6l^{6k;liiF}gP^H}f_Ff5{oh4XVsStJ3Y-Y1?{j@mFb@jbk>Hj)&27=!R5js>%-< z!U0Uo%YwlkV{UFBKB8vw_u~Pa0m9wU^Mha#%D%Y-6`fFB7uIt*8y2=-m3)U(;Zo}FsJBUAJhVd+_1g`hc0LT$ z2(~5a9eF`4S`|L|Gjr^)`ZrdcvsoN=0R3J5i9eMNzIV~8tn^WZ`wC4GI|uaR!d@2* zmIk6YqtT9yhw8ljo~0cODENzMiW^VQ*=&8qMiLZGT6e?x{To(_XH-2UODi*0DzOJg z$yXNoLHo$mL^!ybC4c(3M>APDfbSRkpJ7Wu<6IE|Y=>8Adr+2}30lVvED`x-n7nWVX#+vx>xjf+Ys>W5Wr1s?T zu^suGCukNZZuyqS7T1N9Sr>ip0yC!2OUo|g!&*n7!_ z-Avl{+2X1-Bo+~Q7V%Rj}AdR@JsyBAi;eS)huazUSr`a_FnuwQ4raz+Qsn{LoCKJ;^%na z0m84Z&U4H5RYBAdInAk#qCY*b=szi1`ag{<{r^eKepV^}hS`O!$UXqGSo~?tpI4uY z?8>)NJE41qBCo1rH*7j( zCltDKWG~q7vL*Qs-P{;nI3NzM$mK6|ei{(39xy%c+8uk#uErx9&0n%;>$HUYz-H1} z(UaQK>F1SO)i_=Vp~_pd@cxUkhk=YijG=imVi(Y!t)+W*Y3ghCcMsllVKQ47Sbto# zr>tqeccx;C2a8TyBw@oUu}9KJgaOLND*17Rom873m!d6*6Ko!Uk(Ih;J?>SzX1{8$ z+HPUfI&s@eJB)@lGg!7Sy!eEji^QL}Vk^x@ls2}V!EM_gup?^A?yz^K=ViWHc_p5r zds#&?fi^dA!$N9T)V5lQ@>Y9V5S4SqbGBNXvr^@Rloi!Y|CW7s@Sau1o1%zSsC}y^ zeaV7(wWm3IESa*2|>QXeu7&kL{2w)KOPyLal*$b`ccxo$8 z|ELwd@|eY^XRTC~l2M{Xi$Md$RW{bw7+Pj;Y1NAxxpYaka~GE-KYAES)k5XRUZ@Ui z#whRupm_Nv0YY#0YNb9juqUD?#<=Xv1shT(^sNAacA|UpQdCb)bltc?6yO;&9++JM z|6Ce6;T^}LXvhtB zPNc$d-O%?j?Ie!}u@r=tmm|51ZTA@g-6BV}(29$J&z}i%Lc%ljxbaW@(oqYi>N)UR z@iN`QC*_O=Fe7IwIs(t|g=c3J&q{+Klz46#B)#sv;|M0&SMXO{*NrC1PXz$M`lx56 z$?-$8-)C@G*>b@L3cnW)@Mhs*Z}c72>#~~69ZO&Nii*9WB5G3g)PJRk;W?pIyJe;F zP<314g*ok0eZ%=G9Kz+r249vPBTq2)2Xg#tck~!&^?HHdxOoEM!V4LQyz?l!$Aw3f z6`uLC!eIqGBSZI>%bdz}EaC?54?!0FfnlEnGQJ%a>>)ga|J8%~g!e1;3Ga`1W$uIe z31Qy9bs?AhrJr2-t;^EfRU~(H0UttzKb{~%Amq;v0PnZl@N-|hUw2>5@Zj(>DSsWH z3*0{_{=`N}&pN%Ub|ZPiF7N)lUAgmXwlUb%^sjBb@t*biEEEcu$%P?;VZq;z%X6l_ zWHZgPA}a*UlxH+AU$DofKc{)}F`J2&Y`*-sRZ4Z?DQP~%0PM4qPY8Kgp#UuvJ?5zV zlKj~nF zykJrM?P%IPTU@Z);yDYND)LJ-Cl7{8>>w;-3EO<3OB@>SyevLL*09F+gSd=?7;ZQ- zotZYajRULnISN?5{`DHmVEFoJP0bokV93J|#=fh#iu@Py)o`C_-wuy(O7N?4G?3{`)uyj423 zjNofQI7~RJa{DS*QTkiH@2Bt0Dt-<`YejrJ+-ua8){lZv$8fN#xgthS^5r0r*+jj{cW4CE!eoeNQl*iV|(v?D^H)XqG6@nQc!qN{SKGIz=8t9j61Z(9LNREgj7JNC$KS>9ZFvs zDBo&#+t1Tkw#zD^+LGF6Dm}b9eoytx{EM1m4y?3l8)MDF+wmDo3TJGu@~rAJoWH^M zl+X^RLis)pLf`hf@u!@|qq2S&LYhzlTD|61+5IHI(;NcU@Ec^nQGOmvL0CwzMc@*L zgR#&-!5*tT)P_%`Rd(v08u#|6KbD(86>+hDxM4JT^@2KVK}-e#!Bm=K&~*g(pm!dc zUZjlD$Q_~L`}n1X@1Kk6p&$v}9qwDQvmxQJqwFx{gf)GpPE)9;0_2XT>zXev=w1z3 zjmrg-N@zp8eosP+uxwBxZ&rl*SgU*s2WytL+LAwX%9^D!Q;v67 znQ>e(lUjv1&0aDbxm<_EKB_M71lfL}zMrT%2K&81pBo_r4>XL*FH-!ZCib&GsANo1 z*1hIh;N-;m!&Jo2TvLaMro<`LiGMclohHQes!>J2X46E~SDKa-pVefEx)n=AQ7X!H zGw~p;c9f0cnUE0Y1R^Z;hCE@UpZ#| zn+tYj{aqV(+jccNXPYC{Xxz7|((P(6`D|&)UMj3w+q!l&*|9UxoHZr*zBRgS9W~o8 z6_2YU&~O0_JrXv2BG1}PZ{m^aEWWNV25LSBFIY+Sb|s&uwdf@Gv_ro;G}~B}zdMm;vAc zoomh51V9{hiYm%t*5+*d=S188Zo}-qm*-zsuJUJp(t=nX{V_h}P~1zZ15W&Aq3fBm zc5&@RTklE8Y9hK(soU4;UzCD#%0AbgvQD}r{7)&TU~8h&@^L;N%1r6`oGx~);rJ*% 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 diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index aaf540bd5..8cae45834 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -263,3 +263,28 @@ nav { .hidden{ display: none; } + +.alert { + position: absolute; + margin-top: 55px; + text-align: center; + width: 100%; + z-index: 99; +} + +#danebook-session { + text-decoration: none, !important; + color: white, !important; + + +} + +hr { + background-color: black; + height: 2px; + opacity: .2; +} +// +// .cover-banner { +// border: 3px solid black; +// } diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 67abf7241..3024d1a4a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -41,6 +41,10 @@ def require_login end def require_current_user - redirect_to login_path unless params[:user_id] == current_user.id.to_s + user_id_key = controller_name == 'users' ? :id : :user_id + unless params[user_id_key] == current_user.id.to_s + flash[:error] = "Please sign in!" + redirect_to login_path + end end end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 1b3f47f7d..fd06ac41e 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,8 +1,4 @@ class CommentsController < ApplicationController - before_action :require_login, :except => [:show ] - - def new - end def create @post = Post.find(params[:post_id]) diff --git a/app/controllers/friendings_controller.rb b/app/controllers/friendings_controller.rb index 988a3b496..7143a7b49 100644 --- a/app/controllers/friendings_controller.rb +++ b/app/controllers/friendings_controller.rb @@ -1,8 +1,10 @@ class FriendingsController < ApplicationController + before_action :require_current_user, except: [:index] + def index @user = User.find(params[:user_id]) - @friends = @user.friended_users + @friends = @user.friended_users + @user.users_friended_by end def create diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index 8ee69466c..a0b58a154 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -1,5 +1,7 @@ class LikesController < ApplicationController + before_action :require_current_user + def create type = params[:likeable] create_context diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index 95181ac55..cb1d3a284 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -1,5 +1,7 @@ class PhotosController < ApplicationController + #before_action :require_current_user, only: [:new, :create, :destroy, :set_avatar, :set_banner] + def index @user = User.find(params[:user_id]) @posts = @user.posts @@ -19,28 +21,41 @@ def show def create @photo = current_user.photos.build(photo_params) if @photo.save + flash[:success] = "Photo Uploaded!" redirect_to user_photos_path else render action: 'new' end end - def edit - end def destroy - @photo = current_user.photos.find(params[:id]) - + + @photo = Photo.find(params[:id])# current_user.photos.find(params[:id]) if @photo.destroy - redirect_to user_photos_path + redirect_to user_photos_path(current_user.id) else - render action: 'show' + redirect_to user_photos_path(current_user.id) end end + + def set_avatar + @photo = Photo.find(params[:photo_id]) + current_user.profile.update_attributes(avatar_id: @photo) + redirect_to user_timeline_path(current_user) + end + + def set_banner(photo) + @photo = Photo.find(params[:id]) + current_user.profile.banner = @photo.id + redirect :back + end + private def photo_params params.require(:photo).permit(:picture) end + end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index fb0a1e489..570b8f044 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -1,7 +1,6 @@ class PostsController < ApplicationController - skip_before_action :require_login, only: [:show, :index] - before_action :require_current_user, :only => [:edit, :update, :destroy] + before_action :require_current_user, only: [:new, :create, :destroy] def new @post = Post.new @@ -21,7 +20,6 @@ def edit end def show - end def destroy diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index b218af51e..369a921f2 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -1,6 +1,6 @@ class ProfilesController < ApplicationController - before_action :require_login - before_action :require_current_user, :only => [:update, :destroy] + + before_action :require_current_user, only: [:edit, :update, :destroy] def show @user = User.find(params[:user_id]) diff --git a/app/controllers/timelines_controller.rb b/app/controllers/timelines_controller.rb index a75e3f191..b72e394e6 100644 --- a/app/controllers/timelines_controller.rb +++ b/app/controllers/timelines_controller.rb @@ -1,7 +1,5 @@ class TimelinesController < ApplicationController - before_action :require_login#, :only => [:show ] - def show @user = User.find(params[:user_id]) @posts = @user.posts diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ff8cf7ea4..d06cc38a4 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,12 @@ class UsersController < ApplicationController - skip_before_action :require_login, :only => [:new, :create, :index, :show] + before_action :require_login, except: [:new, :create] + before_action :require_current_user, only: [:edit, :update, :destroy] + + + def index + @users = User.all + end def show @user = User.find(params[:id]) @@ -19,8 +25,10 @@ def new def create @user = User.new(whitelisted_params) if @user.save + User.send_welcome_email(@user.id) sign_in(@user) flash[:success] = "Welcome" + #welcome email redirect_to edit_user_profile_path(current_user) else flash[:error] = "Try again" diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index de6be7945..9e07d9c4c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,2 +1,9 @@ module ApplicationHelper + + def full_name_by_id(user_id) + profile = User.find(user_id).profile + "#{profile.first_name} #{profile.last_name}" + end + + end diff --git a/app/helpers/profiles_helper.rb b/app/helpers/profiles_helper.rb index eae2a72b6..1b9671eb9 100644 --- a/app/helpers/profiles_helper.rb +++ b/app/helpers/profiles_helper.rb @@ -1,5 +1,4 @@ module ProfilesHelper - end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb new file mode 100644 index 000000000..91606261a --- /dev/null +++ b/app/mailers/user_mailer.rb @@ -0,0 +1,10 @@ +class UserMailer < ApplicationMailer + + default from: "welcome@danebook.com" + + def welcome(user) + @user = user + mail(to: @user.email, subject: 'Welcome to Danebook') + end + +end diff --git a/app/models/photo.rb b/app/models/photo.rb index 37fb216ad..4db224b3c 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -1,9 +1,17 @@ class Photo < ApplicationRecord belongs_to :user - has_attached_file :picture, styles: { - thumb: "100x100", small: "200x200" } + has_attached_file :picture, styles: { thumb: "100x100", + small: "200x200", + large: "600x600", + avatar: "185x225", + banner: "x450" }, + default_url: "/images/:style/missing.png" + validates_attachment_content_type :picture, content_type: /\Aimage\/.*\Z/ + belongs_to :profile + + end diff --git a/app/models/profile.rb b/app/models/profile.rb index a6eb72d6e..203b8622d 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -1,10 +1,11 @@ class Profile < ApplicationRecord belongs_to :user, inverse_of: :profile + validates :first_name, :last_name, presence: true + + + validates :motto, :about, length: { maximum: 600 } + validates :gender, presence: true + validates :phone, length: { maximum: 10 }, :format => /[0-9]/ - # validates :first_name, :last_name, presence: true, - # length: { maximum: 20 } - # validates :motto, :about, length: { maximum: 600 } - # validates :gender, presence: true - # validates :phone, length: { maximum: 10 }, :format => /[0-9]/ end diff --git a/app/models/user.rb b/app/models/user.rb index a89cfa2b8..343ae988e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,6 @@ class User < ApplicationRecord before_create :generate_token + after_save { email.downcase.strip } has_many :posts, dependent: :destroy @@ -19,7 +20,9 @@ class User < ApplicationRecord has_many :likes, dependent: :destroy has_many :comments, dependent: :destroy - has_many :photos + + has_many :photos, dependent: :destroy + accepts_nested_attributes_for :profile @@ -46,6 +49,11 @@ def regenerate_auth_token save! end + def self.send_welcome_email(id) + user = User.find(id) + UserMailer.welcome(user).deliver + end + end diff --git a/app/views/comments/_comment_form.html.erb b/app/views/comments/_comment_form.html.erb index bc5fd462a..25737c460 100644 --- a/app/views/comments/_comment_form.html.erb +++ b/app/views/comments/_comment_form.html.erb @@ -1,9 +1,11 @@ +
    <%= form_for @comment, post_comment_path(@post), method: :post do |comment_builder| %> <%= comment_builder.label :body, "Write a comment..." %> + sdf <%= comment_builder.text_area :body, cols: "50", rows: "10" %>
    diff --git a/app/views/comments/_posted_comment.html.erb b/app/views/comments/_posted_comment.html.erb index 31f04d763..8e3dda99e 100644 --- a/app/views/comments/_posted_comment.html.erb +++ b/app/views/comments/_posted_comment.html.erb @@ -1,14 +1,16 @@ +
    - +
    diff --git a/app/views/friendings/index.html.erb b/app/views/friendings/index.html.erb index 83a7de04c..2e0605e55 100644 --- a/app/views/friendings/index.html.erb +++ b/app/views/friendings/index.html.erb @@ -17,9 +17,7 @@
    • - User's Medium Photo + <%= image_tag "default.gif", class: "thumbnail img-responsive" %>
    • @@ -30,7 +28,7 @@

    • - <% if current_user.id == current_user.id %> + <% if current_user == @user %>
    • <%= button_to "Unfriend", friending_path(friend.id), method: :delete, data: { confirm: "Unfriend #{friend.profile.first_name} #{friend.profile.last_name}" }, class: "btn btn-danger" %>
    • diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 712ac6825..9be67dc69 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,9 +1,10 @@ - Danebook + Welcome to Danebook <%= csrf_meta_tags %> + <%= favicon_link_tag 'favicon.ico' %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> diff --git a/app/views/layouts/user_mailer.html.erb b/app/views/layouts/user_mailer.html.erb new file mode 100644 index 000000000..37f0bddbd --- /dev/null +++ b/app/views/layouts/user_mailer.html.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/app/views/photos/index.html.erb b/app/views/photos/index.html.erb index 05b67ef0a..91baeaee2 100644 --- a/app/views/photos/index.html.erb +++ b/app/views/photos/index.html.erb @@ -6,9 +6,9 @@
      -

      - Photos -

      +

      + Photos +

      <% if current_user.id == @user.id %> <%= button_to "Add Photo!", new_user_photo_path(@user), :method => "get", class: "btn btn-info col-xs-2 col-xs-offset-3" %> diff --git a/app/views/photos/show.html.erb b/app/views/photos/show.html.erb index ce5119add..644608115 100644 --- a/app/views/photos/show.html.erb +++ b/app/views/photos/show.html.erb @@ -10,22 +10,24 @@ Photos <% if current_user.id == @user.id %> - <%= button_to "Add Photo!", new_user_photo_path(@user), :method => "get", class: "btn btn-info col-xs-2 col-xs-offset-3" %> + <%= button_to "Add Photo!", new_user_photo_path(@user), :method => "get", class: "btn btn-info col-xs-2 col-xs-offset-3" %> <% end %>
      - <%= image_tag @photo.picture.expiring_url(10), class: "img-responsive" %> + + <%= image_tag @photo.picture.expiring_url(10, :large), class: "img-responsive center-block" %> <% if current_user.id == @user.id %> -
      - <%= link_to "Delete", user_photo_path(@photo), method: :delete, class: "btn btn-danger col-sm-2 col-sm-offset-3" %> - <%= link_to "Set as Avatar", '#', method: :delete, class: "btn btn-default col-sm-2" %> - <%= link_to "Set as Cover", '#', method: :delete, class: "btn btn-default col-sm-2" %> - <% end %> -
      +
      + <%= link_to "Delete", user_photo_path(@photo), method: :delete, class: "btn btn-danger col-sm-2 col-sm-offset-3" %> + <%= link_to "Set as Avatar", { :controller => 'photos', :action => 'set_avatar', :photo_id => @photo.id }, class: "btn btn-default col-sm-2" %> + <%#= link_to "Set as Cover", set_avatar_path((@photo), class: "btn btn-default col-sm-2" %> + <% end %> + +
    diff --git a/app/views/posts/_posted_header.html.erb b/app/views/posts/_posted_header.html.erb index 2902dc6a8..eecfd6707 100644 --- a/app/views/posts/_posted_header.html.erb +++ b/app/views/posts/_posted_header.html.erb @@ -1,10 +1,10 @@ +
    - +
    +

    ...or sign up and join us!

    + <%= button_to "Sign Up", root_url, :class => "btn btn-success", method: :get %> + +
    diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index 7131509c6..6cab4b9da 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -1,25 +1,44 @@
    +
    Timeline About - Photos<%= @user.photos.count unless 0 %> + Photos <%= @user.photos.count %> - Friends<%= current_user.friended_users.count unless 0 %> + Friends <%= @user.friended_users.count %> diff --git a/app/views/shared/_search_nav.html.erb b/app/views/shared/_search_nav.html.erb index c514ecfc1..0d61dc489 100644 --- a/app/views/shared/_search_nav.html.erb +++ b/app/views/shared/_search_nav.html.erb @@ -15,14 +15,20 @@
    diff --git a/app/views/timelines/show.html.erb b/app/views/timelines/show.html.erb index fe76e8fd1..f645179be 100644 --- a/app/views/timelines/show.html.erb +++ b/app/views/timelines/show.html.erb @@ -59,20 +59,22 @@

    - Photos <%= @user.photos.count unless 0 %> + Photos <%= @user.photos.count %>

    - +
    <% @user.photos.each do |photo| %> - <%= link_to user_photo_path(@user, photo), class: "thumbnail word" do %> + <%= link_to user_photo_path(@user, photo), class: "thumbnail word col-xs-4" do %> <%= image_tag photo.picture.expiring_url(10), class: "img-responsive" %> <% end %> <% end %>
    - <%= link_to "See More Photos", user_photos_path(@user.id), class: "col-xs-12 text-center" %> + <% if @user.photos.count > 9 %> + <%= link_to "See More Photos", user_photos_path(@user.id), class: "col-xs-12 text-center" %> + <% end %>
    @@ -83,54 +85,31 @@
    -

    Friends <%= @user.friended_users.count unless 0 %>

    -
    - - - - - - - - - - - +

    + Friends + <%= @user.friended_users.count %> +

    + + + +
    - - - Ron Weasley - - - - Ginny Weasley - - - - Hermoine Granger -
    - - - Warren Buffet - - - - Uncle Bob - - - - Aunt Sue -
    + <% @user.friended_users.each do |friend| %> +
    + <%= link_to user_timeline_path(friend.id), class: "thumbnail" do %> + <%= image_tag "default.gif" %> +
    + <%= "#{friend.profile.first_name} #{friend.profile.last_name}" %> +
    +
    + <% end %> + <% end %> +
    - <%= link_to "See More Friends", user_friendings_path(@user.id), class: "col-xs-12 text-center" %> + <% if @user.friended_users.count > 6 %> + <%= link_to "See More Friends", user_friendings_path(@user.id), class: "col-xs-12 text-center" %> + <% end %>
    diff --git a/app/views/user_mailer/welcome.html.erb b/app/views/user_mailer/welcome.html.erb new file mode 100644 index 000000000..3c4d0af7b --- /dev/null +++ b/app/views/user_mailer/welcome.html.erb @@ -0,0 +1,3 @@ +

    + Greetings <%= @user.profile.first_name %>, welcome to Danebook! +

    diff --git a/app/views/user_mailer/welcome.txt b/app/views/user_mailer/welcome.txt new file mode 100644 index 000000000..8a5d420a4 --- /dev/null +++ b/app/views/user_mailer/welcome.txt @@ -0,0 +1 @@ +Greetings <%= @user.profile.first_name %>, welcome to Danebook! diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index c1f112da6..497a7d668 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -1,4 +1,25 @@ -<%= @users.all.each do |user| %> - <%= user.email %> -
    -<% end %> +<%= render 'shared/search_nav' %> +


    +
    +
    +
    +
    +
    +

    + Danebook's Finest +

    + +
    +
    +
    +
    + <% @users.all.each do |user| %> +
      +
    • <%= link_to full_name_by_id(user.id), user_profile_path(user) %>
    • +
    + <% end %> +
    +
    +
    +
    +
    diff --git a/config/environments/development.rb b/config/environments/development.rb index bd163a44d..ae29ff9c4 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,5 +1,7 @@ Rails.application.configure do + config.action_mailer.delivery_method = :letter_opener + config.action_mailer.default_url_options = { host: 'localhost:3000' } Paperclip.options[:command_path] = "/usr/local/bin" diff --git a/config/routes.rb b/config/routes.rb index 627bdef56..995dc9b85 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,4 +25,6 @@ get 'login' => 'sessions#new' get 'logout' => 'sessions#destroy' + get 'set_avatar' => 'photos#set_avatar' + get 'set_banner' => 'photos#set_banner' end diff --git a/db/migrate/20161217091039_add_avatar_reference_to_profile.rb b/db/migrate/20161217091039_add_avatar_reference_to_profile.rb new file mode 100644 index 000000000..623af9849 --- /dev/null +++ b/db/migrate/20161217091039_add_avatar_reference_to_profile.rb @@ -0,0 +1,6 @@ +class AddAvatarReferenceToProfile < ActiveRecord::Migration[5.0] + def change + add_column :profiles, :avatar_id, :integer + add_column :profiles, :banner_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 2642b2a11..6b2fb0729 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161216002516) do +ActiveRecord::Schema.define(version: 20161217091039) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -75,6 +75,8 @@ t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "avatar_id" + t.integer "banner_id" t.index ["user_id"], name: "index_profiles_on_user_id", using: :btree end diff --git a/notes.txt b/notes.txt index 10847aa95..00d86135b 100644 --- a/notes.txt +++ b/notes.txt @@ -1,87 +1,43 @@ -**photo upload page add! -**photo show page add! +** security issues +**banner +**avatar +**can search for all friends +~~~~~~~~~~~~~ +**personal news feed +Redirect signed-in users automatically to their newsfeed instead of the home page -3 PHOTO SIZES: +Display a chronological listing of posts from the current user's friends -The photo collection should display a thumbnail-sized photo which -is a smaller version of the main photo (ie. two separate files) +Allow liking/commenting on all these posts -As a user browsing photos -I want to see a single photo large version -To fully appreciate it -~~~~~~ +Allow posting directly atop the newsfeed (like in the timeline) -**COVER PHOTO -**PROFILE PHOTO +You can only view your own newsfeed +~~~~~~~~~~~~~~~~~~ +Send a welcome email upon signup in both HTML and Plaintext form +.glyphicon-thumbs-up +Copy Toggle Dropdown + +.glyphicon-thumbs-down +~~~~~~~~~~~~~~~~~ +As a user who just had something commented on +I want to receive a notification email +So I can immediately respond +An email is sent only when someone else comments on your photos or posts +The email is both HTML and plaintext -# print page.html -# save_and_open_pag - - -#check out shallow nesting --> http://guides.rubyonrails.org/routing.html -~~ -# the explicit way - get 'users/sample' => 'users#sample', :as => 'sample_users' -~~ - - POST(deletable, should destroy all it's comments & likes) - -body:text - -like_count: integer - - COMMENT(deletable, should destroy all it's likes) - -body:text - -like_count: integer - - - - - LIKE(deletable) - t.integer: user_id AKA liker - t.integer: comment / post - - -likeable_id:integer - -likeable_type:string - - add_index :likes, [:likeable_type, :likeable_id] - - - -model: -belongs_to :commentable, :polymorphic => true - -## -class Comment < ActiveRecord::Base - has_many :likes, :as => :likeable -end - -class Post < ActiveRecord::Base - has_many :likes, :as => :likeable -end - - - - -TODO: - http://localhost:3000/users/ path is broken - You must be logged into your own account to post on your timeline - - Timelines render all Posts for that User - - Users can "like" posts by clicking the "like" link - -Posts display the total number of Likes - -Posts display the first few names of who liked them +The email uses asynchronous/background processing so it doesn't block your server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -add indexes diff --git a/spec/mailers/previews/user_mailer_preview.rb b/spec/mailers/previews/user_mailer_preview.rb new file mode 100644 index 000000000..957e12b64 --- /dev/null +++ b/spec/mailers/previews/user_mailer_preview.rb @@ -0,0 +1,4 @@ +# Preview all emails at http://localhost:3000/rails/mailers/user_mailer +class UserMailerPreview < ActionMailer::Preview + +end diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb new file mode 100644 index 000000000..c48d3adee --- /dev/null +++ b/spec/mailers/user_mailer_spec.rb @@ -0,0 +1,5 @@ +require "rails_helper" + +RSpec.describe UserMailerMailer, type: :mailer do + pending "add some examples to (or delete) #{__FILE__}" +end From 6d9fb8acef621a4b26d99e5e6e7c4c2d44e4c564 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 19 Dec 2016 07:42:10 -0800 Subject: [PATCH 57/61] validation tweak --- app/models/profile.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/models/profile.rb b/app/models/profile.rb index 203b8622d..e40e8cf3e 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -1,11 +1,8 @@ class Profile < ApplicationRecord belongs_to :user, inverse_of: :profile validates :first_name, :last_name, presence: true - - - validates :motto, :about, length: { maximum: 600 } validates :gender, presence: true - validates :phone, length: { maximum: 10 }, :format => /[0-9]/ + end From 897cfd40f969113ef657e8ffdbc4899688882576 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 19 Dec 2016 07:44:49 -0800 Subject: [PATCH 58/61] validation tweak --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d06cc38a4..01e0c2dbf 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -25,7 +25,7 @@ def new def create @user = User.new(whitelisted_params) if @user.save - User.send_welcome_email(@user.id) + # User.send_welcome_email(@user.id) sign_in(@user) flash[:success] = "Welcome" #welcome email From f84276236dd15d60bbdfa37f6ae2f1c8345144e2 Mon Sep 17 00:00:00 2001 From: Kenneth Kottenstette Date: Mon, 19 Dec 2016 16:08:01 -0800 Subject: [PATCH 59/61] heroku push --- Gemfile | 2 ++ app/assets/javascripts/newsfeeds.coffee | 3 ++ app/assets/stylesheets/custom.scss | 4 +-- app/assets/stylesheets/newsfeeds.scss | 3 ++ app/controllers/application_controller.rb | 7 ++++ app/controllers/friendings_controller.rb | 6 ++-- app/controllers/likes_controller.rb | 2 -- app/controllers/newsfeeds_controller.rb | 8 +++++ app/controllers/photos_controller.rb | 6 ++-- app/controllers/posts_controller.rb | 4 +-- app/controllers/profiles_controller.rb | 2 +- app/controllers/users_controller.rb | 3 +- app/helpers/newsfeeds_helper.rb | 2 ++ app/models/photo.rb | 4 +-- app/models/user.rb | 5 ++- app/views/comments/_posted_comment.html.erb | 9 +++--- app/views/newsfeeds/show.html.erb | 24 ++++++++++++++ app/views/photos/show.html.erb | 2 +- app/views/posts/_posted_header.html.erb | 8 +++-- app/views/sessions/new.html.erb | 11 +++++-- app/views/shared/_banner_nav.html.erb | 32 +++++++------------ app/views/shared/_search_nav.html.erb | 4 ++- app/views/timelines/show.html.erb | 11 +++++-- app/views/users/new.html.erb | 1 + config/routes.rb | 2 ++ .../20161219195325_remove_avatar_column.rb | 6 ++++ ...95435_add_avatar_banner_columns_to_user.rb | 6 ++++ db/schema.rb | 6 ++-- db/seeds.rb | 11 ++++--- spec/controllers/newsfeeds_controller_spec.rb | 5 +++ spec/helpers/newsfeeds_helper_spec.rb | 15 +++++++++ 31 files changed, 153 insertions(+), 61 deletions(-) create mode 100644 app/assets/javascripts/newsfeeds.coffee create mode 100644 app/assets/stylesheets/newsfeeds.scss create mode 100644 app/controllers/newsfeeds_controller.rb create mode 100644 app/helpers/newsfeeds_helper.rb create mode 100644 app/views/newsfeeds/show.html.erb create mode 100644 db/migrate/20161219195325_remove_avatar_column.rb create mode 100644 db/migrate/20161219195435_add_avatar_banner_columns_to_user.rb create mode 100644 spec/controllers/newsfeeds_controller_spec.rb create mode 100644 spec/helpers/newsfeeds_helper_spec.rb diff --git a/Gemfile b/Gemfile index 6dec1ed30..68decc177 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,8 @@ gem 'paperclip' gem 'aws-sdk' gem 'figaro' +gem 'faker' + gem 'bootstrap-sass' gem 'binding_of_caller' diff --git a/app/assets/javascripts/newsfeeds.coffee b/app/assets/javascripts/newsfeeds.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/app/assets/javascripts/newsfeeds.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index 8cae45834..7a2596106 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -266,7 +266,7 @@ nav { .alert { position: absolute; - margin-top: 55px; + margin-top: 82px; text-align: center; width: 100%; z-index: 99; @@ -284,7 +284,7 @@ hr { height: 2px; opacity: .2; } -// +// // .cover-banner { // border: 3px solid black; // } diff --git a/app/assets/stylesheets/newsfeeds.scss b/app/assets/stylesheets/newsfeeds.scss new file mode 100644 index 000000000..90af1262c --- /dev/null +++ b/app/assets/stylesheets/newsfeeds.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the newsfeeds controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3024d1a4a..496e2c37f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,4 +1,6 @@ class ApplicationController < ActionController::Base + #rescue_from ActiveRecord::RecordNotFound, with: :record_not_found + protect_from_forgery with: :exception before_action :require_login @@ -47,4 +49,9 @@ def require_current_user redirect_to login_path end end + + # def record_not_found + # redirect_to root_url + # end + end diff --git a/app/controllers/friendings_controller.rb b/app/controllers/friendings_controller.rb index 7143a7b49..0ebfcac92 100644 --- a/app/controllers/friendings_controller.rb +++ b/app/controllers/friendings_controller.rb @@ -1,6 +1,5 @@ class FriendingsController < ApplicationController - - before_action :require_current_user, except: [:index] + def index @user = User.find(params[:user_id]) @@ -9,14 +8,15 @@ def index def create friending_recipient = User.find(params[:id]) - current_user.friended_users << friending_recipient + flash[:success] = "You're now friends with #{friending_recipient.profile.first_name}" redirect_to :back end def destroy unfriended_user = User.find(params[:id]) current_user.friended_users.delete(unfriended_user) + flash[:success] = "You're now no longer friends with #{unfriended_user.profile.first_name}" redirect_to :back end diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index a0b58a154..8ee69466c 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -1,7 +1,5 @@ class LikesController < ApplicationController - before_action :require_current_user - def create type = params[:likeable] create_context diff --git a/app/controllers/newsfeeds_controller.rb b/app/controllers/newsfeeds_controller.rb new file mode 100644 index 000000000..9cfd1915e --- /dev/null +++ b/app/controllers/newsfeeds_controller.rb @@ -0,0 +1,8 @@ +class NewsfeedsController < ApplicationController + + def show + @user = current_user + end + + +end diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index cb1d3a284..2dedc8953 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -1,6 +1,6 @@ class PhotosController < ApplicationController - #before_action :require_current_user, only: [:new, :create, :destroy, :set_avatar, :set_banner] + before_action :require_current_user, except: [:index, :show] def index @user = User.find(params[:user_id]) @@ -42,13 +42,13 @@ def destroy def set_avatar @photo = Photo.find(params[:photo_id]) - current_user.profile.update_attributes(avatar_id: @photo) + current_user.avatar = @photo redirect_to user_timeline_path(current_user) end def set_banner(photo) @photo = Photo.find(params[:id]) - current_user.profile.banner = @photo.id + current_user.banner = @photo redirect :back end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 570b8f044..ca351d90d 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -1,12 +1,12 @@ class PostsController < ApplicationController - before_action :require_current_user, only: [:new, :create, :destroy] - + before_action :require_current_user def new @post = Post.new end def create + @user = current_user @post = current_user.posts.build(whitelisted_params) if @post.save flash[:success] = "Post created!" diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 369a921f2..94ab22383 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -1,6 +1,6 @@ class ProfilesController < ApplicationController - before_action :require_current_user, only: [:edit, :update, :destroy] + before_action :require_current_user, except: [:show] def show @user = User.find(params[:user_id]) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 01e0c2dbf..c45ff79df 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,5 @@ class UsersController < ApplicationController before_action :require_login, except: [:new, :create] - before_action :require_current_user, only: [:edit, :update, :destroy] @@ -25,10 +24,10 @@ def new def create @user = User.new(whitelisted_params) if @user.save + #welcome email # User.send_welcome_email(@user.id) sign_in(@user) flash[:success] = "Welcome" - #welcome email redirect_to edit_user_profile_path(current_user) else flash[:error] = "Try again" diff --git a/app/helpers/newsfeeds_helper.rb b/app/helpers/newsfeeds_helper.rb new file mode 100644 index 000000000..a7a9a7bc8 --- /dev/null +++ b/app/helpers/newsfeeds_helper.rb @@ -0,0 +1,2 @@ +module NewsfeedsHelper +end diff --git a/app/models/photo.rb b/app/models/photo.rb index 4db224b3c..230984635 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -1,5 +1,6 @@ class Photo < ApplicationRecord belongs_to :user + has_attached_file :picture, styles: { thumb: "100x100", small: "200x200", large: "600x600", @@ -10,8 +11,5 @@ class Photo < ApplicationRecord validates_attachment_content_type :picture, content_type: /\Aimage\/.*\Z/ - belongs_to :profile - - end diff --git a/app/models/user.rb b/app/models/user.rb index 343ae988e..4e70c0a5f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,7 +1,7 @@ class User < ApplicationRecord before_create :generate_token - after_save { email.downcase.strip } + # after_save { email.downcase.strip } has_many :posts, dependent: :destroy has_one :profile, inverse_of: :user, dependent: :destroy @@ -23,6 +23,9 @@ class User < ApplicationRecord has_many :photos, dependent: :destroy + has_one :avatar, :class_name => "Photo", :foreign_key => "user_id" + has_one :banner, :class_name => "Photo", :foreign_key => "user_id" + accepts_nested_attributes_for :profile diff --git a/app/views/comments/_posted_comment.html.erb b/app/views/comments/_posted_comment.html.erb index 8e3dda99e..d615e098c 100644 --- a/app/views/comments/_posted_comment.html.erb +++ b/app/views/comments/_posted_comment.html.erb @@ -2,10 +2,11 @@
    - - <%#= link_to user_timeline_path(friend.id), class: "thumbnail img-responsive" do %> + <% if @user.avatar %> + <%= image_tag @user.avatar.picture.expiring_url(10, :small), class: "img-thumbnail img-responsive" %> +<% else %> <%= image_tag "default.gif", class: "thumbnail img-responsive" %> - <%# end %> + <% end %>
    @@ -18,7 +19,7 @@
    -

    +

    <%= comment.body %>

    diff --git a/app/views/newsfeeds/show.html.erb b/app/views/newsfeeds/show.html.erb new file mode 100644 index 000000000..46a6e3cd8 --- /dev/null +++ b/app/views/newsfeeds/show.html.erb @@ -0,0 +1,24 @@ +<%= render 'shared/search_nav' %> +<%= render 'shared/banner_nav' %> + +
    +
    +
    +
    +
    +

    + News Feed +

    + + +
    +
    +
    +
    +

    Coming Soon

    + <%= link_to "Back to timeline...", user_timeline_path(@user), class: "btn btn-info btn-block" %> +
    +
    +
    +
    +
    diff --git a/app/views/photos/show.html.erb b/app/views/photos/show.html.erb index 644608115..c6c482cf1 100644 --- a/app/views/photos/show.html.erb +++ b/app/views/photos/show.html.erb @@ -23,7 +23,7 @@
    <%= link_to "Delete", user_photo_path(@photo), method: :delete, class: "btn btn-danger col-sm-2 col-sm-offset-3" %> - <%= link_to "Set as Avatar", { :controller => 'photos', :action => 'set_avatar', :photo_id => @photo.id }, class: "btn btn-default col-sm-2" %> + <%= link_to "Set as Avatar", { :controller => 'photos', :action => 'set_avatar', :photo_id => @photo.id }, class: "col-sm-offset-1 btn btn-default col-sm-2" %> <%#= link_to "Set as Cover", set_avatar_path((@photo), class: "btn btn-default col-sm-2" %> <% end %> diff --git a/app/views/posts/_posted_header.html.erb b/app/views/posts/_posted_header.html.erb index eecfd6707..3ec7f51f1 100644 --- a/app/views/posts/_posted_header.html.erb +++ b/app/views/posts/_posted_header.html.erb @@ -2,9 +2,11 @@
    - - <%= image_tag "default.gif", class: "thumbnail img-responsive" %> -
    + <% if @user.avatar %> + <%= image_tag @user.avatar.picture.expiring_url(10, :small), class: "img-thumbnail img-responsive" %> +<% else %> + <%= image_tag "default.gif", class: "thumbnail img-responsive" %> + <% end %>
    -

    ...or sign up and join us!

    - <%= button_to "Sign Up", root_url, :class => "btn btn-success", method: :get %> - + <% unless current_user %> +

    ...or sign up and join us!

    + <%= button_to "Sign Up", root_url, :class => "btn btn-success", method: :get %> + <% else %> +




    +

    You don't have access to that

    + <%= button_to "Get back in the action!", user_timeline_path(current_user.id), :class => "btn btn-large btn-warning", method: :get %> + <% end %>
    diff --git a/app/views/shared/_banner_nav.html.erb b/app/views/shared/_banner_nav.html.erb index 6cab4b9da..49e56644e 100644 --- a/app/views/shared/_banner_nav.html.erb +++ b/app/views/shared/_banner_nav.html.erb @@ -1,31 +1,23 @@
    @@ -38,7 +30,7 @@ Photos <%= @user.photos.count %> - Friends <%= @user.friended_users.count %> + Friends <%= @user.friended_users.count + @user.users_friended_by.count %> diff --git a/app/views/shared/_search_nav.html.erb b/app/views/shared/_search_nav.html.erb index 0d61dc489..333c91833 100644 --- a/app/views/shared/_search_nav.html.erb +++ b/app/views/shared/_search_nav.html.erb @@ -16,8 +16,10 @@