rademade_admin 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.svg +228 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/images/rademade_admin/backgrounds/back-blue.jpg +0 -0
- data/app/assets/images/rademade_admin/backgrounds/back-green.jpg +0 -0
- data/app/assets/images/rademade_admin/backgrounds/back-orange.png +0 -0
- data/app/assets/images/rademade_admin/backgrounds/blueish.jpg +0 -0
- data/app/assets/images/rademade_admin/backgrounds/select-bg.png +0 -0
- data/app/assets/images/rademade_admin/datatables/back_disabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/back_enabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/back_enabled_hover.png +0 -0
- data/app/assets/images/rademade_admin/datatables/forward_disabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/forward_enabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/forward_enabled_hover.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_asc.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_asc_disabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_both.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_desc.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_desc_disabled.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-attach.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-setting.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-shuffle.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-tool.png +0 -0
- data/app/assets/images/rademade_admin/icons/buble.png +0 -0
- data/app/assets/images/rademade_admin/icons/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/rademade_admin/icons/glyphicons-halflings.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-arrow-black.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-gallery-edit.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-gallery-trash.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-mail.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-phone.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-table-delete.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-table-edit.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-table-new.png +0 -0
- data/app/assets/images/rademade_admin/icons/lens.png +0 -0
- data/app/assets/images/rademade_admin/icons/skin-nav-bullets.png +0 -0
- data/app/assets/images/rademade_admin/icons/table-icons.png +0 -0
- data/app/assets/images/rademade_admin/icons/table-img.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/animated-overlay.gif +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/slider-handler.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/slider-handler2.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/images/rademade_admin/logos/logo-white.png +0 -0
- data/app/assets/images/rademade_admin/logos/logo.png +0 -0
- data/app/assets/images/rademade_admin/notifier-loader-clean.gif +0 -0
- data/app/assets/images/rademade_admin/notifier-loader-plastic.gif +0 -0
- data/app/assets/images/rademade_admin/placeholders/new-gallery-img.png +0 -0
- data/app/assets/images/rademade_admin/placeholders/no-img-gallery.png +0 -0
- data/app/assets/images/rademade_admin/select2/select2.png +0 -0
- data/app/assets/images/rademade_admin/select2/select2x2.png +0 -0
- data/app/assets/images/rademade_admin/select2/spinner.gif +0 -0
- data/app/assets/images/rademade_admin/uniform/bg-input-focus.png +0 -0
- data/app/assets/images/rademade_admin/uniform/bg-input.png +0 -0
- data/app/assets/images/rademade_admin/uniform/sprite.png +0 -0
- data/app/assets/javascripts/rademade_admin.coffee +14 -0
- data/app/assets/javascripts/rademade_admin/app/app.coffee +1 -0
- data/app/assets/javascripts/rademade_admin/app/common/dnd-sort.coffee +42 -0
- data/app/assets/javascripts/rademade_admin/app/common/pagination.coffee +6 -0
- data/app/assets/javascripts/rademade_admin/app/common/related-index.coffee +54 -0
- data/app/assets/javascripts/rademade_admin/app/common/relation-list.coffee +109 -0
- data/app/assets/javascripts/rademade_admin/app/common/sort-list.coffee +47 -0
- data/app/assets/javascripts/rademade_admin/app/common/uploader.coffee +53 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/collection.coffee +20 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/initializer.coffee +43 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/model.coffee +4 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/view.coffee +57 -0
- data/app/assets/javascripts/rademade_admin/app/forms/insert.coffee +7 -0
- data/app/assets/javascripts/rademade_admin/app/forms/login.coffee +4 -0
- data/app/assets/javascripts/rademade_admin/app/forms/remove.coffee +6 -0
- data/app/assets/javascripts/rademade_admin/app/notifier/initialize.js +31 -0
- data/app/assets/javascripts/rademade_admin/detail_admin/theme.js +56 -0
- data/app/assets/javascripts/rademade_admin/form/form-ajax-submit.coffee +153 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.form-serialize.js +54 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.form.js +1121 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.formrestrict.js +27 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.validate.js +1231 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.validate.messages_ru.js +27 -0
- data/app/assets/javascripts/rademade_admin/library/backbone.js +1581 -0
- data/app/assets/javascripts/rademade_admin/library/bootstrap/bootstrap.datepicker.js +989 -0
- data/app/assets/javascripts/rademade_admin/library/bootstrap/bootstrap.js +1992 -0
- data/app/assets/javascripts/rademade_admin/library/ckeditor/config.js +12 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery-ui-1.10.4.custom.min.js +6 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.dataTables.js +12099 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.flot.js +2960 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.flot.resize.js +60 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.flot.stack.js +188 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.knob.js +661 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.tablednd.js +1 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.uniform.min.js +1 -0
- data/app/assets/javascripts/rademade_admin/library/notifier.custom.js +431 -0
- data/app/assets/javascripts/rademade_admin/library/notifier.custom.min.js +15 -0
- data/app/assets/javascripts/rademade_admin/library/underscore.js +1276 -0
- data/app/assets/javascripts/rademade_admin/library/wysihtml5-0.3.0.js +9463 -0
- data/app/assets/stylesheets/rademade_admin.css +14 -0
- data/app/assets/stylesheets/rademade_admin/base.scss.erb +23 -0
- data/app/assets/stylesheets/rademade_admin/bootstrap/bootstrap-overrides.css.erb +341 -0
- data/app/assets/stylesheets/rademade_admin/bootstrap/bootstrap.css.erb +5911 -0
- data/app/assets/stylesheets/rademade_admin/bootstrap/main.scss.erb +78 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/chart-showcase.scss.erb +33 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/datatables.scss.erb +3 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/elements.scss.erb +665 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/error.scss.erb +19 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/form-showcase.scss.erb +87 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/form-wizard.scss.erb +261 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/gallery.scss.erb +106 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/grids.scss.erb +21 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/icons.scss.erb +115 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/index.scss.erb +290 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/layout.scss.erb +523 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/new-user.scss.erb +49 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/personal-info.scss.erb +144 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/popup.scss.erb +3 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/signin.scss.erb +128 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/tables.scss.erb +195 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/ui-elements.scss.erb +177 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/user-list.scss.erb +112 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/user-profile.scss.erb +169 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/web-app-icons.scss.erb +25 -0
- data/app/assets/stylesheets/rademade_admin/edit.css +7 -0
- data/app/assets/stylesheets/rademade_admin/file-upload.scss.erb +12 -0
- data/app/assets/stylesheets/rademade_admin/lib/bootstrap.datepicker.css.erb +302 -0
- data/app/assets/stylesheets/rademade_admin/lib/jquery-ui-1.10.2.custom.css.erb +544 -0
- data/app/assets/stylesheets/rademade_admin/lib/morris.css.erb +2 -0
- data/app/assets/stylesheets/rademade_admin/lib/select2.css.erb +513 -0
- data/app/assets/stylesheets/rademade_admin/lib/uniform.default.css.erb +366 -0
- data/app/assets/stylesheets/rademade_admin/notifier.custom.css.erb +661 -0
- data/app/assets/stylesheets/rademade_admin/scaffolds.scss.erb +32 -0
- data/app/controllers/rademade_admin/abstract_controller.rb +24 -0
- data/app/controllers/rademade_admin/admin_users_controller.rb +16 -0
- data/app/controllers/rademade_admin/application_controller.rb +7 -0
- data/app/controllers/rademade_admin/dashboard_controller.rb +16 -0
- data/app/controllers/rademade_admin/model_controller.rb +122 -0
- data/app/controllers/rademade_admin/sessions_controller.rb +22 -0
- data/app/helpers/rademade_admin/field_helper.rb +27 -0
- data/app/helpers/rademade_admin/form_helper.rb +63 -0
- data/app/helpers/rademade_admin/menu_helper.rb +45 -0
- data/app/helpers/rademade_admin/name_helper.rb +17 -0
- data/app/helpers/rademade_admin/upload_preview_helper.rb +59 -0
- data/app/helpers/rademade_admin/uri_helper.rb +104 -0
- data/app/inputs/rademade_admin/admin_file_input.rb +70 -0
- data/app/inputs/rademade_admin/admin_select_input.rb +81 -0
- data/app/inputs/rademade_admin/admin_textarea_input.rb +5 -0
- data/app/inputs/rademade_admin/boolean_input.rb +13 -0
- data/app/models/rademade_admin/ability.rb +39 -0
- data/app/models/rademade_admin/user.rb +6 -0
- data/app/serializers/autocomplete_serializer.rb +46 -0
- data/app/services/form_builder.rb +3 -0
- data/app/services/loader_service.rb +7 -0
- data/app/services/login.rb +18 -0
- data/app/services/login/error.rb +17 -0
- data/app/services/model_controller/instance_options.rb +38 -0
- data/app/services/model_controller/linker.rb +49 -0
- data/app/services/model_controller/model_options.rb +39 -0
- data/app/services/model_controller/notifier.rb +40 -0
- data/app/services/model_controller/templates.rb +27 -0
- data/app/services/saver.rb +69 -0
- data/app/services/search/conditions/abstract.rb +53 -0
- data/app/services/search/conditions/autocomplete.rb +44 -0
- data/app/services/search/conditions/list.rb +35 -0
- data/app/services/search/query_adapter/abstract.rb +54 -0
- data/app/services/search/query_adapter/active_record.rb +33 -0
- data/app/services/search/query_adapter/mongoid.rb +33 -0
- data/app/services/search/searcher.rb +19 -0
- data/app/services/sortable_service.rb +37 -0
- data/app/services/video_service.rb +22 -0
- data/app/views/layouts/rademade_admin.html.erb +13 -0
- data/app/views/rademade_admin/_blocks/_form_control.html.erb +5 -0
- data/app/views/rademade_admin/_blocks/_header.html.erb +30 -0
- data/app/views/rademade_admin/_blocks/_menu.html.erb +41 -0
- data/app/views/rademade_admin/_blocks/_pagination.html.erb +18 -0
- data/app/views/rademade_admin/_blocks/_sub_menu.html.erb +19 -0
- data/app/views/rademade_admin/_blocks/sub_menu/_link.html.erb +5 -0
- data/app/views/rademade_admin/_layouts/inner.html.erb +37 -0
- data/app/views/rademade_admin/_layouts/inner/form.html.erb +15 -0
- data/app/views/rademade_admin/_layouts/inner/index_table.html.erb +59 -0
- data/app/views/rademade_admin/_layouts/inner/related_index_table.html.erb +55 -0
- data/app/views/rademade_admin/abstract/_form.html.erb +10 -0
- data/app/views/rademade_admin/abstract/edit.html.erb +9 -0
- data/app/views/rademade_admin/abstract/form.html.erb +1 -0
- data/app/views/rademade_admin/abstract/index.html.erb +77 -0
- data/app/views/rademade_admin/abstract/new.html.erb +9 -0
- data/app/views/rademade_admin/abstract/related_index.html.erb +78 -0
- data/app/views/rademade_admin/dashboard/index.html.erb +9 -0
- data/app/views/rademade_admin/dashboard/login.html.erb +31 -0
- data/config/initializers/devise.rb +250 -0
- data/config/initializers/routes.rb +3 -0
- data/config/locales/devise.en.yml +59 -0
- data/config/routes.rb +17 -0
- data/lib/rademade_admin.rb +26 -0
- data/lib/rademade_admin/configuration.rb +17 -0
- data/lib/rademade_admin/engine.rb +22 -0
- data/lib/rademade_admin/file_info_formatter.rb +12 -0
- data/lib/rademade_admin/hrml_buffer.rb +14 -0
- data/lib/rademade_admin/model/configuration.rb +52 -0
- data/lib/rademade_admin/model/configuration/fields.rb +33 -0
- data/lib/rademade_admin/model/data_adapter.rb +59 -0
- data/lib/rademade_admin/model/data_adapter/active_record.rb +53 -0
- data/lib/rademade_admin/model/data_adapter/mongoid.rb +49 -0
- data/lib/rademade_admin/model/graph.rb +36 -0
- data/lib/rademade_admin/model/info.rb +106 -0
- data/lib/rademade_admin/model/reflection.rb +31 -0
- data/lib/rademade_admin/model/reflection/data.rb +47 -0
- data/lib/rademade_admin/model/reflection/uploader.rb +18 -0
- data/lib/rademade_admin/routing.rb +3 -0
- data/lib/rademade_admin/routing/mapper.rb +42 -0
- data/lib/rademade_admin/routing/resource.rb +6 -0
- data/lib/rademade_admin/sortable.rb +12 -0
- data/lib/rademade_admin/uploader/photo.rb +13 -0
- data/lib/rademade_admin/uploader/video.rb +11 -0
- data/lib/rademade_admin/user.rb +16 -0
- data/lib/rademade_admin/version.rb +3 -0
- data/lib/tasks/rademade_admin_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/rademade_admin/posts_controller.rb +9 -0
- data/test/dummy/app/controllers/rademade_admin/users_controller.rb +14 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/post.rb +9 -0
- data/test/dummy/app/models/user.rb +7 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +29 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/rademade_admin.rb +3 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/mongoid.yml +6 -0
- data/test/dummy/config/routes.rb +8 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/rademade_admin_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +691 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
minimum = 0
|
2
|
+
|
3
|
+
sendSorted = (dataList) ->
|
4
|
+
$.ajax
|
5
|
+
type: "PATCH"
|
6
|
+
url: urlWithoutParams()
|
7
|
+
data:
|
8
|
+
sorted: dataList
|
9
|
+
minimum: minimum
|
10
|
+
|
11
|
+
|
12
|
+
initDnDSorting = ->
|
13
|
+
if isDnDSorting()
|
14
|
+
setMinimum()
|
15
|
+
$(".table-sortable").tableDnD
|
16
|
+
onDrop: (table, row) ->
|
17
|
+
rows = $(table).children('tr')
|
18
|
+
i = 0
|
19
|
+
resortedList = []
|
20
|
+
|
21
|
+
rows.each (index, item) ->
|
22
|
+
resortedList[i] = [ $(item).data('id'), item.id ]
|
23
|
+
i++
|
24
|
+
sendSorted(resortedList)
|
25
|
+
return
|
26
|
+
return
|
27
|
+
|
28
|
+
urlWithoutParams = ->
|
29
|
+
window.location.pathname + '/re_sort'
|
30
|
+
|
31
|
+
setMinimum = ->
|
32
|
+
minimum = $('.table-sortable').children('tr')[0].id
|
33
|
+
|
34
|
+
isDnDSorting = ->
|
35
|
+
first = window.location.search.indexOf('sort') == -1
|
36
|
+
second = $('.table-sortable').children('tr').length > 0
|
37
|
+
third = $('.table-sortable').data('position')
|
38
|
+
|
39
|
+
first && second && third
|
40
|
+
|
41
|
+
$ ->
|
42
|
+
$(document).on('ready page:load', initDnDSorting)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
getUrlParams = ->
|
2
|
+
pl = /\+/g
|
3
|
+
search = /([^&=]+)=?([^&]*)/g
|
4
|
+
|
5
|
+
decode = (s) ->
|
6
|
+
decodeURIComponent s.replace(pl, " ")
|
7
|
+
|
8
|
+
query = window.location.search.substring(1)
|
9
|
+
urlParams = {}
|
10
|
+
urlParams[decode(match[1])] = decode(match[2]) while match = search.exec(query)
|
11
|
+
|
12
|
+
urlParams
|
13
|
+
|
14
|
+
|
15
|
+
initSelect = ->
|
16
|
+
$item = $('.select2-add-link')
|
17
|
+
url = $item.data('relListUrl')
|
18
|
+
|
19
|
+
$item.select2(
|
20
|
+
multiple : false
|
21
|
+
placeholder : 'Enter search phrase'
|
22
|
+
|
23
|
+
initSelection : (element, callback) ->
|
24
|
+
ids = element.val().replace(/\s*/g, '').split(',')
|
25
|
+
$.getJSON(url, {search : {id : ids}}).done (data) ->
|
26
|
+
data = if isMultiple then data else data[0]
|
27
|
+
$item.select2('enable', true)
|
28
|
+
callback(data)
|
29
|
+
|
30
|
+
ajax :
|
31
|
+
url : url
|
32
|
+
dataType : 'json'
|
33
|
+
data : (term) -> {q: term}
|
34
|
+
results : (data) -> {results: data}
|
35
|
+
).on 'change', (e) ->
|
36
|
+
sendNew(e.added)
|
37
|
+
|
38
|
+
|
39
|
+
sendNew = (added) ->
|
40
|
+
$.ajax
|
41
|
+
url : ajax_link(added.id)
|
42
|
+
type : 'PUT'
|
43
|
+
data : getUrlParams()
|
44
|
+
success : ->
|
45
|
+
location.reload()
|
46
|
+
|
47
|
+
|
48
|
+
ajax_link = (id) ->
|
49
|
+
location.href.substring(0, location.href.indexOf(location.search)) + '/' + id + '/link_relation'
|
50
|
+
|
51
|
+
|
52
|
+
$ ->
|
53
|
+
$(document)
|
54
|
+
.on('ready page:load init-select', initSelect)
|
@@ -0,0 +1,109 @@
|
|
1
|
+
currentClass = []
|
2
|
+
|
3
|
+
initSelect = ->
|
4
|
+
$(".select-wrapper input[type='hidden']").each ->
|
5
|
+
initItem $(this)
|
6
|
+
|
7
|
+
initItem = ($item) ->
|
8
|
+
url = $item.data('relListUrl')
|
9
|
+
isMultiple = $item.data('relMultiple')
|
10
|
+
|
11
|
+
$item.select2(
|
12
|
+
multiple : isMultiple
|
13
|
+
placeholder : 'Enter search phrase'
|
14
|
+
|
15
|
+
initSelection : (element, callback) ->
|
16
|
+
ids = element.val().replace(/\s*/g, '').split(',')
|
17
|
+
$.getJSON(url, {search : {id : ids}}).done (data) ->
|
18
|
+
data = if isMultiple then data else data[0]
|
19
|
+
$item.select2('enable', true)
|
20
|
+
callback(data)
|
21
|
+
addTable($item) if isMultiple
|
22
|
+
hideTags()
|
23
|
+
|
24
|
+
ajax :
|
25
|
+
url : url
|
26
|
+
dataType : 'json'
|
27
|
+
data : (term) -> {q : term}
|
28
|
+
results : (data) -> {results : data}
|
29
|
+
).unbind('change').bind 'change', (e) ->
|
30
|
+
$select = $(this)
|
31
|
+
$table = $select.siblings('.select2-items-list')
|
32
|
+
addTable($select) if $table.length is 0
|
33
|
+
addItem(e.added, $table)
|
34
|
+
hideTags()
|
35
|
+
$item.select2('enable', false) if $item.val().length > 0
|
36
|
+
|
37
|
+
hideTags = ->
|
38
|
+
$('.select2-search-choice').hide()
|
39
|
+
|
40
|
+
addTable = ($item) ->
|
41
|
+
$parent = $item.parent()
|
42
|
+
$parent.children('.select2-items-list').remove()
|
43
|
+
$parent.append('<ul class="select2-items-list"></ul>')
|
44
|
+
|
45
|
+
$table = $parent.children('.select2-items-list')
|
46
|
+
|
47
|
+
$($item.select2('data')).each ->
|
48
|
+
addItem this, $table
|
49
|
+
|
50
|
+
$table.sortable
|
51
|
+
stop : ->
|
52
|
+
changeSelectValue($table, $item)
|
53
|
+
|
54
|
+
$table.disableSelection()
|
55
|
+
|
56
|
+
addItem = (item, $table) ->
|
57
|
+
$table.append(
|
58
|
+
"<li data-id='#{item.id}'>
|
59
|
+
<span>#{item.text}</span>
|
60
|
+
<button data-edit='#{item.edit_url}'>Edit</button>
|
61
|
+
<button data-remove>Delete</button>
|
62
|
+
</li>"
|
63
|
+
)
|
64
|
+
|
65
|
+
$("li[data-id='#{item.id}'] [data-remove]").unbind('click').bind 'click', (e) ->
|
66
|
+
e.preventDefault()
|
67
|
+
removeItem($(e.currentTarget).closest('li'), $table) if confirm 'Вы действительно хотите удалить данную модель?'
|
68
|
+
|
69
|
+
removeItem = ($li, $table) ->
|
70
|
+
$li.remove()
|
71
|
+
changeSelectValue $table, $table.siblings('.select-wrapper')
|
72
|
+
|
73
|
+
changeSelectValue = ($table, $input) ->
|
74
|
+
itemsList = []
|
75
|
+
|
76
|
+
$table.children('li').each ->
|
77
|
+
$li = $(this)
|
78
|
+
itemsList.push({ id : $li.data('id'), text : $li.text() })
|
79
|
+
|
80
|
+
$input.select2('data', itemsList)
|
81
|
+
hideTags()
|
82
|
+
|
83
|
+
getId = (data) ->
|
84
|
+
if data.data._id
|
85
|
+
return data.data._id.$oid
|
86
|
+
else
|
87
|
+
return data.data.id
|
88
|
+
|
89
|
+
selectOnSubmit = (e, modelClassName, data) ->
|
90
|
+
dataId = getId(data)
|
91
|
+
$select = $(".select-wrapper [data-rel-class='#{modelClassName}']")
|
92
|
+
newData = []
|
93
|
+
if $select.data('relMultiple')
|
94
|
+
newData.push($select.val()) if $select.val()
|
95
|
+
newData.push(dataId)
|
96
|
+
else
|
97
|
+
newData = dataId
|
98
|
+
$select.select2('destroy')
|
99
|
+
$select.val(newData)
|
100
|
+
initItem($select)
|
101
|
+
|
102
|
+
selectCurrent = (event, data) ->
|
103
|
+
currentClass.push(data)
|
104
|
+
|
105
|
+
|
106
|
+
$ ->
|
107
|
+
$(document)
|
108
|
+
.on('ready page:load init-select', initSelect)
|
109
|
+
.on('form-saved', selectOnSubmit)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
swapDirection = (sortDirection) ->
|
3
|
+
if sortDirection == 'asc'
|
4
|
+
sortDirection = 'desc'
|
5
|
+
else
|
6
|
+
sortDirection = 'asc'
|
7
|
+
|
8
|
+
getUrlParams = ->
|
9
|
+
pl = /\+/g
|
10
|
+
search = /([^&=]+)=?([^&]*)/g
|
11
|
+
|
12
|
+
decode = (s) ->
|
13
|
+
decodeURIComponent s.replace(pl, " ")
|
14
|
+
|
15
|
+
query = window.location.search.substring(1)
|
16
|
+
urlParams = {}
|
17
|
+
urlParams[decode(match[1])] = decode(match[2]) while match = search.exec(query)
|
18
|
+
|
19
|
+
urlParams
|
20
|
+
|
21
|
+
paramsToString = (params)->
|
22
|
+
str = []
|
23
|
+
for param of params
|
24
|
+
str.push(param + '=' + params[param])
|
25
|
+
str.join('&')
|
26
|
+
|
27
|
+
initSorting = ->
|
28
|
+
params = getUrlParams()
|
29
|
+
|
30
|
+
params['direction'] ?= 'asc'
|
31
|
+
|
32
|
+
$('.sort-button').click ->
|
33
|
+
params['direction'] = if $(@).data('column') == params['sort']
|
34
|
+
swapDirection(params['direction'])
|
35
|
+
else
|
36
|
+
'asc'
|
37
|
+
|
38
|
+
params['sort'] = $(@).data('column')
|
39
|
+
params['page'] ?= '1'
|
40
|
+
|
41
|
+
query_string = paramsToString(params)
|
42
|
+
|
43
|
+
Turbolinks.visit(window.location.pathname+'?'+query_string)
|
44
|
+
|
45
|
+
$ ->
|
46
|
+
|
47
|
+
$(document).on('ready page:load', initSorting)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
initUploader = ->
|
2
|
+
|
3
|
+
window.bindFileUploader = ($el, $wrapper) ->
|
4
|
+
@$el = $el
|
5
|
+
@$wrapper = $wrapper
|
6
|
+
this
|
7
|
+
|
8
|
+
bindFileUploader::submitFile = (e, $form) ->
|
9
|
+
@_setUploadProgress(0)
|
10
|
+
@_showUploader()
|
11
|
+
$form.submit().done =>
|
12
|
+
@_appendUploadResult.apply(this, arguments)
|
13
|
+
|
14
|
+
bindFileUploader::uploadDone = () ->
|
15
|
+
@_hideUploader()
|
16
|
+
|
17
|
+
bindFileUploader::uploadError = () ->
|
18
|
+
@_hideUploader()
|
19
|
+
|
20
|
+
bindFileUploader::updateUploadProggress = (data) ->
|
21
|
+
progress = parseInt(data.loaded / data.total * 100, 10)
|
22
|
+
@_setUploadProgress(progress)
|
23
|
+
|
24
|
+
bindFileUploader::_showUploader = ->
|
25
|
+
@$wrapper.find('.upload-progress-wrapper').show()
|
26
|
+
|
27
|
+
bindFileUploader::_hideUploader = ->
|
28
|
+
@$wrapper.find('.upload-progress-wrapper').hide()
|
29
|
+
|
30
|
+
bindFileUploader::_setUploadProgress = (progress) ->
|
31
|
+
@$wrapper.find('.upload-progress').width(progress + '%')
|
32
|
+
|
33
|
+
bindFileUploader::_appendUploadResult = (result)->
|
34
|
+
@$wrapper.find('.image-preview-wrapper').replaceWith(result.html)
|
35
|
+
@$wrapper.find('.hidden').val(result.file[@$el.data('column')].url)
|
36
|
+
|
37
|
+
bindFileUploader::init = () ->
|
38
|
+
#todo url take from dom
|
39
|
+
@$el.fileupload
|
40
|
+
dataType : 'json'
|
41
|
+
url : @$el.data('url')
|
42
|
+
formData : _.pick(@$el.data(), 'id', 'saved', 'model', 'column', 'uploader')
|
43
|
+
add : => @submitFile.apply(this, arguments)
|
44
|
+
done : => @uploadDone.apply(this, arguments)
|
45
|
+
error : => @uploadError.apply(this, arguments)
|
46
|
+
progressall : => @updateUploadProggress.apply(this, arguments)
|
47
|
+
|
48
|
+
$('.uploader-input-file').each (index, el) ->
|
49
|
+
$el = $(el)
|
50
|
+
(new bindFileUploader($el, $el.closest('.uploader-wrapper'))).init()
|
51
|
+
|
52
|
+
$ ->
|
53
|
+
$(document).on('page:load ready init-uploader', initUploader)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class @FormPopup.Collection extends Backbone.Collection
|
2
|
+
|
3
|
+
lastModel : undefined
|
4
|
+
|
5
|
+
initialize : () ->
|
6
|
+
@on 'add', @showModel
|
7
|
+
@on 'remove', @onModelRemove
|
8
|
+
|
9
|
+
getModelWithClass : (modelClassName) ->
|
10
|
+
@findWhere
|
11
|
+
modelClassName : modelClassName
|
12
|
+
|
13
|
+
showModel : (model) =>
|
14
|
+
@lastModel.trigger('hide') if @lastModel
|
15
|
+
@lastModel = model
|
16
|
+
model.trigger 'show'
|
17
|
+
|
18
|
+
onModelRemove : () =>
|
19
|
+
@lastModel = @last()
|
20
|
+
@lastModel.trigger('show') if @lastModel
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class @FormPopup.Initializer extends Backbone.View
|
2
|
+
|
3
|
+
_popups : undefined
|
4
|
+
|
5
|
+
events :
|
6
|
+
'click .relation-add-button' : 'onRelationAdd'
|
7
|
+
'click [data-edit]' : 'onRelationEdit'
|
8
|
+
|
9
|
+
initialize : () ->
|
10
|
+
@_popups = new FormPopup.Collection
|
11
|
+
|
12
|
+
onRelationAdd : (e) ->
|
13
|
+
e.preventDefault()
|
14
|
+
$button = $ e.currentTarget
|
15
|
+
@showPopup $button.data('class'), $button.data('new')
|
16
|
+
|
17
|
+
onRelationEdit : (e) ->
|
18
|
+
e.preventDefault()
|
19
|
+
$button = $ e.currentTarget
|
20
|
+
@showPopup $button.closest('.select-wrapper').data('rel-class'), $button.data('edit')
|
21
|
+
|
22
|
+
showPopup : (modelClassName, url) ->
|
23
|
+
popupModel = @_popups.getModelWithClass modelClassName
|
24
|
+
if popupModel
|
25
|
+
@_popups.showModel popupModel
|
26
|
+
else
|
27
|
+
@createPopup modelClassName, url
|
28
|
+
|
29
|
+
createPopup : (modelClassName, url) ->
|
30
|
+
popupModel = new FormPopup.Model
|
31
|
+
modelClassName : modelClassName
|
32
|
+
popupView = FormPopup.View.init popupModel, url
|
33
|
+
@_popups.add popupView.model
|
34
|
+
@$el.append popupView.$el
|
35
|
+
|
36
|
+
formPopup = undefined
|
37
|
+
|
38
|
+
$(document).on 'ready page:load', () =>
|
39
|
+
formPopup = new @FormPopup.Initializer
|
40
|
+
el : document.getElementById 'pad-wrapper'
|
41
|
+
|
42
|
+
$(document).on 'show:popup', (e, modelClassName, url) =>
|
43
|
+
formPopup.showPopup modelClassName, url
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class @FormPopup.View extends Backbone.View
|
2
|
+
|
3
|
+
className : 'add_new_popup soft-hide'
|
4
|
+
|
5
|
+
events :
|
6
|
+
'click .reset' : 'onReset'
|
7
|
+
|
8
|
+
initialize : () ->
|
9
|
+
@model.on 'show', () =>
|
10
|
+
@$el.show()
|
11
|
+
@model.on 'hide', () =>
|
12
|
+
@$el.hide()
|
13
|
+
|
14
|
+
onReset : (e) ->
|
15
|
+
e.preventDefault()
|
16
|
+
@closePopup()
|
17
|
+
|
18
|
+
closePopup : () ->
|
19
|
+
@model.destroy()
|
20
|
+
@undelegateEvents()
|
21
|
+
@$el.remove()
|
22
|
+
|
23
|
+
renderFromUrl : (url) ->
|
24
|
+
$.get url, (html) =>
|
25
|
+
@$el.html html
|
26
|
+
@delegateEvents()
|
27
|
+
@_init()
|
28
|
+
|
29
|
+
_init : () ->
|
30
|
+
$form = @$el.find 'form'
|
31
|
+
if $form.length > 0
|
32
|
+
@_initPlugins()
|
33
|
+
@_initForm $form
|
34
|
+
else
|
35
|
+
@_bindButton()
|
36
|
+
|
37
|
+
_initPlugins : () ->
|
38
|
+
$(document)
|
39
|
+
.trigger('init-select')
|
40
|
+
.trigger('init-uploader')
|
41
|
+
|
42
|
+
_initForm : ($form) ->
|
43
|
+
(new FormAjaxSubmit($form)).init()
|
44
|
+
$form.on 'ajax-submit-done', (e, data) =>
|
45
|
+
$(document).trigger 'form-saved', [@model.get('modelClassName'), data]
|
46
|
+
@closePopup()
|
47
|
+
|
48
|
+
_bindButton : () ->
|
49
|
+
@$el.find('button').click (e) =>
|
50
|
+
@renderFromUrl $(e.currentTarget).data('new')
|
51
|
+
|
52
|
+
|
53
|
+
@FormPopup.View.init = (popupModel, url) ->
|
54
|
+
popupView = new FormPopup.View
|
55
|
+
model : popupModel
|
56
|
+
popupView.renderFromUrl url
|
57
|
+
popupView
|