Skip to content

Commit

Permalink
MDL-43853 Atto: Performance. Turbocharge the loader.
Browse files Browse the repository at this point in the history
Rewrite the atto plugin loader so that:

A) We have a real settings.php page and can edit the toolbar.
B) All plugins are loaded at the same time (not serially)
C) All plugins share the YUI sandbox (more performance boost).

I had to change the loading API for this - but there are not non-core uses yet,
this is the best time to break it.
  • Loading branch information
Damyon Wiese committed Mar 26, 2014
1 parent f1e6953 commit 55c0403
Show file tree
Hide file tree
Showing 88 changed files with 296 additions and 735 deletions.
4 changes: 4 additions & 0 deletions lib/editor/atto/lang/en/editor_atto.php
Expand Up @@ -23,3 +23,7 @@
*/

$string['pluginname'] = 'Atto HTML editor';
$string['subplugintype_atto'] = 'Atto plugin';
$string['settings'] = 'Atto toolbar settings';
$string['toolbarconfig'] = 'Toolbar config';
$string['toolbarconfig_desc'] = 'The list of plugins and the order they are displayed can be configured here. The configuration consists of groups (one per line) followed by the ordered list of plugins for that group. The group is separated from the plugins with an equals sign and the plugins are separated with commas. The group must be one of the following: style, paragraph, links, insert, other.';
55 changes: 42 additions & 13 deletions lib/editor/atto/lib.php
Expand Up @@ -67,30 +67,58 @@ public function supports_repositories() {
}

/**
* Use this editor for give element.
* Use this editor for given element.
*
* @param string $elementid
* @param array $options
* @param null $fpoptions
*/
public function use_editor($elementid, array $options=null, $fpoptions=null) {
global $PAGE;
$PAGE->requires->yui_module('moodle-editor_atto-editor',
'M.editor_atto.init',
array($this->get_init_params($elementid, $options, $fpoptions)));

$plugins = core_component::get_plugin_list('atto');
$configstr = get_config('editor_atto', 'toolbar');

$grouplines = explode("\n", $configstr);

foreach ($plugins as $name => $fulldir) {
$PAGE->requires->string_for_js('pluginname', 'atto_' . $name);
$plugins[$name] = component_callback('atto_' . $name, 'sort_order', array($elementid));
$groups = array();

foreach ($grouplines as $groupline) {
$line = explode('=', $groupline);
if (count($line) > 1) {
$group = trim(array_shift($line));
$plugins = array_map('trim', explode(',', array_shift($line)));
$groups[$group] = $plugins;
}
}

asort($plugins);
foreach ($plugins as $name => $sort) {
component_callback('atto_' . $name, 'init_editor', array($elementid));
$modules = array('moodle-editor_atto-editor');

$jsplugins = array();
foreach ($groups as $group => $plugins) {
$groupplugins = array();
foreach ($plugins as $plugin) {
$jsplugin = array();
$jsplugin['name'] = $plugin;
$jsplugin['params'] = array();
$modules[] = 'moodle-atto_' . $plugin . '-button';

component_callback('atto_' . $plugin, 'strings_for_js');
$extra = component_callback('atto_' . $plugin, 'params_for_js');

if ($extra) {
$jsplugin['params'] = $extra;
}
// We always need the plugin name.
$PAGE->requires->string_for_js('pluginname', 'atto_' . $plugin);
$groupplugins[] = $jsplugin;
}
$jsplugins[] = array('group'=>$group, 'plugins'=>$groupplugins);
}

$PAGE->requires->yui_module($modules,
'M.editor_atto.init',
array($this->get_init_params($elementid, $options, $fpoptions, $jsplugins)));

}

/**
Expand All @@ -100,7 +128,7 @@ public function use_editor($elementid, array $options=null, $fpoptions=null) {
* @param array $options
* @param array $fpoptions
*/
protected function get_init_params($elementid, array $options=null, array $fpoptions=null) {
protected function get_init_params($elementid, array $options = null, array $fpoptions = null, $plugins = null) {
global $PAGE;

$directionality = get_string('thisdirection', 'langconfig');
Expand All @@ -114,7 +142,8 @@ protected function get_init_params($elementid, array $options=null, array $fpopt
'content_css' => $contentcss,
'language' => $lang,
'directionality' => $directionality,
'filepickeroptions' => array()
'filepickeroptions' => array(),
'plugins' => $plugins
);
if ($fpoptions) {
$params['filepickeroptions'] = $fpoptions;
Expand Down
48 changes: 0 additions & 48 deletions lib/editor/atto/plugins/bold/lib.php

This file was deleted.

Expand Up @@ -34,7 +34,8 @@ M.atto_bold = M.atto_bold || {
M.editor_atto.text_updated(elementid);
};

M.editor_atto.add_toolbar_button(params.elementid, 'bold', params.icon, params.group, click);
var iconurl = M.util.image_url('e/bold', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'bold', iconurl, params.group, click);
}
};

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -34,7 +34,8 @@ M.atto_bold = M.atto_bold || {
M.editor_atto.text_updated(elementid);
};

M.editor_atto.add_toolbar_button(params.elementid, 'bold', params.icon, params.group, click);
var iconurl = M.util.image_url('e/bold', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'bold', iconurl, params.group, click);
}
};

Expand Down
3 changes: 2 additions & 1 deletion lib/editor/atto/plugins/bold/yui/src/button/js/button.js
Expand Up @@ -32,6 +32,7 @@ M.atto_bold = M.atto_bold || {
M.editor_atto.text_updated(elementid);
};

M.editor_atto.add_toolbar_button(params.elementid, 'bold', params.icon, params.group, click);
var iconurl = M.util.image_url('e/bold', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'bold', iconurl, params.group, click);
}
};
48 changes: 0 additions & 48 deletions lib/editor/atto/plugins/clear/lib.php

