added site files
This commit is contained in:
parent
a6f70a6c78
commit
329148c253
253 changed files with 30486 additions and 0 deletions
275
EnlighterJS/Resources/github-buttons/GitHubButtons.MooTools.js
Normal file
275
EnlighterJS/Resources/github-buttons/GitHubButtons.MooTools.js
Normal file
|
@ -0,0 +1,275 @@
|
|||
/*!
|
||||
---
|
||||
name: GitHub-Buttons for MooTools, jQuery and PHP
|
||||
description: Unofficial GitHub Buttons based on https://github.com/mdo/github-buttons
|
||||
|
||||
license: Apache 2.0 License
|
||||
version: 2.5.0
|
||||
build: 54ff1b657e537f8107ee7373e0bfeeeb/May 6 2015
|
||||
|
||||
authors:
|
||||
- Andi Dittrich (author of MooTools/jQuery/PHP based versions)
|
||||
- Mark Otto (author of original github-buttons styles)
|
||||
|
||||
download: https://github.com/AndiDittrich/MooTools.GitHub-Buttons
|
||||
website: http://github-buttons.andidittrich.de
|
||||
demo: http://github-buttons.andidittrich.de
|
||||
|
||||
requires:
|
||||
- Core/1.4.5
|
||||
- More/Number.Format
|
||||
- More/Request.JSONP
|
||||
|
||||
provides: [GitHubButton]
|
||||
...
|
||||
*//*
|
||||
---
|
||||
name: GitHub-Buttons
|
||||
description: Unofficial GitHub Buttons inspired by https://github.com/mdo/github-buttons
|
||||
|
||||
license: Dual-Licensed under "The MIT License (X11)" and "Apache 2.0 License"
|
||||
|
||||
authors:
|
||||
- Andi Dittrich
|
||||
|
||||
requires:
|
||||
- Core/1.4.5
|
||||
- More/Number.Format
|
||||
- More/Request.JSONP
|
||||
|
||||
provides: [GitHubButton]
|
||||
...
|
||||
*/
|
||||
var GitHubButton = new Class({
|
||||
Implements: Options,
|
||||
|
||||
// contains the required html structure
|
||||
buttonContainer: null,
|
||||
|
||||
options: {
|
||||
// large or small button ?
|
||||
large: false,
|
||||
|
||||
// GitHub username
|
||||
owner: null,
|
||||
|
||||
// GitHub repository name
|
||||
repo: null,
|
||||
|
||||
// Button type (star, fork, watch, follow)
|
||||
type: 'star',
|
||||
|
||||
// custom button text
|
||||
text: null,
|
||||
|
||||
// enabled/disable counter - manual set the value
|
||||
count: true,
|
||||
|
||||
// enable/disable caching
|
||||
cache: true,
|
||||
|
||||
// cache lifetime in seconds (2h default)
|
||||
cacheLifetime: 7200,
|
||||
|
||||
// error text/count
|
||||
errorText: 'NA'
|
||||
},
|
||||
|
||||
initialize: function(options){
|
||||
this.setOptions(options);
|
||||
|
||||
// jsonp rest service url
|
||||
var url = 'https://api.github.com';
|
||||
|
||||
// create repo url
|
||||
var repoUrl = 'https://github.com/' + this.options.owner + '/' + this.options.repo + '/';
|
||||
var actionUrl = 'https://github.com/' + this.options.owner + '/';
|
||||
|
||||
// text to display
|
||||
var text = '-';
|
||||
|
||||
// response object selector
|
||||
var responseSelector = '';
|
||||
|
||||
// star, fork, follow, watch are supported
|
||||
switch (this.options.type){
|
||||
case 'star':
|
||||
url += '/repos/' + this.options.owner + '/' + this.options.repo;
|
||||
text = 'Star';
|
||||
actionUrl = repoUrl + 'stargazers';
|
||||
responseSelector = 'stargazers_count';
|
||||
break;
|
||||
|
||||
case 'fork':
|
||||
url += '/repos/' + this.options.owner + '/' + this.options.repo;
|
||||
text = 'Fork';
|
||||
actionUrl = repoUrl + 'network';
|
||||
responseSelector = 'forks_count';
|
||||
break;
|
||||
|
||||
case 'watch':
|
||||
url += '/repos/' + this.options.owner + '/' + this.options.repo;
|
||||
actionUrl += this.options.repo + '/watchers';
|
||||
text = 'Watchers';
|
||||
responseSelector = 'subscribers_count';
|
||||
break;
|
||||
|
||||
case 'follow':
|
||||
url += '/users/' + this.options.owner;
|
||||
text = 'Follow @' + this.options.owner;
|
||||
repoUrl = actionUrl;
|
||||
actionUrl += 'followers';
|
||||
responseSelector = 'followers';
|
||||
break;
|
||||
}
|
||||
|
||||
// create html structure
|
||||
// @see https://github.com/mdo/github-buttons/blob/master/github-btn.source.html
|
||||
// <span class="github-btn" id="github-btn">
|
||||
// <a class="gh-btn" id="gh-btn" href="#" target="_blank">
|
||||
// <span class="gh-ico"></span>
|
||||
// <span class="gh-text" id="gh-text"></span>
|
||||
// </a>
|
||||
// <a class="gh-count" id="gh-count" href="#" target="_blank"></a>
|
||||
// </span>
|
||||
|
||||
// create elements
|
||||
this.buttonContainer = new Element('div', {
|
||||
'class': 'github-btn ' + (this.options.large ? 'github-btn-large' : '')
|
||||
});
|
||||
var count = new Element('a', {
|
||||
'class': 'gh-count',
|
||||
href: actionUrl,
|
||||
target: '_blank'
|
||||
});
|
||||
var ico = new Element('span', {
|
||||
'class': 'gh-ico'
|
||||
});
|
||||
var txt = new Element('span', {
|
||||
'class': 'gh-text',
|
||||
text: (this.options.text ? this.options.text : text)
|
||||
});
|
||||
var button = new Element('a', {
|
||||
'class': 'gh-btn',
|
||||
href: repoUrl,
|
||||
target: '_blank'
|
||||
});
|
||||
|
||||
// create structure
|
||||
button.grab(ico).grab(txt);
|
||||
this.buttonContainer.grab(button).grab(count);
|
||||
|
||||
// which "count"-mode should be used ?
|
||||
if (typeof this.options.count == 'boolean'){
|
||||
// show count and request the data via JSONP ?
|
||||
if (this.options.count){
|
||||
// cache instance name
|
||||
var cacheName = 'GHB_' + this.options.type + '_' + this.options.owner + '_' + this.options.repo + '_' + responseSelector;
|
||||
|
||||
// cache version available ?
|
||||
if (this.options.cache === true){
|
||||
var cdata = this.retrieveItem(cacheName, this.options.cacheLifetime);
|
||||
|
||||
if (cdata){
|
||||
// update text
|
||||
count.set('text', cdata.format({group: '.'}));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// request data
|
||||
new Request.JSONP({
|
||||
// the rest service url
|
||||
url: url,
|
||||
|
||||
// jsonp callback get parameter
|
||||
// @see https://developer.github.com/v3/#json-p-callbacks
|
||||
callbackKey: 'callback',
|
||||
|
||||
// request complete handler
|
||||
onComplete: function(response){
|
||||
// valid reponse ? request limit not exceeeded ?
|
||||
if (response.data && response.data[responseSelector]){
|
||||
// extract count
|
||||
var cnt = response.data[responseSelector];
|
||||
|
||||
// update text
|
||||
count.set('text', cnt.format({group: '.'}));
|
||||
|
||||
// update cache
|
||||
if (this.options.cache === true){
|
||||
this.storeItem(cacheName, cnt);
|
||||
}
|
||||
|
||||
// set error text
|
||||
}else{
|
||||
count.set('text', this.options.errorText);
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}else{
|
||||
// hide counter
|
||||
count.setStyle('display', 'none');
|
||||
}
|
||||
|
||||
}else{
|
||||
// manually set the value
|
||||
count.set('text', this.options.count.format({group: '.'}));
|
||||
}
|
||||
},
|
||||
|
||||
// magic method to use class instance as element
|
||||
toElement: function(){
|
||||
return this.buttonContainer;
|
||||
},
|
||||
|
||||
// use local storage as cache
|
||||
storeItem: function(name, data){
|
||||
// generate storage data
|
||||
var d = JSON.encode({
|
||||
time: (new Date().getTime()),
|
||||
payload: data
|
||||
});
|
||||
|
||||
// try to use html5 features
|
||||
if (typeof(Storage) !== "undefined"){
|
||||
localStorage.setItem(name, d);
|
||||
}
|
||||
},
|
||||
|
||||
// use local storage as cache
|
||||
retrieveItem: function(name, cacheLifetime){
|
||||
// try to use html5 features
|
||||
if (typeof(Storage) !== "undefined"){
|
||||
// get item
|
||||
var ls = localStorage.getItem(name);
|
||||
|
||||
// available ?
|
||||
if (!ls){
|
||||
return null;
|
||||
}
|
||||
|
||||
// decode json serialized data
|
||||
ls = JSON.decode(ls);
|
||||
|
||||
// lifetime expired ?
|
||||
if (!ls.time || (ls.time + (cacheLifetime*1000)) < (new Date().getTime())){
|
||||
return null;
|
||||
}
|
||||
|
||||
// valid payload ?
|
||||
return (ls.payload ? ls.payload : null);
|
||||
}else{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Native Element extension - jQuery like usage
|
||||
(function(){
|
||||
Element.implement({
|
||||
GitHubButton: function(options){
|
||||
this.grab(new GitHubButton(options));
|
||||
}
|
||||
});
|
||||
})();
|
Loading…
Add table
Add a link
Reference in a new issue