cytoplasm 0.1.5 → 0.1.6

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.
Files changed (53) hide show
  1. data/app/assets/javascripts/cytoplasm/cytoLogo.js.erb +3 -0
  2. data/app/assets/javascripts/cytoplasm/cytoRadio.js.erb +3 -2
  3. data/app/assets/javascripts/cytoplasm/cytoplasm.js.erb +45 -18
  4. data/app/assets/stylesheets/cytoplasm/cytoplasm.less +1 -5
  5. data/app/controllers/cytoplasm/fonts_controller.rb +26 -6
  6. data/app/controllers/cytoplasm/settings_controller.rb +4 -0
  7. data/app/views/cytoplasm/fonts/_installer.html.erb +107 -0
  8. data/app/views/cytoplasm/fonts/_li.html.erb +65 -0
  9. data/app/views/cytoplasm/fonts/_list.html.erb +20 -0
  10. data/app/views/cytoplasm/fonts/index.html.erb +5 -159
  11. data/app/views/cytoplasm/fonts/show.html.erb +11 -0
  12. data/app/views/cytoplasm/settings/colors.html.erb +1 -0
  13. data/app/views/cytoplasm/settings/{edit.html.erb → general.html.erb} +3 -193
  14. data/app/views/cytoplasm/settings/index.html.erb +4 -6
  15. data/app/views/cytoplasm/settings/layout.html.erb +56 -0
  16. data/config/routes.rb +5 -2
  17. data/lib/cytoplasm.rb +13 -5
  18. data/lib/cytoplasm/version.rb +1 -1
  19. data/test/dummy/app/views/demos/index.html.erb +12 -11
  20. data/test/dummy/app/views/demos/jquery.html.erb +107 -0
  21. data/test/dummy/app/views/home/index.html.erb +26 -57
  22. data/test/dummy/app/views/layouts/application.html.erb +2 -2
  23. data/test/dummy/config/routes.rb +2 -0
  24. data/test/dummy/log/development.log +99955 -0
  25. data/test/dummy/log/test.log +20 -0
  26. data/test/dummy/public/cytoplasm/cytoplasm.vars.less +7 -1
  27. data/test/dummy/public/fonts/Vitamin/VITAMINO-webfont.eot +0 -0
  28. data/test/dummy/public/fonts/Vitamin/VITAMINO-webfont.svg +136 -0
  29. data/test/dummy/public/fonts/Vitamin/VITAMINO-webfont.ttf +0 -0
  30. data/test/dummy/public/fonts/Vitamin/VITAMINO-webfont.woff +0 -0
  31. data/test/dummy/public/fonts/Vitamin/VITAMIN_-webfont.eot +0 -0
  32. data/test/dummy/public/fonts/Vitamin/VITAMIN_-webfont.svg +137 -0
  33. data/test/dummy/public/fonts/Vitamin/VITAMIN_-webfont.ttf +0 -0
  34. data/test/dummy/public/fonts/Vitamin/VITAMIN_-webfont.woff +0 -0
  35. data/test/dummy/public/fonts/Vitamin/demo.html +38 -0
  36. data/test/dummy/public/fonts/Vitamin/pizzadude.dk License.txt +8 -0
  37. data/test/dummy/public/fonts/Vitamin/stylesheet.css +28 -0
  38. data/test/dummy/public/fonts/enabled.yml +6 -2
  39. data/test/dummy/tmp/cache/assets/C84/4A0/sprockets%2F8a760be2f29a644c90004cd461744978 +0 -0
  40. data/test/dummy/tmp/cache/assets/CAC/280/sprockets%2F408a235a236b0a3aa1302733211db5ba +0 -0
  41. data/test/dummy/tmp/cache/assets/CAE/FD0/sprockets%2F3bb22e4d409072c2278c1771893ec19e +0 -0
  42. data/test/dummy/tmp/cache/assets/D03/6B0/sprockets%2Fd3cfc780201b87a3439e35c5236bb71a +0 -0
  43. data/test/dummy/tmp/cache/assets/D0E/7D0/sprockets%2F89200785fe2710582a6c1b8d04ae7fbe +0 -0
  44. data/test/dummy/tmp/cache/assets/D14/170/sprockets%2F40a7b83bb067eea7ce2c8394e1529287 +0 -0
  45. data/test/dummy/tmp/cache/assets/D28/830/sprockets%2F1cd2012fe85799b84951d6fc7c8ff079 +0 -0
  46. data/test/dummy/tmp/cache/assets/D36/B20/sprockets%2F0dd47218aa33bc293a136c358f2eed67 +0 -0
  47. data/test/dummy/tmp/cache/assets/D50/750/sprockets%2F7fbcc321810c8f493f86364fee480ed9 +0 -0
  48. data/test/dummy/tmp/cache/assets/D73/5F0/sprockets%2F6aee922214ffea56b31595f1a5ed8c92 +0 -0
  49. data/test/dummy/tmp/cache/assets/DBE/210/sprockets%2Fbedb89fd02eac0dc7aa93c820c612343 +0 -0
  50. data/test/dummy/tmp/cache/assets/E69/B60/sprockets%2Ffdbf7ec615e9a92e4857cdade17f4daa +0 -0
  51. metadata +52 -16
  52. data/app/views/cytoplasm/fonts/_font_li.html.erb +0 -23
  53. data/test/dummy/tmp/pids/server.pid +0 -1
