scribble_cms 0.0.14a → 0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c898a802da8482759884f104b6a4153c6f2df0c
4
- data.tar.gz: 36fd977e38546d26600253cd39c0244a8a87e41b
3
+ metadata.gz: 3e706ebc8a03c8b726759571b427213eb4d8ea32
4
+ data.tar.gz: 10483fa6ec2cfe7828d673a247c9debc595120fc
5
5
  SHA512:
6
- metadata.gz: fd6f535f50e41ad02cfc0000b11af5ca28060a24c5750713320290372968a49fba0fb564d0a50b7560ade3dc14298e872f2d05e6996d7a46955eeb01a767410b
7
- data.tar.gz: b4db6e34f7e90c8734e4b46769f689d4a8b2a599305d64b644a03cf24161f6ab987e2813c0fb3b71be49b3e124fd3bc73b8fca5e7ce28d6c284a67800c4d105c
6
+ metadata.gz: af9d8f97bcc4552ec0daa73ae054266b1108c53cba23465388e78ef0ac127a8c1fbbc078f4b39abbc2510b625378aa94cbc2be56c9f5b949b0c7995daf8ad4b2
7
+ data.tar.gz: 406fec9bc5750bb74ab314d1d379fb65641b00cb77c902e8d47987f8f3e6917afb27f001c4bbba409181a0a1367ec7f75b385b7c6fb48db7f5c75592420f5447
@@ -0,0 +1,20 @@
1
+ class ScribblerPicturesController < ApplicationController
2
+
3
+ skip_before_filter :main_app_default_before_filter
4
+
5
+ def show
6
+ img = ScribblerImage.find_by_image_name("#{params[:name]}.#{params[:format]}")
7
+
8
+ if img
9
+ begin
10
+ send_file(img.image.path, :disposition => 'inline', :status => 200)
11
+ rescue Dragonfly::Job::Fetch::NotFound
12
+ render :text => nil, :status => 404
13
+ end
14
+ else
15
+ render :text => nil
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -1,2 +1,13 @@
1
1
  module ScribblerAdminHelper
2
+
3
+ # Form
4
+ def scribbler_form_element(element,form)
5
+ render :partial => "/scribbler_content/forms/#{element.element_type}", :locals => {:element => element, :f => form}
6
+ end
7
+
8
+
9
+ def scribbler_layout(&block)
10
+ render :partial => "/scribbler_admin/scribbler_layout", :locals => {:content => capture(&block)}
11
+ end
12
+
2
13
  end
@@ -5,31 +5,30 @@ module ScribblerContentHelper
5
5
  q = {:name => container_name, :scaleable => (options[:scaleable].nil? ? false : options[:scaleable]), :element_id => (options[:element] ? options[:element].id : nil)}
6
6
  container = ScribblerContainer.where(:name => container_name).first || ScribblerContainer.create(q)
7
7
  container.update_attributes(:scaleable => options[:scaleable]) if options[:scaleable] && container.scaleable != options[:scaleable]
8
- capture(container, &block)
8
+ yield(container)
9
9
  end
10
10
 
11
11
  def scribbler_group(container, group, &block)
12
12
  scribbler_container(container) do |c|
13
13
  c.scribbler_group(group) do |g|
14
- capture(g, &block)
14
+ yield(g)
15
15
  end
16
16
  end
17
17
  end
18
18
 
19
- def scribbler_element(container, group, type, name)
20
- scribbler_group(container, group) do |g|
21
- g.send(type, name)
19
+ def scribbler_element(container, group, type, name, options = {}, &block)
20
+ if block_given?
21
+ options[:default] = capture(&block).html_safe.strip.force_encoding("UTF-8")
22
+ end
23
+
24
+ scribbler_group(container.to_s, group.to_s) do |g|
25
+ v = g.send(type.to_s, name.to_s, options)
26
+ if v.blank? && options[:default]
27
+ options[:default]
28
+ else
29
+ return v
30
+ end
22
31
  end
23
32
  end
24
33
 
25
- # Form
26
- def scribbler_form_element(element,form)
27
- render :partial => "/scribbler_content/forms/#{element.element_type}", :locals => {:element => element, :f => form}
28
- end
29
-
30
-
31
- def scribbler_layout(&block)
32
- render :partial => "/scribbler_admin/scribbler_layout", :locals => {:content => capture(&block)}
33
- end
34
-
35
34
  end
@@ -23,6 +23,10 @@ class ScribblerContainer < ActiveRecord::Base
23
23
 
24
24
 
25
25
  # => END
26
+
27
+ def ordered_groups
28
+ self.groups.sort_by {|g| g.human_name.to_s }
29
+ end
26
30
 
27
31
  def scribbler_group(name, &block)
28
32
  yield(self.get_group(name))
