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