Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ed7e77b
commit b1794dd
Showing
12 changed files
with
5,373 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,288 @@ | ||
// tipsy, facebook style tooltips for jquery | ||
// version 1.0.0a | ||
// (c) 2008-2010 jason frame [jason@onehackoranother.com] | ||
// released under the MIT license | ||
|
||
(function($) { | ||
|
||
function maybeCall(thing, ctx) { | ||
return (typeof thing == 'function') ? (thing.call(ctx)) : thing; | ||
} | ||
|
||
function Tipsy(element, options) { | ||
this.$element = $(element); | ||
this.options = options; | ||
this.enabled = true; | ||
this.fixTitle(); | ||
} | ||
|
||
Tipsy.prototype = { | ||
show: function() { | ||
var title = this.getTitle(); | ||
if (title && this.enabled) { | ||
var $tip = this.tip(); | ||
|
||
$tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title); | ||
$tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity | ||
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body); | ||
|
||
var pos = $.extend({}, this.$element.offset(), { | ||
width: this.$element[0].offsetWidth || 0, | ||
height: this.$element[0].offsetHeight || 0 | ||
}); | ||
|
||
if (typeof this.$element[0].nearestViewportElement == 'object') { | ||
// SVG | ||
var el = this.$element[0]; | ||
var rect = el.getBoundingClientRect(); | ||
pos.width = rect.width; | ||
pos.height = rect.height; | ||
} | ||
|
||
|
||
var actualWidth = $tip[0].offsetWidth, | ||
actualHeight = $tip[0].offsetHeight, | ||
gravity = maybeCall(this.options.gravity, this.$element[0]); | ||
|
||
var tp; | ||
switch (gravity.charAt(0)) { | ||
case 'n': | ||
tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; | ||
break; | ||
case 's': | ||
tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; | ||
break; | ||
case 'e': | ||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}; | ||
break; | ||
case 'w': | ||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}; | ||
break; | ||
} | ||
|
||
if (gravity.length == 2) { | ||
if (gravity.charAt(1) == 'w') { | ||
tp.left = pos.left + pos.width / 2 - 15; | ||
} else { | ||
tp.left = pos.left + pos.width / 2 - actualWidth + 15; | ||
} | ||
} | ||
|
||
$tip.css(tp).addClass('tipsy-' + gravity); | ||
$tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0); | ||
if (this.options.className) { | ||
$tip.addClass(maybeCall(this.options.className, this.$element[0])); | ||
} | ||
|
||
if (this.options.fade) { | ||
$tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity}); | ||
} else { | ||
$tip.css({visibility: 'visible', opacity: this.options.opacity}); | ||
} | ||
|
||
var t = this; | ||
var set_hovered = function(set_hover){ | ||
return function(){ | ||
t.$tip.stop(); | ||
t.tipHovered = set_hover; | ||
if (!set_hover){ | ||
if (t.options.delayOut === 0) { | ||
t.hide(); | ||
} else { | ||
setTimeout(function() { | ||
if (t.hoverState == 'out') t.hide(); }, t.options.delayOut); | ||
} | ||
} | ||
}; | ||
}; | ||
$tip.hover(set_hovered(true), set_hovered(false)); | ||
} | ||
}, | ||
|
||
hide: function() { | ||
if (this.options.fade) { | ||
this.tip().stop().fadeOut(function() { $(this).remove(); }); | ||
} else { | ||
this.tip().remove(); | ||
} | ||
}, | ||
|
||
fixTitle: function() { | ||
var $e = this.$element; | ||
|
||
if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') { | ||
$e.attr('original-title', $e.attr('title') || '').removeAttr('title'); | ||
} | ||
if (typeof $e.context.nearestViewportElement == 'object'){ | ||
if ($e.children('title').length){ | ||
$e.append('<original-title>' + ($e.children('title').text() || '') + '</original-title>') | ||
.children('title').remove(); | ||
} | ||
} | ||
}, | ||
|
||
getTitle: function() { | ||
|
||
var title, $e = this.$element, o = this.options; | ||
this.fixTitle(); | ||
|
||
if (typeof o.title == 'string') { | ||
var title_name = o.title == 'title' ? 'original-title' : o.title; | ||
if ($e.children(title_name).length){ | ||
title = $e.children(title_name).html(); | ||
} else{ | ||
title = $e.attr(title_name); | ||
} | ||
|
||
} else if (typeof o.title == 'function') { | ||
title = o.title.call($e[0]); | ||
} | ||
title = ('' + title).replace(/(^\s*|\s*$)/, ""); | ||
return title || o.fallback; | ||
}, | ||
|
||
tip: function() { | ||
if (!this.$tip) { | ||
this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'); | ||
} | ||
return this.$tip; | ||
}, | ||
|
||
validate: function() { | ||
if (!this.$element[0].parentNode) { | ||
this.hide(); | ||
this.$element = null; | ||
this.options = null; | ||
} | ||
}, | ||
|
||
enable: function() { this.enabled = true; }, | ||
disable: function() { this.enabled = false; }, | ||
toggleEnabled: function() { this.enabled = !this.enabled; } | ||
}; | ||
|
||
$.fn.tipsy = function(options) { | ||
|
||
if (options === true) { | ||
return this.data('tipsy'); | ||
} else if (typeof options == 'string') { | ||
var tipsy = this.data('tipsy'); | ||
if (tipsy) tipsy[options](); | ||
return this; | ||
} | ||
|
||
options = $.extend({}, $.fn.tipsy.defaults, options); | ||
|
||
if (options.hoverlock && options.delayOut === 0) { | ||
options.delayOut = 100; | ||
} | ||
|
||
function get(ele) { | ||
var tipsy = $.data(ele, 'tipsy'); | ||
if (!tipsy) { | ||
tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options)); | ||
$.data(ele, 'tipsy', tipsy); | ||
} | ||
return tipsy; | ||
} | ||
|
||
function enter() { | ||
var tipsy = get(this); | ||
tipsy.hoverState = 'in'; | ||
if (options.delayIn === 0) { | ||
tipsy.show(); | ||
} else { | ||
tipsy.fixTitle(); | ||
setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn); | ||
} | ||
} | ||
|
||
function leave() { | ||
var tipsy = get(this); | ||
tipsy.hoverState = 'out'; | ||
if (options.delayOut === 0) { | ||
tipsy.hide(); | ||
} else { | ||
var to = function() { | ||
if (!tipsy.tipHovered || !options.hoverlock){ | ||
if (tipsy.hoverState == 'out') tipsy.hide(); | ||
} | ||
}; | ||
setTimeout(to, options.delayOut); | ||
} | ||
} | ||
|
||
if (options.trigger != 'manual') { | ||
var binder = options.live ? 'live' : 'bind', | ||
eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', | ||
eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; | ||
this[binder](eventIn, enter)[binder](eventOut, leave); | ||
} | ||
|
||
return this; | ||
|
||
}; | ||
|
||
$.fn.tipsy.defaults = { | ||
className: null, | ||
delayIn: 0, | ||
delayOut: 0, | ||
fade: false, | ||
fallback: '', | ||
gravity: 'n', | ||
html: false, | ||
live: false, | ||
offset: 0, | ||
opacity: 0.8, | ||
title: 'title', | ||
trigger: 'hover', | ||
hoverlock: false | ||
}; | ||
|
||
// Overwrite this method to provide options on a per-element basis. | ||
// For example, you could store the gravity in a 'tipsy-gravity' attribute: | ||
// return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' }); | ||
// (remember - do not modify 'options' in place!) | ||
$.fn.tipsy.elementOptions = function(ele, options) { | ||
return $.metadata ? $.extend({}, options, $(ele).metadata()) : options; | ||
}; | ||
|
||
$.fn.tipsy.autoNS = function() { | ||
return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n'; | ||
}; | ||
|
||
$.fn.tipsy.autoWE = function() { | ||
return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w'; | ||
}; | ||
|
||
/** | ||
* yields a closure of the supplied parameters, producing a function that takes | ||
* no arguments and is suitable for use as an autogravity function like so: | ||
* | ||
* @param margin (int) - distance from the viewable region edge that an | ||
* element should be before setting its tooltip's gravity to be away | ||
* from that edge. | ||
* @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer | ||
* if there are no viewable region edges effecting the tooltip's | ||
* gravity. It will try to vary from this minimally, for example, | ||
* if 'sw' is preferred and an element is near the right viewable | ||
* region edge, but not the top edge, it will set the gravity for | ||
* that element's tooltip to be 'se', preserving the southern | ||
* component. | ||
*/ | ||
$.fn.tipsy.autoBounds = function(margin, prefer) { | ||
return function() { | ||
var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)}, | ||
boundTop = $(document).scrollTop() + margin, | ||
boundLeft = $(document).scrollLeft() + margin, | ||
$this = $(this); | ||
|
||
if ($this.offset().top < boundTop) dir.ns = 'n'; | ||
if ($this.offset().left < boundLeft) dir.ew = 'w'; | ||
if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e'; | ||
if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's'; | ||
|
||
return dir.ns + (dir.ew ? dir.ew : ''); | ||
}; | ||
}; | ||
})(jQuery); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
var metas = document.getElementsByTagName('meta'); | ||
var i; | ||
if (navigator.userAgent.match(/iPhone/i)) { | ||
for (i=0; i<metas.length; i++) { | ||
if (metas[i].name == "viewport") { | ||
metas[i].content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0"; | ||
} | ||
} | ||
document.addEventListener("gesturestart", gestureStart, false); | ||
} | ||
function gestureStart() { | ||
for (i=0; i<metas.length; i++) { | ||
if (metas[i].name == "viewport") { | ||
metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6"; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"name":"Rootreporter d3","tagline":"","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `<a>` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at https://help.github.com/pages or contact support@github.com and we’ll help you sort it out.\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} |
Oops, something went wrong.