@@ -32,6 +36,9 @@ class ScribblerContainer < ActiveRecord::Base
32
36
  ScribblerGroup.where(:name => name, :container_id => self.id).first || ScribblerGroup.create(:name => name, :container_id => self.id)
33
37
  end
34
38
 
39
+ def description
40
+ I18n.t(self.name, :scope => "scribbler.container_names", :default => self.name.humanize)
41
+ end
35
42
 
36
43
 
37
44
 
@@ -16,7 +16,8 @@ class ScribblerGroup < ActiveRecord::Base
16
16
  ELEMENTS = {:row => ScribblerText,
17
17
  :text => ScribblerText,
18
18
  :link => ScribblerLink,
19
- :image => ScribblerImage}
19
+ :image => ScribblerImage,
20
+ :var => ScribblerVar}
20
21
 
21
22
  #== Validation and Callbacks
22
23
  #=== Validation
@@ -24,17 +25,24 @@ class ScribblerGroup < ActiveRecord::Base
24
25
 
25
26
  #=== Callbacks
26
27
  after_destroy :destroy_elements
27
-
28
-
28
+
29
29
  # => END
30
30
 
31
31
  # Display data
32
- def row(row_name)
33
- get_element(:row, row_name).content
32
+ def row(row_name, options = {})
33
+ e = get_element(:row, row_name)
34
+ if e.content.blank? && options[:default]
35
+ e.update_attributes(:content => options[:default])
36
+ end
37
+ return e.content.to_s.html_safe
34
38
  end
35
39
 
36
- def text(text_name)
37
- get_element(:text, text_name).content.to_s.html_safe
40
+ def text(text_name, options = {})
41
+ e = get_element(:text, text_name)
42
+ if e.content.blank? && options[:default]
43
+ e.update_attributes(:content => options[:default])
44
+ end
45
+ return e.content.to_s.html_safe
38
46
  end
39
47
 
40
48
  def link(link_name, options = {})
@@ -43,10 +51,29 @@ class ScribblerGroup < ActiveRecord::Base
43
51
  ActionController::Base.helpers.link_to(link.title, link.url, options)
44
52
  end
45
53
 
46
- def image(image_name, size)
47
- get_element(:image, image_name, :opt_size => size).image.url(:default)
54
+ def image(image_name, options = {})
55
+ e = get_element(:image, image_name, options)
56
+ if e.image
57
+ e.image.url
58
+ else
59
+ ""
60
+ end
48
61
  end
49
62
 
63
+ def var(name, options = {})
64
+ get_element :var, name
65
+ end
66
+
67
+ def clone!(new_name)
68
+ group = self.class.new(:name => new_name, :container_id => self.container_id)
69
+ if group.save
70
+ self.elements.each do |el|
71
+ el.class.create(el.attributes.except("id").merge(:group_id => group.id))
72
+ end
73
+ end
74
+ end
75
+
76
+
50
77
  # Helpers
51
78
  def get_element(type, name, options = {:released => true})
52
79
  options[:released] ||= true
@@ -77,7 +104,7 @@ class ScribblerGroup < ActiveRecord::Base
77
104
  end
78
105
 
79
106
  def elements(options = {:released => true})
80
- ELEMENTS.values.uniq.map {|c| c.where(:group_id => self.id, :released => options[:released] == true)}.flatten.sort_by {|e| e.created_at}
107
+ ELEMENTS.values.uniq.map {|c| c.where(:group_id => self.id, :released => options[:released] == true)}.flatten.sort_by {|e| e.name}
81
108
  end
82
109
 
83
110
  def released_elements
@@ -98,7 +125,7 @@ class ScribblerGroup < ActiveRecord::Base
98
125
  self.process_data!(data[:released])
99
126
 
100
127
  # Update unrealesed data
101
- self.process_data!(data[:unreleased])
128
+ self.process_data!(data[:unreleased]) if data[:unreleased]
102
129
  end
103
130
 
104
131
  def process_data!(data)
@@ -115,6 +142,10 @@ class ScribblerGroup < ActiveRecord::Base
115
142
  end
116
143
  end
117
144
 
145
+ def human_name
146
+ I18n.t(self.name, :scope => "scribbler.group_names", :default => self.name.humanize) rescue self.name
147
+ end
148
+
118
149
 
119
150
 
120
151
 
@@ -1,10 +1,25 @@
1
1
  class ScribblerImage < ActiveRecord::Base
2
2
 
3
3
  #= Configuration
