cytoplasm 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/app/assets/javascripts/cytoplasm/cytoAjax.js.erb +6 -7
  2. data/app/assets/javascripts/cytoplasm/cytoRadio.js.erb +4 -0
  3. data/app/assets/javascripts/cytoplasm/cytoSelect.js.erb +1 -1
  4. data/app/assets/javascripts/cytoplasm/cytoplasm.js.erb +90 -11
  5. data/app/assets/stylesheets/cytoplasm/cytoplasm.less +5 -0
  6. data/app/controllers/cytoplasm/fonts_controller.rb +86 -15
  7. data/app/views/cytoplasm/fonts/index.html.erb +113 -0
  8. data/app/views/cytoplasm/settings/edit.html.erb +2 -2
  9. data/app/views/cytoplasm/settings/index.html.erb +1 -1
  10. data/config/routes.rb +10 -2
  11. data/lib/cytoplasm.rb +1 -1
  12. data/lib/cytoplasm/version.rb +1 -1
  13. data/test/dummy/Gemfile +40 -0
  14. data/test/dummy/Gemfile.lock +133 -0
  15. data/test/dummy/app/views/demos/index.html.erb +1 -0
  16. data/test/dummy/app/views/docs/index.html.erb +1 -0
  17. data/test/dummy/config/initializers/cytoplasm.vars.yml +3 -2
  18. data/test/dummy/dummy.gemspec +0 -0
  19. data/test/dummy/log/development.log +115966 -0
  20. data/test/dummy/public/cytoplasm/cytoplasm.vars.less +4 -5
  21. data/test/dummy/public/fonts/googlewebfonts.yml +4 -0
  22. data/test/dummy/tmp/cache/assets/C77/C20/sprockets%2F165a39476f3fa731c0af49432141049c +0 -0
  23. data/test/dummy/tmp/cache/assets/CAC/280/sprockets%2F408a235a236b0a3aa1302733211db5ba +0 -0
  24. data/test/dummy/tmp/cache/assets/CAE/FD0/sprockets%2F3bb22e4d409072c2278c1771893ec19e +0 -0
  25. data/test/dummy/tmp/cache/assets/CC4/F20/sprockets%2F7579067f2838847e2cf44a39d418fb1b +0 -0
  26. data/test/dummy/tmp/cache/assets/D03/6B0/sprockets%2Fd3cfc780201b87a3439e35c5236bb71a +0 -0
  27. data/test/dummy/tmp/cache/assets/D06/7A0/sprockets%2Fa46b76e739460d2691f4121ffa8a0ca0 +0 -0
  28. data/test/dummy/tmp/cache/assets/D0E/4A0/sprockets%2F6b27287928ba630c1b25dfa80ee18b48 +0 -0
  29. data/test/dummy/tmp/cache/assets/D0E/7D0/sprockets%2F89200785fe2710582a6c1b8d04ae7fbe +0 -0
  30. data/test/dummy/tmp/cache/assets/D12/1E0/sprockets%2Fba248329196c372b79d1f4c4f2a771bf +0 -0
  31. data/test/dummy/tmp/cache/assets/D14/170/sprockets%2F40a7b83bb067eea7ce2c8394e1529287 +0 -0
  32. data/test/dummy/tmp/cache/assets/D49/450/sprockets%2F2b7712073416ff8853efff262ddec53f +0 -0
  33. data/test/dummy/tmp/cache/assets/D50/750/sprockets%2F7fbcc321810c8f493f86364fee480ed9 +0 -0
  34. data/test/dummy/tmp/cache/assets/D6E/3E0/sprockets%2F1be4cbdc9c19703c546405f087aee92d +0 -0
  35. data/test/dummy/tmp/cache/assets/D73/5F0/sprockets%2F6aee922214ffea56b31595f1a5ed8c92 +0 -0
  36. data/test/dummy/tmp/cache/assets/D87/C40/sprockets%2F9dcd7a6999affe28e91e514cee079016 +0 -0
  37. data/test/dummy/tmp/cache/assets/DA4/140/sprockets%2F24502b9d4e4eea6f709e089c0fdff30f +0 -0
  38. data/test/dummy/tmp/cache/assets/DBE/210/sprockets%2Fbedb89fd02eac0dc7aa93c820c612343 +0 -0
  39. data/test/dummy/tmp/cache/assets/DFB/400/sprockets%2F0c2b7f7aeeee011a378b79e3bc28fae5 +0 -0
  40. data/test/dummy/tmp/cache/assets/E05/E70/sprockets%2Fead5bfd3417fc5de81d3794c3e443cfe +0 -0
  41. data/test/dummy/tmp/cache/assets/E69/B60/sprockets%2Ffdbf7ec615e9a92e4857cdade17f4daa +0 -0
  42. data/test/dummy/tmp/cache/assets/E8D/B40/sprockets%2Fb862bf7fb4b4c634aeaa9dfc97babc6b +0 -0
  43. metadata +35 -4
