mirror of
https://github.com/redmine/redmine.git
synced 2025-11-05 04:45:57 +01:00
Make languages in Highlighted code button in toolbar customizable (#32528).
Patch by Mizuki ISHIKAWA. git-svn-id: http://svn.redmine.org/redmine/trunk@19429 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -35,9 +35,11 @@ class UserPreference < ActiveRecord::Base
|
||||
'no_self_notified',
|
||||
'textarea_font',
|
||||
'recently_used_projects',
|
||||
'history_default_tab')
|
||||
'history_default_tab',
|
||||
'toolbar_language_options')
|
||||
|
||||
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional']
|
||||
DEFAULT_TOOLBAR_LANGUAGE_OPTIONS = %w[c cpp csharp css diff go groovy html java javascript objc perl php python r ruby sass scala shell sql swift xml yaml]
|
||||
|
||||
def initialize(attributes=nil, *args)
|
||||
super
|
||||
@@ -98,6 +100,15 @@ class UserPreference < ActiveRecord::Base
|
||||
def history_default_tab; self[:history_default_tab]; end
|
||||
def history_default_tab=(value); self[:history_default_tab]=value; end
|
||||
|
||||
def toolbar_language_options
|
||||
self[:toolbar_language_options].presence || DEFAULT_TOOLBAR_LANGUAGE_OPTIONS.join(',')
|
||||
end
|
||||
|
||||
def toolbar_language_options=(value)
|
||||
languages = value.to_s.delete(' ').split(',').select{|lang| Redmine::SyntaxHighlighting.language_supported?(lang) }.compact
|
||||
self[:toolbar_language_options] = languages.join(',')
|
||||
end
|
||||
|
||||
# Returns the names of groups that are displayed on user's page
|
||||
# Example:
|
||||
# preferences.my_page_groups
|
||||
|
||||
@@ -6,4 +6,5 @@
|
||||
<p><%= pref_fields.select :textarea_font, textarea_font_options %></p>
|
||||
<p><%= pref_fields.text_field :recently_used_projects, :size => 2 %></p>
|
||||
<p><%= pref_fields.select :history_default_tab, history_default_tab_options %></p>
|
||||
<p><%= pref_fields.text_area :toolbar_language_options, :rows => 4 %></p>
|
||||
<% end %>
|
||||
|
||||
@@ -389,6 +389,7 @@ en:
|
||||
field_recently_used_projects: Number of recently used projects in jump box
|
||||
field_history_default_tab: Issue's history default tab
|
||||
field_unique_id: Unique ID
|
||||
field_toolbar_language_options: Code highlighting toolbar languages
|
||||
|
||||
setting_app_title: Application title
|
||||
setting_welcome_text: Welcome text
|
||||
|
||||
@@ -33,11 +33,13 @@ module Redmine
|
||||
|
||||
def heads_for_wiki_formatter
|
||||
unless @heads_for_wiki_formatter_included
|
||||
toolbar_language_options = User.current && User.current.pref.toolbar_language_options
|
||||
content_for :header_tags do
|
||||
javascript_include_tag('jstoolbar/jstoolbar') +
|
||||
javascript_include_tag('jstoolbar/markdown') +
|
||||
javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
|
||||
javascript_tag("var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};") +
|
||||
javascript_tag("var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};" +
|
||||
"var userHlLanguages = #{(toolbar_language_options.nil? ? UserPreference::DEFAULT_TOOLBAR_LANGUAGE_OPTIONS : toolbar_language_options.split(',')).to_json};") +
|
||||
stylesheet_link_tag('jstoolbar')
|
||||
end
|
||||
@heads_for_wiki_formatter_included = true
|
||||
|
||||
@@ -34,11 +34,13 @@ module Redmine
|
||||
|
||||
def heads_for_wiki_formatter
|
||||
unless @heads_for_wiki_formatter_included
|
||||
toolbar_language_options = User.current && User.current.pref.toolbar_language_options
|
||||
content_for :header_tags do
|
||||
javascript_include_tag('jstoolbar/jstoolbar') +
|
||||
javascript_include_tag('jstoolbar/textile') +
|
||||
javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
|
||||
javascript_tag("var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};") +
|
||||
javascript_tag("var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};" +
|
||||
"var userHlLanguages = #{(toolbar_language_options.nil? ? UserPreference::DEFAULT_TOOLBAR_LANGUAGE_OPTIONS : toolbar_language_options.split(',')).to_json};") +
|
||||
stylesheet_link_tag('jstoolbar')
|
||||
end
|
||||
@heads_for_wiki_formatter_included = true
|
||||
|
||||
@@ -453,7 +453,7 @@ jsToolBar.prototype.resizeDragStop = function(event) {
|
||||
|
||||
/* Code highlighting menu */
|
||||
jsToolBar.prototype.precodeMenu = function(fn){
|
||||
var hlLanguages = ["c", "cpp", "csharp", "css", "diff", "go", "groovy", "html", "java", "javascript", "objc", "perl", "php", "python", "r", "ruby", "sass", "scala", "shell", "sql", "swift", "xml", "yaml"];
|
||||
var hlLanguages = window.userHlLanguages;
|
||||
var menu = $("<ul style='position:absolute;'></ul>");
|
||||
for (var i = 0; i < hlLanguages.length; i++) {
|
||||
$("<li></li>").text(hlLanguages[i]).appendTo(menu).mousedown(function(){
|
||||
|
||||
@@ -66,6 +66,7 @@ class LayoutTest < Redmine::IntegrationTest
|
||||
|
||||
get '/projects/ecookbook/issues/new'
|
||||
assert_select 'head script[src^=?]', '/javascripts/jstoolbar/jstoolbar.js?'
|
||||
assert_include "var userHlLanguages = #{UserPreference::DEFAULT_TOOLBAR_LANGUAGE_OPTIONS.to_json};", response.body
|
||||
end
|
||||
|
||||
def test_calendar_header_tags
|
||||
|
||||
@@ -110,4 +110,11 @@ class UserPreferenceTest < ActiveSupport::TestCase
|
||||
up.save!
|
||||
assert_equal ['documents'], up.my_page_settings.keys
|
||||
end
|
||||
|
||||
def test_toolbar_language_options_setter_should_remove_except_supported_languages
|
||||
up = User.find(2).pref
|
||||
# bar is not a supported language
|
||||
up.toolbar_language_options = 'ruby,cpp,bar,c'
|
||||
assert_equal 'ruby,cpp,c', up.toolbar_language_options
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user