lady_josephine 0.0.1

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 (304) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +32 -0
  4. data/app/assets/fonts/lady_josephine/icons/icons.eot +0 -0
  5. data/app/assets/fonts/lady_josephine/icons/icons.svg +215 -0
  6. data/app/assets/fonts/lady_josephine/icons/icons.ttf +0 -0
  7. data/app/assets/fonts/lady_josephine/icons/icons.woff +0 -0
  8. data/app/assets/javascripts/lady_josephine/blocks/facebook.js +25 -0
  9. data/app/assets/javascripts/lady_josephine/blocks/instagram.js +22 -0
  10. data/app/assets/javascripts/lady_josephine/blocks/soundcloud.js +24 -0
  11. data/app/assets/javascripts/lady_josephine/blocks/twitter.js +25 -0
  12. data/app/assets/javascripts/lady_josephine/blocks/vimeo.js +55 -0
  13. data/app/assets/javascripts/lady_josephine/blocks/youtube.js +64 -0
  14. data/app/assets/javascripts/lady_josephine/editor.js +40 -0
  15. data/app/assets/javascripts/lady_josephine/lady_josephine.js +4 -0
  16. data/app/assets/javascripts/lady_josephine/lady_josephine_view.js +6 -0
  17. data/app/assets/stylesheets/lady_josephine/content.sass +33 -0
  18. data/app/assets/stylesheets/lady_josephine/icons.sass +175 -0
  19. data/app/assets/stylesheets/lady_josephine/lady_josephine.sass +6 -0
  20. data/app/assets/stylesheets/lady_josephine/sir_trevor.sass +619 -0
  21. data/app/assets/stylesheets/lady_josephine/vars.sass +36 -0
  22. data/app/controllers/lady_josephine/application_controller.rb +4 -0
  23. data/app/controllers/lady_josephine/editor_controller.rb +40 -0
  24. data/app/controllers/lady_josephine/images_controller.rb +26 -0
  25. data/app/helpers/lady_josephine/helper.rb +25 -0
  26. data/app/helpers/lady_josephine/sir_trevor_helper.rb +172 -0
  27. data/app/models/lady_josephine/concerns/model.rb +29 -0
  28. data/app/models/lady_josephine/concerns/pingable.rb +28 -0
  29. data/app/models/lady_josephine/concerns/server_uuid.rb +24 -0
  30. data/app/models/lady_josephine/concerns/sir_trevor_images.rb +38 -0
  31. data/app/models/lady_josephine/image.rb +41 -0
  32. data/app/uploader/lady_josephine/base_uploader.rb +47 -0
  33. data/app/uploader/lady_josephine/image_uploader.rb +149 -0
  34. data/app/views/lady_josephine/blocks/_audio_block.haml +2 -0
  35. data/app/views/lady_josephine/blocks/_definition_block.haml +4 -0
  36. data/app/views/lady_josephine/blocks/_divider_block.haml +2 -0
  37. data/app/views/lady_josephine/blocks/_extended_image_block.haml +63 -0
  38. data/app/views/lady_josephine/blocks/_extended_quote_block.haml +5 -0
  39. data/app/views/lady_josephine/blocks/_extended_tweet_block.haml +2 -0
  40. data/app/views/lady_josephine/blocks/_facebook_post_block.haml +2 -0
  41. data/app/views/lady_josephine/blocks/_heading_block.haml +2 -0
  42. data/app/views/lady_josephine/blocks/_html_block.haml +1 -0
  43. data/app/views/lady_josephine/blocks/_instagram_block.haml +2 -0
  44. data/app/views/lady_josephine/blocks/_list_block.haml +3 -0
  45. data/app/views/lady_josephine/blocks/_quote_block.haml +5 -0
  46. data/app/views/lady_josephine/blocks/_text_block.html.haml +2 -0
  47. data/app/views/lady_josephine/blocks/_video_block.haml +9 -0
  48. data/config/routes.rb +9 -0
  49. data/db/migrate/20160222151500_lady_josephine_image.rb +18 -0
  50. data/lib/generators/lady_josephine_migration/USAGE +9 -0
  51. data/lib/generators/lady_josephine_migration/lady_josephine_migration_generator.rb +17 -0
  52. data/lib/generators/lady_josephine_migration/templates/migration.rb +9 -0
  53. data/lib/lady_josephine.rb +18 -0
  54. data/lib/lady_josephine/engine.rb +18 -0
  55. data/lib/lady_josephine/redcarpet/custom_markdown_formatter.rb +63 -0
  56. data/lib/lady_josephine/renderer/sir_trevor_renderer.rb +16 -0
  57. data/lib/lady_josephine/version.rb +3 -0
  58. data/lib/lady_josephine/whitelist.rb +26 -0
  59. data/lib/tasks/lady_josephine_tasks.rake +4 -0
  60. data/spec/controllers/lady_josephine/editor_controller_spec.rb +58 -0
  61. data/spec/dummy/README.rdoc +28 -0
  62. data/spec/dummy/Rakefile +6 -0
  63. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  64. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  65. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  66. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  67. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  68. data/spec/dummy/bin/bundle +3 -0
  69. data/spec/dummy/bin/rails +4 -0
  70. data/spec/dummy/bin/rake +4 -0
  71. data/spec/dummy/bin/setup +29 -0
  72. data/spec/dummy/config.ru +4 -0
  73. data/spec/dummy/config/application.rb +26 -0
  74. data/spec/dummy/config/boot.rb +5 -0
  75. data/spec/dummy/config/database.yml +25 -0
  76. data/spec/dummy/config/environment.rb +5 -0
  77. data/spec/dummy/config/environments/development.rb +41 -0
  78. data/spec/dummy/config/environments/production.rb +79 -0
  79. data/spec/dummy/config/environments/test.rb +42 -0
  80. data/spec/dummy/config/initializers/assets.rb +11 -0
  81. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  82. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  83. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  84. data/spec/dummy/config/initializers/inflections.rb +16 -0
  85. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  86. data/spec/dummy/config/initializers/session_store.rb +3 -0
  87. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  88. data/spec/dummy/config/locales/en.yml +23 -0
  89. data/spec/dummy/config/routes.rb +4 -0
  90. data/spec/dummy/config/secrets.yml +22 -0
  91. data/spec/dummy/db/development.sqlite3 +0 -0
  92. data/spec/dummy/db/schema.rb +16 -0
  93. data/spec/dummy/db/test.sqlite3 +0 -0
  94. data/spec/dummy/log/bla +0 -0
  95. data/spec/dummy/public/404.html +67 -0
  96. data/spec/dummy/public/422.html +67 -0
  97. data/spec/dummy/public/500.html +66 -0
  98. data/spec/dummy/public/favicon.ico +0 -0
  99. data/spec/spec_helper.rb +17 -0
  100. data/vendor/assets/components/Eventable/README.md +12 -0
  101. data/vendor/assets/components/Eventable/bower.json +10 -0
  102. data/vendor/assets/components/Eventable/component.json +11 -0
  103. data/vendor/assets/components/Eventable/eventable.js +207 -0
  104. data/vendor/assets/components/Eventable/package.json +15 -0
  105. data/vendor/assets/components/jquery-autosize/bower.json +30 -0
  106. data/vendor/assets/components/jquery-autosize/demo.html +36 -0
  107. data/vendor/assets/components/jquery-autosize/jquery.autosize.js +273 -0
  108. data/vendor/assets/components/jquery-autosize/jquery.autosize.min.js +6 -0
  109. data/vendor/assets/components/jquery-autosize/package.json +32 -0
  110. data/vendor/assets/components/jquery-autosize/readme.md +216 -0
  111. data/vendor/assets/components/jquery/AUTHORS.txt +163 -0
  112. data/vendor/assets/components/jquery/CONTRIBUTING.md +216 -0
  113. data/vendor/assets/components/jquery/Gruntfile.js +496 -0
  114. data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
  115. data/vendor/assets/components/jquery/README.md +415 -0
  116. data/vendor/assets/components/jquery/build/release-notes.js +59 -0
  117. data/vendor/assets/components/jquery/build/release.js +246 -0
  118. data/vendor/assets/components/jquery/component.json +13 -0
  119. data/vendor/assets/components/jquery/composer.json +35 -0
  120. data/vendor/assets/components/jquery/jquery-migrate.js +496 -0
  121. data/vendor/assets/components/jquery/jquery-migrate.min.js +3 -0
  122. data/vendor/assets/components/jquery/jquery.js +9597 -0
  123. data/vendor/assets/components/jquery/jquery.min.js +5 -0
  124. data/vendor/assets/components/jquery/jquery.min.map +1 -0
  125. data/vendor/assets/components/jquery/package.json +39 -0
  126. data/vendor/assets/components/jquery/speed/benchmark.js +15 -0
  127. data/vendor/assets/components/jquery/speed/benchmarker.css +65 -0
  128. data/vendor/assets/components/jquery/speed/benchmarker.js +181 -0
  129. data/vendor/assets/components/jquery/speed/closest.html +39 -0
  130. data/vendor/assets/components/jquery/speed/css.html +82 -0
  131. data/vendor/assets/components/jquery/speed/event.html +58 -0
  132. data/vendor/assets/components/jquery/speed/filter.html +183 -0
  133. data/vendor/assets/components/jquery/speed/find.html +179 -0
  134. data/vendor/assets/components/jquery/speed/index.html +72 -0
  135. data/vendor/assets/components/jquery/speed/jquery-basis.js +6238 -0
  136. data/vendor/assets/components/jquery/speed/slice.vs.concat.html +47 -0
  137. data/vendor/assets/components/jquery/src/ajax.js +851 -0
  138. data/vendor/assets/components/jquery/src/ajax/jsonp.js +80 -0
  139. data/vendor/assets/components/jquery/src/ajax/script.js +86 -0
  140. data/vendor/assets/components/jquery/src/ajax/xhr.js +207 -0
  141. data/vendor/assets/components/jquery/src/attributes.js +661 -0
  142. data/vendor/assets/components/jquery/src/callbacks.js +196 -0
  143. data/vendor/assets/components/jquery/src/core.js +949 -0
  144. data/vendor/assets/components/jquery/src/css.js +679 -0
  145. data/vendor/assets/components/jquery/src/data.js +340 -0
  146. data/vendor/assets/components/jquery/src/deferred.js +141 -0
  147. data/vendor/assets/components/jquery/src/deprecated.js +4 -0
  148. data/vendor/assets/components/jquery/src/dimensions.js +41 -0
  149. data/vendor/assets/components/jquery/src/effects.js +730 -0
  150. data/vendor/assets/components/jquery/src/event-alias.js +15 -0
  151. data/vendor/assets/components/jquery/src/event.js +991 -0
  152. data/vendor/assets/components/jquery/src/exports.js +18 -0
  153. data/vendor/assets/components/jquery/src/intro.js +20 -0
  154. data/vendor/assets/components/jquery/src/manipulation.js +796 -0
  155. data/vendor/assets/components/jquery/src/offset.js +169 -0
  156. data/vendor/assets/components/jquery/src/outro.js +2 -0
  157. data/vendor/assets/components/jquery/src/queue.js +147 -0
  158. data/vendor/assets/components/jquery/src/serialize.js +99 -0
  159. data/vendor/assets/components/jquery/src/sizzle-jquery.js +9 -0
  160. data/vendor/assets/components/jquery/src/support.js +241 -0
  161. data/vendor/assets/components/jquery/src/traversing.js +275 -0
  162. data/vendor/assets/components/jquery/test/csp.php +16 -0
  163. data/vendor/assets/components/jquery/test/data/1x1.jpg +0 -0
  164. data/vendor/assets/components/jquery/test/data/ajax/unreleasedXHR.html +25 -0
  165. data/vendor/assets/components/jquery/test/data/atom+xml.php +4 -0
  166. data/vendor/assets/components/jquery/test/data/badcall.js +1 -0
  167. data/vendor/assets/components/jquery/test/data/badjson.js +1 -0
  168. data/vendor/assets/components/jquery/test/data/cleanScript.html +10 -0
  169. data/vendor/assets/components/jquery/test/data/core/cc_on.html +22 -0
  170. data/vendor/assets/components/jquery/test/data/dashboard.xml +11 -0
  171. data/vendor/assets/components/jquery/test/data/dimensions/documentLarge.html +17 -0
  172. data/vendor/assets/components/jquery/test/data/dimensions/documentSmall.html +21 -0
  173. data/vendor/assets/components/jquery/test/data/echoData.php +1 -0
  174. data/vendor/assets/components/jquery/test/data/echoQuery.php +1 -0
  175. data/vendor/assets/components/jquery/test/data/errorWithText.php +5 -0
  176. data/vendor/assets/components/jquery/test/data/etag.php +21 -0
  177. data/vendor/assets/components/jquery/test/data/evalScript.php +1 -0
  178. data/vendor/assets/components/jquery/test/data/event/longLoadScript.php +4 -0
  179. data/vendor/assets/components/jquery/test/data/event/promiseReady.html +17 -0
  180. data/vendor/assets/components/jquery/test/data/event/syncReady.html +23 -0
  181. data/vendor/assets/components/jquery/test/data/headers.php +18 -0
  182. data/vendor/assets/components/jquery/test/data/if_modified_since.php +20 -0
  183. data/vendor/assets/components/jquery/test/data/iframe.html +8 -0
  184. data/vendor/assets/components/jquery/test/data/jquery-1.8.2.ajax_xhr.min.js +2 -0
  185. data/vendor/assets/components/jquery/test/data/json.php +13 -0
  186. data/vendor/assets/components/jquery/test/data/json_obj.js +1 -0
  187. data/vendor/assets/components/jquery/test/data/jsonp.php +14 -0
  188. data/vendor/assets/components/jquery/test/data/manipulation/iframe-denied.html +36 -0
  189. data/vendor/assets/components/jquery/test/data/name.html +1 -0
  190. data/vendor/assets/components/jquery/test/data/name.php +24 -0
  191. data/vendor/assets/components/jquery/test/data/nocontent.php +5 -0
  192. data/vendor/assets/components/jquery/test/data/offset/absolute.html +41 -0
  193. data/vendor/assets/components/jquery/test/data/offset/body.html +26 -0
  194. data/vendor/assets/components/jquery/test/data/offset/fixed.html +34 -0
  195. data/vendor/assets/components/jquery/test/data/offset/relative.html +31 -0
  196. data/vendor/assets/components/jquery/test/data/offset/scroll.html +39 -0
  197. data/vendor/assets/components/jquery/test/data/offset/static.html +31 -0
  198. data/vendor/assets/components/jquery/test/data/offset/table.html +43 -0
  199. data/vendor/assets/components/jquery/test/data/params_html.php +12 -0
  200. data/vendor/assets/components/jquery/test/data/readywaitasset.js +1 -0
  201. data/vendor/assets/components/jquery/test/data/readywaitloader.js +25 -0
  202. data/vendor/assets/components/jquery/test/data/script.php +11 -0
  203. data/vendor/assets/components/jquery/test/data/selector/html5_selector.html +114 -0
  204. data/vendor/assets/components/jquery/test/data/selector/sizzle_cache.html +21 -0
  205. data/vendor/assets/components/jquery/test/data/statusText.php +5 -0
  206. data/vendor/assets/components/jquery/test/data/support/bodyBackground.html +28 -0
  207. data/vendor/assets/components/jquery/test/data/support/shrinkWrapBlocks.html +23 -0
  208. data/vendor/assets/components/jquery/test/data/support/testElementCrash.html +17 -0
  209. data/vendor/assets/components/jquery/test/data/test.html +7 -0
  210. data/vendor/assets/components/jquery/test/data/test.js +3 -0
  211. data/vendor/assets/components/jquery/test/data/test.php +7 -0
  212. data/vendor/assets/components/jquery/test/data/test2.html +5 -0
  213. data/vendor/assets/components/jquery/test/data/test3.html +3 -0
  214. data/vendor/assets/components/jquery/test/data/testinit.js +269 -0
  215. data/vendor/assets/components/jquery/test/data/testrunner.js +368 -0
  216. data/vendor/assets/components/jquery/test/data/testsuite.css +155 -0
  217. data/vendor/assets/components/jquery/test/data/text.php +12 -0
  218. data/vendor/assets/components/jquery/test/data/ua.txt +272 -0
  219. data/vendor/assets/components/jquery/test/data/with_fries.xml +25 -0
  220. data/vendor/assets/components/jquery/test/data/with_fries_over_jsonp.php +7 -0
  221. data/vendor/assets/components/jquery/test/delegatetest.html +228 -0
  222. data/vendor/assets/components/jquery/test/hovertest.html +158 -0
  223. data/vendor/assets/components/jquery/test/index.html +330 -0
  224. data/vendor/assets/components/jquery/test/localfile.html +75 -0
  225. data/vendor/assets/components/jquery/test/networkerror.html +84 -0
  226. data/vendor/assets/components/jquery/test/polluted.php +110 -0
  227. data/vendor/assets/components/jquery/test/readywait.html +70 -0
  228. data/vendor/assets/components/jquery/test/unit/ajax.js +1971 -0
  229. data/vendor/assets/components/jquery/test/unit/attributes.js +1332 -0
  230. data/vendor/assets/components/jquery/test/unit/callbacks.js +326 -0
  231. data/vendor/assets/components/jquery/test/unit/core.js +1332 -0
  232. data/vendor/assets/components/jquery/test/unit/css.js +1036 -0
  233. data/vendor/assets/components/jquery/test/unit/data.js +636 -0
  234. data/vendor/assets/components/jquery/test/unit/deferred.js +440 -0
  235. data/vendor/assets/components/jquery/test/unit/deprecated.js +1 -0
  236. data/vendor/assets/components/jquery/test/unit/dimensions.js +461 -0
  237. data/vendor/assets/components/jquery/test/unit/effects.js +2050 -0
  238. data/vendor/assets/components/jquery/test/unit/event.js +2690 -0
  239. data/vendor/assets/components/jquery/test/unit/exports.js +7 -0
  240. data/vendor/assets/components/jquery/test/unit/manipulation.js +2242 -0
  241. data/vendor/assets/components/jquery/test/unit/offset.js +549 -0
  242. data/vendor/assets/components/jquery/test/unit/queue.js +316 -0
  243. data/vendor/assets/components/jquery/test/unit/selector.js +185 -0
  244. data/vendor/assets/components/jquery/test/unit/serialize.js +146 -0
  245. data/vendor/assets/components/jquery/test/unit/support.js +384 -0
  246. data/vendor/assets/components/jquery/test/unit/traversing.js +667 -0
  247. data/vendor/assets/components/jquery/test/xhtml.php +5 -0
  248. data/vendor/assets/components/sir-trevor-js/CHANGELOG.md +44 -0
  249. data/vendor/assets/components/sir-trevor-js/Gemfile +3 -0
  250. data/vendor/assets/components/sir-trevor-js/Gemfile.lock +10 -0
  251. data/vendor/assets/components/sir-trevor-js/Gruntfile.js +109 -0
  252. data/vendor/assets/components/sir-trevor-js/MIT-LICENCE +20 -0
  253. data/vendor/assets/components/sir-trevor-js/Readme.md +84 -0
  254. data/vendor/assets/components/sir-trevor-js/bower.json +21 -0
  255. data/vendor/assets/components/sir-trevor-js/component.json +42 -0
  256. data/vendor/assets/components/sir-trevor-js/contributing.md +74 -0
  257. data/vendor/assets/components/sir-trevor-js/examples-component/component.json +14 -0
  258. data/vendor/assets/components/sir-trevor-js/examples-component/index.html +33 -0
  259. data/vendor/assets/components/sir-trevor-js/examples-component/index.js +29 -0
  260. data/vendor/assets/components/sir-trevor-js/examples-component/javascript/example_block.js +203 -0
  261. data/vendor/assets/components/sir-trevor-js/examples-component/javascript/limit_chars.js +46 -0
  262. data/vendor/assets/components/sir-trevor-js/examples-component/sir-trevor.gif +0 -0
  263. data/vendor/assets/components/sir-trevor-js/locales/cn.js +51 -0
  264. data/vendor/assets/components/sir-trevor-js/locales/de.js +51 -0
  265. data/vendor/assets/components/sir-trevor-js/locales/es.js +51 -0
  266. data/vendor/assets/components/sir-trevor-js/locales/fi.js +51 -0
  267. data/vendor/assets/components/sir-trevor-js/locales/fr.js +51 -0
  268. data/vendor/assets/components/sir-trevor-js/locales/pt.js +52 -0
  269. data/vendor/assets/components/sir-trevor-js/package.json +23 -0
  270. data/vendor/assets/components/sir-trevor-js/sir-trevor-icons.css +6 -0
  271. data/vendor/assets/components/sir-trevor-js/sir-trevor.css +393 -0
  272. data/vendor/assets/components/sir-trevor-js/sir-trevor.css.map +7 -0
  273. data/vendor/assets/components/sir-trevor-js/sir-trevor.js +5481 -0
  274. data/vendor/assets/components/sir-trevor-js/sir-trevor.min.js +13 -0
  275. data/vendor/assets/components/underscore/CNAME +1 -0
  276. data/vendor/assets/components/underscore/CONTRIBUTING.md +9 -0
  277. data/vendor/assets/components/underscore/LICENSE +22 -0
  278. data/vendor/assets/components/underscore/README.md +19 -0
  279. data/vendor/assets/components/underscore/Rakefile +10 -0
  280. data/vendor/assets/components/underscore/docs/docco.css +192 -0
  281. data/vendor/assets/components/underscore/docs/favicon.ico +0 -0
  282. data/vendor/assets/components/underscore/docs/images/background.png +0 -0
  283. data/vendor/assets/components/underscore/docs/images/underscore.png +0 -0
  284. data/vendor/assets/components/underscore/docs/underscore.html +823 -0
  285. data/vendor/assets/components/underscore/favicon.ico +0 -0
  286. data/vendor/assets/components/underscore/index.html +2467 -0
  287. data/vendor/assets/components/underscore/index.js +1 -0
  288. data/vendor/assets/components/underscore/package.json +16 -0
  289. data/vendor/assets/components/underscore/test/arrays.js +200 -0
  290. data/vendor/assets/components/underscore/test/chaining.js +59 -0
  291. data/vendor/assets/components/underscore/test/collections.js +453 -0
  292. data/vendor/assets/components/underscore/test/functions.js +265 -0
  293. data/vendor/assets/components/underscore/test/index.html +44 -0
  294. data/vendor/assets/components/underscore/test/objects.js +570 -0
  295. data/vendor/assets/components/underscore/test/speed.js +75 -0
  296. data/vendor/assets/components/underscore/test/utility.js +266 -0
  297. data/vendor/assets/components/underscore/test/vendor/jquery.js +9404 -0
  298. data/vendor/assets/components/underscore/test/vendor/jslitmus.js +670 -0
  299. data/vendor/assets/components/underscore/test/vendor/qunit.css +235 -0
  300. data/vendor/assets/components/underscore/test/vendor/qunit.js +1977 -0
  301. data/vendor/assets/components/underscore/test/vendor/runner.js +98 -0
  302. data/vendor/assets/components/underscore/underscore-min.js +1 -0
  303. data/vendor/assets/components/underscore/underscore.js +1226 -0
  304. 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,2 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--audio"]) }<
