orange-sparkles 0.7.0 → 0.7.1

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.
@@ -0,0 +1,14 @@
1
+ class Bar < Orange::Carton
2
+ id
3
+ front do
4
+ text :foo
5
+ text :bar
6
+ markdown :banana
7
+ end
8
+ admin do
9
+
10
+ text :baz
11
+ fulltext :qux
12
+ end
13
+ as_sparkles_resource
14
+ end
@@ -1,10 +1,11 @@
1
+ require 'orange-sparkles/sparkles_app_resource'
1
2
  require 'orange-sparkles/sparkles_resource'
2
3
  module Orange::Plugins
3
4
  class Sparkles < Base
4
5
  assets_dir File.join(File.dirname(__FILE__), 'assets')
5
6
  views_dir File.join(File.dirname(__FILE__), 'views')
6
7
  templates_dir File.join(File.dirname(__FILE__), 'templates')
7
- resource SparklesResource.new
8
+ resource SparklesAppResource.new
8
9
  end
9
10
  end
10
11
 
@@ -0,0 +1,72 @@
1
+ require 'extlib/mash'
2
+
3
+ class Orange::Carton
4
+ # Define a helper for input type="text" type database stuff
5
+ # Show in a context if wrapped in one of the helpers
6
+ def self.markdown(name, opts = {})
7
+ add_scaffold(name, :markdown, DataMapper::Property::Text, opts.with_defaults(:lazy => true))
8
+ end
9
+
10
+ # Declares a SparklesResource subclass that scaffolds this carton
11
+ # The Subclass will have the name of the carton followed by "Resource"
12
+ def self.as_sparkles_resource
13
+ name = self.to_s
14
+ eval <<-HEREDOC
15
+ class ::#{name}Resource < Orange::SparklesResource
16
+ use #{name}
17
+ call_me :#{name.downcase}
18
+ end
19
+ HEREDOC
20
+ end
21
+ def self.as_sparkle_resource
22
+ as_sparkles_resource
23
+ end
24
+ end
25
+
26
+ class SparklesAppResource < Orange::Resource
27
+ call_me :sparkles
28
+
29
+ def init
30
+ @tabs = []
31
+ end
32
+ def stack_init
33
+ orange[:scaffold].add_scaffold_type(:markdown) do |name, val, opts|
34
+ packet = opts[:packet]
35
+ opts = opts.with_defaults({:value => '', :label => false, :show => false, :wrap_tag => 'div'})
36
+ if opts[:show]
37
+ packet.markdown(val || '')
38
+ else
39
+ val = '' if val.blank?
40
+ val.gsub!("\n", '&#010;')
41
+ ret = "<textarea name='#{opts[:model_name]}[#{name}]' class='markdown-editor'>#{val}</textarea>"
42
+ ret = "<label for=''>#{opts[:display_name]}</label><br />" + ret if opts[:label]
43
+ ret = "<#{opts[:wrap_tag]}>#{ret}</#{opts[:wrap_tag]}>" if opts[:wrap_tag]
44
+ ret
45
+ end
46
+ end
47
+ end
48
+
49
+ def stylesheets
50
+ orange.options["sparkles.stylesheets"] || []
51
+ end
52
+ def javascripts
53
+ orange.options["sparkles.javascripts"] || []
54
+ end
55
+ def site_name(packet, default = "An Orange Site")
56
+ packet['site'] ? packet['site'].name : default
57
+ end
58
+ def sidebar?
59
+ orange.options["sidebar_on"] || false
60
+ end
61
+ def add_tab(resource, text = nil)
62
+ @tabs << {:resource => resource, :text => (text || resource.to_s.capitalize)}
63
+ end
64
+ def tabs
65
+ tabs = orange.options["sparkles.tabs"] || []
66
+ tabs = (tabs + @tabs) unless @tabs.blank?
67
+ tabs.collect{|hash| Mash.new(hash)} || []
68
+ end
69
+ def default_style?
70
+ orange.options["sparkles.default_style"] || stylesheets.empty?
71
+ end
72
+ end
@@ -1,23 +1,55 @@
1
- require 'extlib/mash'
2
- class SparklesResource < Orange::Resource
3
- call_me :sparkles
4
- def stylesheets
5
- orange.options["sparkles.stylesheets"] || []
1
+ class Orange::SparklesResource < Orange::ModelResource
2
+ extend ClassInheritableAttributes
3
+ cattr_accessor :tabbed, :auto_sitemap
4
+ viewable :summary
5
+
6
+ def self.tab(text = nil)
7
+ self.tabbed = text
6
8
  end
