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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dea55399ec72c3758f76bcfa1c6affa14e795b1a
4
- data.tar.gz: f9714cee23292cb0d62eca3109054194954ca7d1
3
+ metadata.gz: 139b02b3e8c540a2cb91a7ef7a5aaef880eb7f81
4
+ data.tar.gz: c78cbabea39fcd0361f680b6712fc3fc53e759f4
5
5
  SHA512:
6
- metadata.gz: 9229d2406979e19c63d7ca55aa4069ec74068f04534ca55ee14f3690add41c1c4514dc10bda85ddecb0dbcec7ab65ce12482c2e33a1770d5cd605fe3abb4e0f3
7
- data.tar.gz: e8257ebbfdff12044041686809819f5b7735ec053a813033fb576e1a8f0990efba5071016e9b2f44b746d2e759c014d362d42ce651c8ea9187e5b9c0fb19adb9
6
+ metadata.gz: 1f9e0b332fbe9778f9ab172689d902f6ca8529b5d7a98dbe629addb70c668ff42ba1fe5694a687abeb30d6b07f41228d61f5c4465f0dd4095497568df6daf845
7
+ data.tar.gz: 1f3646c53074378ae8709972f0fc6dbc1705a8badbfc7d0703fa58f5ee157401f992fe42843876a2918a6a23a341f72f9b1af2695da02621f4adfff57d6ae5df
data/.gitignore CHANGED
@@ -23,5 +23,3 @@ tmp
23
23
  /spec/dummy/public/uploads
24
24
  /spec/dummy/log
