-
Notifications
You must be signed in to change notification settings - Fork 0
/
unl_editor.module
134 lines (122 loc) · 4.43 KB
/
unl_editor.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Session\AccountInterface;
use Drupal\paragraphs\ParagraphInterface;
/**
* Implements hook_editor_js_settings_alter().
*/
function unl_editor_editor_js_settings_alter(array &$settings) {
foreach (array_keys($settings['editor']['formats']) as $text_format_id) {
if ($settings['editor']['formats'][$text_format_id]['editor'] === 'ckeditor') {
// Add WDN classes to WYSIWYG editor so styles take effect.
$settings['editor']['formats'][$text_format_id]['editorSettings']['bodyClass'] = 'wdn-main';
$settings['editor']['formats'][$text_format_id]['editorSettings']['bodyId'] = 'maincontent';
// 'edit html code' permission that governs Source WYSIWYG button access.
if (!\Drupal::currentUser()->hasPermission('edit html code')) {
foreach (array_keys($settings['editor']['formats'][$text_format_id]['editorSettings']['toolbar']) as $key) {
if (is_array($settings['editor']['formats'][$text_format_id]['editorSettings']['toolbar'][$key])) {
foreach ($settings['editor']['formats'][$text_format_id]['editorSettings']['toolbar'][$key]['items'] as $item => $label) {
if ($label == 'Source') {
unset($settings['editor']['formats'][$text_format_id]['editorSettings']['toolbar'][$key]['items'][$item]);
}
}
}
}
}
}
}
}
/**
* Implements hook_ENTITY_TYPE_access() for entity type "paragraph".
*/
function unl_editor_paragraph_access(ParagraphInterface $entity, $operation, AccountInterface $account) {
if (!in_array($operation, array('update', 'delete'), TRUE)) {
return AccessResult::neutral();
}
if ($entity->getType() == 'html' && !$account->hasPermission('edit html paragraph')) {
return AccessResult::forbidden();
}
else {
return AccessResult::neutral();
}
}
/**
* Implements hook_ENTITY_TYPE_create_access() for entity type "paragraph".
*/
function unl_editor_paragraph_create_access(AccountInterface $account = NULL, array $context = array(), $entity_bundle = NULL) {
if ($entity_bundle == 'html' && !$account->hasPermission('edit html paragraph')) {
return AccessResult::forbidden();
}
else {
return AccessResult::neutral();
}
}
/**
* Implements hook_field_widget_form_alter().
*/
function unl_editor_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) {
if ($context['widget']->getPluginId() == 'entity_reference_paragraphs') {
// Hide the validation error generated by the use of the allowed_formats
// module which disallows the html Text Format. Non-coders
// should only be notified that 'You are not allowed to edit or remove
// this Band' since they can't even see the field with the html.
if (isset($element['info']['validation_error']) && $element['info']['validation_error']['#markup']->render() == 'The value you selected is not a valid choice.') {
unset($element['info']['validation_error']);
}
}
}
/**
* Implements hook_form_FORM_ID_alter().
* Add the JS to enable CodeMirror. The JS only attaches CodeMirror to field_html fields.
*/
function unl_editor_form_node_form_alter(array &$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$path = unl_editor_codemirror();
if (!empty($path)) {
$form['#attached']['library'][] = 'unl_editor/codemirror';
}
}
/**
* Implements hook_library_info_build().
*/
function unl_editor_library_info_build() {
$libraries = [];
if ($path = unl_editor_codemirror()) {
$path = '/' . $path;
$libraries['codemirror'] = [
'version' => 'VERSION',
'css' => [
'component' => [
$path . '/lib/codemirror.css' => [],
'css/unl_editor.codemirror.css' => [],
],
],
'js' => [
$path . '/lib/codemirror.js' => [],
$path . '/mode/css/css.js' => [],
'js/unl_editor.js' => [],
],
'dependencies' => [
'core/jquery',
'core/drupal',
],
];
}
return $libraries;
}
/**
* Returns path to CodeMirror, or FALSE if not found.
*/
function unl_editor_codemirror() {
static $path;
// Only process this once per page load.
if (is_null($path)) {
if (Drupal::moduleHandler()->moduleExists('libraries')) {
$path = libraries_get_path('codemirror');
}
else {
$path = 'libraries/codemirror';
}
$path = file_exists($path) && is_dir($path) ? $path : FALSE;
}
return $path;
}