• Как расширить core/gallery в WP Gutenberg?

    dakiesse
    @dakiesse Автор вопроса
    После целого для копания в сорсах решил. Начну с описания задачи: хотел добавить дополнительный switch в галерею.

    const { createHigherOrderComponent } = wp.compose
    const { InspectorControls } = wp.editor
    const { PanelBody, ToggleControl } = wp.components
    const el = wp.element.createElement
    
    // описания для состояния
    const attributes = {
      enableVoting: {
        default: false,
        type: 'boolean'
      }
    }
    
    function addAttributes (settings, name) {
      if (name !== 'core/gallery') {
        return settings
      }
    
      Object.assign(settings.attributes, attributes)
    
      // возвращаем тот же объект, а не клон как предлагают в некоторых источниках!!!
      return settings
    }
    
    const withInspectorControls = createHigherOrderComponent((BlockEdit) => {
      return (props) => {
        const { attributes, setAttributes } = props
    
        return el(wp.element.Fragment, {},
          el(BlockEdit, props),
    
          props.name === 'core/gallery' && (
            el(InspectorControls, null,
              el(PanelBody, null,
                el(ToggleControl, {
                  label: 'Enable voting',
                  checked: attributes.enableVoting,
                  onChange: () => {
                    setAttributes({ enableVoting: !attributes.enableVoting })
                  }
                })
              )
            )
          )
        )
      }
    }, 'withInspectorControl')
    
    const addExtraData = (props, blockType, attributes) => {
      if (blockType.name !== 'core/gallery') {
        return props
      }
    
      let classes = props.className.split(' ')
    
      if (attributes.enableVoting) {
        !classes.includes('is-voting') && classes.push('is-voting')
      } else {
        classes = classes.filter(className => className !== 'is-voting')
      }
    
      props.className = classes.join(' ')
    
      // возвращаем тот же объект, а не клон как предлагают в некоторых источниках!!!
      return props
    }
    
    wp.hooks.addFilter('blocks.registerBlockType', 'godreams/gallery', addAttributes)
    wp.hooks.addFilter('editor.BlockEdit', 'godreams/gallery', withInspectorControls)
    wp.hooks.addFilter('blocks.getSaveContent.extraProps', 'godreams/gallery', addExtraData)
    Ответ написан
    1 комментарий
  • Как правильно развернуть приложение react-native в Visual Studio Emulator for Android?

    Вот не так давно работал с Expo, но ушел с него, по-этому по памяти: Android Studio в этом случае не нужна. Вам необходимо на мобильном телефоне установить приложение Expo. После запуска приложения $ npm run android у вас должен появиться QR-код в консоле, его вы и просканируете в мобильном приложение Expo, и приложение отрендерит. На этом всем. По поводу вывода в эмулятор, не подскажу.
    Ответ написан
  • В Dropzone.js как сделать thumbnails?

    1. нужно отлавливать событие `addfile` (см. раздел Events в документации Dropzone)
    2. с помощью FileReader API получить datauri
    3. создать new Image,
    4. запихать в его src = datauri
    5. отрисовать Image где-либо (либо в контейнере самого dropzone)

    Я когда-то давно делал такое, точно конечно же не помню, но алгоритм примерно такой.
    Доп. ссылка пример FileReader API: https://codepen.io/matt-west/pen/CfilG
    Ответ написан
    Комментировать
  • Как перехватить backspace в Chrome?

    keypress событие срабатывает только для character (которые выводят) клавиш. Для Control, Shift, Alt, BackSpace нужно отлавливать событие keydown
    Ответ написан
  • Как сделать поиск массива слов на странице?

    Если поиск с точным совпадением, то
    ['word1', 'word2', 'word3'].indexOf('word2');
    Если метод не находит совпадений, возвращает -1 иначе индекс в массиве.

    Если нужен поиск по вхождениям, то нужно перебирать массив и у каждого элемента искать подстроку.
    Ответ написан
    Комментировать
  • Как открыть fancybox попап из попапа?

    Вы должны после вставки контента который пришел с ajax запроса в fancybox, забиндить событие click на новую кнопку и в обработчике выполнить, то что вы хотите. У fancybox есть события beforeShow, в нем и нужно будет найти node кнопки, которая уже будет вставлена из контента.
    .done(function(data) {
      // ...
      $.fancybox(data, {
        beforeShow: function () {
          var $btn = // тут вы смотрите в this и там найдете свойство в виде jquery выборки в котором будет ваш контент
    
          $btn.on('click', function () {
            // ваши действия
          })
        }
      })
      // ...
    })
    Ответ написан
    3 комментария
  • Почему move_upload_file сохраняет файлы torrent, apk как папку?

    Если у вас $_POST['path'] содержит только путь, то добавляйте явно название файла.
    $filepath = sprintf('/%s/%s', $_POST['path'], $_FILES['file']['name'])
    move_uploaded_file($_FILES['file']['tmp_name'], $filepath);
    Ответ написан
    Комментировать
  • Select2 как сохранить порядок select'a?

    <select id="jq-select2" name="select" multiple="multiple">
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
        <option value="4">D</option>
    </select>


    var $select = $('#jq-select2');
    // Индекс сортировки
    var sortIndex = 0;
    
    var select2Instance = $select.select2({
        // Явно определяем сортировку элементов в dropdown, иначе сортировка,
        // которая отрабатывает в обработчике события selecting, будет
        // переопределят и вывод и в dropdown. Чтоб понять о чем речь
        // можно закомментить данную опцию.
        sorter: function (data) {
            return data.sort(function (a, b) {
                if (Number(a.id) > Number(b.id)) return 1;
                else if (Number(a.id) < Number(b.id)) return -1;
                return 0;
            });
        }
    }).data().select2;
    
    // Событие когда выбрали элемен в dropdown (перед вставкой в select2)
    select2Instance.on('selecting', function (e) {
        // Увеличиваем индекс сортировки и привайваем ноде
        // в виде нового свойства объекта (лучше в dataset запихать)
        e.args.data.element.sortIndex = ++sortIndex;
    
        // Получвем все option из select`а
        var $options = $select.find('option');
    
        // Сортируем все option`ы по индексу сортировки
        $options.sort(function (a, b) {
            if (~~a.sortIndex > ~~b.sortIndex) return 1;
            else if (~~a.sortIndex < ~~b.sortIndex) return -1;
            return 0;
        });
    
        // Очищаем select от option`ов и аппендим отсортированные
        $select.empty().append($options);
    });


    Вот, что получилось после часа тупника. Единственное появляется один баг, при удаление элемента появлется dropdown. С этим придется вам повозиться.
    Ответ написан
    Комментировать
  • Как с помощью foundation abide проверять склеенные в один 4 инпута ввода номера карты?

    Наверное дизайнер по мимо прочего еще и подразумевал, что в каждом input будет по 4 цифры? Если так, то возникает проблема другая. Есть карты у Visa (вроде бы), где более 16 цифр.

    Самое тупое, что можно придумать, чтоб не модифицировать ни чего, это сделать 4 input поверху одного input.
    Данные которые вводятся в 4 input собирать и вносить в тот input.
    joxi.ru/jnAyDnRU9YVO2Z
    Ответ написан
    Комментировать
  • Как выполнить php artisan на хостинге?

    Есть пакет с веб-интерфейсом JN-Jones/web-artisan
    Сам не использовал, на скорую руку нашел
    Ответ написан
    Комментировать
  • Как поправить структуру папок в laravel?

    Все зависит от хостинга, если не трогать laravel.
    Вариант непосредственное с изменением в laravel. Можно вынести например все папку за пределы domain.com и в public/index.php изменить пути.
    Пример файловой структры:
    =====
    .
    ..
    laravel_folder
    -- (тут все, кроме public)
    domain.com
    -- (тут все, что в папки public)
    anotherSite1.com
    anotherSite2.com
    Ответ написан
  • Можно ли объявить в абстрактном классе абстрактное свойство (в PHP)?

    Представь, ты разрабатываешь API для отправки прочты и тебе захотелось по мимо build-in реализация отправки почты (функция mail) реализовать еще несколько вариантов, например использовать сервис Mailgun. API ты конечно же разрабатываеть, чтоб им пользовались другие разработчики, и ты прекрасно понимаешь, что сторонний разработчик может захотеть отправлять и через другие сервисы, например тот же mailchimp. Твоя задача предоставить понятный "интерфейс" стороним разработчикам. Например каждый новый provider должен реализовать методы setSubject, setBody, send, к ним аргументы, а так же ты указываешь в документации, что должны возвращать эти методы. Все, ты подготовил "интерфейс". Теперь я реализую его. Какие я там буду создавать свойства - это уже не касается интерфейса. Да хоть global variable использовать, это уже не его дело. Вот и подумай, нужны ли вообще абстрактные свойства
    Ответ написан
    2 комментария
  • Как вернуть xhr.responseText из функции?

    Если нужен пакет только для ajax, как вариант superagent. Простой и красивый api
    https://github.com/visionmedia/superagent
    Ответ написан
    Комментировать
  • Как оптимизировать работу со сниппетами в PhpStorm?

    Как таковой панели из коробки нету. Единственное, что мне известно, можно предложить Insert Live Template (Ctrl + J)
    Ответ написан
    Комментировать
  • Как реализовать свою кнопку play/pause для плеера Vimeo?

    У них тож есть раздел API
    1bfc8808780a44b98c0479dc51c7b80b.png
    Ответ написан
    Комментировать
  • Как и чем можно сделать парсинг объявлений?

    В гугле пишите: {язык программирования который используете} parse html
    Вот второй результат по запросу "php parse html", habrahabr.ru/post/176635
    Смысл такой, получить html страницы, разобрать и вытащить данные нужные из нужных нод (в этом как раз и поможет то, что по ссылке на хабр), а потом уже записать в базу данных все это дело (или разбера между делом записывать в БД, это ваше дело)
    Ответ написан
    Комментировать
  • Как объединить htaccess?

    RewriteEngine On
    RewriteRule ^user/(.+)$ /profile.php?username=$1 [L] # все запросы user/* будет обрабатывать profile.php
    
    RewriteCond %{REQUEST_FILENAME}\.php -f # если {query}.php
    RewriteRule ^(.*)$ $1.php # то {query} будет обрабатывать {query}.php

    Условие RewriteCond %{REQUEST_FILENAME} !-d я не стал вкладывать в код намерено для ясности
    Ответ написан
    6 комментариев
  • Как в Laravel построить маршрут?

    Модель должна запросить данные и по какому то условию
    Route::get('/{link}', function ($link) {
      return Links::whereLink($link)->get(); # вернет объект
    });


    UP#1
    Напишите вот так:
    Route::get('/{link}', function ($link) {
      return $link;
    });

    И при запросе на domain.ru/name-link вы увидете в браузере "name-link". Это первый шаг. Второй, получить данные из модели, следовательно пишим (возможно я ошибаюсь по поводу метода whereLink, по этому другой юзаем)

    Route::get('/{link}', function ($link) {
      $data = Links::where('link', '=', $link)->get(); # вернет объект
      var_dump($data); # посмотреть вывод
      return $data;
    });
    Ответ написан
    2 комментария
  • Как заставить php build-in сервер отдавать несуществующую статику?

    dakiesse
    @dakiesse Автор вопроса
    Разобрался, оказывается build-in сервер не поддерживает .htaccess. Релизовывать роутинг необходимо средствами php.

    <?php
    # routing.php
    if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
        return false;
    } else {
        include __DIR__ . '/index.php';
    }


    Далее запускаем сам сервер с кастомной точкой входа

    php -S localhost:8000 routing.php

    PS. Данный пример все равно не будет отдавать сгенерированный js, но тут уже можно дописать
    Ответ написан
    Комментировать
  • Какая видеокарта лучше: GT 740M_1Gb или GT 710M_2Gb?

    Таблица мобильных видеокарт
    А вообще 710(M) это low level (самые слабые) карты из всего семейства. 740(m) middle-low вроде бы.
    Ответ написан
    Комментировать