• Анимация SVG с помощью JavaScript?

    @GoodBoy123
    То есть вам нужно анимировать SVG без вставки его в HTML?
    Ответ написан
  • Как применить функцию из конструктора карусели?

    @GoodBoy123
    Быстро глянул увидел следующее:
    // the plugin initializer
    $.fn.galleria = function( options ) {
    
        return this.each(function() {
    
            var gallery = new Galleria();
            gallery.init( this, options );
    
        });
    };
    
    // Expose
    window.Galleria = Galleria;


    Твоя галерея создает глобальный объект Galleria, так что можно напрямую к нему обратиться:
    var gallery = new Galleria();
    gallery.init( $('#galleria'));


    И собственно обращаться к методам:
    gallery.updateCarousel();
    Ответ написан
    Комментировать
  • Есть ли в JS событие изменения DOM или конкретного элемента DOM?

    @GoodBoy123
    Всё зависит от версии IE которую нужно поддерживать.
    IE 11+ - MutationObserver ( https://developer.mozilla.org/ru/docs/Web/API/Muta... )
    IE 9+ - MutationEvent ( https://developer.mozilla.org/en-US/docs/Web/API/M... ) сильно влияют на производительность.

    Можете попробовать React.js ( facebook.github.io/react ) у него не плохо всё контролируется за счет Virtual DOM.
    Ответ написан
    1 комментарий
  • Как узнать координату отступа сверху div блока, от верхнего края браузера?

    @GoodBoy123
    На нативном JS:
    var offsetTop = Element.getBoundingClientRect().top + document.body.scrollTop;


    Тестовая страница:
    <html>
    <head>
    	<title>afdafasdfasd</title>
    </head>
    <body>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div id='test'>TESTTESTTEST</div>
    	<script type="text/javascript">
    		console.log(document.getElementById('test').getBoundingClientRect().top + document.body.scrollTop);
    	</script>
    </body>
    </html>


    Точно работает IE8+, должно работать в версиях ещё ниже.
    Ответ написан
    Комментировать
  • Так в чём преимущество паттерна репозиторий?

    @GoodBoy123
    По сути репозиторий это более высокий уровень абстракции. При использовании репозитория вы программируете к интерфейсу, а не к реализации. На примере Laravel. У вас есть MessagesRepository:

    interface MessagesRepository {
    
     // Выбрать все сообщение
     public function all();
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    В остальном коде вы обращаетесь именно к этому интерфейсу используя IOC контейнер:
    MessagesController.php
    protected $messages;
     public function __construct(MessagesRepository $messages){
            $this->messages = $messages;
     }
    
    public function index() {
     return view('messages.index')-with('messages', $this->messages->all());
    }


    После этого вы с помощью Laravel IOC контейнера связываете интерфейс с конкретной реализацией
    $this->app->bind(
                'App\Repositories\Messages\MessagesRepository',
                'App\Repositories\Messages\MysqlMessagesRepository'
            );


    И в MysqlMessagesRepository уже делаете реализацию применяя интерфейс
    class MysqlMessagesRepository implements MessagesRepository {
    
     // Выбрать все сообщение
     public function all() {
     MysqlGetAllMessages();
    }
    
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    Преимущество в том что код работает с интерфейсом, а не с реализацией, поэтому для того, чтобы поменять Mysql на redis нужно:
    создать реализацию MessagesRepository интерфейса
    class RedisMessagesRepository implements MessagesRepository {
    
     // Выбрать все сообщение
     public function all() {
     RedisGetAllMessages();
    }
    
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    Сказать IOC контейнеру, что нужно брать другую реализацию:
    $this->app->bind(
                'App\Repositories\Messages\MessagesRepository',
                'App\Repositories\Messages\RedisMessagesRepository'
            );


    И на этом все. Менять код в MessagesController не нужно, так как он работает с интерфейсом.
    Ответ написан
    1 комментарий
  • Какой js-фреймворк использовать для создания портала для обучения?

    @GoodBoy123
    Ответ выше, конечно полон сарказма, но доля истины в нем есть.
    Любой портал можно написать на чистом js в одном файле, и это будет работать. Но поддерживать код будет очень сложно. Фреймворки как раз и нужны для упрощения кода. Попробуйте каждый из популярных(Angular, React, Backbone), напишите на каждом свою копию твиттера, какой будет удобнее для Вас в работе, тот и выбирайте.
    Ответ написан
    Комментировать
  • Правильно ли составлено отношение "Один ко многим"?

    @GoodBoy123
    Если использование колонок login и owner не является чем-то 100% необходимым, я бы сделал так. Текст скриптов не полный, только нужные части.

    Mysql:
    Таблица users:
    id,login

    Таблица sites:
    id, users_id,url,title

    Laravel
    Модели:
    Users:
    public function sites(){
            return $this->hasMany('Site');
    }


    Site:
    public funtion user() {
    	return $this->belongsTo('User');
    }


    CabinetController:
    // Используем IOC контейнер, чтобы в будущем было легче тестировать, также строка
    // $this->userManager->getSites() гораздо более понятна через 3 месяца, чем
    // Auth::user()->short()->getResults()
    
    use Acme\UserManager as UserManager;
    
    protected $userManager;
    
    public function __construct(UserManager $userManager) {
    	$this->userManager = $userManager;
    }
    
    public function index(){
                return View::make('cabinet')->with('sites', $this->userManager->getSites());
        }


    Acme\UserManager:
    public function getSites() {
    	
    	if (Auth::check()) {
    		return User::find( Auth::id() )->sites()->get();
    	}
    
    	return false;
    }


    cabinet.blade.php (За показ страница в виде для гостя или пользователя, отвечает View, если страницы очень разные, я бы разделил их на уровне route):

    @if($sites)
    @foreach($sites as $site)
    
            <ul>
                <li>url: {{ $site->url }}</li>
                <li>title: {{ $site->title }}</li>
                <li>description: {{ $site->description }}</li>
                <li>keywords: {{ $site->keywords }}</li>
            </ul>
    
    @endforeach
    @elseif
    <p>Войдите, чтобы пользоваться сервисом</p>
    @endif


    Набросал по быстрому, могут быть опечатки, также в процессе рефакторинга многое может меняться.

    Если же использовать ключи login и owner, то :

    Users:
    public function sites(){
            return $this->hasMany('Site', 'owner', 'login');
    }


    Site:
    public funtion user() {
    	return $this->belongsTo('User' , 'owner', 'login');
    }
    Ответ написан
    Комментировать