• Как русифицировать шрифт от Google Fonts?

    mlnkv
    @mlnkv
    JavaScript Developer
    htmlbook.ru/css/font-face

    Raleway-Regular-Italic.ttf
    Raleway-Regular.ttf
    Raleway-Bold-Italic.ttf
    Raleway-Bold.ttf
    Raleway-ExtraBold-Italic.ttf
    Raleway-ExtraBold.ttf

    у вас в ссылке используется шрифт 400, 700, 800 ширины ( ...Raleway:400,700,800&... )

    100 = thin
    200 = extra-light
    300 = light
    400 = normal, book
    500 = medium
    600 = demi-bold
    700 = bold
    800 = heavy
    900 = black

    help.typekit.com/customer/portal/articles/6855-usi...
    Ответ написан
    Комментировать
  • Объясните простыми словами как работает Redux?

    У вас есть одно большое дерево, в котором хранится все состояние (state) приложения - это хранилище (store).
    Также у вас есть набор редьюсеров (которые скомбинированы в один общий rootReducer) - это функции, который принимают текущее состояние и действие и возвращают новое состояние:
    function someReducer(state = initialState, action) {
      // обычно выглядит как switch 
      // action - простой js-объект
      //              и обязательно имеет строковое поле type
      switch(action.type) {
        // обрабатываем действие с типом SOME_ACTION_NAME
        case 'SOME_ACTION_NAME':
          // берем какие-то данные из экшена и возвращаем новое состояние
          // при этом менять sate нельзя!
          // state.someProperty = action.newStateData <--- НЕТ!
          return { ...state, action.newStateData };
        // Если мы не обрабатываем действие - просто возвращаем старое состояние
        default:
          return state;
      }
    }


    Также есть экшен креаторы (actionCreators) - это функции, которые возвращают действие. затем это действие вещается в хранилище (диспатчится). Типичный пример:
    function someActionCreator(someArg) {
      return {
        type: 'SOME_ACTION_NAME',
        newStateData: someArg + 5, // <-- разная логика
      };
    }


    По-умолчанию в качестве экшена мы можем вернуть только простой объект, но при создании хранилища можно добавить так называемый middleWare. Это специальные функции, которые принимают все экшены из диспатча и могут передавать их дальше (при этом содержат дополнительную логику).

    Если мы хотим получить доступ к состоянию в экшен креаторе - воспользуемся thunkMiddleware:
    import thunkMiddleware from 'redux-thunk';
    
    function createStore(initialState) {
      const reducer = combineReducers(reducers);
      const finalCreateStore = applyMiddleware(
        thunkMiddleware // <-- добавляем middleware
      )(defaultCreateStore);
      return finalCreateStore(reducer, initialState);
    }


    Теперь мы можем делать так:
    function someActionCreator(someArg) {
      return (dispatch, getState) => { // <-- возвращаем фукнцию, а не объект!
        const someState = getState().reducerName;
        return {
          type: 'SOME_ACTION_NAME',
          newStateData: someArg + someState, 
        };
      };
    }


    В общем схема выглядит так:

    actionCreator --action--> dispatch --action--> middleware --action--> store --action--> reducer --> newState


    Затем мы берем из react-redux метод connect, который подключает Ваш умный компонент к хранилищу:
    import { connect } from 'react-redux';
    import { bindActionCreators } from 'redux';
    
    class MyComponent extends Component {
      static propTypes = {
        someProp: PropTypes.string.isRequired,
        someFunc: PropTypes.func.isRequired,
      };
    }
    
    // Тут мы берем из глобального состояния необходимую нам часть
    // В ownProps - свойства компонента. Тут могут быть например свойства от роутера
    function mapStateToProps(state, ownProps) {
      return {
        someProp: state.someReducer,
      };
    }
    
    function mapActionsToProps(dispatch) {
      return bindActionCreators ({ // <-- биндим все на disptach для удобства
        someFunc: (someArg) => someActionCreator(someArg + 1),
      }, dispatch);
    }
    
    export default connect(
      mapStateToProps,
      mapActionsToProps
    )(MyComponent);
    Ответ написан
    3 комментария
  • Как через API Facebook опубликовать запись на стене группы?

    @vista1x
    1) Для начала создаешь приложение. Сделать это можно тут https://developers.facebook.com
    Важные моменты: в настройках необходимо указать email и активировать приложение (раздел app review)
    2) Нужно получить ключ для работы с апи. Идешь сюда https://developers.facebook.com/tools/explorer, в правом верхнем углу жмешь Get Token -> Get Page Access Token, даешь разрешения на запрос прав доступа. Жмешь снова Get Token и выбираешь свою группу, потом жмешь Request publish_pages и снова соглашаешься. Тут мы получили временный ключ. Нужно обменять его на постоянный (ну как постоянный.. действовать он будет 60 дней, далее - нужно будет снова получать).
    Выполняешь такой запрос (в этом же приложении)
    oauth/access_token?grant_type=fb_exchange_token&client_id=[ID_ПРИЛОЖЕНИЯ]&client_secret=[КЛЮЧ_ПРИЛОЖЕНИЯ]&fb_exchange_token=[ТОКЕН]

    То, что в квадратных скобках, естественно, подставляешь своё. Токен берешь из поля "маркер доступа". Выполняешь запрос, в ответе будет твой токен. Ура.

    Теперь то, что касается программирования:
    1) Берешь Facebook SDK https://github.com/facebook/facebook-php-sdk-v4/ (ставить конечно лучше через композер, но если не имеешь представления "что это и как с этим работать", то просто скачиваешь и инклудишь себе автозагрузчик, должно работать.
    2) Сам постинг.
    $app_id = ''; // ид приложения. берешь в настройках приложения (или копируешь с адресной строки)
    $app_secret = ''; // ключ приложения. берешь в настройках приложения
    $access_token = ''; // токен, который мы получили
    $page_id = ''; // id группы
    
    $fb = new Facebook\Facebook(array(
        'app_id' => $app_id,
        'app_secret' => $app_secret,
        'default_graph_version' => 'v2.2',
    ));
    $fb->setDefaultAccessToken($access_token);
    
    // а тут мы непосредственно постим запись на стену. 
    // в этом примере запись представляет собой картинку + текст
    $data = [
        'message' => 'Текст',
        'source' => $fb->fileToUpload('/полный/путь/к/картинке'),
    ];
    $batch = [
        'photo' => $fb->request('POST', "/{$page_id}/photos", $data),
    ];
    $responses = $fb->sendBatchRequest($batch);


    Если пост не уходит, смотришь переменную $responses - в ней есть ответ сервера.
    Ну и документацию не стоит обходить стороной https://developers.facebook.com/docs/php/gettingst... Тут, кстати, описана установка SDK поподробнее
    Ответ написан
    6 комментариев
  • Rails 4 + turbolins + yandex map, Как сделать чтоб карта загружалась и с turbolinks?

    @elikru
    ymaps.coffee:

    window.ya_init = ->
      $('.ymap').not('.done').addClass('done').each ->
        $m = $(this)
        ymaps.geocode($m.data('address'), {results: 1}).then (res) ->
          firstGeoObject = res.geoObjects.get(0)
          coords = firstGeoObject.geometry.getCoordinates()
          map = new ymaps.Map($m[0],
            center: coords
            zoom: 15,
            behaviors: ['default'] #, 'scrollZoom']
          )
          map.controls.add('zoomControl', { left: 5, top: 5 })
          myPlacemark = new ymaps.Placemark(coords)
          map.geoObjects.add(myPlacemark)
    
    $ ->
      return if $('.ymap').not('.done').length == 0
      if window.ymaps
        ya_init()
      else
        $.getScript( "//api-maps.yandex.ru/2.1/?load=package.full&lang=ru-RU&onload=ya_init")


    somepage.html.slim:
    .ymap data-address="Москва, Кремль"

    Подсмотрел в rocket_cms
    Ответ написан
    Комментировать
  • На сколько реально выучить SWIFT если никогда не учил программирование?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    comics1.jpg
    Ответ написан
    Комментировать
  • Как правильно задать отступы haml-rails?

    @fuCtor
    Ruby разработчик
    У Haml строгая иерархия, поэтому последний div либо должен быть вложен во все случаи, либо class должен быть рассчитан отдельно, например вот так:

    - klass = 'c3'
    - if condition1?
      - klass = 'c1'
    - elsif condition2?
      - klass = 'c2'
     
    
    %div{class: klass}
      %div
        Этот див вставлен в другой


    А вообще эту логику нужно вынести в идеале в helper.
    Ответ написан
    Комментировать
  • Какие Вы знаете сайты с jQuery плагинами?

    Serj-One
    @Serj-One
    i'm sexy and i know it
    www.unheap.com
    Отличный каталог, разбит на категории, с демками и описаниями.
    Ответ написан
    1 комментарий
  • Почему сдвигается контент при открытии модального окна?

    @robotcigan
    Пропиши в css
    .modal-open{overflow-y: scroll;}
    или
    .modal-open{overflow-y: visible;}
    Ответ написан
    Комментировать
  • Как проверить значение текста и добавить класс?

    ваш код работает, можете проверит на этот jsfiddle.

    вот еще другой вариант:
    $('.views-field-field-jtc-top .field-content').each(function() {
      var  $this    = $(this),
           _index   = parseInt($this.val()) - 1,
           _classes = ['first-rating', 'second-rating', 'third-rating'];
           //console.log (_classes[_index]);
         if (_classes[_index]) {
      	     $this.addClass(_classes[_index]);  
         } else {
              $this.addClass('other-rating'); 
         }
    });

    Демо
    Ответ написан
    1 комментарий
  • На какие темы написать статьи по Ruby/Rails?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Расскажите, как написать для rails-приложения api, с авторизацией и всем прочим. То есть не сам апи на рельсах, а рабочее приложение + апи для доступа к данным приложения извне. Это было бы очень интересно.
    Ответ написан
    1 комментарий
  • Редирект или алиас – как правильно перенаправить с одного домена на другой?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Редирект, это когда происходит перенаправление на другой УРЛ при попытке зайти на нужный домен. В nginx лучше это делать так:
    server {
    listen 80; #или гдетамувас
    server_name site.com;
    return 301 $scheme://$http_host$request_uri; 
    }


    Алиас - когда по двум доменам показывается один и тот же контент (без редиректов).
    Тогда просто:
    server_name site.com site.ru;И остальную конфигурацию как обычно.
    Ответ написан