+function _decorate_Nth_word($matches)
+{
+ // $matches[0]: including both words to skip and to decorate
+ // $matches[1]: word to decorate
+ // $matches[2+]: indicates which keyword to decorate
+ $index = -1;
+ for ($i = 2; $i < count($matches); $i++) {
+ if (isset($matches[$i]) && $matches[$i]) {
+ $index = $i - 2;
+ break;
+ }
+ }
+ if (isset($matches[1])) {
+ // wordN highlight class: N=0...n
+ return '<strong class="word' . $index . '">' .
+ $matches[0] . '</strong>';
+ }
+ return $matches[0];
+}
+
+/**
+ * Get data used by JavaScript modules
+ *
+ * @param $page page name
+ * @param $in_editing true if preview in editing
+ */
+function get_html_scripting_data($page, $in_editing)
+{
+ global $ticket_link_sites, $plugin;
+ global $external_link_cushion_page, $external_link_cushion;
+ global $topicpath_title;
+ global $ticket_jira_default_site;
+ if (!isset($ticket_link_sites) || !is_array($ticket_link_sites)) {
+ return '';
+ }
+ $is_utf8 = (bool)defined('PKWK_UTF8_ENABLE');
+ // Require: PHP 5.4+
+ $json_enabled = defined('JSON_UNESCAPED_UNICODE');
+ if (!$json_enabled) {
+ $empty_data = <<<EOS
+<div id="pukiwiki-site-properties" style="display:none;">
+</div>
+EOS;
+ return $empty_data;
+ }
+ // Site basic Properties
+ $props = array(
+ 'is_utf8' => $is_utf8,
+ 'json_enabled' => $json_enabled,
+ 'base_uri_pathname' => get_base_uri(PKWK_URI_ROOT),
+ 'base_uri_absolute' => get_base_uri(PKWK_URI_ABSOLUTE)
+ );
+ $h_props = htmlsc_json($props);
+ $site_props = <<<EOS
+<input type="hidden" class="site-props" value="$h_props" />
+EOS;
+ $h_plugin = htmlsc($plugin);
+ $plugin_prop = <<<EOS
+<input type="hidden" class="plugin-name" value="$h_plugin" />
+EOS;
+ // Page name
+ $h_page_name = htmlsc($page);
+ $page_name_data = <<<EOS
+<input type="hidden" class="page-name" value="$h_page_name" />
+EOS;
+ // Page is editing (preview)
+ $in_editing_value = ($plugin === 'edit' && $in_editing) ? 'true' : 'false';
+ $page_edit_data = <<<EOS
+<input type="hidden" class="page-in-edit" value="$in_editing_value" />
+EOS;
+ // AutoTicketLink
+ $filtered_ticket_link_sites = array();
+ foreach ($ticket_link_sites as $s) {
+ if (!preg_match('/^([a-zA-Z0-9]+)([\.\-][a-zA-Z0-9]+)*$/', $s['key'])) {
+ continue;
+ }
+ array_push($filtered_ticket_link_sites, $s);
+ }
+ $h_ticket_link_sites = htmlsc_json($filtered_ticket_link_sites);
+ $ticketlink_data = <<<EOS
+<input type="hidden" class="ticketlink-def" value="$h_ticket_link_sites" />
+EOS;
+ // AutoTicketLink - JIRA
+ $ticket_jira_projects = get_ticketlink_jira_projects();
+ $ticketlink_jira_data = '';
+ if (count($ticket_jira_projects) > 0) {
+ $h_ticket_jira_projects = htmlsc_json($ticket_jira_projects);
+ $ticketlink_jira_data = <<<EOS
+<input type="hidden" class="ticketlink-jira-def" value="$h_ticket_jira_projects" />
+EOS;
+ }
+ $ticketlink_jira_default_data = '';
+ if (isset($ticket_jira_default_site) && is_array($ticket_jira_default_site)) {
+ $h_ticket_jira_default_site = htmlsc_json($ticket_jira_default_site);
+ $ticketlink_jira_default_data = <<<EOS
+<input type="hidden" class="ticketlink-jira-default-def" value="$h_ticket_jira_default_site" />
+EOS;
+ }
+ // External link cushion page
+ $external_link_cushion_data = '';
+ if ($external_link_cushion_page) {
+ $h_cushion = htmlsc_json($external_link_cushion);
+ $external_link_cushion_data = <<<EOS
+<input type="hidden" class="external-link-cushion" value="$h_cushion" />
+EOS;
+ }
+ // Topicpath title
+ $topicpath_data = '';
+ if ($topicpath_title && exist_plugin('topicpath')) {
+ $parents = plugin_topicpath_parent_links($page);
+ $h_topicpath = htmlsc(json_encode($parents,
+ JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+ $topicpath_data = <<<EOS
+<input type="hidden" class="topicpath-links" value="$h_topicpath" />
+EOS;
+ }
+ $data = <<<EOS
+<div id="pukiwiki-site-properties" style="display:none;">
+$site_props
+$plugin_prop
+$page_name_data
+$page_edit_data
+$ticketlink_data
+$ticketlink_jira_data
+$ticketlink_jira_default_data
+$external_link_cushion_data
+$topicpath_data
+</div>
+EOS;
+ return $data;
+}
+