Skip to content

Instantly share code, notes, and snippets.

// Unique with use object
function uniqueObject(array) {
var hash = Object.create(null);
var result = [];
var value;
for (var i = 0; i < array.length; i++) {
value = array[i];
if (!hash[value]) {
hash[value] = true;
@lahmatiy
lahmatiy / createBlockClass.js
Created July 27, 2016 13:17
Implementation of `model` and `visible` for from fields in basis.js
var events = require('basis.event');
var resolveValue = require('basis.data').resolveValue;
module.exports = function createBlockClass(BaseClass, ext) {
return BaseClass.subclass(ext, {
visible: true,
visibleRA_: null,
emit_visibleChanged: events.create('visibleChanged'),
// value could be a function or binding-bridge instance; any other converts to bool
setVisible: function(value) {
@lahmatiy
lahmatiy / bem-scopes-example.js
Last active April 16, 2016 10:57
Example of css scopes building
var csso = require('csso');
function splitByScope(css) {
var scopes = {};
csso.walk(csso.parse(css), function(node) {
if (node.type === 'Class') {
var className = node.name;
var scopeId = className.replace(/^([^_]+)_.+/, '$1'); // scopeId is block name
@lahmatiy
lahmatiy / refs.js
Created September 10, 2015 20:59
Find the difference
// react 0.14-rc1
var Zoo = React.createClass({
render: function() {
return <div>Giraffe name: <input ref="giraffe" /></div>;
},
showName: function() {
// Previously: var input = this.refs.giraffe.getDOMNode();
var input = this.refs.giraffe;
alert(input.value);
}
@lahmatiy
lahmatiy / prevent-input.js
Last active May 22, 2023 17:19
Snippet for node.js to prevent any user input while script is working, but process ctrl+c to exit
// doesn't work w/o this interface creation
require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
// stop process input
process.stdin.pause();
// read from stdin 10 times per second to check if ctrl+c pressed
@lahmatiy
lahmatiy / custom-progressbar.js
Last active August 29, 2015 14:26
Done on the knee progressbar
var chalk = require('chalk');
var readline = require('readline');
var BAR_LENGTH = 40;
var lines = 0;
function repeatStr(str, len){
return new Array(parseInt(len) + 1).join(str);
}
function drawBarLine(fill, str){
@lahmatiy
lahmatiy / enum.js
Last active August 29, 2015 14:17
Example of persistent user preferences using basis.js
//
// Enum class is proposed future citizen of basis.js
//
var Value = require('basis.data').Value;
var Enum = Value.subclass({
className: 'Enum',
init: function(){
function getRange(str, start, end){
var lines = str
.split('\n')
.slice(start.line - 1, end.line);
return lines
.concat(lines.pop().substr(0, end.column))
.join('\n')
.substr(start.column - 1);
}
@lahmatiy
lahmatiy / _usage.js
Last active August 29, 2015 14:05
basis.data.ReadOnlyDataset#contains
// we could create several effects for node/models and don't affect node/models
var source = new basis.data.Dataset({ items: [/* .. */]});
var modified = new basis.data.dataset.Filter({
source: source,
ruleEvents: 'rollbackUpdate',
rule: 'data.modified'
});
var customSet = new basis.data.Dataset();
var view = new basis.ui.Node({
@lahmatiy
lahmatiy / wat.js
Last active August 29, 2015 14:04
elem.animate() as cool as not ready to use!
// create element with color green
var elem = document.createElement('div');
elem.style.color = 'green';
document.body.appendChild(elem); // add to document, to make getComputedStyle/animate works
console.log(getComputedStyle(elem).color); // rgb(0, 128, 0) - it's OK!
// add animation
var player = elem.animate([
{ color: 'red' },
{ color: 'blue' }