formagic 0.3.8 → 0.3.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15c1f064f1b01b4388e86e70974a0c75213fc5bf
4
- data.tar.gz: 633b109c4479ae67b2f39757ccec3da53112542e
3
+ metadata.gz: 79015f55a3f1cfacca4bee34191aa33b1fb3f745
4
+ data.tar.gz: a76c54dbe60f720d3dcb4cd91d1e3bb8cf005767
5
5
  SHA512:
6
- metadata.gz: dd7dd54998f2a9474add3be59b0ee99e7fe2ad4d562b5c6e74169a20e242ba29ffebb18749d16977fcd25a335031b125bfffcdb74560b5173512a5ea515bfdd2
7
- data.tar.gz: c3e779c4ba42167afc1fd0263e38600e50077c7e40cd0e18b537fbdab511b66614b772b887a4280558ddda824f3713f830640f838ee1a8b4050b297bd3b1c4c4
6
+ metadata.gz: 5a1dfef367302b2b09eef3e03d463ba029ffd355663ef8647e34e7f8e7d5ce184c81170286608143144cec3d83b24a2e185e3d8a788f3bbc9404091513f094b2
7
+ data.tar.gz: a3d522aafd769bd9bd9670ada5b00597ef4c4ed460b0eb3dc49e596b93afbaeb8ec513469c1f97ad1cf38223978c1520701d3f592e2ae09348472ca060a72d1a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- formagic (0.3.7)
4
+ formagic (0.3.9)
5
5
  bourbon (>= 3.2)
6
6
  normalize-rails (>= 3.0)
7
7
 
@@ -7,9 +7,10 @@
7
7
  # Markdown input supports syntax highlighting and optional compilation to html.
8
8
  #
9
9
  # Config options:
10
- # label - Input label
11
- # aceOptions - Custom options for overriding default ones
12
- # htmlFieldName - Input name for generated HTML content
10
+ # label - Input label
11
+ # aceOptions - Custom options for overriding default ones
12
+ # htmlFieldName - Input name for generated HTML content
13
+ # disableToolbar - Do not show shorcuts panel
13
14
  #
14
15
  # Input config example:
15
16
  # body_md: { type: 'markdown', label: 'Article', htmlFieldName: 'body_html' }
@@ -18,6 +19,7 @@
18
19
  #= require vendor/marked
19
20
  #= require vendor/ace
20
21
  #= require vendor/mode-markdown
22
+ #= require ./markdown_toolbar
21
23
  # -----------------------------------------------------------------------------
22
24
  class @InputMarkdown extends InputString
23
25
  # PRIVATE ===================================================================
@@ -35,6 +37,9 @@ class @InputMarkdown extends InputString
35
37
  @$editor =$ "<div></div>"
36
38
  @$el.append @$editor
37
39
 
40
+ if ! @config.disableToolbar
41
+ @_add_toolbar()
42
+
38
43
  _update_inputs: ->
39
44
  md_source = @session.getValue()
40
45
  @$input.val(md_source)
@@ -48,6 +53,7 @@ class @InputMarkdown extends InputString
48
53
  # PUBLIC ====================================================================
49
54
 
50
55
  initialize: ->
56
+ @config.pluginConfig ||= {}
51
57
  @config.beforeInitialize?(this)
52
58
 
53
59
  @editor = ace.edit(@$editor.get(0))
@@ -59,7 +65,7 @@ class @InputMarkdown extends InputString
59
65
  @session.setMode("ace/mode/markdown")
60
66
 
61
67
  # options: https://github.com/ajaxorg/ace/wiki/Configuring-Ace
62
- @editor.setOptions
68
+ aceOptions =
63
69
  autoScrollEditorIntoView: true
64
70
  minLines: 5
65
71
  maxLines: Infinity
@@ -67,11 +73,11 @@ class @InputMarkdown extends InputString
67
73
  showGutter: false
68
74
  highlightActiveLine: false
69
75
  showPrintMargin: false
76
+ $.merge(aceOptions, @config.pluginConfig)
70
77
 
78
+ @editor.setOptions aceOptions
71
79
  @session.on 'change', (e) => @_update_inputs()
72
-
73
80
  @_update_inputs()
74
-
75
81
  @config.onInitialize?(this)
76
82
 
77
83
  updateValue: (@value) ->
@@ -83,4 +89,6 @@ class @InputMarkdown extends InputString
83
89
  hash[@config.klassName] = @$input.val()
84
90
  return hash
85
91
 
92
+ include(InputMarkdown, inputMarkdownToolbar)
93
+
86
94
  chr.formInputs['markdown'] = InputMarkdown
