Skip to content

Instantly share code, notes, and snippets.

View a-x-'s full-sized avatar
🛩️

Alexander a-x-

🛩️
View GitHub Profile
@a-x-
a-x- / sample-server-stack.xjt.js
Last active March 8, 2016 00:06
XJT/BEMS concept sample
'use strict';
import {Priv as Bempriv, Html as Bemhtml, XJT as xjt} from 'bem-server'
// menu.priv.js - es6priv
Bempriv.decl('menu', class menu extends Bempriv {
constructor() {
this.prop('items', this.getItems());
}
getItems() {
// Выдуманная, но близкая к реальности логика маппинга данных
@a-x-
a-x- / sample.xjt.js
Last active March 8, 2016 00:10
XJT/BEMS - Xtendable js/json Transformation (BEMTREE killer) based on `Block Elem Mod State` concept
// TOC
// Intro
// # New BEM based blocks concept — BEMS
// # New 3-step templating concept
// Example
/**
# New BEM based blocks concept — BEMS
## Нейминг: Не мода, а поле
block('viewer-controls')(
def()(function() {
return applyNext({
params: this.ctx.params
});
}),
content()(function() {
return [
@a-x-
a-x- / fuzzysearch.js
Created April 3, 2016 09:26
stupid fuzzysearch O(m). Have not distance limit
function fuzzysearch (sub, str) {
var l1 = sub.length, l2 = str.length;
var i = 0, j = 0;
if (l1 > l2) return false;
for (; i < l1; ++i, ++j) {
if (sub[i] == str[j]) continue;
do {
++j;
if (j >= l2) return false;
@a-x-
a-x- / table-from-ajax-json.es6
Created April 3, 2016 09:51
Built simple table from json via ajax
(() => {'use strict';
let table, tr, td, div, _el, cl;
document.body.innerHTML = 'loading...';
$.get('http://yitv.herokuapp.com')
.then((data) => {
let rows = data.body.reduce((prev, item)=>{
let title = div(item.title, 'title');
let vals = div(item.add_values.join(', '));
let row = td(item.value, 'value') + td(title + vals, null, { title: item.detail });
@a-x-
a-x- / sum-tree.es6
Created April 3, 2016 10:05
Sum tree with data stack (no call stack). Breadth first traversal
function sumTree (tree) {
var sum = tree.value;
var root = tree;
var stack = [root.next];
while(stack.length) {
sum = stack.pop().reduce((sum, root) => {
stack.push(root.next);
return sum + root.value;
}, sum);
@a-x-
a-x- / summary-through-tuples.es6
Last active April 3, 2016 11:06
summarize active and total browsers by its names
var summary = hubs => _(hubs)
.groupBy('browserName')
.mapValues((data, bro) =>
_(data).mapTuple(['active', 'total']).sumTuple().value()
)
.value();
var hubs = [{
host: 'hub01',
browserName: 'firefox',
var cloneObj = obj => {
var newObj = {};
Object.keys(obj).forEach((key) => {
newObj[key] = obj[key];
});
return newObj;
};
var appendTrace = (trace, key, val) => {
var newTrace = cloneObj(trace);
@a-x-
a-x- / verify-image-file-signature.js
Created April 21, 2016 12:52
Upload images guard (MVG picture can show local files content: http://www.imagemagick.org/script/magick-vector-graphics.php).
// on input[type="file"]#change
var file = fileInput.files[0];
(function(){
var reader = new FileReader();
reader.onload = function(e) {
var view = new DataView(e.target.result),
// 0xFFD8 — jpeg file signature (filesignatures.net/?search=jpg&mode=EXT)
isPngSignature = view.getUint32(0, false) === 0x89504E47 && view.getUint32(4, false) === 0x0D0A1A0A,
// 0x 89 50 4E 47 0D 0A 1A 0A — png signature (filesignatures.net/?search=png&mode=EXT)
@a-x-
a-x- / worker-on-fly.js
Last active April 22, 2016 17:26
Javascript threads
var workerFunction = function() {
self.onmessage = function(e) {
self.postMessage('msg from worker' + e.data);
self.close();
};
};
var createWorker = fn => {
var workerFunctionBlob = new Blob(['('+fn.toString()+')()'], { type: "text/javascript" });
var worker = new Worker(URL.createObjectURL(workerFunctionBlob));