25
25
  /spec/dummy/db/*sqlite3
26
-
27
- /spec/dummy/db/development.sqlite3
data/Gemfile CHANGED
@@ -7,8 +7,9 @@ gem 'haml-rails'
7
7
  gem 'haml'
8
8
  gem 'coffee-rails'
9
9
  gem 'jquery-rails'
10
+ gem 'jquery-ui-rails'
10
11
  gem 'sass-rails'
11
- gem 'fileapi', git: 'git@github.com:redde/fileapi.git'
12
+ gem 'fileapi', github: 'redde/fileapi'
12
13
 
13
14
  # Declare your gem's dependencies in redditor.gemspec.
14
15
  # Bundler will treat runtime dependencies like base dependencies, and
data/README.md CHANGED
@@ -17,12 +17,23 @@ todo: проверить вариант загрузки через fileapi c п
17
17
 
18
18
  Add gem to your Gemfile
19
19
 
20
+ gem 'fileapi'
20
21
  gem 'redditor'
21
22
 
23
+ or
24
+
25
+ gem 'fileapi', :github => 'redde/fileapi'
26
+ gem 'redditor', :github => 'redde/redditor'
27
+
22
28
  and
23
29
 
24
30
  bundle
25
31
 
32
+ ### TODO:
33
+ add **fileapi** to automation dependencies
34
+
35
+
36
+
26
37
  Then generate migrations
27
38
 
28
39
  bundle exec rake redditor:install:migrations
@@ -37,7 +48,7 @@ Add this to model
37
48
 
38
49
  In admin new/edit view if that model add
39
50
 
40
- %div= render "redditor/admin/pages/page", {f: f}
51
+ %div= render "redditor/admin/page", {f: f}
41
52
 
42
53
  Add `multipart: true` to form of object with redditor
43
54
 
@@ -53,8 +64,11 @@ Add this line to edit action in controller (change @article to you model)
53
64
 
54
65
  Add redditor js to your js manifest file for admin (admin.js)
55
66
 
56
- //= require redditor/application
67
+ //= require jquery
68
+ //= require jquery.ui.sortable
69
+ //= require redditor
57
70
 
58
71
  Add redditor styles to css manifest file for admin (admin.css)
59
72
 
60
- //= require redditor/application
73
+ //= require fileapi
74
+ //= require redditor
@@ -0,0 +1,149 @@
1
+ do ($ = jQuery)->
2
+ $.redditor =
3
+ sliderBlockImagesSortableParams:
4
+ scroll: false
5
+ dropOnEmpty: false
6
+ cursor: "crosshair"
7
+ opacity: 0.75
8
+ items: "li"
9
+ update: ->
10
+ self = $(@)
11
+ $.ajax
12
+ data: self.sortable('serialize') + '&authenticity_token=#{u(form_authenticity_token)}'
13
+ dataType: 'script'
14
+ url: self.data("sortable-url")
15
+ .done ->
16
+ return
17
+ .error ->
18
+ alert "Ошибка, данные не сохранены"
19
+
20
+ parameterizationForm: (box) ->
21
+ form = box.serializeForm()
22
+ formName = box.find("div.redditor__form").data("object-name")
23
+ firstProperty = formName.replace(/^(.*?)\[.*/,"$1")
24
+ nextProperties = formName.match(/\[(.*?)\]/g)
25
+ nextProperties = $.map nextProperties, (n)->
26
+ n.replace(/\[(.*)\]/,"$1")
27
+ params = form[firstProperty]
28
+ for i in nextProperties
29
+ params = params[i]
30
+ params = "content_block": params
31
+
32
+ setPositions: ->
33
+ $el = $.redditor.$el
34
+ $el.find($el.sortable("option", "items")).each (i) ->
35
+ $(@).find("input.redditor__position").val i
36
+
37
+ sortList: ->
38
+ sortArray = $.map $.redditor.$el.find("dd"), (n) ->
39
+ key = $(n).attr("class")
40
+ input = $(n).find("input[type=hidden][name='#{$(n).find("div.redditor__form").data("object-name")}[id]']")
41
+ value = input.val()
42
+ if value?
43
+ obj = {}
44
+ obj[key] =
45
+ index: value
46
+ position: $(n).index()
47
+ obj
48
+ else
49
+ null
50
+
51
+ if sortArray.length
52
+ $.ajax
53
+ type: "post"
54
+ # data: self.sortable('serialize') + '&authenticity_token=<%= u(form_authenticity_token) %>',
55
+ data: {sort: sortArray}
56
+ dataType: "script"
57
+ url: $.redditor.$el.data("sort-url")
58
+ .done($.redditor.setPositions)
59
+ else
60
+ $.redditor.setPositions()
61
+
62
+ afterFunc: ->
63
+
64
+ #! jquery-serializeForm - Make an object out of form elements - v1.1.1 - 2013-01-21
65
+ #* https://github.com/danheberden/jquery-serializeForm
66
+ #* Copyright (c) 2013 Dan Heberden; Licensed MIT
67
+ do ($ = jQuery) ->
68
+ $.fn.serializeForm = ->
69
+
70
+ # don't do anything if we didn't get any elements
71
+ return false if @length < 1
72
+ data = {}
73
+ lookup = data #current reference of data
74
+ selector = ":input[type!=\"checkbox\"][type!=\"radio\"], input:checked"
75
+ parse = ->
76
+
77
+ # data[a][b] becomes [ data, a, b ]
78
+ named = @name.replace(/\[([^\]]+)?\]/g, ",$1").split(",")
79
+ cap = named.length - 1
80
+ $el = $(this)
81
+
82
+ # Ensure that only elements with valid `name` properties will be serialized
83
+ if named[0]
84
+ i = 0
85
+
86
+ while i < cap
87
+
88
+ # move down the tree - create objects or array if necessary
89
+ lookup = lookup[named[i]] = lookup[named[i]] or ((if named[i + 1] is "" then [] else {}))
90
+ i++
91
+
92
+ # at the end, push or assign the value
93
+ if lookup.length isnt `undefined`
94
+ lookup.push $el.val()
95
+ else
96
+ lookup[named[cap]] = $el.val()
97
+
98
+ # assign the reference back to root
99
+ lookup = data
100
+
101
+
102
+ # first, check for elements passed into this function
103
+ @filter(selector).each parse
104
+
105
+ # then parse possible child elements
106
+ @find(selector).each parse
107
+
108
+ # return data
109
+ data
110
+
111
+ $ ->
112
+ $.redditor.$el = $("#redditor")
113
+
114
+ if $.redditor.$el.length
115
+
116
+ $.redditor.$el.sortable
117
+ dropOnEmpty: false
118
+ cursor: "crosshair"
119
+ opacity: 0.75
120
+ handle: ".redditor__handle"
121
+ axis: "y"
122
+ items: "dd"
123
+ scroll: false
124
+ update: $.redditor.sortList
125
+ start: ->
126
+ # необходимо обновить, чтобы сортировака работала корректно, тк меняем высоту блоков
127
+ $(@).addClass("redditor_sortable").sortable( "refresh" )
128
+ return
129
+ stop: ->
130
+ $(@).removeClass("redditor_sortable")
131
+ return
132
+
133
+ .on "click", "a.redditor__update", (event) ->
134
+ event.preventDefault()
135
+ box = $(@).closest "dd"
136
+ params = $.redditor.parameterizationForm(box)
137
+ if params.content_block.id
138
+ $.extend params, _method: 'patch'
139
+ $.ajax
140
+ method: 'POST',
141
+ url: this.href,
142
+ data: params
143
+
144
+ $("ul.slider-block-images").sortable $.redditor.sliderBlockImagesSortableParams
145
+
146
+ $('div.redditor__add-blocks').on "ajax:beforeSend", "a.redditor__add", (event, xhr, status) ->
147
+ status.url += "?" + $.param(content_block: {temp_id: new Date().getTime()}) # generate uniq id
148
+
149
+ $.redditor.afterFunc()
@@ -1,4 +1,4 @@
1
- window.FU =
1
+ FU =
2
2
  config:
