This commit is contained in:
chrosey
2017-09-13 07:52:34 +02:00
parent a1f16c37f4
commit 2340b0226b
24621 changed files with 2912161 additions and 149 deletions
+117
View File
@@ -0,0 +1,117 @@
(function() {
var OUTPUT_HTML, SETUP_JS, activate, deactivate, getOutput, init, run, setupBlock, tethers, uniqueId;
uniqueId = Tether.Utils.uniqueId;
SETUP_JS = "yellowBox = $('.yellow-box', $output);\ngreenBox = $('.green-box', $output);\nscrollBox = $('.scroll-box', $output);";
OUTPUT_HTML = function(key) {
return "<div class=\"scroll-box\">\n <div class=\"scroll-content\">\n <div class=\"yellow-box\" data-example=\"" + key + "\"></div>\n <div class=\"green-box\" data-example=\"" + key + "\"></div>\n </div>\n</div>";
};
tethers = {};
getOutput = function($block) {
var key;
key = $block.data('example');
if (key && typeof key === 'string') {
return $("output[data-example='" + key + "']");
} else {
return $block.parents('pre').nextAll('output').first();
}
};
run = function(key) {
var $block, $output, code;
if (typeof key === 'string') {
$block = $("code[data-example='" + key + "']");
} else {
$block = key;
}
key = $block.attr('data-example');
$output = getOutput($block);
code = $block.text();
code = SETUP_JS + code;
window.$output = $output;
return tethers[key] = eval(code);
};
setupBlock = function($block) {
var $output, $scrollBox, $scrollContent, key;
key = $block.data('example');
$output = getOutput($block);
if (!key) {
key = uniqueId();
$block.attr('data-example', key);
$output.attr('data-example', key);
$output.find('.tether-element').attr('data-example', key);
}
$output.html(OUTPUT_HTML(key));
$scrollBox = $output.find('.scroll-box');
$scrollContent = $scrollBox.find('.scroll-content');
$scrollBox.scrollTop(parseInt($scrollContent.css('height')) / 2 - $scrollBox.height() / 2);
$scrollBox.scrollLeft(parseInt($scrollContent.css('width')) / 2 - $scrollBox.width() / 2);
setTimeout(function() {
return $scrollBox.on('scroll', function() {
return $output.addClass('scrolled');
});
});
$scrollBox.css('height', "" + ($block.parent().outerHeight()) + "px");
if ($output.attr('deactivated') == null) {
return run($block);
}
};
$(document.body).on('click', function(e) {
if ($(e.target).is('output[deactivated]')) {
activate($(e.target));
return false;
} else if ($(e.target).is('output[activated]')) {
deactivate($(e.target));
return false;
}
});
activate = function($output) {
var $block, key;
$block = $output.prev().find('code');
run($block);
$output.find('.tether-element').show();
key = $output.data('example');
$(tethers[key].element).show();
tethers[key].enable();
$output.removeAttr('deactivated');
return $output.attr('activated', true);
};
deactivate = function($output) {
var $block, $el, key;
$block = $output.prev().find('code');
key = $output.data('example');
tethers[key].disable();
$el = $(tethers[key].element);
$el.detach();
$output.find('.scroll-content').append($el);
$el.hide();
$output.removeAttr('activated');
return $output.attr('deactivated', true);
};
init = function() {
var $blocks, block, _i, _len, _results;
$blocks = $('code[data-example]');
_results = [];
for (_i = 0, _len = $blocks.length; _i < _len; _i++) {
block = $blocks[_i];
_results.push(setupBlock($(block)));
}
return _results;
};
window.EXECUTR_OPTIONS = {
codeSelector: 'code[executable]'
};
$(init);
}).call(this);
+51
View File
@@ -0,0 +1,51 @@
/* globals Tether */
'use strict';
Tether.modules.push({
initialize: function initialize() {
var _this = this;
this.markers = {};
['target', 'element'].forEach(function (type) {
var el = document.createElement('div');
el.className = _this.getClass('' + type + '-marker');
var dot = document.createElement('div');
dot.className = _this.getClass('marker-dot');
el.appendChild(dot);
_this[type].appendChild(el);
_this.markers[type] = { dot: dot, el: el };
});
},
position: function position(_ref) {
var manualOffset = _ref.manualOffset;
var manualTargetOffset = _ref.manualTargetOffset;
var offsets = {
element: manualOffset,
target: manualTargetOffset
};
for (var type in offsets) {
var offset = offsets[type];
for (var side in offset) {
var val = offset[side];
var notString = typeof val !== 'string';
if (notString || val.indexOf('%') === -1 && val.indexOf('px') === -1) {
val += 'px';
}
if (this.markers[type].dot.style[side] !== val) {
this.markers[type].dot.style[side] = val;
}
}
}
return true;
}
});