mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-21 01:53:26 +00:00
Add base for theming
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
define([], function() {
|
||||
var isAvailable = function() {
|
||||
return (typeof mixpanel !== "undefined");
|
||||
};
|
||||
|
||||
var track = function(event, data) {
|
||||
if (!isAvailable()) {
|
||||
console.log("tracking not available!");
|
||||
return;
|
||||
}
|
||||
mixpanel.track(event, data);
|
||||
};
|
||||
|
||||
return {
|
||||
isAvailable: isAvailable,
|
||||
track: track
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,82 @@
|
||||
define(function(){
|
||||
var evalJS = function(code, callback) {
|
||||
var ready = false;
|
||||
var finished = false;
|
||||
|
||||
var finish = function() {
|
||||
if(finished) {
|
||||
return console.error('Already finished');
|
||||
}
|
||||
finished = true;
|
||||
return callback.apply(null, arguments);
|
||||
};
|
||||
|
||||
var jsrepl;
|
||||
|
||||
// Handles all our events
|
||||
var eventHandler = function(data, eventType) {
|
||||
console.log([eventType, data]);
|
||||
switch(eventType) {
|
||||
case 'progress':
|
||||
// Update UI loading bar
|
||||
break;
|
||||
case 'timeout':
|
||||
finish(new Error(data));
|
||||
break;
|
||||
case 'result':
|
||||
finish(null, {
|
||||
value: data,
|
||||
type: 'result'
|
||||
});
|
||||
break;
|
||||
case 'error':
|
||||
if(ready) {
|
||||
return finish(null, {
|
||||
value: data,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
return finish(new Error(data));
|
||||
break
|
||||
case 'ready':
|
||||
// We're good to get results and stuff back now
|
||||
ready = true;
|
||||
// Eval our code now that the runtime is ready
|
||||
jsrepl.eval(code);
|
||||
break;
|
||||
default:
|
||||
console.log('Unhandled event =', eventType, 'data =', data);
|
||||
}
|
||||
};
|
||||
|
||||
jsrepl = new JSREPL({
|
||||
input: eventHandler,
|
||||
output: eventHandler,
|
||||
result: eventHandler,
|
||||
error: eventHandler,
|
||||
progress: eventHandler,
|
||||
timeout: {
|
||||
time: 30000,
|
||||
callback: eventHandler
|
||||
}
|
||||
});
|
||||
|
||||
jsrepl.loadLanguage('javascript', eventHandler);
|
||||
};
|
||||
|
||||
|
||||
var ass = "function assert(condition, message) { \nif (!condition) { \n throw message || \"Assertion failed\"; \n } \n }\n";
|
||||
|
||||
var execute = function(solution, validation, callback) {
|
||||
// Validate with validation code
|
||||
var code = [solution, ass, validation].join(";\n");
|
||||
evalJS(code, function(err, res) {
|
||||
if(err) return callback(err);
|
||||
|
||||
if (res.type == "error") callback(new Error(res.value));
|
||||
else callback(null, res.value);
|
||||
});
|
||||
};
|
||||
|
||||
return execute;
|
||||
});
|
||||
@@ -0,0 +1,5 @@
|
||||
define([], function() {
|
||||
return {
|
||||
isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
define([
|
||||
"jQuery"
|
||||
], function($) {
|
||||
var url = location.href;
|
||||
var title = $("title").text();
|
||||
|
||||
var types = {
|
||||
"twitter": function($el) {
|
||||
window.open("http://twitter.com/home?status="+encodeURIComponent(title+" "+url))
|
||||
},
|
||||
"facebook": function($el) {
|
||||
window.open("http://www.facebook.com/sharer/sharer.php?s=100&p[url]="+encodeURIComponent(url))
|
||||
},
|
||||
"google-plus": function($el) {
|
||||
window.open("https://plus.google.com/share?url="+encodeURIComponent(url))
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Bind all sharing button
|
||||
var init = function() {
|
||||
$("a[data-sharing]").click(function(e) {
|
||||
if (e) e.preventDefault();
|
||||
var type = $(this).data("sharing");
|
||||
|
||||
types[type]($(this));
|
||||
})
|
||||
};
|
||||
|
||||
return {
|
||||
init: init
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
define(function(){
|
||||
var baseKey = "";
|
||||
|
||||
/*
|
||||
* Simple module for storing data in the browser's local storage
|
||||
*/
|
||||
return {
|
||||
setBaseKey: function(key) {
|
||||
baseKey = key;
|
||||
},
|
||||
set: function(key, value) {
|
||||
key = baseKey+":"+key;
|
||||
localStorage[key] = JSON.stringify(value);
|
||||
},
|
||||
get: function(key, def) {
|
||||
key = baseKey+":"+key;
|
||||
try {
|
||||
var v = JSON.parse(localStorage[key]);
|
||||
return v == null ? def : v;;
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
return localStorage[key] || def;
|
||||
}
|
||||
},
|
||||
remove: function(key) {
|
||||
key = baseKey+":"+key;
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user