cas-cms 0.1.0

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.
Files changed (126) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +43 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/config/cas_manifest.js +2 -0
  6. data/app/assets/images/cas/black-star.svg +4 -0
  7. data/app/assets/images/cas/check.svg +4 -0
  8. data/app/assets/images/cas/dropzone-in.svg +4 -0
  9. data/app/assets/images/cas/loading.gif +0 -0
  10. data/app/assets/images/cas/white-star.svg +4 -0
  11. data/app/assets/javascripts/cas/application.js +51 -0
  12. data/app/assets/javascripts/cas/fileupload_manifest.js +269 -0
  13. data/app/assets/javascripts/cas/plugins/cas_image_gallery.js +353 -0
  14. data/app/assets/javascripts/cas/vendor/file_upload/canvas-to-blob.min.js +2 -0
  15. data/app/assets/javascripts/cas/vendor/file_upload/jquery.fileupload-image.js +326 -0
  16. data/app/assets/javascripts/cas/vendor/file_upload/jquery.fileupload-process.js +178 -0
  17. data/app/assets/javascripts/cas/vendor/file_upload/jquery.fileupload.js +1482 -0
  18. data/app/assets/javascripts/cas/vendor/file_upload/jquery.iframe-transport.js +224 -0
  19. data/app/assets/javascripts/cas/vendor/file_upload/jquery.ui.widget.js +572 -0
  20. data/app/assets/javascripts/cas/vendor/file_upload/load-image.all.min.js +2 -0
  21. data/app/assets/javascripts/cas/vendor/jquery.ui.touch-punch.min.js +11 -0
  22. data/app/assets/javascripts/cas/vendor/selectize.min.js +3 -0
  23. data/app/assets/stylesheets/cas/application.sass +17 -0
  24. data/app/assets/stylesheets/cas/colors.sass +6 -0
  25. data/app/assets/stylesheets/cas/form.sass +99 -0
  26. data/app/assets/stylesheets/cas/layout.sass +68 -0
  27. data/app/assets/stylesheets/cas/mixins.sass +34 -0
  28. data/app/assets/stylesheets/cas/plugins/attachments_form.sass +16 -0
  29. data/app/assets/stylesheets/cas/plugins/image_gallery.sass +128 -0
  30. data/app/assets/stylesheets/cas/tables.sass +13 -0
  31. data/app/assets/stylesheets/cas/typography.sass +27 -0
  32. data/app/assets/stylesheets/cas/vendors/selectize.default.css +394 -0
  33. data/app/assets/stylesheets/cas/vendors/simplegrid.css +298 -0
  34. data/app/controllers/cas/api/files_controller.rb +88 -0
  35. data/app/controllers/cas/application_controller.rb +17 -0
  36. data/app/controllers/cas/devise/sessions_controller.rb +9 -0
  37. data/app/controllers/cas/file_uploads_controller.rb +14 -0
  38. data/app/controllers/cas/sections/application_controller.rb +23 -0
  39. data/app/controllers/cas/sections/categories_controller.rb +47 -0
  40. data/app/controllers/cas/sections/contents_controller.rb +144 -0
  41. data/app/controllers/cas/sections_controller.rb +7 -0
  42. data/app/controllers/cas/users_controller.rb +61 -0
  43. data/app/helpers/cas/application_helper.rb +4 -0
  44. data/app/helpers/cas/form_helper.rb +11 -0
  45. data/app/jobs/cas/application_job.rb +4 -0
  46. data/app/jobs/cas/images/delete_job.rb +11 -0
  47. data/app/jobs/cas/images/promote_job.rb +11 -0
  48. data/app/jobs/cas/increment_pageviews_job.rb +11 -0
  49. data/app/models/cas/application_record.rb +5 -0
  50. data/app/models/cas/category.rb +6 -0
  51. data/app/models/cas/content.rb +59 -0
  52. data/app/models/cas/media_file.rb +77 -0
  53. data/app/models/cas/section.rb +10 -0
  54. data/app/models/cas/site.rb +5 -0
  55. data/app/models/cas/user.rb +39 -0
  56. data/app/uploaders/file_uploader.rb +26 -0
  57. data/app/views/cas/devise/sessions/new.html.erb +24 -0
  58. data/app/views/cas/sections/categories/_form.html.erb +19 -0
  59. data/app/views/cas/sections/categories/edit.html.erb +5 -0
  60. data/app/views/cas/sections/categories/index.html.erb +28 -0
  61. data/app/views/cas/sections/categories/new.html.erb +5 -0
  62. data/app/views/cas/sections/contents/_form_attachments.html.erb +42 -0
  63. data/app/views/cas/sections/contents/_form_attachments_template.html.erb +11 -0
  64. data/app/views/cas/sections/contents/_form_for_content.html.erb +85 -0
  65. data/app/views/cas/sections/contents/_form_for_survey.html.erb +36 -0
  66. data/app/views/cas/sections/contents/_form_images.html.erb +86 -0
  67. data/app/views/cas/sections/contents/edit.html.erb +6 -0
  68. data/app/views/cas/sections/contents/index.html.erb +71 -0
  69. data/app/views/cas/sections/contents/new.html.erb +5 -0
  70. data/app/views/cas/sections/index.html.erb +21 -0
  71. data/app/views/cas/shared/_error_messages.html.erb +12 -0
  72. data/app/views/cas/users/_form.html.erb +11 -0
  73. data/app/views/cas/users/edit.html.erb +2 -0
  74. data/app/views/cas/users/index.html.erb +34 -0
  75. data/app/views/cas/users/new.html.erb +2 -0
  76. data/app/views/layouts/cas/application.html.erb +71 -0
  77. data/config/initializers/acts_as_taggable.rb +1 -0
  78. data/config/initializers/devise.rb +277 -0
  79. data/config/initializers/shrine.rb +50 -0
  80. data/config/initializers/simple_form.rb +169 -0
  81. data/config/locales/devise.en.yml +64 -0
  82. data/config/locales/pt-BR.yml +242 -0
  83. data/config/locales/simple_form.en.yml +31 -0
  84. data/config/routes.rb +31 -0
  85. data/db/migrate/20170129212144_create_cas_sites.rb +15 -0
  86. data/db/migrate/20170219172958_create_cas_sections.rb +12 -0
  87. data/db/migrate/20170219175007_create_cas_contents.rb +17 -0
  88. data/db/migrate/20170612204500_create_cas_users.rb +14 -0
  89. data/db/migrate/20170613174724_create_cas_media_files.rb +20 -0
  90. data/db/migrate/20170613175912_create_cas_categories.rb +14 -0
  91. data/db/migrate/20170614171928_add_columns_to_cas_contents.rb +12 -0
  92. data/db/migrate/20170614172904_add_column_to_cas_sections.rb +6 -0
  93. data/db/migrate/20170615235532_add_devise_to_cas_users.rb +49 -0
  94. data/db/migrate/20170616011202_remove_password_from_cas_users.rb +5 -0
  95. data/db/migrate/20170618014204_v3_migration_fields.rb +30 -0
  96. data/db/migrate/20170623182702_add_column_category_id_to_cas_content.rb +6 -0
  97. data/db/migrate/20170624024648_rename_url_to_path_in_files.rb +7 -0
  98. data/db/migrate/20170625192119_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +36 -0
  99. data/db/migrate/20170625192120_add_missing_unique_indices.acts_as_taggable_on_engine.rb +26 -0
  100. data/db/migrate/20170625192121_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +20 -0
  101. data/db/migrate/20170625192122_add_missing_taggable_index.acts_as_taggable_on_engine.rb +15 -0
  102. data/db/migrate/20170625192123_change_collation_for_tag_names.acts_as_taggable_on_engine.rb +15 -0
  103. data/db/migrate/20170625192124_add_missing_indexes_on_taggings.acts_as_taggable_on_engine.rb +23 -0
  104. data/db/migrate/20170713210101_add_location_to_cas_content.rb +5 -0
  105. data/db/migrate/20170714043036_add_url_to_content.rb +5 -0
  106. data/db/migrate/20170718201535_add_embedded_to_content.rb +5 -0
  107. data/db/migrate/20170801171952_categories_with_jsonb_metadata.rb +6 -0
  108. data/db/migrate/20170801173256_add_published_at_to_cas_contents.rb +6 -0
  109. data/db/migrate/20170801175407_add_description_to_cas_categories.rb +5 -0
  110. data/db/migrate/20170830000000_add_data_search_extensions.rb +17 -0
  111. data/db/migrate/20170830000001_add_search_index_to_cas_contents.rb +20 -0
  112. data/db/migrate/20170830000002_use_uuid_with_acts_as_taggable_references.rb +17 -0
  113. data/db/migrate/20170919181809_pageviews_default_to_zero.rb +9 -0
  114. data/db/migrate/20171201191059_add_domains_to_cas_site.rb +6 -0
  115. data/lib/cas.rb +22 -0
  116. data/lib/cas/config.rb +42 -0
  117. data/lib/cas/engine.rb +33 -0
  118. data/lib/cas/form_field.rb +54 -0
  119. data/lib/cas/remote_callbacks.rb +36 -0
  120. data/lib/cas/section_config.rb +84 -0
  121. data/lib/cas/setup.rb +43 -0
  122. data/lib/cas/version.rb +3 -0
  123. data/lib/devise/custom_failure.rb +16 -0
  124. data/lib/tasks/cas_tasks.rake +4 -0
  125. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  126. metadata +560 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9b88802ff9371e54ee620c776c90e53077379d80
