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
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)}