This file was deleted.

Expand Up @@ -34,7 +34,8 @@ M.atto_clear = M.atto_clear || {
M.editor_atto.text_updated(elementid);
};

M.editor_atto.add_toolbar_button(params.elementid, 'clear', params.icon, params.group, click);
var iconurl = M.util.image_url('e/clear_formatting', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'clear', iconurl, params.group, click);
}
};

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -34,7 +34,8 @@ M.atto_clear = M.atto_clear || {
M.editor_atto.text_updated(elementid);
};

M.editor_atto.add_toolbar_button(params.elementid, 'clear', params.icon, params.group, click);
var iconurl = M.util.image_url('e/clear_formatting', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'clear', iconurl, params.group, click);
}
};

Expand Down
3 changes: 2 additions & 1 deletion lib/editor/atto/plugins/clear/yui/src/button/js/button.js
Expand Up @@ -32,6 +32,7 @@ M.atto_clear = M.atto_clear || {
M.editor_atto.text_updated(elementid);
};

M.editor_atto.add_toolbar_button(params.elementid, 'clear', params.icon, params.group, click);
var iconurl = M.util.image_url('e/clear_formatting', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'clear', iconurl, params.group, click);
}
};
48 changes: 0 additions & 48 deletions lib/editor/atto/plugins/html/lib.php

This file was deleted.

Expand Up @@ -53,7 +53,8 @@ M.atto_html = M.atto_html || {
M.atto_html.ishtml = !M.atto_html.ishtml;
};

M.editor_atto.add_toolbar_button(params.elementid, 'html', params.icon, params.group, click);
var iconurl = M.util.image_url('e/source_code', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'html', iconurl, params.group, click);
}
};

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -53,7 +53,8 @@ M.atto_html = M.atto_html || {
M.atto_html.ishtml = !M.atto_html.ishtml;
};

M.editor_atto.add_toolbar_button(params.elementid, 'html', params.icon, params.group, click);
var iconurl = M.util.image_url('e/source_code', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'html', iconurl, params.group, click);
}
};

Expand Down
3 changes: 2 additions & 1 deletion lib/editor/atto/plugins/html/yui/src/button/js/button.js
Expand Up @@ -51,6 +51,7 @@ M.atto_html = M.atto_html || {
M.atto_html.ishtml = !M.atto_html.ishtml;
};

M.editor_atto.add_toolbar_button(params.elementid, 'html', params.icon, params.group, click);
var iconurl = M.util.image_url('e/source_code', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'html', iconurl, params.group, click);
}
};
20 changes: 3 additions & 17 deletions lib/editor/atto/plugins/image/lib.php
Expand Up @@ -25,13 +25,10 @@
defined('MOODLE_INTERNAL') || die();

/**
* Initialise this plugin
* @param string $elementid
* Initialise the strings required for js
*/
function atto_image_init_editor($elementid) {
global $PAGE, $OUTPUT;

$icon = array('e/insert_edit_image', 'core');
function atto_image_strings_for_js() {
global $PAGE;

$PAGE->requires->strings_for_js(array('createimage',
'enterurl',
Expand All @@ -43,16 +40,5 @@ function atto_image_init_editor($elementid) {
'presentationoraltrequired',
'width',
'height'), 'atto_image');
$PAGE->requires->yui_module('moodle-atto_image-button',
'M.atto_image.init',
array(array('elementid'=>$elementid, 'icon'=>$icon, 'group'=>'file')));

}

/**
* Return the order this plugin should be displayed in the toolbar
* @return int the absolute position within the toolbar
*/
function atto_image_sort_order() {
return 13;
}
Expand Up @@ -91,7 +91,8 @@ M.atto_image = M.atto_image || {
}
};

M.editor_atto.add_toolbar_button(params.elementid, 'image', params.icon, params.group, display_chooser, this);
var iconurl = M.util.image_url('e/insert_edit_image', 'core');
M.editor_atto.add_toolbar_button(params.elementid, 'image', iconurl, params.group, display_chooser, this);
},
open_filepicker : function(e) {
var elementid = this.getAttribute('data-editor');
Expand Down

0 comments on commit 55c0403

Please sign in to comment.