3
3
  maxFileSizeMB: 10
4
4
  messages:
@@ -84,14 +84,14 @@ window.FU =
84
84
  </div>'
85
85
 
86
86
 
87
- window.onFiles = (files, context) ->
87
+ onFiles = (files, context) ->
88
88
  $context = $(context)
89
89
  if uploadUrl = $context.data("upload-url")
90
90
  FU.config.uploadUrl = uploadUrl
91
91
 
92
92
  if contentBlockId = $context.data("content-block-id")
93
93
  FU.config.data = ->
94
- REDDE.redditor.parameterizationForm $context.closest("dd")
94
+ $.redditor.parameterizationForm $context.closest("dd")
95
95
  else
96
96
  FU.config.data = ->
97
97
 
@@ -102,7 +102,7 @@ window.onFiles = (files, context) ->
102
102
  $("#oooops").show()
103
103
  $("#buttons-panel").hide()
104
104
  else
105
- $("#preview").append tmpl(window.FU.template,
105
+ $("#preview").append tmpl(FU.template,
106
106
  file: file
107
107
  icon: FU.icon
108
108
  )
@@ -117,20 +117,20 @@ $ ->
117
117
  ).insertAfter "#page-header" # если загрузка не поддерживается, то выводим сообщение
118
118
  $('#buttons-panel').hide()
119
119
 
120
-
121
- if FileAPI.support.dnd
122
- $('#drag-n-drop').show() #выводим текст с сообщение что работает dnd
123
- $(document).dnd (over) ->
124
- $('#drop-zone').toggleClass "active", over #Если кто-то перетащил файлы в браузер подсвечиваем область в которую их можно бросить
125
- return
126
- , ->
127
- $('#drop-zone').dnd (over) ->
128
- return
129
- , (files) ->
130
- onFiles files, this
131
- return
132
-
133
- $(document).on 'change', 'input.js-fileapi[type="file"]', (evt) ->
120
+ # закоментил, пока пересекается с fileapi
121
+ # if FileAPI.support.dnd
122
+ # $('#drag-n-drop').show() #выводим текст с сообщение что работает dnd
123
+ # $(document).dnd (over) ->
124
+ # $('#drop-zone').toggleClass "active", over #Если кто-то перетащил файлы в браузер подсвечиваем область в которую их можно бросить
125
+ # return
126
+ # , ->
127
+ # $('#drop-zone').dnd (over) ->
128
+ # return
129
+ # , (files) ->
130
+ # onFiles files, this
131
+ # return
132
+
133
+ $('#redditor').on 'change', 'input.redditor__js-fileapi[type="file"]', (evt) ->
134
134
  files = FileAPI.getFiles(evt)