4
- has_attached_file :image, :styles => {:default => "300x200"}, :processors => [:cropper]
5
- validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
4
+ dragonfly_accessor :image, app: :scribbler do
5
+ after_assign{|i| i.name = sanitize_filename(image.name) }
6
+ end
7
+
8
+
9
+ def sanitize_filename(filename)
10
+ [filename.split(".").first.parameterize, filename.split(".").last].join(".")
11
+ end
12
+
13
+ #validates_presence_of :image
14
+ validates_size_of :image, maximum: 2.megabytes
15
+ validates_property :format,
16
+ of: :image,
17
+ in: [:gif, :png, :jpg, :jpeg],
18
+ case_sensitive: false,
19
+ message: I18n.t("not a valid image")
20
+
21
+
6
22
 
7
- attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
8
23
  #== Associations
9
24
 
10
25
  #== Plugins and modules
@@ -28,20 +43,5 @@ class ScribblerImage < ActiveRecord::Base
28
43
  # => END
29
44
 
30
45
 
31
- def cropping?
32
- !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
33
- end
34
-
35
- def crop_image
36
- self.image.reprocess!
37
- crop_x = crop_y = crop_w = crop_h = nil
38
- end
39
-
40
- def opt_image_width
41
- self.opt_size.split("x").first
42
- end
43
46
 
44
- def opt_image_height
45
- self.opt_size.split("x").last
46
- end
47
47
  end
@@ -0,0 +1,44 @@
1
+ class ScribblerVar < ActiveRecord::Base
2
+
3
+ #= Configuration
4
+ #== Associations
5
+
6
+
7
+ #== Plugins and modules
8
+ #=== PlugIns
9
+ # => Stuff in Here
10
+
11
+ #=== include Modules
12
+ include ScribbleCms::ScribblerElementSetup
13
+
14
+ #== Konstanten
15
+ VAR_TYPES = {
16
+ :decimal => ""
17
+ }
18
+
19
+ #== Validation and Callbacks
20
+ #=== Validation
21
+
22
+
23
+ #=== Callbacks
24
+ # => Stuff in Here
25
+
26
+
27
+ # => END
28
+
29
+
30
+ def self.get(container_name, group_name, name, type)
31
+
32
+ q = {:name => container_name}
33
+ container = ScribblerContainer.where(:name => container_name).first || ScribblerContainer.create(q)
34
+ container.scribbler_group(group_name) do |g|
35
+ return g.var(name, type)
36
+ end
37
+
38
+
39
+ end
40
+
41
+ def self.set(group, name, value)
42
+ end
43
+
44
+ end
@@ -1,6 +1,10 @@
1
1
  <div id="scribbler-admin-area" class="cf">
2
- <div id="scribbler-sidebar">
3
- <%= render :partial => "/scribbler_admin/scribbler_sidebar" unless request.xhr? %>
4
- </div>
5
- <div id="scribbler-edit-area"><%= content %></div>
2
+ <% if @containers.empty? %>
3
+ <span class="metainfo">Es liegen keine Inhalte vor, die bearbeitet werden können</span>
4
+ <% else %>
5
+ <div id="scribbler-sidebar">
6
+ <%= render :partial => "/scribbler_admin/scribbler_sidebar" unless request.xhr? %>
7
+ </div>
8
+ <div id="scribbler-edit-area"><%= content %></div>
9
+ <% end %>
6
10
  </div>
@@ -1,11 +1,16 @@
1
- <ul>
1
+ <ul data-no-turbolink>
2
+ <li>
3
+ <%= form_for :scribbler, :url => alchemy.admin_static_content_search_url, :html => {:method => :get} do |f| %>
4
+ <%= f.labeled_text_field :query, :label => "Suchbegriff" %>
5
+ <%= f.submit "Suchen" %>
6
+ <% end %>
7
+ </li>
2
8
  <% ScribblerContainer.all.each do |container| %>
3
- <li class="scribbler-group">
4
- <%= link_to container.description, scribbler.url_for({:controller => "/scribbler_admin", :action => "container_edit", :id => container.id}) %><br />
5
- <div class="metainfo small"><%= container.name %></div>
6
- <ul class="">
7
- <% container.groups.each do |group| %>
8
- <li><%= link_to group.name, scribbler.url_for({:controller => "/scribbler_admin", :action => "group_edit", :id => group.id}), default_ajax_link(:update => "scribbler-edit-area") %></li>
9
+ <li class="scribbler-group" data-scribbler-container-id="<%= container.id %>">
10
+ <%= container.description %><br />
11
+ <ul class="" data-scribbler-container-id="<%= container.id %>">
12
+ <% container.ordered_groups.each do |group| %>
13
+ <li><%= link_to_unless_current group.human_name, {:action => "group_edit", :id => group.id} %></li>
9
14
  <% end %>
10
15
  </ul>
11
16
  </li>
@@ -1,46 +1,54 @@
1
+ <% element_ids = [] %>
1
2
  <%= scribbler_layout do %>
2
3
 
