mirror of
https://github.com/meineerde/redmine.git
synced 2026-01-31 19:47:14 +00:00
Makes Markdown and CommonMark formatters independent of each other (#32424).
git-svn-id: http://svn.redmine.org/redmine/trunk@21345 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
c245f54e71
commit
2140b7c5a5
@ -21,8 +21,6 @@ module Redmine
|
||||
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"
|
||||
@ -40,15 +38,30 @@ module Redmine
|
||||
)
|
||||
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
|
||||
|
||||
236
public/javascripts/jstoolbar/common_mark.js
Normal file
236
public/javascripts/jstoolbar/common_mark.js
Normal file
@ -0,0 +1,236 @@
|
||||
/* ***** 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') }
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user