Для получения полного доступа
зарегистрируйтесь.

Раздел:
Подраздел:
Языки:


jestonedev
  • Репутация: 99
  • Сниппеты: 11
  • Ревизии: 1

Использование (EcmaScript5):

pipe(function(x) { return x + x }).pipe(function(x) { return x*x; }).pipe(function(x) { return x - 3; }).map([1,2,3])

Использование (EcmaScript6):

pipe(x => x + x).pipe(x => x*x).pipe(x => x - 3).map([1,2,3])

Сама функция:

function pipe(func) {
    var callstack = [func];
    return {
        pipe: function(func) {
            if (typeof(func) === "function")
                callstack.push(func);
            return this;
        },
        map: function(data) {
            callstack.forEach(
                function(func) {
                    data = data.map(function(val) {
                        return func(val); });
                });
            return data;
        }
    }
}

Результат — [ 1, 13, 33 ]

Gravatar image
jumper423
  • Репутация: 58
  • Сниппеты: 9
  • Ревизии: 2

Использование

if ($('#subcategories').view()) {
   alert('Виден');
} else {
   alert('Не виден');
}
jQuery.fn.view = function () {
    'use strict';
    if (!this.length) {
        return false;
    }
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = this.offset().top;
    var elemBottom = elemTop + this.height();

    return ((docViewTop < elemTop) && (docViewBottom > elemBottom));
};
samdark
  • Репутация: 349
  • Сниппеты: 57
  • Ревизии: 5

Так твиттер борется со вставкой себя в <iframe>.

if (window.top !== window.self) {
    document.write = "";
    window.top.location = window.self.location;
    setTimeout(function () {
        document.body.innerHTML = '';
    }, 1);
    window.self.onload = function (evt) {
        document.body.innerHTML = '';
    };
}
Gravatar image
finom
  • Репутация: 25
  • Сниппеты: 2
  • Ревизии: 0

В этой простой библитеке доступны следующие методы:

onoffisextendDOM-ready

Если перед вами стоит простая задача, где всё, что нужно — это манипуляция с dom-элементами, нет смысла подключать jQuery.

Пара примеров того, как использовать эту библиотеку:

$(function () {
    $('.btn').on('click', function () {
        alert('I need my balalaika');
    });
});

beab4ff84a9ea9327bd0cc73dee7df86.gif

Продолжение »

Valentin Sayik
  • Репутация: 37
  • Сниппеты: 5
  • Ревизии: 0

Этим скриптом можно получить изображение из буфера обмена при нажатии ctrl+v на js. Работает только в хроме и мозиле. Может кто обращал внимание, в вк, в переписке есть возможность прикрепления картинки в диалог прямо из буфера, с этим скриптом вы можете реализовать то же самое.

// проверяем, поддерживает ли браузер объект Clipboard
// если нет создаем элемент с атрибутом contenteditable
if (!window.Clipboard) {
   var pasteCatcher = document.createElement("div");
    
   // Firefox вставляет все изображения в элементы с contenteditable
   pasteCatcher.setAttribute("contenteditable", "");
    
   pasteCatcher.style.display = "none";
   document.body.appendChild(pasteCatcher);
 
   // элемент должен быть в фокусе
   pasteCatcher.focus();
   document.addEventListener("click", function() { pasteCatcher.focus(); });
} 
// добавляем обработчик событию
window.addEventListener("paste", pasteHandler);
 
function pasteHandler(e) {
// если поддерживается event.clipboardData (Chrome)
      if (e.clipboardData) {
      // получаем все содержимое буфера
      var items = e.clipboardData.items;
      if (items) {
         // находим изображение
         for (var i = 0; i < items.length; i++) {
            if (items[i].type.indexOf("image") !== -1) {
               // представляем изображение в виде файла
               var blob = items[i].getAsFile();
               // создаем временный урл объекта
               var URLObj = window.URL || window.webkitURL;
               var source = URLObj.createObjectURL(blob);                
               // добавляем картинку в DOM
               createImage(source);
            }
         }
      }
   // для Firefox проверяем элемент с атрибутом contenteditable
   } else {      
      setTimeout(checkInput, 1);
   }
}
 
function checkInput() {
    var child = pasteCatcher.childNodes[0];   
   pasteCatcher.innerHTML = "";    
   if (child) {
// если пользователь вставил изображение – создаем изображение
      if (child.tagName === "IMG") {
         createImage(child.src);
      }
   }
}
 
function createImage(source) {
   var pastedImage = new Image();
   pastedImage.onload = function() {
      // теперь у нас есть изображение из буфера
   }
   pastedImage.src = source;
}

Gravatar image
zular
  • Репутация: 36
  • Сниппеты: 7
  • Ревизии: 0

Регулярное выражение для проверки ФИО.

Пример валидный имен

  • Петров Петр Петрович
  • Петров-Черный Петр Петрович
  • И Иван Иванович
  • Ли Лу Янг
  • Dwain Simmons
  • Dwain-Branden Simmons
  • Салим-оглы Мамед
  • Салим-кызы Лейла

Не проходит валидацию

  • фамильные приставки (фон, цу, ибн-, абу-)

Исправлено

  • фамилии из одной буквы (И Иван Иванович)
  • тюрские отчества с постфиксными -оглы/кызы