7
- def javascripts
8
- orange.options["sparkles.javascripts"] || []
9
+
10
+ def self.auto_sitemap!
11
+ self.auto_sitemap = true
9
12
  end
10
- def site_name(packet, default = "An Orange Site")
11
- packet['site'] ? packet['site'].name : default
13
+
14
+ def exposed?(packet)
15
+ []
12
16
  end
13
- def sidebar?
14
- orange.options["sidebar_on"] || false
17
+
18
+ def stack_init
19
+ orange[:sparkles].add_tab(@my_orange_name, self.class.tabbed) if self.class.tabbed || (self.class.tabbed == nil)
20
+ orange.register(:sitemap_created) do |opts|
21
+ packet = opts[:packet]
22
+ site_id = opts[:site_id]
23
+ orange[:sitemap, true].add_route_for(packet,
24
+ :orange_site_id => site_id,
25
+ :resource => @my_orange_name,
26
+ :resource_action => :do_route,
27
+ :slug => @my_orange_name.to_s,
28
+ :link_text => @my_orange_name.to_s.capitalize,
29
+ :show_in_nav => true
30
+ )
31
+ end if (self.class.auto_sitemap || (self.class.auto_sitemap == nil))
15
32
  end
16
- def tabs
17
- tabs = orange.options["sparkles.tabs"] || []
18
- tabs.collect{|hash| Mash.new(hash)} || []
33
+
34
+ def route_with_resource(packet, *args)
35
+ route = orange[:sitemap, true].url_for(packet,
36
+ :resource => @my_orange_name,
37
+ :resource_action => :do_route
38
+ )
39
+ route + args.compact.join('/')
19
40
  end
20
- def default_style?
21
- orange.options["sparkles.default_style"] || stylesheets.empty?
41
+
42
+ def do_route(packet, opts = {})
43
+ resource_path = packet['route.resource_path']
44
+ parts = resource_path.split('/')
45
+ route(packet, parts, opts = {})
46
+ end
47
+
48
+ def route(packet, route_parts, opts = {})
49
+ if route_parts.blank?
50
+ list(packet, opts)
51
+ else
52
+ show(packet, opts.with_defaults({:resource_id => route_parts.first}))
53
+ end
22
54
  end
23
55
  end
@@ -9,6 +9,8 @@
9
9
  = part[:js]
10
10
  %link{:rel => "stylesheet", :type => "text/css", :href => "/assets/_sparkles_/js/markitup/skins/simple/style.css"}
11
11
  %link{:rel => "stylesheet", :type => "text/css", :href => "/assets/_sparkles_/js/markitup/sets/markdown/style.css"}
12
+ :javascript
13
+ $(function(){$('.markdown-editor').markItUp(mySettings);})
12
14
  %body{:id => packet["route.resource"].to_s}
13
15
  %div#header
14
16
  %div#user-status
@@ -25,10 +27,10 @@
25
27
  %div.tab-container
26
28
  / %a.tab#home-tab{:href => "#"} Home
27
29
  %a.tab#sitemap-tab{:href => route_to(:sitemap)} Pages
28
- %a.tab#assets-tab{:href => route_to(:assets)} Assets
29
30
  - for link in (orange[:sparkles].tabs || [])
30
31
  %style= "body##{link[:resource]} a##{link[:resource]}-tab{ background: #999999;}"
31
32
  %a.tab{:id => "#{link[:resource]}-tab", :href => route_to(link[:resource])}= link[:text]
33
+ %a.tab#assets-tab{:href => route_to(:assets)} Assets
32
34
  %div#subheader
33
35
  %h1
34
36
  %img.subhead-icon{:src => "/assets/_sparkles_/images/edit.png", :width => "23", :height => "22", :alt => "Pages icon"}
@@ -4,9 +4,8 @@
4
4
  %div#edit-box
5
5
  %form#edit{:action => route_to(model_name, "new"), :method => "post", :"accept-charset" => "UTF-8"}
6
6
  %label{:for => "edit-title"} Title
