forked from backdrop/backdrop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ckeditor.api.php
214 lines (206 loc) · 8.46 KB
/
ckeditor.api.php
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<?php
/**
* @file
* Documentation for CKEditor 4 module APIs.
*/
/**
* @addtogroup hooks
* @{
*/
/**
* Provides a list of CKEditor 4 plugins.
*
* Each plugin for CKEditor must provide an array of properties containing
* information about the plugin. At minimum, plugins must provide a path and
* file location so that CKEditor may add the plugin. Available properties for
* each plugin include:
*
* - path: Required for all external plugins. String path to the plugin
* directory relative to the Backdrop installation root. Do not include a
* trailing slash.
* - file: Required for all external plugins. String file name of the plugin in
* the "path" directory.
* - internal: Boolean value indicating if the plugin is part of the compressed
* CKEditor library package and already loaded on all instances. If TRUE,
* the "path" and "file" properties are not needed.
* - css: An array of CSS files that should be added by CKEditor. These files
* are used only when CKEditor is using an iframe wrapper around its content.
* If a plugin needs to include CSS for inline and iframe versions, it should
* add its CSS via CKEditor's JavaScript CKEDITOR.addCss() method.
* - enabled callback: String containing a function name that can determine if
* this plugin should be enabled based on the current editor configuration.
* See the hook_ckeditor_PLUGIN_plugin_check() function for an example.
* - buttons: An array of buttons that are provided by this plugin. Each button
* should by keyed by its CKEditor button name, and should contain an array
* of button properties, including:
* - label: A human-readable, translated button name.
* - image: An image for the button to be used in the toolbar.
* - image_rtl: If the image needs to have a right-to-left version, specify
* an alternative file that will be used in RTL editors.
* - image_alternative: If this button does not render as an image, specify
* an HTML string representing the contents of this button. This alternative
* will only be used in the administrative section for assembling the
* toolbar.
* - attributes: An array of HTML attributes which should be added to this
* button when rendering the button in the administrative section for
* assembling the toolbar.
* - multiple: Boolean value indicating if this button may be added multiple
* times to the toolbar. This typically is only applicable for dividers and
* group indicators.
* - required_html: If this button requires certain HTML tags or attributes
* to be allowed, specify an nested array for each set of tags that should
* be allowed. For example:
* @code
* array(
* array(
* 'tags' => array('a'),
* 'attributes' => array('href', 'alt'),
* 'styles' => array('color', 'text-decoration'),
* 'classes' => array('external', 'internal'),
* ),
* );
* @endcode
* Note that this must be a nested array, to allow for the button to require
* different attributes on different tags.
* - dependencies: An array of other plugin names on which this button
* depends. A common use is to add the "contextmenu" plugin, if the button
* makes options available only via contextual menu.
* - optional_html: If this button can work with or without certain tags or
* attributes in a reduced manner, then specify additional values that can
* be used to provide the full functionality. This should match the same
* format as the "required_html" return value.
*
* @return array
* An array of plugin definitions, keyed by the plugin name.
*
* @see ckeditor_ckeditor_plugins()
* @see hook_ckeditor_PLUGIN_plugin_check()
*/
function hook_ckeditor_plugins() {
$plugins['myplugin'] = array(
'path' => backdrop_get_path('module', 'my_module') . '/js/myplugin',
'file' => 'plugin.js',
'css' => array(backdrop_get_path('module', 'my_module') . '/css/myplugin.css'),
'enabled callback' => 'my_module_myplugin_plugin_check',
'buttons' => array(
'MyPlugin' => array(
'label' => t('My custom button'),
'required_html' => array(
'tags' => array('a'),
'attributes' => array('href', 'alt'),
'styles' => array('color', 'text-decoration'),
'classes' => array('external', 'internal'),
),
'dependencies' => array('contextmenu'),
),
),
);
return $plugins;
}
/**
* Modify the list of available CKEditor 4 plugins.
*
* This hook may be used to modify plugin properties after they have been
* specified by other modules.
*
* @param $plugins
* An array of all the existing plugin definitions, passed by reference.
*
* @see hook_ckeditor_plugins()
*/
function hook_ckeditor_plugins_alter(array &$plugins) {
$plugins['someplugin']['enabled callback'] = 'my_module_someplugin_enabled_callback';
}
/**
* Modify the list of CSS files that will be added to a CKEditor 4 instance.
*
* Modules may use this hook to provide their own custom CSS file without
* providing a CKEditor plugin. This list of CSS files is only used in the
* iframe versions of CKEditor.
*
* Note that because this hook is only called for modules and the active theme,
* front-end themes will not be able to use this hook to add their own CSS files
* if a different admin theme is active. Instead, front-end themes and base
* themes may specify CSS files to be used in iframe instances of CKEditor
* through an entry in their .info file:
*
* @code
* ckeditor_stylesheets[] = css/ckeditor-iframe.css
* @endcode
*
* @param $css
* An array of CSS files, passed by reference. This is a flat list of file
* paths relative to the Backdrop root.
* @param $format
* The corresponding text format object as returned by filter_format_load()
* for which the current text editor is being displayed.
*
* @see _ckeditor_theme_css()
*/
function hook_ckeditor_css_alter(array &$css, $format) {
$css[] = backdrop_get_path('module', 'my_module') . '/css/my_module-ckeditor.css';
}
/**
* Modify the raw CKEditor 4 settings passed to the editor.
*
* This hook can be useful if you have created a CKEditor plugin that needs
* additional settings passed to it from Backdrop. In particular, because
* CKEditor loads JavaScript files directly, use of Backdrop.t() in these
* plugins will not work. You may use this hook to provide translated strings
* for your plugin.
*
* @param array $settings
* The array of settings that will be passed to CKEditor.
* @param $format
* The filter format object containing this editor's settings.
*/
function hook_ckeditor_settings_alter(array &$settings, $format) {
foreach ($format->editor_settings['toolbar'] as $row) {
foreach ($row as $button_group) {
// If a particular button is enabled, then add extra settings.
if (array_key_exists('MyPlugin', $button_group)) {
// Pull settings from the format and pass to the JavaScript settings.
$settings['backdrop']['myplugin_settings'] = $format->editor_settings['myplugin_settings'];
// Translate a string for use by CKEditor.
$settings['backdrop']['myplugin_help'] = t('A translated string example that will be used by CKEditor.');
}
}
}
}
/**
* @} End of "addtogroup hooks".
*/
/**
* Enabled callback for hook_ckeditor_plugins().
*
* Note: This is not really a hook. The function name is manually specified via
* 'enabled callback' in hook_ckeditor_plugins(), with this recommended callback
* name pattern. It is called from ckeditor_add_settings().
*
* This callback should determine if a plugin should be enabled for a CKEditor
* instance. Plugins may be enabled based off an explicit setting, or enable
* themselves based on the configuration of another setting, such as enabling
* based on a particular button being present in the toolbar.
*
* @param object $format
* An format object as returned by filter_format_load(). The editor's settings
* may be found in $format->editor_settings.
* @param string $plugin_name
* String name of the plugin that is being checked.
*
* @return boolean
* Boolean TRUE if the plugin should be enabled, FALSE otherwise.
*
* @see hook_ckeditor_plugins()
* @see ckeditor_add_settings()
*
* @ingroup callbacks
*/
function hook_ckeditor_PLUGIN_plugin_check($format, $plugin_name) {
// Automatically enable this plugin if the Underline button is enabled.
foreach ($format->editor_settings['toolbar']['buttons'] as $row) {
if (in_array('Underline', $row)) {
return TRUE;
}
}
}