class Flatuipro::Generators::InstallGenerator

Public Instance Methods

add_assets() click to toggle source
# File lib/generators/flatuipro/install/install_generator.rb, line 41
def add_assets
  copy_file "flatuipro.js",   "app/assets/javascripts/flatuipro.js"
  if use_less?
    copy_file "flatuipro.less", "app/assets/stylesheets/flatuipro.less"
  end

  # Handle JS Manifest
  js_manifest = "app/assets/javascripts/application.js"
  if File.exist?(js_manifest)
    content = File.read(js_manifest)
    unless content.match(/require\s+flatuipro/)
      insert_into_file js_manifest, "//= require flatuipro\n", :after => "twitter/bootstrap\n"
    end
    unless content.match(/require\s+jquery.ui.all/)
      unless content.match(/require\s+jquery.ui.effect/)
        insert_into_file js_manifest, "//= require jquery.ui.effect\n", :after => "jquery\n"
      end
      unless content.match(/require\s+jquery.ui.tooltip/)
        insert_into_file js_manifest, "//= require jquery.ui.tooltip\n", :after => "jquery\n"
      end
      unless content.match(/require\s+jquery.ui.spinner/)
        insert_into_file js_manifest, "//= require jquery.ui.spinner\n", :after => "jquery\n"
      end
      unless content.match(/require\s+jquery.ui.slider/)
        insert_into_file js_manifest, "//= require jquery.ui.slider\n", :after => "jquery\n"
      end
      unless content.match(/require\s+jquery.ui.datepicker/)
        insert_into_file js_manifest, "//= require jquery.ui.datepicker\n", :after => "jquery\n"
      end
      unless content.match(/require\s+jquery.ui.button/)
        insert_into_file js_manifest, "//= require jquery.ui.button\n", :after => "jquery\n"
      end
    end
  else
    copy_file "application.js", js_manifest
  end

  # Handle CSS Manifest
  css_manifest = "app/assets/stylesheets/application.css"
  if File.exist?(css_manifest)
    content = File.read(css_manifest)
    unless content.match(/require_tree\s+\./)
      style_require_block = " *= require flatuipro\n"
      insert_into_file css_manifest, style_require_block, :after => "require_self\n"
    end
  else
    copy_file "application.css", "app/assets/stylesheets/application.css"
  end
end
copy_assets() click to toggle source
# File lib/generators/flatuipro/install/install_generator.rb, line 11
def copy_assets
  gem_assets_dir = File.expand_path("../../../../../app/assets", __FILE__)
  pro_dir = flatuipro_dir

  unless File.exist?(File.join(pro_dir, "index.html"))
    pro_dir = File.join(pro_dir, "HTML/UI")
  end
  if File.directory?(File.join(pro_dir, "Flat-UI-Pro-1.1.4"))
    pro_dir = File.join(pro_dir, "Flat-UI-Pro-1.1.4")
  end
  unless File.directory?(pro_dir) && File.exist?(File.join(pro_dir, "index.html"))
    raise "Invalid Flat UI Pro directory"
  end

  if use_less?
    directory File.join(pro_dir, "less"), File.join(gem_assets_dir, "less")
  else
    copy_file File.join(pro_dir, "css", "flat-ui.css"), "app/assets/stylesheets/flat-ui.css"
  end
  directory File.join(pro_dir, "js"),                   File.join(gem_assets_dir, "javascripts")
  directory File.join(pro_dir, "images"),               File.join(gem_assets_dir, "images")
  directory File.join(pro_dir, "fonts"),                File.join(gem_assets_dir, "fonts")

  # Demo page assets
  copy_file File.join(pro_dir, "index.html"),           File.join(gem_assets_dir, "demo", "index.html")
  copy_file File.join(pro_dir, "js", "application.js"), File.join(gem_assets_dir, "demo", "flatuipro-demo.js")
  copy_file File.join(pro_dir, "css", "demo.css"),      File.join(gem_assets_dir, "demo", "flatuipro-demo.css")
  copy_file File.join(pro_dir, "less", "demo.less"),    File.join(gem_assets_dir, "demo", "flatuipro-demo.less")
end
patch_assets() click to toggle source
# File lib/generators/flatuipro/install/install_generator.rb, line 91
def patch_assets
  gem_assets_dir = File.expand_path("../../../../../app/assets", __FILE__)

  # Stylesheets patches
  # image url() -> image-url()
  # font  url() -> font-url()
  # LESS
  if use_less?
    # switch.less
    # More involved patch because less-rails won't translate when inside ~""
    # Create LESS variable and interpolate into .mask(~"")
    switch_file = File.join(gem_assets_dir, "less/modules", "switch.less")
    mask_image_url = "@mask-image-url: image-url('switch/mask.png');\n"
    insert_into_file switch_file, mask_image_url, :before => ".has-switch {\n"
    gsub_file switch_file, /url\('\.\.\/images\/.+?\)/, "@{mask-image-url}"

    # icon-font.less
    gsub_file File.join(gem_assets_dir, "less", "icon-font.less"), /url\("\.\.\/fonts\//, 'font-url("'
  # CSS
  else
    gsub_file "app/assets/stylesheets/flat-ui.css", /url\('\.\.\/images\//, "url('/assets/"
    gsub_file "app/assets/stylesheets/flat-ui.css", /url\("\.\.\/fonts\//, 'url("/assets/'
  end

  # Demo page patches
  file = File.join(gem_assets_dir, "demo", "index.html")
  # Fix image links
  gsub_file file, /<img src="images\/.+?>/ do |s|
    match = /images\/(.+?)"/.match(s)
    '<%= image_tag "' + match[1] + '" %>'
  end

  # Remove everything before <body> tag and after 'Load JS', inclusive
  new_file = File.open("#{file}.erb", "w")
  include_line = false
  IO.foreach(file) do |line|
    include_line = false if line =~ /Load JS/

    new_file.write line if include_line

    include_line = true if line =~ /<body>/
  end
  new_file.close
end

Private Instance Methods

use_less?() click to toggle source

Detect if twitter-bootstrap-rails installed with LESS or static stylesheets

# File lib/generators/flatuipro/install/install_generator.rb, line 138
def use_less?
  if File.exist?("app/assets/stylesheets/bootstrap_and_overrides.css.less")
    return true
  elsif File.exist?("app/assets/stylesheets/bootstrap_and_overrides.css")
    return false
  else
    raise "Cannot detect twitter-bootstrap-rails install"
  end
end