@@ -15,21 +15,20 @@
15
15
  };
16
16
  $.cytoAjax = function(script,data_to_pass,success,error){
17
17
  // Set default parameters
18
- if (typeof script != "string" || script == "") return false;
18
+ if (typeof script != "string" || script == "") return console.warn("$.cytoAjax requires a string as the first parameter (script).");
19
19
  if (data_to_pass==null || typeof data_to_pass != "object") {
20
20
  if (typeof data_to_pass == "function") {
21
- if (typeof success == "function") error = success;
21
+ if (success!=null && typeof success == "function") error = success;
22
22
  success = data_to_pass;
23
23
  }
24
- data_to_pass = {ajax:script};
25
- } else data_to_pass = $.extend(true,{},{ajax:script},data_to_pass);
24
+ data_to_pass = {};
25
+ }
26
26
 
27
27
  // Make request
28
28
  $.ajax({
29
29
  url:script,
30
- type:'get',
31
- dataType:'html',
32
- processData:false,
30
+ type:'POST',
31
+ data:data_to_pass,
33
32
  success:function(data,textStatus,jqXHR) {
34
33
  try {
35
34
  data = $.parseJSON(data);
@@ -94,6 +94,10 @@
94
94
  mousedown:function(e){
95
95
  e.preventDefault();
96
96
  if ($(this).hasClass('active')) return false;
97
+ $(this).addClass('active');
98
+ },
99
+ mouseup:function(e){
100
+ e.preventDefault();
97
101
  methods.value.apply($this,[$(this).data('cytoradio-value')]);
98
102
  settings.widget.inputList.inputs.elements.trigger('change');
99
103
  },
@@ -392,7 +392,7 @@
392
392
  var settings = $this.data('cytoSelect');
393
393
  if (!$this.hasClass('cytoSelect') || settings==null) return console.warn("You must instanciate $.cytoSelect before calling the clear method!");
394
394
 
395
- $this.children('option').not("[value=''],[value='0']").remove();
395
+ $this.children('option').remove();
396
396
  if (refresh) methods.refresh.apply($this);
397
397
  });
398
398
  },
@@ -10,11 +10,7 @@ var Cytoplasm;
10
10
 
11
11
  $(document).ready(function(){
12
12
  // Setup header
13
- var header = $("header");
14
- header.find('h1').click(function(){window.location = "<%=((defined? root_url) ? root_url : "/")%>";});
15
-
16
- // Fix for cytoButtons not activating
17
-
13
+ var header = $("header").find('h1').click(function(){window.location = "<%=((defined? root_url) ? root_url : "/")%>";}).end();
18
14
 
19
15
  // Setup callback messages
20
16
  $.each(["success","sending","error"],function(i,v){
@@ -39,24 +35,95 @@ var Cytoplasm;
39
35
  var vars = {};
40
36
  var ready = false;
41
37
 
38
+ var parseGradient = function(grad,reverse){
39
+ // Return untouched if not gradient
40
+ if (grad.indexOf("gradient")==-1) return grad;
41
+ if (reverse!=true) reverse = false;
42
+ var o = {};
43
+
44
+ var halves = grad.split("(");
45
+ o.type = halves[0];
46
+ o.params = halves[1].split(")")[0].split(",");
47
+ if (o.type.indexOf("linear")>-1) {
48
+ if (isColorStop(o.params[0])) o.params.unshift("to bottom");
49
+ o.params[0] = normalizeDirection(o.params[0]);
50
+ if (reverse) o.params[0] = invertDirection(o.params[0]);
51
+ o.dir = o.params[0];
52
+ o.colors = o.params.slice(1);
53
+ } else if (o.type.indexOf("radial")>-1) {
54
+ var firstcolor;
55
+ if (isColorStop(o.params[0])) o.params.unshift("center");
56
+ $.each(o.params,function(i,p){if (isColorStop(p)) {firstcolor = i;return false;}});
57
+ o.dir = o.params[0];
58
+ o.colors = o.params.slice(firstcolor);
59
+ } else return false;
60
+
61
+ var params = o.params.join(",");
62
+
63
+ // String types
64
+ o.shortened = o.type+"("+denormalizeDirection(o.dir)+","+o.colors.join(",")+");";
65
+
66
+ o.expanded = "background-color:"+((o.colors[0].indexOf("%")>-1) ? o.colors[0].split(" ").slice(0,-1).join(" ") : o.colors[0]) + ";";
67
+ o.expanded += "background-image:-webkit-"+o.type+"("+params+");";
68
+ o.expanded += "background-image:-moz-"+o.type+"("+params+");";
69
+ o.expanded += "background-image:-o-"+o.type+"("+params+");";
70
+ o.expanded += "background-image:-ms-"+o.type+"("+params+");";
71
+ o.expanded += "background-image:"+o.shortened;
72
+
73
+ return o;
74
+ };
75
+ var expandGradient = function(orig){
76
+ if (typeof orig != "string") return console.warn("Cytoplasm.expandGradient only accepts string arguments!");
77
+ // Return untouched if not gradient
78
+ if (orig.indexOf("gradient")==-1) return orig;
79
+
80
+ var g = parseGradient(orig);
81
+ return g.expanded;
82
+ };
42
83
  var reverseGradient = function(orig){
43
84
  if (typeof orig != "string") return console.warn("Cytoplasm.reverseGradient only accepts string arguments!");
44
85
  // Return untouched if not gradient
45
86
  if (orig.indexOf("gradient")==-1) return orig;
46
- // Get direction
47
- var dir = orig.split("(")[1].split(",")[0];
48
- // Reverse direction
87
+
88
+ var g = parseGradient(orig,true);
89
+ return g.shortened;
90
+ };
91
+ var normalizeDirection = function(dir){
49
92
  var newdir = dir;
93
+ if (newdir.slice(0,3)!="to ") return newdir;
94
+ return invertDirection(newdir).slice(3);
95
+ };
96
+ var denormalizeDirection = function(dir){
97
+ var newdir = dir;
98
+ if (newdir.slice(0,3)=="to ") return newdir;
99
+ return "to "+invertDirection(newdir);
100
+ };
101
+ var invertDirection = function(dir){
102
+ var newdir = " "+dir+" ";
50
103
  if (dir.indexOf("top")>-1) newdir = newdir.replace("top","bottom");
51
104
  else if (dir.indexOf("bottom")>-1) newdir = newdir.replace("bottom","top");
52
105
  if (dir.indexOf("left")>-1) newdir = newdir.replace("left","right");
53
106
  else if (dir.indexOf("right")>-1) newdir = newdir.replace("right","left");
54
- return orig.replace(dir,newdir)
107
+ newdir = newdir.slice(2,-2);
108
+ return newdir;
109
+ };
110
+ var isColorStop = function(str){
111
+ var cache, p=parseInt, nstr = str;
112
+ if (nstr.slice(-1) == "%") nstr = nstr.split(" ").slice(0,-1).join(" ");
113
+ nstr = nstr.replace(/\s\s*/g,'') // Remove all spaces
114
+ if ($.inArray(nstr,['aqua','black','blue','fuchsia','gray','grey','green','lime','maroon','navy','olive','purple','red','silver','teal','white','yellow'])>-1) return true;
115
+ 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]+)\)/));
55
116
  };