@@ -0,0 +1,96 @@
1
+ # -----------------------------------------------------------------------------
2
+ # Author: Alexander Kravets <alex@slatestudio.com>,
3
+ # Slate Studio (http://www.slatestudio.com)
4
+ # -----------------------------------------------------------------------------
5
+ # INPUT MARKDOWN TOOLBAR
6
+ # -----------------------------------------------------------------------------
7
+ class @InputMarkdownToolbar
8
+ constructor: (@input) ->
9
+ @$el =$ "<div class='toolbar'>"
10
+
11
+ @topOffset = 40
12
+ @isFixed = false
13
+
14
+ @_bind_window_scroll()
15
+
16
+ # PRIVATE ===================================================================
17
+
18
+ _bind_window_scroll: ->
19
+ @$window =$ ".content:visible"
20
+ @$window.on "scroll", => @_check_offset()
21
+
22
+ _height: ->
23
+ toolbarBottomMargin = parseInt @$el.css("margin-bottom")
24
+ toolbarHeight = @$el.outerHeight() + toolbarBottomMargin
25
+
26
+ _check_offset: ->
27
+ @$ace = @input.$editor
28
+ aceOffset = @$ace.offset()
29
+ isBelowAceTop = aceOffset.top - @topOffset - @_height() <= 0
30
+ isAboveAceBottom = @$ace.outerHeight() + aceOffset.top -
31
+ @topOffset - @$el.outerHeight() >= 0
32
+ if isBelowAceTop && isAboveAceBottom then @_fix() else @_unfix()
33
+
34
+ _fix: ->
35
+ if @isFixed
36
+ return
37
+ # some legacy workaround for mobile:
38
+ # webkit does not recalc top: 0 when focused on contenteditable
39
+ # if chr.isMobile() && @isFocused
40
+ # @$el.css
41
+ # position: "absolute"
42
+ # top: @$window.scrollTop() - @$ace.offset().top
43
+
44
+ @$ace = @input.$editor
45
+ @$el.css
46
+ position: "fixed"
47
+ top: @topOffset
48
+ width: @input.$el.outerWidth()
49
+ zIndex: 300
50
+ @$ace.css("margin-top", @_height())
51
+ @isFixed = true
52
+
53
+ _unfix: ->
54
+ if ! @isFixed then return
55
+
56
+ @$ace = @input.$editor
57
+ @$el.css
58
+ position: 'relative'
59
+ left: ''
60
+ width: ''
61
+ top: ''
62
+ @$ace.css('margin-top', '')
63
+ @isFixed = false
64
+
65
+ # PUBLIC ====================================================================
66
+
67
+ addButton: (title, callback=$.noop) ->
68
+ @buttons ||= {}
69
+ $btn =$ "<button>#{title}</button>"
70
+ $btn.on "click", (e) => callback(@input.editor)
71
+ @$el.append $btn
72
+ @buttons[title] = $btn
73
+
74
+ @inputMarkdownToolbar =
75
+ # PRIVATE ===================================================================
76
+
77
+ _add_toolbar: ->
78
+ @toolbar = new InputMarkdownToolbar(this)
79
+ @$label.after @toolbar.$el
80
+
81
+ @toolbar.addButton "Link", $.proxy(@_insert_link, this)
82
+ @toolbar.addButton "Image", $.proxy(@_insert_images, this)
83
+
84
+ _insert_link: (editor) ->
85
+ url = prompt("URL", "")
86
+ if url
87
+ title = editor.getSelectedText()
88
+ if title == "" then title = url
89
+ editor.insert "[#{title}](#{url})"
90
+ editor.focus()
91
+
92
+ _insert_images: (editor) ->
93
+ chr.modules.loft.showModal "images", true, (objects) ->
94
+ for image in objects
95
+ editor.insert "![#{image.name}](#{image.file.url})\n"
96
+ editor.focus()
@@ -15,6 +15,7 @@ $formagic-assertive-color: #e32e2e !default;
15
15
  $formagic-label-color: lighten($formagic-base-color, 25%);
16
16
  $formagic-placeholder-color: rgb(210,210,210) !default;
17
17
  $formagic-border-color: #f1f1f1 !default;
18
+ $formagic-bg-color: #fbfbfd !default;
18
19
 
19
20
  @mixin custom-scrollbar($color, $bg-color, $radius) {
20
21
  &::-webkit-scrollbar { width: 6px; background-color: $bg-color; }
@@ -73,3 +74,4 @@ $formagic-border-color: #f1f1f1 !default;
73
74
  @import "formagic/array";
74
75
  @import "formagic/actions";
75
76
  @import "formagic/url";
77
+ @import "formagic/markdown";
@@ -0,0 +1,18 @@
1
+ .input-markdown {
2
+ .toolbar {
3
+ margin: 0em -1em 1em;
4
+ border-top: 1px solid $formagic-border-color;
5
+ border-bottom: 1px solid $formagic-border-color;
6
+ background-color: $white-color;
7
+ }
8
+
9
+ button {
10
+ border: 0;
11
+ border-radius: 0;
12
+ color: $formagic-base-color;
13
+ font-size: 0.8em;
14
+ line-height: 2.5;
15
+ padding-left: 1.25em;
16
+ padding-right: 1.25em;
17
+ }
18
+ }
@@ -1,3 +1,3 @@
1
1
  module Formagic
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formagic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Kravets
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-21 00:00:00.000000000 Z
11
+ date: 2015-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bourbon
@@ -108,6 +108,7 @@ files:
108
108
  - app/assets/javascripts/formagic/inputs/list_reorder.coffee
109
109
  - app/assets/javascripts/formagic/inputs/list_typeahead.coffee
110
110
  - app/assets/javascripts/formagic/inputs/markdown.coffee
111
+ - app/assets/javascripts/formagic/inputs/markdown_toolbar.coffee
111
112
  - app/assets/javascripts/formagic/inputs/password.coffee
112
113
  - app/assets/javascripts/formagic/inputs/redactor.coffee
113
114
  - app/assets/javascripts/formagic/inputs/redactor_character.coffee
@@ -144,6 +145,7 @@ files:
144
145
  - app/assets/stylesheets/formagic/group.scss
145
146
  - app/assets/stylesheets/formagic/image.scss
146
147
  - app/assets/stylesheets/formagic/list.scss
148
+ - app/assets/stylesheets/formagic/markdown.scss
147
149
  - app/assets/stylesheets/formagic/nested-form.scss
148
150
  - app/assets/stylesheets/formagic/redactor-character.scss
149
151
  - app/assets/stylesheets/formagic/select.scss