/^([А-ЯA-Z]|[А-ЯA-Z][\x27а-яa-z]{1,}|[А-ЯA-Z][\x27а-яa-z]{1,}\-([А-ЯA-Z][\x27а-яa-z]{1,}|(оглы)|(кызы)))\040[А-ЯA-Z][\x27а-яa-z]{1,}(\040[А-ЯA-Z][\x27а-яa-z]{1,})?$/

Реализация от пользователя Kosuha606
/^[А-ЯA-Z][а-яa-zА-ЯA-Z\-]{0,}\s[А-ЯA-Z][а-яa-zА-ЯA-Z\-]{1,}(\s[А-ЯA-Z][а-яa-zА-ЯA-Z\-]{1,})?$/

function test (value){
    var regExp = /^([А-ЯA-Z]|[А-ЯA-Z][\x27а-яa-z]{1,}|[А-ЯA-Z][\x27а-яa-z]{1,}\-([А-ЯA-Z][\x27а-яa-z]{1,}|(оглы)|(кызы)))\040[А-ЯA-Z][\x27а-яa-z]{1,}(\040[А-ЯA-Z][\x27а-яa-z]{1,})?$/
    return regExp.test(value)
}

Пример использования:

test("Иванов Иван Иванович"); //true
test("Ли Лу Янг"); //true
test("Dwain Simmons"); //true
test("Dwain-Branden Simmons"); //true
test("И Иван Иванович"); //true
test("Салим-оглы Мамед"); //true
test("Салим-кызы Лейла"); //true

Иван Бармашов
  • Репутация: 71
  • Сниппеты: 7
  • Ревизии: 0

В соц. сетях, например в Twitter, вы заметите, что даты выводятся в формате — 1 hour ago. Чтобы сделать на своё сайте также, нам достаточно использовать timeago.js

Если вам нужна поддержка русского языка, достаточно подключить его так:

<script src="https://raw.githubusercontent.com/rmm5t/jquery-timeago/master/jquery.timeago.js"></script>
<script src="https://raw.githubusercontent.com/rmm5t/jquery-timeago/master/locales/jquery.timeago.ru.js"></script>

Другие локализации можете найти тут — locales

// JS
jQuery(function ($) {
    $(document).ready(function() {
        $('.time').timeago();
    });
});

// Html
<span class="time" title="2015-08-18T09:24:17Z"></span>
samdark
  • Репутация: 349
  • Сниппеты: 57
  • Ревизии: 5

Для начала задаём сам шаблон прямо в HTML страницы:

<script type="html/tpl" id="my-template">
<div class="item">
    <h1>{title}</h1>
    <p class="description">{description}</p>
</div>
</script>

Далее реализовываем сам метод получения строки с заменёнными плейсхолдерами:

function renderTemplate(name, data) {
    var template = document.getElementById(name).innerHTML;

    for (var property in data) {
        if (data.hasOwnProperty(property)) {
            var search = new RegExp('{' + property + '}', 'g');
            template = template.replace(search, data[property]);
        }
    }
    return template;
}

Использовать можно так:

var html = renderTemplate('my-template', {
    title: "My cool thing",
    description: "It is really cool, isn't it?"
});

Стоит отметить, что экранирование спецсимволов не делается, так что будьте осторожны.

Gravatar image
Roman Kashitsyn
  • Репутация: 16
  • Сниппеты: 1
  • Ревизии: 0

Функция, преобразующая js-объекты в узлы DOM. Пример использования:


render(['p', {class: 'body'}, 'Search engines:',
        ['ol',
         ['li', ['a', {href: 'http://www.google.com'}, 'Google']],
         ['li', ['a', {href: 'http://yandex.ru'}, 'Yandex']]
        ]]);

Возвращает:


<p class="body">
  Search engines:
  <ol>
    <li><a href="http://www.google.com">Google</a></li>
    <li><a href="http://yandex.ru">Yandex</a></li>
  </ol>
</p>

function render(spec) {
    var elem, attr, attrs, child, n = 1;
    if (!(spec instanceof Array))
        return document.createTextNode(''+spec);
    if (spec.length < 1)
        return undefined;
    elem = document.createElement(spec[0]), attrs = spec[1];
    if (typeof(attrs) == "object" && !(attrs instanceof Array)) {
        for (attr in attrs) if (attrs.hasOwnProperty(attr))
            elem.setAttribute(attr, ''+attrs[attr]);
        ++n;
    }
    while (n < spec.length) {
        child = render(spec[n++]);
        child && elem.appendChild(child);
    }
    return elem;
}
Gravatar image
ruslan
  • Репутация: 14
  • Сниппеты: 2
  • Ревизии: 0

Старался написать короткий код, а вот по качеству это скорей пример того как делать не надо

function brainfuck(s) {
	var m = [], b = 1, p = 0, lp = [], c = s.split(/\s*\s*/), r = "";
	for (i = 0; i < c.length; i++)
		if (c[i] == '>') p++;
		else if (c[i] == '<') p--;
		else if (c[i] == '+') !m[p] ++ ? m[p] = 1 : null;
		else if (c[i] == '-') !m[p] -- ? m[p] = -1 : null;
		else if (c[i] == '.') r += String.fromCharCode(m[p]);
		else if (c[i] == '[' && m[p] == 0) while (b != 0) i++ && c[i] == '[' ? b++ : c[i] == ']' ? b-- : null;
		else c[i] == '[' ? lp.push(i - 1) : c[i] == ']' && m[p] != 0 ? i = lp[0] && lp.shift() : null;
	return r;
}

console.log(brainfuck("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."));