56
117
  var compileStyles = function(element,styles){
57
118
  output = "";
58
119
  output += element+" { ";
59
- $.each(styles,function(prop,value){output += (typeof value == "object") ? compileStyles(prop,value) : prop+" : "+value+"; ";});
120
+ $.each(styles,function(prop,value){
121
+ if (typeof value == "object") output += compileStyles(prop,value);
122
+ else {
123
+ if (prop == "background" && value.indexOf("gradient")>-1) output += expandGradient(value);
124
+ else output += prop+" : "+value+"; ";
125
+ }
126
+ });
60
127
  output += " } ";
61
128
  return output;
62
129
  };
@@ -140,7 +207,19 @@ var Cytoplasm;
140
207
  };
141
208
 
142
209
  // Heading sizes
143
- $.each([1,2,3,4,5,6],function(i,num){$('h'+num.toString()).css("font-size",parseInt(vars.fonts.sizes.huge) - (parseInt(vars.fonts.sizes.heading_factor)*i));});
210
+ (function(){
211
+ var verbose = false;
212
+ var huge = parseInt(vars.fonts.sizes.huge), normal = parseInt(vars.fonts.sizes.normal);
213
+ var hRange = huge - normal;
214
+ $.each([1,2,3,4,5,6],function(i,num){
215
+ if (verbose) console.log("----- H"+num+" -----");
216
+ var factor = Math.pow(vars.fonts.sizes.heading_factor,i);
217
+ if (verbose) console.log("Factor: "+factor);
218
+ var size = parseInt(vars.fonts.sizes.normal) + (hRange/factor);
219
+ if (verbose) console.log("Size: "+size);
220
+ $('h'+num.toString()).css("font-size",size);
221
+ });
222
+ })();
144
223
  // Logo positioning