3
- <p>
4
- Element in <i>'<%= @group.container.description %>'</i>
5
- <% if @group.container.element %>
6
- auf Seite <i>'<%= @group.container.element.page.name %>'</i>
7
- <% end %>
8
- </p>
9
-
10
- <%= form_for @group, :url => scribbler.url_for({:action => "group_update", :id => @group.id}), :html => {:class => "section", :method => :post} do |f| %>
11
- <table style="min-width: 940px;" cellspacing="5">
4
+ <%= form_for @group, :url => {:action => "group_update", :id => @group.id}, :html => {:class => "section", :method => :post} do |f| %>
5
+ <table id="scribbler-group-edit-table" cellspacing="5">
6
+ <% if !controller.hide_scribbler_edit_status %>
12
7
  <tr>
13
8
  <td>
14
9
  <b><%= link_to_function("Aktueller Zustand", "toggleCol('released')") %></b><br />
15
10
  <i>Klicken um Bereich ein- bzw auszublenden</i>
16
11
  </td>
12
+
17
13
  <td>
18
14
  <b><%= link_to_function("In Bearbeitung", "toggleCol('unreleased')") %></b><br />
19
15
  <i>Klicken um Bereich ein- bzw auszublenden</i>
20
16
  </td>
21
17
  </tr>
18
+ <% end %>
19
+
22
20
  <tr>
23
21
  <td id="released" class="">
24
22
  <%= f.fields_for :released do |u| %>
25
23
  <% @group.released_elements.each do |e| %>
26
- <div style="margin-bottom: 5px;"><%= scribbler_form_element(e,u) %></div>
27
- <% end %>
28
- <% end %>
29
- </td>
30
- <td id="unreleased" class="">
31
- <%= f.fields_for :unreleased do |u| %>
32
- <% @group.unreleased_elements.each do |e| %>
33
- <div style="margin-bottom: 5px;"><%= scribbler_form_element(e,u) %></div>
24
+ <div class="scribbler-element scribbler-<%= e.element_type %>" style="<%= 'background-color: #ffffdc;' if params[:active].to_i == e.id %> padding: 5px;">
25
+ <h3 class="scribbler-header"><%= e.human_name %></h3>
26
+ <% unless e.hint.blank? %>
27
+ <p class="scribbler-element-hint"><%= raw(e.hint) %></p>
28
+ <% end %>
29
+ <% element_ids << e.id %>
30
+ <div style="margin-bottom: 5px;"><%= scribbler_form_element(e,u) %></div>
31
+ </div>
34
32
  <% end %>
35
33
  <% end %>
36
34
  </td>
35
+ <% if !controller.hide_scribbler_edit_status %>
36
+ <td id="unreleased" class="">
37
+ <%= f.fields_for :unreleased do |u| %>
38
+ <% @group.unreleased_elements.each do |e| %>
39
+ <h3 class="scribbler-header"><%= e.human_name %></h3>
40
+ <div style="margin-bottom: 5px;"><%= scribbler_form_element(e,u) %></div>
41
+ <% end %>
42
+ <% end %>
43
+ </td>
44
+ <% end %>
37
45
  </tr>
38
46
  </table>
39
47
 
40
48
  <%= f.submit "Änderungen speichern" %>
41
49
 
42
50
  <% if @group.container.scaleable %>
43
- <%= link_to "Dieses Element löschen", scribbler.url_for({:action => "group_destroy", :id => @group.id}),
51
+ <%= link_to "Dieses Element löschen", {:action => "group_destroy", :id => @group.id},
44
52
  :confirm => "Soll dieses Element gelöscht werden? Dies kann nicht rückgängig gemacht werden.", :class => "icon-minus" %>
45
53
  <% end %>
46
54
 
@@ -48,21 +56,12 @@
48
56
 
49
57
  <% end %>
50
58
 
51
- <%= tinymce %>
52
-
53
59
  <script type="text/javascript">
54
-
55
- toggleCol = function(name){
56
- col = $("#"+name)
57
- if(col.hasClass("col-visible")){
58
- $("#"+name+" *").hide();
59
- col.removeClass("col-visible")
60
- }else{
61
- $("#"+name+" *").show();
62
- col.addClass("col-visible")
63
- }
64
- }
65
-
66
- toggleCol('released')
60
+ f = "Alchemy.Tinymce.init(<%= element_ids %>)"
61
+ window.setTimeout(f, 250)
67
62
  </script>
68
63
 
64
+
65
+
66
+
67
+
@@ -1,3 +1,4 @@
1
+
1
2
  <%= scribbler_layout do %>
2
- <h2>Inhalte verwalten</h2>
3
+
3
4
  <% end %>