135
135
  onFiles(files, this)
136
136
  FileAPI.reset(evt.currentTarget)
@@ -0,0 +1,3 @@
1
+ #= require fileapi
2
+ #= require redditor/uploader
3
+ #= require redditor/init
@@ -1,23 +1,24 @@
1
- //= require fileapi
2
-
3
1
  dl.redditor {
4
2
  dd {
5
3
  /*нельзя задавать position-relative, иначе глючит сортировка в хроме*/
6
4
  margin: 10px -10px; padding:10px; background:#efefef;
7
5
  border: 1px solid #e8e8e8;
8
- .handle {
9
- width:20px; height: 20px; float: left;
10
- background: image-url('redditor/move_handler.png') center no-repeat;
11
- cursor: move;
12
- }
13
6
  }
14
- &.now-sortable dd {
7
+ &.redditor_sortable dd {
15
8
  height: 50px !important; overflow: hidden;
16
- .tit-form {display: block;}
17
9
  }
18
10
  .ui-sortable-helper, .ui-sortable-placeholder {
19
11
  /*max-height: 200px !important; overflow: hidden;*/
20
12
  }
13
+ .field_with_errors {
14
+ display: inline;
15
+ }
16
+ }
17
+
18
+ .redditor__handle {
19
+ width:20px; height: 20px; float: left;
20
+ background: image-url('redditor/move_handler.png') center no-repeat;
21
+ cursor: move;
21
22
  }
22
23
 
23
24
  ul.slider-block-images {
@@ -32,18 +33,26 @@ ul.slider-block-images {
32
33
  }
33
34
  }
34
35
 
36
+ .redditor__sep {
37
+ margin:5px 0;
38
+ height:1px;
39
+ background:#ccc
40
+ }
41
+
35
42
  .redditor__add-blocks {
36
43
  margin:10px -10px; padding:10px;
37
44
  }
38
45
 
39
46
  .redditor__control {float: right;}
40
- .redditor__delete, .redditor__update {
47
+ .redditor__delete,
48
+ .redditor__update {
41
49
  text-decoration: none;
42
50
  display: inline-block;
43
51
  text-align: center; min-width: 10px; padding: 0 5px;
44
52
  font-size: 10px; line-height: 20px;
45
53
  border: 1px solid #C2C2C2; border-radius: 15px;
46
54
  background: #F8F8F8;
55
+ text-decoration: none;
47
56
  }
48
57
 
49
58
  .redditor__delete {
@@ -55,14 +64,59 @@ ul.slider-block-images {
55
64
  &:before {content: '✔'}
56
65
  }
57
66
 
58
- .form-name {
67
+ .redditor__form {
59
68
  margin-top: 25px;
60
69
  }
61
70
 
62
- .tit-form {
63
- display: none; margin-top: -25px; text-align: center; font-size: 18px;
64
- line-height: 30px; vertical-align: middle;
65
- img { width: 30px; display: inline-block; vertical-align: middle;}
71
+ .redditor__title {
72
+ visibility: hidden;
73
+ margin-top: -27px;
74
+ text-align: center;
75
+ font-size: 18px;
76
+ line-height: 32px;
77
+ vertical-align: middle;
78
+ &:after {
79
+ width: 32px;
80
+ height: 32px;
81
+ display: inline-block;
82
+ vertical-align: middle;
83
+ }
84
+ .redditor_sortable & {
85
+ visibility: visible;
86
+ }
87
+ }
88
+
89
+ .redditor__title_slider:after {
90
+ content: image-url('redditor/big/slider.png');
91
+ }
92
+
93
+ .redditor__title_text:after {
94
+ content: image-url('redditor/big/text.png');
95
+ }
96
+
97
+ .redditor__title_video:after {
98
+ content: image-url('redditor/big/video.png');
99
+ }
100
+
101
+ .redditor__title_image:after {
102
+ content: image-url('redditor/big/image.png');
103
+ }
104
+
105
+ .redditor__textarea {
106
+ -webkit-box-sizing: border-box;
107
+ -moz-box-sizing: border-box;
108
+ box-sizing: border-box;
109
+ width: 100%;
110
+ max-width: 100%;
111
+ }
112
+
113
+ .redditor__validate {
114
+ font-weight: bold;
115
+ font-style: italic;
116
+ color: #fff;
117
+ background: rgb(226, 40, 40);
118
+ padding: 10px 10px 10px 40px;
119
+ border-radius: 3px
66
120
  }
67
121
 
68
122
  .line-form {
@@ -93,29 +147,21 @@ ul.slider-block-images {
93
147
  .redditor__add_txt {
94
148
  background:#f5f5f5 image-url('redditor/add_txt.png') 3px center no-repeat;
95
149
  background: image-url('redditor/add_txt.png') 3px center no-repeat, -webkit-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
96
- background: image-url('redditor/add_txt.png') 3px center no-repeat, -moz-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
97
- background: image-url('redditor/add_txt.png') 3px center no-repeat, -o-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
98
150
  background: image-url('redditor/add_txt.png') 3px center no-repeat, linear-gradient(to bottom, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
99
151
  }
100
152
  .redditor__add_video {
101
153
  background:#f5f5f5 image-url('redditor/add_video.png') 3px center no-repeat;
102
154
  background: image-url('redditor/add_video.png') 3px center no-repeat, -webkit-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
103
- background: image-url('redditor/add_video.png') 3px center no-repeat, -moz-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
104
- background: image-url('redditor/add_video.png') 3px center no-repeat, -o-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
105
155
  background: image-url('redditor/add_video.png') 3px center no-repeat, linear-gradient(to bottom, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
106
156
  }
107
157
  .redditor__add_photo {
108
158
  background:#f5f5f5 image-url('redditor/add_photo.png') 3px center no-repeat;
109
159
  background: image-url('redditor/add_photo.png') 3px center no-repeat, -webkit-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
110
- background: image-url('redditor/add_photo.png') 3px center no-repeat, -moz-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
111
- background: image-url('redditor/add_photo.png') 3px center no-repeat, -o-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
112
160
  background: image-url('redditor/add_photo.png') 3px center no-repeat, linear-gradient(to bottom, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
113
161
  }
114
162
  .redditor__add_slider {
115
163
  background:#f5f5f5 image-url('redditor/add_slider.png') 3px center no-repeat;
116
164
  background: image-url('redditor/add_slider.png') 3px center no-repeat, -webkit-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
117
- background: image-url('redditor/add_slider.png') 3px center no-repeat, -moz-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
118
- background: image-url('redditor/add_slider.png') 3px center no-repeat, -o-linear-gradient(top, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
119
165
  background: image-url('redditor/add_slider.png') 3px center no-repeat, linear-gradient(to bottom, #fff 0%, #f5f5f5 49%, #ececec 50%, #eee 100%);
120
166
  }
121
167
 
@@ -131,7 +177,7 @@ a.redactor_btn_divide {
131
177
  // content: "class: " attr(class); display: block; padding: 2px; background: #fcc;
132
178
  // }
133
179
 
134
- // dl.redditor div.form-name:before {
180
+ // dl.redditor div.redditor__form:before {
135
181
  // content: "object-name: " attr(data-object-name) "\A id: " attr(id); display: block; padding: 2px; background: #ffc;
136
182
  // white-space: pre;
137
183
  // }
@@ -4,19 +4,19 @@ class Redditor::Admin::ImageBlocksController < Redditor::Admin::BaseController
4
4
 
5
5
  def new
6
6
  @content_block = @page.images.build(content_block_params)
7
- render "redditor/admin/pages/new"
7
+ render "redditor/admin/new"
8
8
  end
9
9
 
10
10
  def update
11
11
  @content_block = @page.images.find(params[:id])
12
12
  @content_block.update_attributes(content_block_params)
13
- render "redditor/admin/pages/wrapper"
13
+ render "redditor/admin/wrapper"
14
14
  end
15
15
 
16
16
  def create
17
17
  @content_block = @page.images.build(content_block_params)
18
18
  @content_block.update_attributes(src: params[:file])
19
- render "redditor/admin/pages/wrapper"
19
+ render "redditor/admin/wrapper"
20
20
  end
21
21
 
22
22
  def destroy
@@ -31,7 +31,7 @@ class Redditor::Admin::ImageBlocksController < Redditor::Admin::BaseController
31
31
  def update_post
32
32
  @content_block = @page.images.find(params[:id])
33
33
  @content_block.update_attributes(src: params[:file])
34
- render "redditor/admin/pages/wrapper"
34
+ render "redditor/admin/wrapper"
35
35
  end
36
36
 
37
37
  end
@@ -17,7 +17,7 @@ class Redditor::Admin::ImagesController < Redditor::Admin::BaseController
17
17
  @slider_block = @page.slider_blocks.find(params[:slider_block_id])
18
18
  @image = @slider_block.images.build(src: params[:file])
19
19
  if @image.save
20
- render "redditor/admin/pages/slider_block_image"
20
+ render "redditor/admin/slider_block_image"
21
21
  end
22
22
  end
23
23
 
@@ -4,20 +4,20 @@ class Redditor::Admin::SliderBlocksController < Redditor::Admin::BaseController
4
4
 
5
5
  def new
6
6
  @content_block = @page.slider_blocks.build(content_block_params)
7
- render "redditor/admin/pages/new"
7
+ render "redditor/admin/new"
8
8
  end
9
9
 
10
10
  def update
11
11
  @content_block = @page.slider_blocks.find(params[:id])
12
12
  @content_block.update_attributes(content_block_params)
13
- render "redditor/admin/pages/wrapper"
13
+ render "redditor/admin/wrapper"
14
14
  end
15
15
 
16
16
  def create
17
17
  temp_last_postion = @page.try(:content_blocks).try(:last).try(:position).to_i + 1
18
18
  @content_block = @page.slider_blocks.build(content_block_params)
19
19
  @content_block.update_attributes(position: temp_last_postion)
20
- render "redditor/admin/pages/new"
20
+ render "redditor/admin/new"
21
21
  end
22
22
 
23
23
  def destroy
@@ -4,19 +4,19 @@ class Redditor::Admin::TextBlocksController < Redditor::Admin::BaseController
4
4
 
5
5
  def new
6
6
  @content_block = @page.text_blocks.build(content_block_params)
7
- render "redditor/admin/pages/new"
7
+ render "redditor/admin/new"
8
8
  end
9
9
 
10
10
  def update
11
11
  @content_block = @page.text_blocks.find(params[:id])
12
12
  @content_block.update_attributes(content_block_params)
13
- render "redditor/admin/pages/wrapper"
13
+ render "redditor/admin/wrapper"
14
14
  end
15
15
 
16
16
  def create
17
17
  @content_block = @page.text_blocks.build(content_block_params)
18
18
  @content_block.save
19
- render "redditor/admin/pages/wrapper"
19
+ render "redditor/admin/wrapper"
20
20
  end
21
21
 
22
22
  def destroy
@@ -4,19 +4,19 @@ class Redditor::Admin::VideoBlocksController < Redditor::Admin::BaseController
4
4
 
5
5
  def new
6
6
  @content_block = @page.video_blocks.build(content_block_params)
7
- render "redditor/admin/pages/new"
7
+ render "redditor/admin/new"
8
8
  end
9
9
 
10
10
  def update
11
11
  @content_block = @page.video_blocks.find(params[:id])
12
12
  @content_block.update_attributes(content_block_params)
13
- render "redditor/admin/pages/wrapper"
13
+ render "redditor/admin/wrapper"
14
14
  end
15
15
 
16
16
  def create
17
17
  @content_block = @page.video_blocks.build(content_block_params)
18
18
  @content_block.save
19
- render "redditor/admin/pages/wrapper"
19
+ render "redditor/admin/wrapper"
20
20
  end
21
21
 
22
22
  def destroy
@@ -1,4 +1,11 @@
1
1
  module Redditor
2
2
  module ApplicationHelper
3
+ def real_name content_block
4
+ content_block.class.name.underscore.sub('redditor/', '')
5
+ end
6
+
7
+ def redditor_validate f
8
+ render "redditor/admin/validate", {f: f}
9
+ end
3
10
  end
4
11
  end
@@ -0,0 +1,35 @@
1
+ %dd{class: real_name(content_block)}
2
+ .redditor__handle
3
+
4
+ .redditor__control
5
+ - if content_block.new_record?
6
+ = link_to "",
7
+ "javascript:void(0);",
8
+ class: "redditor__delete",
9
+ onclick: "if (confirm('#{t "redditor.remove?"}')) $(this).closest('dd').remove();"
10
+
11
+ = link_to "",
12
+ [redditor, :admin, p.object, content_block],
13
+ class: "redditor__update",
14
+ data: {:disable_with => t("redditor.saving")}
15
+
16
+ - else
17
+ = link_to "",
18
+ [redditor, :admin, p.object, content_block],
19
+ class: "redditor__delete",
20
+ :method => :delete,
21
+ remote: true,
22
+ data: {confirm: "Вы, действительно, хотите удалить контент-блок?", disable_with: t("redditor.deleting")}
23
+
24
+ = link_to "",
25
+ [redditor, :admin, p.object, content_block],
26
+ class: "redditor__update",
27
+ data: {disable_with: t("redditor.saving")}
28
+
29
+ = p.fields_for real_name(content_block).pluralize.to_sym, content_block, :include_id => false do |f|
30
+ %div.redditor__form{data: {"object-name" => f.object.temp_id.present? ? f.object_name.sub!(/\[\d*\]/, "[#{f.object.temp_id}]") : f.object_name}, id: "#{real_name(content_block)}_#{content_block.id.nil? ? f.object.temp_id : content_block.id}"}
31
+ = f.hidden_field :position, class: 'redditor__position'
32
+ = render :partial => "redditor/admin/#{real_name(content_block)}", locals: {f: f}
33
+ - unless f.object.new_record?
34
+ = f.hidden_field :id
35
+ = f.hidden_field :temp_id
@@ -1,18 +1,18 @@
1
- .tit-form
1
+ .redditor__title.redditor__title_image
2
2
  = t 'redditor.title.image'
3
- = image_tag 'redditor/add_photo_big.png'
3
+
4
4
  - if f.object.src.present?
5
5
  %div{style: "padding: 5px; border: 1px solid #ccc; background:#fff; margin: 5px 0;"}= image_tag f.object.src, style: "max-width: 100%"
6
6
  = redditor_validate f
7
7
  .condom{style: "margin:5px 0;"}
8
8
  = f.text_field :description, placeholder: t("redditor.description"), class: 'full-width'
9
9
 
10
- .condom{style: "margin:5px 0; height:1px; background:#ccc;"}
10
+ .redditor__sep
11
11
 
12
12
  .b-button.js-fileapi-wrapper
13
13
  - if f.object.new_record?
14
14
  .b-button__text= t("redditor.add.upload_image")
15
- = f.file_field :src, :class => "b-button__input js-fileapi", data: {"upload-url" => redditor.admin_page_image_blocks_path(f.object.imageable_id), "content-block-id" => true}
15
+ = f.file_field :src, :class => "b-button__input redditor__js-fileapi", data: {"upload-url" => redditor.admin_page_image_blocks_path(f.object.imageable_id), "content-block-id" => true}
16
16
  - else
17
17
  .b-button__text= t("redditor.add.change_image")
18
- = f.file_field :src, :class => "b-button__input js-fileapi", data: {"upload-url" => redditor.update_post_admin_page_image_block_path(f.object.imageable_id, f.object)}
18
+ = f.file_field :src, :class => "b-button__input redditor__js-fileapi", data: {"upload-url" => redditor.update_post_admin_page_image_block_path(f.object.imageable_id, f.object)}