145
224
  if (vars.layout.header.logo.align == "center") styles.header["#logo"].left = (($(window).width()-$('header #logo').width())/2) + vars.layout.header.logo.x;
146
225
  else styles.header["#logo"][vars.layout.header.logo.align] = vars.layout.header.logo.x+10;
@@ -8,6 +8,11 @@ body {
8
8
  overflow-y:scroll;
9
9
  }
10
10
 
11
+ // Headings
12
+ h1, h2, h3, h4, h5, h6 {
13
+ margin:20px 0px;
14
+ }
15
+
11
16
  // Header
12
17
  header {
13
18
  margin:0px;
@@ -1,42 +1,113 @@
1
1
  require 'net/http'
2
2
  require 'open-uri'
3
+ require 'yaml'
3
4
 
4
5
  module Cytoplasm
5
6
  class FontsController < ApplicationController
6
7
 
8
+ @@fonts = {
9
+ "fontsquirrel" => false,
10
+ "googlewebfonts" => false,
11
+ "imported" => false
12
+ }
13
+ @@fontsdir = "public/fonts"
14
+ @@gwf_file = @@fontsdir + "/googlewebfonts.yml"
15
+
7
16
  def fetch_imported
8
- imported = {}
9
- fontsdir = "public/fonts"
17
+ return @@fonts["imported"] unless @@fonts["imported"] == false
18
+
19
+ imported = {"fontsquirrel" => {}, "googlewebfonts" => {}}
10
20
 
11
- # Find fonts directory, create one if it doesn't exist
12
- if File.exists?(fontsdir)
13
- fontsdir = Dir.open(fontsdir)
14
- else
21
+ # Create @@fontsdir if it doesn't exist
22
+ unless File.exists?(@@fontsdir)
15
23
  Dir.chdir("public")
16
- fontsdir = Dir.mkdir("fonts")
24
+ @@fontsdir = Dir.mkdir("fonts")
17
25
  Dir.chdir("../")
18
26
  end
19
27
 
20
- fontsdir.each do |file|
21
- imported[file] = fetch_fs_family(file) if File.directory?(file) and file!="." and file!=".."
28
+ # Create @@gwf_file if it doesn't exist
29
+ File.open(@@gwf_file,'w') {|f| f.write("")} unless File.exists?(@@gwf_file)
30
+
31
+ # Fetch imported FontSquirrel fonts
32
+ Dir.open(@@fontsdir).each {|file| imported["fontsquirrel"][file] = fetch_fs_family(file) if File.directory?(file) and file!="." and file!=".."}
33
+
34
+ # Attempt to load YAML from @@gwf_file
35
+ begin
36
+ c = YAML::load_file(@@gwf_file)
37
+ rescue
38
+ puts "Failed to parse YAML in #{@@gwf_file}!"
22
39
  end
23
- return imported
40
+
41
+ # Fetch imported GoogleWebFonts fonts
42
+ c["imported"].each {|f| imported["googlewebfonts"][f] = fetch_gwf_family(f)} unless c["imported"].nil?
43
+
44
+ @@fonts["imported"] = imported
45
+ return @@fonts["imported"]
24
46
  end
25
47
 
26
- def fetch_fs_family(font)
27
- return fetch_json("http://www.fontsquirrel.com/api/familyinfo/"+font)
48
+ def fetch_fs_all
49
+ return @@fonts["fontsquirrel"] unless @@fonts["fontsquirrel"] == false
50
+ fonts = {}
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;
28
68
  end
29
69
 
30
70
  def fetch_all
31
- success = {"fontsquirrel" => {}, "googlewebfonts" => {},"imported" => {}}
71
+ success = {"fontsquirrel" => {}, "googlewebfonts" => {},"imported" => {"fontsquirrel" => {}, "googlewebfonts" => {}}}
32
72
 
33
- success["fontsquirrel"] = fetch_json("http://www.fontsquirrel.com/api/fontlist/all")
34
- fetch_json("https://www.googleapis.com/webfonts/v1/webfonts?key="+Cytoplasm.conf("fontloader.googlewebfonts_apikey"))["items"].each {|f| success["googlewebfonts"][f["family"]] = f}
73
+ success["fontsquirrel"] = fetch_fs_all()
74
+ success["googlewebfonts"] = fetch_gwf_all()
35
75
  success["imported"] = fetch_imported()
36
76
 
37
77
  render :text => Cytoplasm::Ajax.success(success)
38
78
  end
39
79
 
80
+ def import
81
+ puts params
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)
95
+ end
96
+
97
+ def remove
98
+ case params[:directory]
99
+ when "fontsquirrel"
100
+
101
+ when "googlewebfonts"
102
+
103
+ end
104
+ render :text => Cytoplasm::Ajax.success()
105
+ end
106
+
107
+ def index
108
+ @installed = fetch_imported()
109
+ end
110
+
40
111
  private