@@ -0,0 +1,20 @@
1
+ <%= scribbler_layout do %>
2
+ <h1>Suchergebnisse für '<%= params[:scribbler][:query] %>'</h1>
3
+
4
+ <table class="list">
5
+ <% @items.each do |item| %>
6
+ <tr>
7
+ <td>
8
+ <%= link_to :action => "group_edit", :id => item.group.id, :active => item.id do %>
9
+ <h2> <b><%= item.human_name %></b> - <%= item.group.human_name %></h2>
10
+ <% end %>
11
+
12
+
13
+ <%= item.content.to_s.html_safe %>
14
+ </td>
15
+ </tr>
16
+ <% end %>
17
+ </table>
18
+
19
+
20
+ <% end %>
@@ -1,23 +1,15 @@
1
1
  <%= f.fields_for "#{element.element_type}_#{element.id}" do |e| %>
2
-
3
-
4
-
5
- <%= e.label :image, "Bilddatei" %><br />
6
- <%= e.file_field :image %>
7
-
8
-
9
- <p>Klicken Sie auf das Bild um die Abmessungen anzupassen</p>
10
- <%= link_to image_tag(element.image.url(:default), :width => "100%"), {:action => "image_cropper", :id => element.id} %>
11
-
2
+ <div class="image-container">
3
+ <%= image_tag element.image.url if element.image_stored? %>
4
+ <%= e.label :image, "Bilddatei" %> <div class="input"><%= e.file_field :image %></div>
5
+ </div>
12
6
  <div style="margin-bottom: 5px;">
13
- <%= e.label :copyright, "Copyright" %><br />
14
- <%= e.text_field :copyright, :value => element.copyright %>
7
+ <%= e.label :copyright, "Copyright" %> <div class="input"><%= e.text_field :copyright, :value => element.copyright %></div>
15
8
  </div>
16
9
 
17
10
  <div style="margin-bottom: 5px;">
18
- <%= e.label :alt_text, "ALT-Attribut" %><br />
19
- <%= e.text_field :alt_text, :value => element.alt_text %>
20
- </div>
11
+ <%= e.label :alt_text, "ALT-Attribut" %> <div class="input"><%= e.text_field :alt_text, :value => element.alt_text %></div>
12
+ </div>
21
13
 
22
14
  <%= e.hidden_field :type, :value => element.element_type %>
23
15
  <%= e.hidden_field :id, :value => element.id %>
@@ -1,5 +1,4 @@
1
1
  <%= f.fields_for "#{element.element_type}_#{element.id}" do |e| %>
2
- <%= e.label :content, element.name %><br />
3
2
  <%= e.text_field :content, :value => element.content %>
4
3
  <%= e.hidden_field :type, :value => element.element_type %>
5
4
  <%= e.hidden_field :id, :value => element.id %>
@@ -1,6 +1,5 @@
1
1
  <%= f.fields_for "#{element.element_type}_#{element.id}" do |e| %>
2
- <%= e.label :content, element.name %>
3
- <%= e.text_area :content, :class => "tinymce", :value => element.content %>
2
+ <%= e.text_area :content, :class => ScribbleCms.tiny_mce_css, :id => "tinymce_#{element.id}", :value => element.content %>
4
3
  <br />
5
4
  <%= e.hidden_field :type, :value => element.element_type %>
6
5
  <%= e.hidden_field :id, :value => element.id %>
data/config/routes.rb CHANGED
@@ -1,15 +1,6 @@
1
- ScribbleCms::Engine.routes.draw do
2
-
3
- %w( container_edit container_add_item group_edit group_destroy image_cropper).each do |a|
4
- get "/scribbler_admin/#{a}/(:id)", :controller => "scribbler_admin", :action => a
5
- end
6
-
7
- get "/scribbler_admin", :controller => "scribbler_admin", :action => "index", :as => :scribbler_admin
8
-
9
- %w(container_update group_update crop_image).each do |a|
10
- post "/scribbler_admin/#{a}/(:id)", :controller => "scribbler_admin", :action => a
11
- end
1
+ Scribbler::Engine.routes.draw do
12
2
 
3
+ get "/s/static/pictures/:job/:name.:format" => "scribbler_pictures#show"
13
4
 
14
5
 
15
6
  end
@@ -2,7 +2,6 @@ class CreateScribblers < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :scribbler_containers, :force => true do |t|
4
4
  t.string :name
5
- t.string :description
6
5
  t.boolean :scaleable, :default => false
7
6
  t.integer :element_id
8
7
  t.timestamps
@@ -34,6 +33,15 @@ class CreateScribblers < ActiveRecord::Migration
34
33
  t.timestamps
35
34
  end
36
35
 
36
+ create_table :scribbler_vars, :force => true do |t|
37
+ t.string :name
38
+ t.text :content
39
+ t.string :var_type
40
+ t.integer :group_id
41
+ t.boolean :released, :default => false
42
+ t.timestamps
43
+ end
44
+
37
45
  create_table :scribbler_images, :force => true do |t|