4
+ data.tar.gz: c5df9bfa6966724c9c87fcff5d44116a60d95910
5
+ SHA512:
6
+ metadata.gz: e75b570c8b02a11c99a2239cdb0024107498169ff1fe1152f7c296837c72409a0453d09aaec614b52ad1934e86559af06389ae68311f084ce19a51e2102a7ed4
7
+ data.tar.gz: 920b28f837047f0539179e7a3bb0f0e512bae04975a9f8ac3ff69d3ec94ec0b0f48f40da9317627d9ea92396a9a876c48fc83de2dd4834343a9809175a2ce81a
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Thayná de Oliveira
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ # Cas
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cas'
13
+ ```
14
+
15
+ ### Setup
16
+
17
+ **Engine:** Cas is mounted in your main Rails application. Say your application
18
+ is called MyBlog, you make can make it accessible at `myblog.com/admin`
19
+ by setting the following in the `config/routes.rb` file in your main
20
+ application:
21
+
22
+ ```ruby
23
+ Rails.application.routes.draw do
24
+ mount Cas::Engine, at: "/admin"
25
+
26
+ # ... other routes
27
+ end
28
+ ```
29
+
30
+ **S3:** you need S3 credentials to use Cas (for file uploads). Set the
31
+ following ENV vars (e.g paste in your `~/.bash_profile` or use the `dotenv`
32
+ gem in your main Rails application):
33
+
34
+ export S3_ACCESS_KEY_ID="value"
35
+ export S3_SECRET_ACCESS_KEY="value"
36
+ export S3_REGION="value"
37
+ export S3_BUCKET="value"
38
+
39
+ ## Contributing
40
+ Contribution directions go here.
41
+
42
+ ## License
43
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Cas'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/test_app/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ require 'bundler/gem_tasks'
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/cas .js
2
+ //= link_directory ../stylesheets/cas .css
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="m50 25l8.1133 16.348 17.887 2.75-12.871 12.855 2.9375 18.047-16.07-8.4023-16.07 8.4023 2.9375-18.047-12.871-12.855 17.887-2.75z"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg fill="#FFFFFF" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="m35.418 80.832l-17.5-17.5 5.832-5.832 11.668 11.668 40.832-40.836 5.832 5.8359z"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg fill="#FFFFFF" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="m69.535 95.832h-4.1016c-1.1484 0-2.082 0.93359-2.082 2.082 0 1.1484 0.93359 2.082 2.082 2.082h4.1016c1.1484 0 2.082-0.93359 2.082-2.082 0-1.1484-0.92969-2.082-2.082-2.082zm21.352-54.027c1 0.21094 1.9453 0.67969 2.7266 1.3398 0.39453 0.33203 0.875 0.49609 1.3516 0.49609 0.58984 0 1.1758-0.25 1.5859-0.73438 0.74609-0.875 0.63672-2.1914-0.23828-2.9375-1.3086-1.1133-2.8828-1.8906-4.5586-2.2461-1.0977-0.23047-2.2344 0.48047-2.4766 1.6055-0.23047 1.1289 0.48828 2.2383 1.6094 2.4766zm-33.656 54.027h-4.1016c-1.1484 0-2.082 0.93359-2.082 2.082 0 1.1484 0.93359 2.082 2.082 2.082h4.1016c1.1484 0 2.082-0.93359 2.082-2.082 0-1.1484-0.92969-2.082-2.082-2.082zm-15.562-8.4531v-4.1055c0-1.1484-0.93359-2.082-2.082-2.082-1.1523 0-2.0859 0.93359-2.0859 2.082v4.1055c0 1.1484 0.93359 2.082 2.082 2.082 1.1523 0 2.0859-0.92578 2.0859-2.082zm4.0547 8.0586c-0.95703-0.35938-1.8242-0.95703-2.5039-1.7344-0.75781-0.86719-2.0742-0.94922-2.9375-0.19141-0.86719 0.75781-0.95312 2.0742-0.19531 2.9414 1.1289 1.293 2.5703 2.2891 4.1719 2.8867 0.24609 0.085937 0.48828 0.13281 0.73438 0.13281 0.83984 0 1.6367-0.51562 1.9492-1.3555 0.39844-1.0742-0.14844-2.2812-1.2188-2.6797zm52.195-24.02c-1.1484 0-2.082 0.93359-2.082 2.082v4.1016c0 1.1484 0.93359 2.082 2.082 2.082 1.1484 0 2.082-0.93359 2.082-2.082v-4.1016c0-1.1484-0.93359-2.082-2.082-2.082zm0-12.305c-1.1484 0-2.082 0.93359-2.082 2.082v4.1016c0 1.1484 0.93359 2.082 2.082 2.082 1.1484 0 2.082-0.93359 2.082-2.082v-4.1016c0-1.1523-0.93359-2.082-2.082-2.082zm0-12.309c-1.1484 0-2.082 0.93359-2.082 2.082v4.1016c0 1.1484 0.93359 2.082 2.082 2.082 1.1484 0 2.082-0.93359 2.082-2.082v-4.1016c0-1.1484-0.93359-2.082-2.082-2.082zm0 36.918c-1.1484 0-2.082 0.93359-2.082 2.082l-0.007813 4.0195 2.082 0.078125 2.0898-0.32031v-3.7773c0-1.1523-0.93359-2.082-2.082-2.082zm-5.0859 11.203c-0.875 0.53516-1.875 0.84766-2.8984 0.89844-1.1484 0.0625-2.0273 1.043-1.9727 2.1914 0.058593 1.1133 0.97656 1.9766 2.0781 1.9766h0.10938c1.7109-0.089844 3.3906-0.61328 4.8555-1.5078 0.98438-0.60156 1.293-1.8828 0.69141-2.8672-0.59766-0.98828-1.8906-1.2891-2.8633-0.69141zm-10.984 0.90625h-4.1016c-1.1484 0-2.082 0.93359-2.082 2.082 0 1.1484 0.93359 2.082 2.082 2.082h4.1016c1.1484 0 2.082-0.93359 2.082-2.082 0-1.1484-0.93359-2.082-2.082-2.082zm-8.9297-56.25c0-1.1484-0.93359-2.082-2.0859-2.082h-1.4453c-0.35938-0.41406-0.64844-0.87109-1.0391-1.2617l-5.8477-5.8516v-19.969c0-5.7422-4.6719-10.418-10.418-10.418h-41.668c-5.7422 0-10.414 4.6758-10.414 10.418v41.668c0 5.7383 4.6719 10.414 10.418 10.414h20.832c1.1484 0 2.082-0.93359 2.082-2.082 0-1.1523-0.93359-2.0859-2.082-2.0859h-20.832c-3.4453 0-6.25-2.8047-6.25-6.25v-31.25h54.168v7.2969c-2.0156-0.3125-4.1484 0.16406-5.6406 1.6484-0.74609 0.74609-1.293 1.6406-1.6016 2.6172-2.2891-0.78516-4.9844-0.20312-6.7344 1.5508-0.93359 0.93359-1.5469 2.0977-1.793 3.3672-1.9961-0.28906-4.0586 0.39453-5.5 1.8398-1.2305 1.2266-1.9023 2.8633-1.9023 4.6016 0 0.15234 0.003907 0.30469 0.015626 0.45312-1.4023 0.1875-2.6953 0.82812-3.7148 1.8477-2.5352 2.5352-2.5352 6.6641 0 9.1953l1.8672 1.8633v7.4727c0 3.3945 1.6523 6.3828 4.1758 8.2891 0 0.011719-0.007812 0.023438-0.007812 0.042969v2.082c0 1.1484 0.93359 2.082 2.082 2.082 1.1523 0 2.0859-0.93359 2.0859-2.082v-0.21094c0.67188 0.13672 1.3711 0.21094 2.082 0.21094h8.543c12.52 0 22.707-10.188 22.707-22.707 0-3.9492-1.0977-7.6953-2.9766-11.047 0.52734-0.375 0.89453-0.96094 0.89453-1.6641zm-62.5-27.082c-1.1523 0-2.0859-0.93359-2.0859-2.082 0-1.1523 0.93359-2.0859 2.0859-2.0859 1.1484 0 2.082 0.93359 2.082 2.0859 0 1.1484-0.93359 2.082-2.082 2.082zm8.332 0c-1.1484 0-2.082-0.93359-2.082-2.082 0-1.1523 0.93359-2.0859 2.082-2.0859s2.082 0.93359 2.082 2.0859c0 1.1484-0.93359 2.082-2.082 2.082zm8.332 0c-1.1484 0-2.082-0.93359-2.082-2.082 0-1.1523 0.93359-2.0859 2.082-2.0859 1.1523 0 2.0859 0.93359 2.0859 2.0859 0 1.1484-0.93359 2.082-2.0859 2.082zm56.055 25h-4.1016c-1.1484 0-2.082 0.93359-2.082 2.082 0 1.1484 0.93359 2.082 2.082 2.082h4.1016c1.1484 0 2.082-0.93359 2.082-2.082 0.003906-1.1484-0.92969-2.082-2.082-2.082z"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg fill="#FFFFFF" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="m50 25l8.1133 16.348 17.887 2.75-12.871 12.855 2.9375 18.047-16.07-8.4023-16.07 8.4023 2.9375-18.047-12.871-12.855 17.887-2.75z"/>
4
+ </svg>
@@ -0,0 +1,51 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require tinymce-jquery
4
+ //= require cas/vendor/selectize.min
5
+ //= require_self
6
+
7
+ $(document).ready(function() {
8
+ $(".js-tags").selectize({
9
+ plugins: ['restore_on_backspace', 'remove_button'],
10
+ delimiter: ',',
11
+ persist: true,
12
+ preload: false,
13
+ render: {
14
+ option_create: function(item, escape) {
15
+ var input = item.input;
16
+ return '<div class="create">' +
17
+ (input ? '<span class="caption">Criar <b>' + escape(input) + '</b></span>' : '') +
18
+ '</div>';
19
+ },
20
+ },
21
+ create: function(input) {
22
+ return {
23
+ value: input,
24
+ text: input
25
+ }
26
+ },
27
+ onInitialize: function(){
28
+ var selectize = this;
29
+ var data = this.$input.data('autocomplete');
30
+ selectize.addOption(data);
31
+ }
32
+ });
33
+
34
+ tinyMCE.init({
35
+ selector: 'textarea.editor',
36
+ mode : "exact",
37
+ relative_urls : false,
38
+ convert_urls : 0, // default 1
39
+ pagebreak_separator : '<br clear="all" class="pagebreak" />',
40
+ height : '350',
41
+ convert_fonts_to_spans : true,
42
+ font_size_style_values : "8pt,10pt,12pt,14pt,18pt,24pt,36pt",
43
+ inline_styles: false,
44
+ extended_valid_elements: "embed,param,object,iframe[src|title|width|height|allowfullscreen|frameborder]",
45
+ language : "pt_BR",
46
+ plugins : 'image,imagetools,code,paste,pagebreak,table,wordcount,link',
47
+ default_link_target: "_blank",
48
+ images_upload_url: paths.fileUpload.path,
49
+ images_upload_credentials: true
50
+ });
51
+ });
@@ -0,0 +1,269 @@
1
+ // jquery already loaded
2
+ //= require jquery-ui/widgets/sortable
3
+ //= require cas/vendor/jquery.ui.touch-punch.min.js
4
+ //
5
+ // widget needs only when jquery ui is not included
6
+ // require cas/vendor/file_upload/jquery.ui.widget
7
+ //= require cas/vendor/file_upload/load-image.all.min
8
+ //= require cas/vendor/file_upload/canvas-to-blob.min
9
+ //= require cas/vendor/file_upload/jquery.iframe-transport
10
+ //= require cas/vendor/file_upload/jquery.fileupload
11
+ //= require cas/vendor/file_upload/jquery.fileupload-process
12
+ //= require cas/vendor/file_upload/jquery.fileupload-image
13
+ //= require cas/plugins/cas_image_gallery
14
+ //= require_self
15
+ var gallery;
16
+
17
+ /**
18
+ * Shared functions
19
+ *
20
+ * These are functions that are used for both images and generic attachments.
21
+ */
22
+ var UploadSharedFunctions = {
23
+ progress: function(e, data) {
24
+ var progress = parseInt(data.loaded / data.total * 100, 10);
25
+ var percentage = progress.toString() + '%'
26
+ data.progressBar.find(".progress-bar").css("width", percentage);
27
+ data.progressBar.find(".name").html(percentage);
28
+ },
29
+ fail: function(e, data) {
30
+ console.log("error", e);
31
+ console.log("data", data);
32
+ data.progressBar.remove();
33
+ alert('Falha ao enviar arquivo: '+data.files[0].name);
34
+ }
35
+ };
36
+
37
+ /**
38
+ * Image gallery upload functions
39
+ *
40
+ * These functions are only used by the upload mechanism intented for the upload
41
+ * of images for the gallery, not general attachments.
42
+ */
43
+ var ImageGalleryUploadFunctions = {
44
+ add: function(e, data) {
45
+ var acceptFileTypes = /^image\/(gif|jpe?g|png|tiff)$/i;
46
+
47
+ for (var index in data.originalFiles) {
48
+ var file = data.originalFiles[index];
49
+ if(file['type'].length && !acceptFileTypes.test(file['type'])) {
50
+ alert('O arquivo enviado não é uma imagem.');
51
+ return false;
52
+ }
53
+ }
54
+
55
+ var that = this;
56
+
57
+ data.progressBar = $('<div class="progress-status"><span class="name">&nbsp;</span><div class="progress-bar"></div></div>');
58
+ $(this).after(data.progressBar);
59
+
60
+ var options = {
61
+ extension: data.files[0].name.match(/(\.\w+)?$/)[0], // set extension
62
+ _: Date.now(), // prevent caching
63
+ }
64
+
65
+ $.getJSON('/admin/files/cache/presign', options, function(result) {
66
+ console.log("image: presign result", result);
67
+ console.log("image: now will submit file to S3 URL: ", result["url"]);
68
+ data.formData = result['fields'];
69
+ data.url = result['url'];
70
+ data.paramName = 'file';
71
+ $.blueimp.fileupload.prototype.options.add.call(that, e, data);
72
+ data.submit();
73
+ });
74
+ },
75
+ done: function(e, data) {
76
+ console.log("Image: upload done! Now posting to /admin/api/files", data.formData);
77
+ data.progressBar.remove();
78
+
79
+ var file = {
80
+ original: {
81
+ id: data.formData.key.match(/cache\/(.+)/)[1], // we have to remove the prefix part
82
+ storage: 'cache',
83
+ metadata: {
84
+ size: data.files[0].size,
85
+ filename: data.files[0].name.match(/[^\/\\]*$/)[0], // IE returns full path
86
+ mime_type: data.files[0].type
87
+ }
88
+ }
89
+ }
90
+
91
+ var fileInput = $(this);
92
+ var fileInputName = $(this).attr("name");
93
+ var fileImagesGallery = $(fileInput.data("images"));
94
+
95
+ console.log("image: posting to /admin/api/files");
96
+ $.ajax("/admin/api/files", {
97
+ method: 'POST',
98
+ data: {
99
+ data: {
100
+ attributes: {
101
+ metadata: file,
102
+ media_type: 'image'
103
+ },
104
+ relationships: {
105
+ attachable: {
106
+ data: {
107
+ type: gallery.attachable().type,
108
+ id: gallery.attachable().id
109
+ }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }).done(function(response) {
115
+ var id = response.data.id;
116
+ var url = response.data.attributes.url;
117
+ var filename = response.data.attributes["original-name"];
118
+ gallery.addImage({
119
+ url: url,
120
+ id: id,
121
+ filename: filename,
122
+ orderBy: "filename"
123
+ });
124
+ });
125
+ }
126
+ };
127
+
128
+ var AttachmentUploadFunctions = {
129
+ add: function(e, data) {
130
+ data.progressBar = $('<div class="progress-status"><span class="name">&nbsp;</span><div class="progress-bar"></div></div>');
131
+ $(this).after(data.progressBar);
132
+
133
+ var options = {
134
+ extension: data.files[0].name.match(/(\.\w+)?$/)[0], // set extension
135
+ _: Date.now(), // prevent caching
136
+ }
137
+
138
+ $.getJSON('/admin/files/cache/presign', options, function(result) {
139
+ console.log("Attachment presign result", result);
140
+ data.formData = result['fields'];
141
+ data.url = result['url'];
142
+ data.paramName = 'file';
143
+ data.submit();
144
+ });
145
+ },
146
+ done: function(e, data) {
147
+ console.log("Attachment upload done! Now posting to /admin/api/files");
148
+ data.progressBar.remove();
149
+
150
+ var file = {
151
+ original: {
152
+ id: data.formData.key.match(/cache\/(.+)/)[1], // we have to remove the prefix part
153
+ storage: 'cache',
154
+ metadata: {
155
+ size: data.files[0].size,
156
+ filename: data.files[0].name.match(/[^\/\\]*$/)[0], // IE returns full path
157
+ mime_type: data.files[0].type
158
+ }
159
+ }
160
+ }
161
+
162
+ var fileInput = $(this);
163
+ var fileInputName = $(this).attr("name");
164
+ var fileImagesGallery = $(fileInput.data("images"));
165
+
166
+ console.log("Attachment: posting to /admin/api/files");
167
+ $.ajax("/admin/api/files", {
168
+ method: 'POST',
169
+ data: {
170
+ data: {
171
+ attributes: {
172
+ metadata: file,
173
+ media_type: 'attachment'
174
+ },
175
+ relationships: {
176
+ attachable: {
177
+ data: {
178
+ type: gallery.attachable().type,
179
+ id: gallery.attachable().id
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }).done(function(response) {
186
+ var id = response.data.id;
187
+ var url = response.data.attributes.url;
188
+ var filename = response.data.attributes["original-name"];
189
+ var itemTemplate = $("#cas-attachments-template").html();
190
+ var finalHtml = $(itemTemplate);
191
+
192
+ finalHtml.attr("data-id", id);
193
+ finalHtml.find(".filename").html(filename);
194
+
195
+ $("#attachments-list").append(finalHtml);
196
+ /**
197
+ * order is set to 0 all for now
198
+ */
199
+ $("#attachments-list").append("<input type='hidden' name='attachments[files][0][id]' class='js-attachment-input' value='"+id+"' />");
200
+ });
201
+ }
202
+ };
203
+
204
+ function deleteFiles(ids) {
205
+ if (confirm("Tem certeza disso?")) {
206
+ return $.ajax("" + paths.deleteFile.path + "/" + ids.join(), {
207
+ method: paths.deleteFile.method
208
+ });
209
+ } else {
210
+ return false;
211
+ }
212
+ }
213
+
214
+ $(function() {
215
+ gallery = new CasImageGallery({
216
+ element: $(".cas-image-gallery"),
217
+ selectionEnabled: false,
218
+ preloadedImagesElements: $(".cas-image-gallery .cas-gallery-preloaded"),
219
+ onDelete: deleteFiles
220
+ });
221
+ gallery.init();
222
+
223
+ $(".cas-image-gallery .images").sortable({
224
+ stop: function() {
225
+ gallery.resetImagesOrder();
226
+ }
227
+ });
228
+
229
+ $('.cas-image-gallery [type=file]').fileupload({
230
+ maxChunkSize: 10000000, // 10000000 = 10mb
231
+ dropZone: $('.cas-image-gallery.dropzone'),
232
+ dataType: 'json',
233
+ disableImageResize: /Android(?!.*Chrome)|Opera/.test(window.navigator && navigator.userAgent),
234
+ imageMaxWidth: 1920,
235
+ imageMaxHeight: 1920,
236
+ imageOrientation: true,
237
+ prependFiles: true,
238
+
239
+ // callbacks
240
+ add: ImageGalleryUploadFunctions.add,
241
+ progress: UploadSharedFunctions.progress,
242
+ fail: UploadSharedFunctions.fail,
243
+ done: ImageGalleryUploadFunctions.done
244
+ });
245
+
246
+ $('.cas-attachments [type=file]').fileupload({
247
+ maxChunkSize: 10000000, // 10000000 = 10mb
248
+ dropZone: $('.cas-attachments.dropzone'),
249
+ dataType: 'json',
250
+
251
+ // callbacks
252
+ add: AttachmentUploadFunctions.add,
253
+ progress: UploadSharedFunctions.progress,
254
+ fail: UploadSharedFunctions.fail,
255
+ done: AttachmentUploadFunctions.done
256
+ });
257
+
258
+ // DELETING ATTACHMENTS
259
+ $('.cas-attachments').on('click', '.js-delete-file', function(el) {
260
+ var fileEl = $(this).parents("[data-id]");
261
+ var id = [fileEl.attr('data-id')];
262
+ var response = deleteFiles(id);
263
+ if (response) {
264
+ response.done(function() {
265
+ fileEl.remove();
266
+ });
267
+ }
268
+ });
269
+ });