cytoplasm 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/javascripts/cytoplasm/cytoplasm.js.erb +13 -6
- data/app/controllers/cytoplasm/fonts_controller.rb +310 -85
- data/app/views/cytoplasm/fonts/_font_li.html.erb +23 -0
- data/app/views/cytoplasm/fonts/index.html.erb +79 -18
- data/config/routes.rb +2 -0
- data/lib/cytoplasm.rb +23 -0
- data/lib/cytoplasm/version.rb +1 -1
- data/test/dummy/Gemfile.lock +6 -2
- data/test/dummy/app/views/docs/index.html.erb +1 -2
- data/test/dummy/app/views/home/index.html.erb +1 -1
- data/test/dummy/log/development.log +203643 -0
- data/test/dummy/public/fonts/1942-report/1942-webfont.eot +0 -0
- data/test/dummy/public/fonts/1942-report/1942-webfont.svg +153 -0
- data/test/dummy/public/fonts/1942-report/1942-webfont.ttf +0 -0
- data/test/dummy/public/fonts/1942-report/1942-webfont.woff +0 -0
- data/test/dummy/public/fonts/1942-report/Freeware License.txt +5 -0
- data/test/dummy/public/fonts/1942-report/demo.html +33 -0
- data/test/dummy/public/fonts/1942-report/stylesheet.css +16 -0
- data/test/dummy/public/fonts/20-db/20db-webfont.eot +0 -0
- data/test/dummy/public/fonts/20-db/20db-webfont.svg +174 -0
- data/test/dummy/public/fonts/20-db/20db-webfont.ttf +0 -0
- data/test/dummy/public/fonts/20-db/20db-webfont.woff +0 -0
- data/test/dummy/public/fonts/20-db/Jovanny Lemonad Freeware License.txt +7 -0
- data/test/dummy/public/fonts/20-db/demo.html +33 -0
- data/test/dummy/public/fonts/20-db/stylesheet.css +16 -0
- data/test/dummy/public/fonts/Aaargh/Aaargh-webfont.eot +0 -0
- data/test/dummy/public/fonts/Aaargh/Aaargh-webfont.svg +191 -0
- data/test/dummy/public/fonts/Aaargh/Aaargh-webfont.ttf +0 -0
- data/test/dummy/public/fonts/Aaargh/Aaargh-webfont.woff +0 -0
- data/test/dummy/public/fonts/Aaargh/Tup Wanders Font License.txt +9 -0
- data/test/dummy/public/fonts/Aaargh/demo.html +33 -0
- data/test/dummy/public/fonts/Aaargh/stylesheet.css +31 -0
- data/test/dummy/public/fonts/TitilliumText/SIL Open Font License 1.1.txt +91 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L-webfont.eot +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L-webfont.svg +247 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L-webfont.ttf +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L-webfont.woff +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L001-webfont.eot +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L001-webfont.svg +247 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L001-webfont.ttf +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L001-webfont.woff +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L002-webfont.eot +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L002-webfont.svg +247 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L002-webfont.ttf +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L002-webfont.woff +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L003-webfont.eot +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L003-webfont.svg +247 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L003-webfont.ttf +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L003-webfont.woff +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L004-webfont.eot +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L004-webfont.svg +247 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L004-webfont.ttf +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L004-webfont.woff +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L005-webfont.eot +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L005-webfont.svg +247 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L005-webfont.ttf +0 -0
- data/test/dummy/public/fonts/TitilliumText/TitilliumText25L005-webfont.woff +0 -0
- data/test/dummy/public/fonts/TitilliumText/demo.html +58 -0
- data/test/dummy/public/fonts/TitilliumText/stylesheet.css +76 -0
- data/test/dummy/public/fonts/enabled.yml +7 -0
- data/test/dummy/public/fonts/googlewebfonts.yml +2 -2
- data/test/dummy/tmp/cache/assets/D03/6B0/sprockets%2Fd3cfc780201b87a3439e35c5236bb71a +0 -0
- data/test/dummy/tmp/cache/assets/D0E/7D0/sprockets%2F89200785fe2710582a6c1b8d04ae7fbe +0 -0
- data/test/dummy/tmp/cache/assets/D14/170/sprockets%2F40a7b83bb067eea7ce2c8394e1529287 +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- metadata +105 -4
|
@@ -17,9 +17,9 @@ var Cytoplasm;
|
|
|
17
17
|
var $this = $('#'+v+'_message');
|
|
18
18
|
if (!$this.is('*')) {
|
|
19
19
|
$this = $('<p />').addClass('callback_message').attr("id",v+"_message");
|
|
20
|
-
if (header.children(':first-child').is('h1')) $this.insertAfter(header.children(':first-child'));
|
|
21
|
-
else $this.prependTo(header);
|
|
22
|
-
$this.hide();
|
|
20
|
+
//if (header.children(':first-child').is('h1')) $this.insertAfter(header.children(':first-child'));
|
|
21
|
+
//else $this.prependTo(header);
|
|
22
|
+
$this.hide().appendTo(header);
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
});
|
|
@@ -35,6 +35,7 @@ var Cytoplasm;
|
|
|
35
35
|
var vars = {};
|
|
36
36
|
var ready = false;
|
|
37
37
|
|
|
38
|
+
// Gradient manipulation library
|
|
38
39
|
var parseGradient = function(grad,reverse){
|
|
39
40
|
// Return untouched if not gradient
|
|
40
41
|
if (grad.indexOf("gradient")==-1) return grad;
|
|
@@ -114,6 +115,7 @@ var Cytoplasm;
|
|
|
114
115
|
if ($.inArray(nstr,['aqua','black','blue','fuchsia','gray','grey','green','lime','maroon','navy','olive','purple','red','silver','teal','white','yellow'])>-1) return true;
|
|
115
116
|
return (nstr.match(/^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/) || nstr.match(/^#([\da-fA-F])([\da-fA-F])([\da-fA-F])/) || nstr.match(/^rgba\(([\d]+),([\d]+),([\d]+),([\d]+|[\d]*.[\d]+)\)/) || nstr.match(/^rgb\(([\d]+),([\d]+),([\d]+)\)/));
|
|
116
117
|
};
|
|
118
|
+
|
|
117
119
|
var compileStyles = function(element,styles){
|
|
118
120
|
output = "";
|
|
119
121
|
output += element+" { ";
|
|
@@ -131,13 +133,14 @@ var Cytoplasm;
|
|
|
131
133
|
var methods = {
|
|
132
134
|
init:function(options){
|
|
133
135
|
var settings = $.extend(true,{},defaults,options);
|
|
136
|
+
$('body').css("overflow","hidden").children(':not(header)').css("opacity",0);
|
|
134
137
|
|
|
135
138
|
// Fetch latest settings via AJAX
|
|
136
139
|
$.cytoAjax("/cytoplasm/settings/fetch",{},function(data){
|
|
137
140
|
conf = data.conf;
|
|
138
141
|
vars = data.vars;
|
|
139
|
-
methods.setStyles.apply(this);
|
|
140
142
|
$('body').data('cytoplasm',settings);
|
|
143
|
+
methods.setStyles.apply(this);
|
|
141
144
|
ready = true;
|
|
142
145
|
});
|
|
143
146
|
},
|
|
@@ -286,8 +289,12 @@ var Cytoplasm;
|
|
|
286
289
|
ready:function(callback){
|
|
287
290
|
var interval = setInterval(function(){
|
|
288
291
|
if (ready) {
|
|
289
|
-
|
|
290
|
-
|
|
292
|
+
clearInterval(interval);
|
|
293
|
+
var allexceptheader = $('body').children(':not(header)').animate({opacity:1},250,function(){
|
|
294
|
+
$('body').css('overflow-y','scroll');
|
|
295
|
+
$(window).bind('beforeunload',function(){allexceptheader.animate({opacity:0},100);});
|
|
296
|
+
callback.apply();
|
|
297
|
+
});
|
|
291
298
|
}
|
|
292
299
|
},10);
|
|
293
300
|
}
|
|
@@ -1,117 +1,342 @@
|
|
|
1
1
|
require 'net/http'
|
|
2
2
|
require 'open-uri'
|
|
3
3
|
require 'yaml'
|
|
4
|
+
require 'zip/zipfilesystem'
|
|
5
|
+
require 'fileutils'
|
|
4
6
|
|
|
5
7
|
module Cytoplasm
|
|
6
8
|
class FontsController < ApplicationController
|
|
7
9
|
|
|
8
|
-
@@
|
|
9
|
-
"fontsquirrel" => false,
|
|
10
|
-
"googlewebfonts" => false,
|
|
11
|
-
"imported" => false
|
|
12
|
-
}
|
|
10
|
+
@@cache = false
|
|
13
11
|
@@fontsdir = "public/fonts"
|
|
14
12
|
@@gwf_file = @@fontsdir + "/googlewebfonts.yml"
|
|
13
|
+
@@enabled_file = @@fontsdir + "/enabled.yml"
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
class << self
|
|
16
|
+
#attr_accessor :fonts
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
def fonts
|
|
19
|
+
@@cache = fetch_fonts() if @@cache == false
|
|
20
|
+
return @fonts
|
|
21
|
+
end
|
|
22
|
+
def fetch_fonts
|
|
23
|
+
@fonts = {"fontsquirrel" => fetch_fs_all(), "googlewebfonts" => fetch_gwf_all(),"imported" => fetch_imported(),"enabled" => fetch_enabled()}
|
|
24
|
+
return @fonts
|
|
25
|
+
end
|
|
26
|
+
def fetch_fs_all
|
|
27
|
+
fs = {}
|
|
28
|
+
fetch_json("http://www.fontsquirrel.com/api/fontlist/all").each do |f|
|
|
29
|
+
fs[f["family_urlname"]] = f
|
|
30
|
+
end
|
|
31
|
+
return fs
|
|
32
|
+
end
|
|
33
|
+
def fetch_gwf_all
|
|
34
|
+
gwf = {}
|
|
35
|
+
fetch_json("https://www.googleapis.com/webfonts/v1/webfonts?key="+Cytoplasm.conf("fontloader.googlewebfonts_apikey"))["items"].each {|f| gwf[f["family"]] = f}
|
|
36
|
+
return gwf
|
|
37
|
+
end
|
|
38
|
+
def fetch_family(dir,fam)
|
|
39
|
+
return fetch_fs_family(fam) if dir=="fontsquirrel"
|
|
40
|
+
return fetch_gwf_family(fam) if dir=="googlewebfonts"
|
|
41
|
+
end
|
|
42
|
+
def fetch_fs_family(family)
|
|
43
|
+
fs = (@@cache==false or @@cache["fontsquirrel"]==false) ? fetch_fs_all() : @@cache["fontsquirrel"]
|
|
44
|
+
return fs[family] unless fs[family].nil?
|
|
26
45
|
end
|
|
46
|
+
def fetch_fs_familyinfo(family)
|
|
47
|
+
fetch_json("http://www.fontsquirrel.com/api/familyinfo/"+family)
|
|
48
|
+
end
|
|
49
|
+
def fetch_gwf_family(family)
|
|
50
|
+
gwf = (@@cache==false) ? fetch_gwf_all() : @@cache["googlewebfonts"]
|
|
51
|
+
return gwf[family] unless gwf[family].nil?
|
|
52
|
+
end
|
|
53
|
+
def fetch_imported
|
|
54
|
+
imported = {"fontsquirrel" => {}, "googlewebfonts" => {}}
|
|
27
55
|
|
|
28
|
-
|
|
29
|
-
|
|
56
|
+
# Create @@fontsdir if it doesn't exist
|
|
57
|
+
unless File.exists?(@@fontsdir)
|
|
58
|
+
count = 0
|
|
59
|
+
@@fontsdir.split("/").each do |dir|
|
|
60
|
+
Dir.mkdir(dir) unless File.exists?(dir)
|
|
61
|
+
Dir.chdir(dir)
|
|
62
|
+
count += 1
|
|
63
|
+
end
|
|
64
|
+
while count > 0 do
|
|
65
|
+
Dir.chdir("../")
|
|
66
|
+
count -= 1
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Create @@gwf_file and @@enabled_file if it doesn't exist
|
|
71
|
+
File.open(@@gwf_file,'w') {|f| f.write("")} unless File.exists?(@@gwf_file)
|
|
72
|
+
File.open(@@enabled_file,'w') {|f| f.write("")} unless File.exists?(@@enabled_file)
|
|
73
|
+
|
|
74
|
+
# Fetch imported FontSquirrel fonts
|
|
75
|
+
Dir.open(@@fontsdir).each do |f|
|
|
76
|
+
if File.directory?(@@fontsdir+"/"+f) and f!="." and f!=".."
|
|
77
|
+
imported["fontsquirrel"][f] = fetch_fs_family(f)
|
|
78
|
+
imported["fontsquirrel"][f]["familyinfo"] = fetch_fs_familyinfo(f)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Fetch imported GoogleWebFonts fonts
|
|
83
|
+
yaml = fetch_yaml(@@gwf_file)
|
|
84
|
+
yaml["imported"].each {|f| imported["googlewebfonts"][f] = fetch_gwf_family(f)} unless yaml["imported"].nil?
|
|
85
|
+
|
|
86
|
+
return imported
|
|
87
|
+
end
|
|
88
|
+
def fetch_enabled
|
|
89
|
+
enabled = {"fontsquirrel" => {}, "googlewebfonts" => {}}
|
|
30
90
|
|
|
31
|
-
|
|
32
|
-
|
|
91
|
+
# Attempt to load YAML from @@enabled_file
|
|
92
|
+
yaml = fetch_yaml(@@enabled_file)
|
|
93
|
+
|
|
94
|
+
# Check that FontSquirrel fonts actually exist in @@fontsdir
|
|
95
|
+
notfound = 0
|
|
96
|
+
yaml["fontsquirrel"].each do |fam,variants|
|
|
97
|
+
unless File.exists?(@@fontsdir+"/"+fam)
|
|
98
|
+
yaml["fontsquirrel"].delete(fam)
|
|
99
|
+
notfound += 1
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
if notfound>0
|
|
103
|
+
open(@@enabled_file,"w+") {|f| f.write(yaml.to_yaml)}
|
|
104
|
+
return fetch_enabled()
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Fetch enabled fonts lists
|
|
108
|
+
["fontsquirrel","googlewebfonts"].each do |dir|
|
|
109
|
+
unless yaml[dir].nil?
|
|
110
|
+
yaml[dir].each do |fam,variants|
|
|
111
|
+
enabled[dir][fam] = fetch_family(dir,fam)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
return enabled
|
|
117
|
+
end
|
|
118
|
+
def is_enabled?(dir,fam)
|
|
119
|
+
enabled = (@@cache==false) ? fetch_enabled() : @@cache["enabled"]
|
|
120
|
+
return !enabled[dir][fam].nil?
|
|
121
|
+
end
|
|
33
122
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
123
|
+
def import(dir,fam)
|
|
124
|
+
output = {}
|
|
125
|
+
@@cache = fetch_fonts() if @@cache == false
|
|
126
|
+
if dir == "fontsquirrel"
|
|
127
|
+
output["dir"] = @@fontsdir+"/"+fam
|
|
128
|
+
output["url"] = "http://www.fontsquirrel.com/fontfacekit/"+fam
|
|
129
|
+
open(output["url"]) do |f|
|
|
130
|
+
Zip::ZipFile.open(f) do |zipfile|
|
|
131
|
+
zipfile.each do |entry|
|
|
132
|
+
fpath = File.join(output["dir"],entry.to_s)
|
|
133
|
+
FileUtils.mkdir_p(File.dirname(fpath))
|
|
134
|
+
zipfile.extract(entry,fpath){true}
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
fix_fs_stylesheet_family_names(fam)
|
|
139
|
+
end
|
|
140
|
+
@@cache["imported"][dir][fam] = fetch_family(dir,fam)
|
|
141
|
+
write_gwf_file() if dir=="googlewebfonts"
|
|
142
|
+
@@cache = fetch_fonts()
|
|
143
|
+
return output;
|
|
144
|
+
end
|
|
145
|
+
def remove(dir,fam)
|
|
146
|
+
output = {}
|
|
147
|
+
@@cache = fetch_fonts() if @@cache == false
|
|
148
|
+
disable(dir,fam) if is_enabled?(dir,fam)
|
|
149
|
+
case dir
|
|
150
|
+
when "fontsquirrel"
|
|
151
|
+
output["dir"] = @@fontsdir+"/"+fam
|
|
152
|
+
FileUtils.rm_rf(output["dir"]) if File.exists?(output["dir"])
|
|
153
|
+
when "googlewebfonts"
|
|
154
|
+
@@cache["imported"]["googlewebfonts"].delete(fam)
|
|
155
|
+
write_gwf_file()
|
|
156
|
+
end
|
|
157
|
+
@@cache = fetch_fonts()
|
|
158
|
+
return output
|
|
159
|
+
end
|
|
160
|
+
def enable(dir,fam)
|
|
161
|
+
output = {}
|
|
162
|
+
@@cache = fetch_fonts() if @@cache == false
|
|
163
|
+
@@cache["enabled"][dir][fam] = fetch_family(dir,fam)
|
|
164
|
+
write_enabled_file()
|
|
165
|
+
@@cache = fetch_fonts()
|
|
166
|
+
return output
|
|
167
|
+
end
|
|
168
|
+
def disable(dir,fam)
|
|
169
|
+
output = {}
|
|
170
|
+
@@cache = fetch_fonts() if @@cache == false
|
|
171
|
+
@@cache["enabled"][dir].delete(fam)
|
|
172
|
+
write_enabled_file()
|
|
173
|
+
@@cache = fetch_fonts()
|
|
174
|
+
return output
|
|
39
175
|
end
|
|
40
176
|
|
|
41
|
-
|
|
42
|
-
|
|
177
|
+
private
|
|
178
|
+
def fetch_json(url)
|
|
179
|
+
return ActiveSupport::JSON.decode(open(url).read)
|
|
180
|
+
end
|
|
181
|
+
def fetch_yaml(file)
|
|
182
|
+
begin
|
|
183
|
+
c = YAML::load_file(file)
|
|
184
|
+
rescue
|
|
185
|
+
puts "Failed to parse YAML in #{file}!"
|
|
186
|
+
end
|
|
187
|
+
return c
|
|
188
|
+
end
|
|
189
|
+
def write_gwf_file
|
|
190
|
+
imported = (@@cache==false) ? fetch_imported()["googlewebfonts"] : @@cache["imported"]["googlewebfonts"]
|
|
191
|
+
open(@@gwf_file,"w+") {|f| f.write({"imported" => imported.keys}.to_yaml)}
|
|
192
|
+
end
|
|
193
|
+
def write_enabled_file
|
|
194
|
+
enabled = (@@cache==false) ? fetch_enabled() : @@cache["enabled"]
|
|
195
|
+
e = {}
|
|
196
|
+
["fontsquirrel","googlewebfonts"].each do |dir|
|
|
197
|
+
e[dir] = {}
|
|
198
|
+
enabled[dir].keys.each do |fam|
|
|
199
|
+
# Make list of variants to enable
|
|
200
|
+
e[dir][fam] = []
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
open(@@enabled_file,"w+") {|f| f.write(e.to_yaml)}
|
|
204
|
+
end
|
|
205
|
+
def fix_fs_stylesheet_family_names(fam)
|
|
206
|
+
sheet = @@fontsdir+"/"+fam+"/stylesheet.css"
|
|
207
|
+
finfo = fetch_fs_familyinfo(fam)
|
|
208
|
+
|
|
209
|
+
# Fetch contents
|
|
210
|
+
lines = File.readlines(sheet)
|
|
211
|
+
lines.each_with_index do |line,index|
|
|
212
|
+
if line.include?("font-family")
|
|
213
|
+
# Parse name
|
|
214
|
+
halves = line.split(":")
|
|
215
|
+
name = halves[1]
|
|
216
|
+
[';','"',"'"].each{|char| name = name.gsub(char,'') if name.include?(char)}
|
|
217
|
+
name = name.strip()
|
|
218
|
+
|
|
219
|
+
# Parse filename
|
|
220
|
+
filename = false
|
|
221
|
+
for i in (index+1)..lines.length
|
|
222
|
+
l = lines[i]
|
|
223
|
+
if l.include?("src: url(")
|
|
224
|
+
filename = l.split("(")[1].split(")")[0]
|
|
225
|
+
['"',"'"].each{|char| filename = filename.gsub(char,'') if filename.include?(char)}
|
|
226
|
+
filename = filename.split(".")
|
|
227
|
+
ext = filename.pop()
|
|
228
|
+
filename = filename.join(".").strip()
|
|
229
|
+
break
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
filename = filename.chomp("-webfont") if filename.include?("-webfont")
|
|
233
|
+
|
|
234
|
+
unless filename == false
|
|
235
|
+
|
|
236
|
+
# Determine corresponding fontface_name from familyinfo
|
|
237
|
+
cname = false
|
|
238
|
+
cindex = false
|
|
239
|
+
if finfo.length == 1 # If there is only one variant, we choose that one
|
|
240
|
+
cindex = 0
|
|
241
|
+
else
|
|
242
|
+
# Search for exact matches among the variants
|
|
243
|
+
finfo.each_with_index do |face,index|
|
|
244
|
+
ffname = face["filename"].split(".")
|
|
245
|
+
ext = ffname.pop()
|
|
246
|
+
ffname = ffname.join(".").strip()
|
|
247
|
+
if ffname == filename
|
|
248
|
+
cindex = index
|
|
249
|
+
break
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
# Otherwise, use the Levenshtein algorithm to select the closest match
|
|
253
|
+
if cindex == false
|
|
254
|
+
best = false
|
|
255
|
+
finfo.each_with_index do |face,index|
|
|
256
|
+
ffname = face["filename"].split(".")
|
|
257
|
+
ext = ffname.pop()
|
|
258
|
+
ffname = ffname.join(".").strip()
|
|
259
|
+
lscore = levenshtein(filename,ffname)
|
|
260
|
+
if best==false or lscore <= best
|
|
261
|
+
best = lscore
|
|
262
|
+
cindex = index
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Fetch fontface_name from cindex and remove the variant from rotation
|
|
269
|
+
puts "CINDEX: "+cindex.to_s
|
|
270
|
+
cname = finfo[cindex]["fontface_name"]
|
|
271
|
+
finfo.delete(cindex)
|
|
272
|
+
puts "CNAME: " + cname.to_s
|
|
273
|
+
|
|
274
|
+
# Replace if necessary
|
|
275
|
+
lines[index] = halves[0]+": '"+cname+"';\n" if cname != false and name != cname
|
|
276
|
+
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# Write fixed contents to file
|
|
282
|
+
open(sheet,"w+") {|f| f.write(lines.join())}
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
@@damerau = true
|
|
286
|
+
def levenshtein(s1, s2)
|
|
287
|
+
d = {}
|
|
288
|
+
(0..s1.size).each do |row|
|
|
289
|
+
d[[row, 0]] = row
|
|
290
|
+
end
|
|
291
|
+
(0..s2.size).each do |col|
|
|
292
|
+
d[[0, col]] = col
|
|
293
|
+
end
|
|
294
|
+
(1..s1.size).each do |i|
|
|
295
|
+
(1..s2.size).each do |j|
|
|
296
|
+
cost = 0
|
|
297
|
+
if (s1[i-1] != s2[j-1])
|
|
298
|
+
cost = 1
|
|
299
|
+
end
|
|
300
|
+
d[[i, j]] = [d[[i - 1, j]] + 1,
|
|
301
|
+
d[[i, j - 1]] + 1,
|
|
302
|
+
d[[i - 1, j - 1]] + cost
|
|
303
|
+
].min
|
|
304
|
+
next unless @@damerau
|
|
305
|
+
if (i > 1 and j > 1 and s1[i-1] == s2[j-2] and s1[i-2] == s2[j-1])
|
|
306
|
+
d[[i, j]] = [d[[i,j]],
|
|
307
|
+
d[[i-2, j-2]] + cost
|
|
308
|
+
].min
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
return d[[s1.size, s2.size]]
|
|
313
|
+
end
|
|
43
314
|
|
|
44
|
-
@@fonts["imported"] = imported
|
|
45
|
-
return @@fonts["imported"]
|
|
46
315
|
end
|
|
47
316
|
|
|
48
|
-
def
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
fetch_json("http://www.fontsquirrel.com/api/fontlist/all").each {|f| fonts[f["family_name"]] = f}
|
|
52
|
-
@@fonts["fontsquirrel"] = fonts
|
|
53
|
-
return @@fonts["fontsquirrel"]
|
|
54
|
-
end
|
|
55
|
-
def fetch_gwf_all
|
|
56
|
-
return @@fonts["googlewebfonts"] unless @@fonts["googlewebfonts"] == false
|
|
57
|
-
gwf = {}
|
|
58
|
-
fetch_json("https://www.googleapis.com/webfonts/v1/webfonts?key="+Cytoplasm.conf("fontloader.googlewebfonts_apikey"))["items"].each {|f| gwf[f["family"]] = f}
|
|
59
|
-
@@fonts["googlewebfonts"] = gwf
|
|
60
|
-
return @@fonts["googlewebfonts"]
|
|
61
|
-
end
|
|
62
|
-
def fetch_fs_family(family)
|
|
63
|
-
fetch_json("http://www.fontsquirrel.com/api/familyinfo/"+family)
|
|
64
|
-
end
|
|
65
|
-
def fetch_gwf_family(family)
|
|
66
|
-
gwf = fetch_gwf_all()
|
|
67
|
-
return (!gwf[family].nil?) ? gwf[family] : false;
|
|
317
|
+
def fetch_all
|
|
318
|
+
@@cache = Cytoplasm::FontsController.fetch_fonts() if @@cache == false
|
|
319
|
+
render :text => Cytoplasm::Ajax.success(@@cache)
|
|
68
320
|
end
|
|
69
321
|
|
|
70
|
-
def
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
success["googlewebfonts"] = fetch_gwf_all()
|
|
75
|
-
success["imported"] = fetch_imported()
|
|
76
|
-
|
|
77
|
-
render :text => Cytoplasm::Ajax.success(success)
|
|
322
|
+
def index
|
|
323
|
+
@@cache = Cytoplasm::FontsController.fetch_fonts() if @@cache == false
|
|
324
|
+
@installed = Cytoplasm::FontsController.fetch_imported()
|
|
325
|
+
@enabled = Cytoplasm::FontsController.fetch_enabled()
|
|
78
326
|
end
|
|
79
327
|
|
|
80
328
|
def import
|
|
81
|
-
|
|
82
|
-
success = {}
|
|
83
|
-
case params[:directory]
|
|
84
|
-
when "fontsquirrel"
|
|
85
|
-
open(@@fontsdir+"/"+params[:family]['family_urlname']+".zip","wb") do |file|
|
|
86
|
-
success["url"] = "http://www.fontsquirrel.com/fontfacekit/"+params[:family]['family_urlname']
|
|
87
|
-
file << open(success["url"]).read
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
when "googlewebfonts"
|
|
92
|
-
|
|
93
|
-
end
|
|
94
|
-
render :text => Cytoplasm::Ajax.success(success)
|
|
329
|
+
render :text => Cytoplasm::Ajax.success(Cytoplasm::FontsController.import(params[:directory],params[:family]))
|
|
95
330
|
end
|
|
96
|
-
|
|
97
331
|
def remove
|
|
98
|
-
|
|
99
|
-
when "fontsquirrel"
|
|
100
|
-
|
|
101
|
-
when "googlewebfonts"
|
|
102
|
-
|
|
103
|
-
end
|
|
104
|
-
render :text => Cytoplasm::Ajax.success()
|
|
332
|
+
render :text => Cytoplasm::Ajax.success(Cytoplasm::FontsController.remove(params[:directory],params[:family]))
|
|
105
333
|
end
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
334
|
+
def enable
|
|
335
|
+
render :text => Cytoplasm::Ajax.success(Cytoplasm::FontsController.enable(params[:directory],params[:family]))
|
|
336
|
+
end
|
|
337
|
+
def disable
|
|
338
|
+
render :text => Cytoplasm::Ajax.success(Cytoplasm::FontsController.disable(params[:directory],params[:family]))
|
|
109
339
|
end
|
|
110
|
-
|
|
111
|
-
private
|
|
112
|
-
def fetch_json(url)
|
|
113
|
-
return ActiveSupport::JSON.decode(open(url).read)
|
|
114
|
-
end
|
|
115
340
|
|
|
116
341
|
end
|
|
117
342
|
end
|