redditor 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/Gemfile +2 -1
- data/README.md +17 -3
- data/app/assets/images/redditor/big/image.png +0 -0
- data/app/assets/images/redditor/big/slider.png +0 -0
- data/app/assets/images/redditor/big/text.png +0 -0
- data/app/assets/images/redditor/big/video.png +0 -0
- data/app/assets/javascripts/redditor/init.coffee +149 -0
- data/app/assets/javascripts/{fileapi → redditor}/uploader.coffee +18 -18
- data/app/assets/javascripts/redditor.js.coffee +3 -0
- data/app/assets/stylesheets/{redditor/redditor.css.scss → redditor.scss} +70 -24
- data/app/controllers/redditor/admin/image_blocks_controller.rb +4 -4
- data/app/controllers/redditor/admin/images_controller.rb +1 -1
- data/app/controllers/redditor/admin/slider_blocks_controller.rb +3 -3
- data/app/controllers/redditor/admin/text_blocks_controller.rb +3 -3
- data/app/controllers/redditor/admin/video_blocks_controller.rb +3 -3
- data/app/helpers/redditor/application_helper.rb +7 -0
- data/app/views/redditor/admin/_content_block.haml +35 -0
- data/app/views/redditor/admin/{pages/_image.haml → _image.haml} +5 -5
- data/app/views/redditor/admin/{pages/_page.haml → _page.haml} +2 -3
- data/app/views/redditor/admin/_slider_block.haml +16 -0
- data/app/views/redditor/admin/{pages/_slider_block_image.haml → _slider_block_image.haml} +0 -0
- data/app/views/redditor/admin/_text_block.haml +5 -0
- data/app/views/redditor/admin/{pages/_validate.haml → _validate.haml} +1 -1
- data/app/views/redditor/admin/{pages/_video_block.haml → _video_block.haml} +2 -2
- data/app/views/redditor/admin/_wrapper.haml +3 -0
- data/app/views/redditor/admin/new.js.erb +5 -0
- data/app/views/redditor/admin/slider_block_image.js.coffee +2 -0
- data/app/views/redditor/admin/wrapper.js.coffee +5 -0
- data/app/views/redditor/images/_image.html.haml +1 -1
- data/app/views/redditor/slider_blocks/_slider_block_image.html.haml +1 -1
- data/config/locales/redditor.ru.yml +1 -1
- data/lib/redditor/engine.rb +1 -2
- data/lib/redditor/version.rb +1 -1
- data/redditor.gemspec +2 -9
- data/spec/dummy/app/assets/images/redactor/icons.png +0 -0
- data/spec/dummy/app/assets/images/redactor/plugins/file.html +3 -0
- data/spec/dummy/app/assets/images/redactor/plugins/image.html +39 -0
- data/spec/dummy/app/assets/images/redactor/plugins/image_edit.html +35 -0
- data/spec/dummy/app/assets/images/redactor/plugins/link.html +74 -0
- data/spec/dummy/app/assets/images/redactor/plugins/table.html +25 -0
- data/spec/dummy/app/assets/images/redactor/plugins/video.html +15 -0
- data/spec/dummy/app/assets/javascripts/application.js +10 -2
- data/spec/dummy/app/assets/javascripts/jquery-migrate-1.2.1.js +521 -0
- data/spec/dummy/app/assets/javascripts/redactor/langs/en.js +76 -0
- data/spec/dummy/app/assets/javascripts/redactor/langs/ru.js +75 -0
- data/spec/dummy/app/assets/javascripts/redactor/redactor.js.erb +2248 -0
- data/spec/dummy/app/assets/javascripts/redactor/toolbars/default.js +219 -0
- data/{app/assets/stylesheets/redditor → spec/dummy/app/assets/stylesheets}/application.css.scss +3 -8
- data/spec/dummy/app/assets/stylesheets/redactor/redactor.css.scss +369 -0
- data/spec/dummy/app/assets/stylesheets/redactor/wym.css +136 -0
- data/spec/dummy/app/controllers/articles_controller.rb +9 -0
- data/spec/dummy/app/views/admin/articles/edit.html.haml +1 -1
- data/spec/dummy/app/views/articles/show.html.haml +1 -1
- data/spec/dummy/app/views/layouts/application.html.erb +1 -1
- data/spec/features/text_spec.rb +3 -3
- data/spec/generators/views_generator_spec.rb +1 -1
- metadata +57 -114
- data/app/assets/javascripts/jquery-ui.min.js +0 -12
- data/app/assets/javascripts/redditor/application.js +0 -14
- data/app/assets/javascripts/redditor/redditor.coffee +0 -151
- data/app/helpers/redditor/fileapi_helper.rb +0 -17
- data/app/helpers/redditor/pages_helper.rb +0 -24
- data/app/models/redditor/content_block.rb +0 -24
- data/app/views/redditor/admin/pages/_content_block.haml +0 -37
- data/app/views/redditor/admin/pages/_slider_block.haml +0 -16
- data/app/views/redditor/admin/pages/_text_block.haml +0 -5
- data/app/views/redditor/admin/pages/_wrap_dd.haml +0 -1
- data/app/views/redditor/admin/pages/_wrapper.haml +0 -3
- data/app/views/redditor/admin/pages/new.js.coffee +0 -7
- data/app/views/redditor/admin/pages/new.js.erb +0 -7
- data/app/views/redditor/admin/pages/slider_block_image.js.coffee +0 -2
- data/app/views/redditor/admin/pages/wrapper.js.coffee +0 -6
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 139b02b3e8c540a2cb91a7ef7a5aaef880eb7f81
|
4
|
+
data.tar.gz: c78cbabea39fcd0361f680b6712fc3fc53e759f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f9e0b332fbe9778f9ab172689d902f6ca8529b5d7a98dbe629addb70c668ff42ba1fe5694a687abeb30d6b07f41228d61f5c4465f0dd4095497568df6daf845
|
7
|
+
data.tar.gz: 1f3646c53074378ae8709972f0fc6dbc1705a8badbfc7d0703fa58f5ee157401f992fe42843876a2918a6a23a341f72f9b1af2695da02621f4adfff57d6ae5df
|
data/.gitignore
CHANGED
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',
|
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/
|
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
|
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
|
73
|
+
//= require fileapi
|
74
|
+
//= require redditor
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
$(
|
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)
|
@@ -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
|
-
&.
|
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,
|
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
|
-
.
|
67
|
+
.redditor__form {
|
59
68
|
margin-top: 25px;
|
60
69
|
}
|
61
70
|
|
62
|
-
.
|
63
|
-
|
64
|
-
|
65
|
-
|
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.
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
19
|
+
render "redditor/admin/wrapper"
|
20
20
|
end
|
21
21
|
|
22
22
|
def destroy
|
@@ -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
|
-
.
|
1
|
+
.redditor__title.redditor__title_image
|
2
2
|
= t 'redditor.title.image'
|
3
|
-
|
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
|
-
.
|
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
|
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
|
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)}
|