KeyboardView.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /**
  2. * DO NOT EDIT THIS FILE.
  3. * See the following change record for more information,
  4. * https://www.drupal.org/node/2815083
  5. * @preserve
  6. **/
  7. (function ($, Drupal, Backbone, _) {
  8. Drupal.ckeditor.KeyboardView = Backbone.View.extend({
  9. initialize: function initialize() {
  10. this.$el.on('keydown.ckeditor', '.ckeditor-buttons a, .ckeditor-multiple-buttons a', this.onPressButton.bind(this));
  11. this.$el.on('keydown.ckeditor', '[data-drupal-ckeditor-type="group"]', this.onPressGroup.bind(this));
  12. },
  13. render: function render() {},
  14. onPressButton: function onPressButton(event) {
  15. var upDownKeys = [38, 63232, 40, 63233];
  16. var leftRightKeys = [37, 63234, 39, 63235];
  17. if (event.keyCode === 13) {
  18. event.stopPropagation();
  19. }
  20. if (_.indexOf(_.union(upDownKeys, leftRightKeys), event.keyCode) > -1) {
  21. var view = this;
  22. var $target = $(event.currentTarget);
  23. var $button = $target.parent();
  24. var $container = $button.parent();
  25. var $group = $button.closest('.ckeditor-toolbar-group');
  26. var $row = void 0;
  27. var containerType = $container.data('drupal-ckeditor-button-sorting');
  28. var $availableButtons = this.$el.find('[data-drupal-ckeditor-button-sorting="source"]');
  29. var $activeButtons = this.$el.find('.ckeditor-toolbar-active');
  30. var $originalGroup = $group;
  31. var dir = void 0;
  32. if (containerType === 'source') {
  33. if (_.indexOf([40, 63233], event.keyCode) > -1) {
  34. $activeButtons.find('.ckeditor-toolbar-group-buttons').eq(0).prepend($button);
  35. }
  36. } else if (containerType === 'target') {
  37. if (_.indexOf(leftRightKeys, event.keyCode) > -1) {
  38. var $siblings = $container.children();
  39. var index = $siblings.index($button);
  40. if (_.indexOf([37, 63234], event.keyCode) > -1) {
  41. if (index > 0) {
  42. $button.insertBefore($container.children().eq(index - 1));
  43. } else {
  44. $group = $container.parent().prev();
  45. if ($group.length > 0) {
  46. $group.find('.ckeditor-toolbar-group-buttons').append($button);
  47. } else {
  48. $container.closest('.ckeditor-row').prev().find('.ckeditor-toolbar-group').not('.placeholder').find('.ckeditor-toolbar-group-buttons').eq(-1).append($button);
  49. }
  50. }
  51. } else if (_.indexOf([39, 63235], event.keyCode) > -1) {
  52. if (index < $siblings.length - 1) {
  53. $button.insertAfter($container.children().eq(index + 1));
  54. } else {
  55. $container.parent().next().find('.ckeditor-toolbar-group-buttons').prepend($button);
  56. }
  57. }
  58. } else if (_.indexOf(upDownKeys, event.keyCode) > -1) {
  59. dir = _.indexOf([38, 63232], event.keyCode) > -1 ? 'prev' : 'next';
  60. $row = $container.closest('.ckeditor-row')[dir]();
  61. if (dir === 'prev' && $row.length === 0) {
  62. if ($button.data('drupal-ckeditor-type') === 'separator') {
  63. $button.off().remove();
  64. $activeButtons.find('.ckeditor-toolbar-group-buttons').eq(0).children().eq(0).children().trigger('focus');
  65. } else {
  66. $availableButtons.prepend($button);
  67. }
  68. } else {
  69. $row.find('.ckeditor-toolbar-group-buttons').eq(0).prepend($button);
  70. }
  71. }
  72. } else if (containerType === 'dividers') {
  73. if (_.indexOf([40, 63233], event.keyCode) > -1) {
  74. $button = $button.clone(true);
  75. $activeButtons.find('.ckeditor-toolbar-group-buttons').eq(0).prepend($button);
  76. $target = $button.children();
  77. }
  78. }
  79. view = this;
  80. Drupal.ckeditor.registerButtonMove(this, $button, function (result) {
  81. if (!result && $originalGroup) {
  82. $originalGroup.find('.ckeditor-buttons').append($button);
  83. }
  84. $target.trigger('focus');
  85. });
  86. event.preventDefault();
  87. event.stopPropagation();
  88. }
  89. },
  90. onPressGroup: function onPressGroup(event) {
  91. var upDownKeys = [38, 63232, 40, 63233];
  92. var leftRightKeys = [37, 63234, 39, 63235];
  93. if (event.keyCode === 13) {
  94. var view = this;
  95. window.setTimeout(function () {
  96. Drupal.ckeditor.openGroupNameDialog(view, $(event.currentTarget));
  97. }, 0);
  98. event.preventDefault();
  99. event.stopPropagation();
  100. }
  101. if (_.indexOf(_.union(upDownKeys, leftRightKeys), event.keyCode) > -1) {
  102. var $group = $(event.currentTarget);
  103. var $container = $group.parent();
  104. var $siblings = $container.children();
  105. var index = void 0;
  106. var dir = void 0;
  107. if (_.indexOf(leftRightKeys, event.keyCode) > -1) {
  108. index = $siblings.index($group);
  109. if (_.indexOf([37, 63234], event.keyCode) > -1) {
  110. if (index > 0) {
  111. $group.insertBefore($siblings.eq(index - 1));
  112. } else {
  113. var $rowChildElement = $container.closest('.ckeditor-row').prev().find('.ckeditor-toolbar-groups').children().eq(-1);
  114. $group.insertBefore($rowChildElement);
  115. }
  116. } else if (_.indexOf([39, 63235], event.keyCode) > -1) {
  117. if (!$siblings.eq(index + 1).hasClass('placeholder')) {
  118. $group.insertAfter($container.children().eq(index + 1));
  119. } else {
  120. $container.closest('.ckeditor-row').next().find('.ckeditor-toolbar-groups').prepend($group);
  121. }
  122. }
  123. } else if (_.indexOf(upDownKeys, event.keyCode) > -1) {
  124. dir = _.indexOf([38, 63232], event.keyCode) > -1 ? 'prev' : 'next';
  125. $group.closest('.ckeditor-row')[dir]().find('.ckeditor-toolbar-groups').eq(0).prepend($group);
  126. }
  127. Drupal.ckeditor.registerGroupMove(this, $group);
  128. $group.trigger('focus');
  129. event.preventDefault();
  130. event.stopPropagation();
  131. }
  132. }
  133. });
  134. })(jQuery, Drupal, Backbone, _);