redditor 0.1.10 → 0.1.11

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 (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
- */