scrivito_advanced_editors 0.0.19 → 0.90.0.rc1

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: ce0439a1c00e83fa4c24030ea6d01c154d894f50
4
- data.tar.gz: 152c4a78a8cd5c6535d177121406bd7447aa2366
3
+ metadata.gz: 38dbbfe68c25c0d405f26124f3079314af575f88
4
+ data.tar.gz: 0e9c6885568f5b264f1b843c58ce06065225f53f
5
5
  SHA512:
6
- metadata.gz: 3c2f59b66ea1591392056bc09694dfcd58a80c7a52282210512afd8032cb8e093921abdfd27e1d7acb8b832dff9392d0cf452a5998716d65f95c4274daa18ea3
7
- data.tar.gz: 7d72db5291ee68618f13e2645d9e111d927328ba619804c5868b53b50d6815f722d55deb3c30230954e11cfde3ea9feb1702f3900dc706f9a7f1c2c6b0bf9d32
6
+ metadata.gz: 95607a4fb909790d6e66d1c50b9ff7d193fdc3e5c4a1b98fd9528d49625f2b9a08db90807b59ffba57b5f82d614b22682ec3893bc7b69631348b87df97950e66
7
+ data.tar.gz: 5ed8a2f4d95f6fa43719c0045f07bb403ff8be0e1ec5c7942eb1877712f28757c373a58b24923fe133aa084ec2ecbdfbb165c42a22808b59741dbd145d5cf6c4
@@ -0,0 +1,48 @@
1
+ (function($, App) {
2
+ 'use strict';
3
+
4
+ $(function() {
5
+ App.ScrivitoColorPicker = {
6
+ init_function: function(scrivito_tag) {
7
+ var content = $(scrivito_tag).scrivito('content');
8
+ var values = $(scrivito_tag).data('colors-list');
9
+
10
+ $(scrivito_tag).addClass('button_list').html('');
11
+ return $.each(values, function(index, color) {
12
+ var css_class = (color === content) ? 'active' : 'inactive'
13
+ $('<button></button>')
14
+ .addClass('scrivito-toggle-button')
15
+ .addClass('color-select')
16
+ .addClass(color === "" ? "default" : color)
17
+ .addClass(color !== "" ? '' : 'transparent_bg')
18
+ .addClass(css_class)
19
+ .data('content', color)
20
+ .html('')
21
+ .appendTo($(scrivito_tag));
22
+ });
23
+ },
24
+
25
+ clickFunction: function(event) {
26
+ var text = $(event.currentTarget).data('content');
27
+ var scrivito_tag = $(event.currentTarget).parent();
28
+
29
+ scrivito_tag.find('.active').removeClass('active');
30
+ $(event.currentTarget).addClass('active');
31
+
32
+ scrivito_tag.scrivito('save', text);
33
+ },
34
+ };
35
+
36
+ scrivito.on('load', function() {
37
+ scrivito.define_editor("color_picker", {
38
+ can_edit: function(element) {
39
+ return $(element).is('[data-colors-list]');
40
+ },
41
+ activate: function(element) {
42
+ ScrivitoColorPicker.init_function(element);
43
+ $(element).on('click', '.scrivito-toggle-button', ScrivitoColorPicker.clickFunction);
44
+ }
45
+ });
46
+ });
47
+ });
48
+ })(jQuery, this);
@@ -2,46 +2,62 @@
2
2
  'use strict';
3
3
 