38
46
  t.string :name
39
47
  t.string :group_id
@@ -41,7 +49,8 @@ class CreateScribblers < ActiveRecord::Migration
41
49
  t.string :copyright
42
50
  t.string :alt_text
43
51
  t.string :opt_size, :default => "128x128"
44
- t.attachment :image
52
+ t.string :image_uid
53
+ t.string :image_name
45
54
  t.timestamps
46
55
  end
47
56
  end
@@ -1,6 +1,20 @@
1
- module ScribbleCms
1
+ module Scribbler
2
2
  class Engine < Rails::Engine
3
- engine_name "scribble_cms"
3
+
4
+ engine_name 'scribbler'
5
+
6
+ initializer "dragonfly.scribbler" do
7
+
8
+ # Pictures
9
+ Dragonfly.app(:scribbler).configure do
10
+ plugin :imagemagick
11
+ datastore :file, root_path: Rails.root.join('public/system/uploads/scribbler').to_s, store_meta: false
12
+ url_format "/s/static/pictures/:job/:name.:format"
13
+ secret Digest::SHA1.hexdigest(Rails.root.to_s)
14
+ end
15
+
16
+
17
+ end
4
18
 
5
19
  end
6
20
  end
@@ -0,0 +1,115 @@
1
+ module ScribbleCms
2
+ module ScribblerControllerPlugin
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def scribbler_cms_controller(options = {})
11
+
12
+ self.send(:include, InstanceMethods)
13
+ self.send :before_filter, :get_container, :only => %w(container_edit container_update container_add_item)
14
+ self.send :before_filter, :get_group, :only => %w(group_edit group_update group_destroy)
15
+ self.cattr_accessor :hide_scribbler_edit_status
16
+
17
+ self.hide_scribbler_edit_status = (options[:hide_scribbler_edit_status] == true)
18
+ end
19
+
20
+ end
21
+
22
+
23
+ module InstanceMethods
24
+
25
+
26
+
27
+
28
+ def index
29
+ @containers = ScribblerContainer.all
30
+ render "/scribbler_admin/index"
31
+ end
32
+
33
+ # Containers
34
+ def container_edit
35
+ render "/scribbler_admin/container_edit"
36
+ end
37
+
38
+ def container_update
39
+ @container.update_attributes(container_params)
40
+ flash[:notice] = "Container #{@container.name} was saved"
41
+ redirect_to :action => "index"
42
+ end
43
+
44
+ def container_add_item
45
+ @container.get_group("#{@container.id}-#{Time.now.to_i}")
46
+ flash[:notice] = "Neues Element für #{@container.name} wurde angelegt"
47
+ redirect_to :back
48
+ end
49
+
50
+ def search
51
+ @containers = ScribblerContainer.all
52
+ @items = ScribblerText.find_by_tags(params[:scribbler][:query])
53
+ render "/scribbler_admin/search"
54
+ end
55
+
56
+
57
+ # Groups
58
+ def group_edit
59
+ @containers = ScribblerContainer.all
60
+ render "/scribbler_admin/group_edit"
61
+ end
62
+
63
+ def group_update
64
+ @group.process_group_data(params.require(:scribbler_group).permit!)
65
+ flash[:notice] = "Änderungen wurden gespeichert"
66
+ redirect_to :back
67
+ end
68
+
69
+ def group_destroy
70
+ @group.destroy
71
+ flash[:notice] = "Daten wurden gelöscht"
72
+ redirect_to :action => "index"
73
+ end
74
+
75
+ # images
76
+ def image_cropper
77
+ @element = ScribblerImage.find(params[:id])
78
+ end
79
+
80
+ def crop_image
81
+ @element = ScribblerImage.find(params[:id])
82
+ @element.update_attributes(image_params)
83
+ @element.image.reprocess!
84
+ redirect_to :action => "group_edit", :id => @element.group_id
85
+ end
86
+
87
+
88
+ def picture
89
+
90
+ end
91
+
92
+
93
+ # Private - permit parameters
94
+ private
95
+
96
+ def get_container
97
+ @container = ScribblerContainer.find(params[:id])
98
+ end
99
+
100
+ def get_group
101
+ @group = ScribblerGroup.find(params[:id])
102
+ end
103
+
104
+ def container_params
105
+ params.require(:scribbler_container).permit(:description)
106
+ end
107
+
108
+ def image_params
109
+ params.require(:scribbler_image).permit(:crop_x, :crop_y, :crop_w, :crop_h)
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+ end
@@ -1,29 +1,59 @@
1
1
  module ScribbleCms
2
2
  module ScribblerElementSetup
3
-
3
+
4
4
  def self.included(base)
