lady_josephine 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 +32 -0
- data/app/assets/fonts/lady_josephine/icons/icons.eot +0 -0
- data/app/assets/fonts/lady_josephine/icons/icons.svg +215 -0
- data/app/assets/fonts/lady_josephine/icons/icons.ttf +0 -0
- data/app/assets/fonts/lady_josephine/icons/icons.woff +0 -0
- data/app/assets/javascripts/lady_josephine/blocks/facebook.js +25 -0
- data/app/assets/javascripts/lady_josephine/blocks/instagram.js +22 -0
- data/app/assets/javascripts/lady_josephine/blocks/soundcloud.js +24 -0
- data/app/assets/javascripts/lady_josephine/blocks/twitter.js +25 -0
- data/app/assets/javascripts/lady_josephine/blocks/vimeo.js +55 -0
- data/app/assets/javascripts/lady_josephine/blocks/youtube.js +64 -0
- data/app/assets/javascripts/lady_josephine/editor.js +40 -0
- data/app/assets/javascripts/lady_josephine/lady_josephine.js +4 -0
- data/app/assets/javascripts/lady_josephine/lady_josephine_view.js +6 -0
- data/app/assets/stylesheets/lady_josephine/content.sass +33 -0
- data/app/assets/stylesheets/lady_josephine/icons.sass +175 -0
- data/app/assets/stylesheets/lady_josephine/lady_josephine.sass +6 -0
- data/app/assets/stylesheets/lady_josephine/sir_trevor.sass +619 -0
- data/app/assets/stylesheets/lady_josephine/vars.sass +36 -0
- data/app/controllers/lady_josephine/application_controller.rb +4 -0
- data/app/controllers/lady_josephine/editor_controller.rb +40 -0
- data/app/controllers/lady_josephine/images_controller.rb +26 -0
- data/app/helpers/lady_josephine/helper.rb +25 -0
- data/app/helpers/lady_josephine/sir_trevor_helper.rb +172 -0
- data/app/models/lady_josephine/concerns/model.rb +29 -0
- data/app/models/lady_josephine/concerns/pingable.rb +28 -0
- data/app/models/lady_josephine/concerns/server_uuid.rb +24 -0
- data/app/models/lady_josephine/concerns/sir_trevor_images.rb +38 -0
- data/app/models/lady_josephine/image.rb +41 -0
- data/app/uploader/lady_josephine/base_uploader.rb +47 -0
- data/app/uploader/lady_josephine/image_uploader.rb +149 -0
- data/app/views/lady_josephine/blocks/_audio_block.haml +2 -0
- data/app/views/lady_josephine/blocks/_definition_block.haml +4 -0
- data/app/views/lady_josephine/blocks/_divider_block.haml +2 -0
- data/app/views/lady_josephine/blocks/_extended_image_block.haml +63 -0
- data/app/views/lady_josephine/blocks/_extended_quote_block.haml +5 -0
- data/app/views/lady_josephine/blocks/_extended_tweet_block.haml +2 -0
- data/app/views/lady_josephine/blocks/_facebook_post_block.haml +2 -0
- data/app/views/lady_josephine/blocks/_heading_block.haml +2 -0
- data/app/views/lady_josephine/blocks/_html_block.haml +1 -0
- data/app/views/lady_josephine/blocks/_instagram_block.haml +2 -0
- data/app/views/lady_josephine/blocks/_list_block.haml +3 -0
- data/app/views/lady_josephine/blocks/_quote_block.haml +5 -0
- data/app/views/lady_josephine/blocks/_text_block.html.haml +2 -0
- data/app/views/lady_josephine/blocks/_video_block.haml +9 -0
- data/config/routes.rb +9 -0
- data/db/migrate/20160222151500_lady_josephine_image.rb +18 -0
- data/lib/generators/lady_josephine_migration/USAGE +9 -0
- data/lib/generators/lady_josephine_migration/lady_josephine_migration_generator.rb +17 -0
- data/lib/generators/lady_josephine_migration/templates/migration.rb +9 -0
- data/lib/lady_josephine.rb +18 -0
- data/lib/lady_josephine/engine.rb +18 -0
- data/lib/lady_josephine/redcarpet/custom_markdown_formatter.rb +63 -0
- data/lib/lady_josephine/renderer/sir_trevor_renderer.rb +16 -0
- data/lib/lady_josephine/version.rb +3 -0
- data/lib/lady_josephine/whitelist.rb +26 -0
- data/lib/tasks/lady_josephine_tasks.rake +4 -0
- data/spec/controllers/lady_josephine/editor_controller_spec.rb +58 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +16 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/bla +0 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/spec_helper.rb +17 -0
- data/vendor/assets/components/Eventable/README.md +12 -0
- data/vendor/assets/components/Eventable/bower.json +10 -0
- data/vendor/assets/components/Eventable/component.json +11 -0
- data/vendor/assets/components/Eventable/eventable.js +207 -0
- data/vendor/assets/components/Eventable/package.json +15 -0
- data/vendor/assets/components/jquery-autosize/bower.json +30 -0
- data/vendor/assets/components/jquery-autosize/demo.html +36 -0
- data/vendor/assets/components/jquery-autosize/jquery.autosize.js +273 -0
- data/vendor/assets/components/jquery-autosize/jquery.autosize.min.js +6 -0
- data/vendor/assets/components/jquery-autosize/package.json +32 -0
- data/vendor/assets/components/jquery-autosize/readme.md +216 -0
- data/vendor/assets/components/jquery/AUTHORS.txt +163 -0
- data/vendor/assets/components/jquery/CONTRIBUTING.md +216 -0
- data/vendor/assets/components/jquery/Gruntfile.js +496 -0
- data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
- data/vendor/assets/components/jquery/README.md +415 -0
- data/vendor/assets/components/jquery/build/release-notes.js +59 -0
- data/vendor/assets/components/jquery/build/release.js +246 -0
- data/vendor/assets/components/jquery/component.json +13 -0
- data/vendor/assets/components/jquery/composer.json +35 -0
- data/vendor/assets/components/jquery/jquery-migrate.js +496 -0
- data/vendor/assets/components/jquery/jquery-migrate.min.js +3 -0
- data/vendor/assets/components/jquery/jquery.js +9597 -0
- data/vendor/assets/components/jquery/jquery.min.js +5 -0
- data/vendor/assets/components/jquery/jquery.min.map +1 -0
- data/vendor/assets/components/jquery/package.json +39 -0
- data/vendor/assets/components/jquery/speed/benchmark.js +15 -0
- data/vendor/assets/components/jquery/speed/benchmarker.css +65 -0
- data/vendor/assets/components/jquery/speed/benchmarker.js +181 -0
- data/vendor/assets/components/jquery/speed/closest.html +39 -0
- data/vendor/assets/components/jquery/speed/css.html +82 -0
- data/vendor/assets/components/jquery/speed/event.html +58 -0
- data/vendor/assets/components/jquery/speed/filter.html +183 -0
- data/vendor/assets/components/jquery/speed/find.html +179 -0
- data/vendor/assets/components/jquery/speed/index.html +72 -0
- data/vendor/assets/components/jquery/speed/jquery-basis.js +6238 -0
- data/vendor/assets/components/jquery/speed/slice.vs.concat.html +47 -0
- data/vendor/assets/components/jquery/src/ajax.js +851 -0
- data/vendor/assets/components/jquery/src/ajax/jsonp.js +80 -0
- data/vendor/assets/components/jquery/src/ajax/script.js +86 -0
- data/vendor/assets/components/jquery/src/ajax/xhr.js +207 -0
- data/vendor/assets/components/jquery/src/attributes.js +661 -0
- data/vendor/assets/components/jquery/src/callbacks.js +196 -0
- data/vendor/assets/components/jquery/src/core.js +949 -0
- data/vendor/assets/components/jquery/src/css.js +679 -0
- data/vendor/assets/components/jquery/src/data.js +340 -0
- data/vendor/assets/components/jquery/src/deferred.js +141 -0
- data/vendor/assets/components/jquery/src/deprecated.js +4 -0
- data/vendor/assets/components/jquery/src/dimensions.js +41 -0
- data/vendor/assets/components/jquery/src/effects.js +730 -0
- data/vendor/assets/components/jquery/src/event-alias.js +15 -0
- data/vendor/assets/components/jquery/src/event.js +991 -0
- data/vendor/assets/components/jquery/src/exports.js +18 -0
- data/vendor/assets/components/jquery/src/intro.js +20 -0
- data/vendor/assets/components/jquery/src/manipulation.js +796 -0
- data/vendor/assets/components/jquery/src/offset.js +169 -0
- data/vendor/assets/components/jquery/src/outro.js +2 -0
- data/vendor/assets/components/jquery/src/queue.js +147 -0
- data/vendor/assets/components/jquery/src/serialize.js +99 -0
- data/vendor/assets/components/jquery/src/sizzle-jquery.js +9 -0
- data/vendor/assets/components/jquery/src/support.js +241 -0
- data/vendor/assets/components/jquery/src/traversing.js +275 -0
- data/vendor/assets/components/jquery/test/csp.php +16 -0
- data/vendor/assets/components/jquery/test/data/1x1.jpg +0 -0
- data/vendor/assets/components/jquery/test/data/ajax/unreleasedXHR.html +25 -0
- data/vendor/assets/components/jquery/test/data/atom+xml.php +4 -0
- data/vendor/assets/components/jquery/test/data/badcall.js +1 -0
- data/vendor/assets/components/jquery/test/data/badjson.js +1 -0
- data/vendor/assets/components/jquery/test/data/cleanScript.html +10 -0
- data/vendor/assets/components/jquery/test/data/core/cc_on.html +22 -0
- data/vendor/assets/components/jquery/test/data/dashboard.xml +11 -0
- data/vendor/assets/components/jquery/test/data/dimensions/documentLarge.html +17 -0
- data/vendor/assets/components/jquery/test/data/dimensions/documentSmall.html +21 -0
- data/vendor/assets/components/jquery/test/data/echoData.php +1 -0
- data/vendor/assets/components/jquery/test/data/echoQuery.php +1 -0
- data/vendor/assets/components/jquery/test/data/errorWithText.php +5 -0
- data/vendor/assets/components/jquery/test/data/etag.php +21 -0
- data/vendor/assets/components/jquery/test/data/evalScript.php +1 -0
- data/vendor/assets/components/jquery/test/data/event/longLoadScript.php +4 -0
- data/vendor/assets/components/jquery/test/data/event/promiseReady.html +17 -0
- data/vendor/assets/components/jquery/test/data/event/syncReady.html +23 -0
- data/vendor/assets/components/jquery/test/data/headers.php +18 -0
- data/vendor/assets/components/jquery/test/data/if_modified_since.php +20 -0
- data/vendor/assets/components/jquery/test/data/iframe.html +8 -0
- data/vendor/assets/components/jquery/test/data/jquery-1.8.2.ajax_xhr.min.js +2 -0
- data/vendor/assets/components/jquery/test/data/json.php +13 -0
- data/vendor/assets/components/jquery/test/data/json_obj.js +1 -0
- data/vendor/assets/components/jquery/test/data/jsonp.php +14 -0
- data/vendor/assets/components/jquery/test/data/manipulation/iframe-denied.html +36 -0
- data/vendor/assets/components/jquery/test/data/name.html +1 -0
- data/vendor/assets/components/jquery/test/data/name.php +24 -0
- data/vendor/assets/components/jquery/test/data/nocontent.php +5 -0
- data/vendor/assets/components/jquery/test/data/offset/absolute.html +41 -0
- data/vendor/assets/components/jquery/test/data/offset/body.html +26 -0
- data/vendor/assets/components/jquery/test/data/offset/fixed.html +34 -0
- data/vendor/assets/components/jquery/test/data/offset/relative.html +31 -0
- data/vendor/assets/components/jquery/test/data/offset/scroll.html +39 -0
- data/vendor/assets/components/jquery/test/data/offset/static.html +31 -0
- data/vendor/assets/components/jquery/test/data/offset/table.html +43 -0
- data/vendor/assets/components/jquery/test/data/params_html.php +12 -0
- data/vendor/assets/components/jquery/test/data/readywaitasset.js +1 -0
- data/vendor/assets/components/jquery/test/data/readywaitloader.js +25 -0
- data/vendor/assets/components/jquery/test/data/script.php +11 -0
- data/vendor/assets/components/jquery/test/data/selector/html5_selector.html +114 -0
- data/vendor/assets/components/jquery/test/data/selector/sizzle_cache.html +21 -0
- data/vendor/assets/components/jquery/test/data/statusText.php +5 -0
- data/vendor/assets/components/jquery/test/data/support/bodyBackground.html +28 -0
- data/vendor/assets/components/jquery/test/data/support/shrinkWrapBlocks.html +23 -0
- data/vendor/assets/components/jquery/test/data/support/testElementCrash.html +17 -0
- data/vendor/assets/components/jquery/test/data/test.html +7 -0
- data/vendor/assets/components/jquery/test/data/test.js +3 -0
- data/vendor/assets/components/jquery/test/data/test.php +7 -0
- data/vendor/assets/components/jquery/test/data/test2.html +5 -0
- data/vendor/assets/components/jquery/test/data/test3.html +3 -0
- data/vendor/assets/components/jquery/test/data/testinit.js +269 -0
- data/vendor/assets/components/jquery/test/data/testrunner.js +368 -0
- data/vendor/assets/components/jquery/test/data/testsuite.css +155 -0
- data/vendor/assets/components/jquery/test/data/text.php +12 -0
- data/vendor/assets/components/jquery/test/data/ua.txt +272 -0
- data/vendor/assets/components/jquery/test/data/with_fries.xml +25 -0
- data/vendor/assets/components/jquery/test/data/with_fries_over_jsonp.php +7 -0
- data/vendor/assets/components/jquery/test/delegatetest.html +228 -0
- data/vendor/assets/components/jquery/test/hovertest.html +158 -0
- data/vendor/assets/components/jquery/test/index.html +330 -0
- data/vendor/assets/components/jquery/test/localfile.html +75 -0
- data/vendor/assets/components/jquery/test/networkerror.html +84 -0
- data/vendor/assets/components/jquery/test/polluted.php +110 -0
- data/vendor/assets/components/jquery/test/readywait.html +70 -0
- data/vendor/assets/components/jquery/test/unit/ajax.js +1971 -0
- data/vendor/assets/components/jquery/test/unit/attributes.js +1332 -0
- data/vendor/assets/components/jquery/test/unit/callbacks.js +326 -0
- data/vendor/assets/components/jquery/test/unit/core.js +1332 -0
- data/vendor/assets/components/jquery/test/unit/css.js +1036 -0
- data/vendor/assets/components/jquery/test/unit/data.js +636 -0
- data/vendor/assets/components/jquery/test/unit/deferred.js +440 -0
- data/vendor/assets/components/jquery/test/unit/deprecated.js +1 -0
- data/vendor/assets/components/jquery/test/unit/dimensions.js +461 -0
- data/vendor/assets/components/jquery/test/unit/effects.js +2050 -0
- data/vendor/assets/components/jquery/test/unit/event.js +2690 -0
- data/vendor/assets/components/jquery/test/unit/exports.js +7 -0
- data/vendor/assets/components/jquery/test/unit/manipulation.js +2242 -0
- data/vendor/assets/components/jquery/test/unit/offset.js +549 -0
- data/vendor/assets/components/jquery/test/unit/queue.js +316 -0
- data/vendor/assets/components/jquery/test/unit/selector.js +185 -0
- data/vendor/assets/components/jquery/test/unit/serialize.js +146 -0
- data/vendor/assets/components/jquery/test/unit/support.js +384 -0
- data/vendor/assets/components/jquery/test/unit/traversing.js +667 -0
- data/vendor/assets/components/jquery/test/xhtml.php +5 -0
- data/vendor/assets/components/sir-trevor-js/CHANGELOG.md +44 -0
- data/vendor/assets/components/sir-trevor-js/Gemfile +3 -0
- data/vendor/assets/components/sir-trevor-js/Gemfile.lock +10 -0
- data/vendor/assets/components/sir-trevor-js/Gruntfile.js +109 -0
- data/vendor/assets/components/sir-trevor-js/MIT-LICENCE +20 -0
- data/vendor/assets/components/sir-trevor-js/Readme.md +84 -0
- data/vendor/assets/components/sir-trevor-js/bower.json +21 -0
- data/vendor/assets/components/sir-trevor-js/component.json +42 -0
- data/vendor/assets/components/sir-trevor-js/contributing.md +74 -0
- data/vendor/assets/components/sir-trevor-js/examples-component/component.json +14 -0
- data/vendor/assets/components/sir-trevor-js/examples-component/index.html +33 -0
- data/vendor/assets/components/sir-trevor-js/examples-component/index.js +29 -0
- data/vendor/assets/components/sir-trevor-js/examples-component/javascript/example_block.js +203 -0
- data/vendor/assets/components/sir-trevor-js/examples-component/javascript/limit_chars.js +46 -0
- data/vendor/assets/components/sir-trevor-js/examples-component/sir-trevor.gif +0 -0
- data/vendor/assets/components/sir-trevor-js/locales/cn.js +51 -0
- data/vendor/assets/components/sir-trevor-js/locales/de.js +51 -0
- data/vendor/assets/components/sir-trevor-js/locales/es.js +51 -0
- data/vendor/assets/components/sir-trevor-js/locales/fi.js +51 -0
- data/vendor/assets/components/sir-trevor-js/locales/fr.js +51 -0
- data/vendor/assets/components/sir-trevor-js/locales/pt.js +52 -0
- data/vendor/assets/components/sir-trevor-js/package.json +23 -0
- data/vendor/assets/components/sir-trevor-js/sir-trevor-icons.css +6 -0
- data/vendor/assets/components/sir-trevor-js/sir-trevor.css +393 -0
- data/vendor/assets/components/sir-trevor-js/sir-trevor.css.map +7 -0
- data/vendor/assets/components/sir-trevor-js/sir-trevor.js +5481 -0
- data/vendor/assets/components/sir-trevor-js/sir-trevor.min.js +13 -0
- data/vendor/assets/components/underscore/CNAME +1 -0
- data/vendor/assets/components/underscore/CONTRIBUTING.md +9 -0
- data/vendor/assets/components/underscore/LICENSE +22 -0
- data/vendor/assets/components/underscore/README.md +19 -0
- data/vendor/assets/components/underscore/Rakefile +10 -0
- data/vendor/assets/components/underscore/docs/docco.css +192 -0
- data/vendor/assets/components/underscore/docs/favicon.ico +0 -0
- data/vendor/assets/components/underscore/docs/images/background.png +0 -0
- data/vendor/assets/components/underscore/docs/images/underscore.png +0 -0
- data/vendor/assets/components/underscore/docs/underscore.html +823 -0
- data/vendor/assets/components/underscore/favicon.ico +0 -0
- data/vendor/assets/components/underscore/index.html +2467 -0
- data/vendor/assets/components/underscore/index.js +1 -0
- data/vendor/assets/components/underscore/package.json +16 -0
- data/vendor/assets/components/underscore/test/arrays.js +200 -0
- data/vendor/assets/components/underscore/test/chaining.js +59 -0
- data/vendor/assets/components/underscore/test/collections.js +453 -0
- data/vendor/assets/components/underscore/test/functions.js +265 -0
- data/vendor/assets/components/underscore/test/index.html +44 -0
- data/vendor/assets/components/underscore/test/objects.js +570 -0
- data/vendor/assets/components/underscore/test/speed.js +75 -0
- data/vendor/assets/components/underscore/test/utility.js +266 -0
- data/vendor/assets/components/underscore/test/vendor/jquery.js +9404 -0
- data/vendor/assets/components/underscore/test/vendor/jslitmus.js +670 -0
- data/vendor/assets/components/underscore/test/vendor/qunit.css +235 -0
- data/vendor/assets/components/underscore/test/vendor/qunit.js +1977 -0
- data/vendor/assets/components/underscore/test/vendor/runner.js +98 -0
- data/vendor/assets/components/underscore/underscore-min.js +1 -0
- data/vendor/assets/components/underscore/underscore.js +1226 -0
- metadata +473 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'carrierwave'
|
2
|
+
|
3
|
+
module LadyJosephine
|
4
|
+
class BaseUploader < ::CarrierWave::Uploader::Base
|
5
|
+
include ::CarrierWave::MiniMagick
|
6
|
+
|
7
|
+
storage :file
|
8
|
+
|
9
|
+
process :auto_orient
|
10
|
+
|
11
|
+
def strip
|
12
|
+
manipulate! do |img|
|
13
|
+
img.strip
|
14
|
+
img = yield(img) if block_given?
|
15
|
+
img
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def store_dir
|
20
|
+
"storage/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# https://makandracards.com/makandra/12323-carrierwave-auto-rotate-tagged-jpegs
|
24
|
+
def auto_orient
|
25
|
+
manipulate! do |image|
|
26
|
+
image.tap(&:auto_orient)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def compress_to_fit(width, height, percentage = 70)
|
31
|
+
manipulate! do |img|
|
32
|
+
img.resize "#{width}x#{height}"
|
33
|
+
if img.mime_type.match(/(png|jpeg|jpg)\z/i)
|
34
|
+
img.combine_options do |c|
|
35
|
+
c.quality(percentage.to_s)
|
36
|
+
c.depth "8"
|
37
|
+
c.interlace "plane"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
img = yield(img) if block_given?
|
42
|
+
add_metadata(img)
|
43
|
+
img
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
module LadyJosephine
|
2
|
+
class ImageUploader < BaseUploader
|
3
|
+
|
4
|
+
def add_metadata(image)
|
5
|
+
@version_metadata = metadata_entry(image[:dimensions], image[:size])
|
6
|
+
end
|
7
|
+
|
8
|
+
def metadata_entry(dimensions, size)
|
9
|
+
data = HashWithIndifferentAccess.new
|
10
|
+
data['width'] = dimensions[0]
|
11
|
+
data['height'] = dimensions[1]
|
12
|
+
data['size'] = size / 1000
|
13
|
+
data['ratio'] = ratio data['width'], data['height']
|
14
|
+
data
|
15
|
+
end
|
16
|
+
|
17
|
+
def ratio(width, height)
|
18
|
+
(width.to_f / height.to_f).round(2)
|
19
|
+
end
|
20
|
+
|
21
|
+
def version_metadata
|
22
|
+
@version_metadata || dummy_version_metadata(version_name)
|
23
|
+
end
|
24
|
+
|
25
|
+
def dummy_version_metadata(version_name)
|
26
|
+
metadata_entry([width_from_version_name(version_name),width_from_version_name(version_name)],1000)
|
27
|
+
end
|
28
|
+
|
29
|
+
def srcset_string(url, width)
|
30
|
+
"#{url} #{width}w"
|
31
|
+
end
|
32
|
+
|
33
|
+
def srcset(options = {})
|
34
|
+
src_versions = [options[:only]].reject(&:blank?).flatten.empty? ? versions.keys{|version| version =~ /^w\d+$/ } : [options[:only]].flatten
|
35
|
+
src_versions = src_versions - [options[:except]].flatten
|
36
|
+
|
37
|
+
src_versions.collect do |version, version_data|
|
38
|
+
srcset_string url(version), metadata[version]['width']
|
39
|
+
end.reject(&:blank?).join(", ")
|
40
|
+
end
|
41
|
+
|
42
|
+
def width_from_version_name(version_string)
|
43
|
+
version_string.to_s.sub(/\D*(\d+)\D*/,'\1').to_i
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def metadata
|
48
|
+
@metadata ||= collect_metadata
|
49
|
+
end
|
50
|
+
|
51
|
+
def collect_metadata
|
52
|
+
if version_name.nil?
|
53
|
+
original_filename.present? ? collect_metadata_from_upload : collect_metadata_from_model
|
54
|
+
else
|
55
|
+
model.send(mounted_as).metadata
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def collect_metadata_from_upload
|
61
|
+
versions.inject(HashWithIndifferentAccess.new) do |metadata, (key,version_data)|
|
62
|
+
metadata[key] = version_data.version_metadata
|
63
|
+
metadata
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def collect_metadata_from_model
|
68
|
+
metadata_column = "#{mounted_as}_metadata"
|
69
|
+
if model.respond_to?(metadata_column) && (json_data = model.send metadata_column).present?
|
70
|
+
collect_metadata_from_cache(json_data)
|
71
|
+
else
|
72
|
+
collect_metadata_from_version_names
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def collect_metadata_from_cache(json_data)
|
77
|
+
HashWithIndifferentAccess.new(JSON.parse(json_data))
|
78
|
+
end
|
79
|
+
|
80
|
+
def collect_metadata_from_version_names
|
81
|
+
versions.inject(HashWithIndifferentAccess.new) do |metadata, (key,version_data)|
|
82
|
+
metadata[key] = dummy_version_metadata(key)
|
83
|
+
metadata
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
storage :file
|
88
|
+
|
89
|
+
process :strip
|
90
|
+
|
91
|
+
version :w300, from_version: :w600 do
|
92
|
+
process :compress_to_fit => [300, nil, 70]
|
93
|
+
end
|
94
|
+
|
95
|
+
version :w600 do
|
96
|
+
process :compress_to_fit => [600, nil, 70]
|
97
|
+
end
|
98
|
+
|
99
|
+
version :w1000, from_version: :w2000 do
|
100
|
+
process :compress_to_fit => [1000, nil, 65]
|
101
|
+
end
|
102
|
+
|
103
|
+
version :w2000 do
|
104
|
+
process :compress_to_fit => [2000, nil, 65]
|
105
|
+
end
|
106
|
+
|
107
|
+
def large
|
108
|
+
w2000
|
109
|
+
end
|
110
|
+
|
111
|
+
def medium
|
112
|
+
w1000
|
113
|
+
end
|
114
|
+
|
115
|
+
def small
|
116
|
+
w300
|
117
|
+
end
|
118
|
+
|
119
|
+
def without_meta_data
|
120
|
+
w2000
|
121
|
+
end
|
122
|
+
|
123
|
+
def thumb
|
124
|
+
w300
|
125
|
+
end
|
126
|
+
|
127
|
+
def preview
|
128
|
+
w300
|
129
|
+
end
|
130
|
+
|
131
|
+
def preview_retina
|
132
|
+
w600
|
133
|
+
end
|
134
|
+
|
135
|
+
def main
|
136
|
+
w1000
|
137
|
+
end
|
138
|
+
|
139
|
+
def main_retina
|
140
|
+
w2000
|
141
|
+
end
|
142
|
+
|
143
|
+
def extension_white_list
|
144
|
+
%w(jpg jpeg gif png)
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
- image = LadyJosephine::Image.find_by(block_uuid: block["uuid"]).file
|
2
|
+
|
3
|
+
- if block["style"] == "fullwidth"
|
4
|
+
|
5
|
+
%figure.media(data-fullscreenable-media data-isFullscreen="false" data-ng-class="{'media--fullscreen' : isFullscreen}"){ component_attributes_for(block, ["media lady-josephine-block--image", style: "media"]) }<
|
6
|
+
|
7
|
+
.media__img
|
8
|
+
- if block["target_url"].present?
|
9
|
+
%a(href="#{block["target_url"]}")
|
10
|
+
= image_with_srcset_tag image.srcset, "(min-width:1000px) #{image_display_width(image.metadata)}px, 50vw"
|
11
|
+
- else
|
12
|
+
= image_with_srcset_tag image.srcset, "(min-width:1000px) #{image_display_width(image.metadata)}px, 50vw"
|
13
|
+
|
14
|
+
%figcaption.media__body
|
15
|
+
- if block["caption"].present? || block["copyright"].present?
|
16
|
+
%p
|
17
|
+
= block["caption"]
|
18
|
+
|
19
|
+
- if block["copyright"].present?
|
20
|
+
%span.copyright
|
21
|
+
= block["copyright"]
|
22
|
+
|
23
|
+
|
24
|
+
- if block["style"] == "bodywidth"
|
25
|
+
|
26
|
+
%figure.media.cp(data-fullscreenable-media data-isFullscreen="false" data-ng-class="{'media--fullscreen' : isFullscreen}"){ component_attributes_for(block, ["media lady-josephine-block--image", style: "media"]) }<
|
27
|
+
|
28
|
+
.media__img
|
29
|
+
- if block["target_url"].present?
|
30
|
+
%a(href="#{block["target_url"]}")
|
31
|
+
= image_with_srcset_tag image.srcset, "(min-width:1000px) 680px, 50vw"
|
32
|
+
- else
|
33
|
+
= image_with_srcset_tag image.srcset, "(min-width:1000px) 680px, 50vw"
|
34
|
+
|
35
|
+
%figcaption.media__body
|
36
|
+
- if block["caption"].present? || block["copyright"].present?
|
37
|
+
%p
|
38
|
+
= block["caption"]
|
39
|
+
|
40
|
+
- if block["copyright"].present?
|
41
|
+
%span.copyright
|
42
|
+
= block["copyright"]
|
43
|
+
|
44
|
+
|
45
|
+
- if block["style"] == "default" || block["style"] == ""
|
46
|
+
|
47
|
+
%figure.media.cp(data-fullscreenable-media data-isFullscreen="false" data-ng-class="{'media--fullscreen' : isFullscreen}"){ component_attributes_for(block, ["media", style: "media" ]) }<
|
48
|
+
.media__img.pull--left
|
49
|
+
- if block["target_url"].present?
|
50
|
+
%a(href="#{block["target_url"]}")
|
51
|
+
= image_with_srcset_tag image.srcset, "(min-width:1000px) 400px, 50vw"
|
52
|
+
- else
|
53
|
+
= image_with_srcset_tag image.srcset, "(min-width:1000px) 400px, 50vw"
|
54
|
+
|
55
|
+
- if block["copyright"].present?
|
56
|
+
.media__img.pull--left
|
57
|
+
%p.copyright
|
58
|
+
= block["copyright"]
|
59
|
+
|
60
|
+
- if block["caption"].present?
|
61
|
+
%figcaption.media__body
|
62
|
+
%p
|
63
|
+
= block["caption"]
|
@@ -0,0 +1 @@
|
|
1
|
+
= block["text"].html_safe
|
@@ -0,0 +1,9 @@
|
|
1
|
+
- if block["style"] == "fullwidth"
|
2
|
+
|
3
|
+
%div{ component_attributes_for(block, style: ["lady-josephine-block--video"]) }<
|
4
|
+
=sir_trevor_video(block).html_safe
|
5
|
+
|
6
|
+
- if block["style"] == "default" || block["style"] == ""
|
7
|
+
|
8
|
+
%div.cp{ component_attributes_for(block, style: ["lady-josephine-block--video"]) }<
|
9
|
+
=sir_trevor_video(block).html_safe
|
data/config/routes.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class LadyJosephineImage < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :lady_josephine_images do |t|
|
4
|
+
|
5
|
+
t.string :block_uuid
|
6
|
+
t.string :file
|
7
|
+
t.string :uploadable_type
|
8
|
+
t.string :uploadable_uuid
|
9
|
+
t.string :uploadable_id
|
10
|
+
t.string :uploadable_attribute
|
11
|
+
|
12
|
+
t.text :file_metadata
|
13
|
+
t.integer :uploadable_id
|
14
|
+
|
15
|
+
t.timestamps null: false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/active_record'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
|
5
|
+
class LadyJosephineMigrationGenerator < Rails::Generators::NamedBase
|
6
|
+
include Rails::Generators::Migration
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def self.next_migration_number(path)
|
10
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
11
|
+
end
|
12
|
+
|
13
|
+
def copy_model_migration
|
14
|
+
migration_template "migration.rb", "db/migrate/add_lady_josephine_to_#{table_name}.rb"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class AddLadyJosephineTo<%= table_name.camelize %> < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :<%= table_name %>, :content_data, :string, default: "{}"
|
4
|
+
add_column :<%= table_name %>, :lady_josephine_ping_date, :timestamp
|
5
|
+
add_column :<%= table_name %>, :lady_josephine_ping_user_id, :integer
|
6
|
+
add_column :<%= table_name %>, :lady_josephine_server_uuid, :string
|
7
|
+
add_column :<%= table_name %>, :lady_josephine_server_version, :string
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'lady_josephine/engine'
|
2
|
+
require 'lady_josephine/whitelist'
|
3
|
+
require 'carrierwave'
|
4
|
+
|
5
|
+
module LadyJosephine
|
6
|
+
|
7
|
+
module Renderer
|
8
|
+
autoload :SirTrevorRenderer, 'lady_josephine/renderer/sir_trevor_renderer'
|
9
|
+
end
|
10
|
+
|
11
|
+
module Redcarpet
|
12
|
+
autoload :CustomMarkdownFormatter, 'lady_josephine/redcarpet/custom_markdown_formatter'
|
13
|
+
end
|
14
|
+
|
15
|
+
mattr_accessor :mount_path
|
16
|
+
@@mount_path = "/josephine"
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module LadyJosephine
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
isolate_namespace LadyJosephine
|
4
|
+
|
5
|
+
config.assets.paths << File.expand_path("../../../app/assets/fonts", __FILE__)
|
6
|
+
|
7
|
+
config.generators do |g|
|
8
|
+
g.assets false
|
9
|
+
g.helper false
|
10
|
+
end
|
11
|
+
|
12
|
+
initializer 'lady_josephine.action_controller' do |app|
|
13
|
+
ActiveSupport.on_load :action_controller do
|
14
|
+
helper LadyJosephine::Helper
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module LadyJosephine
|
2
|
+
module Redcarpet
|
3
|
+
class CustomMarkdownFormatter < ::Redcarpet::Render::SmartyHTML
|
4
|
+
|
5
|
+
def block_code(code, language)
|
6
|
+
"<p>" << code << "</p>"
|
7
|
+
end
|
8
|
+
|
9
|
+
def paragraph(text)
|
10
|
+
text
|
11
|
+
end
|
12
|
+
|
13
|
+
def block_quote(text)
|
14
|
+
text
|
15
|
+
end
|
16
|
+
|
17
|
+
def list(contents, list_type)
|
18
|
+
contents
|
19
|
+
end
|
20
|
+
|
21
|
+
def codespan(code)
|
22
|
+
code
|
23
|
+
end
|
24
|
+
|
25
|
+
def postprocess(full_document)
|
26
|
+
full_document.gsub(/<br>/, "<br>\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
def preprocess(full_document)
|
30
|
+
sanitized_document = full_document.gsub(/\"(.*?)\"/) do
|
31
|
+
"„#{$1}“"
|
32
|
+
end
|
33
|
+
sanitized_document.gsub!(/\./, "\\.")
|
34
|
+
sanitized_document.gsub!(/\n/, "<br>\n")
|
35
|
+
sanitized_document
|
36
|
+
end
|
37
|
+
|
38
|
+
def link(link, title, context)
|
39
|
+
if is_internal_link?(link)
|
40
|
+
"<a href=\"#{link}\">#{context}</a>"
|
41
|
+
else
|
42
|
+
"<a href=\"#{link}\" target=\"_blank\">#{context}</a>"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def is_internal_link?(link)
|
49
|
+
host = Addressable::URI.parse(link).host
|
50
|
+
host.nil? || host.casecmp(host_from_config) == 0
|
51
|
+
end
|
52
|
+
|
53
|
+
def host_from_config
|
54
|
+
config_host = Krautmag.config.action_mailer.default_url_options[:host]
|
55
|
+
unless config_host =~ /^http(s)?:\/\//i
|
56
|
+
config_host = "http://" + config_host
|
57
|
+
end
|
58
|
+
URI(config_host).host
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|