@@ -0,0 +1,3 @@
1
+ (function($){
2
+
3
+ })(jQuery);
@@ -86,10 +86,11 @@
86
86
  if (settings.widget.inputList.inputs.elements.find(':checked')) methods.value.apply(settings.widget.inputList.inputs.elements,[settings.widget.inputList.inputs.elements.find(':checked').val()]);
87
87
 
88
88
  // Bindings
89
- settings.widget.inputList.inputs.elements.change($.debounce(100,true,function(e){
89
+ //settings.widget.inputList.inputs.elements
90
+ $('input[name="'+$this.attr('name')+'"]:first-child').change($.debounce(100,true,function(e){
90
91
  methods.value.apply(settings.widget.inputList.inputs.elements,[settings.widget.inputList.inputs.elements.filter(':checked').val()])
91
92
  settings.events.change.apply(settings.widget.inputList.inputs.elements,[settings,e]);
92
- })).trigger('change');
93
+ }));//.trigger('change');
93
94
  settings.widget.buttonList.buttons.elements.bind({
94
95
  mousedown:function(e){
95
96
  e.preventDefault();
@@ -15,12 +15,7 @@ var Cytoplasm;
15
15
  // Setup callback messages
16
16
  $.each(["success","sending","error"],function(i,v){
17
17
  var $this = $('#'+v+'_message');
18
- if (!$this.is('*')) {
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().appendTo(header);
23
- }
18
+ if (!$this.is('*')) $this = $('<p />').addClass('callback_message').attr("id",v+"_message").hide().appendTo(header);
24
19
  });
25
20
  });
26
21
  })(jQuery);
@@ -33,7 +28,14 @@ var Cytoplasm;
33
28
  };
34
29
  var conf = {};
35
30
  var vars = {};
36
- var ready = false;
31
+ var ready = false, readyFunctions = [
32
+ function(){
33
+ var allexceptheader = $('body').children(':not(header)').animate({opacity:1},250,function(){
34
+ $('body').css('overflow-y','scroll');
35
+ $(window).bind('beforeunload',function(){allexceptheader.animate({opacity:0},100);});
36
+ });
37
+ }
38
+ ];
37
39
 
38
40
  // Gradient manipulation library