5
5
  base.send(:belongs_to, :group, :class_name => "ScribblerGroup", :foreign_key => "group_id", :touch => true)
6
6
  base.send(:validates_presence_of, :group_id)
7
7
  base.send(:before_save, :check_uniqueness)
8
+ base.send(:smart_search, :on => [
9
+ {:field_name => :human_name, :boost => 0.7}, {:field_name => "group.human_name", :boost => 0.5}, {:field_name => :searchable_content, :boost => 1}
10
+ ],
11
+ :conditions => "released = 1"
12
+ )
13
+
8
14
  end
9
-
10
-
15
+
16
+
11
17
  def check_uniqueness
12
18
  items = self.class.where(:name => self.name, :group_id => self.group_id, :released => self.released)
13
19
  items.empty? || items.size == 1
14
- end
15
-
20
+ end
21
+
16
22
  def element_type
17
23
  if self.is_a?(ScribblerLink)
18
24
  return :link
19
25
  elsif self.is_a?(ScribblerText) && self.plain
20
26
  return :row
21
- elsif self.is_a?(ScribblerText) && !self.plain
27
+ elsif self.is_a?(ScribblerText) && !self.plain
22
28
  return :text
23
- elsif self.is_a?(ScribblerImage)
29
+ elsif self.is_a?(ScribblerImage)
24
30
  return :image
25
- end
26
- end
27
-
31
+ elsif self.is_a?(ScribblerVar)
32
+ return :var
33
+ end
34
+ end
35
+
36
+ def searchable_content
37
+ case self.element_type
38
+ when :link
39
+ return [name, url, title]
40
+ when :row
41
+ return content
42
+ when :text
43
+ return content
44
+ when :image
45
+ when :var
46
+ end
47
+ end
48
+
49
+ def human_name
50
+ I18n.t(self.name, :scope => "scribbler.element_names.#{self.group.name}", :default => self.name.to_s.humanize)
51
+ end
52
+
53
+ def hint
54
+ h = I18n.t(self.name, :scope => "scribbler.element_hints.#{self.group.name}", :default => "")
55
+ h.is_a?(Array) ? h.join("") : h
56
+ end
57
+
28
58
  end
29
- end
59
+ end
data/lib/scribble_cms.rb CHANGED
@@ -1,5 +1,26 @@
1
+ require "scribble_cms/engine"
2
+ require 'scribble_cms/scribbler_controller_plugin'
3
+ require 'scribble_cms/scribbler_element_setup'
4
+ require 'dragonfly'
5
+ require "smart_search"
6
+
1
7
  module ScribbleCms
2
- end
8
+ mattr_accessor :tiny_mce_css, :tiny_mce_js
9
+
10
+ self.tiny_mce_css = "default_tinymce"
11
+ self.tiny_mce_js = "Alchemy.Tinymce.initAll();"
12
+ end
13
+
14
+ ActionController::Base.send(:include, ScribbleCms::ScribblerControllerPlugin)
3
15
 
4
- require 'scribble_cms/engine'
5
- require 'scribble_cms/scribbler_element_setup'
16
+ String.class_eval do
17
+
18
+ def replace_scribbler_vars(vars = {})
19
+ r = self
20
+ vars.each do |var_name, var_content|
21
+ r = r.gsub("*#{var_name}*", var_content.to_s)
22
+ end
23
+ return r
24
+ end
25
+
26
+ end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scribble_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14a
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Eck
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-02 00:00:00.000000000 Z
11
+ date: 2016-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: friendly_extensions
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.66
19
+ version: '0.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.66
26
+ version: '0.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: paperclip
28
+ name: dragonfly
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.1.0
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 2.1.0
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: smart_search
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.78
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.78
41
55
  description: Easy-to-use tool for placing user-editable content in your pages
42
56
  email:
43
57
  - it-support@friends-systems.de
@@ -50,7 +64,7 @@ files:
50
64
  - app/assets/stylesheets/ext/jquery.Jcrop.css
51
65
  - app/assets/stylesheets/scribbler.css.erb
52
66
  - app/assets/stylesheets/scribbler_layout.css.erb
53
- - app/controllers/scribbler_admin_controller.rb
67
+ - app/controller/scribbler_pictures_controller.rb
54
68
  - app/helpers/scribbler_admin_helper.rb
55
69
  - app/helpers/scribbler_content_helper.rb
56
70
  - app/models/scribbler_container.rb
@@ -58,21 +72,23 @@ files:
58
72
  - app/models/scribbler_image.rb
59
73
  - app/models/scribbler_link.rb
60
74
  - app/models/scribbler_text.rb
75
+ - app/models/scribbler_var.rb
61
76
  - app/views/scribbler_admin/_scribbler_layout.html.erb
