tra('Dialog'), 'documentation' => 'PluginDialog', 'validate' => 'all', 'description' => tra('Create a custom popup dialog box'), 'prefs' => [ 'wikiplugin_dialog', 'feature_jquery_ui' ], 'iconname' => 'link-external', 'introduced' => 8, 'body' => tra('text'), 'params' => [ 'title' => [ 'required' => false, 'name' => tra('Title'), 'description' => tra(''), 'since' => '8.0', 'filter' => 'text', 'default' => '', ], 'buttons' => [ 'required' => false, 'name' => tra('Buttons'), 'description' => tra('Button labels separated by commas.'), 'since' => '8.0', 'filter' => 'text', 'separator' => ',', 'default' => [tra('Ok')], ], 'actions' => [ 'required' => false, 'name' => tra('Button Actions'), 'description' => tra('JavaScript to perform on first button click.'), 'since' => '8.0', 'filter' => 'rawhtml_unsafe', 'separator' => ',', 'default' => '', ], 'width' => [ 'required' => false, 'name' => tra('Dialog Width'), 'description' => tra('In pixels.'), 'since' => '8.0', 'filter' => 'digits', 'default' => '300', ], 'id' => [ 'required' => false, 'name' => tra('HTML ID'), 'description' => tr('Automatically generated if left empty in the form %0 (must be unique per page)', 'wpdialog_XX'), 'since' => '8.0', 'filter' => 'text', 'default' => '', ], 'showAnim' => [ 'required' => false, 'name' => tra('Show Animation'), 'description' => tra(''), 'since' => '8.0', 'filter' => 'text', 'default' => '', ], 'hideAnim' => [ 'required' => false, 'name' => tra('Hide Animation'), 'description' => tra(''), 'since' => '8.0', 'filter' => 'text', 'default' => '', ], 'autoOpen' => [ 'required' => false, 'name' => tra('Auto Open'), 'description' => tra('Open dialog automatically'), 'since' => '8.0', 'filter' => 'alpha', 'default' => 'y', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'] ], ], 'modal' => [ 'required' => false, 'name' => tra('Modal'), 'description' => tra('Use modal form'), 'since' => '8.0', 'filter' => 'alpha', 'default' => 'n', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'] ], ], 'wiki' => [ 'required' => false, 'name' => tra('Wiki Page'), 'description' => tra('Wiki page to use as dialog body'), 'since' => '8.0', 'filter' => 'pagename', 'default' => '', 'profile_reference' => 'wiki_page', ], 'openAction' => [ 'required' => false, 'name' => tra('Open Action'), 'description' => tra('JavaScript to execute when dialog opens.'), 'since' => '8.0', 'filter' => 'rawhtml_unsafe', 'default' => '', ], ], ]; } function wikiplugin_dialog($data, $params) { static $id = 0; $unique = 'wpdialog_' . ++$id; $headerlib = TikiLib::lib('header'); $defaults = []; $plugininfo = wikiplugin_dialog_info(); foreach ($plugininfo['params'] as $key => $param) { $defaults["$key"] = $param['default']; } $params = array_merge($defaults, $params); if (empty($params['id'])) { $params['id'] = $unique; } if (! empty($params['wiki'])) { $ignore = ''; $data = TikiLib::lib('wiki')->get_parse($params['wiki'], $ignore, true); } $options = ['width' => $params['width']]; $options['autoOpen'] = ($params['autoOpen'] === 'y'); $options['modal'] = ($params['modal'] === 'y'); if (! empty($params['showAnim'])) { $options['show'] = $params['showAnim']; } if (! empty($params['hideAnim'])) { $options['hide'] = $params['hideAnim']; } if (empty($params['actions'])) { $params['actions'] = []; } if (empty($params['buttons'])) { $params['buttons'] = []; } $buttons = ''; // buttons need functions attached and json_encode cannot deal with them ;( $nbuts = count($params['buttons']); if ($nbuts > 0) { $buttons = '{'; for ($i = 0; $i < $nbuts; $i++) { if (! isset($params['actions'][$i])) { $params['actions'][$i] = '$(this).dialog("close");'; } if (strpos($params['actions'][$i], '$(this).dialog("close");') === false) { $params['actions'][$i] .= ';$(this).dialog("close");'; } $buttons .= strlen($buttons) > 1 ? ',' : ''; $buttons .= json_encode($params['buttons'][$i]); $buttons .= ': function(){' . $params['actions'][$i] . '}'; } $buttons .= '}'; $options['buttons'] = 'buttonsdummy'; } $opens = ''; if (! empty($params['openAction'])) { $opens = 'function(){' . $params['openAction'] . '}'; $options['open'] = 'opendummy'; } $optString = json_encode($options); if (! empty($buttons)) { $optString = str_replace('"buttonsdummy"', $buttons, $optString); } if (! empty($opens)) { $optString = str_replace('"opendummy"', $opens, $optString); } $js = '$("#' . $params['id'] . '").dialog(' . $optString . ');'; $headerlib->add_js('$(function() {' . $js . '});'); if (empty($params['title'])) { $titlestr = ''; } else { $titlestr = ' title="' . $params['title'] . '"'; } $html = ''; return $html; }