ФорумПрограммированиеБольше языковRuby → Как избавиться от дубликатов css/js, как перенести скрипты в низ страницы?

Как избавиться от дубликатов css/js, как перенести скрипты в низ страницы?

  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz Июнь 30, 2011, 10:02 д.п., спустя 35 дней 9 часов 51 минуту

    - content_for :js do
    = javascript_include_tag 'jquery.js'

    - content_for :js do
    = javascript_include_tag 'jquery.js'


    Можно попробовать

    - if yield(:js).blank?
    - content_for :js do
    = javascript_include_tag 'jquery.js'

    Т.е если блок с таким именем еще пустой - то добавить в него текст

    У тебя проблема в архитектуре а не в рельсе. Если ты несколько раз делаешь один и тот же javascript_include_tag - то первое о чем следует задуматься - а нахрена?
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июнь 30, 2011, 10:23 д.п., спустя 20 минут 34 секунды

    а нахрена?

    на странице могут быть разные блоки (html), часть из которых требуют одну и ту же либу (jquery). мне удобнее привязывать клиентские скрипты к блокам, а не к страницам целиком.

    например есть блок с fancybox и блок кнопок на jqueryui, оба требуют jquery и оба находятся на одной странице. при этом мне надо чтобы если я уберу один из них другой продолжал работать, а если уберу оба - то чтоб ненужные скрипты на загружались

    lazy loading короче
    Спустя 185 сек.
    в общем решение я нашёл, вот такое



    module ApplicationHelper

    def require_script(src)
    if @scripts.nil?
    @scripts = []
    end
    if @scripts.none? {|s| s == src}
    @scripts.push src
    end
    end

    def require_jquery
    require_script 'jquery/jquery-latest.js'
    end

    def require_jqueryui
    require_jquery
    require_script 'jquery/ui/jquery-ui-latest.min.js'
    require_script 'jquery/ui/external/jquery.bgiframe-2.1.2.js'
    require_css '/javascripts/jquery/ui/themes/smoothness/jquery.ui.all.css'
    end

    def get_scripts_html
    unless @scripts.nil?
    raw @scripts.map{|s| javascript_include_tag s}.join("\n")
    end
    end

    def require_css(src)
    if @styles.nil?
    @styles = []
    end
    if @styles.none? {|s| s == src}
    @styles.push src
    end
    end

    def get_css_html
    unless @styles.nil?
    raw @styles.map{|s| stylesheet_link_tag s}.join("\n")
    end
    end

    end
    Спустя 196 сек.
    в лэйауте делаем так


    <!DOCTYPE html>
    <html>
    <head>
    <!– тут подключаем стили столько раз сколько нужно –>
    <%- require_css 'main.css' %>

    <!– тут выводим список подключаемых стилей –>
    <%= get_css_html %>
    <%= csrf_meta_tag %>
    </head>
    <body>

    <!– основной контент –>
    <%= yield %>

    </body>
    <!– подключаемые скрипты –>
    <%= get_scripts_html %>

    <!– инлайновые скрипты –>
    <%= yield :js %>
    </html>



    причём инлайновые скрипты должны писаться так, чтоб реагировать на document.onload
    Спустя 239 сек.
    во вьюхах делаем так



    <%- require_jquery %>

    <%- content_for :js do javascript_tag do %>
    $(function(){
    alert('JQuery инициализировано');
    })
    <%- end end %>


    при этом скрипты получаются внизу страницы
    не всё полезно, что в swap полезло
  • missie

    Сообщения: 1 Репутация: N Группа: Кто попало

    Spritz Июль 18, 2011, 4:47 п.п., спустя 18 дней 6 часов 24 минуты

    Добрый день,

    Я, рекрутер, компания Brightgrove Ltd. (г. Харьков). В связи с расширением компании, новыми интересными проектами мы набираем Ruby developers.


    Должность (специальность) Middle/senior Rubby Developers
    Минимальная зарплата (в мес.) Senior 2000 – 2500$ и выше
    Mid 1500 – 2000$
    Регион, район города ул. Тринклера
    Станция метро Университет, Госпром
    Описание вакансии Brightgrove is looking for Ruby Developers for new projects.

    Required Experience and Skills
    * 2 or more years experience developing with Ruby on Rails
    * 3+ years experience in professional web development
    * Experience developing Web 2.0 sites and lightweight web services
    * Experience building dynamic websites using DHTML or AJAX
    * Exceptional communication skills

    Desired/Preferred Skills
    * Experience with JSON, HAML, or SASS is a plus
    * Must be proficient in MySQL or PostgreSQL
    * Solid Javascript skills
    * Familiarity with version control systems, especially Git
    * Experience in unit testing, experience testing and continuous integration
    * Linux/Unix skills
    * Experience with Agile software development processes


    Additional Requirements
    * Send a link to your Github account so we can check out some of your code.
    * Provide some links to any public projects you have worked on and tell us about your involvement in them
    * Include a link to your Stack Overflow profile if any.

    We are prepared to offer a top market salary for exceptional candidates.
    Опыт работы 2-5 лет


    Если вас интересуют вакансии, пришлите свое резюме на [email protected].
  • stels

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz Янв. 13, 2012, 3:33 п.п., спустя 178 дней 22 часа 46 минут

    Для того, чтобы переместить все скрипты в низ страницы перед тэгом </body> но, при этом их отображение на странице должно оставаться в прежнем месте, нужно сделать следующее. Предположим, у нас имеется два скрипта в разных местах:

    <script src="/javascripts/jscripts1.js" type="text/javascript"></script>
    <script src="/javascripts/scripts2.js" type="text/javascript"></script>

    Заменяем эти строки на пустые блоки и назначаем каждому параметру block свой идентификатор, в данном случае, это block1 и block2:

    <div id="script_block1" class="script_block1"></div>
    <div id="script_block2" class="script_block2"></div>

    Дальше, в низу страницы, перед тэгом </body> прописываем следующее, присвоив параметру ad соответсвующий ему идентификатор, в данно случае это, ad1 и ad2:

    <div id="script_ad1" class="script_ad1" style="display:none;"><!–в этом месте подключаем скрипт–>
    <script src="/javascripts/jscripts1.js" type="text/javascript"></script>
    </div>

    <div id="script_ad2" class="script_ad2" style="display:none;">
    <div id="script_block2" class="script_block2"></div>
    </div>

    <script type="text/javascript">
    //перемещаем наш первый скрипт в реальную позицию отображения
    document.getElementById('script_block1').appendChild(document.getElementById('script_ad1'));

    //отображаем содержимое первого скрипта
    document.getElementById('script_ad1').style.display = 'block1';

    //перемещаем наш второй скрипт в реальную позицию отображения
    document.getElementById('script_block2').appendChild(document.getElementById('script_ad2'));

    //отображаем содержимое второго скрипта
    document.getElementById('script_ad2').style.display = 'block2';
    </script>
    Все! Таким образом, сами скрипты будут грузиться в последнюю очередь, при этом, их отображение будет находиться в нужном месте страницы. Этим способом можно подключать, как внешние, так и внутренние скрипты.
  • stels

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz Янв. 13, 2012, 3:40 п.п., спустя 6 минут 55 секунд


    Для того, чтобы переместить все скрипты в низ страницы перед тэгом </body> но, при этом их отображение на странице должно оставаться в прежнем месте, нужно сделать следующее. Предположим, у нас имеется два скрипта в разных местах:

    <script src="/javascripts/jscripts1.js" type="text/javascript"></script>
    <script src="/javascripts/scripts2.js" type="text/javascript"></script>

    Заменяем эти строки на пустые блоки и назначаем каждому параметру block свой идентификатор, в данном случае, это block1 и block2:

    <div id="script_block1" class="script_block1"></div>
    <div id="script_block2" class="script_block2"></div>

    Дальше, в низу страницы, перед тэгом </body> прописываем следующее, присвоив параметру ad соответсвующий ему идентификатор, в данно случае это, ad1 и ad2:

    <div id="script_ad1" class="script_ad1" style="display:none;"><!–в этом месте подключаем скрипт–>
    <script src="/javascripts/jscripts1.js" type="text/javascript"></script>
    </div>

    <div id="script_ad2" class="script_ad2" style="display:none;">
    <script src="/javascripts/jscripts2.js" type="text/javascript"></script>
    </div>

    <script type="text/javascript">
    //перемещаем наш первый скрипт в реальную позицию отображения
    document.getElementById('script_block1').appendChild(document.getElementById('script_ad1'));

    //отображаем содержимое первого скрипта
    document.getElementById('script_ad1').style.display = 'block1';

    //перемещаем наш второй скрипт в реальную позицию отображения
    document.getElementById('script_block2').appendChild(document.getElementById('script_ad2'));

    //отображаем содержимое второго скрипта
    document.getElementById('script_ad2').style.display = 'block2';
    </script>
    Все! Таким образом, сами скрипты будут грузиться в последнюю очередь, при этом, их отображение будет находиться в нужном месте страницы. Этим способом можно подключать, как внешние, так и внутренние скрипты.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz Янв. 13, 2012, 4:02 п.п., спустя 21 минуту 59 секунд

    ректальная тонзиллэктомия -_-
    Высокоуровневое абстрактное говно
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Янв. 13, 2012, 6:49 п.п., спустя 2 часа 46 минут 15 секунд

    stels, а не проще просто перед </body> прописать
    <script src="/javascripts/jscripts1.js" type="text/javascript"></script>
    <script src="/javascripts/scripts2.js" type="text/javascript"></script>
    ?
    не всё полезно, что в swap полезло
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz Янв. 13, 2012, 8:16 п.п., спустя 1 час 27 минут 24 секунды


    ректальная тонзиллэктомия -_-


    Иерархическая Темпоральная Память!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!