tinymce-rails 4.9.10 → 4.9.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6fa577ba4bb17221c1c259c4a18147670dcb81722b0202b28c08913a4d872751
4
- data.tar.gz: 86ec35ae2896adbad31380729974a58e08d953bedb61223dccb2ebf16d81e7d8
3
+ metadata.gz: 9119c17e2bcb3d33ab9b959c0c6c41c8d529106e51ab483f338d1e64423481d4
4
+ data.tar.gz: 7e358486b6a0f1db1794349cfeb7413538208df73d14bc3b6d221d2069222c91
5
5
  SHA512:
6
- metadata.gz: 25c329bdd1abb59169c61009a187ccb20345f3ec97cf57f0babbf19bde9a1eb9bf4af731be4916c0615e0ff0dcacefec12223198290e9fb54933f76bb03b8dcf
7
- data.tar.gz: 8ac5274d54ef0df889162f70f8fa62164dd631d5c92744a9ca47a8abb56aa63022acabb785e58747be3284b3296867293d75ad9ce505f32b7c8a66a1aab6432f
6
+ metadata.gz: 5222c58b96aabcf11ea4e41328be95d4f6461aaab3406dc148b5cff078b5d4f2b12c96ca01c5f3c5c83d8c6a9730667afd57640e6c54b4a3e7ef27d57af28bfa
7
+ data.tar.gz: ec2c6ed08479406cbc7829e702557b9ea9a754f5ab091e9119d216150b463fcfcc061dd83f6d2e8b719aa203dd9b68cd24c4117c3370b4aafd4158cf1604c911
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  Rails Integration for TinyMCE
2
2
  =============================
3
3
 