7
- %input#publish-social{:type => "hidden", :name => "#{model_name}[publish_to_social]", :value => "0"}
8
7
  %input#edit-title{:type => "text", :name => "#{model_name}[title]", :value => ""}
9
- %textarea#edit-content{:cols => "32", :rows => "40", :name => "#{model_name}[body]"}<= ''
8
+ %textarea#edit-content{:cols => "32", :rows => "20", :name => "#{model_name}[body]"}<= ''
10
9
  %div#save-status
11
10
  New Draft
12
11
  %input#publish-me{:type => "hidden", :name => "#{model_name}[published]", :value => "0"}
@@ -43,13 +42,13 @@
43
42
  / %a.grey-button Add to Menu
44
43
  / %hr.one-px-grey
45
44
 
46
- %div#publish_to_social.control-label
47
- Publish to Social Media?
48
- %div.slider-container
49
- %div.slider-background.slider-background-yes-no
50
- %div.slider-off
51
- No
52
- %hr.one-px-grey
45
+ / %div#publish_to_social.control-label
46
+ / Publish to Social Media?
47
+ / %div.slider-container
48
+ / %div.slider-background.slider-background-yes-no
49
+ / %div.slider-off
50
+ / No
51
+ / %hr.one-px-grey
53
52
  %div#page-summary.control-label
54
53
  Page Summary (optional)
55
54
  %div.settings-collapse
@@ -6,7 +6,7 @@
6
6
  %label{:for => "edit-title"} Title
7
7
  - # Make it harder to republish to social by forcing publish to social off.
8
8
  %input#edit-title{:type => "text", :name => "#{model_name}[title]", :value => model.title}
9
- %textarea#edit-content{:cols => "32", :rows => "40", :name => "#{model_name}[body]"}<= model.body
9
+ %textarea#edit-content{:cols => "32", :rows => "20", :name => "#{model_name}[body]"}<= model.body
10
10
  %div#save-status
11
11
  #{model.published ? "Published" : "Draft saved"} #{fuzzy_time(model.updated_at)}
12
12
  %input#publish-me{:type => "hidden", :name => "#{model_name}[published]", :value => "0"}
@@ -48,17 +48,17 @@
48
48
  / %a.grey-button Add to Menu
49
49
  / %hr.one-px-grey
50
50
 
51
- %div#publish_to_social.control-label
52
- Publish To Social Media?
53
- %div.slider-container
54
- %div.slider-background.slider-background-yes-no
55
- - if model.publish_to_social && !model.published
56
- %div.slider
57
- Yes
58
- - else
59
- %div.slider-off
60
- No
61
- %hr.one-px-grey
51
+ / %div#publish_to_social.control-label
52
+ / Publish To Social Media?
53
+ / %div.slider-container
54
+ / %div.slider-background.slider-background-yes-no
55
+ / - if model.publish_to_social && !model.published
56
+ / %div.slider
57
+ / Yes
58
+ / - else
59
+ / %div.slider-off
60
+ / No
61
+ / %hr.one-px-grey
62
62
  %div#page-summary.control-label
63
63
  Page Summary (optional)
64
64
  %div.settings-collapse
@@ -0,0 +1,31 @@
1
+ - packet.add_js("page-list-effects.js", :module => "_sparkles_")
2
+ - is_short ||= false
3
+ .list-view
4
+ %table.tablesorter{:class => (is_short ? "is_short" : "")}
5
+ %thead
6
+ %tr.list-header-group
7
+ %th.list-header.page-listing-expand-collapse &nbsp;
8
+ - for prop in props
9
+ %th.list-header= prop[:name].to_s.gsub('_', ' ').capitalize
10
+ %td.list-header Actions
11
+ %tfoot
12
+ %tr
13
+ %td &nbsp;
14
+ - for prop in props
15
+ %td &nbsp;
16
+ %td
17
+ %a.button.add-button{:href => route_to(model_name, 'create')} New
18
+ %tbody
19
+ - for obj in list
20
+ %tr.page-listing-item= view_table_row(model_name, :model => obj)
21
+ .pager
22
+ %form
23
+ %img.first{:src=>"/assets/_sparkles_/images/tablesorter/first.png"}
24
+ %img.prev{:src=>"/assets/_sparkles_/images/tablesorter/prev.png"}
25
+ %input.pagedisplay{:type => "text"}
26
+ %img.next{:src=>"/assets/_sparkles_/images/tablesorter/next.png"}
27
+ %img.last{:src=>"/assets/_sparkles_/images/tablesorter/last.png"}
28
+ %select.pagesize
29
+ %option{:value => "5", :selected => is_short ? true : false} 5
30
+ %option{:value => "10", :selected => is_short ? false : true} 10
31
+ %option{:value => "25"} 25
@@ -2,5 +2,5 @@
2
2
  %form{:action => "#{packet.route_to(model_name, 'new')}", :method => 'post', :"accept-charset" => "UTF-8"}
