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

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

  • killich

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

    Spritz 30 июня 2011 г. 2: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

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

    Spritz 30 июня 2011 г. 2: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 &#39;main.css&#39; %>

    <!– тут выводим список подключаемых стилей –>
    <%= 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(&#39;JQuery инициализировано&#39;);
    })
    <%- end end %>


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

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

    Spritz 18 июля 2011 г. 8: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

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

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

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

    &lt;script src=&quot;/javascripts/jscripts1.js&quot; type=&quot;text/javascript&quot;>&lt;/script>
    &lt;script src=&quot;/javascripts/scripts2.js&quot; type=&quot;text/javascript&quot;>&lt;/script>

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

    &lt;div id=&quot;script_block1&quot; class=&quot;script_block1&quot;>&lt;/div>
    &lt;div id=&quot;script_block2&quot; class=&quot;script_block2&quot;>&lt;/div>

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

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

    &lt;div id=&quot;script_ad2&quot; class=&quot;script_ad2&quot; style=&quot;display:none;&quot;>
    &lt;div id=&quot;script_block2&quot; class=&quot;script_block2&quot;>&lt;/div>
    &lt;/div>

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

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

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

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

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

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


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

    &lt;script src=&quot;/javascripts/jscripts1.js&quot; type=&quot;text/javascript&quot;>&lt;/script>
    &lt;script src=&quot;/javascripts/scripts2.js&quot; type=&quot;text/javascript&quot;>&lt;/script>

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

    &lt;div id=&quot;script_block1&quot; class=&quot;script_block1&quot;>&lt;/div>
    &lt;div id=&quot;script_block2&quot; class=&quot;script_block2&quot;>&lt;/div>

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

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

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

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

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

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

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

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

    Spritz 13 января 2012 г. 7:02, спустя 21 минуту 59 секунд

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

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

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

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

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

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


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


    Иерархическая Темпоральная Память!
  • 27 марта 2017 г. 8:18, спустя 1899 дней 20 часов 1 минуту

    Пользователь был удалён, сообщения недоступны


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