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
@@ -1,14 +0,0 @@
|
|
1
|
-
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
-
// listed below.
|
3
|
-
//
|
4
|
-
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
-
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
-
//
|
7
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
-
// compiled file.
|
9
|
-
//
|
10
|
-
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
|
-
// about supported directives.
|
12
|
-
//
|
13
|
-
//= require jquery-ui.min.js
|
14
|
-
//= require redditor/redditor
|
@@ -1,151 +0,0 @@
|
|
1
|
-
#= require fileapi
|
2
|
-
#= require fileapi/uploader
|
3
|
-
|
4
|
-
window.REDDE = {redditor: {}}
|
5
|
-
REDDE.redditor.sliderBlockImagesSortableParams =
|
6
|
-
scroll: false
|
7
|
-
dropOnEmpty: false
|
8
|
-
cursor: "crosshair"
|
9
|
-
opacity: 0.75
|
10
|
-
items: "li"
|
11
|
-
update: ->
|
12
|
-
self = $(@)
|
13
|
-
$.ajax
|
14
|
-
data: self.sortable('serialize') + '&authenticity_token=#{u(form_authenticity_token)}'
|
15
|
-
dataType: 'script'
|
16
|
-
url: self.data("sortable-url")
|
17
|
-
.done ->
|
18
|
-
# console.log
|
19
|
-
return
|
20
|
-
.error ->
|
21
|
-
alert "Ошибка, данные не сохранены"
|
22
|
-
|
23
|
-
REDDE.redditor.parameterizationForm = (box) ->
|
24
|
-
form = box.serializeForm()
|
25
|
-
formName = box.find("div.form-name").data("object-name")
|
26
|
-
firstProperty = formName.replace(/^(.*?)\[.*/,"$1")
|
27
|
-
nextProperties = formName.match(/\[(.*?)\]/g)
|
28
|
-
nextProperties = $.map nextProperties, (n)->
|
29
|
-
n.replace(/\[(.*)\]/,"$1")
|
30
|
-
params = form[firstProperty]
|
31
|
-
for i in nextProperties
|
32
|
-
params = params[i]
|
33
|
-
params = "content_block": params
|
34
|
-
|
35
|
-
|
36
|
-
REDDE.redditor.setPositions = ->
|
37
|
-
$el = REDDE.redditor.$el
|
38
|
-
$el.find($el.sortable("option", "items")).each (i) ->
|
39
|
-
$(@).find("input.redditor__position").val i
|
40
|
-
|
41
|
-
REDDE.redditor.sortList = ->
|
42
|
-
sortArray = $.map REDDE.redditor.$el.find("dd"), (n) ->
|
43
|
-
key = $(n).attr("class")
|
44
|
-
input = $(n).find("input[type=hidden][name='#{$(n).find("div.form-name").data("object-name")}[id]']")
|
45
|
-
value = input.val()
|
46
|
-
# console.log input, value
|
47
|
-
if value?
|
48
|
-
obj = {}
|
49
|
-
obj[key] =
|
50
|
-
index: value
|
51
|
-
position: $(n).index()
|
52
|
-
obj
|
53
|
-
else
|
54
|
-
null
|
55
|
-
|
56
|
-
# console.log sortArray
|
57
|
-
|
58
|
-
if sortArray.length
|
59
|
-
$.ajax
|
60
|
-
type: "post"
|
61
|
-
# data: self.sortable('serialize') + '&authenticity_token=<%= u(form_authenticity_token) %>',
|
62
|
-
data: {sort: sortArray}
|
63
|
-
dataType: "script"
|
64
|
-
url: REDDE.redditor.$el.data("sort-url")
|
65
|
-
.done(REDDE.redditor.setPositions)
|
66
|
-
else
|
67
|
-
REDDE.redditor.setPositions()
|
68
|
-
|
69
|
-
$ ->
|
70
|
-
REDDE.redditor.$el = $("dl.redditor").first()
|
71
|
-
|
72
|
-
$(".add_fields").click ->
|
73
|
-
time = new Date().getTime()
|
74
|
-
regexp = new RegExp($(this).data("id"), "g")
|
75
|
-
self = REDDE.redditor.$el.append($(this).data("fields").replace(regexp, time))
|
76
|
-
REDDE.redditor.setPositions()
|
77
|
-
|
78
|
-
REDDE.redditor.$el.sortable
|
79
|
-
dropOnEmpty: false
|
80
|
-
cursor: "crosshair"
|
81
|
-
opacity: 0.75
|
82
|
-
handle: ".handle"
|
83
|
-
axis: "y"
|
84
|
-
items: "dd"
|
85
|
-
scroll: false
|
86
|
-
update: REDDE.redditor.sortList
|
87
|
-
start: ->
|
88
|
-
# необходимо обновить, чтобы сортировака работала корректно, тк меняем высоту блоков
|
89
|
-
$(@).addClass("now-sortable").sortable( "refresh" )
|
90
|
-
return
|
91
|
-
stop: ->
|
92
|
-
$(@).removeClass("now-sortable")
|
93
|
-
return
|
94
|
-
|
95
|
-
.on "ajax:beforeSend", "a.redditor__update", (event, xhr, status) ->
|
96
|
-
box = $(@).closest "dd"
|
97
|
-
params = REDDE.redditor.parameterizationForm(box)
|
98
|
-
status.url += "?" + $.param(params)
|
99
|
-
|
100
|
-
$("ul.slider-block-images").sortable REDDE.redditor.sliderBlockImagesSortableParams
|
101
|
-
|
102
|
-
$('div.redditor__add-blocks').on "ajax:beforeSend", "a.redditor__add", (event, xhr, status) ->
|
103
|
-
status.url += "?" + $.param(content_block: {temp_id: new Date().getTime()}) # generate uniq id
|
104
|
-
|
105
|
-
#! jquery-serializeForm - Make an object out of form elements - v1.1.1 - 2013-01-21
|
106
|
-
#* https://github.com/danheberden/jquery-serializeForm
|
107
|
-
#* Copyright (c) 2013 Dan Heberden; Licensed MIT
|
108
|
-
(($) ->
|
109
|
-
$.fn.serializeForm = ->
|
110
|
-
|
111
|
-
# don't do anything if we didn't get any elements
|
112
|
-
return false if @length < 1
|
113
|
-
data = {}
|
114
|
-
lookup = data #current reference of data
|
115
|
-
selector = ":input[type!=\"checkbox\"][type!=\"radio\"], input:checked"
|
116
|
-
parse = ->
|
117
|
-
|
118
|
-
# data[a][b] becomes [ data, a, b ]
|
119
|
-
named = @name.replace(/\[([^\]]+)?\]/g, ",$1").split(",")
|
120
|
-
cap = named.length - 1
|
121
|
-
$el = $(this)
|
122
|
-
|
123
|
-
# Ensure that only elements with valid `name` properties will be serialized
|
124
|
-
if named[0]
|
125
|
-
i = 0
|
126
|
-
|
127
|
-
while i < cap
|
128
|
-
|
129
|
-
# move down the tree - create objects or array if necessary
|
130
|
-
lookup = lookup[named[i]] = lookup[named[i]] or ((if named[i + 1] is "" then [] else {}))
|
131
|
-
i++
|
132
|
-
|
133
|
-
# at the end, push or assign the value
|
134
|
-
if lookup.length isnt `undefined`
|
135
|
-
lookup.push $el.val()
|
136
|
-
else
|
137
|
-
lookup[named[cap]] = $el.val()
|
138
|
-
|
139
|
-
# assign the reference back to root
|
140
|
-
lookup = data
|
141
|
-
|
142
|
-
|
143
|
-
# first, check for elements passed into this function
|
144
|
-
@filter(selector).each parse
|
145
|
-
|
146
|
-
# then parse possible child elements
|
147
|
-
@find(selector).each parse
|
148
|
-
|
149
|
-
# return data
|
150
|
-
data
|
151
|
-
) jQuery
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#coding: utf-8
|
2
|
-
module Redditor
|
3
|
-
module FileapiHelper
|
4
|
-
|
5
|
-
def fileapi url=nil
|
6
|
-
html = stylesheet_link_tag "redditor/fileapi/fileapi"
|
7
|
-
html += javascript_include_tag "redditor/fileapi/mailru"
|
8
|
-
if url.present?
|
9
|
-
html += javascript_tag do
|
10
|
-
%Q{FU.config.uploadUrl = "#{url}"}.html_safe
|
11
|
-
end
|
12
|
-
end
|
13
|
-
content_for(:js, html)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module Redditor
|
4
|
-
module PagesHelper
|
5
|
-
def button_tag_add_fields(name, f, association)
|
6
|
-
new_object = f.object.send(association).klass.new
|
7
|
-
id = new_object.object_id
|
8
|
-
fields = f.fields_for(association, new_object, child_index: id) do |builder|
|
9
|
-
content_tag(:dd, :id => "#{association.to_s.singularize}_#{id}") do
|
10
|
-
tag(:div, class: "handle") +
|
11
|
-
link_to("Удалить", "javascript:void(0);", onclick: "if (confirm('dfasdsa')) $(this).closest('dd').remove();") + "\s" +
|
12
|
-
link_to("Обновить", [:admin, @article.page, association], method: "post", class: "redditor__update", remote: true, data: {disable_with: "Обновляется"}) + "\s" +
|
13
|
-
render("admin/pages/" + association.to_s.singularize, f: builder)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
button_tag(name, class: "add_fields", type: "button", data: {id: id, fields: fields.gsub("\n", "")})
|
18
|
-
end
|
19
|
-
|
20
|
-
def redditor_validate f
|
21
|
-
render "redditor/admin/pages/validate", {f: f}
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
module Redditor
|
3
|
-
class ContentBlock < ActiveRecord::Base
|
4
|
-
|
5
|
-
def self.find_by_position_and_type(position, type, page_id)
|
6
|
-
type.to_s.sub("s_attributes", "").camelcase.constantize.where(page_id: page_id, position: position).first
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.init_by_type(type, params)
|
10
|
-
res = type.to_s.sub("s_attributes", "").camelcase.constantize.new(params)
|
11
|
-
res.valid?
|
12
|
-
res
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.check_by_position_and_type position, type, page_id
|
16
|
-
type.to_s.sub("s_attributes", "").camelcase.constantize.where(page_id: page_id, position: position).any?
|
17
|
-
end
|
18
|
-
|
19
|
-
# def self.model_name
|
20
|
-
# ActiveModel::Name.new(self, nil, self.class.name.gsub("Redditor::", ''))
|
21
|
-
# end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
.handle
|
2
|
-
|
3
|
-
- if content_block.new_record?
|
4
|
-
.redditor__control
|
5
|
-
= link_to "",
|
6
|
-
"javascript:void(0);",
|
7
|
-
class: "redditor__delete",
|
8
|
-
onclick: "if (confirm('#{t "redditor.remove?"}')) $(this).closest('dd').remove();"
|
9
|
-
|
10
|
-
= link_to "",
|
11
|
-
[redditor, :admin, p.object, content_block],
|
12
|
-
method: "post",
|
13
|
-
class: "redditor__update",
|
14
|
-
remote: true,
|
15
|
-
data: {:disable_with => t("redditor.saving")}
|
16
|
-
|
17
|
-
- else
|
18
|
-
.redditor__control
|
19
|
-
= link_to "",
|
20
|
-
[redditor, :admin, p.object, content_block],
|
21
|
-
class: "redditor__delete",
|
22
|
-
:method => :delete,
|
23
|
-
remote: true,
|
24
|
-
data: {confirm: "Вы, действительно, хотите удалить контент-блок?", disable_with: t("redditor.deleting")}
|
25
|
-
|
26
|
-
= link_to "",
|
27
|
-
[redditor, :admin, p.object, content_block],
|
28
|
-
class: "redditor__update",
|
29
|
-
remote: true,
|
30
|
-
method: "put",
|
31
|
-
data: {disable_with: t("redditor.saving")}
|
32
|
-
|
33
|
-
= p.fields_for content_block.class.name.underscore.sub('redditor/', '').pluralize.to_sym, content_block do |f|
|
34
|
-
%div.form-name{data: {"object-name" => f.object.temp_id.present? ? f.object_name.sub!(/\[\d*\]/, "[#{f.object.temp_id}]") : f.object_name}, id: "#{content_block.class.name.underscore.sub(/\Aredditor\//, '')}_#{content_block.id.nil? ? f.object.temp_id : content_block.id}"}
|
35
|
-
= f.text_field :position, class: 'redditor__position', hidden: true
|
36
|
-
= render :partial => "redditor/admin/pages/#{content_block.class.name.underscore.sub('redditor/', '')}", locals: {f: f}
|
37
|
-
= f.hidden_field :temp_id
|
@@ -1,16 +0,0 @@
|
|
1
|
-
.tit-form
|
2
|
-
= t 'redditor.title.slider'
|
3
|
-
= image_tag 'redditor/add_slider_big.png'
|
4
|
-
= redditor_validate f
|
5
|
-
.condom{style: "margin:5px 0; height:1px; background:#ccc;"}
|
6
|
-
|
7
|
-
- unless f.object.new_record?
|
8
|
-
%ul.slider-block-images{data: {"sortable-url" => redditor.sort_admin_page_slider_block_images_path(f.object.page_id, f.object.id)}}
|
9
|
-
= render partial: "redditor/admin/pages/slider_block_image", collection: f.object.images, :as => :i
|
10
|
-
|
11
|
-
.condom{style: "margin:5px 0; height:1px; background:#ccc;"}
|
12
|
-
|
13
|
-
- unless f.object.new_record?
|
14
|
-
.b-button.js-fileapi-wrapper
|
15
|
-
.b-button__text= t("redditor.add.upload_images")
|
16
|
-
= file_field_tag :src, :class => "b-button__input js-fileapi", name: nil, :multiple => true, data: {"upload-url" => redditor.admin_page_slider_block_images_path(f.object.page_id, f.object.id)}
|
@@ -1 +0,0 @@
|
|
1
|
-
%dd{class: content_block.class.name.underscore.sub('redditor/', '')}= yield
|
@@ -1,7 +0,0 @@
|
|
1
|
-
REDDE.redditor.$el
|
2
|
-
.append('<%= j(render(partial: "redditor/admin/pages/wrapper", layout: "redditor/admin/pages/wrap_dd", locals: {content_block: @content_block, page: @page})) %>')
|
3
|
-
# .find("textarea:visible:not(.nowred)").redactor(reddactorSettings)
|
4
|
-
.end()
|
5
|
-
.find("ul.slider-block-images").sortable REDDE.redditor.sliderBlockImagesSortableParams
|
6
|
-
REDDE.redditor.sortList()
|
7
|
-
# selectLang(location.hash.replace("#",""))
|
@@ -1,7 +0,0 @@
|
|
1
|
-
REDDE.redditor.$el
|
2
|
-
.append('<%= j(render(partial: "redditor/admin/pages/wrapper", layout: "redditor/admin/pages/wrap_dd", locals: {content_block: @content_block, page: @page})) %>')
|
3
|
-
// .find("textarea:visible:not(.nowred)").redactor(reddactorSettings)
|
4
|
-
.end()
|
5
|
-
.find("ul.slider-block-images").sortable(REDDE.redditor.sliderBlockImagesSortableParams)
|
6
|
-
REDDE.redditor.sortList()
|
7
|
-
// selectLang(location.hash.replace("#",""))
|
@@ -1,6 +0,0 @@
|
|
1
|
-
$("#<%= @content_block.class.name.underscore.sub(/\Aredditor\//, '') %>_<%= @content_block.temp_id %>, #<%= @content_block.class.name.underscore.sub(/\Aredditor\//, '') %>_<%= @content_block.id %>").closest("dd")
|
2
|
-
.html('<%= j(render(partial: "redditor/admin/pages/wrapper", locals: {content_block: @content_block, page: @page})) %>')
|
3
|
-
# .find("textarea:visible:not(.nowred)").redactor(reddactorSettings)
|
4
|
-
.end()
|
5
|
-
.find("ul.slider-block-images").sortable REDDE.redditor.sliderBlockImagesSortableParams
|
6
|
-
# selectLang(location.hash.replace("#",""))
|
@@ -1,13 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
-
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
-
*
|
11
|
-
*= require_self
|
12
|
-
*= require_tree .
|
13
|
-
*/
|