4
- The `tinymce-rails` gem integrates the [TinyMCE](http://www.tinymce.com/) editor with the Rails asset pipeline.
4
+ The `tinymce-rails` gem integrates the [TinyMCE](https://www.tiny.cloud/) editor with the Rails asset pipeline.
5
5
 
6
- This gem is compatible with Rails 3.1.1 and higher (including Rails 4).
6
+ This gem is compatible with Rails 5.0 and higher.
7
7
 
8
- This is the branch for TinyMCE 4. For TinyMCE 5, please see the [master branch](https://github.com/spohlenz/tinymce-rails), and for TinyMCE 3.5.x, please see the [tinymce-3 branch](https://github.com/spohlenz/tinymce-rails/tree/tinymce-3).
8
+ This is the branch for TinyMCE 4. Please see the [`main`](https://github.com/spohlenz/tinymce-rails) branch for TinyMCE 7, and alternate branches for [TinyMCE 6](https://github.com/spohlenz/tinymce-rails/tree/tinymce-6), [TinyMCE 5](https://github.com/spohlenz/tinymce-rails/tree/tinymce-5) & [TinyMCE 3.5.x](https://github.com/spohlenz/tinymce-rails/tree/tinymce-3).
9
9
 
10
- [![Build Status](https://travis-ci.org/spohlenz/tinymce-rails.png?branch=master)](https://travis-ci.org/spohlenz/tinymce-rails)
10
+ [![Build Status](https://img.shields.io/github/actions/workflow/status/spohlenz/tinymce-rails/rspec.yml?branch=tinymce-4)](https://github.com/spohlenz/tinymce-rails/actions?query=branch%3Atinymce-4)
11
11
 
12
12
  **New in 3.5.11, 4.1.10 and 4.2.1:** Alternative asset installation methods (copy vs compile/symlink). See the [Asset Compilation](#asset-compilation) section below for details.
13
13
 
@@ -52,7 +52,7 @@ alternate:
52
52
  - table
53
53
  ```
54
54
 
55
- See the [TinyMCE 4 Documentation](https://www.tinymce.com/docs/configure/) for a full list of configuration options.
55
+ See the [TinyMCE 4 Documentation](https://www.tiny.cloud/docs-4x/configure/) for a full list of configuration options.
56
56
 
57
57
 
58
58
  **3. Include the TinyMCE assets**
@@ -1,4 +1,4 @@
1
- // 4.9.10 (2020-04-23)
1
+ // 4.9.11 (2020-07-13)
2
2
  (function () {
3
3
  (function (domGlobals) {
4
4
  'use strict';
@@ -5657,7 +5657,7 @@
5657
5657
  textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');
5658
5658
  blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);
5659
5659
  textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');
5660
- each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {
5660
+ each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {
5661
5661
  specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');
5662
5662
  });
5663
5663
  var patternToRegExp = function (str) {
@@ -8103,7 +8103,8 @@
8103
8103
  return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;
8104
8104
  };
8105
8105
  var isAbove = function (rect1, rect2) {
8106
- if (rect1.bottom - rect1.height / 2 < rect2.top) {
8106
+ var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);
8107
+ if (rect1.bottom - halfHeight < rect2.top) {
8107
8108
  return true;
8108
8109
  }
8109
8110
  if (rect1.top > rect2.bottom) {
@@ -13290,6 +13291,99 @@
13290
13291
  };
13291
13292
  var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };
13292
13293
 
13294
+ var getPos$1 = function (elm) {
13295
+ var x = 0, y = 0;
13296
+ var offsetParent = elm;
13297
+ while (offsetParent && offsetParent.nodeType) {
13298
+ x += offsetParent.offsetLeft || 0;
13299
+ y += offsetParent.offsetTop || 0;
13300
+ offsetParent = offsetParent.offsetParent;
13301
+ }
13302
+ return {
13303
+ x: x,
13304
+ y: y
13305
+ };
13306
+ };
13307
+ var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
13308
+ var scrollEvent = {
13309
+ elm: elm,
13310
+ alignToTop: alignToTop
13311
+ };
13312
+ editor.fire('scrollIntoView', scrollEvent);
13313
+ return scrollEvent.isDefaultPrevented();
13314
+ };
13315
+ var scrollElementIntoView = function (editor, elm, alignToTop) {
13316
+ var y, viewPort;
13317
+ var dom = editor.dom;
13318
+ var root = dom.getRoot();
13319
+ var viewPortY, viewPortH, offsetY = 0;
13320
+ if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
13321
+ return;
13322
+ }
13323
+ if (!NodeType.isElement(elm)) {
13324
+ return;
13325
+ }
13326
+ if (alignToTop === false) {
13327
+ offsetY = elm.offsetHeight;
13328
+ }
13329
+ if (root.nodeName !== 'BODY') {
13330
+ var scrollContainer = editor.selection.getScrollContainer();
13331
+ if (scrollContainer) {
13332
+ y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
13333
+ viewPortH = scrollContainer.clientHeight;
13334
+ viewPortY = scrollContainer.scrollTop;
13335
+ if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
13336
+ scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
13337
+ }
13338
+ return;
13339
+ }
13340
+ }
13341
+ viewPort = dom.getViewPort(editor.getWin());
13342
+ y = dom.getPos(elm).y + offsetY;
13343
+ viewPortY = viewPort.y;
13344
+ viewPortH = viewPort.h;
13345
+ if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
13346
+ editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
13347
+ }
13348
+ };
13349
+ var getViewPortRect = function (editor) {
13350
+ if (editor.inline) {
13351
+ return editor.getBody().getBoundingClientRect();
13352
+ } else {
13353
+ var win = editor.getWin();
13354
+ return {
13355
+ left: 0,
13356
+ right: win.innerWidth,
13357
+ top: 0,
13358
+ bottom: win.innerHeight,
13359
+ width: win.innerWidth,
13360
+ height: win.innerHeight
13361
+ };
13362
+ }
13363
+ };
13364
+ var scrollBy = function (editor, dx, dy) {
13365
+ if (editor.inline) {
13366
+ editor.getBody().scrollLeft += dx;
13367
+ editor.getBody().scrollTop += dy;
13368
+ } else {
13369
+ editor.getWin().scrollBy(dx, dy);
13370
+ }
13371
+ };
13372
+ var scrollRangeIntoView = function (editor, rng) {
13373
+ head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
13374
+ var bodyRect = getViewPortRect(editor);
13375
+ var overflow = getOverflow(bodyRect, rngRect);
13376
+ var margin = 4;
13377
+ var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
13378
+ var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
13379
+ scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
13380
+ });
13381
+ };
13382
+ var ScrollIntoView = {
13383
+ scrollElementIntoView: scrollElementIntoView,
13384
+ scrollRangeIntoView: scrollRangeIntoView
13385
+ };
13386
+
13293
13387
  var isContentEditableTrue$2 = NodeType.isContentEditableTrue;
13294
13388
  var isContentEditableFalse$6 = NodeType.isContentEditableFalse;
13295
13389
  var showCaret = function (direction, editor, node, before, scrollIntoView) {
@@ -13336,6 +13430,10 @@
13336
13430
  }
13337
13431
  return range;
13338
13432
  };
13433
+ var moveToRange = function (editor, rng) {
13434
+ editor.selection.setRng(rng);
13435
+ ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());
13436
+ };
13339
13437
 
13340
13438
  var trimEmptyTextNode$1 = function (dom, node) {
13341
13439
  if (NodeType.isText(node) && node.data.length === 0) {
@@ -20415,7 +20513,7 @@
20415
20513
  var blockElements = Tools.extend({}, schema.getBlockElements());
20416
20514
  var nonEmptyElements = schema.getNonEmptyElements();
20417
20515
  var parent, lastParent, prev, prevName;
20418
- var whiteSpaceElements = schema.getNonEmptyElements();
20516
+ var whiteSpaceElements = schema.getWhiteSpaceElements();
20419
20517
  var elementRule, textNode;
20420
20518
  blockElements.body = 1;
20421
20519
  for (i = 0; i < l; i++) {
@@ -21490,99 +21588,6 @@
21490
21588
  };
21491
21589
  };
21492
21590
 
21493
- var getPos$1 = function (elm) {
21494
- var x = 0, y = 0;
21495
- var offsetParent = elm;
21496
- while (offsetParent && offsetParent.nodeType) {
21497
- x += offsetParent.offsetLeft || 0;
21498
- y += offsetParent.offsetTop || 0;
21499
- offsetParent = offsetParent.offsetParent;
21500
- }
21501
- return {
21502
- x: x,
21503
- y: y
21504
- };
21505
- };
21506
- var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
21507
- var scrollEvent = {
21508
- elm: elm,
21509
- alignToTop: alignToTop
21510
- };
21511
- editor.fire('scrollIntoView', scrollEvent);
21512
- return scrollEvent.isDefaultPrevented();
21513
- };
21514
- var scrollElementIntoView = function (editor, elm, alignToTop) {
21515
- var y, viewPort;
21516
- var dom = editor.dom;
21517
- var root = dom.getRoot();
21518
- var viewPortY, viewPortH, offsetY = 0;
21519
- if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
21520
- return;
21521
- }
21522
- if (!NodeType.isElement(elm)) {
21523
- return;
21524
- }
21525
- if (alignToTop === false) {
21526
- offsetY = elm.offsetHeight;
21527
- }
21528
- if (root.nodeName !== 'BODY') {
21529
- var scrollContainer = editor.selection.getScrollContainer();
21530
- if (scrollContainer) {
21531
- y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
21532
- viewPortH = scrollContainer.clientHeight;
21533
- viewPortY = scrollContainer.scrollTop;
21534
- if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
21535
- scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
21536
- }
21537
- return;
21538
- }
21539
- }
21540
- viewPort = dom.getViewPort(editor.getWin());
21541
- y = dom.getPos(elm).y + offsetY;
21542
- viewPortY = viewPort.y;
21543
- viewPortH = viewPort.h;
21544
- if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
21545
- editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
21546
- }
21547
- };
21548
- var getViewPortRect = function (editor) {
21549
- if (editor.inline) {
21550
- return editor.getBody().getBoundingClientRect();
21551
- } else {
21552
- var win = editor.getWin();
21553
- return {
21554
- left: 0,
21555
- right: win.innerWidth,
21556
- top: 0,
21557
- bottom: win.innerHeight,
21558
- width: win.innerWidth,
21559
- height: win.innerHeight
21560
- };
21561
- }
21562
- };
21563
- var scrollBy = function (editor, dx, dy) {
21564
- if (editor.inline) {
21565
- editor.getBody().scrollLeft += dx;
21566
- editor.getBody().scrollTop += dy;
21567
- } else {
21568
- editor.getWin().scrollBy(dx, dy);
21569
- }
21570
- };
21571
- var scrollRangeIntoView = function (editor, rng) {
21572
- head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
21573
- var bodyRect = getViewPortRect(editor);
21574
- var overflow = getOverflow(bodyRect, rngRect);
21575
- var margin = 4;
21576
- var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
21577
- var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
21578
- scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
21579
- });
21580
- };
21581
- var ScrollIntoView = {
21582
- scrollElementIntoView: scrollElementIntoView,
21583
- scrollRangeIntoView: scrollRangeIntoView
21584
- };
21585
-
21586
21591
  var hasCeProperty = function (node) {
21587
21592
  return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);
21588
21593
  };
@@ -21901,22 +21906,37 @@
21901
21906
  };
21902
21907
  var GetSelectionContent = { getContent: getContent };
21903
21908
 
21909
+ var setupArgs = function (args, content) {
21910
+ return __assign(__assign({ format: 'html' }, args), {
21911
+ set: true,
21912
+ selection: true,
21913
+ content: content
21914
+ });
21915
+ };
21916
+ var cleanContent = function (editor, args) {
21917
+ if (args.format !== 'raw') {
21918
+ var node = editor.parser.parse(args.content, __assign({
21919
+ isRootContent: true,
21920
+ forced_root_block: false
21921
+ }, args));
21922
+ return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);
21923
+ } else {
21924
+ return args.content;
21925
+ }
21926
+ };
21904
21927
  var setContent = function (editor, content, args) {
21928
+ var contentArgs = setupArgs(args, content);
21905
21929
  var rng = editor.selection.getRng(), caretNode;
21906
21930
  var doc = editor.getDoc();
21907
21931
  var frag, temp;
21908
- args = args || { format: 'html' };
21909
- args.set = true;
21910
- args.selection = true;
21911
- args.content = content;
21912
- if (!args.no_events) {
21913
- args = editor.fire('BeforeSetContent', args);
21914
- if (args.isDefaultPrevented()) {
21915
- editor.fire('SetContent', args);
21932
+ if (!contentArgs.no_events) {
21933
+ contentArgs = editor.fire('BeforeSetContent', contentArgs);
21934
+ if (contentArgs.isDefaultPrevented()) {
21935
+ editor.fire('SetContent', contentArgs);
21916
21936
  return;
21917
21937
  }
21918
21938
  }
21919
- content = args.content;
21939
+ content = cleanContent(editor, contentArgs);
21920
21940
  if (rng.insertNode) {
21921
21941
  content += '<span id="__caret">_</span>';
21922
21942
  if (rng.startContainer === doc && rng.endContainer === doc) {
@@ -21948,19 +21968,20 @@
21948
21968
  } catch (ex) {
21949
21969
  }
21950
21970
  } else {
21951
- if (rng.item) {
21971
+ var anyRng = rng;
21972
+ if (anyRng.item) {
21952
21973
  doc.execCommand('Delete', false, null);
21953
- rng = editor.getRng();
21974
+ anyRng = editor.selection.getRng();
21954
21975
  }
21955
21976
  if (/^\s+/.test(content)) {
21956
- rng.pasteHTML('<span id="__mce_tmp">_</span>' + content);
21977
+ anyRng.pasteHTML('<span id="__mce_tmp">_</span>' + content);
21957
21978
  editor.dom.remove('__mce_tmp');
21958
21979
  } else {
21959
- rng.pasteHTML(content);
21980
+ anyRng.pasteHTML(content);
21960
21981
  }
21961
21982
  }
21962
- if (!args.no_events) {
21963
- editor.fire('SetContent', args);
21983
+ if (!contentArgs.no_events) {
21984
+ editor.fire('SetContent', contentArgs);
21964
21985
  }
21965
21986
  };
21966
21987
  var SetSelectionContent = { setContent: setContent };
@@ -22649,7 +22670,7 @@
22649
22670
  return function () {
22650
22671
  var newRng = getHorizontalRange(editor, forward);
22651
22672
  if (newRng) {
22652
- editor.selection.setRng(newRng);
22673
+ moveToRange(editor, newRng);
22653
22674
  return true;
22654
22675
  } else {
22655
22676
  return false;
@@ -22660,7 +22681,7 @@
22660
22681
  return function () {
22661
22682
  var newRng = getVerticalRange(editor, down);
22662
22683
  if (newRng) {
22663
- editor.selection.setRng(newRng);
22684
+ moveToRange(editor, newRng);
22664
22685
  return true;
22665
22686
  } else {
22666
22687
  return false;
@@ -22762,10 +22783,6 @@
22762
22783
  });
22763
22784
  };
22764
22785
 
22765
- var moveToRange = function (editor, rng) {
22766
- editor.selection.setRng(rng);
22767
- ScrollIntoView.scrollRangeIntoView(editor, rng);
22768
- };
22769
22786
  var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {
22770
22787
  return lineInfo.breakAt.map(function (breakPos) {
22771
22788
  return getPositionsUntil(scope, breakPos).breakAt.isSome();
@@ -26364,8 +26381,8 @@
26364
26381
  defaultSettings: {},
26365
26382
  $: DomQuery,
26366
26383
  majorVersion: '4',
26367
- minorVersion: '9.10',
26368
- releaseDate: '2020-04-23',
26384
+ minorVersion: '9.11',
26385
+ releaseDate: '2020-07-13',
26369
26386
  editors: legacyEditors,
26370
26387
  i18n: I18n,
26371
26388
  activeEditor: null,
@@ -24,14 +24,14 @@ module TinyMCE
24
24
  def symlink_asset(src, dest)
25
25
  with_asset(src, dest) do |src, dest|
26
26
  create_symlink(src, dest)
27
- create_symlink("#{src}.gz", "#{dest}.gz") if File.exists?("#{src}.gz")
27
+ create_symlink("#{src}.gz", "#{dest}.gz") if File.exist?("#{src}.gz")
28
28
  end
29
29
  end
30
30
 
31
31
  def create_symlink(src, dest)
32
32
  target = File.basename(src)
33
33
 
34
- unless File.exists?(dest) && File.symlink?(dest) && File.readlink(dest) == target
34
+ unless File.exist?(dest) && File.symlink?(dest) && File.readlink(dest) == target
35
35
  logger.info "Creating symlink #{dest}"
36
36
  FileUtils.ln_s(target, dest, :force => true)
37
37
  else
@@ -56,7 +56,7 @@ module TinyMCE
56
56
  src = File.join(@target, src)
57
57
  dest = File.join(@target, dest)
58
58
 
59
- yield src, dest if File.exists?(src)
59
+ yield src, dest if File.exist?(src)
60
60
  end
61
61
  end
62
62
  end
@@ -6,6 +6,7 @@ module TinyMCE
6
6
  def self.load(manifest_path)
7
7
  JsonManifest.try(manifest_path, ".sprockets-manifest*.json") ||
8
8
  JsonManifest.try(manifest_path, "manifest*.json") ||
9
+ JsonManifest.try(manifest_path) ||
9
10
  YamlManifest.try(manifest_path) ||
10
11
  NullManifest.new
11
12
  end
@@ -37,7 +38,7 @@ module TinyMCE
37
38
  class YamlManifest < AssetManifest
38
39
  def self.try(manifest_path)
39
40
  yaml_file = File.join(manifest_path, "manifest.yml")
40
- new(yaml_file) if File.exists?(yaml_file)
41
+ new(yaml_file) if File.exist?(yaml_file)
41
42
  end
42
43
 
43
44
  def initialize(file)
@@ -75,9 +76,13 @@ module TinyMCE
75
76
  end
76
77
 
77
78
  class JsonManifest < AssetManifest
78
- def self.try(manifest_path, pattern)
79
- paths = Dir[File.join(manifest_path, pattern)]
80
- new(paths.first) if paths.any?
79
+ def self.try(manifest_path, pattern=nil)
80
+ if pattern
81
+ paths = Dir[File.join(manifest_path, pattern)]
82
+ new(paths.first) if paths.any?
83
+ elsif File.file?(manifest_path)
84
+ new(manifest_path)
85
+ end
81
86
  end
82
87
 
83
88
  def initialize(file)
@@ -14,7 +14,7 @@ module TinyMCE::Rails
14
14
  }
15
15
  end
16
16
 
17
- FUNCTION_REGEX = /^function\s*\(/
17
+ FUNCTION_REGEX = /^function\s*\(([\w\d\s_,]*)\)\s*\{([^}]*)\}|\(([\w\d\s_,]*)\)\s*=>\s*\{([^}]*)\}/
18
18
  RELATIVE_PATH_REGEX = /^(\/|\.{1,2})\S*/
19
19
 
20
20
  COMMA = ",".freeze
@@ -47,7 +47,7 @@ module TinyMCE::Rails
47
47
  # Check for files provided in the content_css option to replace them with their actual path.
48
48
  # If no corresponding stylesheet is found for a file, it will remain unchanged.
49
49
  "content_css" => ->(value) {
50
- helpers = ActionView::Base.new(ActionView::LookupContext.new([]))
50
+ helpers = ActionView::Base.new(ActionView::LookupContext.new([]), {}, nil)
51
51
  separator = OPTION_SEPARATORS["content_css"]
52
52
 
53
53
  value.split(separator).map { |file|
@@ -25,13 +25,13 @@ module TinyMCE::Rails
25
25
  end
26
26
 
27
27
  def last_updated
28
- File.exists?(path) && File.mtime(path)
28
+ File.exist?(path) && File.mtime(path)
29
29
  end
30
30
 
31
31
  def load_configuration
32
32
  @last_loaded = last_updated
33
33
 
34
- return Configuration.new_with_defaults if !File.exists?(path)
34
+ return Configuration.new_with_defaults if !File.exist?(path)
35
35
 
36
36
  options = load_yaml(path)
37
37
 
@@ -43,7 +43,8 @@ module TinyMCE::Rails
43
43
  end
44
44
 
45
45
  def load_yaml(path)
46
- YAML::load(ERB.new(IO.read(path)).result)
46
+ result = ERB.new(IO.read(path)).result
47
+ YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(result) : YAML.load(result)
47
48
  end
48
49
  end
49
50
  end
@@ -1,6 +1,6 @@
1
1
  module TinyMCE
2
2
  module Rails
3
- VERSION = "4.9.10"
4
- TINYMCE_VERSION = "4.9.10"
3
+ VERSION = "4.9.11.1"
4
+ TINYMCE_VERSION = "4.9.11"
5
5
  end
6
6
  end