3
3
  - packet["page.title"] = "#{model_name.to_s.capitalize} > Create"
4
4
  - for prop in props
5
- %p= view_attribute(prop, model_name, :label => true)
5
+ !~ view_attribute(prop, model_name, :label => true)
6
6
  %input{:type => 'submit', :value => 'Save New Item'}
@@ -5,7 +5,10 @@
5
5
  = orange[:sitemap, true].sitemap_links(packet, {:slug_me => orange[:sitemap, true].slug_for(model, props)})
6
6
  %form{:action => packet.route_to(model_name, model[:id], 'save'), :method => 'post', :"accept-charset" => "UTF-8"}
7
7
  - for prop in props
8
- %p!= view_attribute(prop, model_name, :label => true, :value => model.attribute_get(prop[:name]), :model => model)
8
+ - if(prop[:relationship])
9
+ !~ view_attribute(prop, model_name, :label => true, :value => model.__send__(prop[:name]), :model => model)
10
+ - else
11
+ !~ view_attribute(prop, model_name, :label => true, :value => model.attribute_get(prop[:name]), :model => model)
9
12
  %input{:type => 'submit', :value => 'Save Changes'}
10
13
  - else
11
14
  %p Couldn't find the item you're looking for.
@@ -1,31 +1,2 @@
1
- - packet.add_js("page-list-effects.js", :module => "_sparkles_")
2
- - is_short ||= false
3
- .list-view
4
- %table.tablesorter{:class => (is_short ? "is_short" : "")}
5
- %thead
6
- %tr.list-header-group
7
- %th.list-header.page-listing-expand-collapse &nbsp;
8
- - for prop in props
9
- %th.list-header= prop[:name].to_s.gsub('_', ' ').capitalize
10
- %td.list-header Actions
11
- %tfoot
12
- %tr
13
- %td &nbsp;
14
- - for prop in props
15
- %td &nbsp;
16
- %td
17
- %a.button.add-button{:href => route_to(model_name, 'create')} New
18
- %tbody
19
- - for obj in list
20
- %tr.page-listing-item= view_table_row(model_name, :model => obj)
21
- .pager
22
- %form
23
- %img.first{:src=>"/assets/_sparkles_/images/tablesorter/first.png"}
24
- %img.prev{:src=>"/assets/_sparkles_/images/tablesorter/prev.png"}
25
- %input.pagedisplay{:type => "text"}
26
- %img.next{:src=>"/assets/_sparkles_/images/tablesorter/next.png"}
27
- %img.last{:src=>"/assets/_sparkles_/images/tablesorter/last.png"}
28
- %select.pagesize
29
- %option{:value => "5", :selected => is_short ? true : false} 5
30
- %option{:value => "10", :selected => is_short ? false : true} 10
31
- %option{:value => "25"} 25
1
+ - for obj in list
2
+ = view_summary(model_name, :model => obj)
@@ -0,0 +1,31 @@
1
+ - packet.add_js("page-list-effects.js", :module => "_sparkles_")
2
+ - is_short ||= false
3
+ .list-view
4
+ %table.tablesorter{:class => (is_short ? "is_short" : "")}
5
+ %thead
6
+ %tr.list-header-group
7
+ %th.list-header.page-listing-expand-collapse &nbsp;
8
+ - for prop in props
9
+ %th.list-header= prop[:name].to_s.gsub('_', ' ').capitalize
10
+ %td.list-header Actions
11
+ %tfoot
12
+ %tr
13
+ %td &nbsp;
14
+ - for prop in props
15
+ %td &nbsp;
16
+ %td
17
+ %a.button.add-button{:href => route_to(model_name, 'create')} New
18
+ %tbody
19
+ - for obj in list
20
+ %tr.page-listing-item= view_table_row(model_name, :model => obj)
21
+ .pager
22
+ %form
23
+ %img.first{:src=>"/assets/_sparkles_/images/tablesorter/first.png"}
24
+ %img.prev{:src=>"/assets/_sparkles_/images/tablesorter/prev.png"}
25
+ %input.pagedisplay{:type => "text"}
26
+ %img.next{:src=>"/assets/_sparkles_/images/tablesorter/next.png"}
27
+ %img.last{:src=>"/assets/_sparkles_/images/tablesorter/last.png"}
28
+ %select.pagesize
29
+ %option{:value => "5", :selected => is_short ? true : false} 5
30
+ %option{:value => "10", :selected => is_short ? false : true} 10
31
+ %option{:value => "25"} 25
@@ -1,4 +1,7 @@
1
1
  - if model