41
112
  def fetch_json(url)
42
113
  return ActiveSupport::JSON.decode(open(url).read)
@@ -0,0 +1,113 @@
1
+ <h2>Cytoplasm Font Manager</h2>
2
+
3
+ <hr />
4
+
5
+ <% if @installed["fontsquirrel"].any? or @installed["googlewebfonts"].any? %>
6
+ <h3>Installed Fonts</h3>
7
+
8
+ <% {"fontsquirrel" => "FontSquirrel","googlewebfonts" => "Google Web Fonts"}.each do |dir,name| %>
9
+ <% if @installed[dir].any? %>
10
+ <h6><%=name%></h6>
11
+ <ul>
12
+ <% @installed[dir].each do |fam,f| %>
13
+ <li><%=fam%></li>
14
+ <% end %>
15
+ </ul>
16
+ <% end %>
17
+ <% end %>
18
+ <% end %>
19
+
20
+ <hr />
21
+
22
+ <h3>Install New Fonts</h3>
23
+
24
+ <p>
25
+ <input type="radio" name="fonts_directory" data-label="Font Squirrel API" value="fontsquirrel" data-exclude="true" checked="checked" class="cytoRadio" />
26
+ <input type="radio" name="fonts_directory" data-label="Google Web Fonts" value="googlewebfonts" data-exclude="true" />
27
+ </p>
28
+
29
+ <p><select name="fonts_family" id="fontfamilyselect" data-exclude="true" class="cytoSelect"></select></p>
30
+
31
+ <p><button id="font_import_button" class="cytoButton large">Import Font Family</button></p>
32
+
33
+ <script type="text/javascript">
34
+ (function($){
35
+ $.Cytoplasm("ready",function(){
36
+ $.cytoAjax("/cytoplasm/fonts/fetch_all",function(data){
37
+ console.log(data);
38
+ console.log(data.imported);
39
+ var fds = $('input[name=fonts_directory]');
40
+ var ffs = $('#fontfamilyselect');
41
+ var ib = $('#font_import_button');
42
+
43
+ // Directory select
44
+ fds.cytoRadio("options",{
45
+ events:{
46
+ change:$.debounce(100,true,function(e){
47
+ var fonts = {};
48
+ var imported = {};
49
+ switch ($(this).cytoRadio("value")) {
50
+ case "fontsquirrel":
51
+ $.each(data.fontsquirrel,function(fam,f){fonts[fam] = f.family_name;});
52
+ if (data.imported.length>0) {
53
+ $.each(data.imported,function(fam,f){imported[fam] = fam;});
54
+ iffs.cytoSelect("update",imported);
55
+ }
56
+ break;
57
+ case "googlewebfonts":
58
+ $.each(data.googlewebfonts,function(fam,f){fonts[fam] = fam;});
59
+ break;
60
+ default:return false;
61
+ }
62
+ ffs.cytoSelect("update",fonts);
63
+ })
64
+ }
65
+ });
66
+
67
+ // Family select
68
+ ffs.cytoSelect("options",{
69
+ events:{
70
+ change:function(cy,e){
71
+ var dir = fds.cytoRadio("value");
72
+ var f = data[dir][$(this).cytoSelect("value")];
73
+ if (f!=null) switch (dir) {
74
+ case "fontsquirrel":
75
+ // Check if font has already been imported
76
+ if (!$.isEmptyObject(data.imported[dir]) && data.imported[dir][f.family_urlname] != null) ib.addClass('active').html("Font Family Imported");
77
+ else ib.removeClass('active').html("Import Font Family");
78
+ break;
79
+ case "googlewebfonts":
80
+ console.log(data.imported[dir][f.family]);
81
+ if (!$.isEmptyObject(data.imported[dir]) && data.imported[dir][f.family] != null) ib.addClass('active').html("Font Family Imported");
82
+ else ib.removeClass('active').html("Import Font Family");
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ });
88
+
89
+ // Font Import Button
90
+ ib.css({"margin-top":10}).click(function(e){
91
+ e.preventDefault();
92
+ var dir = fds.cytoRadio("value");
93
+ var f = data[dir][ffs.cytoSelect("value")];
94
+ var name = (dir=="fontsquirrel") ? f.family_name : f.family;
95
+ if (!ib.hasClass('active')) {
96
+ // Import font
97
+ $.cytoAjax("/cytoplasm/fonts/import",{directory:dir,family:f},function(data){
98
+ $.cytoAjaxResponse('Font "'+name+'" has been imported successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
99
+ ib.addClass('active').html("Font Family Imported");
100
+ });
101
+ } else {
102
+ // Remove font
103
+ if (confirm("Are you sure you want to remove this font from your fonts library?")) $.cytoAjax("/cytoplasm/fonts/remove",{directory:dir,family:f},function(data){
104
+ $.cytoAjaxResponse('Font "'+name+'" has been removed successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
105
+ ib.removeClass('active').html("Import Font Family");
106
+ });
107
+ }
108
+ });
109
+
110
+ });
111
+ });
112
+ })(jQuery);
113
+ </script>
@@ -309,8 +309,6 @@
309
309
  // Fetch fonts
310
310
  $.cytoAjax("/cytoplasm/fonts/fetch_all",function(data){
311
311
  console.log(data);
312
-
313
- // Directory select
314
312
  var fds = $('input[name=fonts_directory]');
315
313
  var ffs = $('#fontfamilyselect');
316
314
  var iffs = $('.ind_font_fam_select');
@@ -345,6 +343,7 @@
345
343
  });
346
344
  */
347
345
 
346
+ // Directory select
348
347
  fds.cytoRadio("value",$.Cytoplasm("conf","fontloader.directory")).cytoRadio("options",{
349
348
  events:{
350
349
  change:$.debounce(100,true,function(e){
@@ -371,6 +370,7 @@
371
370
  }
372
371
  });
373
372
 
373
+ // Family select
374
374
  ffs.cytoSelect("options",{
375
375
  events:{
376
376
  change:function(cy,e){