4
4
  $(function() {
5
-
6
5
  App.ScrivitoMultiSelectButton = {
7
- // set selector for Editor
8
- selector: "[data-editor='scrivito-multi-select-button']",
9
-
10
- // Function that will be called on scrivito load
11
- initFunction: function() {},
12
-
13
- // set function triggert on click
14
- clickFunction: function(scrivito_tag) {
15
- var content = scrivito_tag.data('content');
16
- //var text = scrivito_tag.scrivito('content');
17
- var buttons = scrivito_tag.parent().find('button');
18
-
19
- var text = [];
20
- $.each(buttons, function(index, elem) {
21
- var button = $(elem);
22
- if(button.hasClass('active')) text.push(button.data('content'));
6
+ init_function: function(scrivito_tag) {
7
+ var content = $(scrivito_tag).scrivito('content');
8
+ var is_enum = $(scrivito_tag).is('[data-scrivito-field-type=multienum]');
9
+ var values = is_enum ? $(scrivito_tag).scrivito('allowed_values') : $(scrivito_tag).data('multi-select-list');
10
+ var captions = $(scrivito_tag).data('multi-select-caption');
11
+
12
+ $(scrivito_tag).addClass('button_list').addClass('select').html('');
13
+ return $.each(values, function(index, value) {
14
+ var css_class = ($.inArray(value, content) >= 0) ? 'active' : 'inactive'
15
+
16
+ if(!is_enum) css_class = (content.indexOf(value) > -1) ? 'active' : 'inactive'
17
+
18
+ var caption = (captions && captions[value]) ? captions[value] : value
19
+ $('<button></button>')
20
+ .addClass('scrivito-multi-select-button')
21
+ .addClass(css_class)
22
+ .data('content', value)
23
+ .html(caption)
24
+ .appendTo($(scrivito_tag));
23
25
  });
26
+ },
24
27
 
25
- if(scrivito_tag.hasClass('active')) {
26
- text.splice( text.indexOf(content), 1 );
28
+ clickFunction: function(event) {
29
+ var newValue = $(event.currentTarget).data('content');
30
+ var scrivito_tag = $(event.currentTarget).parent();
31
+ var content = $(scrivito_tag).scrivito('content');
32
+ var array_content = Array.isArray(content) ? content : content.split('%|%')
33
+ if(content === "") array_content = []
34
+
35
+ if($.inArray(newValue, content) >= 0) {
36
+ array_content.splice( content.indexOf(newValue), 1 );
27
37
  } else {
28
- text.push(content);
38
+ array_content.push(newValue);
29
39
  }
30
40
 
31
- scrivito_tag.toggleClass('active');
41
+ $(event.currentTarget).toggleClass('active');
42
+
43
+ var to_save = $(scrivito_tag).is('[data-scrivito-field-type=multienum]') ? array_content : array_content.join('%|%');
32
44
 
33
- return scrivito_tag.scrivito('save', text);
45
+ scrivito_tag.scrivito('save', to_save);
34
46
  },
35
47
  };
36
48
 
37
- // Set click event
38
49
  scrivito.on('load', function() {
39
- if(scrivito.in_editable_view()) {
40
- return $('body').on('click', ScrivitoMultiSelectButton.selector, function(event) {
41
- ScrivitoMultiSelectButton.clickFunction($(event.target));
42
- });
43
- }
50
+ scrivito.define_editor("toggle_multi_select_editor", {
51
+ can_edit: function(element) {
52
+ var is_enum = $(element).is('[data-scrivito-field-type=multienum]')
53
+ var has_list = $(element).is('[data-multi-select-list]')
54
+ return is_enum || has_list;
55
+ },
56
+ activate: function(element) {
57
+ ScrivitoMultiSelectButton.init_function(element);
58
+ $(element).on('click', '.scrivito-multi-select-button', ScrivitoMultiSelectButton.clickFunction);
59
+ }
60
+ });
44
61
  });
45
62
  });
46
-
47
63
  })(jQuery, this);
@@ -2,33 +2,48 @@
2
2
  'use strict';
3
3
 
4
4
  $(function() {
5
-
6
5
  App.ScrivitoToggleButton = {
7
- // set selector for Editor
8
- selector: "[data-editor='scrivito-toggle-button']",
9
-
10
- // Function that will be called on scrivito load
11
- initFunction: function() {},
12
-
13
- // set function triggert on click
14
- clickFunction: function(scrivito_tag) {
15
- var text = scrivito_tag.data('content');
6
+ init_function: function(scrivito_tag) {
7
+ var content = $(scrivito_tag).scrivito('content');
8
+ var values = $(scrivito_tag).is('[data-scrivito-field-type=enum]') ? $(scrivito_tag).scrivito('allowed_values') : $(scrivito_tag).data('toggle-button-list');
9
+ var captions = $(scrivito_tag).data('toggle-button-caption');
10
+
11
+ $(scrivito_tag).addClass('button_list').html('');
12
+ return $.each(values, function(index, value) {
13
+ var css_class = (value === content) ? 'active' : 'inactive'
14
+ var caption = (captions && captions[value]) ? captions[value] : value
15
+ $('<button></button>')
16
+ .addClass('scrivito-toggle-button')
17
+ .addClass(css_class)
18
+ .data('content', value)
19
+ .html(caption)
20
+ .appendTo($(scrivito_tag));
21
+ });
22
+ },
16
23
 
17
- scrivito_tag.addClass('active');
18
- scrivito_tag.siblings().removeClass('active');
24
+ clickFunction: function(event) {
25
+ var text = $(event.currentTarget).data('content');
26
+ var scrivito_tag = $(event.currentTarget).parent();
19
27
 
20
- return scrivito_tag.scrivito('save', text);
28
+ scrivito_tag.find('.active').removeClass('active');
29
+ $(event.currentTarget).addClass('active');
30
+
31
+ scrivito_tag.scrivito('save', text);
21
32
  },
22
33
  };
23
34
 
24
- // Set click event
25
35
  scrivito.on('load', function() {
26
- if(scrivito.in_editable_view()) {
27
- return $('body').on('click', ScrivitoToggleButton.selector, function(event) {
28
- ScrivitoToggleButton.clickFunction($(event.target));
29
- });
30
- }
36
+ scrivito.define_editor("toggle_button_editor", {
37
+ can_edit: function(element) {
38
+ var is_enum = $(element).is('[data-scrivito-field-type=enum]')
39
+ var has_list = $(element).is('[data-toggle-button-list]')
40
+ return is_enum || has_list;
41
+ },
42
+ activate: function(element) {
43
+ ScrivitoToggleButton.init_function(element);
44
+ $(element).on('click', '.scrivito-toggle-button', ScrivitoToggleButton.clickFunction);
45
+ }
46
+ });
31
47
  });
32
48
  });
33
-
34
- })(jQuery, this);
49
+ })(jQuery, this);
@@ -1,4 +1,4 @@
1
- .scrivito_dialog .button_list button[data-editor="scrivito-toggle-button"].color-select {
1
+ .scrivito_dialog .button_list .scrivito-toggle-button.color-select {
2
2
  padding: 3px;
3
3
  font-size: 0px;
4
4
  line-height: 10px;
@@ -18,8 +18,11 @@
18
18
  }
19
19
 
20
20
  [data-scrivito-toggle-details] {
21
- font-size: 12px;
22
- padding-left: 5px;
21
+ font-size: 14px;
22
+ position: absolute;
23
+ top: 14px;
24
+ right: 10px;
25
+ line-height: 14px;
23
26
  }
24
27
 
25
28
  [class^=scrivito-details-] {
@@ -6,27 +6,29 @@
6
6
  box-shadow: 0 0 5px #888 inset;
7
7
  }
8
8
 
9
- .scrivito_dialog .button_list button[data-editor="scrivito-multi-select-button"] {
9
+ .scrivito_dialog .button_list button.scrivito-multi-select-button {
10
10
  margin: 1px;
11
11
  min-width: 28px;
12
- text-shadow: 0 0 2px #222;
13
- background: #444;
14
- color: #fff;
12
+ background: #ddd;
13
+ color: #888;
15
14
  outline: none !important;
16
15
  border: none;
17
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
16
+ cursor: pointer;
17
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
18
18
  font-size: 15px;
19
19
  border-radius: 5px;
20
20
  line-height: 15px;
21
21
  width: initial;
22
22
  float: left;
23
+ padding: 5px 15px;
23
24
  }
24
25
 
25
- .scrivito_dialog .button_list button[data-editor='scrivito-multi-select-button']:hover {
26
- background: #888;
26
+ .scrivito_dialog .button_list button.scrivito-multi-select-button:hover {
27
+ background: #ccc;
27
28
  }
28
29
 
29
- .scrivito_dialog .button_list button[data-editor='scrivito-multi-select-button'].active {
30
- box-shadow: 0 0px 5px rgba(0,0,0,0.4) inset;
31
- background: #888;
30
+ .scrivito_dialog .button_list button.scrivito-multi-select-button.active {
31
+ box-shadow: 0 0px 5px rgba(0,0,0,0.2);
32
+ color: white;
33
+ background: #658b51;
32
34
  }
@@ -1,34 +1,42 @@
1
- .button_list {
1
+ .scrivito_dialog .button_list {
2
2
  overflow: hidden;
3
3
  position: relative;
4
4
  }
5
5
 
6
- .scrivito_dialog .button_list button[data-editor="scrivito-toggle-button"] {
6
+ .scrivito_dialog [data-scrivito-field-type="enum"].button_list {
7
+ background: transparent;
8
+ border: none;
9
+ padding: 0;
10
+ }
11
+
12
+ .scrivito_dialog .button_list .scrivito-toggle-button {
7
13
  margin: 4px;
8
14
  min-width: 28px;
9
- text-shadow: 0 0 2px #222;
10
- background: #444;
11
- color: #fff;
15
+ background: #ddd;
16
+ color: #888;
12
17
  outline: none !important;
13
18
  border: none;
14
19
  border-radius: 5px;
15
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
20
+ cursor: pointer;
21
+ box-shadow: 0 0 5px rgba(0,0,0,0.1);
16
22
  font-size: 15px;
17
23
  line-height: 15px;
18
24
  width: initial;
19
25
  float: left;
26
+ padding: 5px 15px;
20
27
  }
21
28
 
22
- .scrivito_dialog .button_list button[data-editor='scrivito-toggle-button']:hover {
23
- background: #888;
29
+ .scrivito_dialog .button_list .scrivito-toggle-button:hover {
30
+ background: #ccc;
24
31
  }
25
32
 
26
- .scrivito_dialog .button_list button[data-editor='scrivito-toggle-button'].active {
27
- box-shadow: 0 0px 5px rgba(0,0,0,0.4);
28
- background: #888;
33
+ .scrivito_dialog .button_list .scrivito-toggle-button.active {
34
+ box-shadow: 0 0px 5px rgba(0,0,0,0.2);
35
+ color: white;
36
+ background: #658b51;
29
37
  }
30
38
 
31
- .scrivito_dialog .button_list button[data-editor="scrivito-toggle-button"].color-select {
39
+ .scrivito_dialog .button_list .scrivito-toggle-button.color-select {
32
40
  background: transparent;
33
41
  transition: width 0.3s, height 0.3s, margin 0.3s;
34
42
  position: relative;
@@ -36,7 +44,7 @@
36
44
  margin: 7px 4px;
37
45
  }
38
46
 
39
- .scrivito_dialog .button_list button[data-editor="scrivito-toggle-button"].color-select.active {
47
+ .scrivito_dialog .button_list .scrivito-toggle-button.color-select.active {
40
48
  background: transparent;
41
49
  height: 51px;
42
50
  width: 51px;
@@ -1,4 +1,4 @@
1
- .scrivito_dialog .button_list button[data-editor="scrivito-toggle-button"].color-select:before {
1
+ .scrivito_dialog .button_list .scrivito-toggle-button.color-select:before {
2
2
  content: '';
3
3
  background-color: #fff;
4
4
  background-image:
@@ -14,7 +14,7 @@
14
14
  bottom: 0;
15
15
  }
16
16
 
17
- .scrivito_dialog .button_list button[data-editor="scrivito-toggle-button"].color-select:after {
17
+ .scrivito_dialog .button_list .scrivito-toggle-button.color-select:after {
18
18
  content: '';
19
19
  background-color: inherit;
20
20
  position: absolute;
@@ -2,23 +2,19 @@ module ScrivitoAdvancedEditors
2
2
  module ScrivitoAdvancedTagHelper
3
3
 
4
4
  def scrivito_multi_select_button_editor(obj, attribute, list=nil)
5
- scrivito_button_editor(obj, attribute, 'select', list)
5
+ if list
6
+ scrivito_tag(:div, obj, attribute, data: {multi_select_list: list})
7
+ else
8
+ scrivito_tag(:div, obj, attribute)
9
+ end
6
10
  end
7
11
 
8
12
  def scrivito_toggle_button_editor(obj, attribute, list=nil)
9
- scrivito_button_editor(obj, attribute, 'toggle', list)
10
- end
11
-
12
- def scrivito_button_editor(obj, attribute, type, list=nil)
13
- list = enum_list(obj, attribute) if list.nil?
14
-
15
- buttons = if block_given?
16
- list.map { |elem| yield(elem) }.join('').html_safe
13
+ if list
14
+ scrivito_tag(:div, obj, attribute, data: {toggle_list: list})
17
15
  else
18
- list.map { |elem| fallback_toggle_button(obj, attribute, elem, obj.send(attribute), type) }.join('').html_safe
16
+ scrivito_tag(:div, obj, attribute)
19
17
  end
20
-
21
- content_tag :div, buttons, class: "button_list #{type}"
22
18
  end
23
19
 
24
20
  def scrivito_selectable_color_classes(class_name, attribute)
@@ -28,56 +24,13 @@ module ScrivitoAdvancedEditors
28
24
  fallback_colors
29
25
  end
30
26
 
31
- colors.map { |color| color_hash(color) }
27
+ colors
32
28
  end
33
29
 
34
30
  private
35
31
 
36
32
  def fallback_colors
37
- ['','transparent', 'black', 'gray', 'light-gray', 'red', 'green', 'blue', 'yellow']
38
- end
39
-
40
- def fallback_toggle_button(obj, attribute, elem, active, type)
41
- content = elem.is_a?(Hash) ? elem : content_hash(elem)
42
- scrivito_tag(:button, obj, attribute, class: (content[:css] + " " + css_class(elem, active)), style: content[:style], data: data_attribute(content, type)) do
43
- content[:caption]
44
- end
45
- end
46
-
47
- def content_hash(elem)
48
- {
49
- content: elem,
50
- caption: (elem.present? ? elem.to_s : 'default'),
51
- style: '',
52
- css: ''
53
- }
54
- end
55
-
56
- def color_hash(color)
57
- {
58
- content: color,
59
- caption: (color.present? ? color : 'default'),
60
- style: '',
61
- css: "color-select #{color == "" ? "default" : color} #{ color.present? ? '' : 'transparent_bg' }",
62
- }
63
- end
64
-
65
- def data_attribute(elem, type)
66
- {
67
- editor: (type == 'toggle' ? 'scrivito-toggle-button' : 'scrivito-multi-select-button'),
68
- content: elem[:content],
69
- }
70
- end
71
-
72
- def enum_list(obj, attribute)
73
- obj.attribute_definitions[attribute].values
74
- end
75
-
76
- def css_class(elem, active)
77
- return '' if active.nil?
78
- return active == elem[:content] ? 'active' : '' if elem.is_a? Hash
79
- return active == elem.to_s ? 'active' : '' if (active.is_a?(String) || active.is_a?(Fixnum))
80
- active.include?(elem) ? 'active' : ''
33
+ ['', 'black', 'gray', 'light-gray', 'red', 'green', 'blue', 'yellow']
81
34
  end
82
35
  end
83
36
  end
@@ -1,3 +1,3 @@
1
1
  module ScrivitoAdvancedEditors
2
- VERSION = "0.0.19"
2
+ VERSION = "0.90.0.rc1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scrivito_advanced_editors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.90.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scrivito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-30 00:00:00.000000000 Z
11
+ date: 2015-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -75,11 +75,9 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - LICENSE
77
77
  - Rakefile
78
+ - app/assets/javascripts/scripts/color_picker.js
78
79
  - app/assets/javascripts/scripts/create_obj.js
79
- - app/assets/javascripts/scripts/jquery.caret.min.js
80
- - app/assets/javascripts/scripts/jquery.tag-editor.min.js
81
80
  - app/assets/javascripts/scripts/scrivito_dialog.js
82
- - app/assets/javascripts/scripts/scrivito_list_editor.js
83
81
  - app/assets/javascripts/scripts/scrivito_multi_select_button.js
84
82
  - app/assets/javascripts/scripts/scrivito_tabs.js
85
83
  - app/assets/javascripts/scripts/scrivito_textarea_editor.js
@@ -88,7 +86,6 @@ files:
88
86
  - app/assets/stylesheets/scrivito_advanced_editors.css
89
87
  - app/assets/stylesheets/scrivito_advanced_editors/color_picker.css.scss
90
88
  - app/assets/stylesheets/scrivito_advanced_editors/create_obj.css
91
- - app/assets/stylesheets/scrivito_advanced_editors/jquery.tag-editor.css
92
89
  - app/assets/stylesheets/scrivito_advanced_editors/scrivito_dialog.css.scss
93
90
  - app/assets/stylesheets/scrivito_advanced_editors/scrivito_mutli_select_button.css.scss
94
91
  - app/assets/stylesheets/scrivito_advanced_editors/scrivito_tabs.css
@@ -96,7 +93,6 @@ files:
96
93
  - app/assets/stylesheets/scrivito_advanced_editors/textarea_editor.css.scss
97
94
  - app/assets/stylesheets/scrivito_advanced_editors/transparent_bg.css.scss
98
95
  - app/helpers/scrivito_advanced_editors/scrivito_advanced_tag_helper.rb
99
- - app/views/scrivito_advanced_editors/_color_picker.html.erb
100
96
  - app/views/scrivito_advanced_editors/_create_obj.html.erb
101
97
  - lib/scrivito_advanced_editors.rb
102
98
  - lib/scrivito_advanced_editors/engine.rb
@@ -117,9 +113,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
113
  version: '0'
118
114
  required_rubygems_version: !ruby/object:Gem::Requirement
119
115
  requirements:
120
- - - ">="
116
+ - - ">"
121
117
  - !ruby/object:Gem::Version
122
- version: '0'
118
+ version: 1.3.1
123
119
  requirements: []
124
120
  rubyforge_project:
125
121
  rubygems_version: 2.4.5
@@ -1,2 +0,0 @@
1
- // http://code.accursoft.com/caret - 1.3.3
2
- !function(e){e.fn.caret=function(e){var t=this[0],n="true"===t.contentEditable;if(0==arguments.length){if(window.getSelection){if(n){t.focus();var o=window.getSelection().getRangeAt(0),r=o.cloneRange();return r.selectNodeContents(t),r.setEnd(o.endContainer,o.endOffset),r.toString().length}return t.selectionStart}if(document.selection){if(t.focus(),n){var o=document.selection.createRange(),r=document.body.createTextRange();return r.moveToElementText(t),r.setEndPoint("EndToEnd",o),r.text.length}var e=0,c=t.createTextRange(),r=document.selection.createRange().duplicate(),a=r.getBookmark();for(c.moveToBookmark(a);0!==c.moveStart("character",-1);)e++;return e}return t.selectionStart?t.selectionStart:0}if(-1==e&&(e=this[n?"text":"val"]().length),window.getSelection)n?(t.focus(),window.getSelection().collapse(t.firstChild,e)):t.setSelectionRange(e,e);else if(document.body.createTextRange)if(n){var c=document.body.createTextRange();c.moveToElementText(t),c.moveStart("character",e),c.collapse(!0),c.select()}else{var c=t.createTextRange();c.move("character",e),c.select()}return n||t.focus(),e}}(jQuery);
@@ -1,3 +0,0 @@
1
- // jQuery tagEditor v1.0.13
2
- // https://github.com/Pixabay/jQuery-tagEditor
3
- !function(t){t.fn.tagEditorInput=function(){var e=" ",i=t(this),a=parseInt(i.css("fontSize")),r=t("<span/>").css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:i.css("fontSize"),fontFamily:i.css("fontFamily"),fontWeight:i.css("fontWeight"),letterSpacing:i.css("letterSpacing"),whiteSpace:"nowrap"}),l=function(){if(e!==(e=i.val())){r.html(e.replace(/&/g,"&amp;").replace(/\s/g,"&nbsp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"));var t=r.width()+a;20>t&&(t=20),t!=i.width()&&i.width(t)}};return r.insertAfter(i),i.bind("keyup keydown focus",l)},t.fn.tagEditor=function(e,a,r){function l(e){if(8==e.which||46==e.which||e.ctrlKey&&88==e.which){try{var a=getSelection(),r=t(a.getRangeAt(0).commonAncestorContainer)}catch(e){r=0}if(r&&r.hasClass("tag-editor")){var l=[],n=a.toString().split(r.prev().data("options").dregex);for(i=0;i<n.length;i++){var o=t.trim(n[i]);o&&l.push(o)}t(".tag-editor-tag",r).each(function(){~t.inArray(t(this).html(),l)&&t(this).closest("li").find(".tag-editor-delete").click()})}}}var n,o=t.extend({},t.fn.tagEditor.defaults,e),c=this;if(o.dregex=new RegExp("["+o.delimiter.replace("-","-")+"]","g"),"string"==typeof e){var s=[];return c.each(function(){var i=t(this),l=i.data("options"),n=i.next(".tag-editor");"getTags"==e?s.push({field:i[0],editor:n,tags:n.data("tags")}):"addTag"==e?(t('<li><div class="tag-editor-spacer">&nbsp;'+l.delimiter[0]+'</div><div class="tag-editor-tag"></div><div class="tag-editor-delete"><i></i></div></li>').appendTo(n).find(".tag-editor-tag").html('<input type="text" maxlength="'+l.maxLength+'">').addClass("active").find("input").val(a).blur(),r?t(".placeholder",n).remove():n.click()):"removeTag"==e?(t(".tag-editor-tag",n).filter(function(){return t(this).html()==a}).closest("li").find(".tag-editor-delete").click(),r||n.click()):"destroy"==e&&i.removeClass("tag-editor-hidden-src").removeData("options").off("focus.tag-editor").next(".tag-editor").remove()}),"getTags"==e?s:this}return window.getSelection&&t(document).off("keydown.tag-editor").on("keydown.tag-editor",l),c.each(function(){function e(){!o.placeholder||c.length||t(".deleted, .placeholder, input",s).length||s.append('<li class="placeholder"><div>'+o.placeholder+"</div></li>")}function a(i){var a=c.toString();c=t(".tag-editor-tag:not(.deleted)",s).map(function(e,i){var a=t.trim(t(this).hasClass("active")?t(this).find("input").val():t(i).text());return a?a:void 0}).get(),s.data("tags",c),l.val(c.join(o.delimiter[0])),i||a!=c.toString()&&o.onChange(l,s,c),e()}function r(e){var r=e.closest("li"),n=e.val().replace(/ +/," ").split(o.dregex),d=e.data("old_tag"),g=c.slice(0);for(i=0;i<n.length;i++)u=t.trim(n[i]).slice(0,o.maxLength),u&&(o.forceLowercase&&(u=u.toLowerCase()),u=o.beforeTagSave(l,s,g,d,u)||u,~t.inArray(u,g)&&t(".tag-editor-tag",s).each(function(){t(this).html()==u&&t(this).closest("li").remove()}),g.push(u),r.before('<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag">'+u+'</div><div class="tag-editor-delete"><i></i></div></li>'));e.attr("maxlength",o.maxLength).removeData("old_tag").val("").focus(),a()}var l=t(this),c=[],s=t("<ul "+(o.clickDelete?'oncontextmenu="return false;" ':"")+'class="tag-editor"></ul>').insertAfter(l);l.addClass("tag-editor-hidden-src").data("options",o).on("focus.tag-editor",function(){s.click()}),s.append('<li style="width:1px">&nbsp;</li>');var d='<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag"></div><div class="tag-editor-delete"><i></i></div></li>';s.click(function(e,i){var a,r,l=99999;if(!window.getSelection||""==getSelection())return n=!0,t("input:focus",s).blur(),n?(n=!0,t(".placeholder",s).remove(),i&&i.length?r="before":t(".tag-editor-tag",s).each(function(){var n=t(this),o=n.offset(),c=o.left,s=o.top;e.pageY>=s&&e.pageY<=s+n.height()&&(e.pageX<c?(r="before",a=c-e.pageX):(r="after",a=e.pageX-c-n.width()),l>a&&(l=a,i=n))}),"before"==r?t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click():"after"==r?t(d).insertAfter(i.closest("li")).find(".tag-editor-tag").click():t(d).appendTo(s).find(".tag-editor-tag").click(),!1):!1}),s.on("click",".tag-editor-delete",function(){if(t(this).prev().hasClass("active"))return t(this).closest("li").find("input").caret(-1),!1;var i=t(this).closest("li"),r=i.find(".tag-editor-tag");return o.beforeTagDelete(l,s,c,r.html())===!1?!1:(r.addClass("deleted").animate({width:0},175,function(){i.remove(),e()}),a(),!1)}),o.clickDelete&&s.on("mousedown",".tag-editor-tag",function(i){if(i.ctrlKey||i.which>1){var r=t(this).closest("li"),n=r.find(".tag-editor-tag");return o.beforeTagDelete(l,s,c,n.html())===!1?!1:(n.addClass("deleted").animate({width:0},175,function(){r.remove(),e()}),a(),!1)}}),s.on("click",".tag-editor-tag",function(e){if(o.clickDelete&&(e.ctrlKey||e.which>1))return!1;if(!t(this).hasClass("active")){var i=t(this).html(),a=Math.abs((t(this).offset().left-e.pageX)/t(this).width()),r=parseInt(i.length*a),l=t(this).html('<input type="text" maxlength="'+o.maxLength+'" value="'+i+'">').addClass("active").find("input");if(l.data("old_tag",i).tagEditorInput().focus().caret(r),o.autocomplete){var n=t.extend({},o.autocomplete),c="select"in n?o.autocomplete.select:"";n.select=function(){c&&c(),setTimeout(function(){t(".active",s).find("input").focus()},20)},l.autocomplete(n)}}return!1}),s.on("blur","input",function(){var i=t(this),d=i.data("old_tag"),g=t.trim(i.val().replace(/ +/," ").replace(o.dregex,o.delimiter[0]));if(g){if(g.indexOf(o.delimiter[0])>=0)return void r(i);g!=d&&(o.forceLowercase&&(g=g.toLowerCase()),g=o.beforeTagSave(l,s,c,d,g)||g,t(".tag-editor-tag:not(.active)",s).each(function(){t(this).html()==g&&t(this).closest("li").remove()}))}else{if(d&&o.beforeTagDelete(l,s,c,d)===!1)return i.val(d).focus(),n=!1,void a();try{i.closest("li").remove()}catch(f){}d&&a()}i.parent().html(g).removeClass("active"),g!=d&&a(),e()});var g;s.on("paste","input",function(){t(this).removeAttr("maxlength"),g=t(this),setTimeout(function(){r(g)},30)});var f;s.on("keypress","input",function(e){o.delimiter.indexOf(String.fromCharCode(e.which))>=0&&(f=t(this),setTimeout(function(){r(f)},20))}),s.on("keydown","input",function(e){var i=t(this);if((37==e.which||!o.autocomplete&&38==e.which)&&!i.caret()||8==e.which&&!i.val()){var a=i.closest("li").prev("li").find(".tag-editor-tag");return a.length?a.click().find("input").caret(-1):i.val()&&t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click(),!1}if((39==e.which||!o.autocomplete&&40==e.which)&&i.caret()==i.val().length){var r=i.closest("li").next("li").find(".tag-editor-tag");return r.length?r.click().find("input").caret(0):i.val()&&s.click(),!1}if(9==e.which){if(e.shiftKey){var a=i.closest("li").prev("li").find(".tag-editor-tag");if(a.length)a.click().find("input").caret(0);else{if(!i.val())return l.attr("disabled","disabled"),void setTimeout(function(){l.removeAttr("disabled")},30);t(d).insertBefore(i.closest("li")).find(".tag-editor-tag").click()}return!1}var r=i.closest("li").next("li").find(".tag-editor-tag");if(r.length)r.click().find("input").caret(0);else{if(!i.val())return;s.click()}return!1}if(!(46!=e.which||t.trim(i.val())&&i.caret()!=i.val().length)){var r=i.closest("li").next("li").find(".tag-editor-tag");return r.length?r.click().find("input").caret(0):i.val()&&s.click(),!1}if(13==e.which)return s.trigger("click",[i.closest("li").next("li").find(".tag-editor-tag")]),!1;if(36!=e.which||i.caret()){if(35==e.which&&i.caret()==i.val().length)s.find(".tag-editor-tag").last().click();else if(27==e.which)return i.val(i.data("old_tag")?i.data("old_tag"):"").blur(),!1}else s.find(".tag-editor-tag").first().click()});var h=o.initialTags.length?o.initialTags:l.val().split(o.dregex);for(i=0;i<h.length;i++){var u=t.trim(h[i].replace(/ +/," "));u&&(o.forceLowercase&&(u=u.toLowerCase()),c.push(u),s.append('<li><div class="tag-editor-spacer">&nbsp;'+o.delimiter[0]+'</div><div class="tag-editor-tag">'+u+'</div><div class="tag-editor-delete"><i></i></div></li>'))}a(!0),o.sortable&&t.fn.sortable&&s.sortable({distance:5,cancel:".tag-editor-spacer, input",helper:"clone",update:function(){a()}})})},t.fn.tagEditor.defaults={initialTags:[],maxLength:50,delimiter:",;",placeholder:"",forceLowercase:!0,clickDelete:!1,sortable:!0,autocomplete:null,onChange:function(){},beforeTagSave:function(){},beforeTagDelete:function(){}}}(jQuery);
@@ -1,42 +0,0 @@
1
- (function($, App) {
2
- 'use strict';
3
-
4
- $(function() {
5
- App.ScrivitoListEditor = {
6
- // set selector for Editor
7
- selector: "[data-editor='scrivito-list-editor']",
8
-
9
- // Function that will be called on scrivito load
10
- initFunction: function() { },
11
-
12
- // set function triggert on click
13
- clickFunction: function(scrivito_tag, text, delimiter) {
14
- var delimiter = $(scrivito_tag).data('delimiter') || '|';
15
- var content = scrivito_tag.data('scrivito-field-type') == 'string' ? text.join(delimiter) : text;
16
- return scrivito_tag.scrivito('save', content);
17
- },
18
- };
19
-
20
- // Set click event
21
- scrivito.on('content', function() {
22
- if(scrivito.in_editable_view()) {
23
- var elems = $(ScrivitoListEditor.selector);
24
- $.each(elems, function(index, elem) {
25
- var delimiter = $(elem).data('delimiter') || '|';
26
- var content = $(elem).data('scrivito-field-type') == 'string' ? $(elem).html().split(delimiter) : $(elem).scrivito('content');
27
- $(elem).tagEditor({
28
- initialTags: content,
29
- delimiter: delimiter,
30
- forceLowercase: false,
31
- maxLength: 1000,
32
- placeholder: 'Enter new value ...',
33
- onChange: function (field, editor, tags) {
34
- ScrivitoListEditor.clickFunction(field, tags);
35
- }
36
- });
37
- });
38
- }
39
- });
40
- });
41
-
42
- })(jQuery, this);
@@ -1,76 +0,0 @@
1
-
2
- /* surrounding tag container */
3
- .tag-editor {
4
- list-style-type: none;
5
- padding: 5px 0;
6
- margin: 0 3px 3px;
7
- overflow: hidden;
8
- cursor: text;
9
- font: normal 14px sans-serif;
10
- color: #555;
11
- background: #fff;
12
- box-shadow: 0 0 3px rgba(0,0,0,0.5);
13
- border-radius: 5px;
14
- }
15
-
16
- /* core styles usually need no change */
17
- .tag-editor li { display: block; float: left; overflow: hidden; margin: 3px 0; line-height: 1.5; }
18
- .tag-editor div { float: left; padding: 0 4px; }
19
- .tag-editor .placeholder { padding: 3px 8px; color: #bbb; }
20
- .tag-editor .tag-editor-spacer { padding: 0; width: 8px; overflow: hidden; color: transparent; background: none; }
21
- .tag-editor input {
22
- vertical-align: inherit; border: 0; outline: none; padding: 0; margin: 0; cursor: text;
23
- font-family: inherit; font-weight: inherit; font-size: inherit; font-style: inherit;
24
- box-shadow: none; background: none;
25
- }
26
- /* hide original input field or textarea visually to allow tab navigation */
27
- .tag-editor-hidden-src { position: absolute !important; left: -99999px; }
28
- /* hide IE10 "clear field" X */
29
- .tag-editor ::-ms-clear { display: none; }
30
-
31
- /* tag style */
32
- .tag-editor .tag-editor-tag {
33
- padding: 3px 5px;
34
- color: #fff;
35
- background: #444;
36
- white-space: nowrap;
37
- overflow: hidden;
38
- cursor: pointer;
39
- border-radius: 2px 0 0 2px;
40
- }
41
-
42
- /* delete icon */
43
- .tag-editor .tag-editor-delete {
44
- background: #444;
45
- color: #fff;
46
- cursor: pointer;
47
- padding: 3px 0;
48
- border-radius: 0 2px 2px 0; }
49
- .tag-editor .tag-editor-delete i {
50
- display: inline-block;
51
- width: 14px;
52
- height: 14px;
53
- vertical-align: middle;
54
- position: relative;
55
- top: -1px;
56
- font: normal normal normal 14px/1 FontAwesome;
57
- }
58
- .tag-editor .tag-editor-delete i:before {
59
- content: "\f00d";
60
- }
61
- .tag-editor .tag-editor-delete:hover i { background-position: 0 -14px; }
62
- .tag-editor .tag-editor-tag.active+.tag-editor-delete,
63
- .tag-editor .tag-editor-tag.active+.tag-editor-delete i { background: none; cursor: text; }
64
-
65
- .tag-editor .tag-editor-tag.active { background: #eee; color: #000; }
66
-
67
- /* jQuery UI autocomplete - code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css */
68
- .ui-autocomplete { position: absolute; top: 0; left: 0; cursor: default; font-size: 14px; }
69
- .ui-front { z-index: 9999; }
70
- .ui-menu { list-style: none; padding: 1px; margin: 0; display: block; outline: none; }
71
- .ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.4; min-height: 0; /* support: IE7 */ }
72
- .ui-widget-content { border: 1px solid #bbb; background: #fff; color: #555; }
73
- .ui-widget-content a { color: #46799b; }
74
- .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus,
75
- .ui-widget-header .ui-state-focus { background: #e0eaf1; }
76
- .ui-helper-hidden-accessible { display: none; }
@@ -1 +0,0 @@
1
- <%= scrivito_toggle_button_editor(widget, attribute, scrivito_selectable_color_classes(widget.class.to_s, attribute)) %>