go live with wiki mimetypes - you can now choose if a wiki will contain markdown or bb-code markup

This commit is contained in:
Mario Vavti 2016-11-30 13:30:50 +01:00
parent 53e4b55ea3
commit afffbb6487
5 changed files with 79 additions and 26 deletions

View File

@ -202,11 +202,20 @@ class Wiki extends \Zotlabs\Web\Controller {
notice(t('Error retrieving page content') . EOL);
goaway('/'.argv(0).'/'.argv(1).'/'.$wikiUrlName);
}
$content = ($p['content'] !== '' ? htmlspecialchars_decode($p['content'],ENT_COMPAT) : '"# New page\n"');
$mimeType = $p['mimeType'];
$rawContent = $p['mimeType'] == 'text/bbcode' ? htmlspecialchars_decode(json_decode($p['content']),ENT_COMPAT) : htmlspecialchars_decode($p['content'],ENT_COMPAT);
$content = ($p['content'] !== '' ? $rawContent : '"# New page\n"');
// Render the Markdown-formatted page content in HTML
require_once('library/markdown.php');
$html = wiki_generate_toc(zidify_text(purify_html(Markdown(wiki_bbcode(json_decode($content))))));
$renderedContent = wiki_convert_links($html,argv(0).'/'.argv(1).'/'.$wikiUrlName);
if($mimeType == 'text/bbcode') {
$renderedContent = purify_html(bbcode($content));
}
else {
require_once('library/markdown.php');
$html = wiki_generate_toc(zidify_text(purify_html(Markdown(wiki_bbcode(json_decode($content))))));
$renderedContent = wiki_convert_links($html,argv(0).'/'.argv(1).'/'.$wikiUrlName);
}
$hide_editor = false;
$showPageControls = $wiki_editor;
$showNewWikiButton = $wiki_owner;
@ -220,14 +229,13 @@ class Wiki extends \Zotlabs\Web\Controller {
}
$wikiModalID = random_string(3);
$wikiModal = replace_macros(
get_markup_template('generic_modal.tpl'), array(
'$id' => $wikiModalID,
'$title' => t('Revision Comparison'),
'$ok' => t('Revert'),
'$cancel' => t('Cancel')
)
);
$wikiModal = replace_macros(get_markup_template('generic_modal.tpl'), array(
'$id' => $wikiModalID,
'$title' => t('Revision Comparison'),
'$ok' => t('Revert'),
'$cancel' => t('Cancel')
));
$o .= replace_macros(get_markup_template('wiki.tpl'),array(
'$wikiheaderName' => $wikiheaderName,
@ -251,6 +259,7 @@ class Wiki extends \Zotlabs\Web\Controller {
'$deny_cid' => $x['deny_cid'],
'$deny_gid' => $x['deny_gid'],
'$bang' => $x['bang'],
'$mimeType' => $mimeType,
'$content' => $content,
'$renderedContent' => $renderedContent,
'$wikiName' => array('wikiName', t('Enter the name of your new wiki:'), '', ''),
@ -293,13 +302,21 @@ class Wiki extends \Zotlabs\Web\Controller {
// Render mardown-formatted text in HTML for preview
if((argc() > 2) && (argv(2) === 'preview')) {
$content = $_POST['content'];
$resource_id = $_POST['resource_id'];
require_once('library/markdown.php');
$content = wiki_bbcode($content);
$html = wiki_generate_toc(zidify_text(purify_html(Markdown($content))));
$resource_id = $_POST['resource_id'];
$w = wiki_get_wiki($resource_id);
$wikiURL = argv(0).'/'.argv(1).'/'.$w['urlName'];
$html = wiki_convert_links($html,$wikiURL);
$mimeType = $w['mimeType'];
if($mimeType == 'text/bbcode') {
$html = purify_html(bbcode($content));
}
else {
require_once('library/markdown.php');
$content = wiki_bbcode($content);
$html = wiki_generate_toc(zidify_text(purify_html(Markdown($content))));
$html = wiki_convert_links($html,$wikiURL);
}
json_return_and_die(array('html' => $html, 'success' => true));
}

View File

@ -303,7 +303,7 @@ function wiki_get_page_content($arr) {
}
}
// TODO: Check that the files are all text files
return array('content' => json_encode($content), 'message' => '', 'success' => true);
return array('content' => json_encode($content), 'mimeType' => $w['mimeType'], 'message' => '', 'success' => true);
}
}
@ -523,7 +523,6 @@ function wiki_convert_links($s, $wikiURL) {
* @return string
*/
function wiki_generate_toc($s) {
if (strpos($s,'[toc]') !== false) {
//$toc_md = wiki_toc($s); // Generate Markdown-formatted list prior to HTML render
$toc_md = '<ul id="wiki-toc"></ul>'; // use the available jQuery plugin http://ndabas.github.io/toc/

View File

@ -1,9 +1,14 @@
#ace-editor {
#ace-editor {
position: relative;
width: 100%;
height: 500px;
}
#editor {
width: 100%;
height: 500px;
}
.fade.in {
-webkit-transition: opacity 0.5s 0.5s ease;
-moz-transition: opacity 0.5s 0.5s ease;

View File

@ -42,7 +42,11 @@
</ul>
<div class="tab-content" id="wiki-page-tabs">
<div id="edit-pane" class="tab-pane fade">
{{if !$mimeType || $mimeType == 'text/markdown'}}
<div id="ace-editor"></div>
{{else}}
<textarea id="editor">{{$content}}</textarea>
{{/if}}
{{if $showCommitMsg}}
{{if $showPageControls}}
<div>
@ -50,7 +54,7 @@
<div class="input-group">
<input class="widget-input" name="{{$commitMsg.0}}" id="id_{{$commitMsg.0}}" type="text" value="{{$commitMsg.2}}"{{if $commitMsg.5}} {{$commitMsg.5}}{{/if}}>
<div class="input-group-btn">
<button id="save-page" type="button" class="btn btn-primary btn-sm disabled">Save</button>
<button id="save-page" type="button" class="btn btn-primary btn-sm{{if !$mimeType || $mimeType == 'text/markdown'}} disabled{{/if}}">Save</button>
</div>
</div>
</div>
@ -98,7 +102,7 @@
<script>
window.wiki_resource_id = '{{$resource_id}}';
window.wiki_page_name = '{{$page}}';
window.wiki_page_content = {{$content}};
window.wiki_page_content = {{if !$mimeType || $mimeType == 'text/markdown'}}{{$content}}{{else}}`{{$content}}`{{/if}};
window.wiki_page_commit = '{{$commit}}';
if (window.wiki_page_name === 'Home') {
@ -135,6 +139,7 @@
event.preventDefault();
});
{{if !$mimeType || $mimeType == 'text/markdown'}}
var editor = ace.edit("ace-editor");
editor.setOptions({
theme: "ace/theme/github",
@ -153,12 +158,26 @@
{{if !$showPageControls}}
editor.setReadOnly(true); // Disable editing if the viewer lacks edit permission
{{/if}}
{{else}}
window.editor = editor = $('#editor');
{{/if}}
$('#edit-pane-tab').click(function (ev) {
setTimeout(function() {window.editor.focus();}, 500); // Return the focus to the editor allowing immediate text entry
});
$('#wiki-get-preview').click(function (ev) {
$.post("wiki/{{$channel}}/preview", {content: editor.getValue(), resource_id: window.wiki_resource_id}, function (data) {
$.post("wiki/{{$channel}}/preview", {
{{if !$mimeType || $mimeType == 'text/markdown'}}
content: editor.getValue(),
{{else}}
content: editor.val(),
{{/if}}
resource_id: window.wiki_resource_id
},
function (data) {
if (data.success) {
$('#wiki-preview').html(data.html);
$("#wiki-toc").toc({content: "#wiki-preview", headings: "h1,h2,h3,h4"});
@ -207,7 +226,12 @@
ev.preventDefault();
return false;
}
var currentContent = editor.getValue();
{{if !$mimeType || $mimeType == 'text/markdown'}}
var currentContent = editor.getValue();
{{else}}
var currentContent = editor.val();
{{/if}}
if (window.wiki_page_content === currentContent) {
window.console.log('No edits to save.');
ev.preventDefault();
@ -224,8 +248,12 @@
window.console.log('Page saved successfully.');
window.wiki_page_content = currentContent;
$('#id_commitMsg').val(''); // Clear the commit message box
{{if !$mimeType || $mimeType == 'text/markdown'}}
$('#save-page').addClass('disabled'); // Disable the save button
window.editor.getSession().getUndoManager().markClean(); // Reset the undo history for the editor
{{/if}}
window.editor.focus(); // Return focus to the editor for continued editing
// $('#wiki-get-history').click();
} else {
@ -400,6 +428,7 @@
$('#new-wiki-button').hide();
{{/if}}
// using input event instead of change since it's called with some timeout
{{if !$mimeType || $mimeType == 'text/markdown'}}
window.editor.on("input", function() {
if(window.editor.getSession().getUndoManager().isClean()) {
$('#save-page').addClass('disabled');
@ -407,6 +436,10 @@
$('#save-page').removeClass('disabled');
}
});
{{else}}
window.editor.bbco_autocomplete('bbcode');
{{/if}}
});
</script>

View File

@ -9,8 +9,7 @@
<div id="new-wiki-form-wrapper" class="section-content-tools-wrapper">
<form id="new-wiki-form" action="wiki/{{$channel}}/create/wiki" method="post" class="acl-form" data-form_id="new-wiki-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
{{include file="field_input.tpl" field=$wikiName}}
{{* include file="field_select.tpl" field=$mimeType *}}
<input type="hidden" name="mimeType" value="text/markdown">
{{include file="field_select.tpl" field=$mimeType}}
{{include file="field_checkbox.tpl" field=$notify}}
<div>
<div class="btn-group pull-right">