2
2
  %div{ :class => model_name}
3
3
  - for prop in props
4
- = view_attribute(prop, model_name, :show => true, :value => model.attribute_get(prop[:name]), :model => model)
4
+ - if(prop[:relationship])
5
+ !~ view_attribute(prop, model_name, :show => true, :value => model.__send__(prop[:name]), :model => model)
6
+ - else
7
+ !~ view_attribute(prop, model_name, :show => true, :value => model.attribute_get(prop[:name]), :model => model)
@@ -0,0 +1 @@
1
+ = view_show(model_name, :model => model)
@@ -2,7 +2,10 @@
2
2
  %td.move
3
3
  &nbsp;
4
4
  - for prop in props
5
- %td= model.attribute_get(prop[:name])
5
+ - if(prop[:relationship])
6
+ %td= [:belongs, :has_one].include?(prop[:type]) ? (model.__send__(prop[:name]) ? model.__send__(prop[:name]).scaffold_name : "") : ""
7
+ - else
8
+ %td= model.attribute_get(prop[:name])
6
9
  %td.actions
7
10
  %div.page-listing-actions
8
11
  %a.button.grey-button.preview-button{:href => route_to(model_name, model.id, "edit")}
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 0
9
- version: 0.7.0
8
+ - 1
9
+ version: 0.7.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Haslem
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-05 00:00:00 -04:00
17
+ date: 2010-10-27 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -265,6 +265,7 @@ files:
265
265
  - lib/orange-sparkles/assets/js/popout-effects-page-edit.js
266
266
  - lib/orange-sparkles/plugin.rb
267
267
  - lib/orange-sparkles/sparkles_app.rb
268
+ - lib/orange-sparkles/sparkles_app_resource.rb
268
269
  - lib/orange-sparkles/sparkles_resource.rb
269
270
  - lib/orange-sparkles/templates/home.haml
270
271
  - lib/orange-sparkles/templates/sparkles-admin.haml
@@ -287,11 +288,14 @@ files:
287
288
  - lib/orange-sparkles/views/blog_posts/table_row.haml
288
289
  - lib/orange-sparkles/views/contactforms/contactform.haml
289
290
  - lib/orange-sparkles/views/contactforms/list.haml
291
+ - lib/orange-sparkles/views/default_resource/admin.list.haml
290
292
  - lib/orange-sparkles/views/default_resource/create.haml
291
293
  - lib/orange-sparkles/views/default_resource/edit.haml
292
294
  - lib/orange-sparkles/views/default_resource/list.haml
295
+ - lib/orange-sparkles/views/default_resource/orange.list.haml
293
296
  - lib/orange-sparkles/views/default_resource/show.haml
294
297
  - lib/orange-sparkles/views/default_resource/sitemap_row.haml
298
+ - lib/orange-sparkles/views/default_resource/summary.haml
295
299
  - lib/orange-sparkles/views/default_resource/table_row.haml
296
300
  - lib/orange-sparkles/views/disqus/comment_thread.haml
297
301
  - lib/orange-sparkles/views/news/archive.haml
@@ -358,5 +362,5 @@ rubygems_version: 1.3.6
358
362
  signing_key:
359
363
  specification_version: 3
360
364
  summary: Adding some prettiness to orange-core
361
- test_files: []
362
-
365
+ test_files:
366
+ - examples/simple/cartons/bar.rb