init commit
|
@ -0,0 +1,110 @@
|
||||||
|
---
|
||||||
|
title: 404
|
||||||
|
exclude_from_nav: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Error!</title>
|
||||||
|
<style>
|
||||||
|
html {
|
||||||
|
font-size: 62.5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
padding: 60px;
|
||||||
|
background: #fafafa;
|
||||||
|
font-size: 150%;
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrap {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 700px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 30px;
|
||||||
|
background: #fff;
|
||||||
|
box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
border-top: 3px solid #b00f08;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #731217;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #b00f08;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0 0 15px;
|
||||||
|
font-size: 240%;
|
||||||
|
font-weight: 300;
|
||||||
|
color: #731217;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding: 15px;
|
||||||
|
margin: 15px 0;
|
||||||
|
background: #eee;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
padding: 15px;
|
||||||
|
background: #fafafa;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
line-height: 1.8;
|
||||||
|
color: rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.exception {
|
||||||
|
background-color: #ffeded;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre em {
|
||||||
|
font-style: normal;
|
||||||
|
color: rgba(0, 0, 0, 0.5);
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrap">
|
||||||
|
<h1>Error!</h1>
|
||||||
|
<p>The requested url <script>
|
||||||
|
document.write(window.location.pathname);
|
||||||
|
</script> was not found.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,9 @@
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
gem 'thor'
|
||||||
|
gem 'stringex'
|
||||||
|
gem 'jekyll-paginate'
|
||||||
|
gem 'kramdown'
|
||||||
|
gem 'jekyll-watch'
|
||||||
|
gem 'jekyll-archives'
|
||||||
|
gem 'jekyll'
|
||||||
|
gem 'json'
|
|
@ -0,0 +1,52 @@
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
colorator (0.1)
|
||||||
|
ffi (1.9.10)
|
||||||
|
jekyll (3.0.2)
|
||||||
|
colorator (~> 0.1)
|
||||||
|
jekyll-sass-converter (~> 1.0)
|
||||||
|
jekyll-watch (~> 1.1)
|
||||||
|
kramdown (~> 1.3)
|
||||||
|
liquid (~> 3.0)
|
||||||
|
mercenary (~> 0.3.3)
|
||||||
|
rouge (~> 1.7)
|
||||||
|
safe_yaml (~> 1.0)
|
||||||
|
jekyll-archives (2.1.0)
|
||||||
|
jekyll (>= 2.4)
|
||||||
|
jekyll-paginate (1.1.0)
|
||||||
|
jekyll-sass-converter (1.4.0)
|
||||||
|
sass (~> 3.4)
|
||||||
|
jekyll-watch (1.3.1)
|
||||||
|
listen (~> 3.0)
|
||||||
|
json (1.8.3)
|
||||||
|
kramdown (1.9.0)
|
||||||
|
liquid (3.0.6)
|
||||||
|
listen (3.0.5)
|
||||||
|
rb-fsevent (>= 0.9.3)
|
||||||
|
rb-inotify (>= 0.9)
|
||||||
|
mercenary (0.3.5)
|
||||||
|
rb-fsevent (0.9.7)
|
||||||
|
rb-inotify (0.9.5)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
rouge (1.10.1)
|
||||||
|
safe_yaml (1.0.4)
|
||||||
|
sass (3.4.21)
|
||||||
|
stringex (2.5.2)
|
||||||
|
thor (0.19.1)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
jekyll
|
||||||
|
jekyll-archives
|
||||||
|
jekyll-paginate
|
||||||
|
jekyll-watch
|
||||||
|
json
|
||||||
|
kramdown
|
||||||
|
stringex
|
||||||
|
thor
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.11.2
|
|
@ -0,0 +1,9 @@
|
||||||
|
# spaghetti.ga
|
||||||
|
Based of Jekyll default theme and redesign again by me.<br>
|
||||||
|
Feel free to use this theme :^)
|
||||||
|
<br><br>
|
||||||
|
But please don't try to copy anything from my article :p
|
||||||
|
|
||||||
|
|
||||||
|
# License
|
||||||
|
MIT
|
|
@ -0,0 +1,39 @@
|
||||||
|
# Welcome to Jekyll!
|
||||||
|
#
|
||||||
|
# This config file is meant for settings that affect your whole blog, values
|
||||||
|
# which you are expected to set up once and rarely need to edit after that.
|
||||||
|
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
||||||
|
# 'jekyll serve'. If you change this file, please restart the server process.
|
||||||
|
|
||||||
|
# Site settings
|
||||||
|
title: Spaghetti-san Blog
|
||||||
|
email: spaghettisan@yahoo.com
|
||||||
|
description: > # this means to ignore newlines until "baseurl:"
|
||||||
|
All about Spaghetti-san Project
|
||||||
|
baseurl: "" # the subpath of your site, e.g. /blog
|
||||||
|
url: "http://spaghetti.ga" # the base hostname & protocol for your site
|
||||||
|
twitter_username: axlyody
|
||||||
|
github_username: spaghetti-san
|
||||||
|
facebook_username: axlyody
|
||||||
|
|
||||||
|
# Gems
|
||||||
|
gems:
|
||||||
|
- jekyll-archives
|
||||||
|
- jekyll-paginate
|
||||||
|
|
||||||
|
# Config
|
||||||
|
paginate: 5
|
||||||
|
paginate_path: "page/:num"
|
||||||
|
# Build settings
|
||||||
|
markdown: kramdown
|
||||||
|
|
||||||
|
# Archive
|
||||||
|
jekyll-archives:
|
||||||
|
enabled: []
|
||||||
|
layout: 'archive'
|
||||||
|
permalinks:
|
||||||
|
year: '/:year/'
|
||||||
|
month: '/:year/:month/'
|
||||||
|
day: '/:year/:month/:day/'
|
||||||
|
tag: '/tag/:name/'
|
||||||
|
category: '/category/:name/'
|
|
@ -0,0 +1,9 @@
|
||||||
|
sessions:
|
||||||
|
- _id: ODI5MjY=
|
||||||
|
comment: Just testing
|
||||||
|
created: 2015-12-28 08:21:04.435642+00:00
|
||||||
|
email: axlyody@gmail.com
|
||||||
|
name: Spaghettiaru
|
||||||
|
path: /web/2015/12/27/start-a-blog.html
|
||||||
|
title: ''
|
||||||
|
url: http://spaghetti.ga
|
|
@ -0,0 +1,78 @@
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h2 class="footer-heading">{{ site.title }}</h2>
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col footer-col-1">
|
||||||
|
<ul class="contact-list">
|
||||||
|
<li>Spaghetti-san Personal Blog</li>
|
||||||
|
<li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-2">
|
||||||
|
<ul class="social-media-list">
|
||||||
|
{% if site.github_username %}
|
||||||
|
<li>
|
||||||
|
{% include icon-github.html username=site.github_username %}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if site.facebook_username %}
|
||||||
|
<li>
|
||||||
|
{% include icon-facebook.html username=site.facebook_username %}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if site.twitter_username %}
|
||||||
|
<li>
|
||||||
|
{% include icon-twitter.html username=site.twitter_username %}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-3">
|
||||||
|
<p>Designed by Spaghetti</p>
|
||||||
|
<p>Proudly hosted by <a href="https://pages.github.com/" target="_blank"><span class="octicon octicon-logo-github" style="color: #828282;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: 3px;
|
||||||
|
font-size: 20px;"></span></a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--- Where Javascript Loaded --->
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="http://iamceege.github.io/tooltipster/js/jquery.tooltipster.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
if(location.pathname != "/") {
|
||||||
|
$('.trigger a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
|
||||||
|
} else $('.none a:eq(0)').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-right').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-left').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'left',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/js/jquery-autocomplete.js"></script>
|
||||||
|
<script src="/assets/js/responsive_waterfall.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})}),$(function(){$(document).pjax("#route","body",{fragment:"body",timeout:1e5,scrollTo:0,push:!0,maxCacheLength:20,replace:!1})}),$(document).on("pjax:error",function(e,n,t,o,c){return c.success(n.responseText,t,n),!1});var options={url:"/gblk.json",getValue:"title",list:{match:{enabled:!0,maxNumberOfElements:5}},template:{type:"links",fields:{link:"url"}},theme:"square"};$("#countries").easyAutocomplete(options),Pace.on("start",function(){$(".pacel").show()}),Pace.on("done",function(){$(".pacel").hide()}),$(function(){$("img").lazyload({})});var waterfall=new Waterfall({containerSelector:".wf-container",boxSelector:".wf-box",minBoxWidth:180});$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})});
|
||||||
|
</script>
|
||||||
|
<script id="dsq-count-scr" src="//spaghettisan.disqus.com/count.js" async></script>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<head>
|
||||||
|
<!---
|
||||||
|
Spaghetti Base Redesign
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
|
||||||
|
<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
|
||||||
|
<meta name="google-site-verification" content="WWP0tS0N_Dm8-FTd9oqyZta0oRCDYUFy24R7zSm06Vs" />
|
||||||
|
<meta name="msvalidate.01" content="779064655F047D704FFFD2122C3591F3" />
|
||||||
|
<link rel="stylesheet" href="{{ "/assets/css/alternative.css" | prepend: site.baseurl }}">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/typicons/2.0.7/typicons.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.4.1/octicons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
|
||||||
|
</head>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="pacel "><div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
|
||||||
|
<div class="pace-progress-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pace-activity"></div></div>
|
||||||
|
<a id="route" class="site-title" href="{{ site.baseurl }}/">Paul Walko</a>
|
||||||
|
|
||||||
|
<nav class="site-nav">
|
||||||
|
<a href="#" class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15">
|
||||||
|
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||||||
|
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||||||
|
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
{% for my_page in site.pages %}
|
||||||
|
{% if my_page.title %}
|
||||||
|
{% unless my_page.exclude_from_nav %}
|
||||||
|
<a id="route" class="page-link" href="{{ my_page.url | prepend: site.baseurl }}">{{ my_page.title }}</a>
|
||||||
|
{% endunless %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<a class="page-link" href="/tags/#writeup">Writeups</a>
|
||||||
|
<a class="page-link" href="http://spaghetti.ga/feed.xml"> Feeds</a>
|
||||||
|
<a class="page-link" href="http://github.com/paulwalko?tab=repositories"><i class="octicon octicon-mark-github" style="font-size:"></i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
|
@ -0,0 +1 @@
|
||||||
|
<a href="https://facebook.com/axlyody"><span class="icon icon--facebook">{% include icon-facebook.svg %}</span><span class="username">Axl Yody</span></a>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<svg class="icon icon-facebook" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<path class="background" fill="#828282" d="M 0.875,0 C 0.38722,0 0,0.38721 0,0.875 l 0,14.25 C 0,15.61266 0.38715,16 0.875,16 l 7.65625,0 0,-6.1875 -2.0625,0 0,-2.4375 2.0625,0 0,-1.78125 c 0,-2.06656 1.2814395,-3.1875 3.125,-3.1875 0.88307,0 1.62261,0.06435 1.84375,0.09375 l 0,2.15625 -1.25,0.03125 c -1.00252,0 -1.21875,0.45713 -1.21875,1.15625 l 0,1.53125 2.40625,0 -0.3125,2.4375 -2.09375,0 0,6.1875 4.09375,0 C 15.612599,16 16,15.61272 16,15.125 L 16,0.875 C 16,0.38721 15.61266,0 15.125,0 L 0.875,0 z"/>
|
||||||
|
<path class="foreground" fill="white" d="m 11.03968,16.000001 v -6.19608 h 2.07973 l 0.31141,-2.41472 h -2.39114 v -1.54165 c 0,-0.69912 0.19414,-1.17555 1.19666,-1.17555 l 1.27866,-5.6e-4 v -2.15974 c -0.22114,-0.0294 -0.98017,-0.0952 -1.86324,-0.0952 -1.8435605,0 -3.1057105,1.12532 -3.1057105,3.19188 v 1.7808 h -2.08506 v 2.41472 h 2.08506 v 6.19608 H 11.03968 z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<a href="https://github.com/{{ include.username }}"><span class="icon icon--github">{% include icon-github.svg %}</span><span class="username">{{ include.username }}</span></a>
|
|
@ -0,0 +1 @@
|
||||||
|
<svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
|
After Width: | Height: | Size: 926 B |
|
@ -0,0 +1 @@
|
||||||
|
<a href="https://twitter.com/{{ include.username }}"><span class="icon icon--twitter">{% include icon-twitter.svg %}</span><span class="username">{{ include.username }}</span></a>
|
|
@ -0,0 +1 @@
|
||||||
|
<svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
|
After Width: | Height: | Size: 787 B |
|
@ -0,0 +1 @@
|
||||||
|
<img data-original="{{ site.baseurl }}{{ include.image.url }}" alt="{{ include.image.alt }}" title="{{ include.image.title }}" style=" min-height: 6em;">
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
|
||||||
|
{% if post %}
|
||||||
|
{% assign tags = post.tags %}
|
||||||
|
{% else %}
|
||||||
|
{% assign tags = page.tags %}
|
||||||
|
{% endif %}
|
||||||
|
{% for tag in tags %}
|
||||||
|
<a id="route" href="/tags/#{{tag|slugize}}"> {{tag}}</a>{% unless forloop.last %} {% endunless %}
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,37 @@
|
||||||
|
<div class="large-4 columns">
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Search</h1>
|
||||||
|
<div class="badanwidget" style="width:0">
|
||||||
|
<input type="text" placeholder="Type here to search..." id="countries"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Tags</h1>
|
||||||
|
|
||||||
|
<div class="badanwidget">
|
||||||
|
<ul class="tags" style="padding-bottom: 20px;">
|
||||||
|
{% for tag in site.tags %}
|
||||||
|
|
||||||
|
<li style="font-size: {{ tag | last | size | times: 100 | divided_by: site.tags.size | plus: 70 }}%">
|
||||||
|
<a id="route" href="/tags/#{{ tag | first | slugize }}">
|
||||||
|
{{ tag | first }}
|
||||||
|
<span>{{ tag | last | size }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Blogroll</h1>
|
||||||
|
<div class="badanwidget">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
{% include head.html %}
|
||||||
|
|
||||||
|
<Body>
|
||||||
|
|
||||||
|
{% include header.html %}
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="wrapper">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
|
|
||||||
|
</Body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
<article class="post">
|
||||||
|
|
||||||
|
<header class="post-header">
|
||||||
|
<h1 class="post-title">{{ page.title }}</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="post-content">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
|
@ -0,0 +1,116 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
<div style="margin: 4.5rem auto;">
|
||||||
|
|
||||||
|
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
|
||||||
|
|
||||||
|
<header class="inpost-header">
|
||||||
|
<h1 class="inpost-title" itemprop="name headline">{{ page.title }}</h1>
|
||||||
|
<h1 style="float:right">
|
||||||
|
<i class="typico typcn typcn-messages" style=" position: relative;
|
||||||
|
top: 0px;
|
||||||
|
font-size: 25px;"></i> <a class="disqus-comment-count" href="#disqus_thread" style="color:#fff"> 0</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="post-content" itemprop="articleBody">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="arrowNav">
|
||||||
|
|
||||||
|
{% if page.next.url %}
|
||||||
|
<div class="arrowLeft">
|
||||||
|
<a id="route" class="tooltip-right" href="{{page.next.url}}" title="
|
||||||
|
<p class=hoveratas>{{page.next.title}}</p> <p class=hoverbawah>{{ page.next.content | strip_html | truncatewords:10}}</p>
|
||||||
|
"><i class="typcn typcn-chevron-left" style=" font-size: 30px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
"></i></a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.previous.url %}
|
||||||
|
<div class="arrowRight" style="float:right">
|
||||||
|
<a id="route" class="tooltip-left" href="{{page.previous.url}}" title="
|
||||||
|
<p class=hoveratas>{{page.previous.title}}</p> <p class=hoverbawah>{{ page.previous.content | strip_html | truncatewords:10}}</p>
|
||||||
|
"><i class="typcn typcn-chevron-right" style=" font-size: 30px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
"></i></a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<p class="post-meta" style=" background: #00bc8c;
|
||||||
|
padding: 15px 0px 15px 20px;"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished"><i class="typcn typcn-calendar-outline"></i> {{ page.date | date: "%b %-d, %Y" }}</time>{% if page.author %} • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>{% endif %}
|
||||||
|
|{% if post %}
|
||||||
|
{% assign tags = post.tags %}
|
||||||
|
{% else %}
|
||||||
|
{% assign tags = page.tags %}
|
||||||
|
{% endif %}
|
||||||
|
{% for tag in tags %}
|
||||||
|
<a href="/tags/#{{tag|slugize}}" style="color: #fff;"><i class="typcn typcn-tags"></i> {{tag}}</a>{% unless forloop.last %} {% endunless %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#disqus_thread {
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
margin-bottom: -54px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
var disqus_config = function () {
|
||||||
|
this.page.url = spaghetti.ga; // Replace PAGE_URL with your page's canonical URL variable
|
||||||
|
this.page.identifier = {{page.id}}; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
|
||||||
|
};
|
||||||
|
|
||||||
|
(function() { // DON'T EDIT BELOW THIS LINE
|
||||||
|
var d = document, s = d.createElement('script');
|
||||||
|
|
||||||
|
s.src = '//spaghettisan.disqus.com/embed.js';
|
||||||
|
|
||||||
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Welcome to Jekyll!"
|
||||||
|
date: 2013-11-25 16:58:04
|
||||||
|
categories: jekyll update
|
||||||
|
tags:
|
||||||
|
- nothello
|
||||||
|
---
|
||||||
|
|
||||||
|
#Say hello to Jekyll and OpenShift :)
|
||||||
|
|
||||||
|
You'll find this post in your `_posts` directory - edit this post and re-build (or run with the `-w` switch) to see your changes!
|
||||||
|
To add new posts, simply add a file in the `_posts` directory that follows the convention: YYYY-MM-DD-name-of-post.ext.
|
||||||
|
|
||||||
|
Jekyll also offers powerful support for code snippets:
|
||||||
|
|
||||||
|
{% highlight ruby %}
|
||||||
|
def print_hi(name)
|
||||||
|
puts "Hi, #{name}"
|
||||||
|
end
|
||||||
|
print_hi('Tom')
|
||||||
|
#=> prints 'Hi, Tom' to STDOUT.
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
Check out the [Jekyll docs][jekyll] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll's GitHub repo][jekyll-gh].
|
||||||
|
|
||||||
|
[jekyll-gh]: https://github.com/mojombo/jekyll
|
||||||
|
[jekyll]: http://jekyllrb.com
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "My First Post!"
|
||||||
|
date: 2015-12-19 00:00:00 +0700
|
||||||
|
categories: uncategorized
|
||||||
|
tags:
|
||||||
|
- hello
|
||||||
|
- writeup
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Hello, this is my first post.
|
|
@ -0,0 +1,429 @@
|
||||||
|
/**
|
||||||
|
* Reset some basic elements
|
||||||
|
*/
|
||||||
|
body, h1, h2, h3, h4, h5, h6,
|
||||||
|
p, blockquote, pre, hr,
|
||||||
|
dl, dd, ol, ul, figure {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic styling
|
||||||
|
*/
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: gidole;
|
||||||
|
src: url(/assets/font/gidole.otf);
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font: $base-font-weight #{$base-font-size}/#{$base-line-height} gidole;
|
||||||
|
color: $text-color;
|
||||||
|
background-color: $background-color;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-webkit-font-feature-settings: "kern" 1;
|
||||||
|
-moz-font-feature-settings: "kern" 1;
|
||||||
|
-o-font-feature-settings: "kern" 1;
|
||||||
|
font-feature-settings: "kern" 1;
|
||||||
|
font-kerning: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set `margin-bottom` to maintain vertical rhythm
|
||||||
|
*/
|
||||||
|
h1, h2, h3, h4, h5, h6,
|
||||||
|
p, blockquote, pre,
|
||||||
|
ul, ol, dl, figure,
|
||||||
|
%vertical-rhythm {
|
||||||
|
margin-bottom: $spacing-unit / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Images
|
||||||
|
*/
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Figures
|
||||||
|
*/
|
||||||
|
figure > img {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
font-size: $small-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists
|
||||||
|
*/
|
||||||
|
ul, ol {
|
||||||
|
margin-left: $spacing-unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
> ul,
|
||||||
|
> ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Headings
|
||||||
|
*/
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-weight: $base-font-weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Links
|
||||||
|
*/
|
||||||
|
a {
|
||||||
|
color: $brand-color;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:visited {
|
||||||
|
color: darken($brand-color, 15%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blockquotes
|
||||||
|
*/
|
||||||
|
blockquote {
|
||||||
|
color: $grey-color;
|
||||||
|
border-left: 4px solid $grey-color-light;
|
||||||
|
padding-left: $spacing-unit / 2;
|
||||||
|
font-size: 18px;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
font-style: italic;
|
||||||
|
|
||||||
|
> :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code formatting
|
||||||
|
*/
|
||||||
|
pre,
|
||||||
|
code {
|
||||||
|
font-size: 15px;
|
||||||
|
border: 1px solid $grey-color-light;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: #eef;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 8px 12px;
|
||||||
|
overflow-x: auto;
|
||||||
|
|
||||||
|
> code {
|
||||||
|
border: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper
|
||||||
|
*/
|
||||||
|
.wrapper {
|
||||||
|
max-width: -webkit-calc(800px - (30px * 2));
|
||||||
|
max-width: calc(1020px - (30px * 2));
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
padding-right: 30px;
|
||||||
|
padding-left: 30px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.wrapper {
|
||||||
|
max-width: -webkit-calc(800px - (30px));
|
||||||
|
max-width: calc(800px - (30px));
|
||||||
|
padding-right: 15px;
|
||||||
|
padding-left: 15px; } }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clearfix
|
||||||
|
*/
|
||||||
|
%clearfix {
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: "";
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icons
|
||||||
|
*/
|
||||||
|
.icon {
|
||||||
|
|
||||||
|
> svg {
|
||||||
|
display: inline-block;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
vertical-align: middle;
|
||||||
|
|
||||||
|
path {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Column Home
|
||||||
|
*/
|
||||||
|
|
||||||
|
.post-header .post-title a {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
.post-excerpt p {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.post-meta {
|
||||||
|
font-size: 10px;
|
||||||
|
color: $grey-color;
|
||||||
|
}
|
||||||
|
.post {
|
||||||
|
position: relative;
|
||||||
|
margin: 1rem auto;
|
||||||
|
padding-bottom: 0.5em;
|
||||||
|
border-bottom: #E8E8E8 1px solid;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
.pagination {
|
||||||
|
margin-top:20px;
|
||||||
|
padding-bottom:40px;
|
||||||
|
}
|
||||||
|
.tags-date {
|
||||||
|
float: right;
|
||||||
|
margin-top: -35px; font-size: 12px;
|
||||||
|
color: #828282;
|
||||||
|
}
|
||||||
|
.tags-pagee {
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
height: auto;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
@media screen and (min-width: 47.5em) {
|
||||||
|
.tags-pagee {
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
padding: 0 0 15px;
|
||||||
|
}
|
||||||
|
.tags-date {
|
||||||
|
float: right;
|
||||||
|
margin-top: -40px; font-size: 12px;
|
||||||
|
color: #828282;
|
||||||
|
}
|
||||||
|
.post {
|
||||||
|
position: relative;
|
||||||
|
margin: 2rem auto;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
border-bottom: #E8E8E8 1px solid;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
.home {
|
||||||
|
margin-right: 18.5em;
|
||||||
|
border-right: 1px solid #e8e8e8;
|
||||||
|
padding-right: 30px;
|
||||||
|
}
|
||||||
|
.widgets {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 18.75em;
|
||||||
|
padding-botom: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
.post-header .post-title a {
|
||||||
|
font-size:1em;
|
||||||
|
}
|
||||||
|
.post-excerpt p {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.post-meta {
|
||||||
|
font-size: 12px;
|
||||||
|
color: $grey-color;
|
||||||
|
}
|
||||||
|
.pagination {
|
||||||
|
padding-bottom:40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.home {
|
||||||
|
margin-bottom: .5em;
|
||||||
|
}
|
||||||
|
.widgets {
|
||||||
|
padding-bottom: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tambahan
|
||||||
|
*/
|
||||||
|
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
.post:after {
|
||||||
|
display: block;
|
||||||
|
content: "";
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
border: #E8E8E8 1px solid;
|
||||||
|
position: absolute;
|
||||||
|
bottom: -5px;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -5px;
|
||||||
|
background: #fdfdfd;
|
||||||
|
border-radius: 100%;
|
||||||
|
box-shadow: #fdfdfd 0 0 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.tags li {
|
||||||
|
position: relative;
|
||||||
|
float: left;
|
||||||
|
margin: 0 35px 9px 0px;
|
||||||
|
}
|
||||||
|
.tags a {
|
||||||
|
height: 26px;
|
||||||
|
line-height: 23px;
|
||||||
|
padding: 0 9px 0 8px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #555;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: 0 1px white;
|
||||||
|
border-width: 1px 0 1px 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #dadada #d2d2d2 #c5c5c5;
|
||||||
|
border-radius: 3px 0 0 3px;
|
||||||
|
}
|
||||||
|
.tags span {
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
left: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
max-width: 0;
|
||||||
|
height: 24px;
|
||||||
|
line-height: 21px;
|
||||||
|
padding: 0 0 0 2px;
|
||||||
|
color: white;
|
||||||
|
text-shadow: 0 -1px rgba(0, 0, 0, 0.3);
|
||||||
|
background: #000;
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: #000;
|
||||||
|
border-radius: 0 2px 2px 0;
|
||||||
|
opacity: .95;
|
||||||
|
padding: 0 7px 0 6px;
|
||||||
|
max-width: 40px;
|
||||||
|
}
|
||||||
|
.tags a, .tags span {
|
||||||
|
display: block;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.tags li:after {
|
||||||
|
content: '';
|
||||||
|
z-index: 2;
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
right: -2px;
|
||||||
|
width: 5px;
|
||||||
|
height: 6px;
|
||||||
|
opacity: .95;
|
||||||
|
background: #000;
|
||||||
|
border-radius: 3px 0 0 3px;
|
||||||
|
-webkit-box-shadow: inset 1px 0 #000;
|
||||||
|
box-shadow: inset 1px 0 #000;
|
||||||
|
}
|
||||||
|
.tags:before, .tags:after {
|
||||||
|
content: '';
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
.post-tags{
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
text-transform: uppercase;
|
||||||
|
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.post-tags a {
|
||||||
|
|
||||||
|
color:#828282;
|
||||||
|
}
|
||||||
|
.post-date {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 8px;
|
||||||
|
padding-left: 12px;
|
||||||
|
border-left: #d5dbde 1px solid;
|
||||||
|
text-transform: uppercase;
|
||||||
|
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination span, .pagination a {
|
||||||
|
font-size: 16px;
|
||||||
|
background: #e8e8e8;
|
||||||
|
padding: 5px 15px;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: #969696;
|
||||||
|
}
|
||||||
|
.pagination span.previous, .pagination a.previous {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.pagination span.next, .pagination a.next {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.pagination a {
|
||||||
|
color:#2F2F2F;
|
||||||
|
border-color:#2F2F2F;
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
/**
|
||||||
|
* Syntax highlighting styles
|
||||||
|
*/
|
||||||
|
.highlight {
|
||||||
|
background: #fff;
|
||||||
|
@extend %vertical-rhythm;
|
||||||
|
|
||||||
|
.highlighter-rouge & {
|
||||||
|
background: #eef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c { color: #998; font-style: italic } // Comment
|
||||||
|
.err { color: #a61717; background-color: #e3d2d2 } // Error
|
||||||
|
.k { font-weight: bold } // Keyword
|
||||||
|
.o { font-weight: bold } // Operator
|
||||||
|
.cm { color: #998; font-style: italic } // Comment.Multiline
|
||||||
|
.cp { color: #999; font-weight: bold } // Comment.Preproc
|
||||||
|
.c1 { color: #998; font-style: italic } // Comment.Single
|
||||||
|
.cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
|
||||||
|
.gd { color: #000; background-color: #fdd } // Generic.Deleted
|
||||||
|
.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
|
||||||
|
.ge { font-style: italic } // Generic.Emph
|
||||||
|
.gr { color: #a00 } // Generic.Error
|
||||||
|
.gh { color: #999 } // Generic.Heading
|
||||||
|
.gi { color: #000; background-color: #dfd } // Generic.Inserted
|
||||||
|
.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
|
||||||
|
.go { color: #888 } // Generic.Output
|
||||||
|
.gp { color: #555 } // Generic.Prompt
|
||||||
|
.gs { font-weight: bold } // Generic.Strong
|
||||||
|
.gu { color: #aaa } // Generic.Subheading
|
||||||
|
.gt { color: #a00 } // Generic.Traceback
|
||||||
|
.kc { font-weight: bold } // Keyword.Constant
|
||||||
|
.kd { font-weight: bold } // Keyword.Declaration
|
||||||
|
.kp { font-weight: bold } // Keyword.Pseudo
|
||||||
|
.kr { font-weight: bold } // Keyword.Reserved
|
||||||
|
.kt { color: #458; font-weight: bold } // Keyword.Type
|
||||||
|
.m { color: #099 } // Literal.Number
|
||||||
|
.s { color: #d14 } // Literal.String
|
||||||
|
.na { color: #008080 } // Name.Attribute
|
||||||
|
.nb { color: #0086B3 } // Name.Builtin
|
||||||
|
.nc { color: #458; font-weight: bold } // Name.Class
|
||||||
|
.no { color: #008080 } // Name.Constant
|
||||||
|
.ni { color: #800080 } // Name.Entity
|
||||||
|
.ne { color: #900; font-weight: bold } // Name.Exception
|
||||||
|
.nf { color: #900; font-weight: bold } // Name.Function
|
||||||
|
.nn { color: #555 } // Name.Namespace
|
||||||
|
.nt { color: #000080 } // Name.Tag
|
||||||
|
.nv { color: #008080 } // Name.Variable
|
||||||
|
.ow { font-weight: bold } // Operator.Word
|
||||||
|
.w { color: #bbb } // Text.Whitespace
|
||||||
|
.mf { color: #099 } // Literal.Number.Float
|
||||||
|
.mh { color: #099 } // Literal.Number.Hex
|
||||||
|
.mi { color: #099 } // Literal.Number.Integer
|
||||||
|
.mo { color: #099 } // Literal.Number.Oct
|
||||||
|
.sb { color: #d14 } // Literal.String.Backtick
|
||||||
|
.sc { color: #d14 } // Literal.String.Char
|
||||||
|
.sd { color: #d14 } // Literal.String.Doc
|
||||||
|
.s2 { color: #d14 } // Literal.String.Double
|
||||||
|
.se { color: #d14 } // Literal.String.Escape
|
||||||
|
.sh { color: #d14 } // Literal.String.Heredoc
|
||||||
|
.si { color: #d14 } // Literal.String.Interpol
|
||||||
|
.sx { color: #d14 } // Literal.String.Other
|
||||||
|
.sr { color: #009926 } // Literal.String.Regex
|
||||||
|
.s1 { color: #d14 } // Literal.String.Single
|
||||||
|
.ss { color: #990073 } // Literal.String.Symbol
|
||||||
|
.bp { color: #999 } // Name.Builtin.Pseudo
|
||||||
|
.vc { color: #008080 } // Name.Variable.Class
|
||||||
|
.vg { color: #008080 } // Name.Variable.Global
|
||||||
|
.vi { color: #008080 } // Name.Variable.Instance
|
||||||
|
.il { color: #099 } // Literal.Number.Integer.Long
|
||||||
|
}
|
|
@ -0,0 +1,105 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Error!</title>
|
||||||
|
<style>
|
||||||
|
html {
|
||||||
|
font-size: 62.5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
padding: 60px;
|
||||||
|
background: #fafafa;
|
||||||
|
font-size: 150%;
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrap {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 700px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 30px;
|
||||||
|
background: #fff;
|
||||||
|
box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
border-top: 3px solid #b00f08;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #731217;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #b00f08;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0 0 15px;
|
||||||
|
font-size: 240%;
|
||||||
|
font-weight: 300;
|
||||||
|
color: #731217;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding: 15px;
|
||||||
|
margin: 15px 0;
|
||||||
|
background: #eee;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
padding: 15px;
|
||||||
|
background: #fafafa;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
line-height: 1.8;
|
||||||
|
color: rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.exception {
|
||||||
|
background-color: #ffeded;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre em {
|
||||||
|
font-style: normal;
|
||||||
|
color: rgba(0, 0, 0, 0.5);
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrap">
|
||||||
|
<h1>Error!</h1>
|
||||||
|
<p>The requested url <script>
|
||||||
|
document.write(window.location.pathname);
|
||||||
|
</script> was not found.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
spaghetti.ga
|
|
@ -0,0 +1,9 @@
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
gem 'thor'
|
||||||
|
gem 'stringex'
|
||||||
|
gem 'jekyll-paginate'
|
||||||
|
gem 'kramdown'
|
||||||
|
gem 'jekyll-watch'
|
||||||
|
gem 'jekyll-archives'
|
||||||
|
gem 'jekyll'
|
||||||
|
gem 'json'
|
|
@ -0,0 +1,52 @@
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
colorator (0.1)
|
||||||
|
ffi (1.9.10)
|
||||||
|
jekyll (3.0.2)
|
||||||
|
colorator (~> 0.1)
|
||||||
|
jekyll-sass-converter (~> 1.0)
|
||||||
|
jekyll-watch (~> 1.1)
|
||||||
|
kramdown (~> 1.3)
|
||||||
|
liquid (~> 3.0)
|
||||||
|
mercenary (~> 0.3.3)
|
||||||
|
rouge (~> 1.7)
|
||||||
|
safe_yaml (~> 1.0)
|
||||||
|
jekyll-archives (2.1.0)
|
||||||
|
jekyll (>= 2.4)
|
||||||
|
jekyll-paginate (1.1.0)
|
||||||
|
jekyll-sass-converter (1.4.0)
|
||||||
|
sass (~> 3.4)
|
||||||
|
jekyll-watch (1.3.1)
|
||||||
|
listen (~> 3.0)
|
||||||
|
json (1.8.3)
|
||||||
|
kramdown (1.9.0)
|
||||||
|
liquid (3.0.6)
|
||||||
|
listen (3.0.5)
|
||||||
|
rb-fsevent (>= 0.9.3)
|
||||||
|
rb-inotify (>= 0.9)
|
||||||
|
mercenary (0.3.5)
|
||||||
|
rb-fsevent (0.9.7)
|
||||||
|
rb-inotify (0.9.5)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
rouge (1.10.1)
|
||||||
|
safe_yaml (1.0.4)
|
||||||
|
sass (3.4.21)
|
||||||
|
stringex (2.5.2)
|
||||||
|
thor (0.19.1)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
jekyll
|
||||||
|
jekyll-archives
|
||||||
|
jekyll-paginate
|
||||||
|
jekyll-watch
|
||||||
|
json
|
||||||
|
kramdown
|
||||||
|
stringex
|
||||||
|
thor
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.11.2
|
|
@ -0,0 +1,9 @@
|
||||||
|
# spaghetti.ga
|
||||||
|
Based of Jekyll default theme and redesign again by me.<br>
|
||||||
|
Feel free to use this theme :^)
|
||||||
|
<br><br>
|
||||||
|
But please don't try to copy anything from my article :p
|
||||||
|
|
||||||
|
|
||||||
|
# License
|
||||||
|
MIT
|
|
@ -0,0 +1,289 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!---
|
||||||
|
Spaghetti Base Redesign
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>About</title>
|
||||||
|
<meta name="description" content="All about Spaghetti-san Project
|
||||||
|
">
|
||||||
|
<meta name="google-site-verification" content="WWP0tS0N_Dm8-FTd9oqyZta0oRCDYUFy24R7zSm06Vs" />
|
||||||
|
<meta name="msvalidate.01" content="779064655F047D704FFFD2122C3591F3" />
|
||||||
|
<link rel="stylesheet" href="/assets/css/alternative.css">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/typicons/2.0.7/typicons.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.4.1/octicons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://spaghetti.ga/about.html">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Spaghetti-san Blog" href="http://spaghetti.ga/feed.xml">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<Body>
|
||||||
|
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="pacel "><div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
|
||||||
|
<div class="pace-progress-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pace-activity"></div></div>
|
||||||
|
<a id="route" class="site-title" href="/">Paul Walko</a>
|
||||||
|
|
||||||
|
<nav class="site-nav">
|
||||||
|
<a href="#" class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15">
|
||||||
|
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||||||
|
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||||||
|
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/about.html">About</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/archive.html">Archive</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/project.html">Projects</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="page-link" href="/tags/#writeup">Writeups</a>
|
||||||
|
<a class="page-link" href="http://spaghetti.ga/feed.xml"> Feeds</a>
|
||||||
|
<a class="page-link" href="http://github.com/paulwalko?tab=repositories"><i class="octicon octicon-mark-github" style="font-size:"></i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-7 columns samping">
|
||||||
|
<div style="margin-top: 0;
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
/* border-bottom: #636363 1px solid; */
|
||||||
|
word-wrap: break-word;
|
||||||
|
background: #3E3E3E;
|
||||||
|
padding: 32px 20px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
border-bottom-right-radius: 5px;">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/8794792?v=3&s=180" style="border-radius:10px">
|
||||||
|
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
I am Axl, an UI Designer, Front End Developer, Illustrator, and of course Anime and Visual Novel lovers from Indonesia.
|
||||||
|
Living in Jakarta, and studied at Bina Sarana Informatika.
|
||||||
|
I love my work and enjoy each new project as I get it.
|
||||||
|
By the way i'm just a freelance and work a project at home with only laptop and figurine beside my laptop.
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Feel free to contact me on <a href="https://www.facebook.com/profile.php?id=100007594726461">Facebook</a>, don't be hesitate to ask, also you can add me :))
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
To be honest, my english are really bad, so I'll ready to start learning english by writing an article in English also :)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="large-4 columns">
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Search</h1>
|
||||||
|
<div class="badanwidget" style="width:0">
|
||||||
|
<input type="text" placeholder="Type here to search..." id="countries"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Tags</h1>
|
||||||
|
|
||||||
|
<div class="badanwidget">
|
||||||
|
<ul class="tags" style="padding-bottom: 20px;">
|
||||||
|
|
||||||
|
|
||||||
|
<li style="font-size: 103%">
|
||||||
|
<a id="route" href="/tags/#nothello">
|
||||||
|
nothello
|
||||||
|
<span>1</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li style="font-size: 103%">
|
||||||
|
<a id="route" href="/tags/#hello">
|
||||||
|
hello
|
||||||
|
<span>1</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li style="font-size: 103%">
|
||||||
|
<a id="route" href="/tags/#writeup">
|
||||||
|
writeup
|
||||||
|
<span>1</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Blogroll</h1>
|
||||||
|
<div class="badanwidget">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h2 class="footer-heading">Spaghetti-san Blog</h2>
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col footer-col-1">
|
||||||
|
<ul class="contact-list">
|
||||||
|
<li>Spaghetti-san Personal Blog</li>
|
||||||
|
<li><a href="mailto:spaghettisan@yahoo.com">spaghettisan@yahoo.com</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-2">
|
||||||
|
<ul class="social-media-list">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://github.com/spaghetti-san"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
|
||||||
|
</span><span class="username">spaghetti-san</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://facebook.com/axlyody"><span class="icon icon--facebook"><?xml version="1.0"?>
|
||||||
|
<svg class="icon icon-facebook" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<path class="background" fill="#828282" d="M 0.875,0 C 0.38722,0 0,0.38721 0,0.875 l 0,14.25 C 0,15.61266 0.38715,16 0.875,16 l 7.65625,0 0,-6.1875 -2.0625,0 0,-2.4375 2.0625,0 0,-1.78125 c 0,-2.06656 1.2814395,-3.1875 3.125,-3.1875 0.88307,0 1.62261,0.06435 1.84375,0.09375 l 0,2.15625 -1.25,0.03125 c -1.00252,0 -1.21875,0.45713 -1.21875,1.15625 l 0,1.53125 2.40625,0 -0.3125,2.4375 -2.09375,0 0,6.1875 4.09375,0 C 15.612599,16 16,15.61272 16,15.125 L 16,0.875 C 16,0.38721 15.61266,0 15.125,0 L 0.875,0 z"/>
|
||||||
|
<path class="foreground" fill="white" d="m 11.03968,16.000001 v -6.19608 h 2.07973 l 0.31141,-2.41472 h -2.39114 v -1.54165 c 0,-0.69912 0.19414,-1.17555 1.19666,-1.17555 l 1.27866,-5.6e-4 v -2.15974 c -0.22114,-0.0294 -0.98017,-0.0952 -1.86324,-0.0952 -1.8435605,0 -3.1057105,1.12532 -3.1057105,3.19188 v 1.7808 h -2.08506 v 2.41472 h 2.08506 v 6.19608 H 11.03968 z"/>
|
||||||
|
</svg>
|
||||||
|
</span><span class="username">Axl Yody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://twitter.com/axlyody"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
|
||||||
|
</span><span class="username">axlyody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-3">
|
||||||
|
<p>Designed by Spaghetti</p>
|
||||||
|
<p>Proudly hosted by <a href="https://pages.github.com/" target="_blank"><span class="octicon octicon-logo-github" style="color: #828282;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: 3px;
|
||||||
|
font-size: 20px;"></span></a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--- Where Javascript Loaded --->
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="http://iamceege.github.io/tooltipster/js/jquery.tooltipster.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
if(location.pathname != "/") {
|
||||||
|
$('.trigger a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
|
||||||
|
} else $('.none a:eq(0)').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-right').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-left').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'left',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/js/jquery-autocomplete.js"></script>
|
||||||
|
<script src="/assets/js/responsive_waterfall.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})}),$(function(){$(document).pjax("#route","body",{fragment:"body",timeout:1e5,scrollTo:0,push:!0,maxCacheLength:20,replace:!1})}),$(document).on("pjax:error",function(e,n,t,o,c){return c.success(n.responseText,t,n),!1});var options={url:"/gblk.json",getValue:"title",list:{match:{enabled:!0,maxNumberOfElements:5}},template:{type:"links",fields:{link:"url"}},theme:"square"};$("#countries").easyAutocomplete(options),Pace.on("start",function(){$(".pacel").show()}),Pace.on("done",function(){$(".pacel").hide()}),$(function(){$("img").lazyload({})});var waterfall=new Waterfall({containerSelector:".wf-container",boxSelector:".wf-box",minBoxWidth:180});$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})});
|
||||||
|
</script>
|
||||||
|
<script id="dsq-count-scr" src="//spaghettisan.disqus.com/count.js" async></script>
|
||||||
|
|
||||||
|
</Body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,299 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!---
|
||||||
|
Spaghetti Base Redesign
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>Archive</title>
|
||||||
|
<meta name="description" content="All about Spaghetti-san Project
|
||||||
|
">
|
||||||
|
<meta name="google-site-verification" content="WWP0tS0N_Dm8-FTd9oqyZta0oRCDYUFy24R7zSm06Vs" />
|
||||||
|
<meta name="msvalidate.01" content="779064655F047D704FFFD2122C3591F3" />
|
||||||
|
<link rel="stylesheet" href="/assets/css/alternative.css">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/typicons/2.0.7/typicons.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.4.1/octicons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://spaghetti.ga/archive.html">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Spaghetti-san Blog" href="http://spaghetti.ga/feed.xml">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<Body>
|
||||||
|
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="pacel "><div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
|
||||||
|
<div class="pace-progress-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pace-activity"></div></div>
|
||||||
|
<a id="route" class="site-title" href="/">Paul Walko</a>
|
||||||
|
|
||||||
|
<nav class="site-nav">
|
||||||
|
<a href="#" class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15">
|
||||||
|
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||||||
|
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||||||
|
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/about.html">About</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/archive.html">Archive</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/project.html">Projects</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="page-link" href="/tags/#writeup">Writeups</a>
|
||||||
|
<a class="page-link" href="http://spaghetti.ga/feed.xml"> Feeds</a>
|
||||||
|
<a class="page-link" href="http://github.com/paulwalko?tab=repositories"><i class="octicon octicon-mark-github" style="font-size:"></i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div style="margin: 1rem auto;">
|
||||||
|
|
||||||
|
<h1 class="archive-header"></h1>
|
||||||
|
<div class="wf-container" style="margin-top: 80px;">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wf-box">
|
||||||
|
<a id="route" href="/uncategorized/2015/12/18/my-first-post.html">
|
||||||
|
|
||||||
|
<div class="tglgede" style="
|
||||||
|
background-color: rgba(105, 105, 105, 0.44);
|
||||||
|
background-image: url(http://marolafashionable.com/catalog/view/theme/agnes/image/layout/shadows/blur_black.png), url();
|
||||||
|
background-position: center bottom, left top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
">
|
||||||
|
<p style="
|
||||||
|
background-color: rgba(0, 0, 0, 0.57);
|
||||||
|
padding: 30%;
|
||||||
|
color: #DADADA;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 0;
|
||||||
|
">
|
||||||
|
December 2015
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<div class="content">
|
||||||
|
<a id="route" href="/uncategorized/2015/12/18/my-first-post.html">
|
||||||
|
<h3 style="padding: 5px 8px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: #00bc8c;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 15px;">My First Post!</h3>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wf-box">
|
||||||
|
<a id="route" href="/jekyll/update/2013/11/25/welcome-to-jekyll.html">
|
||||||
|
|
||||||
|
<div class="tglgede" style="
|
||||||
|
background-color: rgba(105, 105, 105, 0.44);
|
||||||
|
background-image: url(http://marolafashionable.com/catalog/view/theme/agnes/image/layout/shadows/blur_black.png), url();
|
||||||
|
background-position: center bottom, left top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
">
|
||||||
|
<p style="
|
||||||
|
background-color: rgba(0, 0, 0, 0.57);
|
||||||
|
padding: 30%;
|
||||||
|
color: #DADADA;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 0;
|
||||||
|
">
|
||||||
|
November 2013
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<div class="content">
|
||||||
|
<a id="route" href="/jekyll/update/2013/11/25/welcome-to-jekyll.html">
|
||||||
|
<h3 style="padding: 5px 8px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
background-color: #00bc8c;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 15px;">Welcome to Jekyll!</h3>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h2 class="footer-heading">Spaghetti-san Blog</h2>
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col footer-col-1">
|
||||||
|
<ul class="contact-list">
|
||||||
|
<li>Spaghetti-san Personal Blog</li>
|
||||||
|
<li><a href="mailto:spaghettisan@yahoo.com">spaghettisan@yahoo.com</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-2">
|
||||||
|
<ul class="social-media-list">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://github.com/spaghetti-san"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
|
||||||
|
</span><span class="username">spaghetti-san</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://facebook.com/axlyody"><span class="icon icon--facebook"><?xml version="1.0"?>
|
||||||
|
<svg class="icon icon-facebook" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<path class="background" fill="#828282" d="M 0.875,0 C 0.38722,0 0,0.38721 0,0.875 l 0,14.25 C 0,15.61266 0.38715,16 0.875,16 l 7.65625,0 0,-6.1875 -2.0625,0 0,-2.4375 2.0625,0 0,-1.78125 c 0,-2.06656 1.2814395,-3.1875 3.125,-3.1875 0.88307,0 1.62261,0.06435 1.84375,0.09375 l 0,2.15625 -1.25,0.03125 c -1.00252,0 -1.21875,0.45713 -1.21875,1.15625 l 0,1.53125 2.40625,0 -0.3125,2.4375 -2.09375,0 0,6.1875 4.09375,0 C 15.612599,16 16,15.61272 16,15.125 L 16,0.875 C 16,0.38721 15.61266,0 15.125,0 L 0.875,0 z"/>
|
||||||
|
<path class="foreground" fill="white" d="m 11.03968,16.000001 v -6.19608 h 2.07973 l 0.31141,-2.41472 h -2.39114 v -1.54165 c 0,-0.69912 0.19414,-1.17555 1.19666,-1.17555 l 1.27866,-5.6e-4 v -2.15974 c -0.22114,-0.0294 -0.98017,-0.0952 -1.86324,-0.0952 -1.8435605,0 -3.1057105,1.12532 -3.1057105,3.19188 v 1.7808 h -2.08506 v 2.41472 h 2.08506 v 6.19608 H 11.03968 z"/>
|
||||||
|
</svg>
|
||||||
|
</span><span class="username">Axl Yody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://twitter.com/axlyody"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
|
||||||
|
</span><span class="username">axlyody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-3">
|
||||||
|
<p>Designed by Spaghetti</p>
|
||||||
|
<p>Proudly hosted by <a href="https://pages.github.com/" target="_blank"><span class="octicon octicon-logo-github" style="color: #828282;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: 3px;
|
||||||
|
font-size: 20px;"></span></a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--- Where Javascript Loaded --->
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="http://iamceege.github.io/tooltipster/js/jquery.tooltipster.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
if(location.pathname != "/") {
|
||||||
|
$('.trigger a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
|
||||||
|
} else $('.none a:eq(0)').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-right').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-left').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'left',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/js/jquery-autocomplete.js"></script>
|
||||||
|
<script src="/assets/js/responsive_waterfall.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})}),$(function(){$(document).pjax("#route","body",{fragment:"body",timeout:1e5,scrollTo:0,push:!0,maxCacheLength:20,replace:!1})}),$(document).on("pjax:error",function(e,n,t,o,c){return c.success(n.responseText,t,n),!1});var options={url:"/gblk.json",getValue:"title",list:{match:{enabled:!0,maxNumberOfElements:5}},template:{type:"links",fields:{link:"url"}},theme:"square"};$("#countries").easyAutocomplete(options),Pace.on("start",function(){$(".pacel").show()}),Pace.on("done",function(){$(".pacel").hide()}),$(function(){$("img").lazyload({})});var waterfall=new Waterfall({containerSelector:".wf-container",boxSelector:".wf-box",minBoxWidth:180});$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})});
|
||||||
|
</script>
|
||||||
|
<script id="dsq-count-scr" src="//spaghettisan.disqus.com/count.js" async></script>
|
||||||
|
|
||||||
|
</Body>
|
||||||
|
|
||||||
|
</html>
|
After Width: | Height: | Size: 258 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 175 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 116 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 30 KiB |
|
@ -0,0 +1 @@
|
||||||
|
!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.Waterfall=e()}(this,function(){"use strict";var t=function(t){var e;Object.defineProperty(this,"minBoxWidth",{get:function(){return e},set:function(t){100>t&&(t=100),t>1e3&&(t=1e3),e=t}}),t=t||{};var n=t.containerSelector||".wf-container",i=t.boxSelector||".wf-box";this.minBoxWidth=t.minBoxWidth||250,this.columns=[],this.container=document.querySelector(n),this.boxes=this.container?Array.prototype.slice.call(this.container.querySelectorAll(i)):[],this.compose();for(var o,s=this.container.querySelectorAll("img"),r=this,c=0;c<s.length;c++){var h=s[c];h.onload=function(){o&&clearTimeout(o),o=setTimeout(function(){r.compose(!0)},500)}}window.addEventListener("resize",function(){r.compose()})};return t.prototype.computeNumberOfColumns=function(){var t=Math.floor(this.container.clientWidth/this.minBoxWidth);return t=t||1},t.prototype.initColumns=function(t){if(t>0){this.columns=[];for(var e=100/t+"%";t--;){var n=document.createElement("div");n.className="wf-column",n.style.width=e,this.columns.push(n),this.container.appendChild(n)}}},t.prototype.getMinHeightIndex=function(){if(this.columns&&this.columns.length>0){for(var t=this.columns[0].clientHeight,e=0,n=1;n<this.columns.length;n++){var i=this.columns[n];i.clientHeight<t&&(t=i.clientHeight,e=n)}return e}return-1},t.prototype.getHighestIndex=function(){if(this.columns&&this.columns.length>0){for(var t=this.columns[0].clientHeight,e=0,n=1;n<this.columns.length;n++){var i=this.columns[n];i.clientHeight>t&&(t=i.clientHeight,e=n)}return e}return-1},t.prototype.compose=function(t){var e=this.computeNumberOfColumns(),n=this.columns.length;if(t||e!=n){for(var i=0;i<this.columns.length;i++){var o=this.columns[i];o.remove()}this.initColumns(e);for(var i=0,s=this.boxes.length;s>i;i++){var r=this.boxes[i];this.addBox(r)}}},t.prototype.addBox=function(t){this.boxes.indexOf(t)<0&&this.boxes.push(t);var e=this.getMinHeightIndex();if(e>-1){var n=this.columns[e];n.appendChild(t)}},t});
|
|
@ -0,0 +1,217 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!---
|
||||||
|
Spaghetti Base Redesign
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>Category</title>
|
||||||
|
<meta name="description" content="All about Spaghetti-san Project
|
||||||
|
">
|
||||||
|
<meta name="google-site-verification" content="WWP0tS0N_Dm8-FTd9oqyZta0oRCDYUFy24R7zSm06Vs" />
|
||||||
|
<meta name="msvalidate.01" content="779064655F047D704FFFD2122C3591F3" />
|
||||||
|
<link rel="stylesheet" href="/assets/css/alternative.css">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/typicons/2.0.7/typicons.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.4.1/octicons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://spaghetti.ga/category/">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Spaghetti-san Blog" href="http://spaghetti.ga/feed.xml">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<Body>
|
||||||
|
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="pacel "><div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
|
||||||
|
<div class="pace-progress-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pace-activity"></div></div>
|
||||||
|
<a id="route" class="site-title" href="/">Paul Walko</a>
|
||||||
|
|
||||||
|
<nav class="site-nav">
|
||||||
|
<a href="#" class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15">
|
||||||
|
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||||||
|
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||||||
|
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/about.html">About</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/archive.html">Archive</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/project.html">Projects</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="page-link" href="/tags/#writeup">Writeups</a>
|
||||||
|
<a class="page-link" href="http://spaghetti.ga/feed.xml"> Feeds</a>
|
||||||
|
<a class="page-link" href="http://github.com/paulwalko?tab=repositories"><i class="octicon octicon-mark-github" style="font-size:"></i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="wrapper">
|
||||||
|
<article class="post">
|
||||||
|
|
||||||
|
<header class="post-header">
|
||||||
|
<h1 class="post-title">Category</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="post-content">
|
||||||
|
<p><img src="https://avatars2.githubusercontent.com/u/8794792?v=3&s=180" /></p>
|
||||||
|
|
||||||
|
<p><br />
|
||||||
|
Spaghetti-san a.k.a. Axl Yody</p>
|
||||||
|
|
||||||
|
<p>I am Axl, a UI Designer, Front End Developer, Illustrator, and of course Anime and Visual Novel lovers from Indonesian.
|
||||||
|
Living in Jakarta, and studied at Bina Sarana Informatika.
|
||||||
|
I love my work and enjoy each new project as I get it.
|
||||||
|
By the way i’m just a freelance and work a project from home with only laptop and figurine beside my laptop.</p>
|
||||||
|
|
||||||
|
<p>Feel free to contact me on <a href="https://www.facebook.com/profile.php?id=100007594726461">Facebook</a>, don’t be hesitate to ask, also you can add me :))</p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h2 class="footer-heading">Spaghetti-san Blog</h2>
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col footer-col-1">
|
||||||
|
<ul class="contact-list">
|
||||||
|
<li>Spaghetti-san Personal Blog</li>
|
||||||
|
<li><a href="mailto:spaghettisan@yahoo.com">spaghettisan@yahoo.com</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-2">
|
||||||
|
<ul class="social-media-list">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://github.com/spaghetti-san"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
|
||||||
|
</span><span class="username">spaghetti-san</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://facebook.com/axlyody"><span class="icon icon--facebook"><?xml version="1.0"?>
|
||||||
|
<svg class="icon icon-facebook" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<path class="background" fill="#828282" d="M 0.875,0 C 0.38722,0 0,0.38721 0,0.875 l 0,14.25 C 0,15.61266 0.38715,16 0.875,16 l 7.65625,0 0,-6.1875 -2.0625,0 0,-2.4375 2.0625,0 0,-1.78125 c 0,-2.06656 1.2814395,-3.1875 3.125,-3.1875 0.88307,0 1.62261,0.06435 1.84375,0.09375 l 0,2.15625 -1.25,0.03125 c -1.00252,0 -1.21875,0.45713 -1.21875,1.15625 l 0,1.53125 2.40625,0 -0.3125,2.4375 -2.09375,0 0,6.1875 4.09375,0 C 15.612599,16 16,15.61272 16,15.125 L 16,0.875 C 16,0.38721 15.61266,0 15.125,0 L 0.875,0 z"/>
|
||||||
|
<path class="foreground" fill="white" d="m 11.03968,16.000001 v -6.19608 h 2.07973 l 0.31141,-2.41472 h -2.39114 v -1.54165 c 0,-0.69912 0.19414,-1.17555 1.19666,-1.17555 l 1.27866,-5.6e-4 v -2.15974 c -0.22114,-0.0294 -0.98017,-0.0952 -1.86324,-0.0952 -1.8435605,0 -3.1057105,1.12532 -3.1057105,3.19188 v 1.7808 h -2.08506 v 2.41472 h 2.08506 v 6.19608 H 11.03968 z"/>
|
||||||
|
</svg>
|
||||||
|
</span><span class="username">Axl Yody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://twitter.com/axlyody"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
|
||||||
|
</span><span class="username">axlyody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-3">
|
||||||
|
<p>Designed by Spaghetti</p>
|
||||||
|
<p>Proudly hosted by <a href="https://pages.github.com/" target="_blank"><span class="octicon octicon-logo-github" style="color: #828282;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: 3px;
|
||||||
|
font-size: 20px;"></span></a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--- Where Javascript Loaded --->
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="http://iamceege.github.io/tooltipster/js/jquery.tooltipster.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
if(location.pathname != "/") {
|
||||||
|
$('.trigger a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
|
||||||
|
} else $('.none a:eq(0)').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-right').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-left').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'left',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/js/jquery-autocomplete.js"></script>
|
||||||
|
<script src="/assets/js/responsive_waterfall.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})}),$(function(){$(document).pjax("#route","body",{fragment:"body",timeout:1e5,scrollTo:0,push:!0,maxCacheLength:20,replace:!1})}),$(document).on("pjax:error",function(e,n,t,o,c){return c.success(n.responseText,t,n),!1});var options={url:"/gblk.json",getValue:"title",list:{match:{enabled:!0,maxNumberOfElements:5}},template:{type:"links",fields:{link:"url"}},theme:"square"};$("#countries").easyAutocomplete(options),Pace.on("start",function(){$(".pacel").show()}),Pace.on("done",function(){$(".pacel").hide()}),$(function(){$("img").lazyload({})});var waterfall=new Waterfall({containerSelector:".wf-container",boxSelector:".wf-box",minBoxWidth:180});$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})});
|
||||||
|
</script>
|
||||||
|
<script id="dsq-count-scr" src="//spaghettisan.disqus.com/count.js" async></script>
|
||||||
|
|
||||||
|
</Body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,2 @@
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Spaghetti-san Blog</title>
|
||||||
|
<description>All about Spaghetti-san Project
|
||||||
|
</description>
|
||||||
|
<link>http://spaghetti.ga/</link>
|
||||||
|
<atom:link href="http://spaghetti.ga/feed.xml" rel="self" type="application/rss+xml"/>
|
||||||
|
<pubDate>Thu, 09 Jun 2016 17:20:14 -0400</pubDate>
|
||||||
|
<lastBuildDate>Thu, 09 Jun 2016 17:20:14 -0400</lastBuildDate>
|
||||||
|
<generator>Jekyll v3.1.6</generator>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>My First Post!</title>
|
||||||
|
<description><p>Hello, this is my first post.</p>
|
||||||
|
</description>
|
||||||
|
<pubDate>Fri, 18 Dec 2015 12:00:00 -0500</pubDate>
|
||||||
|
<link>http://spaghetti.ga/uncategorized/2015/12/18/my-first-post.html</link>
|
||||||
|
<guid isPermaLink="true">http://spaghetti.ga/uncategorized/2015/12/18/my-first-post.html</guid>
|
||||||
|
|
||||||
|
<category>hello</category>
|
||||||
|
|
||||||
|
<category>writeup</category>
|
||||||
|
|
||||||
|
|
||||||
|
<category>uncategorized</category>
|
||||||
|
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Welcome to Jekyll!</title>
|
||||||
|
<description><p>#Say hello to Jekyll and OpenShift :)</p>
|
||||||
|
|
||||||
|
<p>You’ll find this post in your <code class="highlighter-rouge">_posts</code> directory - edit this post and re-build (or run with the <code class="highlighter-rouge">-w</code> switch) to see your changes!
|
||||||
|
To add new posts, simply add a file in the <code class="highlighter-rouge">_posts</code> directory that follows the convention: YYYY-MM-DD-name-of-post.ext.</p>
|
||||||
|
|
||||||
|
<p>Jekyll also offers powerful support for code snippets:</p>
|
||||||
|
|
||||||
|
<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
|
||||||
|
<span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
<span class="k">end</span>
|
||||||
|
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
|
||||||
|
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>
|
||||||
|
|
||||||
|
<p>Check out the <a href="http://jekyllrb.com">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/mojombo/jekyll">Jekyll’s GitHub repo</a>.</p>
|
||||||
|
|
||||||
|
</description>
|
||||||
|
<pubDate>Mon, 25 Nov 2013 11:58:04 -0500</pubDate>
|
||||||
|
<link>http://spaghetti.ga/jekyll/update/2013/11/25/welcome-to-jekyll.html</link>
|
||||||
|
<guid isPermaLink="true">http://spaghetti.ga/jekyll/update/2013/11/25/welcome-to-jekyll.html</guid>
|
||||||
|
|
||||||
|
<category>nothello</category>
|
||||||
|
|
||||||
|
|
||||||
|
<category>jekyll</category>
|
||||||
|
|
||||||
|
<category>update</category>
|
||||||
|
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
{"title":"My First Post!", "url":"/uncategorized/2015/12/18/my-first-post.html"},
|
||||||
|
{"title":"Welcome to Jekyll!", "url":"/jekyll/update/2013/11/25/welcome-to-jekyll.html"}
|
||||||
|
]
|
|
@ -0,0 +1,38 @@
|
||||||
|
var gulp = require('gulp');
|
||||||
|
var deploy = require('gulp-gh-pages');
|
||||||
|
var http = require('http');
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
|
||||||
|
// Get comments data from Poole
|
||||||
|
gulp.task("comments", function() {
|
||||||
|
|
||||||
|
// set up the request to get comments as YAML
|
||||||
|
var options = {
|
||||||
|
hostname: 'pooleapp.com',
|
||||||
|
port: 80,
|
||||||
|
path: '/data/e6a52fdd-8dee-4095-805a-3ea6189fc135.yaml',
|
||||||
|
method: 'GET',
|
||||||
|
};
|
||||||
|
|
||||||
|
// Go and get data
|
||||||
|
http.get(options, function(res) {
|
||||||
|
|
||||||
|
var body = '';
|
||||||
|
res.on('data', function(chunk) {
|
||||||
|
body += chunk;
|
||||||
|
});
|
||||||
|
res.on('end', function() {
|
||||||
|
|
||||||
|
// Save the comments for jekyll to use as a data source
|
||||||
|
fs.writeFile('_data/comments.yml', body, function(err) {
|
||||||
|
if(err) {
|
||||||
|
console.log(err);
|
||||||
|
} else {
|
||||||
|
console.log("Comments data saved.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,354 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!---
|
||||||
|
Spaghetti Base Redesign
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>Spaghetti-san Blog</title>
|
||||||
|
<meta name="description" content="All about Spaghetti-san Project
|
||||||
|
">
|
||||||
|
<meta name="google-site-verification" content="WWP0tS0N_Dm8-FTd9oqyZta0oRCDYUFy24R7zSm06Vs" />
|
||||||
|
<meta name="msvalidate.01" content="779064655F047D704FFFD2122C3591F3" />
|
||||||
|
<link rel="stylesheet" href="/assets/css/alternative.css">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/typicons/2.0.7/typicons.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.4.1/octicons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://spaghetti.ga/">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Spaghetti-san Blog" href="http://spaghetti.ga/feed.xml">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<Body>
|
||||||
|
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="pacel "><div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
|
||||||
|
<div class="pace-progress-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pace-activity"></div></div>
|
||||||
|
<a id="route" class="site-title" href="/">Paul Walko</a>
|
||||||
|
|
||||||
|
<nav class="site-nav">
|
||||||
|
<a href="#" class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15">
|
||||||
|
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||||||
|
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||||||
|
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/about.html">About</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/archive.html">Archive</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/project.html">Projects</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="page-link" href="/tags/#writeup">Writeups</a>
|
||||||
|
<a class="page-link" href="http://spaghetti.ga/feed.xml"> Feeds</a>
|
||||||
|
<a class="page-link" href="http://github.com/paulwalko?tab=repositories"><i class="octicon octicon-mark-github" style="font-size:"></i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="large-7 columns samping">
|
||||||
|
|
||||||
|
|
||||||
|
<article class="post tag-speeches">
|
||||||
|
<div style="padding: 20px;">
|
||||||
|
<header class="post-header">
|
||||||
|
<h2 class="post-title"><a id="route" href="/uncategorized/2015/12/18/my-first-post.html">My First Post!</a></h2>
|
||||||
|
</header>
|
||||||
|
<section class="post-excerpt">
|
||||||
|
<p>Hello, this is my first post.
|
||||||
|
<a id="route" class="read-more" href="/uncategorized/2015/12/18/my-first-post.html">»</a></p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer class="post-meta" style=" background: #00bc8c;
|
||||||
|
padding: 10px 0 0px 20px;">
|
||||||
|
|
||||||
|
|
||||||
|
<p class="post-tags"><i class="typico typcn typcn-tags" style=" font-size: 28px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
font-size:15px"></i>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" href="/tags/#hello"> hello</a>
|
||||||
|
|
||||||
|
<a id="route" href="/tags/#writeup"> writeup</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<time class="post-date" datetime="2015-12-18T12:00:00-05:00"><i class="typico typcn typcn-calendar-outline" style=" font-size: 28px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
font-size:15px"></i> Dec 18, 2015</time>
|
||||||
|
<p class="post-date"><i class="typico typcn typcn-messages" style=" font-size: 28px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
font-size:15px"></i> <a id="route" class="disqus-comment-count" href="/uncategorized/2015/12/18/my-first-post.html#disqus_thread" style="color:#fff"> 0 Comments</a></p>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="post tag-speeches">
|
||||||
|
<div style="padding: 20px;">
|
||||||
|
<header class="post-header">
|
||||||
|
<h2 class="post-title"><a id="route" href="/jekyll/update/2013/11/25/welcome-to-jekyll.html">Welcome to Jekyll!</a></h2>
|
||||||
|
</header>
|
||||||
|
<section class="post-excerpt">
|
||||||
|
<p>#Say hello to Jekyll and OpenShift :) You’ll find this post in your _posts directory - edit this post and re-build (or run with the -w switch) to see your changes! To add new posts, simply add a file in the _posts directory that follows... <a id="route" class="read-more" href="/jekyll/update/2013/11/25/welcome-to-jekyll.html">»</a></p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer class="post-meta" style=" background: #00bc8c;
|
||||||
|
padding: 10px 0 0px 20px;">
|
||||||
|
|
||||||
|
|
||||||
|
<p class="post-tags"><i class="typico typcn typcn-tags" style=" font-size: 28px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
font-size:15px"></i>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" href="/tags/#nothello"> nothello</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<time class="post-date" datetime="2013-11-25T11:58:04-05:00"><i class="typico typcn typcn-calendar-outline" style=" font-size: 28px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
font-size:15px"></i> Nov 25, 2013</time>
|
||||||
|
<p class="post-date"><i class="typico typcn typcn-messages" style=" font-size: 28px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
font-size:15px"></i> <a id="route" class="disqus-comment-count" href="/jekyll/update/2013/11/25/welcome-to-jekyll.html#disqus_thread" style="color:#fff"> 0 Comments</a></p>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Pagination links -->
|
||||||
|
<div class="pagination">
|
||||||
|
|
||||||
|
<span class="previous" align="left"><i class="typcn typcn-chevron-left-outline" style=" font-size: 14px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
"></i> Previous</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span class="next" align="right">Next <i class="typcn typcn-chevron-right-outline" style=" font-size: 14px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
"></i></span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="large-4 columns">
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Search</h1>
|
||||||
|
<div class="badanwidget" style="width:0">
|
||||||
|
<input type="text" placeholder="Type here to search..." id="countries"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Tags</h1>
|
||||||
|
|
||||||
|
<div class="badanwidget">
|
||||||
|
<ul class="tags" style="padding-bottom: 20px;">
|
||||||
|
|
||||||
|
|
||||||
|
<li style="font-size: 103%">
|
||||||
|
<a id="route" href="/tags/#nothello">
|
||||||
|
nothello
|
||||||
|
<span>1</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li style="font-size: 103%">
|
||||||
|
<a id="route" href="/tags/#hello">
|
||||||
|
hello
|
||||||
|
<span>1</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li style="font-size: 103%">
|
||||||
|
<a id="route" href="/tags/#writeup">
|
||||||
|
writeup
|
||||||
|
<span>1</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widgetnya">
|
||||||
|
<h1 class="page-heading">Blogroll</h1>
|
||||||
|
<div class="badanwidget">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h2 class="footer-heading">Spaghetti-san Blog</h2>
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col footer-col-1">
|
||||||
|
<ul class="contact-list">
|
||||||
|
<li>Spaghetti-san Personal Blog</li>
|
||||||
|
<li><a href="mailto:spaghettisan@yahoo.com">spaghettisan@yahoo.com</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-2">
|
||||||
|
<ul class="social-media-list">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://github.com/spaghetti-san"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
|
||||||
|
</span><span class="username">spaghetti-san</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://facebook.com/axlyody"><span class="icon icon--facebook"><?xml version="1.0"?>
|
||||||
|
<svg class="icon icon-facebook" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<path class="background" fill="#828282" d="M 0.875,0 C 0.38722,0 0,0.38721 0,0.875 l 0,14.25 C 0,15.61266 0.38715,16 0.875,16 l 7.65625,0 0,-6.1875 -2.0625,0 0,-2.4375 2.0625,0 0,-1.78125 c 0,-2.06656 1.2814395,-3.1875 3.125,-3.1875 0.88307,0 1.62261,0.06435 1.84375,0.09375 l 0,2.15625 -1.25,0.03125 c -1.00252,0 -1.21875,0.45713 -1.21875,1.15625 l 0,1.53125 2.40625,0 -0.3125,2.4375 -2.09375,0 0,6.1875 4.09375,0 C 15.612599,16 16,15.61272 16,15.125 L 16,0.875 C 16,0.38721 15.61266,0 15.125,0 L 0.875,0 z"/>
|
||||||
|
<path class="foreground" fill="white" d="m 11.03968,16.000001 v -6.19608 h 2.07973 l 0.31141,-2.41472 h -2.39114 v -1.54165 c 0,-0.69912 0.19414,-1.17555 1.19666,-1.17555 l 1.27866,-5.6e-4 v -2.15974 c -0.22114,-0.0294 -0.98017,-0.0952 -1.86324,-0.0952 -1.8435605,0 -3.1057105,1.12532 -3.1057105,3.19188 v 1.7808 h -2.08506 v 2.41472 h 2.08506 v 6.19608 H 11.03968 z"/>
|
||||||
|
</svg>
|
||||||
|
</span><span class="username">Axl Yody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://twitter.com/axlyody"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
|
||||||
|
</span><span class="username">axlyody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-3">
|
||||||
|
<p>Designed by Spaghetti</p>
|
||||||
|
<p>Proudly hosted by <a href="https://pages.github.com/" target="_blank"><span class="octicon octicon-logo-github" style="color: #828282;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: 3px;
|
||||||
|
font-size: 20px;"></span></a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--- Where Javascript Loaded --->
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="http://iamceege.github.io/tooltipster/js/jquery.tooltipster.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
if(location.pathname != "/") {
|
||||||
|
$('.trigger a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
|
||||||
|
} else $('.none a:eq(0)').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-right').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-left').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'left',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/js/jquery-autocomplete.js"></script>
|
||||||
|
<script src="/assets/js/responsive_waterfall.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})}),$(function(){$(document).pjax("#route","body",{fragment:"body",timeout:1e5,scrollTo:0,push:!0,maxCacheLength:20,replace:!1})}),$(document).on("pjax:error",function(e,n,t,o,c){return c.success(n.responseText,t,n),!1});var options={url:"/gblk.json",getValue:"title",list:{match:{enabled:!0,maxNumberOfElements:5}},template:{type:"links",fields:{link:"url"}},theme:"square"};$("#countries").easyAutocomplete(options),Pace.on("start",function(){$(".pacel").show()}),Pace.on("done",function(){$(".pacel").hide()}),$(function(){$("img").lazyload({})});var waterfall=new Waterfall({containerSelector:".wf-container",boxSelector:".wf-box",minBoxWidth:180});$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})});
|
||||||
|
</script>
|
||||||
|
<script id="dsq-count-scr" src="//spaghettisan.disqus.com/count.js" async></script>
|
||||||
|
|
||||||
|
</Body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,60 @@
|
||||||
|
require "stringex"
|
||||||
|
class Jekyll < Thor
|
||||||
|
desc "new", "create a new post"
|
||||||
|
method_option :editor, :default => "subl"
|
||||||
|
def new(*title)
|
||||||
|
title = title.join(" ")
|
||||||
|
date = Time.now.strftime('%Y-%m-%d')
|
||||||
|
hour = Time.now.strftime('%H:%M:%S')
|
||||||
|
filename = "_posts/#{date}-#{title.to_url}.md"
|
||||||
|
|
||||||
|
if File.exist?(filename)
|
||||||
|
abort("#{filename} already exists!")
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "Creating new post: #{filename}"
|
||||||
|
open(filename, 'w') do |post|
|
||||||
|
post.puts "---"
|
||||||
|
post.puts "layout: post"
|
||||||
|
post.puts "title: \"#{title.gsub(/&/,'&')}\""
|
||||||
|
post.puts "date: #{date} #{hour}"
|
||||||
|
post.puts "summary: -Your Summary Here-"
|
||||||
|
post.puts "category: "
|
||||||
|
post.puts "tags: "
|
||||||
|
post.puts "image: /images/default-thumb.png"
|
||||||
|
post.puts "---"
|
||||||
|
end
|
||||||
|
|
||||||
|
system(options[:editor], filename)
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "tag", "create a new tag"
|
||||||
|
method_option :editor, :default => "subl"
|
||||||
|
def tag(*name)
|
||||||
|
tag_name = name.join(" ")
|
||||||
|
tag_dasherized_name = tag_name.downcase.split(" ").join("-")
|
||||||
|
filename = "tags/#{tag_dasherized_name}.md"
|
||||||
|
|
||||||
|
if File.exist?(filename)
|
||||||
|
abort("#{filename} already exists!")
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "Creating new tag: #{filename}"
|
||||||
|
open(filename, 'w') do |tag|
|
||||||
|
tag.puts "---"
|
||||||
|
tag.puts "layout: blog_by_tag"
|
||||||
|
tag.puts "tag: #{tag_dasherized_name}"
|
||||||
|
tag.puts "permalink: /tags/#{tag_dasherized_name}/"
|
||||||
|
tag.puts "---"
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "Updating tag list"
|
||||||
|
open("_data/tags.yml", "a+") do |tag|
|
||||||
|
tag.puts ""
|
||||||
|
tag.puts "- slug: #{tag_dasherized_name}"
|
||||||
|
tag.puts " name: #{tag_name}"
|
||||||
|
end
|
||||||
|
|
||||||
|
system(options[:editor], filename)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,309 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!---
|
||||||
|
Spaghetti Base Redesign
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>Welcome to Jekyll!</title>
|
||||||
|
<meta name="description" content="#Say hello to Jekyll and OpenShift :)">
|
||||||
|
<meta name="google-site-verification" content="WWP0tS0N_Dm8-FTd9oqyZta0oRCDYUFy24R7zSm06Vs" />
|
||||||
|
<meta name="msvalidate.01" content="779064655F047D704FFFD2122C3591F3" />
|
||||||
|
<link rel="stylesheet" href="/assets/css/alternative.css">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/typicons/2.0.7/typicons.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.4.1/octicons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="canonical" href="http://spaghetti.ga/jekyll/update/2013/11/25/welcome-to-jekyll.html">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Spaghetti-san Blog" href="http://spaghetti.ga/feed.xml">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<Body>
|
||||||
|
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="pacel "><div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
|
||||||
|
<div class="pace-progress-inner"></div>
|
||||||
|
</div>
|
||||||
|
<div class="pace-activity"></div></div>
|
||||||
|
<a id="route" class="site-title" href="/">Paul Walko</a>
|
||||||
|
|
||||||
|
<nav class="site-nav">
|
||||||
|
<a href="#" class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15">
|
||||||
|
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||||||
|
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||||||
|
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/about.html">About</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/archive.html">Archive</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a id="route" class="page-link" href="/project.html">Projects</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a class="page-link" href="/tags/#writeup">Writeups</a>
|
||||||
|
<a class="page-link" href="http://spaghetti.ga/feed.xml"> Feeds</a>
|
||||||
|
<a class="page-link" href="http://github.com/paulwalko?tab=repositories"><i class="octicon octicon-mark-github" style="font-size:"></i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="wrapper">
|
||||||
|
<div style="margin: 4.5rem auto;">
|
||||||
|
|
||||||
|
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
|
||||||
|
|
||||||
|
<header class="inpost-header">
|
||||||
|
<h1 class="inpost-title" itemprop="name headline">Welcome to Jekyll!</h1>
|
||||||
|
<h1 style="float:right">
|
||||||
|
<i class="typico typcn typcn-messages" style=" position: relative;
|
||||||
|
top: 0px;
|
||||||
|
font-size: 25px;"></i> <a class="disqus-comment-count" href="#disqus_thread" style="color:#fff"> 0</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="post-content" itemprop="articleBody">
|
||||||
|
<p>#Say hello to Jekyll and OpenShift :)</p>
|
||||||
|
|
||||||
|
<p>You’ll find this post in your <code class="highlighter-rouge">_posts</code> directory - edit this post and re-build (or run with the <code class="highlighter-rouge">-w</code> switch) to see your changes!
|
||||||
|
To add new posts, simply add a file in the <code class="highlighter-rouge">_posts</code> directory that follows the convention: YYYY-MM-DD-name-of-post.ext.</p>
|
||||||
|
|
||||||
|
<p>Jekyll also offers powerful support for code snippets:</p>
|
||||||
|
|
||||||
|
<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
|
||||||
|
<span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
<span class="k">end</span>
|
||||||
|
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
|
||||||
|
<span class="c1">#=> prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>
|
||||||
|
|
||||||
|
<p>Check out the <a href="http://jekyllrb.com">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/mojombo/jekyll">Jekyll’s GitHub repo</a>.</p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="arrowNav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="arrowLeft">
|
||||||
|
<a id="route" class="tooltip-right" href="/uncategorized/2015/12/18/my-first-post.html" title="
|
||||||
|
<p class=hoveratas>My First Post!</p> <p class=hoverbawah>Hello, this is my first post.
|
||||||
|
</p>
|
||||||
|
"><i class="typcn typcn-chevron-left" style=" font-size: 30px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
"></i></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<p class="post-meta" style=" background: #00bc8c;
|
||||||
|
padding: 15px 0px 15px 20px;"><time datetime="2013-11-25T11:58:04-05:00" itemprop="datePublished"><i class="typcn typcn-calendar-outline"></i> Nov 25, 2013</time>
|
||||||
|
|
|
||||||
|
|
||||||
|
<a href="/tags/#nothello" style="color: #fff;"><i class="typcn typcn-tags"></i> nothello</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#disqus_thread {
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
margin-bottom: -54px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
var disqus_config = function () {
|
||||||
|
this.page.url = spaghetti.ga; // Replace PAGE_URL with your page's canonical URL variable
|
||||||
|
this.page.identifier = /jekyll/update/2013/11/25/welcome-to-jekyll; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
|
||||||
|
};
|
||||||
|
|
||||||
|
(function() { // DON'T EDIT BELOW THIS LINE
|
||||||
|
var d = document, s = d.createElement('script');
|
||||||
|
|
||||||
|
s.src = '//spaghettisan.disqus.com/embed.js';
|
||||||
|
|
||||||
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="wrapper">
|
||||||
|
<h2 class="footer-heading">Spaghetti-san Blog</h2>
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col footer-col-1">
|
||||||
|
<ul class="contact-list">
|
||||||
|
<li>Spaghetti-san Personal Blog</li>
|
||||||
|
<li><a href="mailto:spaghettisan@yahoo.com">spaghettisan@yahoo.com</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-2">
|
||||||
|
<ul class="social-media-list">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://github.com/spaghetti-san"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
|
||||||
|
</span><span class="username">spaghetti-san</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://facebook.com/axlyody"><span class="icon icon--facebook"><?xml version="1.0"?>
|
||||||
|
<svg class="icon icon-facebook" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||||
|
<path class="background" fill="#828282" d="M 0.875,0 C 0.38722,0 0,0.38721 0,0.875 l 0,14.25 C 0,15.61266 0.38715,16 0.875,16 l 7.65625,0 0,-6.1875 -2.0625,0 0,-2.4375 2.0625,0 0,-1.78125 c 0,-2.06656 1.2814395,-3.1875 3.125,-3.1875 0.88307,0 1.62261,0.06435 1.84375,0.09375 l 0,2.15625 -1.25,0.03125 c -1.00252,0 -1.21875,0.45713 -1.21875,1.15625 l 0,1.53125 2.40625,0 -0.3125,2.4375 -2.09375,0 0,6.1875 4.09375,0 C 15.612599,16 16,15.61272 16,15.125 L 16,0.875 C 16,0.38721 15.61266,0 15.125,0 L 0.875,0 z"/>
|
||||||
|
<path class="foreground" fill="white" d="m 11.03968,16.000001 v -6.19608 h 2.07973 l 0.31141,-2.41472 h -2.39114 v -1.54165 c 0,-0.69912 0.19414,-1.17555 1.19666,-1.17555 l 1.27866,-5.6e-4 v -2.15974 c -0.22114,-0.0294 -0.98017,-0.0952 -1.86324,-0.0952 -1.8435605,0 -3.1057105,1.12532 -3.1057105,3.19188 v 1.7808 h -2.08506 v 2.41472 h 2.08506 v 6.19608 H 11.03968 z"/>
|
||||||
|
</svg>
|
||||||
|
</span><span class="username">Axl Yody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="https://twitter.com/axlyody"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
|
||||||
|
</span><span class="username">axlyody</span></a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-col footer-col-3">
|
||||||
|
<p>Designed by Spaghetti</p>
|
||||||
|
<p>Proudly hosted by <a href="https://pages.github.com/" target="_blank"><span class="octicon octicon-logo-github" style="color: #828282;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
left: 3px;
|
||||||
|
font-size: 20px;"></span></a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--- Where Javascript Loaded --->
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="http://iamceege.github.io/tooltipster/js/jquery.tooltipster.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
if(location.pathname != "/") {
|
||||||
|
$('.trigger a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
|
||||||
|
} else $('.none a:eq(0)').addClass('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-right').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.tooltip-left').tooltipster({
|
||||||
|
contentAsHTML: true,
|
||||||
|
position: 'left',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/assets/js/jquery-autocomplete.js"></script>
|
||||||
|
<script src="/assets/js/responsive_waterfall.js"></script>
|
||||||
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})}),$(function(){$(document).pjax("#route","body",{fragment:"body",timeout:1e5,scrollTo:0,push:!0,maxCacheLength:20,replace:!1})}),$(document).on("pjax:error",function(e,n,t,o,c){return c.success(n.responseText,t,n),!1});var options={url:"/gblk.json",getValue:"title",list:{match:{enabled:!0,maxNumberOfElements:5}},template:{type:"links",fields:{link:"url"}},theme:"square"};$("#countries").easyAutocomplete(options),Pace.on("start",function(){$(".pacel").show()}),Pace.on("done",function(){$(".pacel").hide()}),$(function(){$("img").lazyload({})});var waterfall=new Waterfall({containerSelector:".wf-container",boxSelector:".wf-box",minBoxWidth:180});$(document).ready(function(){$(".menu-icon").click(function(){$(".trigger").toggle()})});
|
||||||
|
</script>
|
||||||
|
<script id="dsq-count-scr" src="//spaghettisan.disqus.com/count.js" async></script>
|
||||||
|
|
||||||
|
</Body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,23 @@
|
||||||
|
Copyright
|
||||||
|
|
||||||
|
2014 Micheal Benedict (@micheal)
|
||||||
|
2015 Shinnosuke Watanabe (@shinnn)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,104 @@
|
||||||
|
# gulp-gh-pages
|
||||||
|
|
||||||
|
[![NPM version](http://img.shields.io/npm/v/gulp-gh-pages.svg)](https://www.npmjs.com/package/gulp-gh-pages)
|
||||||
|
[![Build Status](https://travis-ci.org/shinnn/gulp-gh-pages.svg?branch=master)](https://travis-ci.org/shinnn/gulp-gh-pages)
|
||||||
|
[![Build status](https://ci.appveyor.com/api/projects/status/iskj8sml9luhkm21?svg=true)](https://ci.appveyor.com/project/ShinnosukeWatanabe/gulp-gh-pages)
|
||||||
|
[![Coverage Status](https://img.shields.io/coveralls/shinnn/gulp-gh-pages.svg)](https://coveralls.io/r/shinnn/gulp-gh-pages)
|
||||||
|
[![Dependency Status](https://img.shields.io/david/shinnn/gulp-gh-pages.svg?label=deps)](https://david-dm.org/shinnn/gulp-gh-pages)
|
||||||
|
[![devDependency Status](https://img.shields.io/david/dev/shinnn/gulp-gh-pages.svg?label=devDeps)](https://david-dm.org/shinnn/gulp-gh-pages#info=devDependencies)
|
||||||
|
|
||||||
|
[gulp](http://gulpjs.com/) plugin to publish contents to [Github pages](https://pages.github.com/)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
[Use npm](https://docs.npmjs.com/cli/install).
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save-dev gulp-gh-pages
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Define a `deploy` task in your `gulpfile.js` (as below) which can be used to push to `gh-pages` going forward.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var gulp = require('gulp');
|
||||||
|
var ghPages = require('gulp-gh-pages');
|
||||||
|
|
||||||
|
gulp.task('deploy', function() {
|
||||||
|
return gulp.src('./dist/**/*')
|
||||||
|
.pipe(ghPages());
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Now, you should be able to call your task by doing:
|
||||||
|
|
||||||
|
```she
|
||||||
|
gulp deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var ghPages = require('gulp-gh-pages');
|
||||||
|
```
|
||||||
|
|
||||||
|
### ghPages([*options*])
|
||||||
|
|
||||||
|
*options*: `Object`
|
||||||
|
Return: `Object` ([stream.Transform](https://nodejs.org/api/stream.html#stream_class_stream_transform_1))
|
||||||
|
|
||||||
|
#### options.remoteUrl
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
Default: URL for the remote of the current dir (assumes a git repository)
|
||||||
|
|
||||||
|
By default `gulp-gh-pages` assumes the current working directory is a git repository and uses its remote url. If your `gulpfile.js` is not in a git repository, or if you want to push to a different remote url, you can specify it. Ensure you have write access to the repository.
|
||||||
|
|
||||||
|
#### options.origin
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
Default: `"origin"`
|
||||||
|
|
||||||
|
Git remote.
|
||||||
|
|
||||||
|
#### options.branch
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
Default: `"gh-pages"`
|
||||||
|
|
||||||
|
The branch where deploy will by done. Change to "master" for `username.github.io` projects.
|
||||||
|
|
||||||
|
#### options.cacheDir
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
Default: `.publish`
|
||||||
|
|
||||||
|
Set the directory path to keep a cache of the repository. If it doesn't exist, gulp-gh-pages automatically create it.
|
||||||
|
|
||||||
|
#### options.push
|
||||||
|
|
||||||
|
Type: `Boolean`
|
||||||
|
Default: `true`
|
||||||
|
|
||||||
|
Allow you to make a build on the defined branch without pushing it to master. Useful for dry run.
|
||||||
|
|
||||||
|
#### options.force
|
||||||
|
|
||||||
|
Type: `Boolean`
|
||||||
|
Default: `false`
|
||||||
|
|
||||||
|
Force adding files to the `gh-pages` branch, even if they are ignored by `.gitignore` or `.gitignore_global`.
|
||||||
|
|
||||||
|
#### options.message
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
Default: `"Update [timestamp]"`
|
||||||
|
|
||||||
|
Edit commit message.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright (c) 2014 [Micheal Benedict](https://github.com/rowoot), 2015 [Shinnosuke Watanabe](https://github.com/shinnn)
|
||||||
|
|
||||||
|
Licensed under [the MIT License](./LICENSE).
|
|
@ -0,0 +1,163 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var git = require('./lib/git');
|
||||||
|
var gutil = require('gulp-util');
|
||||||
|
var Transform = require('readable-stream/transform');
|
||||||
|
var vinylFs = require('vinyl-fs');
|
||||||
|
var wrapPromise = require('wrap-promise');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Public: Push to gh-pages branch for github
|
||||||
|
*
|
||||||
|
* options - {Object} that contains all the options of the plugin
|
||||||
|
* - remoteUrl: The {String} remote url (github repository) of the project,
|
||||||
|
* - origin: The {String} origin of the git repository (default to `"origin"`),
|
||||||
|
* - branch: The {String} branch where deploy will by done (default to `"gh-pages"`),
|
||||||
|
* - cacheDir: {String} where the git repo will be located. (default to a temporary folder)
|
||||||
|
* - push: {Boolean} to know whether or not the branch should be pushed (default to `true`)
|
||||||
|
* - message: {String} commit message (default to `"Update [timestamp]"`)
|
||||||
|
*
|
||||||
|
* Returns `Stream`.
|
||||||
|
**/
|
||||||
|
module.exports = function gulpGhPages(options) {
|
||||||
|
options = options || {};
|
||||||
|
var origin = options.origin || 'origin';
|
||||||
|
var branch = options.branch || 'gh-pages';
|
||||||
|
var message = options.message || 'Update ' + new Date().toISOString();
|
||||||
|
|
||||||
|
var files = [];
|
||||||
|
var TAG;
|
||||||
|
if (branch !== 'gh-pages') {
|
||||||
|
TAG = '[gh-pages (' + branch + ')]';
|
||||||
|
} else {
|
||||||
|
TAG = '[gh-pages]';
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Transform({
|
||||||
|
objectMode: true,
|
||||||
|
transform: function collectFiles(file, enc, cb) {
|
||||||
|
if (file.isNull()) {
|
||||||
|
cb(null, file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file.isStream()) {
|
||||||
|
cb(new gutil.PluginError('gulp-gh-pages', 'Stream content is not supported'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
files.push(file);
|
||||||
|
cb(null, file);
|
||||||
|
},
|
||||||
|
flush: function publish(cb) {
|
||||||
|
if (files.length === 0) {
|
||||||
|
gutil.log(TAG, 'No files in the stream.');
|
||||||
|
cb();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newBranchCreated = false;
|
||||||
|
|
||||||
|
git.prepareRepo(options.remoteUrl, origin, options.cacheDir || '.publish')
|
||||||
|
.then(function(repo) {
|
||||||
|
gutil.log(TAG, 'Cloning repo');
|
||||||
|
if (repo._localBranches.indexOf(branch) > -1) {
|
||||||
|
gutil.log(TAG, 'Checkout branch `' + branch + '`');
|
||||||
|
return repo.checkoutBranch(branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (repo._remoteBranches.indexOf(origin + '/' + branch) > -1) {
|
||||||
|
gutil.log(TAG, 'Checkout remote branch `' + branch + '`');
|
||||||
|
return repo.checkoutBranch(branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
gutil.log(TAG, 'Create branch `' + branch + '` and checkout');
|
||||||
|
newBranchCreated = true;
|
||||||
|
return repo.createAndCheckoutBranch(branch);
|
||||||
|
})
|
||||||
|
.then(function(repo) {
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
if (newBranchCreated) {
|
||||||
|
resolve(repo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// updating to avoid having local cache not up to date
|
||||||
|
gutil.log(TAG, 'Updating repository');
|
||||||
|
repo._repo.git('pull', function(err) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(repo);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.then(function(repo) {
|
||||||
|
// remove all files
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
repo._repo.remove('.', {r: true}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(repo.status());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.then(function(repo) {
|
||||||
|
gutil.log(TAG, 'Copying files to repository');
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
var destStream = vinylFs.dest(repo._repo.path)
|
||||||
|
.on('error', reject)
|
||||||
|
.on('end', function() {
|
||||||
|
resolve(repo);
|
||||||
|
})
|
||||||
|
.resume();
|
||||||
|
|
||||||
|
files.forEach(function(file) {
|
||||||
|
destStream.write(file);
|
||||||
|
});
|
||||||
|
|
||||||
|
destStream.end();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.then(function(repo) {
|
||||||
|
return repo.addFiles('.', {force: options.force || false});
|
||||||
|
})
|
||||||
|
.then(function(repo) {
|
||||||
|
var filesToBeCommitted = Object.keys(repo._staged).length;
|
||||||
|
if (filesToBeCommitted === 0) {
|
||||||
|
gutil.log(TAG, 'No files have changed.');
|
||||||
|
cb();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gutil.log(TAG, 'Adding ' + filesToBeCommitted + ' files.');
|
||||||
|
gutil.log(TAG, 'Committing "' + message + '"');
|
||||||
|
repo.commit(message).then(function(newRepo) {
|
||||||
|
if (options.push === undefined || options.push) {
|
||||||
|
gutil.log(TAG, 'Pushing to remote.');
|
||||||
|
newRepo._repo.git('push', {
|
||||||
|
'set-upstream': true
|
||||||
|
}, [origin, newRepo._currentBranch], function(err) {
|
||||||
|
if (err) {
|
||||||
|
cb(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cb();
|
||||||
|
}, cb);
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
setImmediate(function() {
|
||||||
|
cb(new gutil.PluginError('gulp-gh-pages', err));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
|
@ -0,0 +1,270 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var git = require('gift');
|
||||||
|
var rimraf = require('rimraf');
|
||||||
|
var wrapPromise = require('wrap-promise');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Git Constructor
|
||||||
|
**/
|
||||||
|
function Git(repo, initialBranch) {
|
||||||
|
this._repo = repo;
|
||||||
|
this._staged = [];
|
||||||
|
this._localBranches = [];
|
||||||
|
this._remoteBranches = [];
|
||||||
|
this._currentBranch = initialBranch;
|
||||||
|
this._commits = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Caller abstract method
|
||||||
|
* for promisifying traditional callback methods
|
||||||
|
**/
|
||||||
|
function caller() {
|
||||||
|
var returnedArgs = Array.prototype.slice.call(arguments);
|
||||||
|
var fn = returnedArgs.shift();
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
returnedArgs.push(function(err, args) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(args);
|
||||||
|
});
|
||||||
|
|
||||||
|
fn.apply(self, returnedArgs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gets the URL for the specified remote of a repo
|
||||||
|
*/
|
||||||
|
function getRemoteUrl(repo, remote) {
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
repo.config(function(err, config) {
|
||||||
|
if (err) {
|
||||||
|
reject(new Error('Failed to find git repository in ' + config.path));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(config.items['remote.' + remote + '.url']);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clone repo
|
||||||
|
* Returns repo object
|
||||||
|
**/
|
||||||
|
function prepareRepo(remoteUrl, origin, dir) {
|
||||||
|
var promise;
|
||||||
|
if (remoteUrl) {
|
||||||
|
// if a remoteUrl was provided, use it
|
||||||
|
promise = wrapPromise.Promise.resolve(remoteUrl);
|
||||||
|
} else {
|
||||||
|
// else try to extract it from the .git folder of
|
||||||
|
// the current directory.
|
||||||
|
promise = getRemoteUrl(git(process.cwd()), origin);
|
||||||
|
}
|
||||||
|
|
||||||
|
return promise.then(function(rUrl) {
|
||||||
|
remoteUrl = rUrl;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
function initRepo(repo) {
|
||||||
|
repo.branch(function(err, head) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(new Git(repo, head.name).status());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearAndInitRepo() {
|
||||||
|
rimraf(dir, function(rmErr) {
|
||||||
|
if (rmErr) {
|
||||||
|
reject(rmErr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
git.clone(rUrl, dir, function(cloneErr, repo) {
|
||||||
|
if (cloneErr) {
|
||||||
|
reject(cloneErr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
initRepo(repo);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// assume that if there is a .git folder get its remoteUrl
|
||||||
|
// and check if it mathces the one we want to use.
|
||||||
|
getRemoteUrl(git(dir), origin).then(function(cwdRemoteUrl) {
|
||||||
|
if (remoteUrl === cwdRemoteUrl) {
|
||||||
|
initRepo(git(dir));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clearAndInitRepo();
|
||||||
|
}, function() {
|
||||||
|
clearAndInitRepo();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List Local branches
|
||||||
|
**/
|
||||||
|
function listLocalBranches(repo) {
|
||||||
|
return caller.call(repo, repo.branches).then(function(branches) {
|
||||||
|
return branches.map(function(branch) {
|
||||||
|
return branch.name;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function listRemoteBranches(repo) {
|
||||||
|
return caller.call(repo, repo.git, 'branch', {r: true}, [])
|
||||||
|
.then(function(branches) {
|
||||||
|
branches = branches.split('\n');
|
||||||
|
branches.shift();
|
||||||
|
branches.pop();
|
||||||
|
return branches.map(function(branchName) {
|
||||||
|
branchName = branchName.trim();
|
||||||
|
return branchName;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List commits for specific branch
|
||||||
|
**/
|
||||||
|
function getCommits(repo, branchName) {
|
||||||
|
return caller.call(repo, repo.commits, branchName)
|
||||||
|
.then(function(commits) {
|
||||||
|
return commits.map(function(commitObj) {
|
||||||
|
return {
|
||||||
|
id: commitObj.id,
|
||||||
|
message: commitObj.message,
|
||||||
|
committed_date: commitObj.committed_date
|
||||||
|
};
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Git.prepareRepo = prepareRepo;
|
||||||
|
Git.getRemoteUrl = getRemoteUrl;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Status
|
||||||
|
* files - Array of String paths; or a String path.
|
||||||
|
**/
|
||||||
|
Git.prototype.status = function() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
self._repo.status(function(err, repo) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self._repo = repo.repo;
|
||||||
|
self._staged = repo.files;
|
||||||
|
wrapPromise.Promise.all([
|
||||||
|
getCommits(self._repo, self._currentBranch),
|
||||||
|
listRemoteBranches(self._repo),
|
||||||
|
listLocalBranches(self._repo)
|
||||||
|
])
|
||||||
|
.then(function(args) {
|
||||||
|
self._remoteBranches = args[1];
|
||||||
|
self._localBranches = args[2];
|
||||||
|
self._commits = args[0];
|
||||||
|
resolve(self);
|
||||||
|
}, reject);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checkout a specific branch in a repo
|
||||||
|
* @param name {String} - String name of the branch.
|
||||||
|
**/
|
||||||
|
Git.prototype.checkoutBranch = function(name) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
self._repo.checkout(name, function(err) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self._currentBranch = name;
|
||||||
|
resolve(self.status());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a branch
|
||||||
|
* @param name {String} - String name of the new branch.
|
||||||
|
**/
|
||||||
|
Git.prototype.createBranch = function(name) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
self._repo.create_branch(name, function(err) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
self._currentBranch = name;
|
||||||
|
resolve(self.status());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create and checkout a branch
|
||||||
|
* @param name {String} - String name of the new branch.
|
||||||
|
**/
|
||||||
|
Git.prototype.createAndCheckoutBranch = function(name) {
|
||||||
|
return this.createBranch(name)
|
||||||
|
.then(function(repo) {
|
||||||
|
return repo.checkoutBranch(name);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Git.prototype.addFiles = function(files, options) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
self._repo.add(files, options, function(err) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(self.status());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Git.prototype.commit = function(commitMsg) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return wrapPromise(function(resolve, reject) {
|
||||||
|
self._repo.commit(commitMsg, {all: true}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve(self.status());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = Git;
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2012 [DJG](https://github.com/sentientwaffle)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files
|
||||||
|
(the "Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject
|
||||||
|
to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,383 @@
|
||||||
|
# Gift [![Build Status](https://secure.travis-ci.org/notatestuser/gift.svg?branch=master)](http://travis-ci.org/notatestuser/gift) [![Dependency Status](https://david-dm.org/notatestuser/gift.svg)](https://david-dm.org/notatestuser/gift) [![devDependency Status](https://david-dm.org/notatestuser/gift/dev-status.svg)](https://david-dm.org/notatestuser/gift#info=devDependencies)
|
||||||
|
|
||||||
|
A simple Node.js wrapper for the Git CLI. The API is based on
|
||||||
|
[Grit](https://github.com/mojombo/grit)
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
This fork is now in the `npm` package repository. Install it like you would any other package:
|
||||||
|
|
||||||
|
$ npm install gift
|
||||||
|
|
||||||
|
# API
|
||||||
|
|
||||||
|
For existing repositories:
|
||||||
|
|
||||||
|
git = require 'gift'
|
||||||
|
|
||||||
|
repo = git "path/to/repo"
|
||||||
|
# => #<Repo>
|
||||||
|
|
||||||
|
Initialize a new repository:
|
||||||
|
|
||||||
|
git = require 'gift'
|
||||||
|
|
||||||
|
git.init "path/to/repo", (err, _repo) ->
|
||||||
|
repo = _repo
|
||||||
|
# => #<Repo>
|
||||||
|
|
||||||
|
Initialize a new bare repository:
|
||||||
|
|
||||||
|
git = require 'gift'
|
||||||
|
|
||||||
|
git.init "path/to/bare/repo", true, (err, _repo) ->
|
||||||
|
repo = _repo
|
||||||
|
# => #<Repo>
|
||||||
|
|
||||||
|
Clone a repository:
|
||||||
|
|
||||||
|
git = require 'gift'
|
||||||
|
|
||||||
|
git.clone "git@host:path/to/remote/repo.git", "path/to/local/clone/repo", (err, _repo) ->
|
||||||
|
repo = _repo
|
||||||
|
# => #<Repo>
|
||||||
|
|
||||||
|
## Repo
|
||||||
|
### `Repo#path`
|
||||||
|
`String` - The path to the repository.
|
||||||
|
|
||||||
|
### `Repo#commits([treeish, [limit, [skip, ]]]callback)`
|
||||||
|
Get a list of commits.
|
||||||
|
|
||||||
|
* `treeish` - `String` (optional).
|
||||||
|
* `limit` - `Integer` (optional).
|
||||||
|
* `skip` - `Integer` (optional).
|
||||||
|
* `callback` - `Function` which receives `(err, commits)`, where `commits` is
|
||||||
|
an `Array` of `Commit`s.
|
||||||
|
|
||||||
|
Get the 10 most recent commits to master.
|
||||||
|
|
||||||
|
repo.commits (err, commits) ->
|
||||||
|
|
||||||
|
Or to a different tag or branch.
|
||||||
|
|
||||||
|
repo.commits "v0.0.3", (err, commits) ->
|
||||||
|
|
||||||
|
Limit the maximum number of commits returned (by default limit is 10).
|
||||||
|
|
||||||
|
repo.commits "master", 30, (err, commits) ->
|
||||||
|
|
||||||
|
Skip some (for pagination):
|
||||||
|
|
||||||
|
repo.commits "master", 30, 30, (err, commits) ->
|
||||||
|
|
||||||
|
Or get an unlimited number of commits (there could be a lot):
|
||||||
|
|
||||||
|
repo.commits "master", -1, (err, commits) ->
|
||||||
|
|
||||||
|
### `Repo#current_commit(callback)`
|
||||||
|
Get the current commit.
|
||||||
|
|
||||||
|
The callback receives `(err, commit)`.
|
||||||
|
|
||||||
|
### `Repo#tree([treeish]) => Tree`
|
||||||
|
The `Tree` object for the treeish (which defaults to "master").
|
||||||
|
|
||||||
|
repo.tree().contents (err, children) ->
|
||||||
|
for child in children
|
||||||
|
console.log child.name
|
||||||
|
|
||||||
|
### `Repo#diff(commitA, commitB, [paths, ]callback)`
|
||||||
|
Get the difference between the trees.
|
||||||
|
|
||||||
|
The callback receives `(err, diffs)`.
|
||||||
|
|
||||||
|
### `Repo#identity(callback)`
|
||||||
|
Get the commit identity for this repository.
|
||||||
|
|
||||||
|
The callback receives `(err, actor)`, where `actor` is an Actor.
|
||||||
|
|
||||||
|
### `Repo#identify(actor, callback)`
|
||||||
|
Set your account's default identity for commits to this repository.
|
||||||
|
|
||||||
|
The callback receives `(err)`.
|
||||||
|
|
||||||
|
### `Repo#remotes(callback)`
|
||||||
|
Get the repository's remotes.
|
||||||
|
|
||||||
|
Receives `(err, remotes)`, where each remote is a Ref.
|
||||||
|
|
||||||
|
### `Repo#remote_list(callback)`
|
||||||
|
Get a list of the repository's remote names.
|
||||||
|
|
||||||
|
Get the string names of each of the remotes.
|
||||||
|
|
||||||
|
### `Repo#remote_add(name, url, callback)`
|
||||||
|
Equivalent to `git remote add <name> <url>`.
|
||||||
|
|
||||||
|
### `Repo#remote_remove(name, callback)`
|
||||||
|
Remove a remote.
|
||||||
|
|
||||||
|
### `Repo#remote_add_url(name, url, callback)`
|
||||||
|
Equivalent to `git remote set-url --add <name> <url>`.
|
||||||
|
|
||||||
|
### `Repo#remote_set_url(name, url, callback)`
|
||||||
|
Equivalent to `git remote set-url <name> <url>`.
|
||||||
|
|
||||||
|
### `Repo#remote_delete_url(name, url, callback)`
|
||||||
|
Equivalent to `git remote set-url --delete <name> <url>`.
|
||||||
|
|
||||||
|
### `Repo#remote_fetch(name, callback)`
|
||||||
|
`git fetch <name>`
|
||||||
|
|
||||||
|
### `Repo#remote_push(name, [branch,] callback)`
|
||||||
|
`git push <name>`
|
||||||
|
|
||||||
|
with branch parameter specified:
|
||||||
|
`git push <name> <branch>`
|
||||||
|
|
||||||
|
### `Repo#status([options, ]callback)`
|
||||||
|
Uses `--porcelain` to parse repository status in a way that is agnostic of system language.
|
||||||
|
`options` is a string of any other options you'd like to pass to the status command. For example, the `-u` option will list each file in an untracked directory rather than simply listing the directory itself.
|
||||||
|
The callback receives `(err, status)`. See below for a definition of what `status` is.
|
||||||
|
|
||||||
|
### `Repo#config(callback)`
|
||||||
|
`git config` parsed as a simple, one-level object. The callback receives `(err, config)`.
|
||||||
|
|
||||||
|
### `Repo#create_branch(name, callback)`
|
||||||
|
Create a new branch with `name`, and call the callback when complete
|
||||||
|
with an error, if one occurred.
|
||||||
|
|
||||||
|
### `Repo#delete_branch(name, callback)`
|
||||||
|
Delete the branch `name`, and call the callback with an error, if one occurred.
|
||||||
|
|
||||||
|
### `Repo#tags(callback)`
|
||||||
|
Get a list of `Tag`s.
|
||||||
|
|
||||||
|
### `Repo#create_tag(name, [options, ]callback)`
|
||||||
|
Create a tab with the given name.
|
||||||
|
|
||||||
|
### `Repo#delete_tag(name, callback)`
|
||||||
|
Delete the tag with the given name.
|
||||||
|
|
||||||
|
### `Repo#branches(callback)`
|
||||||
|
`callback` receives `(err, heads)`.
|
||||||
|
|
||||||
|
### `Repo#create_branch(name, callback)`
|
||||||
|
Create a branch with the given name.
|
||||||
|
|
||||||
|
### `Repo#delete_branch(delete, callback)`
|
||||||
|
Delete the branch with the given name.
|
||||||
|
|
||||||
|
### `Repo#branch([branch, ]callback)`
|
||||||
|
Get a branch.
|
||||||
|
|
||||||
|
* `branch` - The name of the branch to get. Defaults to the
|
||||||
|
currently checked out branch.
|
||||||
|
* `callback` - Receives `(err, head)`.
|
||||||
|
|
||||||
|
|
||||||
|
### `Repo#commit(message, [options, ]callback)`
|
||||||
|
Commit some changes.
|
||||||
|
|
||||||
|
* `message` - `String`
|
||||||
|
* `options` -
|
||||||
|
- `all` - `Boolean`
|
||||||
|
- `amend` - `Boolean`
|
||||||
|
- `author` - `String` that must match "Au thor Author <author@nowhere.org>"
|
||||||
|
* `callback` - Receives `(err)`.
|
||||||
|
|
||||||
|
### `Repo#add(files, callback)`
|
||||||
|
`git add <files>`
|
||||||
|
|
||||||
|
### `Repo#remove(files, callback)`
|
||||||
|
`git rm <files>`
|
||||||
|
|
||||||
|
### `Repo#checkout(treeish, callback)`
|
||||||
|
`git checkout <treeish>`
|
||||||
|
|
||||||
|
### `Repo#checkoutFile([files, options, ]callback)`
|
||||||
|
Checkout some files.
|
||||||
|
|
||||||
|
* `files` - File(s) to checkout. Pass `'.'` or nothing to checkout all files.
|
||||||
|
* `options` -
|
||||||
|
- `force` - `Boolean`
|
||||||
|
* `callback` - Receives `(err)`.
|
||||||
|
|
||||||
|
### `Repo#sync([[remote, ]branch, ]callback)`
|
||||||
|
Sync the current branch with the remote, keeping all local changes intact.
|
||||||
|
|
||||||
|
The following steps are carried out: `stash`, `pull`, `push`, `stash pop`. If there were no changes to stash, the last `stash pop` is not executed.
|
||||||
|
|
||||||
|
* `remote` - `String` (defaults to `origin`).
|
||||||
|
* `branch` - `String` (defaults to `master`).
|
||||||
|
* `callback` - Receives `(err)`.
|
||||||
|
|
||||||
|
### `Repo#reset([treeish, options, ]callback)`
|
||||||
|
Checkout files.
|
||||||
|
|
||||||
|
* `treeish` - The git object to reset to. Defaults to HEAD.
|
||||||
|
* `options` -
|
||||||
|
- `soft` - `Boolean`
|
||||||
|
- `mixed` - `Boolean` __default__
|
||||||
|
- `hard` - `Boolean`
|
||||||
|
- `merge` - `Boolean`
|
||||||
|
- `keep` - `Boolean`
|
||||||
|
* `callback` - Receives `(err)`.
|
||||||
|
|
||||||
|
## Commit
|
||||||
|
### `Commit#id`
|
||||||
|
`String` - The commit's SHA.
|
||||||
|
|
||||||
|
### `Commit#parents`
|
||||||
|
`Commit[]`
|
||||||
|
|
||||||
|
### `Commit#tree()`
|
||||||
|
`Tree` - The commit's content tree.
|
||||||
|
|
||||||
|
### `Commit#author`
|
||||||
|
`Actor`
|
||||||
|
### `Commit#authored_date`
|
||||||
|
`Date`
|
||||||
|
### `Commit#committer`
|
||||||
|
`Actor`
|
||||||
|
### `Commit#committed_date`
|
||||||
|
`Date`
|
||||||
|
### `Commit#message`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
|
||||||
|
## Head
|
||||||
|
### `Head#name`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Head#commit`
|
||||||
|
`Commit`
|
||||||
|
|
||||||
|
## Tag
|
||||||
|
### `Tag#name`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Tag#commit`
|
||||||
|
`Commit`
|
||||||
|
|
||||||
|
### `Tag#message(callback)`
|
||||||
|
The callback receives `(err, message)` (`message` is a String).
|
||||||
|
|
||||||
|
### `Tag#tagger(callback)`
|
||||||
|
The callback receives `(err, actor)`.
|
||||||
|
|
||||||
|
### `Tag#tag_date(callback)`
|
||||||
|
The callback receives `(err, date)`.
|
||||||
|
|
||||||
|
## Config
|
||||||
|
### `Config#items`
|
||||||
|
`Object` - The keys are dotted precisely as the console output from `git config`. E.g., `{'user.name': 'John Doe'}`
|
||||||
|
|
||||||
|
## Status
|
||||||
|
### `Status#clean`
|
||||||
|
`Boolean`
|
||||||
|
|
||||||
|
### `Status#files`
|
||||||
|
`Object` - The keys are files, the values objects indicating whether or not
|
||||||
|
the file is staged, tracked, etc.
|
||||||
|
|
||||||
|
Each file has the following properties:
|
||||||
|
|
||||||
|
* `type` which translates to:
|
||||||
|
|
||||||
|
| _type_ | index | working tree |
|
||||||
|
| :--- | :-------: | :-----------:|
|
||||||
|
| `A ` | added | - |
|
||||||
|
| `M ` | modified | - |
|
||||||
|
| `D ` | deleted | - |
|
||||||
|
| `AM` | added | modified |
|
||||||
|
| `MM` | modified | modified |
|
||||||
|
| `AD` | staged | deleted |
|
||||||
|
| `MD` | modified | deleted |
|
||||||
|
|
||||||
|
* `staged` - `Boolean`
|
||||||
|
* `tracked` - `Boolean`
|
||||||
|
|
||||||
|
## Actor
|
||||||
|
### `Actor#name`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Actor#email`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Actor#hash`
|
||||||
|
`String` - The MD5 hash of the actor's email. Useful for displaying
|
||||||
|
[Gravatar](http://en.gravatar.com/) avatars.
|
||||||
|
|
||||||
|
|
||||||
|
## Tree
|
||||||
|
### `Tree#id`
|
||||||
|
`String` - SHA1
|
||||||
|
|
||||||
|
### `Tree#contents(callback)`
|
||||||
|
|
||||||
|
* `callback` - Receives `(err, children)`.
|
||||||
|
* `children` - An array of `Blob`s, `Tree`s, and `Submodule`s.
|
||||||
|
|
||||||
|
### `Tree#blobs(callback)`
|
||||||
|
|
||||||
|
* `callback` - Receives `(err, child_blobs)`.
|
||||||
|
* `children` - `[Blob]`
|
||||||
|
|
||||||
|
### `Tree#trees(callback)`
|
||||||
|
|
||||||
|
* `callback` - Receives `(err, child_trees)`.
|
||||||
|
* `children` - `[Tree]`
|
||||||
|
|
||||||
|
### `Tree#find(directory, callback)`
|
||||||
|
|
||||||
|
* `directory` - `String`
|
||||||
|
* `callback` - Receives `(err, thing)`.
|
||||||
|
|
||||||
|
## Blob
|
||||||
|
### `Blob#id`
|
||||||
|
`String` - SHA1
|
||||||
|
|
||||||
|
### `Blob#mode`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Blob#data(callback)`
|
||||||
|
|
||||||
|
* `callback` - `(err, data)`
|
||||||
|
|
||||||
|
Warning: this method only returns the complete file up to 200k, which is the default
|
||||||
|
buffer size for running child_process.exec(). If the file you're reading is bigger than
|
||||||
|
that, or if you're not sure, you need to use dataStream()
|
||||||
|
|
||||||
|
### `Blob#dataStream()`
|
||||||
|
|
||||||
|
* returns - [dataStream, errorStream]
|
||||||
|
|
||||||
|
Returns streams for you to use to get the data.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
data = ""
|
||||||
|
[dataStream, _] = blob.dataStream()
|
||||||
|
dataStream.on 'data', (buf) ->
|
||||||
|
data += buf.toString()
|
||||||
|
.on 'end', ->
|
||||||
|
callback(data)
|
||||||
|
|
||||||
|
## Submodule
|
||||||
|
### `Submodule#id`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Submodule#name`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Submodule#mode`
|
||||||
|
`String`
|
||||||
|
|
||||||
|
### `Submodule#url(callback)`
|
||||||
|
Get the url the submodule points to.
|
||||||
|
|
||||||
|
|
||||||
|
# License
|
||||||
|
See LICENSE.
|
|
@ -0,0 +1,34 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Actor, crypto;
|
||||||
|
|
||||||
|
crypto = require('crypto');
|
||||||
|
|
||||||
|
module.exports = Actor = (function() {
|
||||||
|
function Actor(name1, email1) {
|
||||||
|
this.name = name1;
|
||||||
|
this.email = email1;
|
||||||
|
if (this.email) {
|
||||||
|
this.hash = crypto.createHash("md5").update(this.email, "ascii").digest("hex");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Actor.prototype.toString = function() {
|
||||||
|
return this.name + " <" + this.email + ">";
|
||||||
|
};
|
||||||
|
|
||||||
|
Actor.from_string = function(str) {
|
||||||
|
var email, m, name, ref;
|
||||||
|
if (/<.+>/.test(str)) {
|
||||||
|
ref = /(.*) <(.+?)>/.exec(str), m = ref[0], name = ref[1], email = ref[2];
|
||||||
|
return new Actor(name, email);
|
||||||
|
} else {
|
||||||
|
return new Actor(str, null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Actor;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,37 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Blob, path;
|
||||||
|
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
module.exports = Blob = (function() {
|
||||||
|
function Blob(repo, attrs) {
|
||||||
|
this.repo = repo;
|
||||||
|
this.id = attrs.id, this.name = attrs.name, this.mode = attrs.mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
Blob.prototype.data = function(callback) {
|
||||||
|
return this.repo.git("cat-file", {
|
||||||
|
p: true
|
||||||
|
}, this.id, function(err, stdout, stderr) {
|
||||||
|
return callback(err, stdout);
|
||||||
|
}, 'binary');
|
||||||
|
};
|
||||||
|
|
||||||
|
Blob.prototype.dataStream = function() {
|
||||||
|
var streams;
|
||||||
|
streams = this.repo.git.streamCmd("cat-file", {
|
||||||
|
p: true
|
||||||
|
}, [this.id]);
|
||||||
|
return streams;
|
||||||
|
};
|
||||||
|
|
||||||
|
Blob.prototype.toString = function() {
|
||||||
|
return "#<Blob '" + this.id + "'>";
|
||||||
|
};
|
||||||
|
|
||||||
|
return Blob;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,153 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Actor, Commit, Tree, _;
|
||||||
|
|
||||||
|
_ = require('underscore');
|
||||||
|
|
||||||
|
Actor = require('./actor');
|
||||||
|
|
||||||
|
Tree = require('./tree');
|
||||||
|
|
||||||
|
module.exports = Commit = (function() {
|
||||||
|
function Commit(repo1, id1, parents, tree, author1, authored_date1, committer1, committed_date1, gpgsig1, message) {
|
||||||
|
this.repo = repo1;
|
||||||
|
this.id = id1;
|
||||||
|
this.author = author1;
|
||||||
|
this.authored_date = authored_date1;
|
||||||
|
this.committer = committer1;
|
||||||
|
this.committed_date = committed_date1;
|
||||||
|
this.gpgsig = gpgsig1;
|
||||||
|
this.message = message;
|
||||||
|
this.tree = _.memoize((function(_this) {
|
||||||
|
return function() {
|
||||||
|
return new Tree(_this.repo, tree);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
this.parents = _.memoize((function(_this) {
|
||||||
|
return function() {
|
||||||
|
return _.map(parents, function(parent) {
|
||||||
|
return new Commit(_this.repo, parent);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
Commit.prototype.toJSON = function() {
|
||||||
|
return {
|
||||||
|
id: this.id,
|
||||||
|
author: this.author,
|
||||||
|
authored_date: this.authored_date,
|
||||||
|
committer: this.committer,
|
||||||
|
committed_date: this.committed_date,
|
||||||
|
message: this.message
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Commit.find_all = function(repo, ref, options, callback) {
|
||||||
|
options = _.extend({
|
||||||
|
pretty: "raw"
|
||||||
|
}, options);
|
||||||
|
return repo.git("rev-list", options, ref, (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, _this.parse_commits(repo, stdout));
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Commit.find = function(repo, id, callback) {
|
||||||
|
var options;
|
||||||
|
options = {
|
||||||
|
pretty: "raw",
|
||||||
|
"max-count": 1
|
||||||
|
};
|
||||||
|
return repo.git("rev-list", options, id, (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, _this.parse_commits(repo, stdout)[0]);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Commit.find_commits = function(repo, ids, callback) {
|
||||||
|
var commits, next;
|
||||||
|
commits = [];
|
||||||
|
next = function(i) {
|
||||||
|
var id;
|
||||||
|
if (id = ids[i]) {
|
||||||
|
return Commit.find(repo, id, function(err, commit) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
commits.push(commit);
|
||||||
|
return next(i + 1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return callback(null, commits);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return next(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
Commit.parse_commits = function(repo, text) {
|
||||||
|
var author, author_line, authored_date, commits, committed_date, committer, committer_line, encoding, gpgsig, id, lines, message_lines, parents, ref1, ref2, tree;
|
||||||
|
commits = [];
|
||||||
|
lines = text.split("\n");
|
||||||
|
while (lines.length) {
|
||||||
|
id = _.last(lines.shift().split(" "));
|
||||||
|
if (!id) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tree = _.last(lines.shift().split(" "));
|
||||||
|
parents = [];
|
||||||
|
while (/^parent/.test(lines[0])) {
|
||||||
|
parents.push(_.last(lines.shift().split(" ")));
|
||||||
|
}
|
||||||
|
author_line = lines.shift();
|
||||||
|
ref1 = this.actor(author_line), author = ref1[0], authored_date = ref1[1];
|
||||||
|
committer_line = lines.shift();
|
||||||
|
ref2 = this.actor(committer_line), committer = ref2[0], committed_date = ref2[1];
|
||||||
|
gpgsig = [];
|
||||||
|
if (/^gpgsig/.test(lines[0])) {
|
||||||
|
gpgsig.push(lines.shift().replace(/^gpgsig /, ''));
|
||||||
|
while (!/^ -----END PGP SIGNATURE-----$/.test(lines[0])) {
|
||||||
|
gpgsig.push(lines.shift());
|
||||||
|
}
|
||||||
|
gpgsig.push(lines.shift());
|
||||||
|
}
|
||||||
|
while (/^kilnhgcopies/.test(lines[0])) {
|
||||||
|
lines.shift();
|
||||||
|
}
|
||||||
|
if (/^encoding/.test(lines[0])) {
|
||||||
|
encoding = _.last(lines.shift().split(" "));
|
||||||
|
}
|
||||||
|
if (lines.length) {
|
||||||
|
lines.shift();
|
||||||
|
}
|
||||||
|
message_lines = [];
|
||||||
|
while (/^ {4}/.test(lines[0])) {
|
||||||
|
message_lines.push(lines.shift().slice(4));
|
||||||
|
}
|
||||||
|
while ((lines[0] != null) && !lines[0].length) {
|
||||||
|
lines.shift();
|
||||||
|
}
|
||||||
|
commits.push(new Commit(repo, id, parents, tree, author, authored_date, committer, committed_date, gpgsig.join("\n"), message_lines.join("\n")));
|
||||||
|
}
|
||||||
|
return commits;
|
||||||
|
};
|
||||||
|
|
||||||
|
Commit.actor = function(line) {
|
||||||
|
var actor, epoch, m, ref1;
|
||||||
|
ref1 = /^.+? (.*) (\d+) .*$/.exec(line), m = ref1[0], actor = ref1[1], epoch = ref1[2];
|
||||||
|
return [Actor.from_string(actor), new Date(1000 * +epoch)];
|
||||||
|
};
|
||||||
|
|
||||||
|
return Commit;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var C, Config;
|
||||||
|
|
||||||
|
module.exports = C = function(repo, callback) {
|
||||||
|
return repo.git("config", {
|
||||||
|
list: true
|
||||||
|
}, function(err, stdout, stderr) {
|
||||||
|
var config;
|
||||||
|
config = new Config(repo);
|
||||||
|
config.parse(stdout);
|
||||||
|
return callback(err, config);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
C.Config = Config = (function() {
|
||||||
|
function Config(repo1) {
|
||||||
|
this.repo = repo1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Config.prototype.parse = function(text) {
|
||||||
|
var i, key, len, line, ref, ref1, results, value;
|
||||||
|
this.items = {};
|
||||||
|
ref = text.split("\n");
|
||||||
|
results = [];
|
||||||
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
|
line = ref[i];
|
||||||
|
if (line.length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ref1 = line.split('='), key = ref1[0], value = ref1[1];
|
||||||
|
results.push(this.items[key] = value);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Config;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,119 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Blob, Diff, _;
|
||||||
|
|
||||||
|
_ = require('underscore');
|
||||||
|
|
||||||
|
Blob = require('./blob');
|
||||||
|
|
||||||
|
module.exports = Diff = (function() {
|
||||||
|
function Diff(repo1, a_path1, b_path1, a_blob, b_blob, a_mode1, b_mode1, new_file1, deleted_file1, diff1, renamed_file1, similarity_index) {
|
||||||
|
this.repo = repo1;
|
||||||
|
this.a_path = a_path1;
|
||||||
|
this.b_path = b_path1;
|
||||||
|
this.a_mode = a_mode1;
|
||||||
|
this.b_mode = b_mode1;
|
||||||
|
this.new_file = new_file1;
|
||||||
|
this.deleted_file = deleted_file1;
|
||||||
|
this.diff = diff1;
|
||||||
|
this.renamed_file = renamed_file1 != null ? renamed_file1 : false;
|
||||||
|
this.similarity_index = similarity_index != null ? similarity_index : 0;
|
||||||
|
if (a_blob !== null) {
|
||||||
|
this.a_blob = new Blob(this.repo, {
|
||||||
|
id: a_blob
|
||||||
|
});
|
||||||
|
this.a_sha = a_blob;
|
||||||
|
}
|
||||||
|
if (b_blob !== null) {
|
||||||
|
this.b_blob = new Blob(this.repo, {
|
||||||
|
id: b_blob
|
||||||
|
});
|
||||||
|
this.b_sha = b_blob;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Diff.prototype.toJSON = function() {
|
||||||
|
return {
|
||||||
|
a_path: this.a_path,
|
||||||
|
b_path: this.b_path,
|
||||||
|
a_mode: this.a_mode,
|
||||||
|
b_mode: this.b_mode,
|
||||||
|
new_file: this.new_file,
|
||||||
|
deleted_file: this.deleted_file,
|
||||||
|
diff: this.diff,
|
||||||
|
renamed_file: this.renamed_file,
|
||||||
|
similarity_index: this.similarity_index
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Diff.parse = function(repo, text) {
|
||||||
|
var a_blob, a_mode, a_path, b_blob, b_mode, b_path, deleted_file, diff, diff_lines, diffs, lines, m, new_file, ref, ref1, ref2, ref3, ref4, ref5, renamed_file, sim_index;
|
||||||
|
lines = text.split("\n");
|
||||||
|
diffs = [];
|
||||||
|
while (lines.length && lines[0]) {
|
||||||
|
ref = /^diff\s--git\s"?a\/(.+?)"?\s"?b\/(.+)"?$/.exec(lines.shift()), m = ref[0], a_path = ref[1], b_path = ref[2];
|
||||||
|
if (/^old mode/.test(lines[0])) {
|
||||||
|
ref1 = /^old mode (\d+)/.exec(lines.shift()), m = ref1[0], a_mode = ref1[1];
|
||||||
|
ref2 = /^new mode (\d+)/.exec(lines.shift()), m = ref2[0], b_mode = ref2[1];
|
||||||
|
}
|
||||||
|
if (!lines.length || /^diff --git/.test(lines[0])) {
|
||||||
|
diffs.push(new Diff(repo, a_path, b_path, null, null, a_mode, b_mode, false, false, null));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sim_index = 0;
|
||||||
|
new_file = false;
|
||||||
|
deleted_file = false;
|
||||||
|
renamed_file = false;
|
||||||
|
if (/^new file/.test(lines[0])) {
|
||||||
|
ref3 = /^new file mode (.+)$/.exec(lines.shift()), m = ref3[0], b_mode = ref3[1];
|
||||||
|
a_mode = null;
|
||||||
|
new_file = true;
|
||||||
|
} else if (/^deleted file/.test(lines[0])) {
|
||||||
|
ref4 = /^deleted file mode (.+)$/.exec(lines.shift()), m = ref4[0], a_mode = ref4[1];
|
||||||
|
b_mode = null;
|
||||||
|
deleted_file = true;
|
||||||
|
} else if (m = /^similarity index (\d+)\%/.exec(lines[0])) {
|
||||||
|
sim_index = m[1].to_i;
|
||||||
|
renamed_file = true;
|
||||||
|
lines.shift();
|
||||||
|
lines.shift();
|
||||||
|
}
|
||||||
|
ref5 = /^index\s([0-9A-Fa-f]+)\.\.([0-9A-Fa-f]+)\s?(.+)?$/.exec(lines.shift()), m = ref5[0], a_blob = ref5[1], b_blob = ref5[2], b_mode = ref5[3];
|
||||||
|
if (b_mode) {
|
||||||
|
b_mode = b_mode.trim();
|
||||||
|
}
|
||||||
|
diff_lines = [];
|
||||||
|
while (lines[0] && !/^diff/.test(lines[0])) {
|
||||||
|
diff_lines.push(lines.shift());
|
||||||
|
}
|
||||||
|
diff = diff_lines.join("\n");
|
||||||
|
diffs.push(new Diff(repo, a_path, b_path, a_blob, b_blob, a_mode, b_mode, new_file, deleted_file, diff, renamed_file, sim_index));
|
||||||
|
}
|
||||||
|
return diffs;
|
||||||
|
};
|
||||||
|
|
||||||
|
Diff.parse_raw = function(repo, text) {
|
||||||
|
var a_mode, a_path, a_sha, b_mode, b_path, b_sha, deleted_file, diffs, i, len, line, lines, new_file, ref, renamed_file, status;
|
||||||
|
lines = _.compact(text.split("\n"));
|
||||||
|
diffs = [];
|
||||||
|
for (i = 0, len = lines.length; i < len; i++) {
|
||||||
|
line = lines[i];
|
||||||
|
line = line.slice(1);
|
||||||
|
line = line.replace(/\.\.\./g, '');
|
||||||
|
ref = line.split(/\s/), a_mode = ref[0], b_mode = ref[1], a_sha = ref[2], b_sha = ref[3], status = ref[4], a_path = ref[5], b_path = ref[6];
|
||||||
|
if (!b_path) {
|
||||||
|
b_path = a_path;
|
||||||
|
}
|
||||||
|
new_file = status === 'M';
|
||||||
|
deleted_file = status === 'D';
|
||||||
|
renamed_file = status === 'R';
|
||||||
|
diffs.push(new Diff(repo, a_path, b_path, a_sha, b_sha, a_mode, b_mode, new_file, deleted_file, null, renamed_file, null));
|
||||||
|
}
|
||||||
|
return diffs;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Diff;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,128 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Git, exec, fs, options_to_argv, ref, spawn;
|
||||||
|
|
||||||
|
fs = require('fs');
|
||||||
|
|
||||||
|
ref = require('child_process'), exec = ref.exec, spawn = ref.spawn;
|
||||||
|
|
||||||
|
module.exports = Git = function(git_dir, dot_git, git_options) {
|
||||||
|
var git;
|
||||||
|
git_options || (git_options = {});
|
||||||
|
dot_git || (dot_git = git_dir + "/.git");
|
||||||
|
git = function(command, options, args, callback, encoding) {
|
||||||
|
var bash, ref1, ref2;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [args, callback], callback = ref1[0], args = ref1[1];
|
||||||
|
}
|
||||||
|
if (!callback) {
|
||||||
|
ref2 = [options, callback], callback = ref2[0], options = ref2[1];
|
||||||
|
}
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options = options_to_argv(options);
|
||||||
|
options = options.join(" ");
|
||||||
|
if (args == null) {
|
||||||
|
args = [];
|
||||||
|
}
|
||||||
|
if (args instanceof Array) {
|
||||||
|
args = args.join(" ");
|
||||||
|
}
|
||||||
|
if (encoding == null) {
|
||||||
|
encoding = 'utf8';
|
||||||
|
}
|
||||||
|
bash = (git_options.bin || Git.bin) + " " + command + " " + options + " " + args;
|
||||||
|
exec(bash, {
|
||||||
|
cwd: git_dir,
|
||||||
|
encoding: encoding,
|
||||||
|
maxBuffer: 5000 * 1024
|
||||||
|
}, callback);
|
||||||
|
return bash;
|
||||||
|
};
|
||||||
|
git.cmd = function(command, options, args, callback, encoding) {
|
||||||
|
return git(command, options, args, encoding, callback);
|
||||||
|
};
|
||||||
|
git.streamCmd = function(command, options, args, encoding) {
|
||||||
|
var allargs, process;
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options = options_to_argv(options);
|
||||||
|
if (args == null) {
|
||||||
|
args = [];
|
||||||
|
}
|
||||||
|
allargs = [command].concat(options).concat(args);
|
||||||
|
if (encoding == null) {
|
||||||
|
encoding = 'utf8';
|
||||||
|
}
|
||||||
|
process = spawn(Git.bin, allargs, {
|
||||||
|
cwd: git_dir,
|
||||||
|
encoding: encoding
|
||||||
|
});
|
||||||
|
return [process.stdout, process.stderr];
|
||||||
|
};
|
||||||
|
git.list_remotes = function(callback) {
|
||||||
|
return fs.readdir(dot_git + "/refs/remotes", function(err, files) {
|
||||||
|
return callback(err, files || []);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
git.refs = function(type, options, callback) {
|
||||||
|
var prefix, ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [options, callback], callback = ref1[0], options = ref1[1];
|
||||||
|
}
|
||||||
|
prefix = "refs/" + type + "s/";
|
||||||
|
return git("show-ref", function(err, text) {
|
||||||
|
var i, id, len, line, matches, name, ref2, ref3;
|
||||||
|
if ((err != null ? err.code : void 0) === 1) {
|
||||||
|
err = null;
|
||||||
|
}
|
||||||
|
matches = [];
|
||||||
|
ref2 = (text || "").split("\n");
|
||||||
|
for (i = 0, len = ref2.length; i < len; i++) {
|
||||||
|
line = ref2[i];
|
||||||
|
if (!line) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ref3 = line.split(' '), id = ref3[0], name = ref3[1];
|
||||||
|
if (name.substr(0, prefix.length) === prefix) {
|
||||||
|
matches.push((name.substr(prefix.length)) + " " + id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback(err, matches.join("\n"));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return git;
|
||||||
|
};
|
||||||
|
|
||||||
|
Git.bin = "git";
|
||||||
|
|
||||||
|
Git.options_to_argv = options_to_argv = function(options) {
|
||||||
|
var argv, key, val;
|
||||||
|
argv = [];
|
||||||
|
for (key in options) {
|
||||||
|
val = options[key];
|
||||||
|
if (key.length === 1) {
|
||||||
|
if (val === true) {
|
||||||
|
argv.push("-" + key);
|
||||||
|
} else if (val === false) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
argv.push("-" + key);
|
||||||
|
argv.push(val);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (val === true) {
|
||||||
|
argv.push("--" + key);
|
||||||
|
} else if (val === false) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
argv.push("--" + key + "=" + val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return argv;
|
||||||
|
};
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,50 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Git, Repo, exec;
|
||||||
|
|
||||||
|
exec = require('child_process').exec;
|
||||||
|
|
||||||
|
Repo = require('./repo');
|
||||||
|
|
||||||
|
module.exports = Git = function(path, bare, git_options) {
|
||||||
|
if (bare == null) {
|
||||||
|
bare = false;
|
||||||
|
}
|
||||||
|
if (git_options == null) {
|
||||||
|
git_options = {};
|
||||||
|
}
|
||||||
|
return new Repo(path, bare, git_options);
|
||||||
|
};
|
||||||
|
|
||||||
|
Git.init = function(path, bare, callback) {
|
||||||
|
var bash, ref;
|
||||||
|
if (!callback) {
|
||||||
|
ref = [callback, bare], bare = ref[0], callback = ref[1];
|
||||||
|
}
|
||||||
|
if (bare) {
|
||||||
|
bash = "git init --bare .";
|
||||||
|
} else {
|
||||||
|
bash = "git init .";
|
||||||
|
}
|
||||||
|
return exec(bash, {
|
||||||
|
cwd: path
|
||||||
|
}, function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(err, new Repo(path, bare));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Git.clone = function(repository, path, callback) {
|
||||||
|
var bash;
|
||||||
|
bash = "git clone " + repository + " " + path;
|
||||||
|
return exec(bash, function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(err, new Repo(path));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,96 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Commit, Head, Ref, fs,
|
||||||
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||||
|
hasProp = {}.hasOwnProperty;
|
||||||
|
|
||||||
|
fs = require('fs');
|
||||||
|
|
||||||
|
Commit = require('./commit');
|
||||||
|
|
||||||
|
exports.Ref = Ref = (function() {
|
||||||
|
function Ref(name1, commit1) {
|
||||||
|
this.name = name1;
|
||||||
|
this.commit = commit1;
|
||||||
|
this.repo = this.commit.repo;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref.prototype.toString = function() {
|
||||||
|
return "#<Ref '" + this.name + "'>";
|
||||||
|
};
|
||||||
|
|
||||||
|
Ref.find_all = function(repo, type, RefClass, callback) {
|
||||||
|
return repo.git.refs(type, {}, function(err, text) {
|
||||||
|
var id, ids, j, len, name, names, ref, ref1, ref2;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
names = [];
|
||||||
|
ids = [];
|
||||||
|
ref1 = text.split("\n");
|
||||||
|
for (j = 0, len = ref1.length; j < len; j++) {
|
||||||
|
ref = ref1[j];
|
||||||
|
if (!ref) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ref2 = ref.split(' '), name = ref2[0], id = ref2[1];
|
||||||
|
names.push(name);
|
||||||
|
ids.push(id);
|
||||||
|
}
|
||||||
|
return Commit.find_commits(repo, ids, function(err, commits) {
|
||||||
|
var i, k, len1, refs;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
refs = [];
|
||||||
|
for (i = k = 0, len1 = names.length; k < len1; i = ++k) {
|
||||||
|
name = names[i];
|
||||||
|
refs.push(new RefClass(name, commits[i]));
|
||||||
|
}
|
||||||
|
return callback(null, refs);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return Ref;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
exports.Head = Head = (function(superClass) {
|
||||||
|
extend(Head, superClass);
|
||||||
|
|
||||||
|
function Head() {
|
||||||
|
return Head.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
Head.find_all = function(repo, callback) {
|
||||||
|
return Ref.find_all(repo, "head", Head, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Head.current = function(repo, callback) {
|
||||||
|
return fs.readFile(repo.dot_git + "/HEAD", function(err, data) {
|
||||||
|
var branch, m, ref;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
ref = /ref: refs\/heads\/([^\s]+)/.exec(data);
|
||||||
|
if (!ref) {
|
||||||
|
return callback(new Error("Current branch is not a valid branch."));
|
||||||
|
}
|
||||||
|
m = ref[0], branch = ref[1];
|
||||||
|
return fs.readFile(repo.dot_git + "/refs/heads/" + branch, function(err, id) {
|
||||||
|
return Commit.find(repo, id, function(err, commit) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, new Head(branch, commit));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return Head;
|
||||||
|
|
||||||
|
})(Ref);
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,522 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Actor, Commit, Config, Diff, Head, Ref, Repo, Status, Tag, Tree, _, cmd, ref;
|
||||||
|
|
||||||
|
_ = require('underscore');
|
||||||
|
|
||||||
|
cmd = require('./git');
|
||||||
|
|
||||||
|
Actor = require('./actor');
|
||||||
|
|
||||||
|
Commit = require('./commit');
|
||||||
|
|
||||||
|
Config = require('./config');
|
||||||
|
|
||||||
|
Tree = require('./tree');
|
||||||
|
|
||||||
|
Diff = require('./diff');
|
||||||
|
|
||||||
|
Tag = require('./tag');
|
||||||
|
|
||||||
|
Status = require('./status');
|
||||||
|
|
||||||
|
ref = require('./ref'), Ref = ref.Ref, Head = ref.Head;
|
||||||
|
|
||||||
|
module.exports = Repo = (function() {
|
||||||
|
function Repo(path, bare, git_options) {
|
||||||
|
this.path = path;
|
||||||
|
this.bare = bare;
|
||||||
|
this.git_options = git_options;
|
||||||
|
if (this.bare) {
|
||||||
|
this.dot_git = this.path;
|
||||||
|
} else {
|
||||||
|
this.dot_git = this.path + "/.git";
|
||||||
|
}
|
||||||
|
this.git = cmd(this.path, this.dot_git, this.git_options);
|
||||||
|
}
|
||||||
|
|
||||||
|
Repo.prototype.identity = function(callback) {
|
||||||
|
return this.git("config", {}, ["user.email"], (function(_this) {
|
||||||
|
return function(err, stdout) {
|
||||||
|
var email;
|
||||||
|
if (stdout == null) {
|
||||||
|
stdout = '';
|
||||||
|
}
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
email = stdout != null ? stdout.trim() : void 0;
|
||||||
|
return _this.git("config", {}, ["user.name"], function(err, stdout) {
|
||||||
|
var name;
|
||||||
|
if (stdout == null) {
|
||||||
|
stdout = '';
|
||||||
|
}
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
name = stdout != null ? stdout.trim() : void 0;
|
||||||
|
return callback(null, new Actor(name, email));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.identify = function(actor, callback) {
|
||||||
|
return this.git("config", {}, ["user.email", "\"" + actor.email + "\""], (function(_this) {
|
||||||
|
return function(err) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return _this.git("config", {}, ["user.name", "\"" + actor.name + "\""], function(err) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.commits = function(start, limit, skip, callback) {
|
||||||
|
var options, ref1, ref2, ref3;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, skip], skip = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (!callback) {
|
||||||
|
ref2 = [callback, limit], limit = ref2[0], callback = ref2[1];
|
||||||
|
}
|
||||||
|
if (!callback) {
|
||||||
|
ref3 = [callback, start], start = ref3[0], callback = ref3[1];
|
||||||
|
}
|
||||||
|
if (!callback) {
|
||||||
|
throw new Error("a callback is required");
|
||||||
|
}
|
||||||
|
if (start == null) {
|
||||||
|
start = "master";
|
||||||
|
}
|
||||||
|
if (limit == null) {
|
||||||
|
limit = 10;
|
||||||
|
}
|
||||||
|
if (skip == null) {
|
||||||
|
skip = 0;
|
||||||
|
}
|
||||||
|
options = {
|
||||||
|
skip: skip
|
||||||
|
};
|
||||||
|
if (limit !== -1) {
|
||||||
|
options["max-count"] = limit;
|
||||||
|
}
|
||||||
|
return Commit.find_all(this, start, options, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.current_commit_id = function(callback) {
|
||||||
|
return this.git("rev-parse HEAD", {}, [], (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, _.first(stdout.split("\n")));
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.current_commit = function(callback) {
|
||||||
|
return this.current_commit_id((function(_this) {
|
||||||
|
return function(err, commit_id) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return Commit.find(_this, commit_id, callback);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.tree = function(treeish) {
|
||||||
|
if (treeish == null) {
|
||||||
|
treeish = "master";
|
||||||
|
}
|
||||||
|
return new Tree(this, treeish);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.diff = function(commitA, commitB) {
|
||||||
|
var callback, options, paths, ref1, ref2;
|
||||||
|
ref1 = [[], {}], paths = ref1[0], options = ref1[1];
|
||||||
|
if (arguments.length === 3) {
|
||||||
|
callback = arguments[2];
|
||||||
|
} else if (arguments.length === 4) {
|
||||||
|
callback = arguments[3];
|
||||||
|
if (arguments[2] instanceof Array) {
|
||||||
|
paths = arguments[2];
|
||||||
|
} else if (arguments[2] instanceof Object) {
|
||||||
|
options = arguments[2];
|
||||||
|
}
|
||||||
|
} else if (arguments.length === 5) {
|
||||||
|
ref2 = Array.prototype.slice.call(arguments, 2), paths = ref2[0], options = ref2[1], callback = ref2[2];
|
||||||
|
}
|
||||||
|
if (_.isObject(commitA)) {
|
||||||
|
commitA = commitA.id;
|
||||||
|
}
|
||||||
|
if (_.isObject(commitB)) {
|
||||||
|
commitB = commitB.id;
|
||||||
|
}
|
||||||
|
return this.git("diff", options, _.flatten([commitA, commitB, "--", paths]), (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
if (_.has(options, 'raw')) {
|
||||||
|
return callback(err, Diff.parse_raw(_this, stdout));
|
||||||
|
} else {
|
||||||
|
return callback(err, Diff.parse(_this, stdout));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(this), 'binary');
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remotes = function(callback) {
|
||||||
|
return Ref.find_all(this, "remote", Ref, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_list = function(callback) {
|
||||||
|
return this.git.list_remotes(callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_add = function(name, url, callback) {
|
||||||
|
return this.git("remote", {}, ["add", name, url], function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_remove = function(name, callback) {
|
||||||
|
return this.git("remote", {}, ["rm", name], function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_add_url = function(name, url, callback) {
|
||||||
|
return this.git("remote set-url", {}, ["--add", name, url], function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_set_url = function(name, url, callback) {
|
||||||
|
return this.git("remote set-url", {}, [name, url], function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_delete_url = function(name, url, callback) {
|
||||||
|
return this.git("remote set-url", {}, ["--delete", name, url], function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_fetch = function(name, callback) {
|
||||||
|
return this.git("fetch", {}, name, function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remote_push = function(name, branch, callback) {
|
||||||
|
var args;
|
||||||
|
if (!callback) {
|
||||||
|
callback = branch;
|
||||||
|
args = name;
|
||||||
|
} else {
|
||||||
|
args = [name, branch];
|
||||||
|
}
|
||||||
|
return this.git("push", {}, args, function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.merge = function(name, callback) {
|
||||||
|
return this.git("merge", {}, name, function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.status = function(options, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
return Status(this, options, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.ls_files = function(options, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
return this.git("ls-files", options, (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, _this.parse_lsFiles(stdout, options));
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.config = function(callback) {
|
||||||
|
return Config(this, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.tags = function(callback) {
|
||||||
|
return Tag.find_all(this, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.create_tag = function(name, options, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
return this.git("tag", options, [name], callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.delete_tag = function(name, callback) {
|
||||||
|
return this.git("tag", {
|
||||||
|
d: name
|
||||||
|
}, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.branches = function(callback) {
|
||||||
|
return Head.find_all(this, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.create_branch = function(name, callback) {
|
||||||
|
return this.git("branch", {}, name, function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.delete_branch = function(name, callback) {
|
||||||
|
return this.git("branch", {
|
||||||
|
d: true
|
||||||
|
}, name, function(err, stdout, stderr) {
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.branch = function(name, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, name], name = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (!name) {
|
||||||
|
return Head.current(this, callback);
|
||||||
|
} else {
|
||||||
|
return this.branches(function(err, heads) {
|
||||||
|
var head, i, len;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
for (i = 0, len = heads.length; i < len; i++) {
|
||||||
|
head = heads[i];
|
||||||
|
if (head.name === name) {
|
||||||
|
return callback(null, head);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback(new Error("No branch named '" + name + "' found"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.checkout = function(treeish, callback) {
|
||||||
|
return this.git("checkout", {}, treeish, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.clean = function(options, callback) {
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
return this.git("clean", options, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.reset = function(treeish, options, callback) {
|
||||||
|
var ref1, ref2, ref3;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (!callback) {
|
||||||
|
ref2 = [callback, treeish], treeish = ref2[0], callback = ref2[1];
|
||||||
|
}
|
||||||
|
if (typeof treeish === 'object') {
|
||||||
|
ref3 = [options, treeish], treeish = ref3[0], options = ref3[1];
|
||||||
|
}
|
||||||
|
if (treeish == null) {
|
||||||
|
treeish = 'HEAD';
|
||||||
|
}
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
return this.git("reset", options, treeish, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.checkoutFile = function(files, options, callback) {
|
||||||
|
var ref1, ref2, ref3;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (!callback) {
|
||||||
|
ref2 = [callback, files], files = ref2[0], callback = ref2[1];
|
||||||
|
}
|
||||||
|
if (typeof files === 'object') {
|
||||||
|
ref3 = [options, files], files = ref3[0], options = ref3[1];
|
||||||
|
}
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
if (files == null) {
|
||||||
|
files = '.';
|
||||||
|
}
|
||||||
|
if (_.isString(files)) {
|
||||||
|
files = [files];
|
||||||
|
}
|
||||||
|
return this.git("checkout", options, _.flatten(['--', files]), callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.commit = function(message, options, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options = _.extend(options, {
|
||||||
|
m: "\"" + message + "\""
|
||||||
|
});
|
||||||
|
if (options.author != null) {
|
||||||
|
options.author = "\"" + options.author + "\"";
|
||||||
|
}
|
||||||
|
return this.git("commit", options, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.add = function(files, options, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
if (_.isString(files)) {
|
||||||
|
files = [files];
|
||||||
|
}
|
||||||
|
return this.git("add", options, files, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.remove = function(files, options, callback) {
|
||||||
|
var ref1;
|
||||||
|
if (!callback) {
|
||||||
|
ref1 = [callback, options], options = ref1[0], callback = ref1[1];
|
||||||
|
}
|
||||||
|
if (options == null) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
if (_.isString(files)) {
|
||||||
|
files = [files];
|
||||||
|
}
|
||||||
|
return this.git("rm", options, files, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.revert = function(sha, callback) {
|
||||||
|
return this.git("revert", {}, sha, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.sync = function(remote_name, branch_name, callback) {
|
||||||
|
var branch, ref1, ref2, ref3, remote;
|
||||||
|
if (typeof callback === "function") {
|
||||||
|
ref1 = [remote_name, branch_name], remote = ref1[0], branch = ref1[1];
|
||||||
|
}
|
||||||
|
if (typeof branch_name === "function") {
|
||||||
|
ref2 = ["origin", remote_name, branch_name], remote = ref2[0], branch = ref2[1], callback = ref2[2];
|
||||||
|
}
|
||||||
|
if (typeof remote_name === "function") {
|
||||||
|
ref3 = ["origin", "master", remote_name], remote = ref3[0], branch = ref3[1], callback = ref3[2];
|
||||||
|
}
|
||||||
|
return this.status((function(_this) {
|
||||||
|
return function(err, status) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return _this.git("stash", {}, ["save", "-u"], function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(stderr);
|
||||||
|
}
|
||||||
|
return _this.git("pull", {}, [remote, branch], function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(stderr);
|
||||||
|
}
|
||||||
|
return _this.git("push", {}, [remote, branch], function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(stderr);
|
||||||
|
}
|
||||||
|
if (!(status != null ? status.clean : void 0)) {
|
||||||
|
return _this.git("stash", {}, ["pop"], function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(stderr);
|
||||||
|
}
|
||||||
|
return callback(null);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return callback(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.pull = function(remote_name, branch_name, callback) {
|
||||||
|
var branch, ref1, ref2, ref3, remote;
|
||||||
|
if (typeof callback === "function") {
|
||||||
|
ref1 = [remote_name, branch_name], remote = ref1[0], branch = ref1[1];
|
||||||
|
}
|
||||||
|
if (typeof branch_name === "function") {
|
||||||
|
ref2 = ["origin", remote_name, branch_name], remote = ref2[0], branch = ref2[1], callback = ref2[2];
|
||||||
|
}
|
||||||
|
if (typeof remote_name === "function") {
|
||||||
|
ref3 = ["origin", "master", remote_name], remote = ref3[0], branch = ref3[1], callback = ref3[2];
|
||||||
|
}
|
||||||
|
return this.status((function(_this) {
|
||||||
|
return function(err, status) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return _this.git("pull", {}, [remote, branch], function(err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
return callback(stderr);
|
||||||
|
}
|
||||||
|
return callback(null);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Repo.prototype.parse_lsFiles = function(text, options) {
|
||||||
|
var files, line, lines;
|
||||||
|
files = [];
|
||||||
|
if (_.has(options, 'z')) {
|
||||||
|
lines = text.split("\0");
|
||||||
|
} else {
|
||||||
|
lines = text.split("\n");
|
||||||
|
}
|
||||||
|
while (lines.length) {
|
||||||
|
line = lines.shift().split(" ");
|
||||||
|
files.push(line);
|
||||||
|
while ((lines[0] != null) && !lines[0].length) {
|
||||||
|
lines.shift();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return files;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Repo;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,49 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var S, Status;
|
||||||
|
|
||||||
|
module.exports = S = function(repo, options, callback) {
|
||||||
|
return repo.git("status --porcelain", options, function(err, stdout, stderr) {
|
||||||
|
var status;
|
||||||
|
status = new Status(repo);
|
||||||
|
status.parse(stdout);
|
||||||
|
return callback(err, status);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
S.Status = Status = (function() {
|
||||||
|
function Status(repo1) {
|
||||||
|
this.repo = repo1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status.prototype.parse = function(text) {
|
||||||
|
var file, i, len, line, ref, results, type;
|
||||||
|
this.files = {};
|
||||||
|
this.clean = text.length === 0;
|
||||||
|
ref = text.split("\n");
|
||||||
|
results = [];
|
||||||
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
|
line = ref[i];
|
||||||
|
if (line.length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
file = line.substr(3);
|
||||||
|
type = line.substr(0, 2);
|
||||||
|
this.files[file] = {
|
||||||
|
staged: line[0] !== " " && line[0] !== "?",
|
||||||
|
tracked: line[0] !== "?"
|
||||||
|
};
|
||||||
|
if (type !== "??") {
|
||||||
|
results.push(this.files[file].type = type.trim());
|
||||||
|
} else {
|
||||||
|
results.push(void 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
57
_site/node_modules/gulp-gh-pages/node_modules/gift/lib/submodule.js
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Submodule;
|
||||||
|
|
||||||
|
module.exports = Submodule = (function() {
|
||||||
|
function Submodule(repo1, options) {
|
||||||
|
this.repo = repo1;
|
||||||
|
this.id = options.id, this.name = options.name, this.mode = options.mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
Submodule.prototype.url = function(treeish, callback) {
|
||||||
|
var ref;
|
||||||
|
if (!callback) {
|
||||||
|
ref = [callback, treeish], treeish = ref[0], callback = ref[1];
|
||||||
|
}
|
||||||
|
if (treeish == null) {
|
||||||
|
treeish = "master";
|
||||||
|
}
|
||||||
|
return Submodule.config(this.repo, treeish, (function(_this) {
|
||||||
|
return function(err, config) {
|
||||||
|
return callback(err, config != null ? config[_this.name].url : void 0);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Submodule.config = function(repo, treeish, callback) {
|
||||||
|
return repo.tree(treeish).find(".gitmodules", function(err, blob) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return blob.data(function(err, data) {
|
||||||
|
var conf, current, line, lines, match;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
conf = {};
|
||||||
|
lines = data.split("\n");
|
||||||
|
current = null;
|
||||||
|
while (lines.length) {
|
||||||
|
line = lines.shift();
|
||||||
|
if (match = /^\[submodule "(.+)"\]$/.exec(line)) {
|
||||||
|
current = match[1];
|
||||||
|
conf[current] = {};
|
||||||
|
} else if (match = /^\s+([^\s]+)\s+[=]\s+(.+)$/.exec(line)) {
|
||||||
|
conf[current][match[1]] = match[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback(null, conf);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return Submodule;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,87 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Actor, Commit, Ref, Tag, _,
|
||||||
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||||
|
hasProp = {}.hasOwnProperty;
|
||||||
|
|
||||||
|
_ = require('underscore');
|
||||||
|
|
||||||
|
Commit = require('./commit');
|
||||||
|
|
||||||
|
Actor = require('./actor');
|
||||||
|
|
||||||
|
Ref = require('./ref').Ref;
|
||||||
|
|
||||||
|
module.exports = Tag = (function(superClass) {
|
||||||
|
extend(Tag, superClass);
|
||||||
|
|
||||||
|
function Tag() {
|
||||||
|
return Tag.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
Tag.find_all = function(repo, callback) {
|
||||||
|
return Ref.find_all(repo, "tag", Tag, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Tag.prototype.message = function(callback) {
|
||||||
|
return this.lazy(function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, data.message);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Tag.prototype.tagger = function(callback) {
|
||||||
|
return this.lazy(function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, data.tagger);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Tag.prototype.tag_date = function(callback) {
|
||||||
|
return this.lazy(function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, data.tag_date);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Tag.prototype.lazy = function(callback) {
|
||||||
|
if (this._lazy_data) {
|
||||||
|
return callback(null, this._lazy_data);
|
||||||
|
}
|
||||||
|
return this.repo.git("cat-file", {}, ["tag", this.name], (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
var author, author_line, data, epoch, line, lines, m, message, ref;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
lines = stdout.split("\n");
|
||||||
|
data = {};
|
||||||
|
lines.shift();
|
||||||
|
lines.shift();
|
||||||
|
lines.shift();
|
||||||
|
author_line = lines.shift();
|
||||||
|
ref = /^.+? (.*) (\d+) .*$/.exec(author_line), m = ref[0], author = ref[1], epoch = ref[2];
|
||||||
|
data.tagger = Actor.from_string(author);
|
||||||
|
data.tag_date = new Date(epoch);
|
||||||
|
lines.shift();
|
||||||
|
message = [];
|
||||||
|
while (line = lines.shift()) {
|
||||||
|
message.push(line);
|
||||||
|
}
|
||||||
|
data.message = message.join("\n");
|
||||||
|
return callback(null, (_this._lazy_data = data));
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
return Tag;
|
||||||
|
|
||||||
|
})(Ref);
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -0,0 +1,140 @@
|
||||||
|
// Generated by CoffeeScript 1.9.1
|
||||||
|
(function() {
|
||||||
|
var Blob, Submodule, Tree, _;
|
||||||
|
|
||||||
|
_ = require('underscore');
|
||||||
|
|
||||||
|
Blob = require('./blob');
|
||||||
|
|
||||||
|
Submodule = require('./submodule');
|
||||||
|
|
||||||
|
module.exports = Tree = (function() {
|
||||||
|
function Tree(repo, options) {
|
||||||
|
this.repo = repo;
|
||||||
|
if (_.isString(options)) {
|
||||||
|
this.id = options;
|
||||||
|
} else {
|
||||||
|
this.id = options.id, this.name = options.name, this.mode = options.mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Tree.prototype.contents = function(callback) {
|
||||||
|
if (this._contents) {
|
||||||
|
return callback(null, this._contents);
|
||||||
|
}
|
||||||
|
return this.repo.git("ls-tree", {}, this.id, (function(_this) {
|
||||||
|
return function(err, stdout, stderr) {
|
||||||
|
var i, len, line, ref;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
_this._contents = [];
|
||||||
|
ref = stdout.split("\n");
|
||||||
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
|
line = ref[i];
|
||||||
|
if (line) {
|
||||||
|
_this._contents.push(_this.content_from_string(line));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback(null, _this._contents);
|
||||||
|
};
|
||||||
|
})(this), 'binary');
|
||||||
|
};
|
||||||
|
|
||||||
|
Tree.prototype.blobs = function(callback) {
|
||||||
|
return this.contents(function(err, children) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, _.filter(children, function(child) {
|
||||||
|
return child instanceof Blob;
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Tree.prototype.trees = function(callback) {
|
||||||
|
return this.contents(function(err, children) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, _.filter(children, function(child) {
|
||||||
|
return child instanceof Tree;
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Tree.prototype.find = function(file, callback) {
|
||||||
|
var dir, ref, rest;
|
||||||
|
if (/\//.test(file)) {
|
||||||
|
ref = file.split("/", 2), dir = ref[0], rest = ref[1];
|
||||||
|
return this.trees((function(_this) {
|
||||||
|
return function(err, _trees) {
|
||||||
|
var i, len, tree;
|
||||||
|
for (i = 0, len = _trees.length; i < len; i++) {
|
||||||
|
tree = _trees[i];
|
||||||
|
if (tree.name === dir) {
|
||||||
|
return tree.find(rest, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback(null, null);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
} else {
|
||||||
|
return this.contents(function(err, children) {
|
||||||
|
var child, i, len;
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
for (i = 0, len = children.length; i < len; i++) {
|
||||||
|
child = children[i];
|
||||||
|
if (child.name === file) {
|
||||||
|
return callback(null, child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback(null, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Tree.prototype.content_from_string = function(line) {
|
||||||
|
var id, mode, name, ref, type;
|
||||||
|
ref = line.split(/[\t ]+/, 4), mode = ref[0], type = ref[1], id = ref[2], name = ref[3];
|
||||||
|
switch (type) {
|
||||||
|
case "tree":
|
||||||
|
return new Tree(this.repo, {
|
||||||
|
id: id,
|
||||||
|
name: name,
|
||||||
|
mode: mode
|
||||||
|
});
|
||||||
|
case "blob":
|
||||||
|
return new Blob(this.repo, {
|
||||||
|
id: id,
|
||||||
|
name: name,
|
||||||
|
mode: mode
|
||||||
|
});
|
||||||
|
case "link":
|
||||||
|
return new Blob(this.repo, {
|
||||||
|
id: id,
|
||||||
|
name: name,
|
||||||
|
mode: mode
|
||||||
|
});
|
||||||
|
case "commit":
|
||||||
|
return new Submodule(this.repo, {
|
||||||
|
id: id,
|
||||||
|
name: name,
|
||||||
|
mode: mode
|
||||||
|
});
|
||||||
|
default:
|
||||||
|
throw new Error("Invalid object type: '" + type + "'");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Tree.prototype.toString = function() {
|
||||||
|
return "#<Tree '" + this.id + "'>";
|
||||||
|
};
|
||||||
|
|
||||||
|
return Tree;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
23
_site/node_modules/gulp-gh-pages/node_modules/gift/node_modules/underscore/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
|
||||||
|
Reporters & Editors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
22
_site/node_modules/gulp-gh-pages/node_modules/gift/node_modules/underscore/README.md
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
__
|
||||||
|
/\ \ __
|
||||||
|
__ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____
|
||||||
|
/\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\
|
||||||
|
\ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\
|
||||||
|
\ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/
|
||||||
|
\/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/
|
||||||
|
\ \____/
|
||||||
|
\/___/
|
||||||
|
|
||||||
|
Underscore.js is a utility-belt library for JavaScript that provides
|
||||||
|
support for the usual functional suspects (each, map, reduce, filter...)
|
||||||
|
without extending any core JavaScript objects.
|
||||||
|
|
||||||
|
For Docs, License, Tests, and pre-packed downloads, see:
|
||||||
|
http://underscorejs.org
|
||||||
|
|
||||||
|
Underscore is an open-sourced component of DocumentCloud:
|
||||||
|
https://github.com/documentcloud
|
||||||
|
|
||||||
|
Many thanks to our contributors:
|
||||||
|
https://github.com/jashkenas/underscore/contributors
|
69
_site/node_modules/gulp-gh-pages/node_modules/gift/node_modules/underscore/package.json
generated
vendored
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"name": "underscore",
|
||||||
|
"description": "JavaScript's functional programming helper library.",
|
||||||
|
"homepage": "http://underscorejs.org",
|
||||||
|
"keywords": [
|
||||||
|
"util",
|
||||||
|
"functional",
|
||||||
|
"server",
|
||||||
|
"client",
|
||||||
|
"browser"
|
||||||
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Jeremy Ashkenas",
|
||||||
|
"email": "jeremy@documentcloud.org"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/jashkenas/underscore.git"
|
||||||
|
},
|
||||||
|
"main": "underscore.js",
|
||||||
|
"version": "1.8.3",
|
||||||
|
"devDependencies": {
|
||||||
|
"docco": "*",
|
||||||
|
"eslint": "0.6.x",
|
||||||
|
"karma": "~0.12.31",
|
||||||
|
"karma-qunit": "~0.1.4",
|
||||||
|
"qunit-cli": "~0.2.0",
|
||||||
|
"uglify-js": "2.4.x"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "npm run test-node && npm run lint",
|
||||||
|
"lint": "eslint underscore.js test/*.js",
|
||||||
|
"test-node": "qunit-cli test/*.js",
|
||||||
|
"test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start",
|
||||||
|
"build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js",
|
||||||
|
"doc": "docco underscore.js"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"files": [
|
||||||
|
"underscore.js",
|
||||||
|
"underscore-min.js",
|
||||||
|
"underscore-min.map",
|
||||||
|
"LICENSE"
|
||||||
|
],
|
||||||
|
"gitHead": "e4743ab712b8ab42ad4ccb48b155034d02394e4d",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/jashkenas/underscore/issues"
|
||||||
|
},
|
||||||
|
"_id": "underscore@1.8.3",
|
||||||
|
"_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
|
||||||
|
"_from": "underscore@>=1.0.0 <2.0.0",
|
||||||
|
"_npmVersion": "1.4.28",
|
||||||
|
"_npmUser": {
|
||||||
|
"name": "jashkenas",
|
||||||
|
"email": "jashkenas@gmail.com"
|
||||||
|
},
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"name": "jashkenas",
|
||||||
|
"email": "jashkenas@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dist": {
|
||||||
|
"shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
|
||||||
|
"tarball": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"
|
||||||
|
}
|
6
_site/node_modules/gulp-gh-pages/node_modules/gift/node_modules/underscore/underscore-min.js
generated
vendored
Normal file
1
_site/node_modules/gulp-gh-pages/node_modules/gift/node_modules/underscore/underscore-min.map
generated
vendored
Normal file
1548
_site/node_modules/gulp-gh-pages/node_modules/gift/node_modules/underscore/underscore.js
generated
vendored
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
{
|
||||||
|
"name": "gift",
|
||||||
|
"version": "0.6.1",
|
||||||
|
"description": "a Git wrapper library",
|
||||||
|
"keywords": [
|
||||||
|
"git",
|
||||||
|
"cli",
|
||||||
|
"wrapper"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/notatestuser/gift",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/notatestuser/gift/issues"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "sentientwaffle",
|
||||||
|
"url": "http://sentientwaffle.github.com/"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "./lib/index",
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha --compilers coffee:\"./node_modules/coffee-script/lib/coffee-script/register\"",
|
||||||
|
"prepublish": "coffee -o lib -c src"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/notatestuser/gift.git"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": "1.x.x"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"coffee-script": "^1.7.1",
|
||||||
|
"fs-extra": "^0.9.1",
|
||||||
|
"mocha": "^1.20.1",
|
||||||
|
"should": "~4.0.4",
|
||||||
|
"sinon": "^1.7.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "> 0.4.1"
|
||||||
|
},
|
||||||
|
"gitHead": "707a54c6782402a964b07f029b38a55666f68e02",
|
||||||
|
"_id": "gift@0.6.1",
|
||||||
|
"_shasum": "c1698e6b6887164ed978a01095423cff65b8e79f",
|
||||||
|
"_from": "gift@>=0.6.1 <0.7.0",
|
||||||
|
"_npmVersion": "1.4.21",
|
||||||
|
"_npmUser": {
|
||||||
|
"name": "notatestuser",
|
||||||
|
"email": "notatestuser@gmail.com"
|
||||||
|
},
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"name": "sentientwaffle",
|
||||||
|
"email": "sentientwaffle@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "notatestuser",
|
||||||
|
"email": "notatestuser@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dist": {
|
||||||
|
"shasum": "c1698e6b6887164ed978a01095423cff65b8e79f",
|
||||||
|
"tarball": "http://registry.npmjs.org/gift/-/gift-0.6.1.tgz"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"_resolved": "https://registry.npmjs.org/gift/-/gift-0.6.1.tgz"
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2014 Fractal <contact@wearefractal.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
146
_site/node_modules/gulp-gh-pages/node_modules/gulp-util/README.md
generated
vendored
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
# gulp-util [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][depstat-image]][depstat-url]
|
||||||
|
|
||||||
|
## Information
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Package</td><td>gulp-util</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Description</td>
|
||||||
|
<td>Utility functions for gulp plugins</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Node Version</td>
|
||||||
|
<td>>= 0.10</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var gutil = require('gulp-util');
|
||||||
|
|
||||||
|
gutil.log('stuff happened', 'Really it did', gutil.colors.magenta('123'));
|
||||||
|
gutil.beep();
|
||||||
|
|
||||||
|
gutil.replaceExtension('file.coffee', '.js'); // file.js
|
||||||
|
|
||||||
|
var opt = {
|
||||||
|
name: 'todd',
|
||||||
|
file: someGulpFile
|
||||||
|
};
|
||||||
|
gutil.template('test <%= name %> <%= file.path %>', opt) // test todd /js/hi.js
|
||||||
|
```
|
||||||
|
|
||||||
|
### log(msg...)
|
||||||
|
|
||||||
|
Logs stuff. Already prefixed with [gulp] and all that. If you pass in multiple arguments it will join them by a space.
|
||||||
|
|
||||||
|
The default gulp coloring using gutil.colors.<color>:
|
||||||
|
```
|
||||||
|
values (files, module names, etc.) = cyan
|
||||||
|
numbers (times, counts, etc) = magenta
|
||||||
|
```
|
||||||
|
|
||||||
|
### colors
|
||||||
|
|
||||||
|
Is an instance of [chalk](https://github.com/sindresorhus/chalk).
|
||||||
|
|
||||||
|
### replaceExtension(path, newExtension)
|
||||||
|
|
||||||
|
Replaces a file extension in a path. Returns the new path.
|
||||||
|
|
||||||
|
### isStream(obj)
|
||||||
|
|
||||||
|
Returns true or false if an object is a stream.
|
||||||
|
|
||||||
|
### isBuffer(obj)
|
||||||
|
|
||||||
|
Returns true or false if an object is a Buffer.
|
||||||
|
|
||||||
|
### template(string[, data])
|
||||||
|
|
||||||
|
This is a lodash.template function wrapper. You must pass in a valid gulp file object so it is available to the user or it will error. You can not configure any of the delimiters. Look at the [lodash docs](http://lodash.com/docs#template) for more info.
|
||||||
|
|
||||||
|
## new File(obj)
|
||||||
|
|
||||||
|
This is just [vinyl](https://github.com/wearefractal/vinyl)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var file = new gutil.File({
|
||||||
|
base: path.join(__dirname, './fixtures/'),
|
||||||
|
cwd: __dirname,
|
||||||
|
path: path.join(__dirname, './fixtures/test.coffee')
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## noop()
|
||||||
|
|
||||||
|
Returns a stream that does nothing but pass data straight through.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// gulp should be called like this :
|
||||||
|
// $ gulp --type production
|
||||||
|
gulp.task('scripts', function() {
|
||||||
|
gulp.src('src/**/*.js')
|
||||||
|
.pipe(concat('script.js'))
|
||||||
|
.pipe(gutil.env.type === 'production' ? uglify() : gutil.noop())
|
||||||
|
.pipe(gulp.dest('dist/'));
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## buffer(cb)
|
||||||
|
|
||||||
|
This is similar to es.wait but instead of buffering text into one string it buffers anything into an array (so very useful for file objects).
|
||||||
|
|
||||||
|
Returns a stream that can be piped to.
|
||||||
|
|
||||||
|
The stream will emit one data event after the stream piped to it has ended. The data will be the same array passed to the callback.
|
||||||
|
|
||||||
|
Callback is optional and receives two arguments: error and data
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
gulp.src('stuff/*.js')
|
||||||
|
.pipe(gutil.buffer(function(err, files) {
|
||||||
|
|
||||||
|
}));
|
||||||
|
```
|
||||||
|
|
||||||
|
## new PluginError(pluginName, message[, options])
|
||||||
|
|
||||||
|
- pluginName should be the module name of your plugin
|
||||||
|
- message can be a string or an existing error
|
||||||
|
- By default the stack will not be shown. Set `options.showStack` to true if you think the stack is important for your error.
|
||||||
|
- If you pass an error in as the message the stack will be pulled from that, otherwise one will be created.
|
||||||
|
- Note that if you pass in a custom stack string you need to include the message along with that.
|
||||||
|
- Error properties will be included in `err.toString()`. Can be omitted by including `{showProperties: false}` in the options.
|
||||||
|
|
||||||
|
These are all acceptable forms of instantiation:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var err = new gutil.PluginError('test', {
|
||||||
|
message: 'something broke'
|
||||||
|
});
|
||||||
|
|
||||||
|
var err = new gutil.PluginError({
|
||||||
|
plugin: 'test',
|
||||||
|
message: 'something broke'
|
||||||
|
});
|
||||||
|
|
||||||
|
var err = new gutil.PluginError('test', 'something broke');
|
||||||
|
|
||||||
|
var err = new gutil.PluginError('test', 'something broke', {showStack: true});
|
||||||
|
|
||||||
|
var existingError = new Error('OMG');
|
||||||
|
var err = new gutil.PluginError('test', existingError, {showStack: true});
|
||||||
|
```
|
||||||
|
|
||||||
|
[npm-url]: https://www.npmjs.com/package/gulp-util
|
||||||
|
[npm-image]: https://badge.fury.io/js/gulp-util.svg
|
||||||
|
[travis-url]: https://travis-ci.org/gulpjs/gulp-util
|
||||||
|
[travis-image]: https://img.shields.io/travis/gulpjs/gulp-util.svg?branch=master
|
||||||
|
[coveralls-url]: https://coveralls.io/r/gulpjs/gulp-util
|
||||||
|
[coveralls-image]: https://img.shields.io/coveralls/gulpjs/gulp-util.svg
|
||||||
|
[depstat-url]: https://david-dm.org/gulpjs/gulp-util
|
||||||
|
[depstat-image]: https://david-dm.org/gulpjs/gulp-util.svg
|
|
@ -0,0 +1,18 @@
|
||||||
|
module.exports = {
|
||||||
|
File: require('vinyl'),
|
||||||
|
replaceExtension: require('replace-ext'),
|
||||||
|
colors: require('chalk'),
|
||||||
|
date: require('dateformat'),
|
||||||
|
log: require('./lib/log'),
|
||||||
|
template: require('./lib/template'),
|
||||||
|
env: require('./lib/env'),
|
||||||
|
beep: require('beeper'),
|
||||||
|
noop: require('./lib/noop'),
|
||||||
|
isStream: require('./lib/isStream'),
|
||||||
|
isBuffer: require('./lib/isBuffer'),
|
||||||
|
isNull: require('./lib/isNull'),
|
||||||
|
linefeed: '\n',
|
||||||
|
combine: require('./lib/combine'),
|
||||||
|
buffer: require('./lib/buffer'),
|
||||||
|
PluginError: require('./lib/PluginError')
|
||||||
|
};
|
130
_site/node_modules/gulp-gh-pages/node_modules/gulp-util/lib/PluginError.js
generated
vendored
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
var util = require('util');
|
||||||
|
var arrayDiffer = require('array-differ');
|
||||||
|
var arrayUniq = require('array-uniq');
|
||||||
|
var chalk = require('chalk');
|
||||||
|
var objectAssign = require('object-assign');
|
||||||
|
|
||||||
|
var nonEnumberableProperties = ['name', 'message', 'stack'];
|
||||||
|
var propertiesNotToDisplay = nonEnumberableProperties.concat(['plugin', 'showStack', 'showProperties', '__safety', '_stack']);
|
||||||
|
|
||||||
|
// wow what a clusterfuck
|
||||||
|
var parseOptions = function(plugin, message, opt) {
|
||||||
|
opt = opt || {};
|
||||||
|
if (typeof plugin === 'object') {
|
||||||
|
opt = plugin;
|
||||||
|
} else {
|
||||||
|
if (message instanceof Error) {
|
||||||
|
opt.error = message;
|
||||||
|
} else if (typeof message === 'object') {
|
||||||
|
opt = message;
|
||||||
|
} else {
|
||||||
|
opt.message = message;
|
||||||
|
}
|
||||||
|
opt.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
return objectAssign({
|
||||||
|
showStack: false,
|
||||||
|
showProperties: true
|
||||||
|
}, opt);
|
||||||
|
};
|
||||||
|
|
||||||
|
function PluginError(plugin, message, opt) {
|
||||||
|
if (!(this instanceof PluginError)) throw new Error('Call PluginError using new');
|
||||||
|
|
||||||
|
Error.call(this);
|
||||||
|
|
||||||
|
var options = parseOptions(plugin, message, opt);
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// if options has an error, grab details from it
|
||||||
|
if (options.error) {
|
||||||
|
// These properties are not enumerable, so we have to add them explicitly.
|
||||||
|
arrayUniq(Object.keys(options.error).concat(nonEnumberableProperties))
|
||||||
|
.forEach(function(prop) {
|
||||||
|
self[prop] = options.error[prop];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var properties = ['name', 'message', 'fileName', 'lineNumber', 'stack', 'showStack', 'showProperties', 'plugin'];
|
||||||
|
|
||||||
|
// options object can override
|
||||||
|
properties.forEach(function(prop) {
|
||||||
|
if (prop in options) this[prop] = options[prop];
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
// defaults
|
||||||
|
if (!this.name) this.name = 'Error';
|
||||||
|
|
||||||
|
if (!this.stack) {
|
||||||
|
// Error.captureStackTrace appends a stack property which relies on the toString method of the object it is applied to.
|
||||||
|
// Since we are using our own toString method which controls when to display the stack trace if we don't go through this
|
||||||
|
// safety object, then we'll get stack overflow problems.
|
||||||
|
var safety = {
|
||||||
|
toString: function() {
|
||||||
|
return this._messageWithDetails() + '\nStack:';
|
||||||
|
}.bind(this)
|
||||||
|
};
|
||||||
|
Error.captureStackTrace(safety, arguments.callee || this.constructor);
|
||||||
|
this.__safety = safety;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.plugin) throw new Error('Missing plugin name');
|
||||||
|
if (!this.message) throw new Error('Missing error message');
|
||||||
|
}
|
||||||
|
|
||||||
|
util.inherits(PluginError, Error);
|
||||||
|
|
||||||
|
PluginError.prototype._messageWithDetails = function() {
|
||||||
|
var messageWithDetails = 'Message:\n ' + this.message;
|
||||||
|
var details = this._messageDetails();
|
||||||
|
|
||||||
|
if (details !== '') {
|
||||||
|
messageWithDetails += '\n' + details;
|
||||||
|
}
|
||||||
|
|
||||||
|
return messageWithDetails;
|
||||||
|
};
|
||||||
|
|
||||||
|
PluginError.prototype._messageDetails = function() {
|
||||||
|
if (!this.showProperties) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
var properties = arrayDiffer(Object.keys(this), propertiesNotToDisplay);
|
||||||
|
|
||||||
|
if (properties.length === 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
properties = properties.map(function stringifyProperty(prop) {
|
||||||
|
return ' ' + prop + ': ' + self[prop];
|
||||||
|
});
|
||||||
|
|
||||||
|
return 'Details:\n' + properties.join('\n');
|
||||||
|
};
|
||||||
|
|
||||||
|
PluginError.prototype.toString = function () {
|
||||||
|
var sig = chalk.red(this.name) + ' in plugin \'' + chalk.cyan(this.plugin) + '\'';
|
||||||
|
var detailsWithStack = function(stack) {
|
||||||
|
return this._messageWithDetails() + '\nStack:\n' + stack;
|
||||||
|
}.bind(this);
|
||||||
|
|
||||||
|
var msg;
|
||||||
|
if (this.showStack) {
|
||||||
|
if (this.__safety) { // There is no wrapped error, use the stack captured in the PluginError ctor
|
||||||
|
msg = this.__safety.stack;
|
||||||
|
} else if (this._stack) {
|
||||||
|
msg = detailsWithStack(this._stack);
|
||||||
|
} else { // Stack from wrapped error
|
||||||
|
msg = detailsWithStack(this.stack);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
msg = this._messageWithDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
return sig + '\n' + msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = PluginError;
|
15
_site/node_modules/gulp-gh-pages/node_modules/gulp-util/lib/buffer.js
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
var through = require('through2');
|
||||||
|
|
||||||
|
module.exports = function(fn) {
|
||||||
|
var buf = [];
|
||||||
|
var end = function(cb) {
|
||||||
|
this.push(buf);
|
||||||
|
cb();
|
||||||
|
if(fn) fn(null, buf);
|
||||||
|
};
|
||||||
|
var push = function(data, enc, cb) {
|
||||||
|
buf.push(data);
|
||||||
|
cb();
|
||||||
|
};
|
||||||
|
return through.obj(push, end);
|
||||||
|
};
|
11
_site/node_modules/gulp-gh-pages/node_modules/gulp-util/lib/combine.js
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
var pipeline = require('multipipe');
|
||||||
|
|
||||||
|
module.exports = function(){
|
||||||
|
var args = arguments;
|
||||||
|
if (args.length === 1 && Array.isArray(args[0])) {
|
||||||
|
args = args[0];
|
||||||
|
}
|
||||||
|
return function(){
|
||||||
|
return pipeline.apply(pipeline, args);
|
||||||
|
};
|
||||||
|
};
|