Browse Source

add border and navbar stuff

pull/1/head
wes 7 years ago
parent
commit
301770b0ba
  1. 2
      fabfile.py
  2. 5
      package.json
  3. 4
      rollup.config.js
  4. 185
      src/scripts/app.tag
  5. 1
      src/scripts/blog.tag
  6. 15
      src/scripts/editor.js
  7. 3
      src/scripts/editor.tag
  8. 11
      src/scripts/grid.js
  9. 1
      src/scripts/lenses.js
  10. 10
      src/scripts/post.tag
  11. 2
      src/scripts/projects.tag
  12. 7
      src/scripts/riotblog.js
  13. 26
      src/scripts/sidebar.tag
  14. 9
      src/scripts/social.tag
  15. 13
      src/styles/riotblog.scss
  16. 61
      src/templates/index.html
  17. 2
      src/templates/write.html
  18. 41
      yarn.lock

2
fabfile.py

@ -15,7 +15,7 @@ def buildScss():
@task
def buildJS():
local("rollup -c rollup.config.js")
local("uglifyjs build/bundle.js > build/scripts/riotblog.min.js")
local("uglifyjs build/bundle.js -c > build/scripts/riotblog.min.js")
@task
def buildVenv():

5
package.json

@ -31,17 +31,22 @@
"dependencies": {
"animate.css": "^3.5.2",
"axios": "^0.16.2",
"closest": "^0.0.1",
"element-closest": "^2.0.2",
"es6-promise": "^4.1.1",
"fetch-cached": "^2.0.3",
"font-awesome": "^4.7.0",
"immutable": "^3.8.1",
"jquery": "^3.2.1",
"lodash": "^4.17.4",
"lodash-es": "^4.17.4",
"moment": "^2.18.1",
"querystring": "^0.2.0",
"riotcontrol": "^0.0.3",
"rollup-plugin-json": "^2.1.1",
"rollup-plugin-uglify": "^2.0.1",
"showdown": "^1.6.4",
"smoothscroll-polyfill": "^0.3.5",
"spectre.css": "^0.2.14",
"twitter-widgets": "^1.0.0",
"whatwg-fetch": "^2.0.2"

4
rollup.config.js

@ -2,6 +2,7 @@ import riot from 'rollup-plugin-riot'
import nodeResolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs'
import buble from 'rollup-plugin-buble'
import uglify from 'rollup-plugin-uglify';
export default {
entry: 'src/scripts/riotblog.js',
@ -10,7 +11,8 @@ export default {
riot(),
nodeResolve({ jsnext: true, preferBuiltins: false}),
commonjs(),
buble()
buble(),
uglify()
],
format: 'iife'
}

185
src/scripts/app.tag

@ -1,12 +1,15 @@
<app>
<div class="header">
<section style={{"margin-top" : "0px"}} class="text-center nav navbar centered page-top navbar-section">
<div
style={{"border-bottom" : showBorder ? "solid 1px" : "none" }}
class="header"
>
<section style={{"margin-top" : "0px"}} class="text-center nav navbar centered navbar-section">
<h4 class="blog-title">{ currentPage }</h4>
</section>
</div>
<div class="app-body">
<div class="">
<section class="text-center nav navbar centered page-top navbar-section">
<section class="text-center nav navbar centered navbar-section">
<sidebar
if={this.active.get("posts")}
name="Filter By Category"
@ -14,70 +17,67 @@
</sidebar>
</section>
<div class="">
<div class="show-md show-sm show-xs navigate-small dropdown dropdown-right">
<button onclick={this.menuOn} class="mobile-navigate btn btn-link navigate-item dropdown-toggle" tabindex="0">
<i class="bar-menu fa fa-bars" aria-hidden="true"></i>
</button>
<!-- menu component -->
<ul
if={this.menuActive}
class="mobile-menu tab tab-block menu">
<li
each="{page in ['posts', 'projects', 'links', 'about']}"
class={"navigate-tab tab-item animated fadeIn " + (this.parent.active.get(page) ? "active" : "")}
data-is="navtab"
active={this.parent.active.get(page)}
to={this.parent.to(page)}
title={page}
onclick={this.menuOff}
>
</li>
</ul>
</div>
<ul class="hide-md hide-sm hide-xs navigate tab tab-block">
<li
each="{page in ['posts', 'projects', 'links', 'about']}"
class={"navigate-tab tab-item animated fadeIn " + (this.parent.active.get(page) ? "active" : "")}
data-is="navtab"
active={this.parent.active.get(page)}
to={this.parent.to(page)}
title={page}
>
</li>
</ul>
<div class="projects-content">
<loading if={!this.state.loaded}></loading>
<projectsview
class="animated fadeInDown"
if={this.active.get("projects") && this.state.loaded}
state={this.state}
ref="projectsview"
>
</projectsview>
</div>
<div class="content">
<postsview
cached={this.cached}
state={this.state}
if={this.active.get("posts")}
ref="postsview"
>
</postsview>
<about
if={this.active.get("about")}
>
</about>
<links
cached={this.cached}
state={this.state}
if={this.active.get("links")}
>
</links>
</div>
</div>
<div class={"show-md show-sm show-xs navigate-small dropdown dropdown-right " + (menuActive ? "active" : "")}>
<button onclick={menuOn} class="mobile-navigate btn btn-link navigate-item dropdown-toggle" tabindex="0">
<i class="bar-menu fa fa-bars" aria-hidden="true"></i>
</button>
<!-- menu component -->
<ul
show={menuActive}
class="mobile-menu tab tab-block menu">
<li
each="{page in ['posts', 'projects', 'links', 'about']}"
class={"navigate-tab tab-item animated fadeIn " + (this.parent.active.get(page) ? "active" : "")}
data-is="navtab"
active={this.parent.active.get(page)}
to={this.parent.to(page)}
title={page}
onclick={this.parent.menuOff}
>
</li>
</ul>
</div>
<ul class="hide-md hide-sm hide-xs navigate tab tab-block">
<li
each="{page in ['posts', 'projects', 'links', 'about']}"
class={"navigate-tab tab-item animated fadeIn " + (this.parent.active.get(page) ? "active" : "")}
data-is="navtab"
active={this.parent.active.get(page)}
to={this.parent.to(page)}
title={page}
>
</li>
</ul>
<div class="projects-content">
<loading if={!this.state.loaded}></loading>
<projectsview
class="animated fadeInDown"
if={this.active.get("projects") && this.state.loaded}
state={this.state}
ref="projectsview"
>
</projectsview>
</div>
<div class="content">
<postsview
cached={this.cached}
state={this.state}
if={this.active.get("posts")}
ref="postsview"
>
</postsview>
<about
if={this.active.get("about")}
>
</about>
<links
cached={this.cached}
state={this.state}
if={this.active.get("links")}
>
</links>
</div>
</div>
<script>
@ -91,14 +91,26 @@ import './loading.tag';
import fetchCached from 'fetch-cached';
import Z from './zipper.js';
import {default as R} from 'ramda';
import pathEq from 'ramda/src/pathEq';
import route from 'riot-route';
import lens from './lenses.js';
import { throttle } from 'lodash-es';
var self = this;
self.cache = {};
self.throttle = throttle;
self.showBorder = false;
window.addEventListener("scroll",
throttle((ev) => {
self.update({"showBorder" : ev.pageY != 0});
},
500)
);
self.cached = fetchCached({
fetch: fetch,
cache: {
@ -111,7 +123,6 @@ self.cached = fetchCached({
}
});
self.R = R;
self.route = route;
self.riot = riot;
self.menuActive = false;
@ -128,18 +139,10 @@ RiotControl.on("postswitch",
self.route.base('#!')
function PostUpdated() {
riot.observable(this);
this.on("postupdated", () => { console.log("caught event"); });
}
var postObserver = new PostUpdated();
this.state = {
"_id" : false,
"projects" : Z.empty,
"loaded" : false,
"postupdate" : postObserver
"loaded" : false
};
this.active = lens.actives({
@ -149,26 +152,25 @@ this.active = lens.actives({
"about" : false
});
toggleMenu(ev) {
ev.preventDefault();
self.update({"menuActive" : !self.menuActive});
}
menuOn(ev) {
ev.preventDefault();
self.update({"menuActive" : true});
console.log("clicked it");
self.menuActive = true;
self.update();
}
menuOff(ev) {
ev.preventDefault();
self.update({"menuActive" : false});
console.log("trying to close it");
self.menuActive = false;
self.update();
}
function activate(page) {
return function() {
if (page !== "posts") {
document.title = `${page.slice(0,1).toUpperCase()}${page.slice(1,page.length)}`;
self.currentPage = `Wes Kerfoot ${document.title}`;
self.currentPage = document.title;
}
console.log(`activating ${page}`);
self.active = lens.setActive(self.active, page);
@ -214,11 +216,12 @@ this.on("mount", () => {
function loaduser() {
/* https://api.github.com/users/${self.username}/repos?sort=updated&direction=desc */
axios.get(`/blog/projects`)
.then(function(resp) {
self.cached(`/blog/projects`)
.then((resp) => resp.json())
.then((resp) => {
self.state.projects = Z.fromList(
resp.data.filter(
R.pathEq(["fork"], false)));
resp.filter(
pathEq(["fork"], false)));
self.state.loaded = true;
self.update();

1
src/scripts/blog.tag

@ -3,6 +3,5 @@
<script>
import route from 'riot-route/lib/tag';
</script>
</blog>

15
src/scripts/editor.js

@ -1,4 +1,15 @@
import riot from 'riot';
import './editor.tag';
axios.defaults.withCredentials = true
import { default as RiotControl } from 'riotcontrol';
import './bbutton.tag';
import { default as promise } from 'es6-promise';
import { default as smooth } from 'smoothscroll-polyfill';
import 'element-closest';
promise.Promise.polyfill();
smooth.polyfill();
window.RiotControl = RiotControl;
RiotControl.addStore(new riot.observable());
riot.mount("editor");

3
src/scripts/editor.tag

@ -63,14 +63,11 @@
<script>
import './loading.tag';
import './raw.tag';
import 'whatwg-fetch';
import { default as showdown } from 'showdown';
import { default as R } from 'ramda';
import querystring from 'querystring';
import Z from './zipper.js';
this.loading = false;
this.R = R;
this.querystring = querystring;
this.converter = new showdown.Converter();

11
src/scripts/grid.js

@ -1,14 +1,17 @@
import './grid.tag';
import './row.tag';
import './column.tag';
import { default as R } from 'ramda';
import unfold from 'ramda/src/unfold';
import take from 'ramda/src/take';
import drop from 'ramda/src/drop';
import length from 'ramda/src/length';
function chunk(n, xs) {
/* Chunk a list into groups of n size */
return R.unfold(
return unfold(
(xs) => {
if (R.length(xs) > 0) {
return [{"row" : R.take(n, xs)}, R.drop(n, xs)];
if (length(xs) > 0) {
return [{"row" : take(n, xs)}, drop(n, xs)];
}
return false;
}, xs);

1
src/scripts/lenses.js

@ -1,4 +1,3 @@
import R from 'ramda';
import I from 'immutable';
function actives(m) {

10
src/scripts/post.tag

@ -43,9 +43,7 @@
<script>
import './raw.tag';
import './social.tag';
import { default as R } from 'ramda';
import { default as showdown } from 'showdown';
import { default as jquery } from 'jquery';
import './postcontrols.tag';
import route from 'riot-route';
@ -92,9 +90,11 @@ next(ev) {
}
toTop() {
jquery('html, body').stop().animate({
scrollTop: jquery(".blog-title").offset().top-15
}, 1000);
window.scroll({
top: 0,
left: 0,
behavior: 'smooth'
});
}
updatePost(postcontent) {

2
src/scripts/projects.tag

@ -61,7 +61,7 @@
</div>
<script>
import Z from './zipper.js';
import moment from 'moment';
import moment from 'moment/min/moment.min';
var cycle_timeout = 12;

7
src/scripts/riotblog.js

@ -3,20 +3,21 @@ import { default as RiotControl } from 'riotcontrol';
import './bbutton.tag';
import './post.tag';
import './posts.tag';
import './editor.tag';
import './projects.tag';
import './app.tag';
import './grid.js';
import { default as promise } from 'es6-promise';
import { default as smooth } from 'smoothscroll-polyfill';
import 'element-closest';
promise.Promise.polyfill()
promise.Promise.polyfill();
smooth.polyfill();
window.RiotControl = RiotControl;
RiotControl.addStore(new riot.observable());
riot.mount("app");
riot.mount("editor");
riot.mount("post",
{
"creator" : "author"

26
src/scripts/sidebar.tag

@ -29,13 +29,13 @@
</div>
</div>
<div style={R.merge(panelStyles, nobg)} class="panel-body">
<div style={merge(panelStyles, nobg)} class="panel-body">
<ul style={nobg} class="menu">
<li style={R.merge(nobg, subtitle)} class="divider sidebar-divider" data-content="Categories">
<li style={merge(nobg, subtitle)} class="divider sidebar-divider" data-content="Categories">
</li>
<li style={R.merge(menuStyles, nobg)} each={item in opts.items} class="menu-item">
<li style={merge(menuStyles, nobg)} each={item in opts.items} class="menu-item">
<a
style={nobg}
class="btn btn-primary sidebar-button"
@ -60,26 +60,24 @@
</div>
<script>
import { default as jquery } from 'jquery';
import { default as lodash } from 'lodash';
import { default as R } from 'ramda';
import { debounce } from 'lodash-es';
import merge from 'ramda/src/merge';
var self = this;
self.R = R;
self.merge = merge;
var background = "rgba(255, 255, 255, 0.95)";
self.open = false;
self.swiped = undefined;
self.swipe = lodash.debounce(() => {
self.swipe = debounce(() => {
console.log("clicked");
self.update({
"swiped" : self.swiped == undefined ? true : !self.swiped,
"open" : !self.open
});
}, 100);
}, 10);
self.buttonStyles = (() => {
return {
@ -114,7 +112,8 @@ self.styles = (() => {
"left": "0",
"overflow-x": "hidden",
"padding-top": "60px",
"border" : "1px solid",
"border-right" : "1px solid",
"border-bottom" : "1px solid",
"background-color" : background
};
});
@ -145,9 +144,8 @@ self.subtitle = {
self.one("updated",
() => {
jquery(document).click(function(event) {
if(!jquery(event.target).closest('#sidebar').length) {
console.log("clicked outside of the sidebar");
document.addEventListener("click", function(event) {
if(!event.target.closest('#sidebar')) {
if (self.open) {
self.swipe();
}

9
src/scripts/social.tag

@ -1,8 +1,12 @@
<social>
<div class="social-wrapper btn-group">
<div onmouseover={test} data-is="raw" ref="twitter" content={this.tweetHtml}>
<div style={{"margin-right" : "1px"}}>
<div onmouseover={test} data-is="raw" ref="twitter" content={this.tweetHtml}>
</div>
</div>
<div onmouseover={test} data-is="raw" ref="facebook" content={this.fbHtml}>
<div style={{"margin-left" : "1px"}}>
<div onmouseover={test} data-is="raw" ref="facebook" content={this.fbHtml}>
</div>
</div>
</div>
<script>
@ -45,7 +49,6 @@ self.on("updated", () => {
test(ev) {
ev.preventDefault()
console.log(ev.target);
}
shouldUpdate() {

13
src/styles/riotblog.scss

@ -10,22 +10,23 @@ $navbarHeight: 100px;
.blog-title {
text-transform: capitalize;
margin-top: 10px;
margin-top: 15px;
max-width: 70%;
margin-left: auto;
margin-right: auto;
font-size: 1.75em;
font-weight: 400;
color: black;
@media (max-width: 600px) {
font-size: 1.5em;
font-size: 1.6em;
}
@media (max-width: 530px) {
font-size: 1.2em;
font-size: 1.3em;
}
}
.header {
background-color: $brandingBG2;
color: white;
font-weight: 800;
background-color: white;
height: 70px;
margin-top: 0px;
padding-top: 0px;

61
src/templates/index.html

@ -9,38 +9,35 @@
<html>
<body>
<app csrf_token="{{ csrf_token() }}"></app>
<footer class="footer">
</footer>
<script>
window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
</body>
<footer>
<script>
window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
return t;
}(document, "script", "twitter-wjs"));
</script>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript" src="/scripts/riotblog.min.js"></script>
</body>
return t;
}(document, "script", "twitter-wjs"));
</script>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<script type="text/javascript" src="/scripts/riotblog.min.js"></script>
</footer>
</html>

2
src/templates/write.html

@ -27,7 +27,7 @@
{% block scripts %}
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript" src="/blog/scripts/riotblog.min.js"></script>
<script type="text/javascript" src="/blog/scripts/editor.min.js"></script>
{% endblock %}
</body>

41
yarn.lock

@ -220,6 +220,12 @@ cliui@^3.2.0:
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
closest@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/closest/-/closest-0.0.1.tgz#26da6f80b3e0e17e71f80f12782819e9f653495c"
dependencies:
matches-selector "0.0.1"
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@ -234,6 +240,10 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies:
delayed-stream "~1.0.0"
commander@~2.11.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@ -297,6 +307,10 @@ ecc-jsbn@~0.1.1:
dependencies:
jsbn "~0.1.0"
element-closest@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/element-closest/-/element-closest-2.0.2.tgz#72a740a107453382e28df9ce5dbb5a8df0f966ec"
error-ex@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
@ -750,6 +764,10 @@ locate-path@^2.0.0:
p-locate "^2.0.0"
path-exists "^3.0.0"
lodash-es@^4.17.4:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
lodash@^4.17.4:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@ -773,6 +791,10 @@ magic-string@^0.19.0:
dependencies:
vlq "^0.2.1"
matches-selector@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/matches-selector/-/matches-selector-0.0.1.tgz#1df5262243ae341c1a0804dd302048267ac713bb"
mem@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
@ -1268,6 +1290,12 @@ rollup-plugin-riot@^1.1.0:
riot-compiler "^3.0.0"
rollup-pluginutils "^1.5.2"
rollup-plugin-uglify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz#67b37ad1efdafbd83af4c36b40c189ee4866c969"
dependencies:
uglify-js "^3.0.9"
rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408"
@ -1330,6 +1358,10 @@ simple-html-tokenizer@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.4.1.tgz#028988bb7fe8b2e6645676d82052587d440b02d3"
smoothscroll-polyfill@^0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.5.tgz#466e6039b51cb525d70e1a5077ef81e064678eae"
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@ -1342,7 +1374,7 @@ source-map-support@^0.4.0:
dependencies:
source-map "^0.5.6"
source-map@^0.5.6:
source-map@^0.5.6, source-map@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
@ -1473,6 +1505,13 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
uglify-js@^3.0.9:
version "3.0.27"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034"
dependencies:
commander "~2.11.0"
source-map "~0.5.1"
uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"

Loading…
Cancel
Save