redditor 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/Gemfile +2 -1
  4. data/README.md +17 -3
  5. data/app/assets/images/redditor/big/image.png +0 -0
  6. data/app/assets/images/redditor/big/slider.png +0 -0
  7. data/app/assets/images/redditor/big/text.png +0 -0
  8. data/app/assets/images/redditor/big/video.png +0 -0
  9. data/app/assets/javascripts/redditor/init.coffee +149 -0
  10. data/app/assets/javascripts/{fileapi → redditor}/uploader.coffee +18 -18
  11. data/app/assets/javascripts/redditor.js.coffee +3 -0
  12. data/app/assets/stylesheets/{redditor/redditor.css.scss → redditor.scss} +70 -24
  13. data/app/controllers/redditor/admin/image_blocks_controller.rb +4 -4
  14. data/app/controllers/redditor/admin/images_controller.rb +1 -1
  15. data/app/controllers/redditor/admin/slider_blocks_controller.rb +3 -3
  16. data/app/controllers/redditor/admin/text_blocks_controller.rb +3 -3
  17. data/app/controllers/redditor/admin/video_blocks_controller.rb +3 -3
  18. data/app/helpers/redditor/application_helper.rb +7 -0
  19. data/app/views/redditor/admin/_content_block.haml +35 -0
  20. data/app/views/redditor/admin/{pages/_image.haml → _image.haml} +5 -5
  21. data/app/views/redditor/admin/{pages/_page.haml → _page.haml} +2 -3
  22. data/app/views/redditor/admin/_slider_block.haml +16 -0
  23. data/app/views/redditor/admin/{pages/_slider_block_image.haml → _slider_block_image.haml} +0 -0
  24. data/app/views/redditor/admin/_text_block.haml +5 -0
  25. data/app/views/redditor/admin/{pages/_validate.haml → _validate.haml} +1 -1
  26. data/app/views/redditor/admin/{pages/_video_block.haml → _video_block.haml} +2 -2
  27. data/app/views/redditor/admin/_wrapper.haml +3 -0
  28. data/app/views/redditor/admin/new.js.erb +5 -0
  29. data/app/views/redditor/admin/slider_block_image.js.coffee +2 -0
  30. data/app/views/redditor/admin/wrapper.js.coffee +5 -0
  31. data/app/views/redditor/images/_image.html.haml +1 -1
  32. data/app/views/redditor/slider_blocks/_slider_block_image.html.haml +1 -1
  33. data/config/locales/redditor.ru.yml +1 -1
  34. data/lib/redditor/engine.rb +1 -2
  35. data/lib/redditor/version.rb +1 -1
  36. data/redditor.gemspec +2 -9
  37. data/spec/dummy/app/assets/images/redactor/icons.png +0 -0
  38. data/spec/dummy/app/assets/images/redactor/plugins/file.html +3 -0
  39. data/spec/dummy/app/assets/images/redactor/plugins/image.html +39 -0
  40. data/spec/dummy/app/assets/images/redactor/plugins/image_edit.html +35 -0
  41. data/spec/dummy/app/assets/images/redactor/plugins/link.html +74 -0
  42. data/spec/dummy/app/assets/images/redactor/plugins/table.html +25 -0
  43. data/spec/dummy/app/assets/images/redactor/plugins/video.html +15 -0
  44. data/spec/dummy/app/assets/javascripts/application.js +10 -2
  45. data/spec/dummy/app/assets/javascripts/jquery-migrate-1.2.1.js +521 -0
  46. data/spec/dummy/app/assets/javascripts/redactor/langs/en.js +76 -0
  47. data/spec/dummy/app/assets/javascripts/redactor/langs/ru.js +75 -0
  48. data/spec/dummy/app/assets/javascripts/redactor/redactor.js.erb +2248 -0
  49. data/spec/dummy/app/assets/javascripts/redactor/toolbars/default.js +219 -0
  50. data/{app/assets/stylesheets/redditor → spec/dummy/app/assets/stylesheets}/application.css.scss +3 -8
  51. data/spec/dummy/app/assets/stylesheets/redactor/redactor.css.scss +369 -0
  52. data/spec/dummy/app/assets/stylesheets/redactor/wym.css +136 -0
  53. data/spec/dummy/app/controllers/articles_controller.rb +9 -0
  54. data/spec/dummy/app/views/admin/articles/edit.html.haml +1 -1
  55. data/spec/dummy/app/views/articles/show.html.haml +1 -1
  56. data/spec/dummy/app/views/layouts/application.html.erb +1 -1
  57. data/spec/features/text_spec.rb +3 -3
  58. data/spec/generators/views_generator_spec.rb +1 -1
  59. metadata +57 -114
  60. data/app/assets/javascripts/jquery-ui.min.js +0 -12
  61. data/app/assets/javascripts/redditor/application.js +0 -14
  62. data/app/assets/javascripts/redditor/redditor.coffee +0 -151
  63. data/app/helpers/redditor/fileapi_helper.rb +0 -17
  64. data/app/helpers/redditor/pages_helper.rb +0 -24
  65. data/app/models/redditor/content_block.rb +0 -24
  66. data/app/views/redditor/admin/pages/_content_block.haml +0 -37
  67. data/app/views/redditor/admin/pages/_slider_block.haml +0 -16
  68. data/app/views/redditor/admin/pages/_text_block.haml +0 -5
  69. data/app/views/redditor/admin/pages/_wrap_dd.haml +0 -1
  70. data/app/views/redditor/admin/pages/_wrapper.haml +0 -3
  71. data/app/views/redditor/admin/pages/new.js.coffee +0 -7
  72. data/app/views/redditor/admin/pages/new.js.erb +0 -7
  73. data/app/views/redditor/admin/pages/slider_block_image.js.coffee +0 -2
  74. data/app/views/redditor/admin/pages/wrapper.js.coffee +0 -6
  75. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