39
41
  var parseGradient = function(grad,reverse){
@@ -136,12 +138,19 @@ var Cytoplasm;
136
138
  $('body').css("overflow","hidden").children(':not(header)').css("opacity",0);
137
139
 
138
140
  // Fetch latest settings via AJAX
139
- $.cytoAjax("/cytoplasm/settings/fetch",{},function(data){
140
- conf = data.conf;
141
- vars = data.vars;
142
- $('body').data('cytoplasm',settings);
143
- methods.setStyles.apply(this);
144
- ready = true;
141
+ $.ajax("/cytoplasm/settings/fetch",{
142
+ type:"POST",
143
+ success:function(data){
144
+ data = $.parseJSON(data);
145
+ conf = data.conf;
146
+ vars = data.vars;
147
+ $(document).ready(function(){
148
+ $('body').data('cytoplasm',settings);
149
+ methods.setStyles.apply();
150
+ ready = true;
151
+ $.each(readyFunctions,function(i,f){f.apply();});
152
+ });
153
+ }
145
154
  });
146
155
  },
147
156
  setStyles:function(){
@@ -156,7 +165,8 @@ var Cytoplasm;
156
165
  body:{
157
166
  background:vars.colors.global.background,
158
167
  font:vars.fonts.sizes.normal+" "+vars.fonts.faces.regular,
159
- color:vars.colors.global.text
168
+ color:vars.colors.global.text,
169
+ padding:vars.layout.padding
160
170
  },
161
171
  '::selection':{
162
172
  background:vars.colors.global.accent,
@@ -179,6 +189,8 @@ var Cytoplasm;
179
189
  "font-weight":lightweight
180
190
  },
181
191
  header:{
192
+ margin:vars.layout.header.margin,
193
+ padding:vars.layout.header.padding,
182
194
  '#logo':{
183
195
  position:vars.layout.header.logo.position,
184
196
  top:vars.layout.header.logo.y+10
@@ -190,6 +202,14 @@ var Cytoplasm;
190
202
  }
191
203
  }
192
204
  },
205
+ '#main_content':{
206
+ margin:vars.layout.content.margin,
207
+ padding:vars.layout.content.padding
208
+ },
209
+ 'footer':{
210
+ margin:vars.layout.footer.margin,
211
+ padding:vars.layout.footer.padding
212
+ },
193
213
  'table.cytoTable':{
194
214
  background:vars.colors.plugins.cytoTable.background,
195
215
  td:{
@@ -286,17 +306,24 @@ var Cytoplasm;
286
306
  destroy:function(){
287
307
  $('body').data('cytoplasm',null);
288
308
  },
289
- ready:function(callback){
309
+ ready:function(func){
310
+ if (typeof func != "function") return console.warn("$.Cytoplasm's ready method requires a function to be passed as its first and only argument.");
311
+ if (ready==true) return func.apply();
312
+ else readyFunctions.push(func);
313
+
314
+ /*
315
+
290
316
  var interval = setInterval(function(){
291
- if (ready) {
317
+ if (ready==true) {
292
318
  clearInterval(interval);
293
319
  var allexceptheader = $('body').children(':not(header)').animate({opacity:1},250,function(){
294
320
  $('body').css('overflow-y','scroll');
295
321
  $(window).bind('beforeunload',function(){allexceptheader.animate({opacity:0},100);});
296
- callback.apply();
322
+ func.apply();
297
323
  });
298
324
  }
299
325
  },10);
326
+ */
300
327
  }
301
328
  };
302
329
 
@@ -306,6 +333,6 @@ var Cytoplasm;
306
333
  else $.error('Method ' + method + ' does not exist on jQuery.Cytoplasm!');
307
334
  };
308
335
 
309
- $(document).ready(function(){$.Cytoplasm()});
336
+ $.Cytoplasm();
310
337
 
311
338
  })(jQuery);
@@ -15,8 +15,6 @@ h1, h2, h3, h4, h5, h6 {
15
15
 
16
16
  // Header
17
17
  header {
18
- margin:0px;
19
- padding:10px;
20
18
  overflow:hidden;
21
19
 
22
20
  h1 {
@@ -45,8 +43,6 @@ nav {
45
43
  // Main Content
46
44
  #main_content {
47
45
  min-height:400px;
48
- margin:0px;
49
- padding:20px;
50
46
  background:white;
51
47
  overflow:hidden;
52
48
  box-shadow:0px 0px 10px rgba(0,0,0,0.8);
@@ -64,7 +60,7 @@ nav {
64
60
 
65
61
  // Footer
66
62
  footer {
67
- padding:10px;
63
+
68
64
  }
69
65
 
70
66
  // jQuery Plugins
@@ -6,15 +6,22 @@ require 'fileutils'
6
6
 
7
7
  module Cytoplasm
8
8
  class FontsController < ApplicationController
9
+ before_filter :load_cache, :only => [:index,:show,:fetch_all]
9
10
 
10
- @@cache = false
11
+ # Configuration
12
+ @@directories = {"fontsquirrel" => "FontSquirrel","googlewebfonts" => "Google Web Fonts"}
11
13
  @@fontsdir = "public/fonts"
12
14
  @@gwf_file = @@fontsdir + "/googlewebfonts.yml"
13
15
  @@enabled_file = @@fontsdir + "/enabled.yml"
14
16
 
17
+ # For internal usage, DO NOT MODIFY
18
+ @@cache = false
19
+
15
20
  class << self
16
- #attr_accessor :fonts
17
21
 
22
+ def directories
23
+ @@directories
24
+ end
18
25
  def fonts
19
26
  @@cache = fetch_fonts() if @@cache == false
20
27
  return @fonts
@@ -195,9 +202,11 @@ module Cytoplasm
195
202
  e = {}
196
203
  ["fontsquirrel","googlewebfonts"].each do |dir|
197
204
  e[dir] = {}
198
- enabled[dir].keys.each do |fam|
205
+ enabled[dir].each do |fam,variants|
199
206
  # Make list of variants to enable
200
- e[dir][fam] = []
207
+ c = []
208
+ c += variants.keys if dir=="googlewebfonts"
209
+ e[dir][fam] = c
201
210
  end
202
211
  end
203
212
  open(@@enabled_file,"w+") {|f| f.write(e.to_yaml)}
@@ -315,16 +324,18 @@ module Cytoplasm
315
324
  end
316
325
 
317
326
  def fetch_all
318
- @@cache = Cytoplasm::FontsController.fetch_fonts() if @@cache == false
319
327
  render :text => Cytoplasm::Ajax.success(@@cache)
320
328
  end
321
329
 
322
330
  def index
323
- @@cache = Cytoplasm::FontsController.fetch_fonts() if @@cache == false
324
331
  @installed = Cytoplasm::FontsController.fetch_imported()
325
332
  @enabled = Cytoplasm::FontsController.fetch_enabled()
326
333
  end
327
334
 
335
+ def show
336
+ @font = Cytoplasm::FontsController.fetch_family(params[:directory],params[:family])
337
+ end
338
+
328
339
  def import
329
340
  render :text => Cytoplasm::Ajax.success(Cytoplasm::FontsController.import(params[:directory],params[:family]))
330
341
  end
@@ -338,5 +349,14 @@ module Cytoplasm
338
349
  render :text => Cytoplasm::Ajax.success(Cytoplasm::FontsController.disable(params[:directory],params[:family]))
339
350
  end
340
351
 
352
+ private
353
+ def load_cache
354
+ @@cache = Cytoplasm::FontsController.fetch_fonts() if @@cache == false
355
+ end
356
+ def refresh_cache
357
+ @@cache = false
358
+ load_cache()
359
+ end
360
+
341
361
  end
342
362
  end
@@ -9,6 +9,10 @@ module Cytoplasm
9
9
 
10
10
  end
11
11
 
12
+ def layout
13
+
14
+ end
15
+
12
16
  def update
13
17
 
14
18
  end
@@ -0,0 +1,107 @@
1
+ <h3>Install New Fonts</h3>
2
+ <table class="cytoTable">
3
+ <tr>
4
+ <td class='labelcell'>Directory:</td>
5
+ <td>
6
+ <input type="radio" name="fonts_directory" data-label="Font Squirrel API" value="fontsquirrel" data-exclude="true" checked="checked" class="cytoRadio" />
7
+ <input type="radio" name="fonts_directory" data-label="Google Web Fonts" value="googlewebfonts" data-exclude="true" />
8
+ </td>
9
+ </tr>
10
+ <tr>
11
+ <td class='labelcell'>Family:</td>
12
+ <td><select name="fonts_family" id="fontfamilyselect" data-exclude="true" class="cytoSelect"></select></td>
13
+ </tr>
14
+ <tr>
15
+ <td class='labelcell'>Options:</td>
16
+ <td><input type="checkbox" id="font_import_autoenable" data-exclude="true" checked="checked" /> Automatically enable this font after installing</td>
17
+ </tr>
18
+ <tr><td colspan="2"><button id="font_import_button" class="cytoButton large">Install Font Family</button></td></tr>
19
+ </table>
20
+
21
+ <script type="text/javascript">
22
+ (function($){
23
+ var Cytofonts;
24
+ $.cytoAjax("/cytoplasm/fonts/fetch_all",function(data){
25
+ Cytofonts = data;
26
+ $.Cytoplasm("ready",function(){
27
+ var fds = $('input[name=fonts_directory]');
28
+ var ffs = $('#fontfamilyselect');
29
+ var iae = $('#font_import_autoenable');
30
+ var ib = $('#font_import_button');
31
+
32
+ // Directory select
33
+ fds.cytoRadio("options",{
34
+ events:{
35
+ change:$.debounce(100,true,function(e){
36
+ var fonts = {};
37
+ var imported = {};
38
+ switch ($(this).cytoRadio("value")) {
39
+ case "fontsquirrel":
40
+ $.each(Cytofonts.fontsquirrel,function(fam,f){fonts[fam] = f.family_name;});
41
+ if (Cytofonts.imported.length>0) {
42
+ $.each(Cytofonts.imported,function(fam,f){imported[fam] = fam;});
43
+ iffs.cytoSelect("update",imported);
44
+ }
45
+ break;
46
+ case "googlewebfonts":
47
+ $.each(Cytofonts.googlewebfonts,function(fam,f){fonts[fam] = fam;});
48
+ break;
49
+ default:return false;
50
+ }
51
+ ffs.cytoSelect("update",fonts);
52
+ })
53
+ }
54
+ });
55
+
56
+ // Family select
57
+ ffs.cytoSelect("options",{
58
+ events:{
59
+ change:function(cy,e){
60
+ var dir = fds.cytoRadio("value");
61
+ var f = Cytofonts[dir][$(this).cytoSelect("value")];
62
+ if (f!=null) switch (dir) {
63
+ case "fontsquirrel":
64
+ // Check if font has already been imported
65
+ if (!$.isEmptyObject(Cytofonts.imported[dir]) && Cytofonts.imported[dir][f.family_urlname] != null) ib.addClass('active').html("Font Family Installed");
66
+ else ib.removeClass('active').html("Install Font Family");
67
+ break;
68
+ case "googlewebfonts":
69
+ console.log(Cytofonts.imported[dir][f.family]);
70
+ if (!$.isEmptyObject(Cytofonts.imported[dir]) && Cytofonts.imported[dir][f.family] != null) ib.addClass('active').html("Font Family Installed");
71
+ else ib.removeClass('active').html("Install Font Family");
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ });
77
+
78
+ // Font Import Button
79
+ ib.css({"margin-top":10}).click(function(e){
80
+ e.preventDefault();
81
+ var dir = fds.cytoRadio("value");
82
+ var f = Cytofonts[dir][ffs.cytoSelect("value")];
83
+ var name = (dir=="fontsquirrel") ? f.family_name : f.family;
84
+ var urlname = (dir=="fontsquirrel") ? f.family_urlname : f.family;
85
+ if (!ib.hasClass('active')) {
86
+ // Import font
87
+ $.cytoAjax("/cytoplasm/fonts/import",{directory:dir,family:urlname},function(data){
88
+ if (!iae.prop("checked")) $.cytoAjaxResponse('Font "'+name+'" has been installed successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
89
+ else $.cytoAjax("/cytoplasm/fonts/enable",{family:urlname,directory:dir},function(data2){
90
+ $.cytoAjaxResponse('Font "'+name+'" has been enabled successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
91
+ });
92
+ ib.addClass('active').html("Font Family Installed");
93
+ });
94
+ } else {
95
+ // Remove font
96
+ if (confirm("Are you sure you want to uninstall this font from your fonts library?")) $.cytoAjax("/cytoplasm/fonts/remove",{directory:dir,family:f},function(data){
97
+ $.cytoAjaxResponse('Font "'+name+'" has been uninstalled successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
98
+ ib.removeClass('active').html("Install Font Family");
99
+ });
100
+ }
101
+ });
102
+
103
+ });
104
+
105
+ });
106
+ })(jQuery);
107
+ </script>
@@ -0,0 +1,65 @@
1
+ <% f["variants"] = f["familyinfo"] if dir == "fontsquirrel" %>
2
+ <li data-family="<%=fam%>" data-directory="<%=dir%>" data-uid="<%=uid = Cytoplasm.generate_uid()%>" style="padding:0px;list-style:none;margin:0px;">
3
+ <table class="cytoTable">
4
+ <tr><td colspan=2><h6><%=link_to(fam,cytoplasm_show_font_url(dir,fam))%></h6></td></tr>
5
+ <% unless f["variants"].nil? or f["variants"].empty? %><% f["variants"].each do |v| %>
6
+ <tr>
7
+ <% if dir=="fontsquirrel" %>
8
+ <td class="labelcell"><%=v["style_name"]%>:</td>
9
+ <td style="background:white;text-align:center;"><%=image_tag(v["listing_image"])%></td>
10
+ <% elsif dir=="googlewebfonts" %>
11
+ <td class="labelcell"><%=v%>:</td>
12
+ <td style="background:white;text-align:center;"><span class="gwf-preview" style="font-family:'<%=fam%>';font-size:48px;font-weight:<%=v%>;">AaBbCcDdEeFfGgHhIiJjKk</span></td>
13
+ <% end %>
14
+ </tr>
15
+ <% end end %>
16
+ <tr>
17
+ <td colspan=2>
18
+ <%=link_to("Details",((dir=="fontsquirrel")?"http://www.fontsquirrel.com/fonts/":"http://www.google.com/webfonts/specimen/")+fam,:class => "font_details",:target => "_blank")%> |
19
+ <%=link_to("Preview","#",:class => "font_preview")%> |
20
+ <%=link_to((Cytoplasm::FontsController.is_enabled?(dir,fam))?"Disable":"Enable","#",:class => "font_enable_disable")%> |
21
+ <%=link_to("Uninstall","#",:class => "font_uninstall")%>
22
+ </td>
23
+ </tr>
24
+ </table>
25
+ </li>
26
+
27
+ <script type="text/javascript">
28
+ (function($){
29
+ $.Cytoplasm("ready",function(){
30
+
31
+ $('[data-uid="<%=uid%>"] .font_enable_disable').click(function(e){
32
+ e.preventDefault();
33
+ var $this = $(this);
34
+ var li = $this.parents("li");
35
+ var fam = li.data('family');
36
+ var dir = li.data('directory');
37
+
38
+ if ($this.html()=="Enable") {
39
+ $.cytoAjax("/cytoplasm/fonts/enable",{family:fam,directory:dir},function(data){
40
+ $.cytoAjaxResponse('Font "'+fam+'" has been enabled successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
41
+ $this.html("Disable");
42
+ });
43
+ } else if ($this.html()=="Disable") {
44
+ $.cytoAjax("/cytoplasm/fonts/disable",{family:li.data('family'),directory:dir},function(data){
45
+ $.cytoAjaxResponse('Font "'+fam+'" has been disabled successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
46
+ $this.html("Enable");
47
+ });
48
+ } else return false;
49
+ });
50
+
51
+ $('.font_uninstall').click(function(e){
52
+ e.preventDefault();
53
+ var $this = $(this);
54
+ var li = $this.parents("li");
55
+ var fam = li.data('family');
56
+ var dir = li.data('directory');
57
+
58
+ if (confirm('Are you sure you want to uninstall this font?')) $.cytoAjax("/cytoplasm/fonts/remove",{family:fam,directory:dir},function(data){
59
+ $.cytoAjaxResponse('Font "'+fam+'" has been uninstalled successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>');
60
+ li.hide(400);
61
+ });
62
+ });
63
+ });
64
+ })(jQuery);
65
+ </script>
@@ -0,0 +1,20 @@
1
+ <%
2
+ uid = Cytoplasm.generate_uid()
3
+ Cytoplasm::FontsController.directories.each do |dir,name| %>
4
+ <% if list[dir].any? %>
5
+ <h4><%=name%></h4>
6
+ <ul data-uid="<%=uid%>" style="margin:0px;padding:0px;">
7
+ <% list[dir].each do |fam,f| %>
8
+ <%=render :partial => 'li', :locals => {:fam => fam, :f => f, :dir => dir} %>
9
+ <% end %>
10
+ </ul>
11
+ <% end %>
12
+ <% end %>
13
+
14
+ <script type="text/javascript">
15
+ (function($){
16
+ $.Cytoplasm("ready",function(){
17
+ var ul = $('[data-uid="<%=uid%>"]');
18
+ });
19
+ })(jQuery);
20
+ </script>