require 'net/http' require 'open-uri' require 'yaml' module Cytoplasm class FontsController < ApplicationController @@fonts = { "fontsquirrel" => false, "googlewebfonts" => false, "imported" => false } @@fontsdir = "public/fonts" @@gwf_file = @@fontsdir + "/googlewebfonts.yml" def fetch_imported return @@fonts["imported"] unless @@fonts["imported"] == false imported = {"fontsquirrel" => {}, "googlewebfonts" => {}} # Create @@fontsdir if it doesn't exist unless File.exists?(@@fontsdir) Dir.chdir("public") @@fontsdir = Dir.mkdir("fonts") Dir.chdir("../") end # Create @@gwf_file if it doesn't exist File.open(@@gwf_file,'w') {|f| f.write("")} unless File.exists?(@@gwf_file) # Fetch imported FontSquirrel fonts Dir.open(@@fontsdir).each {|file| imported["fontsquirrel"][file] = fetch_fs_family(file) if File.directory?(file) and file!="." and file!=".."} # Attempt to load YAML from @@gwf_file begin c = YAML::load_file(@@gwf_file) rescue puts "Failed to parse YAML in #{@@gwf_file}!" end # Fetch imported GoogleWebFonts fonts c["imported"].each {|f| imported["googlewebfonts"][f] = fetch_gwf_family(f)} unless c["imported"].nil? @@fonts["imported"] = imported return @@fonts["imported"] end def fetch_fs_all return @@fonts["fontsquirrel"] unless @@fonts["fontsquirrel"] == false fonts = {} fetch_json("http://www.fontsquirrel.com/api/fontlist/all").each {|f| fonts[f["family_name"]] = f} @@fonts["fontsquirrel"] = fonts return @@fonts["fontsquirrel"] end def fetch_gwf_all return @@fonts["googlewebfonts"] unless @@fonts["googlewebfonts"] == false gwf = {} fetch_json("https://www.googleapis.com/webfonts/v1/webfonts?key="+Cytoplasm.conf("fontloader.googlewebfonts_apikey"))["items"].each {|f| gwf[f["family"]] = f} @@fonts["googlewebfonts"] = gwf return @@fonts["googlewebfonts"] end def fetch_fs_family(family) fetch_json("http://www.fontsquirrel.com/api/familyinfo/"+family) end def fetch_gwf_family(family) gwf = fetch_gwf_all() return (!gwf[family].nil?) ? gwf[family] : false; end def fetch_all success = {"fontsquirrel" => {}, "googlewebfonts" => {},"imported" => {"fontsquirrel" => {}, "googlewebfonts" => {}}} success["fontsquirrel"] = fetch_fs_all() success["googlewebfonts"] = fetch_gwf_all() success["imported"] = fetch_imported() render :text => Cytoplasm::Ajax.success(success) end def import puts params success = {} case params[:directory] when "fontsquirrel" open(@@fontsdir+"/"+params[:family]['family_urlname']+".zip","wb") do |file| success["url"] = "http://www.fontsquirrel.com/fontfacekit/"+params[:family]['family_urlname'] file << open(success["url"]).read end when "googlewebfonts" end render :text => Cytoplasm::Ajax.success(success) end def remove case params[:directory] when "fontsquirrel" when "googlewebfonts" end render :text => Cytoplasm::Ajax.success() end def index @installed = fetch_imported() end private def fetch_json(url) return ActiveSupport::JSON.decode(open(url).read) end end end