62
77
  - app/views/scribbler_admin/_scribbler_sidebar.html.erb
63
78
  - app/views/scribbler_admin/container_edit.html.erb
64
79
  - app/views/scribbler_admin/group_edit.html.erb
65
80
  - app/views/scribbler_admin/image_cropper.html.erb
66
81
  - app/views/scribbler_admin/index.html.erb
82
+ - app/views/scribbler_admin/search.html.erb
67
83
  - app/views/scribbler_content/forms/_image.html.erb
68
84
  - app/views/scribbler_content/forms/_link.html.erb
69
85
  - app/views/scribbler_content/forms/_row.html.erb
70
86
  - app/views/scribbler_content/forms/_text.html.erb
71
87
  - config/routes.rb
72
88
  - db/migrate/20140313012637_create_scribblers.rb
73
- - lib/paperclip_processors/cropper.rb
74
89
  - lib/scribble_cms.rb
75
90
  - lib/scribble_cms/engine.rb
91
+ - lib/scribble_cms/scribbler_controller_plugin.rb
76
92
  - lib/scribble_cms/scribbler_element_setup.rb
77
93
  homepage: http://www.friends-systems.de
78
94
  licenses: []
@@ -88,12 +104,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
104
  version: '0'
89
105
  required_rubygems_version: !ruby/object:Gem::Requirement
90
106
  requirements:
91
- - - ">"
107
+ - - ">="
92
108
  - !ruby/object:Gem::Version
93
- version: 1.3.1
109
+ version: '0'
94
110
  requirements: []
95
111
  rubyforge_project:
96
- rubygems_version: 2.2.1
112
+ rubygems_version: 2.4.6
97
113
  signing_key:
98
114
  specification_version: 4
99
115
  summary: Easy-to-use tool for placing user-editable content in your pages
@@ -1,77 +0,0 @@
1
- class ScribblerAdminController < ApplicationController
2
-
3
- before_filter :get_container, :only => %w(container_edit container_update container_add_item )
4
- before_filter :get_group, :only => %w(group_edit group_update group_destroy)
5
-
6
-
7
- def index
8
- @containers = ScribblerContainer.all
9
- end
10
-
11
- # Containers
12
- def container_edit
13
- end
14
-
15
- def container_update
16
- @container.update_attributes(container_params)
17
- flash[:notice] = "Container #{@container.name} was saved"
18
- redirect_to :action => "index"
19
- end
20
-
21
- def container_add_item
22
- @container.get_group("#{@container.id}-#{Time.now.to_i}")
23
- flash[:notice] = "Neues Element für #{@container.name} wurde angelegt"
24
- redirect_to :back
25
- end
26
-
27
-
28
-
29
-
30
- # Groups
31
- def group_edit
32
- render :layout => false
33
- end
34
-
35
- def group_update
36
- @group.process_group_data(params[:scribbler_group])
37
- flash[:notice] = "Änderungen wurden gespeichert"
38
- redirect_to :back
39
- end
40
-
41
- def group_destroy
42
- @group.destroy
43
- flash[:notice] = "Daten wurden gelöscht"
44
- redirect_to :action => "index"
45
- end
46
-
47
- # images
48
- def image_cropper
49
- @element = ScribblerImage.find(params[:id])
50
- end
51
-
52
- def crop_image
53
- @element = ScribblerImage.find(params[:id])
54
- @element.update_attributes(image_params)
55
- @element.image.reprocess!
56
- redirect_to :action => "group_edit", :id => @element.group_id
57
- end
58
-
59
- # Private - permit parameters
60
- private
61
-
62
- def get_container
63
- @container = ScribblerContainer.find(params[:id])
64
- end
65
-
66
- def get_group
67
- @group = ScribblerGroup.find(params[:id])
68
- end
69
-
70
- def container_params
71
- params.require(:scribbler_container).permit(:description)
72
- end
73
-
74
- def image_params
75
- params.require(:scribbler_image).permit(:crop_x, :crop_y, :crop_w, :crop_h)
76
- end
77
- end
@@ -1,23 +0,0 @@
1
- module Paperclip
2
- class Cropper < Thumbnail
3
- def transformation_command
4
- if crop_command
5
- crop_command
6
- else
7
- super
8
- end
9
- end
10
-
11
- def crop_command
12
- target = @attachment.instance
13
- puts "try Croppper"
14
- if target.cropping?
15
- puts "cropper!"
16
- cmd = [" -crop '#{target.crop_w.to_i}x#{target.crop_h.to_i}+#{target.crop_x.to_i}+#{target.crop_y.to_i}'"]
17
- cmd << "-auto-orient"
18
- cmd << "-resize #{target.opt_image_width}x#{target.opt_image_height}"
19
- end
20
- end
21
- end
22
- end
23
-