@@ -1,14 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file.
9
- //
10
- // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
13
- //= require jquery-ui.min.js
14
- //= require redditor/redditor
@@ -1,151 +0,0 @@
1
- #= require fileapi
2
- #= require fileapi/uploader
3
-
4
- window.REDDE = {redditor: {}}
5
- REDDE.redditor.sliderBlockImagesSortableParams =
6
- scroll: false
7
- dropOnEmpty: false
8
- cursor: "crosshair"
9
- opacity: 0.75
10
- items: "li"
11
- update: ->
12
- self = $(@)
13
- $.ajax
14
- data: self.sortable('serialize') + '&authenticity_token=#{u(form_authenticity_token)}'
15
- dataType: 'script'
16
- url: self.data("sortable-url")
17
- .done ->
18
- # console.log
19
- return
20
- .error ->
21
- alert "Ошибка, данные не сохранены"
22
-
23
- REDDE.redditor.parameterizationForm = (box) ->
24
- form = box.serializeForm()
25
- formName = box.find("div.form-name").data("object-name")
26
- firstProperty = formName.replace(/^(.*?)\[.*/,"$1")
27
- nextProperties = formName.match(/\[(.*?)\]/g)
28
- nextProperties = $.map nextProperties, (n)->
29
- n.replace(/\[(.*)\]/,"$1")
30
- params = form[firstProperty]
31
- for i in nextProperties
32
- params = params[i]
33
- params = "content_block": params
34
-
35
-
36
- REDDE.redditor.setPositions = ->
37
- $el = REDDE.redditor.$el
38
- $el.find($el.sortable("option", "items")).each (i) ->
39
- $(@).find("input.redditor__position").val i
40
-
41
- REDDE.redditor.sortList = ->
42
- sortArray = $.map REDDE.redditor.$el.find("dd"), (n) ->
43
- key = $(n).attr("class")
44
- input = $(n).find("input[type=hidden][name='#{$(n).find("div.form-name").data("object-name")}[id]']")
45
- value = input.val()
46
- # console.log input, value
47
- if value?
48
- obj = {}
49
- obj[key] =
50
- index: value
51
- position: $(n).index()
52
- obj
53
- else
54
- null
55
-
56
- # console.log sortArray
57
-
58
- if sortArray.length
59
- $.ajax
60
- type: "post"
61
- # data: self.sortable('serialize') + '&authenticity_token=<%= u(form_authenticity_token) %>',
62
- data: {sort: sortArray}
63
- dataType: "script"
64
- url: REDDE.redditor.$el.data("sort-url")
65
- .done(REDDE.redditor.setPositions)
66
- else
67
- REDDE.redditor.setPositions()
68
-
69
- $ ->
70
- REDDE.redditor.$el = $("dl.redditor").first()
71
-
72
- $(".add_fields").click ->
73
- time = new Date().getTime()
74
- regexp = new RegExp($(this).data("id"), "g")
75
- self = REDDE.redditor.$el.append($(this).data("fields").replace(regexp, time))
76
- REDDE.redditor.setPositions()
77
-
78
- REDDE.redditor.$el.sortable
79
- dropOnEmpty: false
80
- cursor: "crosshair"
81
- opacity: 0.75
82
- handle: ".handle"
83
- axis: "y"
84
- items: "dd"
85
- scroll: false
86
- update: REDDE.redditor.sortList
87
- start: ->
88
- # необходимо обновить, чтобы сортировака работала корректно, тк меняем высоту блоков
89
- $(@).addClass("now-sortable").sortable( "refresh" )
90
- return
91
- stop: ->
92
- $(@).removeClass("now-sortable")
93
- return
94
-
95
- .on "ajax:beforeSend", "a.redditor__update", (event, xhr, status) ->
96
- box = $(@).closest "dd"
97
- params = REDDE.redditor.parameterizationForm(box)
98
- status.url += "?" + $.param(params)
99
-
100
- $("ul.slider-block-images").sortable REDDE.redditor.sliderBlockImagesSortableParams
101
-
102
- $('div.redditor__add-blocks').on "ajax:beforeSend", "a.redditor__add", (event, xhr, status) ->
103
- status.url += "?" + $.param(content_block: {temp_id: new Date().getTime()}) # generate uniq id
104
-
105
- #! jquery-serializeForm - Make an object out of form elements - v1.1.1 - 2013-01-21
106
- #* https://github.com/danheberden/jquery-serializeForm
107
- #* Copyright (c) 2013 Dan Heberden; Licensed MIT
108
- (($) ->
109
- $.fn.serializeForm = ->
110
-
111
- # don't do anything if we didn't get any elements
112
- return false if @length < 1
113
- data = {}
114
- lookup = data #current reference of data
115
- selector = ":input[type!=\"checkbox\"][type!=\"radio\"], input:checked"
116
- parse = ->
117
-
118
- # data[a][b] becomes [ data, a, b ]
119
- named = @name.replace(/\[([^\]]+)?\]/g, ",$1").split(",")
120
- cap = named.length - 1
121
- $el = $(this)
122
-
123
- # Ensure that only elements with valid `name` properties will be serialized
124
- if named[0]
125
- i = 0
126
-
127
- while i < cap
128
-
129
- # move down the tree - create objects or array if necessary
130
- lookup = lookup[named[i]] = lookup[named[i]] or ((if named[i + 1] is "" then [] else {}))
131
- i++
132
-
133
- # at the end, push or assign the value
134
- if lookup.length isnt `undefined`
135
- lookup.push $el.val()
136
- else
137
- lookup[named[cap]] = $el.val()
138
-
139
- # assign the reference back to root
140
- lookup = data
141
-
142
-
143
- # first, check for elements passed into this function
144
- @filter(selector).each parse
145
-
146
- # then parse possible child elements
147
- @find(selector).each parse
148
-
149
- # return data
150
- data
151
- ) jQuery
@@ -1,17 +0,0 @@
1
- #coding: utf-8
2
- module Redditor
3
- module FileapiHelper
4
-
5
- def fileapi url=nil
6
- html = stylesheet_link_tag "redditor/fileapi/fileapi"
7
- html += javascript_include_tag "redditor/fileapi/mailru"
8
- if url.present?
9
- html += javascript_tag do
10
- %Q{FU.config.uploadUrl = "#{url}"}.html_safe
11
- end
12
- end
13
- content_for(:js, html)
14
- end
15
-
16
- end
17
- end
@@ -1,24 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Redditor
4
- module PagesHelper
5
- def button_tag_add_fields(name, f, association)
6
- new_object = f.object.send(association).klass.new
7
- id = new_object.object_id
8
- fields = f.fields_for(association, new_object, child_index: id) do |builder|
9
- content_tag(:dd, :id => "#{association.to_s.singularize}_#{id}") do
10
- tag(:div, class: "handle") +
11
- link_to("Удалить", "javascript:void(0);", onclick: "if (confirm('dfasdsa')) $(this).closest('dd').remove();") + "\s" +
12
- link_to("Обновить", [:admin, @article.page, association], method: "post", class: "redditor__update", remote: true, data: {disable_with: "Обновляется"}) + "\s" +
13
- render("admin/pages/" + association.to_s.singularize, f: builder)
14
- end
15
- end
16
-
17
- button_tag(name, class: "add_fields", type: "button", data: {id: id, fields: fields.gsub("\n", "")})
18
- end
19
-
20
- def redditor_validate f
21
- render "redditor/admin/pages/validate", {f: f}
22
- end
23
- end
24
- end
@@ -1,24 +0,0 @@
1
- # coding: utf-8
2
- module Redditor
3
- class ContentBlock < ActiveRecord::Base
4
-
5
- def self.find_by_position_and_type(position, type, page_id)
6
- type.to_s.sub("s_attributes", "").camelcase.constantize.where(page_id: page_id, position: position).first
7
- end
8
-
9
- def self.init_by_type(type, params)
10
- res = type.to_s.sub("s_attributes", "").camelcase.constantize.new(params)
11
- res.valid?
12
- res
13
- end
14
-
15
- def self.check_by_position_and_type position, type, page_id
16
- type.to_s.sub("s_attributes", "").camelcase.constantize.where(page_id: page_id, position: position).any?
17
- end
18
-
19
- # def self.model_name
20
- # ActiveModel::Name.new(self, nil, self.class.name.gsub("Redditor::", ''))
21
- # end
22
-
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- .handle
2
-
3
- - if content_block.new_record?
4
- .redditor__control
5
- = link_to "",
6
- "javascript:void(0);",
7
- class: "redditor__delete",
8
- onclick: "if (confirm('#{t "redditor.remove?"}')) $(this).closest('dd').remove();"
9
-
10
- = link_to "",
11
- [redditor, :admin, p.object, content_block],
12
- method: "post",
13
- class: "redditor__update",
14
- remote: true,
15
- data: {:disable_with => t("redditor.saving")}
16
-
17
- - else
18
- .redditor__control
19
- = link_to "",
20
- [redditor, :admin, p.object, content_block],
21
- class: "redditor__delete",
22
- :method => :delete,
23
- remote: true,
24
- data: {confirm: "Вы, действительно, хотите удалить контент-блок?", disable_with: t("redditor.deleting")}
25
-
26
- = link_to "",
27
- [redditor, :admin, p.object, content_block],
28
- class: "redditor__update",
29
- remote: true,
30
- method: "put",
31
- data: {disable_with: t("redditor.saving")}
32
-
33
- = p.fields_for content_block.class.name.underscore.sub('redditor/', '').pluralize.to_sym, content_block do |f|
34
- %div.form-name{data: {"object-name" => f.object.temp_id.present? ? f.object_name.sub!(/\[\d*\]/, "[#{f.object.temp_id}]") : f.object_name}, id: "#{content_block.class.name.underscore.sub(/\Aredditor\//, '')}_#{content_block.id.nil? ? f.object.temp_id : content_block.id}"}
35
- = f.text_field :position, class: 'redditor__position', hidden: true
36
- = render :partial => "redditor/admin/pages/#{content_block.class.name.underscore.sub('redditor/', '')}", locals: {f: f}
37
- = f.hidden_field :temp_id
@@ -1,16 +0,0 @@
1
- .tit-form
2
- = t 'redditor.title.slider'
3
- = image_tag 'redditor/add_slider_big.png'
4
- = redditor_validate f
5
- .condom{style: "margin:5px 0; height:1px; background:#ccc;"}
6
-
7
- - unless f.object.new_record?
8
- %ul.slider-block-images{data: {"sortable-url" => redditor.sort_admin_page_slider_block_images_path(f.object.page_id, f.object.id)}}
9
- = render partial: "redditor/admin/pages/slider_block_image", collection: f.object.images, :as => :i
10
-
11
- .condom{style: "margin:5px 0; height:1px; background:#ccc;"}
12
-
13
- - unless f.object.new_record?
14
- .b-button.js-fileapi-wrapper
15
- .b-button__text= t("redditor.add.upload_images")
16
- = file_field_tag :src, :class => "b-button__input js-fileapi", name: nil, :multiple => true, data: {"upload-url" => redditor.admin_page_slider_block_images_path(f.object.page_id, f.object.id)}
@@ -1,5 +0,0 @@
1
- .tit-form
2
- = t 'redditor.title.text'
3
- = image_tag 'redditor/add_txt_big.png'
4
- = redditor_validate f
5
- = f.text_area :body, size: "25x15", class: "text-block-input"
@@ -1 +0,0 @@
1
- %dd{class: content_block.class.name.underscore.sub('redditor/', '')}= yield
@@ -1,3 +0,0 @@
1
- = fields_for :article, @page.pageable do |a|
2
- = a.fields_for :page do |p|
3
- = render "redditor/admin/pages/content_block", {p: p, content_block: content_block, page: @page}
@@ -1,7 +0,0 @@
1
- REDDE.redditor.$el
2
- .append('<%= j(render(partial: "redditor/admin/pages/wrapper", layout: "redditor/admin/pages/wrap_dd", locals: {content_block: @content_block, page: @page})) %>')
3
- # .find("textarea:visible:not(.nowred)").redactor(reddactorSettings)
4
- .end()
5
- .find("ul.slider-block-images").sortable REDDE.redditor.sliderBlockImagesSortableParams
6
- REDDE.redditor.sortList()
7
- # selectLang(location.hash.replace("#",""))
@@ -1,7 +0,0 @@
1
- REDDE.redditor.$el
2
- .append('<%= j(render(partial: "redditor/admin/pages/wrapper", layout: "redditor/admin/pages/wrap_dd", locals: {content_block: @content_block, page: @page})) %>')
3
- // .find("textarea:visible:not(.nowred)").redactor(reddactorSettings)
4
- .end()
5
- .find("ul.slider-block-images").sortable(REDDE.redditor.sliderBlockImagesSortableParams)
6
- REDDE.redditor.sortList()
7
- // selectLang(location.hash.replace("#",""))
@@ -1,2 +0,0 @@
1
- $("#slider_block_<%= @slider_block.id %>").find("ul.slider-block-images")
2
- .append '<%= j(render "redditor/admin/pages/slider_block_image", {i: @image}) %>'
@@ -1,6 +0,0 @@
1
- $("#<%= @content_block.class.name.underscore.sub(/\Aredditor\//, '') %>_<%= @content_block.temp_id %>, #<%= @content_block.class.name.underscore.sub(/\Aredditor\//, '') %>_<%= @content_block.id %>").closest("dd")
2
- .html('<%= j(render(partial: "redditor/admin/pages/wrapper", locals: {content_block: @content_block, page: @page})) %>')
3
- # .find("textarea:visible:not(.nowred)").redactor(reddactorSettings)
4
- .end()
5
- .find("ul.slider-block-images").sortable REDDE.redditor.sliderBlockImagesSortableParams
6
- # selectLang(location.hash.replace("#",""))
@@ -1,13 +0,0 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
- * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the top of the
9
- * compiled file, but it's generally better to create a new file per style scope.
10
- *
11
- *= require_self
12
- *= require_tree .
13
- */