├── .gitignore ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── Rakefile ├── app └── assets │ ├── javascripts │ └── quill.js │ └── stylesheets │ └── quill.snow.css ├── init.rb ├── lib ├── quill-rails.rb └── quill │ ├── rails.rb │ └── rails │ ├── configuration.rb │ ├── engine.rb │ ├── form_helpers.rb │ ├── templates │ └── template.html.erb │ ├── version.rb │ └── view_helpers.rb ├── quill-rails.gemspec └── spec ├── quill-rails └── quill-rails_spec.rb └── spec_helper.rb /.gitignore: -------------------------------------------------------------------------------- 1 | /*.gem 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'http://rubygems.org' 2 | 3 | gemspec -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: . 3 | specs: 4 | quill-rails (0.1.4) 5 | railties (>= 3.1.0, < 5.0) 6 | 7 | GEM 8 | remote: http://rubygems.org/ 9 | specs: 10 | actionmailer (4.1.4) 11 | actionpack (= 4.1.4) 12 | actionview (= 4.1.4) 13 | mail (~> 2.5.4) 14 | actionpack (4.1.4) 15 | actionview (= 4.1.4) 16 | activesupport (= 4.1.4) 17 | rack (~> 1.5.2) 18 | rack-test (~> 0.6.2) 19 | actionview (4.1.4) 20 | activesupport (= 4.1.4) 21 | builder (~> 3.1) 22 | erubis (~> 2.7.0) 23 | activemodel (4.1.4) 24 | activesupport (= 4.1.4) 25 | builder (~> 3.1) 26 | activerecord (4.1.4) 27 | activemodel (= 4.1.4) 28 | activesupport (= 4.1.4) 29 | arel (~> 5.0.0) 30 | activesupport (4.1.4) 31 | i18n (~> 0.6, >= 0.6.9) 32 | json (~> 1.7, >= 1.7.7) 33 | minitest (~> 5.1) 34 | thread_safe (~> 0.1) 35 | tzinfo (~> 1.1) 36 | arel (5.0.1.20140414130214) 37 | builder (3.2.2) 38 | coffee-rails (4.0.1) 39 | coffee-script (>= 2.2.0) 40 | railties (>= 4.0.0, < 5.0) 41 | coffee-script (2.2.0) 42 | coffee-script-source 43 | execjs 44 | coffee-script-source (1.7.0) 45 | erubis (2.7.0) 46 | execjs (2.2.1) 47 | hike (1.2.3) 48 | i18n (0.6.9) 49 | jquery-rails (3.1.1) 50 | railties (>= 3.0, < 5.0) 51 | thor (>= 0.14, < 2.0) 52 | json (1.8.1) 53 | mail (2.5.4) 54 | mime-types (~> 1.16) 55 | treetop (~> 1.4.8) 56 | mime-types (1.25.1) 57 | minitest (5.3.5) 58 | multi_json (1.10.1) 59 | polyglot (0.3.5) 60 | rack (1.5.2) 61 | rack-test (0.6.2) 62 | rack (>= 1.0) 63 | rails (4.1.4) 64 | actionmailer (= 4.1.4) 65 | actionpack (= 4.1.4) 66 | actionview (= 4.1.4) 67 | activemodel (= 4.1.4) 68 | activerecord (= 4.1.4) 69 | activesupport (= 4.1.4) 70 | bundler (>= 1.3.0, < 2.0) 71 | railties (= 4.1.4) 72 | sprockets-rails (~> 2.0) 73 | railties (4.1.4) 74 | actionpack (= 4.1.4) 75 | activesupport (= 4.1.4) 76 | rake (>= 0.8.7) 77 | thor (>= 0.18.1, < 2.0) 78 | rake (10.3.2) 79 | sprockets (2.12.1) 80 | hike (~> 1.2) 81 | multi_json (~> 1.0) 82 | rack (~> 1.0) 83 | tilt (~> 1.1, != 1.3.0) 84 | sprockets-rails (2.1.3) 85 | actionpack (>= 3.0) 86 | activesupport (>= 3.0) 87 | sprockets (~> 2.8) 88 | sqlite3 (1.3.9) 89 | thor (0.19.1) 90 | thread_safe (0.3.4) 91 | tilt (1.4.1) 92 | treetop (1.4.15) 93 | polyglot 94 | polyglot (>= 0.3.1) 95 | tzinfo (1.2.1) 96 | thread_safe (~> 0.1) 97 | 98 | PLATFORMS 99 | ruby 100 | 101 | DEPENDENCIES 102 | coffee-rails 103 | jquery-rails 104 | quill-rails! 105 | rails (>= 3.1) 106 | sqlite3 107 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Original Quill License: 2 | 3 | Copyright (c) 2013, salesforce.com 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 11 | 12 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # quill-rails 2 | This gem provides Rails 3/4 asset pipeline loading for [Quill](http://quilljs.com/), as well as a very convienient helper method to quickly and easily get a nice looking rich text editor. 3 | 4 | # Installation 5 | 6 | Add the following lines to your applications Gemfile: 7 | 8 | ``` 9 | gem 'quill-rails', '~> 0.1.0' 10 | ``` 11 | 12 | Then run bundle install to update your application's bundle. 13 | 14 | Add Quill to your manifest in app/assets/javascripts/application.js: 15 | 16 | ``` 17 | //= require quill 18 | ``` 19 | 20 | You can make the original Quill Snow theme available by adding the following to your manifest in app/assets/stylesheets/application.css: 21 | 22 | ``` 23 | /* 24 | *= require quill.snow 25 | */ 26 | ``` 27 | 28 | # Usage 29 | 30 | ## Quick Start 31 | 32 | This gem provides a View Helper to automatically create the ['Full Example' demo seen here](http://quilljs.com/examples/#full-example). Just add the following to your view: 33 | 34 | ``` 35 | <%= quill_editor %> 36 | ``` 37 | 38 | and a sexy looking Quill editor will be there! 39 | 40 | ## Useage in Forms 41 | 42 | YO! - This is in development and is may change as more functionality is added. 43 | 44 | For use in forms, the quill_editor helper creates a hidden field tag whose value is in sync with the text in the editor. By default, it has an id and name of 'quill-value'. 45 | 46 | To change both the id or name, just pass a string as the first argument: 47 | 48 | ``` 49 | <%= quill_editor 'my-name-and-id' %> 50 | ``` 51 | 52 | To have an id that's different from the name: 53 | 54 | ``` 55 | <%= quill_editor nil, { name: 'my-name', id: 'my-id' } %> 56 | ``` 57 | 58 | To have an initial value in the editor: 59 | 60 | ``` 61 | <%= quill_editor nil, { name: 'my-name', value: 'Awesome!' } %> 62 | ``` 63 | 64 | ## Custom Functionality 65 | 66 | Because this includes Quill assets, you can also refer to the [Quill Documentation](http://quilljs.com/docs/editor/) to use other, more custom, features. 67 | 68 | # Changelog 69 | 70 | ### 0.1.4 71 | * Added 'value' option for the helper function (thanks nerdyglasses!) 72 | * Updated from Quill 0.13 to 0.15 73 | 74 | # Roadmap 75 | 76 | The following features would be nice to have: 77 | 78 | - Configuring the default quill_editor e.g. change wrapper, change theme, etc. 79 | - Have a form helper tag (f.quill_editor) 80 | - Parse any RTE input for malicious tags 81 | 82 | # Contributing 83 | 84 | Contributors are very welcome! Fork it, branch it, change it, push it, pull request it, and [bop it](https://www.youtube.com/watch?v=fH4XHwefPVY). 85 | 86 | If you have an idea for new features or improving existing features, let me know! 87 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/river-of-code/quill-rails/74edaeec20fe8f506a5185973c8df72431700e73/Rakefile -------------------------------------------------------------------------------- /app/assets/stylesheets/quill.snow.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'quill-snow'; 3 | font-style: normal; 4 | font-weight: normal; 5 | src: url("data:application/vnd.ms-fontobject;base64,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") format('embedded-opentype'), url("data:application/font-woff;base64,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") format('woff'); 6 | } 7 | .ql-toolbar-container { 8 | box-sizing: border-box; 9 | padding: 8px 8px 7px 8px; 10 | user-select: none; 11 | -webkit-user-select: none; 12 | -moz-user-select: none; 13 | -ms-user-select: none; 14 | } 15 | .ql-toolbar-container .ql-format-group { 16 | display: inline-block; 17 | margin-right: 15px; 18 | vertical-align: middle; 19 | } 20 | .ql-toolbar-container .ql-format-separator { 21 | box-sizing: border-box; 22 | background-color: #ddd; 23 | display: inline-block; 24 | height: 18px; 25 | margin-left: 4px; 26 | margin-right: 4px; 27 | vertical-align: middle; 28 | width: 1px; 29 | } 30 | .ql-toolbar-container .ql-format-button { 31 | box-sizing: border-box; 32 | display: inline-block; 33 | height: 24px; 34 | line-height: 24px; 35 | vertical-align: middle; 36 | background-position: center center; 37 | background-repeat: no-repeat; 38 | box-sizing: border-box; 39 | cursor: pointer; 40 | font-family: 'quill-snow'; 41 | font-size: 12px; 42 | margin-top: 1px; 43 | text-align: center; 44 | width: 24px; 45 | } 46 | .ql-toolbar-container .ql-format-button:hover, 47 | .ql-toolbar-container .ql-format-button.ql-active, 48 | .ql-toolbar-container .ql-format-button.ql-on { 49 | color: #06c; 50 | } 51 | .ql-toolbar-container .ql-format-button.ql-bold:before { 52 | content: "\e801"; 53 | } 54 | .ql-toolbar-container .ql-format-button.ql-italic:before { 55 | content: "\e802"; 56 | } 57 | .ql-toolbar-container .ql-format-button.ql-underline:before { 58 | content: "\e803"; 59 | } 60 | .ql-toolbar-container .ql-format-button.ql-strike:before { 61 | content: "\e804"; 62 | } 63 | .ql-toolbar-container .ql-format-button.ql-link:before { 64 | content: "\e805"; 65 | } 66 | .ql-toolbar-container .ql-format-button.ql-image:before { 67 | content: "\e806"; 68 | } 69 | .ql-toolbar-container .ql-format-button.ql-list:before { 70 | content: "\e807"; 71 | } 72 | .ql-toolbar-container .ql-format-button.ql-bullet:before { 73 | content: "\e808"; 74 | } 75 | .ql-toolbar-container .ql-format-button.ql-indent:before { 76 | content: "\e809"; 77 | } 78 | .ql-toolbar-container .ql-format-button.ql-outdent:before { 79 | content: "\e80A"; 80 | } 81 | .ql-toolbar-container .ql-format-button.ql-superscript:before { 82 | content: "\e80F"; 83 | } 84 | .ql-toolbar-container .ql-format-button.ql-subscript:before { 85 | content: "\e810"; 86 | } 87 | .ql-toolbar-container .ql-format-button.ql-authorship:before { 88 | content: "\e811"; 89 | } 90 | /* Fix for iOS not losing hover state after click */ 91 | .ql-toolbar-container.ios .ql-format-button:hover { 92 | color: inherit; 93 | } 94 | .ql-toolbar-container.ios .ql-format-button.ql-active, 95 | .ql-toolbar-container.ios .ql-format-button.ql-on { 96 | color: #06c; 97 | } 98 | .ql-picker { 99 | box-sizing: border-box; 100 | font-size: 13px; 101 | display: inline-block; 102 | font-family: 'Helvetica', 'Arial', sans-serif; 103 | font-weight: bold; 104 | position: relative; 105 | } 106 | .ql-picker .ql-picker-label { 107 | box-sizing: border-box; 108 | display: inline-block; 109 | height: 24px; 110 | line-height: 24px; 111 | vertical-align: middle; 112 | background-color: #fff; 113 | border: 1px solid transparent; 114 | cursor: pointer; 115 | padding-left: 8px; 116 | padding-right: 8px; 117 | position: relative; 118 | width: 100%; 119 | } 120 | .ql-picker .ql-picker-label:after { 121 | content: "\e812"; 122 | float: right; 123 | font-family: 'quill-snow'; 124 | font-size: 12px; 125 | margin-left: 8px; 126 | } 127 | .ql-picker .ql-picker-label.ql-active, 128 | .ql-picker .ql-picker-label:hover { 129 | color: #06c; 130 | } 131 | .ql-picker .ql-picker-options { 132 | background-color: #fff; 133 | border: 1px solid transparent; 134 | box-sizing: border-box; 135 | display: none; 136 | padding: 4px 8px; 137 | position: absolute; 138 | width: 100%; 139 | } 140 | .ql-picker .ql-picker-options .ql-picker-item { 141 | box-sizing: border-box; 142 | cursor: pointer; 143 | display: block; 144 | padding-bottom: 6px; 145 | padding-top: 6px; 146 | } 147 | .ql-picker .ql-picker-options .ql-picker-item.selected, 148 | .ql-picker .ql-picker-options .ql-picker-item:hover { 149 | color: #06c; 150 | } 151 | .ql-picker.ql-expanded .ql-picker-label { 152 | border-color: #ccc; 153 | color: #ccc; 154 | z-index: 2; 155 | } 156 | .ql-picker.ql-expanded .ql-picker-options { 157 | border-color: #ccc; 158 | box-shadow: rgba(0,0,0,0.2) 0 2px 8px; 159 | display: block; 160 | margin-top: -1px; 161 | z-index: 1; 162 | } 163 | .ql-picker.ql-font { 164 | width: 105px; 165 | } 166 | .ql-picker.ql-size { 167 | width: 80px; 168 | } 169 | .ql-picker.ql-align { 170 | font-family: 'quill-snow'; 171 | } 172 | .ql-picker.ql-align .ql-picker-label { 173 | margin-top: 1px; 174 | } 175 | .ql-picker.ql-align .ql-picker-label:after { 176 | content: normal; 177 | } 178 | .ql-picker.ql-align .ql-picker-options { 179 | width: 32px; 180 | } 181 | .ql-picker.ql-align .ql-picker-label[data-value=left]:before, 182 | .ql-picker.ql-align .ql-picker-item[data-value=left]:before { 183 | content: "\e80B"; 184 | } 185 | .ql-picker.ql-align .ql-picker-label[data-value=right]:before, 186 | .ql-picker.ql-align .ql-picker-item[data-value=right]:before { 187 | content: "\e80C"; 188 | } 189 | .ql-picker.ql-align .ql-picker-label[data-value=center]:before, 190 | .ql-picker.ql-align .ql-picker-item[data-value=center]:before { 191 | content: "\e80D"; 192 | } 193 | .ql-picker.ql-align .ql-picker-label[data-value=justify]:before, 194 | .ql-picker.ql-align .ql-picker-item[data-value=justify]:before { 195 | content: "\e80E"; 196 | } 197 | .ql-picker.ql-color-picker { 198 | width: 32px; 199 | } 200 | .ql-picker.ql-color-picker .ql-picker-label { 201 | background-position: center center; 202 | background-repeat: no-repeat; 203 | } 204 | .ql-picker.ql-color-picker .ql-picker-label:after { 205 | content: normal; 206 | } 207 | .ql-picker.ql-color-picker .ql-picker-options { 208 | padding: 6px; 209 | width: 154px; 210 | } 211 | .ql-picker.ql-color-picker .ql-picker-options .ql-picker-item { 212 | border: 1px solid transparent; 213 | float: left; 214 | height: 16px; 215 | margin: 2px; 216 | padding: 0px; 217 | width: 16px; 218 | } 219 | .ql-picker.ql-color-picker .ql-picker-options .ql-picker-item.ql-primary-color { 220 | margin-bottom: 8px; 221 | } 222 | .ql-picker.ql-color-picker .ql-picker-options .ql-picker-item.selected, 223 | .ql-picker.ql-color-picker .ql-picker-options .ql-picker-item:hover { 224 | border-color: #000; 225 | } 226 | .ql-picker.ql-color .ql-picker-label { 227 | background-image: url("data:image/png;base64,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"); 228 | } 229 | .ql-picker.ql-color .ql-picker-label.ql-active, 230 | .ql-picker.ql-color .ql-picker-label:hover, 231 | .ql-picker.ql-color.ql-expanded .ql-picker-label { 232 | background-image: url("data:image/png;base64,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"); 233 | } 234 | .ql-picker.ql-background .ql-picker-label { 235 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/klEQVQ4T6WPvWoCQRSF3V4rxZ81AX/aFEJsBJs8hG5EkYQQm0Cq1HZ5BLHRztZSSCVY+lTrOcOZ5e5GRHHgm3vunTMHbi6O49w9uCsIgjIYglv0iw2INCRXaxvgU1+N6UlzQu3n3pNaoQJGqmSgjytxzjOyAWPz4HUDLMBOupf1ZFfgw0SV/Uz9n/Q/jw2ogqlqUeYNaIK5NGdcgR7ntwFv5qEPWmANOnrba5aXx/mzK9TAOyiBL3DIwFlBHoakVuDnD1X2W9CWJr+aea/z24BP83kJjqrsn9XbmfOnVsAJUbsyXIKekB+SAJwH8A3qt2gbEIFHCpyfa3UScA8nZ0rfoKKU4c8AAAAASUVORK5CYII="); 236 | } 237 | .ql-picker.ql-background .ql-picker-label.ql-active, 238 | .ql-picker.ql-background .ql-picker-label:hover, 239 | .ql-picker.ql-background.ql-expanded .ql-picker-label { 240 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA+ElEQVQ4y2P4//8/AyUYQqTdEgPiMBLZjsgGhEMFxUhhww1AMjUCSZEOkpwOkngETDOyC8SBOBJKg3AoVHwOCONQE4lsQDSSBIytAMRTgXgrlG2JrgbdCyCJGLhE2q00KH8HiI1NDbILJIA4DkoLQ8WWALEiENeB2FCxSKgasHpkAxKQJGyAWAmI5wKxAVRuH1SMB6oGrB7dC5JAnAjEIkCcDcQH0TBIjBeqRgLdCyDNySAayl8LxMpIhreCxJDUgtUjG5CKpHk6EJ8E0VC+MZSPLIZQj2SLFBCbEEz7QDUgtehekAHiPCCWJoWNnhdkoewSktiUZmcAal4Wl39PVNwAAAAASUVORK5CYII="); 241 | } 242 | -------------------------------------------------------------------------------- /init.rb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/river-of-code/quill-rails/74edaeec20fe8f506a5185973c8df72431700e73/init.rb -------------------------------------------------------------------------------- /lib/quill-rails.rb: -------------------------------------------------------------------------------- 1 | require 'quill/rails' if defined? Rails -------------------------------------------------------------------------------- /lib/quill/rails.rb: -------------------------------------------------------------------------------- 1 | require 'quill/rails/engine' 2 | require 'quill/rails/version' -------------------------------------------------------------------------------- /lib/quill/rails/configuration.rb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/river-of-code/quill-rails/74edaeec20fe8f506a5185973c8df72431700e73/lib/quill/rails/configuration.rb -------------------------------------------------------------------------------- /lib/quill/rails/engine.rb: -------------------------------------------------------------------------------- 1 | require 'quill/rails/view_helpers' 2 | require 'quill/rails/form_helpers' 3 | module Quill 4 | module Rails 5 | class Engine < ::Rails::Engine 6 | initializer 'quill-rails.view_helpers' do 7 | ActionView::Base.send :include, ViewHelpers 8 | end 9 | 10 | initializer 'quill-rails.form_helpers' do 11 | ActionView::Helpers::FormBuilder.send :include, FormHelpers 12 | end 13 | end 14 | end 15 | end -------------------------------------------------------------------------------- /lib/quill/rails/form_helpers.rb: -------------------------------------------------------------------------------- 1 | module Quill 2 | module Rails 3 | module FormHelpers 4 | def quill_editor(method, options={}) 5 | name = @object_name + "[#{method}]" 6 | id = options[:id] || @object_name + "_#{method}" 7 | @template.quill_editor(name, {id: id, value: @object.send(method)}) 8 | end 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /lib/quill/rails/templates/template.html.erb: -------------------------------------------------------------------------------- 1 |