effective_bootstrap 0.7.1 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/app/assets/images/icons/activity.svg +1 -13
- data/app/assets/images/icons/airplay.svg +1 -14
- data/app/assets/images/icons/alert-circle.svg +1 -15
- data/app/assets/images/icons/alert-octagon.svg +1 -15
- data/app/assets/images/icons/alert-triangle.svg +1 -15
- data/app/assets/images/icons/align-center.svg +1 -16
- data/app/assets/images/icons/align-justify.svg +1 -16
- data/app/assets/images/icons/align-left.svg +1 -16
- data/app/assets/images/icons/align-right.svg +1 -16
- data/app/assets/images/icons/anchor.svg +1 -15
- data/app/assets/images/icons/aperture.svg +1 -19
- data/app/assets/images/icons/archive.svg +1 -0
- data/app/assets/images/icons/arrow-down-circle.svg +1 -15
- data/app/assets/images/icons/arrow-down-left.svg +1 -14
- data/app/assets/images/icons/arrow-down-right.svg +1 -14
- data/app/assets/images/icons/arrow-down.svg +1 -14
- data/app/assets/images/icons/arrow-left-circle.svg +1 -15
- data/app/assets/images/icons/arrow-left.svg +1 -14
- data/app/assets/images/icons/arrow-right-circle.svg +1 -15
- data/app/assets/images/icons/arrow-right.svg +1 -14
- data/app/assets/images/icons/arrow-up-circle.svg +1 -15
- data/app/assets/images/icons/arrow-up-left.svg +1 -14
- data/app/assets/images/icons/arrow-up-right.svg +1 -14
- data/app/assets/images/icons/arrow-up.svg +1 -14
- data/app/assets/images/icons/at-sign.svg +1 -14
- data/app/assets/images/icons/award.svg +1 -14
- data/app/assets/images/icons/bar-chart-2.svg +1 -15
- data/app/assets/images/icons/bar-chart.svg +1 -15
- data/app/assets/images/icons/battery-charging.svg +1 -15
- data/app/assets/images/icons/battery.svg +1 -14
- data/app/assets/images/icons/bell-off.svg +1 -14
- data/app/assets/images/icons/bell.svg +1 -13
- data/app/assets/images/icons/bluetooth.svg +1 -13
- data/app/assets/images/icons/bold.svg +1 -14
- data/app/assets/images/icons/book-open.svg +1 -14
- data/app/assets/images/icons/book.svg +1 -14
- data/app/assets/images/icons/bookmark.svg +1 -13
- data/app/assets/images/icons/box.svg +1 -15
- data/app/assets/images/icons/briefcase.svg +1 -14
- data/app/assets/images/icons/calendar.svg +1 -16
- data/app/assets/images/icons/camera-off.svg +1 -14
- data/app/assets/images/icons/camera.svg +1 -14
- data/app/assets/images/icons/cast.svg +1 -14
- data/app/assets/images/icons/check-circle.svg +1 -14
- data/app/assets/images/icons/check-square.svg +1 -14
- data/app/assets/images/icons/check.svg +1 -13
- data/app/assets/images/icons/chevron-down.svg +1 -13
- data/app/assets/images/icons/chevron-left.svg +1 -13
- data/app/assets/images/icons/chevron-right.svg +1 -13
- data/app/assets/images/icons/chevron-up.svg +1 -13
- data/app/assets/images/icons/chevrons-down.svg +1 -14
- data/app/assets/images/icons/chevrons-left.svg +1 -14
- data/app/assets/images/icons/chevrons-right.svg +1 -14
- data/app/assets/images/icons/chevrons-up.svg +1 -14
- data/app/assets/images/icons/chrome.svg +1 -17
- data/app/assets/images/icons/circle.svg +1 -13
- data/app/assets/images/icons/clipboard.svg +1 -14
- data/app/assets/images/icons/clock.svg +1 -14
- data/app/assets/images/icons/cloud-drizzle.svg +1 -19
- data/app/assets/images/icons/cloud-lightning.svg +1 -14
- data/app/assets/images/icons/cloud-off.svg +1 -14
- data/app/assets/images/icons/cloud-rain.svg +1 -16
- data/app/assets/images/icons/cloud-snow.svg +1 -19
- data/app/assets/images/icons/cloud.svg +1 -13
- data/app/assets/images/icons/code.svg +1 -14
- data/app/assets/images/icons/codepen.svg +1 -17
- data/app/assets/images/icons/codesandbox.svg +1 -0
- data/app/assets/images/icons/coffee.svg +1 -0
- data/app/assets/images/icons/columns.svg +1 -0
- data/app/assets/images/icons/command.svg +1 -13
- data/app/assets/images/icons/compass.svg +1 -14
- data/app/assets/images/icons/copy.svg +1 -14
- data/app/assets/images/icons/corner-down-left.svg +1 -14
- data/app/assets/images/icons/corner-down-right.svg +1 -14
- data/app/assets/images/icons/corner-left-down.svg +1 -14
- data/app/assets/images/icons/corner-left-up.svg +1 -14
- data/app/assets/images/icons/corner-right-down.svg +1 -14
- data/app/assets/images/icons/corner-right-up.svg +1 -14
- data/app/assets/images/icons/corner-up-left.svg +1 -14
- data/app/assets/images/icons/corner-up-right.svg +1 -14
- data/app/assets/images/icons/cpu.svg +1 -22
- data/app/assets/images/icons/credit-card.svg +1 -14
- data/app/assets/images/icons/crop.svg +1 -14
- data/app/assets/images/icons/crosshair.svg +1 -17
- data/app/assets/images/icons/database.svg +1 -15
- data/app/assets/images/icons/delete.svg +1 -15
- data/app/assets/images/icons/disc.svg +1 -14
- data/app/assets/images/icons/dollar-sign.svg +1 -14
- data/app/assets/images/icons/download-cloud.svg +1 -15
- data/app/assets/images/icons/download.svg +1 -15
- data/app/assets/images/icons/droplet.svg +1 -13
- data/app/assets/images/icons/edit-2.svg +1 -13
- data/app/assets/images/icons/edit-3.svg +1 -14
- data/app/assets/images/icons/edit.svg +1 -14
- data/app/assets/images/icons/external-link.svg +1 -15
- data/app/assets/images/icons/eye-off.svg +1 -14
- data/app/assets/images/icons/eye.svg +1 -14
- data/app/assets/images/icons/facebook.svg +1 -13
- data/app/assets/images/icons/fast-forward.svg +1 -14
- data/app/assets/images/icons/feather.svg +1 -15
- data/app/assets/images/icons/figma.svg +1 -0
- data/app/assets/images/icons/file-minus.svg +1 -15
- data/app/assets/images/icons/file-plus.svg +1 -16
- data/app/assets/images/icons/file-text.svg +1 -17
- data/app/assets/images/icons/file.svg +1 -14
- data/app/assets/images/icons/film.svg +1 -20
- data/app/assets/images/icons/filter.svg +1 -13
- data/app/assets/images/icons/flag.svg +1 -14
- data/app/assets/images/icons/folder-minus.svg +1 -14
- data/app/assets/images/icons/folder-plus.svg +1 -15
- data/app/assets/images/icons/folder.svg +1 -13
- data/app/assets/images/icons/framer.svg +1 -0
- data/app/assets/images/icons/frown.svg +1 -0
- data/app/assets/images/icons/gift.svg +1 -0
- data/app/assets/images/icons/git-branch.svg +1 -16
- data/app/assets/images/icons/git-commit.svg +1 -15
- data/app/assets/images/icons/git-merge.svg +1 -15
- data/app/assets/images/icons/git-pull-request.svg +1 -16
- data/app/assets/images/icons/github.svg +1 -13
- data/app/assets/images/icons/gitlab.svg +1 -13
- data/app/assets/images/icons/globe.svg +1 -15
- data/app/assets/images/icons/grid.svg +1 -16
- data/app/assets/images/icons/hard-drive.svg +1 -16
- data/app/assets/images/icons/hash.svg +1 -16
- data/app/assets/images/icons/headphones.svg +1 -14
- data/app/assets/images/icons/heart.svg +1 -13
- data/app/assets/images/icons/help-circle.svg +1 -15
- data/app/assets/images/icons/hexagon.svg +1 -0
- data/app/assets/images/icons/home.svg +1 -14
- data/app/assets/images/icons/image.svg +1 -15
- data/app/assets/images/icons/inbox.svg +1 -14
- data/app/assets/images/icons/info.svg +1 -15
- data/app/assets/images/icons/instagram.svg +1 -15
- data/app/assets/images/icons/italic.svg +1 -15
- data/app/assets/images/icons/key.svg +1 -0
- data/app/assets/images/icons/layers.svg +1 -15
- data/app/assets/images/icons/layout.svg +1 -15
- data/app/assets/images/icons/life-buoy.svg +1 -19
- data/app/assets/images/icons/link-2.svg +1 -14
- data/app/assets/images/icons/link.svg +1 -14
- data/app/assets/images/icons/linkedin.svg +1 -15
- data/app/assets/images/icons/list.svg +1 -18
- data/app/assets/images/icons/loader.svg +1 -20
- data/app/assets/images/icons/lock.svg +1 -14
- data/app/assets/images/icons/log-in.svg +1 -15
- data/app/assets/images/icons/log-out.svg +1 -15
- data/app/assets/images/icons/mail.svg +1 -14
- data/app/assets/images/icons/map-pin.svg +1 -14
- data/app/assets/images/icons/map.svg +1 -15
- data/app/assets/images/icons/maximize-2.svg +1 -16
- data/app/assets/images/icons/maximize.svg +1 -13
- data/app/assets/images/icons/meh.svg +1 -0
- data/app/assets/images/icons/menu.svg +1 -15
- data/app/assets/images/icons/message-circle.svg +1 -13
- data/app/assets/images/icons/message-square.svg +1 -13
- data/app/assets/images/icons/mic-off.svg +1 -17
- data/app/assets/images/icons/mic.svg +1 -16
- data/app/assets/images/icons/minimize-2.svg +1 -16
- data/app/assets/images/icons/minimize.svg +1 -13
- data/app/assets/images/icons/minus-circle.svg +1 -14
- data/app/assets/images/icons/minus-square.svg +1 -14
- data/app/assets/images/icons/minus.svg +1 -13
- data/app/assets/images/icons/monitor.svg +1 -15
- data/app/assets/images/icons/moon.svg +1 -13
- data/app/assets/images/icons/more-horizontal.svg +1 -15
- data/app/assets/images/icons/more-vertical.svg +1 -15
- data/app/assets/images/icons/mouse-pointer.svg +1 -0
- data/app/assets/images/icons/move.svg +1 -18
- data/app/assets/images/icons/music.svg +1 -14
- data/app/assets/images/icons/navigation-2.svg +1 -13
- data/app/assets/images/icons/navigation.svg +1 -13
- data/app/assets/images/icons/octagon.svg +1 -13
- data/app/assets/images/icons/package.svg +1 -16
- data/app/assets/images/icons/paperclip.svg +1 -13
- data/app/assets/images/icons/pause-circle.svg +1 -15
- data/app/assets/images/icons/pause.svg +1 -14
- data/app/assets/images/icons/pen-tool.svg +1 -0
- data/app/assets/images/icons/percent.svg +1 -15
- data/app/assets/images/icons/phone-call.svg +1 -13
- data/app/assets/images/icons/phone-forwarded.svg +1 -15
- data/app/assets/images/icons/phone-incoming.svg +1 -15
- data/app/assets/images/icons/phone-missed.svg +1 -15
- data/app/assets/images/icons/phone-off.svg +1 -14
- data/app/assets/images/icons/phone-outgoing.svg +1 -15
- data/app/assets/images/icons/phone.svg +1 -13
- data/app/assets/images/icons/pie-chart.svg +1 -14
- data/app/assets/images/icons/play-circle.svg +1 -14
- data/app/assets/images/icons/play.svg +1 -13
- data/app/assets/images/icons/plus-circle.svg +1 -15
- data/app/assets/images/icons/plus-square.svg +1 -15
- data/app/assets/images/icons/plus.svg +1 -14
- data/app/assets/images/icons/pocket.svg +1 -14
- data/app/assets/images/icons/power.svg +1 -14
- data/app/assets/images/icons/printer.svg +1 -15
- data/app/assets/images/icons/radio.svg +1 -14
- data/app/assets/images/icons/refresh-ccw.svg +1 -15
- data/app/assets/images/icons/refresh-cw.svg +1 -15
- data/app/assets/images/icons/repeat.svg +1 -16
- data/app/assets/images/icons/rewind.svg +1 -14
- data/app/assets/images/icons/rotate-ccw.svg +1 -14
- data/app/assets/images/icons/rotate-cw.svg +1 -14
- data/app/assets/images/icons/rss.svg +1 -15
- data/app/assets/images/icons/save.svg +1 -15
- data/app/assets/images/icons/scissors.svg +1 -17
- data/app/assets/images/icons/search.svg +1 -14
- data/app/assets/images/icons/send.svg +1 -14
- data/app/assets/images/icons/server.svg +1 -16
- data/app/assets/images/icons/settings.svg +1 -14
- data/app/assets/images/icons/share-2.svg +1 -17
- data/app/assets/images/icons/share.svg +1 -15
- data/app/assets/images/icons/shield-off.svg +1 -15
- data/app/assets/images/icons/shield.svg +1 -13
- data/app/assets/images/icons/shopping-bag.svg +1 -15
- data/app/assets/images/icons/shopping-cart.svg +1 -15
- data/app/assets/images/icons/shuffle.svg +1 -17
- data/app/assets/images/icons/sidebar.svg +1 -14
- data/app/assets/images/icons/skip-back.svg +1 -14
- data/app/assets/images/icons/skip-forward.svg +1 -14
- data/app/assets/images/icons/slack.svg +1 -17
- data/app/assets/images/icons/slash.svg +1 -14
- data/app/assets/images/icons/sliders.svg +1 -21
- data/app/assets/images/icons/smartphone.svg +1 -14
- data/app/assets/images/icons/smile.svg +1 -0
- data/app/assets/images/icons/speaker.svg +1 -15
- data/app/assets/images/icons/square.svg +1 -13
- data/app/assets/images/icons/star.svg +1 -13
- data/app/assets/images/icons/stop-circle.svg +1 -14
- data/app/assets/images/icons/sun.svg +1 -21
- data/app/assets/images/icons/sunrise.svg +1 -20
- data/app/assets/images/icons/sunset.svg +1 -20
- data/app/assets/images/icons/tablet.svg +1 -22
- data/app/assets/images/icons/tag.svg +1 -14
- data/app/assets/images/icons/target.svg +1 -15
- data/app/assets/images/icons/terminal.svg +1 -14
- data/app/assets/images/icons/thermometer.svg +1 -13
- data/app/assets/images/icons/thumbs-down.svg +1 -13
- data/app/assets/images/icons/thumbs-up.svg +1 -13
- data/app/assets/images/icons/toggle-left.svg +1 -14
- data/app/assets/images/icons/toggle-right.svg +1 -14
- data/app/assets/images/icons/tool.svg +1 -0
- data/app/assets/images/icons/trash-2.svg +1 -16
- data/app/assets/images/icons/trash.svg +1 -14
- data/app/assets/images/icons/trello.svg +1 -0
- data/app/assets/images/icons/trending-down.svg +1 -14
- data/app/assets/images/icons/trending-up.svg +1 -14
- data/app/assets/images/icons/triangle.svg +1 -13
- data/app/assets/images/icons/truck.svg +1 -16
- data/app/assets/images/icons/tv.svg +1 -14
- data/app/assets/images/icons/twitch.svg +1 -0
- data/app/assets/images/icons/twitter.svg +1 -13
- data/app/assets/images/icons/type.svg +1 -15
- data/app/assets/images/icons/umbrella.svg +1 -13
- data/app/assets/images/icons/underline.svg +1 -14
- data/app/assets/images/icons/unlock.svg +1 -14
- data/app/assets/images/icons/upload-cloud.svg +1 -16
- data/app/assets/images/icons/upload.svg +1 -15
- data/app/assets/images/icons/user-check.svg +1 -15
- data/app/assets/images/icons/user-minus.svg +1 -15
- data/app/assets/images/icons/user-plus.svg +1 -16
- data/app/assets/images/icons/user-x.svg +1 -16
- data/app/assets/images/icons/user.svg +1 -14
- data/app/assets/images/icons/users.svg +1 -16
- data/app/assets/images/icons/video-off.svg +1 -14
- data/app/assets/images/icons/video.svg +1 -14
- data/app/assets/images/icons/voicemail.svg +1 -15
- data/app/assets/images/icons/volume-1.svg +1 -14
- data/app/assets/images/icons/volume-2.svg +1 -14
- data/app/assets/images/icons/volume-x.svg +1 -15
- data/app/assets/images/icons/volume.svg +1 -13
- data/app/assets/images/icons/watch.svg +1 -15
- data/app/assets/images/icons/wifi-off.svg +1 -19
- data/app/assets/images/icons/wifi.svg +1 -16
- data/app/assets/images/icons/wind.svg +1 -13
- data/app/assets/images/icons/x-circle.svg +1 -15
- data/app/assets/images/icons/x-octagon.svg +1 -0
- data/app/assets/images/icons/x-square.svg +1 -15
- data/app/assets/images/icons/x.svg +1 -14
- data/app/assets/images/icons/youtube.svg +1 -0
- data/app/assets/images/icons/zap-off.svg +1 -16
- data/app/assets/images/icons/zap.svg +1 -13
- data/app/assets/images/icons/zoom-in.svg +1 -16
- data/app/assets/images/icons/zoom-out.svg +1 -15
- data/app/assets/javascripts/effective_editor/image-drop-and-paste.js +3 -0
- data/app/assets/javascripts/effective_editor/initialize.js.coffee +11 -1
- data/app/assets/javascripts/effective_editor/input.js +1 -0
- data/app/helpers/effective_bootstrap_helper.rb +25 -12
- data/app/helpers/effective_form_builder_helper.rb +16 -13
- data/app/models/effective/form_builder.rb +5 -1
- data/app/models/effective/form_input.rb +5 -3
- data/app/models/effective/form_inputs/clear.rb +1 -1
- data/app/models/effective/form_inputs/collection_input.rb +1 -1
- data/app/models/effective/form_inputs/date_field.rb +2 -1
- data/app/models/effective/form_inputs/datetime_field.rb +2 -1
- data/app/models/effective/form_inputs/delete.rb +5 -1
- data/app/models/effective/form_inputs/editor.rb +10 -1
- data/app/models/effective/form_inputs/email_cc_field.rb +1 -1
- data/app/models/effective/form_inputs/email_field.rb +1 -1
- data/app/models/effective/form_inputs/error_field.rb +1 -1
- data/app/models/effective/form_inputs/file_field.rb +2 -1
- data/app/models/effective/form_inputs/float_field.rb +6 -1
- data/app/models/effective/form_inputs/hidden_field.rb +11 -0
- data/app/models/effective/form_inputs/integer_field.rb +1 -1
- data/app/models/effective/form_inputs/number_text_field.rb +1 -1
- data/app/models/effective/form_inputs/password_field.rb +1 -1
- data/app/models/effective/form_inputs/percent_field.rb +1 -1
- data/app/models/effective/form_inputs/phone_field.rb +1 -1
- data/app/models/effective/form_inputs/price_field.rb +1 -1
- data/app/models/effective/form_inputs/select.rb +3 -3
- data/app/models/effective/form_inputs/static_field.rb +1 -1
- data/app/models/effective/form_inputs/text_area.rb +1 -1
- data/app/models/effective/form_inputs/time_field.rb +2 -1
- data/app/models/effective/form_inputs/url_field.rb +1 -1
- data/lib/effective_bootstrap/version.rb +1 -1
- metadata +23 -2
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-octagon"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
|
@@ -1,15 +1 @@
|
|
1
|
-
<svg
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
3
|
-
width="24"
|
4
|
-
height="24"
|
5
|
-
viewBox="0 0 24 24"
|
6
|
-
fill="none"
|
7
|
-
stroke="currentColor"
|
8
|
-
stroke-width="2"
|
9
|
-
stroke-linecap="round"
|
10
|
-
stroke-linejoin="round"
|
11
|
-
>
|
12
|
-
<rect x="3" y="3" width="18" height="18" rx="2" ry="2" />
|
13
|
-
<line x1="9" y1="9" x2="15" y2="15" />
|
14
|
-
<line x1="15" y1="9" x2="9" y2="15" />
|
15
|
-
</svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="9" x2="15" y2="15"></line><line x1="15" y1="9" x2="9" y2="15"></line></svg>
|
@@ -1,14 +1 @@
|
|
1
|
-
<svg
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
3
|
-
width="24"
|
4
|
-
height="24"
|
5
|
-
viewBox="0 0 24 24"
|
6
|
-
fill="none"
|
7
|
-
stroke="currentColor"
|
8
|
-
stroke-width="2"
|
9
|
-
stroke-linecap="round"
|
10
|
-
stroke-linejoin="round"
|
11
|
-
>
|
12
|
-
<line x1="18" y1="6" x2="6" y2="18" />
|
13
|
-
<line x1="6" y1="6" x2="18" y2="18" />
|
14
|
-
</svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg>
|
@@ -1,16 +1 @@
|
|
1
|
-
<svg
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
3
|
-
width="24"
|
4
|
-
height="24"
|
5
|
-
viewBox="0 0 24 24"
|
6
|
-
fill="none"
|
7
|
-
stroke="currentColor"
|
8
|
-
stroke-width="2"
|
9
|
-
stroke-linecap="round"
|
10
|
-
stroke-linejoin="round"
|
11
|
-
>
|
12
|
-
<polyline points="12.41 6.75 13 2 10.57 4.92" />
|
13
|
-
<polyline points="18.57 12.91 21 10 15.66 10" />
|
14
|
-
<polyline points="8 8 3 14 12 14 11 22 16 16" />
|
15
|
-
<line x1="1" y1="1" x2="23" y2="23" />
|
16
|
-
</svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zap-off"><polyline points="12.41 6.75 13 2 10.57 4.92"></polyline><polyline points="18.57 12.91 21 10 15.66 10"></polyline><polyline points="8 8 3 14 12 14 11 22 16 16"></polyline><line x1="1" y1="1" x2="23" y2="23"></line></svg>
|
@@ -1,13 +1 @@
|
|
1
|
-
<svg
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
3
|
-
width="24"
|
4
|
-
height="24"
|
5
|
-
viewBox="0 0 24 24"
|
6
|
-
fill="none"
|
7
|
-
stroke="currentColor"
|
8
|
-
stroke-width="2"
|
9
|
-
stroke-linecap="round"
|
10
|
-
stroke-linejoin="round"
|
11
|
-
>
|
12
|
-
<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2" />
|
13
|
-
</svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zap"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
|
@@ -1,16 +1 @@
|
|
1
|
-
<svg
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
3
|
-
width="24"
|
4
|
-
height="24"
|
5
|
-
viewBox="0 0 24 24"
|
6
|
-
fill="none"
|
7
|
-
stroke="currentColor"
|
8
|
-
stroke-width="2"
|
9
|
-
stroke-linecap="round"
|
10
|
-
stroke-linejoin="round"
|
11
|
-
>
|
12
|
-
<circle cx="11" cy="11" r="8" />
|
13
|
-
<line x1="21" y1="21" x2="16.65" y2="16.65" />
|
14
|
-
<line x1="11" y1="8" x2="11" y2="14" />
|
15
|
-
<line x1="8" y1="11" x2="14" y2="11" />
|
16
|
-
</svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zoom-in"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
|
@@ -1,15 +1 @@
|
|
1
|
-
<svg
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
3
|
-
width="24"
|
4
|
-
height="24"
|
5
|
-
viewBox="0 0 24 24"
|
6
|
-
fill="none"
|
7
|
-
stroke="currentColor"
|
8
|
-
stroke-width="2"
|
9
|
-
stroke-linecap="round"
|
10
|
-
stroke-linejoin="round"
|
11
|
-
>
|
12
|
-
<circle cx="11" cy="11" r="8" />
|
13
|
-
<line x1="21" y1="21" x2="16.65" y2="16.65" />
|
14
|
-
<line x1="8" y1="11" x2="14" y2="11" />
|
15
|
-
</svg>
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zoom-out"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
(function(){var exports={};
|
2
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function e(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}return function(t,a,r){if(a)e(t.prototype,a);if(r)e(t,r);return t}}();function _classCallCheck(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}var ImageData=function(){function e(t,a){_classCallCheck(this,e);this.dataUrl=t;this.type=a}_createClass(e,[{key:"minify",value:function t(){var a=this;var r=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return new Promise(function(t,n){var i=r.maxWidth||800;var l=r.maxHeight||800;var o=r.quality||.8;if(!a.dataUrl){return n({message:"[error] QuillImageDropAndPaste: Fail to minify the image, dataUrl should not be empty."})}var s=new Image;s.onload=function(){var r=s.width;var n=s.height;if(r>n){if(r>i){s.height=n*i/r;s.width=i}}else{if(n>l){s.width=r*l/n;s.height=l}}var u=document.createElement("canvas");u.width=s.width;u.height=s.height;var f=u.getContext("2d");f.drawImage(s,0,0,s.width,s.height);var d=a.type||"image/png";var h=u.toDataURL(d,o);t(new e(h,d))};s.src=a.dataUrl})}},{key:"toFile",value:function e(t){if(!window.File){console.error("[error] QuillImageDropAndPaste: Your browser didnot support File API.");return null}return new File([this.toBlob()],t,{type:this.type})}},{key:"toBlob",value:function e(){var t=this.dataUrl.replace(/^[^,]+,/,"");var a=this.binaryStringToArrayBuffer(atob(t));return this.createBlob([a],{type:this.type})}},{key:"binaryStringToArrayBuffer",value:function e(t){var a=t.length;var r=new ArrayBuffer(a);var n=new Uint8Array(r);var i=-1;while(++i<a){n[i]=t.charCodeAt(i)}return r}},{key:"createBlob",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(typeof a==="string")a={type:a};try{return new Blob(t,a)}catch(e){if(e.name!=="TypeError")throw e;var r=typeof BlobBuilder!=="undefined"?BlobBuilder:typeof MSBlobBuilder!=="undefined"?MSBlobBuilder:typeof MozBlobBuilder!=="undefined"?MozBlobBuilder:WebKitBlobBuilder;var n=new r;for(var i=0;i<t.length;i++){n.append(t[i])}return n.getBlob(a.type)}}}]);return e}();var ImageDropAndPaste=function(){function e(t){var a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,e);this.quill=t;this.options=a;this.handleDrop=this.handleDrop.bind(this);this.handlePaste=this.handlePaste.bind(this);this.quill.root.addEventListener("drop",this.handleDrop,false);this.quill.root.addEventListener("paste",this.handlePaste,false)}_createClass(e,[{key:"handleDrop",value:function e(t){var a=this;t.preventDefault();if(t.dataTransfer&&t.dataTransfer.files&&t.dataTransfer.files.length){if(document.caretRangeFromPoint){var r=document.getSelection();var n=document.caretRangeFromPoint(t.clientX,t.clientY);if(r&&n){r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}}this.readFiles(t.dataTransfer.files,function(e,t){t=t||"image/png";if(typeof a.options.handler==="function"){a.options.handler.call(a,e,t,new ImageData(e,t))}else{a.insert.call(a,e,t)}},t)}}},{key:"handlePaste",value:function e(t){var a=this;if(t.clipboardData&&t.clipboardData.items&&t.clipboardData.items.length){this.readFiles(t.clipboardData.items,function(e,t){t=t||"image/png";if(typeof a.options.handler==="function"){a.options.handler.call(a,e,t,new ImageData(e,t))}else{a.insert(e,t)}},t)}}},{key:"readFiles",value:function e(t,a,r){[].forEach.call(t,function(e){var t=e.type;if(!t.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i))return;r.preventDefault();var n=new FileReader;n.onload=function(e){a(e.target.result,t)};var i=e.getAsFile?e.getAsFile():e;if(i instanceof Blob)n.readAsDataURL(i)})}},{key:"insert",value:function e(t,a){var r=(this.quill.getSelection()||{}).index||this.quill.getLength();this.quill.insertEmbed(r,"image",t,"user")}}]);return e}();ImageDropAndPaste.ImageData=ImageData;exports.default=ImageDropAndPaste;
|
3
|
+
window.QuillImageDropAndPaste = ImageDropAndPaste;window.Quill.register('modules/imageDropAndPaste',ImageDropAndPaste)})();
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# https://github.com/quilljs/quill
|
3
3
|
|
4
4
|
Quill.register('modules/imageResize', window.ImageResize.default)
|
5
|
+
Quill.register('modules/imageDrop', window.QuillImageDropAndPaste)
|
5
6
|
|
6
7
|
(this.EffectiveBootstrap || {}).effective_editor = ($element, options) ->
|
7
8
|
editor = '#' + $element.attr('id') + '_editor'
|
@@ -12,6 +13,15 @@ Quill.register('modules/imageResize', window.ImageResize.default)
|
|
12
13
|
content_mode = options['content_mode']
|
13
14
|
delete options['content_mode']
|
14
15
|
|
16
|
+
if options['modules']['imageDropAndPaste']
|
17
|
+
# Image Drop & Paste
|
18
|
+
# https://github.com/chenjuneking/quill-image-drop-and-paste
|
19
|
+
dropImage = (imageDataUrl, type, imageData) ->
|
20
|
+
file = imageData.toFile(type.replace('/', '.'))
|
21
|
+
uploadImage(quill, file)
|
22
|
+
|
23
|
+
options['modules']['imageDropAndPaste'] = { handler: dropImage }
|
24
|
+
|
15
25
|
quill = new Quill($element.siblings(editor).get(0), options)
|
16
26
|
content = $element.val() || ''
|
17
27
|
|
@@ -56,7 +66,7 @@ Quill.register('modules/imageResize', window.ImageResize.default)
|
|
56
66
|
$element.on 'quill:focus', (event) -> quill.focus()
|
57
67
|
|
58
68
|
# Active Storage support
|
59
|
-
if active_storage
|
69
|
+
if active_storage and content_mode != 'code'
|
60
70
|
quill.getModule('toolbar').addHandler('image', -> createImage(quill))
|
61
71
|
|
62
72
|
# Active Support Direct Upload
|
@@ -72,29 +72,42 @@ module EffectiveBootstrapHelper
|
|
72
72
|
# variations can be :dropup, :dropleft, :dropright
|
73
73
|
# split can be true, false
|
74
74
|
# right is to right align things
|
75
|
-
def dropdown(variation: nil, split: true, btn_class: nil, right: false, &block)
|
75
|
+
def dropdown(variation: nil, split: true, btn_class: nil, btn_content: nil, right: false, &block)
|
76
76
|
raise 'expected a block' unless block_given?
|
77
77
|
|
78
78
|
btn_class = btn_class.presence || 'btn-outline-primary'
|
79
79
|
|
80
|
-
@_dropdown_link_tos = []
|
80
|
+
@_dropdown_link_tos = []
|
81
|
+
@_dropdown_split = split
|
82
|
+
|
83
|
+
# process dropdown_link_tos
|
84
|
+
yield
|
81
85
|
|
82
86
|
return @_dropdown_link_tos.first if @_dropdown_link_tos.length <= 1
|
83
87
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
88
|
+
# Build tags
|
89
|
+
first = @_dropdown_link_tos.first
|
90
|
+
|
91
|
+
button = content_tag(:button, class: "btn #{btn_class} dropdown-toggle" + (split ? " dropdown-toggle-split" : ''), type: 'button', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) do
|
92
|
+
btn_content || content_tag(:span, 'Toggle Dropdown', class: 'sr-only')
|
93
|
+
end
|
90
94
|
|
95
|
+
menu = if split
|
96
|
+
content_tag(:div, @_dropdown_link_tos[1..-1].join.html_safe, class: ['dropdown-menu', ('dropdown-menu-right' if right)].compact.join(' '))
|
97
|
+
else
|
98
|
+
content_tag(:div, @_dropdown_link_tos.join.html_safe, class: ['dropdown-menu', ('dropdown-menu-right' if right)].compact.join(' '))
|
99
|
+
end
|
100
|
+
|
101
|
+
retval = if split
|
91
102
|
content_tag(:div, class: 'btn-group') do
|
92
103
|
content_tag(:div, class: ['btn-group', variation.to_s.presence].compact.join(' '), role: 'group') do
|
93
|
-
[:dropleft].include?(variation) ? (
|
104
|
+
[:dropleft].include?(variation) ? (button + menu) : (first + button + menu)
|
94
105
|
end + ([:dropleft].include?(variation) ? first : '').html_safe
|
95
106
|
end
|
96
107
|
else
|
97
|
-
|
108
|
+
content_tag(:div, class: 'dropdown') do
|
109
|
+
button + menu
|
110
|
+
end
|
98
111
|
end
|
99
112
|
|
100
113
|
@_dropdown_link_tos = nil
|
@@ -108,7 +121,7 @@ module EffectiveBootstrapHelper
|
|
108
121
|
def dots(options = nil, &block)
|
109
122
|
(options ||= {})[:class] = "dropdown dropdown-dots #{options.delete(:class)}".strip
|
110
123
|
|
111
|
-
content_tag(:
|
124
|
+
content_tag(:div, options) do
|
112
125
|
content_tag(:button, class: "btn btn-dots dropdown-toggle #{options.delete(:button_class)}", 'aria-expanded': true, 'aria-haspopup': true, 'data-toggle': 'dropdown', type: 'button') do
|
113
126
|
end + content_tag(:div, capture(&block), class: 'dropdown-menu')
|
114
127
|
end
|
@@ -129,7 +142,7 @@ module EffectiveBootstrapHelper
|
|
129
142
|
return link_to(label, path, options)
|
130
143
|
end
|
131
144
|
|
132
|
-
if @_dropdown_link_tos.length == 0
|
145
|
+
if @_dropdown_link_tos.length == 0 && @_dropdown_split
|
133
146
|
options[:class] = [options[:class], 'btn', btn_class].compact.join(' ')
|
134
147
|
else
|
135
148
|
options[:class] = [options[:class], 'dropdown-item'].compact.join(' ')
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module EffectiveFormBuilderHelper
|
2
2
|
def effective_form_with(**options, &block)
|
3
|
-
|
4
3
|
# Compute the default ID
|
5
4
|
subject = Array(options[:scope] || options[:model]).last
|
6
5
|
class_name = subject.class.name.underscore
|
6
|
+
unique_id = options.except(:model).hash.abs
|
7
7
|
|
8
8
|
html_id = if subject.kind_of?(Symbol)
|
9
9
|
subject.to_s
|
@@ -14,9 +14,6 @@ module EffectiveFormBuilderHelper
|
|
14
14
|
end
|
15
15
|
|
16
16
|
options[:html] = (options[:html] || {}).merge(novalidate: true, onsubmit: 'return EffectiveForm.validate(this)')
|
17
|
-
|
18
|
-
remote_index = options.except(:model).hash.abs
|
19
|
-
|
20
17
|
options[:local] = true unless options.key?(:local)
|
21
18
|
|
22
19
|
if respond_to?(:inline_datatable?) && inline_datatable?
|
@@ -33,21 +30,27 @@ module EffectiveFormBuilderHelper
|
|
33
30
|
('hide-flash-danger' if options[:remote] && options.key?(:flash_error) && !options[:flash_error])
|
34
31
|
].compact.join(' ')
|
35
32
|
|
36
|
-
if options
|
37
|
-
@
|
38
|
-
|
33
|
+
if options[:remote] || options[:unique_ids]
|
34
|
+
@_effective_unique_id ||= {}
|
35
|
+
|
36
|
+
if @_effective_unique_id.key?(unique_id)
|
37
|
+
unique_id = unique_id + @_effective_unique_id.length
|
38
|
+
end
|
39
39
|
|
40
|
+
options[:unique_id] = unique_id
|
41
|
+
html_id = "#{html_id}_#{unique_id}"
|
42
|
+
|
43
|
+
@_effective_unique_id[unique_id] = true
|
44
|
+
end
|
45
|
+
|
46
|
+
if options.delete(:remote) == true
|
40
47
|
if options[:html][:data].kind_of?(Hash)
|
41
48
|
options[:html][:data][:remote] = true
|
42
|
-
options[:html][:data]['data-remote-index'] =
|
49
|
+
options[:html][:data]['data-remote-index'] = unique_id
|
43
50
|
else
|
44
51
|
options[:html]['data-remote'] = true
|
45
|
-
options[:html]['data-remote-index'] =
|
52
|
+
options[:html]['data-remote-index'] = unique_id
|
46
53
|
end
|
47
|
-
|
48
|
-
html_id = "#{html_id}_#{remote_index}"
|
49
|
-
|
50
|
-
@_effective_remote_index[remote_index] = true
|
51
54
|
end
|
52
55
|
|
53
56
|
# Assign default ID
|
@@ -20,6 +20,7 @@ module Effective
|
|
20
20
|
alias_method :super_number_field, :number_field
|
21
21
|
alias_method :super_text_field, :text_field
|
22
22
|
alias_method :super_text_area, :text_area
|
23
|
+
alias_method :super_hidden_field, :hidden_field
|
23
24
|
|
24
25
|
def clear(name = 'Clear', options = {})
|
25
26
|
(options = name; name = 'Clear') if name.kind_of?(Hash)
|
@@ -85,6 +86,10 @@ module Effective
|
|
85
86
|
Effective::FormInputs::FormGroup.new(name, options, builder: self).to_html(&block)
|
86
87
|
end
|
87
88
|
|
89
|
+
def hidden_field(name = nil, options = {})
|
90
|
+
Effective::FormInputs::HiddenField.new(name, options, builder: self).to_html
|
91
|
+
end
|
92
|
+
|
88
93
|
def integer_field(name, options = {})
|
89
94
|
Effective::FormInputs::IntegerField.new(name, options, builder: self).to_html
|
90
95
|
end
|
@@ -196,4 +201,3 @@ module Effective
|
|
196
201
|
|
197
202
|
end
|
198
203
|
end
|
199
|
-
|
@@ -7,7 +7,7 @@ module Effective
|
|
7
7
|
EXCLUSIVE_CLASS_SUFFIXES = ['-primary', '-secondary', '-success', '-danger', '-warning', '-info', '-light', '-dark']
|
8
8
|
|
9
9
|
delegate :object, to: :@builder
|
10
|
-
delegate :capture, :content_tag, :link_to, :icon, :asset_path, to: :@template
|
10
|
+
delegate :capture, :content_tag, :image_tag, :link_to, :icon, :asset_path, to: :@template
|
11
11
|
|
12
12
|
# So this takes in the options for an entire form group.
|
13
13
|
def initialize(name, options, builder:, html_options: nil)
|
@@ -24,7 +24,7 @@ module Effective
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def input_html_options
|
27
|
-
{ class: 'form-control' }
|
27
|
+
{ class: 'form-control', id: tag_id }
|
28
28
|
end
|
29
29
|
|
30
30
|
def input_js_options
|
@@ -408,7 +408,7 @@ module Effective
|
|
408
408
|
|
409
409
|
# https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/tags/base.rb#L120
|
410
410
|
def tag_id(index = nil)
|
411
|
-
case
|
411
|
+
id = case
|
412
412
|
when @builder.object_name.empty?
|
413
413
|
sanitized_method_name.dup
|
414
414
|
when index
|
@@ -416,6 +416,8 @@ module Effective
|
|
416
416
|
else
|
417
417
|
"#{sanitized_object_name}_#{sanitized_method_name}"
|
418
418
|
end.downcase.parameterize
|
419
|
+
|
420
|
+
@builder.options[:unique_ids] ? "#{id}_#{@builder.options[:unique_id]}" : id
|
419
421
|
end
|
420
422
|
|
421
423
|
def sanitized_object_name
|
@@ -36,7 +36,7 @@ module Effective
|
|
36
36
|
|
37
37
|
@collection_options = {
|
38
38
|
checked: [checked, selected, polymorphic_value, value].find { |value| value != nil },
|
39
|
-
selected: [selected, checked, polymorphic_value, value].find { |value| value != nil },
|
39
|
+
selected: ([selected, checked, polymorphic_value, value].find { |value| value != nil } unless kind_of?(Effective::FormInputs::Radios)),
|
40
40
|
include_blank: include_blank
|
41
41
|
}.compact
|
42
42
|
end
|
@@ -14,7 +14,11 @@ module Effective
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def input_html_options
|
17
|
-
{
|
17
|
+
{
|
18
|
+
class: 'btn btn-warning',
|
19
|
+
id: tag_id,
|
20
|
+
data: { method: :delete, remote: true, confirm: "Really delete<br>#{object}?".html_safe }
|
21
|
+
}
|
18
22
|
end
|
19
23
|
|
20
24
|
def border?
|
@@ -15,7 +15,12 @@ module Effective
|
|
15
15
|
|
16
16
|
def input_js_options
|
17
17
|
{
|
18
|
-
modules: {
|
18
|
+
modules: {
|
19
|
+
toolbar: toolbar,
|
20
|
+
imageResize: imageResize,
|
21
|
+
imageDropAndPaste: imageDropAndPaste,
|
22
|
+
syntax: (content_mode == :code)
|
23
|
+
},
|
19
24
|
theme: 'snow',
|
20
25
|
placeholder: "Add #{name.to_s.pluralize}...",
|
21
26
|
content_mode: content_mode,
|
@@ -36,6 +41,10 @@ module Effective
|
|
36
41
|
]
|
37
42
|
end
|
38
43
|
|
44
|
+
def imageDropAndPaste
|
45
|
+
active_storage && !(content_mode == :code)
|
46
|
+
end
|
47
|
+
|
39
48
|
def imageResize
|
40
49
|
{
|
41
50
|
displaySize: true,
|