module WikiFormatting
module CommonMark
module Helper
- include Redmine::WikiFormatting::Markdown::Helper
-
def wikitoolbar_for(field_id, preview_url = preview_text_path)
heads_for_wiki_formatter
help_file = "/help/#{current_language.to_s.downcase}/wiki_syntax_common_mark.html"
)
end
- # removes the 'underline' icon from the markdown toolbar since there
- # is no such thing in CommonMark
+ def initial_page_content(page)
+ "# #{@page.pretty_title}"
+ end
+
def heads_for_wiki_formatter
- unless @common_mark_heads_for_wiki_formatter_included
- super
+ unless @heads_for_wiki_formatter_included
+ toolbar_language_options = User.current && User.current.pref.toolbar_language_options
+ lang =
+ if toolbar_language_options.nil?
+ UserPreference::DEFAULT_TOOLBAR_LANGUAGE_OPTIONS
+ else
+ toolbar_language_options.split(',')
+ end
content_for :header_tags do
- javascript_tag(%[delete jsToolBar.prototype.elements.ins;])
+ javascript_include_tag('jstoolbar/jstoolbar') +
+ javascript_include_tag('jstoolbar/common_mark') +
+ javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
+ javascript_tag(
+ "var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};" \
+ "var userHlLanguages = #{lang.to_json};"
+ ) +
+ stylesheet_link_tag('jstoolbar')
end
- @common_mark_heads_for_wiki_formatter_included = true
+ @heads_for_wiki_formatter_included = true
end
end
end
--- /dev/null
+/* ***** BEGIN LICENSE BLOCK *****
+ * This file is part of DotClear.
+ * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All
+ * rights reserved.
+ *
+ * DotClear is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DotClear is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DotClear; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ***** END LICENSE BLOCK *****
+*/
+
+/* Modified by JP LANG for markdown formatting */
+
+// strong
+jsToolBar.prototype.elements.strong = {
+ type: 'button',
+ title: 'Strong',
+ shortcut: 'b',
+ fn: {
+ wiki: function() { this.singleTag('**') }
+ }
+}
+
+// em
+jsToolBar.prototype.elements.em = {
+ type: 'button',
+ title: 'Italic',
+ shortcut: 'i',
+ fn: {
+ wiki: function() { this.singleTag("*") }
+ }
+}
+
+// del
+jsToolBar.prototype.elements.del = {
+ type: 'button',
+ title: 'Deleted',
+ fn: {
+ wiki: function() { this.singleTag('~~') }
+ }
+}
+
+// code
+jsToolBar.prototype.elements.code = {
+ type: 'button',
+ title: 'Code',
+ fn: {
+ wiki: function() { this.singleTag('`') }
+ }
+}
+
+// spacer
+jsToolBar.prototype.elements.space1 = {type: 'space'}
+
+// headings
+jsToolBar.prototype.elements.h1 = {
+ type: 'button',
+ title: 'Heading 1',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('# ', '',function(str) {
+ str = str.replace(/^#+\s+/, '')
+ return str;
+ });
+ }
+ }
+}
+jsToolBar.prototype.elements.h2 = {
+ type: 'button',
+ title: 'Heading 2',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('## ', '',function(str) {
+ str = str.replace(/^#+\s+/, '')
+ return str;
+ });
+ }
+ }
+}
+jsToolBar.prototype.elements.h3 = {
+ type: 'button',
+ title: 'Heading 3',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('### ', '',function(str) {
+ str = str.replace(/^#+\s+/, '')
+ return str;
+ });
+ }
+ }
+}
+
+// spacer
+jsToolBar.prototype.elements.space2 = {type: 'space'}
+
+// ul
+jsToolBar.prototype.elements.ul = {
+ type: 'button',
+ title: 'Unordered list',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('','',function(str) {
+ str = str.replace(/\r/g,'');
+ return str.replace(/(\n|^)[#-]?\s*/g,"$1* ");
+ });
+ }
+ }
+}
+
+// ol
+jsToolBar.prototype.elements.ol = {
+ type: 'button',
+ title: 'Ordered list',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('','',function(str) {
+ str = str.replace(/\r/g,'');
+ return str.replace(/(\n|^)[*-]?\s*/g,"$11. ");
+ });
+ }
+ }
+}
+
+// spacer
+jsToolBar.prototype.elements.space3 = {type: 'space'}
+
+// bq
+jsToolBar.prototype.elements.bq = {
+ type: 'button',
+ title: 'Quote',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('','',function(str) {
+ str = str.replace(/\r/g,'');
+ return str.replace(/(\n|^)( *)([^\n]*)/g,"$1> $2$3");
+ });
+ }
+ }
+}
+
+// unbq
+jsToolBar.prototype.elements.unbq = {
+ type: 'button',
+ title: 'Unquote',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('','',function(str) {
+ str = str.replace(/\r/g,'');
+ return str.replace(/(\n|^) *(> ?)?( *)([^\n]*)/g,"$1$3$4");
+ });
+ }
+ }
+}
+
+// table
+jsToolBar.prototype.elements.table = {
+ type: 'button',
+ title: 'Table',
+ fn: {
+ wiki: function() {
+ var This = this;
+ this.tableMenu(function(cols, rowCount){
+ This.encloseLineSelection(
+ '|'+cols.join(' |')+' |\n' + // header
+ Array(cols.length+1).join('|--')+'|\n' + // second line
+ Array(rowCount+1).join(Array(cols.length+1).join('| ')+'|\n') // cells
+ );
+ });
+ }
+ }
+}
+
+// pre
+jsToolBar.prototype.elements.pre = {
+ type: 'button',
+ title: 'Preformatted text',
+ fn: {
+ wiki: function() { this.encloseLineSelection('```\n', '\n```') }
+ }
+}
+
+// Code highlighting
+jsToolBar.prototype.elements.precode = {
+ type: 'button',
+ title: 'Highlighted code',
+ fn: {
+ wiki: function() {
+ var This = this;
+ this.precodeMenu(function(lang){
+ This.encloseLineSelection('``` ' + lang + '\n', '\n```\n');
+ });
+ }
+ }
+}
+
+// spacer
+jsToolBar.prototype.elements.space4 = {type: 'space'}
+
+// wiki page
+jsToolBar.prototype.elements.link = {
+ type: 'button',
+ title: 'Wiki link',
+ fn: {
+ wiki: function() { this.encloseSelection("[[", "]]") }
+ }
+}
+// image
+jsToolBar.prototype.elements.img = {
+ type: 'button',
+ title: 'Image',
+ fn: {
+ wiki: function() { this.encloseSelection("![](", ")") }
+ }
+}
+
+// spacer
+jsToolBar.prototype.elements.space5 = {type: 'space'}
+// help
+jsToolBar.prototype.elements.help = {
+ type: 'button',
+ title: 'Help',
+ fn: {
+ wiki: function() { window.open(this.help_link, '', 'resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes') }
+ }
+}