Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions GalleryNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

use dokuwiki\plugin\prosemirror\parser\Node;

/**
* Gallery Node in Prosemirror editor
*/
class GalleryNode extends Node
{
protected $parent;
Expand All @@ -30,12 +33,9 @@ public function __construct($data, Node $parent)
*/
public function toSyntax()
{
/** @var syntax_plugin_gallery $syntax */
$syntax = plugin_load('syntax', 'gallery');
$defaults = $syntax->getDataFromParams($syntax->getConf('options'));
/** @var action_plugin_gallery_prosemirror $action */
/** @var \action_plugin_gallery_prosemirror $action */
$action = plugin_load('action', 'gallery_prosemirror');
$defaults = $action->cleanAttributes($defaults);
$defaults = $action->getDefaults();
$query = [];
$attrs = $this->data['attrs'];
if ($attrs['thumbnailsize'] !== $defaults['thumbnailsize']) {
Expand Down
102 changes: 61 additions & 41 deletions action/prosemirror.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use dokuwiki\Extension\ActionPlugin;
use dokuwiki\Extension\EventHandler;
use dokuwiki\Extension\Event;
use dokuwiki\plugin\gallery\classes\Options;
use dokuwiki\plugin\gallery\GalleryNode;
use dokuwiki\plugin\prosemirror\parser\RootNode;
use dokuwiki\plugin\prosemirror\schema\Node;
Expand Down Expand Up @@ -42,18 +43,15 @@ public function writeDefaultsToJSINFO(Event $event, $param)
{
global $JSINFO;

/** @var syntax_plugin_gallery $syntax */
$syntax = plugin_load('syntax', 'gallery');
$defaults = $syntax->getDataFromParams($syntax->getConf('options'));
$attributes = $this->cleanAttributes($defaults);
$defaults = $this->getDefaults();

if (!isset($JSINFO['plugins'])) {
$JSINFO['plugins'] = [];
}
$JSINFO['plugins']['gallery'] = [
'defaults' => array_map(function ($default) {
return ['default' => $default,];
}, $attributes),
}, $defaults),
];
$JSINFO['plugins']['gallery']['defaults']['namespace'] = ['default' => ''];
}
Expand All @@ -72,59 +70,29 @@ public function writeDefaultsToJSINFO(Event $event, $param)
*/
public function renderFromInstructions(Event $event, $param)
{
if ($event->data['name'] !== 'gallery') {
if ($event->data['name'] !== 'gallery_main') {
return;
}
$event->preventDefault();
$event->stopPropagation();

$node = new Node('dwplugin_gallery');
// FIXME we may have to parse the namespace from the original syntax ?
$data = $event->data['data'];
$ns = $data['ns'];
$data = $this->cleanAttributes($data);
// FIXME source can be something other than namespace
[$ns, $options] = $data;

if (cleanID($ns) === $ns) {
$ns = ':' . $ns;
}
$node->attr('namespace', $ns);
foreach ($data as $name => $value) {

$attrs = $this->optionsToAttrs($options);
foreach ($attrs as $name => $value) {
$node->attr($name, $value);
}
$event->data['renderer']->nodestack->add($node);
}

/**
* Slightly rewrite the attributes to the format expected by our schema
*
* @param $data
*
* @return mixed
*/
public function cleanAttributes($data)
{
$data['thumbnailsize'] = $data['tw'] . 'x' . $data['th'];
$data['imagesize'] = $data['iw'] . 'X' . $data['ih'];
if ($data['random']) {
$data['sort'] = 'random';
} else {
$data['sort'] .= 'sort';
}

if ($data['align'] === 1) {
$data['align'] = 'right';
} elseif ($data['align'] === 2) {
$data['align'] = 'left';
} else {
$data['align'] = 'center';
}

unset($data['tw'], $data['th'], $data['iw'], $data['ih'], $data['random']);
unset($data['ns'], $data['galid']);

return $data;
}

/**
* Render our syntax instructions for prosemirror
*
Expand Down Expand Up @@ -172,4 +140,56 @@ public function renderAttributesToHTML(Event $event, $param)
$html = p_render('xhtml', p_get_instructions($syntax), $info);
echo $html;
}

/**
* Get default node attributes from gallery Options object
*
* @return array
*/
public function getDefaults(): array
{
$options = new Options();

return [
'thumbnailsize' => $options->thumbnailWidth . 'x' . $options->thumbnailHeight,
'imagesize' => $options->lightboxWidth . 'X' . $options->lightboxHeight,
'cache' => $options->cache,
'filter' => $options->filter,
'showname' => $options->showname,
'showtitle' => $options->showtitle,
'crop' => $options->crop,
'direct' => $options->direct,
'reverse' => $options->reverse,
'recursive' => $options->recursive,
'align' => $options->align,
'cols' => $options->columns,
'limit' => $options->limit,
'offset' => $options->offset,
'paginate' => $options->paginate,
'sort' => $options->sort,
];
}

/**
* Convert gallery options to node attributes
*
* @param Options $options
* @return array
*/
protected function optionsToAttrs($options)
{
$attrs = (array)$options;

$attrs['thumbnailsize'] = $options->thumbnailWidth . 'x' . $options->thumbnailHeight;
$attrs['imagesize'] = $options->lightboxWidth . 'X' . $options->lightboxHeight;
$attrs['cols'] = $options->columns;

unset($attrs['thumbnailWidth']);
unset($attrs['thumbnailHeight']);
unset($attrs['lightboxWidth']);
unset($attrs['lightboxHeight']);
unset($attrs['columns']);

return $attrs;
}
}