2
+ %div{soundcloud_url: block["remote_id"]}
@@ -0,0 +1,4 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--definition"]) }<
2
+ %dl
3
+ %dt= block["term"]
4
+ %dd= sir_trevor_markdown block["text"]
@@ -0,0 +1,2 @@
1
+ %div.cp.lady-josephine-block--divider
2
+ %hr
@@ -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,5 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--extended-quote"]) }<
2
+ %blockquote
3
+ %p<>= sir_trevor_markdown block["text"].chomp("\n")
4
+ %cite<
5
+ = block["cite"]
@@ -0,0 +1,2 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--tweet"]) }<
2
+ %div{ tweet_url: block["remote_id"] }
@@ -0,0 +1,2 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--facebook-post"]) }<
2
+ %div{ facebook_url: block["url"] }
@@ -0,0 +1,2 @@
1
+ %h2{ component_attributes_for(block, ["lady-josephine-block--heading", "cp"]) }<
2
+ = sir_trevor_markdown block["text"]
@@ -0,0 +1 @@
1
+ = block["text"].html_safe
@@ -0,0 +1,2 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--instagram"]) }<
2
+ %div{ instagram_url: block["remote_id"] }
@@ -0,0 +1,3 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--list"]) }<
2
+ %ul
3
+ = sir_trevor_markdown block["text"]
@@ -0,0 +1,5 @@
1
+ %div{ component_attributes_for(block, ["cp", "lady-josephine-block--quote"]) }<
2
+ %blockquote
3
+ %p<>= sir_trevor_markdown block["text"].chomp("\n")
4
+ %cite<
5
+ = block["cite"]
@@ -0,0 +1,2 @@
1
+ %p{ component_attributes_for(block, ["cp", "lady-josephine-block--text"]) }<
2
+ = sir_trevor_markdown block["text"].chomp
@@ -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,9 @@
1
+ LadyJosephine::Engine.routes.draw do
2
+ resources :images, only: [:create]
3
+
4
+ controller :editor do
5
+ get '/content/:resource/:id/version' => :version
6
+ post '/content/:resource/:id/ping' => :ping
7
+ end
8
+
9
+ end
@@ -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,9 @@
1
+ Description:
2
+ This generator will add the necesarry migration for your model
3
+ to function with LadyJosephine.
4
+
5
+ Example:
6
+ rails generate lady_josephine_migration ModelName
7
+
8
+ This will create:
9
+ db/migrations/NUMBER_add_lady_josephine_to_model_name.rb
@@ -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(/&lt;br&gt;/, "<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