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

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


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

Простая функция для определения AJAX запроса на PHP.

<?php

function request_is_ajax()
{
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
        strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}

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;
}

samdark
  • Репутация: 349
  • Сниппеты: 57
  • Ревизии: 5

Запрос позволяет эффективно выбрать 10 последних комментариев, максимум по одному на пост.

SELECT *
FROM comment c1
LEFT JOIN comment c2 ON c1.id < c2.id AND c1.post_id = c2.post_id
WHERE c2.id IS NULL
ORDER BY c1.id DESC
LIMIT 10
Gravatar image
Nepster
  • Репутация: 151
  • Сниппеты: 19
  • Ревизии: 0

Bootstrap 3 модальное окно по центру.

.modal {
  text-align: center;
}

@media screen and (min-width: 768px) { 
  .modal:before {
    display: inline-block;
    vertical-align: middle;
    content: " ";
    height: 100%;
  }
}

.modal-dialog {
  display: inline-block;
  text-align: left;
  vertical-align: middle;
}
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

dfatt
  • Репутация: 260
  • Сниппеты: 53
  • Ревизии: 7

Если вам не подходит это решение по каким-то своим причинам, и у вас большой список элементов в dropdown. Вы можете добавить обычный скролл списка:

4aab5b09613354a2e25c115a4e8dd84a.gif

Добавим класс scrollable

<div class="dropdown">
    <button class="btn btn-default dropdown-toggle" type="button" id="menu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
        Dropdown
        <span class="caret"></span>
    </button>
    <ul class="dropdown-menu scrollable" aria-labelledby="menu">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
        ...
    </ul>
</div>

И последний шаг, css:

.dropdown-menu.scrollable {
    height: auto;
    max-height: 30em;
    overflow-x: hidden;
}
Gravatar image
frama
  • Репутация: 17
  • Сниппеты: 1
  • Ревизии: 0

Для использования justify-блоков:

<div class="justify">
   <div class="justify-block">1</div>
   <div class="justify-block">2</div>
   <div class="justify-block">3</div>
</div>
.justify {
  text-align: justify;
}
.justify:after {
  content: " ";
  display: inline-block;
  width: 100%;
}
.justify-block {
  display: inline-block;
  vertical-align: top;
  text-align: left;
  width: 330px; /* Требуемая ширина блока */
}
samdark
  • Репутация: 349
  • Сниппеты: 57
  • Ревизии: 5
git reset --soft HEAD~3
git commit -m 'new commit message'

3 заменить на N.

Работает и на уже push-нутых ветках, если потом делать git push --force. Последняя команда заменят ветку целиком, так что с ней надо быть особо осторожным.

Иван Бармашов
  • Репутация: 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?"
});

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