Updates github pages

This commit is contained in:
Manu Mtz-Almeida 2014-06-30 04:12:22 +02:00
parent fdbc5851c5
commit aae3a8eafd
5 changed files with 133 additions and 228 deletions

View File

@ -378,7 +378,7 @@ p {
padding: 4px 14px;
border-radius: 5px;
background-color: rgba(105, 105, 105, 0.65);
font-family:'Open Sans', sans-serif;
font-family:'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif;
color: white;
}
.footgraph {
@ -409,6 +409,9 @@ p {
height: 558px;
background-color: #272822;
}
.linkfoot {
color: #b3c2e3;
}
html.w-mod-js.w-mod-no-ios *[data-ix="slicefromleft"] {
opacity: 0;
-webkit-transform: translate(-100px, 0px);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,6 +1,6 @@
<!DOCTYPE html>
<!-- This site was created in Webflow. http://www.webflow.com-->
<!-- Last Published: Fri Jun 20 2014 17:48:26 GMT+0000 (UTC) -->
<!-- Last Published: Mon Jun 30 2014 02:10:44 GMT+0000 (UTC) -->
<html data-wf-site="539b89a7a7990e780bfd7c67">
<head>
<meta charset="utf-8">
@ -14,7 +14,7 @@
<script>
WebFont.load({
google: {
families: ["Montserrat:400,700","Varela Round:400","Great Vibes:400","Varela:400","Open Sans:300,300italic,400,400italic,600,600italic,700,700italic,800,800italic","Vollkorn:400,400italic,700,700italic"]
families: ["Montserrat:400,700","Varela Round:400","Great Vibes:400","Varela:400","Vollkorn:400,400italic,700,700italic"]
}
});
</script>
@ -26,10 +26,10 @@
<div class="section hero">
<div class="w-container presenting" data-ix="fadein">
<h1 class="hero-heading">Gin Gonic</h1>
<p class="hero-subhead">Fastest full-featured web framework for Golang. <strong>Crystal clear.</strong>
<p class="hero-subhead">The fastest full-featured web framework for Golang. <strong>Crystal clear.</strong>
</p>
<div class="button-group"><a class="button sign-up" href="https://github.com/gin-gonic/gin" data-ix="shaking">github pagE</a><a class="button" href="http://godoc.org/github.com/gin-gonic/gin">API REFERENCE</a>
<p class="goget"><span class="goget-text">go get github.com/gin-gonic/gin</span>
<p class="goget"><span class="goget-text">$ go get github.com/gin-gonic/gin</span>
</p>
</div>
</div>
@ -40,7 +40,8 @@
<p class="section-subtitle">Gin is a web framework written in Golang. It features a martini-like API with much better performance, up to 40 times faster. If you need performance and good productivity, you will love Gin.</p>
<div class="graph-block">
<img class="graph-image" src="images/graph.png" alt="Martini vs Gin" width="827">
<p class="footgraph"><a href="https://github.com/gin-gonic/go-http-routing-benchmark">Run the tests by yourself</a>
<p class="footgraph">2,3 GHz Intel Core i7&nbsp;8 GB 1600 MHz DDR3,&nbsp;&nbsp;OS X 10.9.3</p>
<p class="footgraph"><a href="https://github.com/gin-gonic/go-http-routing-benchmark">Check out the benchmark suite</a>
</p>
</div>
</div>
@ -48,13 +49,13 @@
<div class="section grey" id="features">
<div class="w-container" data-ix="slicefromleft">
<h2 class="section-title">Low Overhead Powerful API</h2>
<p class="section-subtitle">You can add global, per-group, and per-route middlewares, thousands of nested groups, nice JSON validation and rendering. And the performance will be still&nbsp;great!&nbsp;Gin uses <strong>httprouter</strong> internally, the fastest HTTP router for
Golang. Httprouter was created by&nbsp;<em>Julien Schmidt</em> and its based in a <a href="http://en.wikipedia.org/wiki/Radix_tree">Radix Tree</a>&nbsp;algorithm. This explains the good performance and scalability of Gin.</p>
<p class="section-subtitle">You can add global, per-group, and per-route middlewares, thousands of nested groups, nice JSON validation and rendering. And the performance will be still&nbsp;great.&nbsp;Gin uses <strong>httprouter</strong> internally, the fastest HTTP router for
Golang. Httprouter was created by&nbsp;Julien Schmidt and its based in a <a href="http://en.wikipedia.org/wiki/Radix_tree">Radix Tree</a>&nbsp;algorithm.</p>
<div class="w-row">
<div class="w-col w-col-6">
<h3>Some cool middlewares</h3>
<p>If you used Martini before, Gin will be familiar to you. If you dont, you will need 10 minutes to learn everything.</p><a class="button sentrybutton" href="https://github.com/gin-gonic/gin-sentry">Check out the<br>Sentry midDlEware</a>
<p>More coming soon!</p>
<p>More coming soon</p>
</div>
<div class="w-col w-col-6">
<h3>Crystal Clear</h3>
@ -76,6 +77,8 @@
</div>
<div class="w-slider-nav w-round"></div>
</div>
<p class="footgraph"><a href="https://github.com/gin-gonic/gin/blob/master/README.md">More examples in the README.md</a>
</p>
</div>
</div>
</div>
@ -110,7 +113,7 @@
<div class="w-col w-col-4 w-col-small-4">
<div class="icons">V</div>
<h3>Routes grouping</h3>
<p>Organize your routes better. Authorization required vs non required, different API versions... In addition, the groups can be nested unlimitedly without degrading performance!</p>
<p>Organize your routes better. Authorization required vs non required, different API versions... In addition, the groups can be nested unlimitedly without degrading performance.</p>
</div>
<div class="w-col w-col-4 w-col-small-4">
<div class="icons">VI</div>
@ -162,19 +165,8 @@
</div>
<footer class="section footer">
<div class="w-container">
<div class="w-row">
<div class="w-col w-col-6">
<div class="footer-text">Gin is developed and maintained by <em>Manu Martinez-Almeida</em>. It uses the fantastic <em>Julien Schmidt</em>s httprouter.</div>
</div>
<div class="w-col w-col-6 right-footer-col">
<a class="w-inline-block social-icon" href="mailto:manu.valladolid@gmail.com">
<img src="images/email.png" width="30" alt="539f9748f281585418675de9_email.png">
</a>
<a class="w-inline-block social-icon" href="http://forzefield.com">
<img src="images/globe2.png" width="30" alt="539f982eb9e5e952181edbc2_globe2.png">
</a>
</div>
</div>
<div class="footer-text">Gin is developed and maintained by <em><a href="https://github.com/manucorporat" class="linkfoot">Manu Martinez-Almeida</a></em>.
<br>It uses the fantastic <em><a href="https://github.com/julienschmidt" class="linkfoot">Julien Schmidt</a>&nbsp;</em>s httprouter.</div>
</div>
</footer>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

View File

@ -406,103 +406,6 @@ window.tram=function(t){function i(t,i){var e=new Z.Bare;return e.init(t,i)}func
* Licensed MIT (/blob/master/LICENSE.txt)
*/
(function($){if(!$.support.cors&&$.ajaxTransport&&window.XDomainRequest){var n=/^https?:\/\//i;var o=/^get|post$/i;var p=new RegExp('^'+location.protocol,'i');var q=/text\/html/i;var r=/\/json/i;var s=/\/xml/i;$.ajaxTransport('* text html xml json',function(i,j,k){if(i.crossDomain&&i.async&&o.test(i.type)&&n.test(i.url)&&p.test(i.url)){var l=null;var m=(j.dataType||'').toLowerCase();return{send:function(f,g){l=new XDomainRequest();if(/^\d+$/.test(j.timeout)){l.timeout=j.timeout}l.ontimeout=function(){g(500,'timeout')};l.onload=function(){var a='Content-Length: '+l.responseText.length+'\r\nContent-Type: '+l.contentType;var b={code:200,message:'success'};var c={text:l.responseText};try{if(m==='html'||q.test(l.contentType)){c.html=l.responseText}else if(m==='json'||(m!=='text'&&r.test(l.contentType))){try{c.json=$.parseJSON(l.responseText)}catch(e){b.code=500;b.message='parseerror'}}else if(m==='xml'||(m!=='text'&&s.test(l.contentType))){var d=new ActiveXObject('Microsoft.XMLDOM');d.async=false;try{d.loadXML(l.responseText)}catch(e){d=undefined}if(!d||!d.documentElement||d.getElementsByTagName('parsererror').length){b.code=500;b.message='parseerror';throw'Invalid XML: '+l.responseText;}c.xml=d}}catch(parseMessage){throw parseMessage;}finally{g(b.code,b.message,c,a)}};l.onprogress=function(){};l.onerror=function(){g(500,'error',{text:l.responseText})};var h='';if(j.data){h=($.type(j.data)==='string')?j.data:$.param(j.data)}l.open(i.type,i.url);l.send(h)},abort:function(){if(l){l.abort()}}}}})}})(jQuery);
/*!
* tap.js
* Copyright (c) 2013 Alex Gibson, http://alxgbsn.co.uk/
* Released under MIT license
*/
(function (window, document) {
'use strict';
function Tap(el) {
el = typeof el === 'object' ? el : document.getElementById(el);
this.element = el;
this.moved = false; //flags if the finger has moved
this.startX = 0; //starting x coordinate
this.startY = 0; //starting y coordinate
this.hasTouchEventOccured = false; //flag touch event
el.addEventListener('touchstart', this, false);
el.addEventListener('touchmove', this, false);
el.addEventListener('touchend', this, false);
el.addEventListener('touchcancel', this, false);
el.addEventListener('mousedown', this, false);
el.addEventListener('mouseup', this, false);
}
Tap.prototype.start = function (e) {
if (e.type === 'touchstart') {
this.hasTouchEventOccured = true;
}
this.moved = false;
this.startX = e.type === 'touchstart' ? e.touches[0].clientX : e.clientX;
this.startY = e.type === 'touchstart' ? e.touches[0].clientY : e.clientY;
};
Tap.prototype.move = function (e) {
//if finger moves more than 10px flag to cancel
if (Math.abs(e.touches[0].clientX - this.startX) > 10 || Math.abs(e.touches[0].clientY - this.startY) > 10) {
this.moved = true;
}
};
Tap.prototype.end = function (e) {
var evt;
if (this.hasTouchEventOccured && e.type === 'mouseup') {
e.preventDefault();
e.stopPropagation();
this.hasTouchEventOccured = false;
return;
}
if (!this.moved) {
//create custom event
if (typeof document.CustomEvent !== "undefined") {
evt = new document.CustomEvent('tap', {
bubbles: true,
cancelable: true
});
} else {
evt = document.createEvent('Event');
evt.initEvent('tap', true, true);
}
e.target.dispatchEvent(evt);
}
};
Tap.prototype.cancel = function (e) {
this.hasTouchEventOccured = false;
this.moved = false;
this.startX = 0;
this.startY = 0;
};
Tap.prototype.destroy = function () {
var el = this.element;
el.removeEventListener('touchstart', this, false);
el.removeEventListener('touchmove', this, false);
el.removeEventListener('touchend', this, false);
el.removeEventListener('touchcancel', this, false);
el.removeEventListener('mousedown', this, false);
el.removeEventListener('mouseup', this, false);
this.element = null;
};
Tap.prototype.handleEvent = function (e) {
switch (e.type) {
case 'touchstart': this.start(e); break;
case 'touchmove': this.move(e); break;
case 'touchend': this.end(e); break;
case 'touchcancel': this.cancel(e); break;
case 'mousedown': this.start(e); break;
case 'mouseup': this.end(e); break;
}
};
window.Tap = Tap;
}(window, document));
/* jshint ignore:end */
/**
* ----------------------------------------------------------------------
@ -955,120 +858,126 @@ Webflow.define('ix', function ($, _) {
});
/**
* ----------------------------------------------------------------------
* Webflow: Touch events for jQuery based on tap.js
* Webflow: Touch events
*/
Webflow.define('touch', function ($, _) {
'use strict';
var Tap = window.Tap;
var namespace = '.w-events-';
var dataKey = namespace + 'tap';
var fallback = !document.addEventListener;
// jQuery event "tap" - use click in old + non-touch browsers
$.event.special.tap = (fallback || !Webflow.env.touch) ? { bindType: 'click', delegateType: 'click' } : {
setup: function () {
$.data(this, dataKey, new Tap(this));
// Returning false instructs jQuery to use native `addEventListener` on the element.
return false;
},
teardown: function () {
var tap = $.data(this, dataKey);
if (tap && tap.destroy) {
tap.destroy();
$.removeData(this, dataKey);
}
// Returning false makes sure the native event handlers bound above are removed.
return false;
}
var api = {};
api.init = function (el) {
el = typeof el === 'string' ? $(el).get(0) : el;
return el ? new Touch(el) : null;
};
// No swipe events for old browsers
if (fallback || !Object.create) return;
function Touch(el) {
var active = false;
var dirty = false;
var useTouch = false;
var thresholdX = Math.min(Math.round(window.innerWidth * 0.04), 40);
var startX, startY, lastX;
// jQuery event "swipe"
dataKey = namespace + 'swipe';
el.addEventListener('touchstart', start, false);
el.addEventListener('touchmove', move, false);
el.addEventListener('touchend', end, false);
el.addEventListener('touchcancel', cancel, false);
el.addEventListener('mousedown', start, false);
el.addEventListener('mousemove', move, false);
el.addEventListener('mouseup', end, false);
el.addEventListener('mouseout', cancel, false);
$.event.special.swipe = {
setup: function () {
$.data(this, dataKey, new Swipe(this));
// Returning false instructs jQuery to use native `addEventListener` on the element.
return false;
},
teardown: function () {
var tap = $.data(this, dataKey);
if (tap && tap.destroy) {
tap.destroy();
$.removeData(this, dataKey);
function start(evt) {
// We dont handle multi-touch events yet.
var touches = evt.touches;
if (touches && touches.length > 1) {
return;
}
// Returning false makes sure the native event handlers bound above are removed.
return false;
}
};
active = true;
dirty = false;
/**
* Swipe - extends Tap, supports mouse swipes!
*/
function Swipe(el) {
Tap.call(this, el);
if (touches) {
useTouch = true;
startX = touches[0].clientX;
startY = touches[0].clientY;
} else {
startX = evt.clientX;
startY = evt.clientY;
}
(function () {
var supr = Tap.prototype;
var proto = Swipe.prototype = Object.create(supr);
var threshold = Math.round(screen.width * 0.04) || 20;
if (threshold > 40) threshold = 40;
proto.start = function (e) {
supr.start.call(this, e);
this.element.addEventListener('mousemove', this, false);
document.addEventListener('mouseup', this, false);
this.velocityX = 0;
this.lastX = this.startX;
this.enabled = true;
};
proto.move = _.throttle(function (e) {
if (!this.enabled) return;
var x = e.touches ? e.touches[0].clientX : e.clientX;
this.velocityX = x - this.lastX;
this.lastX = x;
if (Math.abs(this.velocityX) > threshold) {
this.end(e);
lastX = startX;
}
});
proto.end = function (e) {
if (!this.enabled) return;
var velocityX = this.velocityX;
this.cancel();
if (Math.abs(velocityX) > threshold) {
$(this.element).triggerHandler('swipe', { direction: velocityX > 0 ? 'right' : 'left' });
function move(evt) {
if (!active) return;
if (useTouch && evt.type === 'mousemove') {
evt.preventDefault();
evt.stopPropagation();
return;
}
};
proto.destroy = function () {
this.cancel();
supr.destroy.call(this);
};
var touches = evt.touches;
var x = touches ? touches[0].clientX : evt.clientX;
var y = touches ? touches[0].clientY : evt.clientY;
proto.cancel = function () {
this.enabled = false;
this.element.removeEventListener('mousemove', this, false);
document.removeEventListener('mouseup', this, false);
supr.cancel.call(this);
};
var velocityX = x - lastX;
lastX = x;
proto.handleEvent = function (e) {
if (e.type == 'mousemove') return this.move(e);
supr.handleEvent.call(this, e);
};
}());
if (Math.abs(velocityX) > thresholdX) {
triggerEvent('swipe', evt, { direction: velocityX > 0 ? 'right' : 'left' });
cancel();
}
// If pointer moves more than 10px flag to cancel tap
if (Math.abs(x - startX) > 10 || Math.abs(y - startY) > 10) {
dirty = true;
}
}
function end(evt) {
if (!active) return;
if (useTouch && evt.type === 'mouseup') {
evt.preventDefault();
evt.stopPropagation();
useTouch = false;
return;
}
if (!dirty) triggerEvent('tap', evt);
}
function cancel(evt) {
active = false;
}
function destroy() {
el.removeEventListener('touchstart', start, false);
el.removeEventListener('touchmove', move, false);
el.removeEventListener('touchend', end, false);
el.removeEventListener('touchcancel', cancel, false);
el.removeEventListener('mousedown', start, false);
el.removeEventListener('mousemove', move, false);
el.removeEventListener('mouseup', end, false);
el.removeEventListener('mouseout', cancel, false);
el = null;
}
// Public instance methods
this.destroy = destroy;
}
// Wrap native event to supoprt preventdefault + stopPropagation
function triggerEvent(type, evt, data) {
var newEvent = $.Event(type, { originalEvent: evt });
$(evt.target).trigger(newEvent, data);
}
// Listen for touch events on all nodes by default.
api.instance = api.init(document);
// Export module
return api;
});
/**
* ----------------------------------------------------------------------
@ -2344,8 +2253,8 @@ Webflow.define('navbar', function ($, _) {
data.el.on('setting' + namespace, handler(data));
} else {
addOverlay(data);
data.button.on('click' + namespace, toggle(data));
data.menu.on('click' + namespace, 'a', navigate(data));
data.button.on('tap' + namespace, toggle(data));
data.menu.on('tap' + namespace, 'a', navigate(data));
}
// Trigger initial resize
@ -2441,13 +2350,14 @@ Webflow.define('navbar', function ($, _) {
}
function outside(data) {
return function (evt) {
var target = evt.target;
// Close navbars when clicked outside
if (!data.el.has(target).length && !data.el.is(target)) {
// Close menu when tapped outside
return _.debounce(function (evt) {
if (!data.open) return;
var menu = $(evt.target).closest('.w-nav-menu');
if (!data.menu.is(menu)) {
close(data);
}
};
});
}
function resize(i, el) {
@ -2495,7 +2405,7 @@ Webflow.define('navbar', function ($, _) {
resize(0, data.el[0]);
// Listen for tap outside events
if (!designer) $doc.on('click' + namespace, data.outside);
if (!designer) $doc.on('tap' + namespace, data.outside);
// Update menu height for Over state
if (animOver) setMenuHeight(data);
@ -2547,7 +2457,7 @@ Webflow.define('navbar', function ($, _) {
var animation = config.animation;
// Stop listening for tap outside events
$doc.off('click' + namespace, data.outside);
$doc.off('tap' + namespace, data.outside);
if (immediate) {
tram(data.menu).stop();