From 32cf6dc59dc278bcec1e394b2703cfc4589d29b9 Mon Sep 17 00:00:00 2001 From: Jan Schulz-Hofen Date: Wed, 24 Aug 2016 12:57:37 +0200 Subject: [PATCH] Introduce user preference to use monospaced/variable fonts in textareas --- app/models/user_preference.rb | 6 +++++- app/views/users/_preferences.html.erb | 1 + config/locales/de.yml | 1 + config/locales/en.yml | 1 + lib/redmine/wiki_formatting.rb | 1 + lib/redmine/wiki_formatting/markdown/helper.rb | 4 +++- lib/redmine/wiki_formatting/textile/helper.rb | 4 +++- public/stylesheets/application.css | 3 ++- test/functional/projects_controller_test.rb | 20 ++++++++++++++++++++ test/functional/users_controller_test.rb | 4 +++- 10 files changed, 40 insertions(+), 5 deletions(-) diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb index 52d120c..f241f13 100644 --- a/app/models/user_preference.rb +++ b/app/models/user_preference.rb @@ -29,7 +29,8 @@ class UserPreference < ActiveRecord::Base 'time_zone', 'comments_sorting', 'warn_on_leaving_unsaved', - 'no_self_notified' + 'no_self_notified', + 'monospace_textareas' def initialize(attributes=nil, *args) super @@ -76,4 +77,7 @@ class UserPreference < ActiveRecord::Base def activity_scope; Array(self[:activity_scope]) ; end def activity_scope=(value); self[:activity_scope]=value ; end + + def monospace_textareas; (self[:monospace_textareas] == true || self[:monospace_textareas] == '1'); end + def monospace_textareas=(value); self[:monospace_textareas]=value; end end diff --git a/app/views/users/_preferences.html.erb b/app/views/users/_preferences.html.erb index fb19bb3..9588faa 100644 --- a/app/views/users/_preferences.html.erb +++ b/app/views/users/_preferences.html.erb @@ -3,4 +3,5 @@

<%= pref_fields.time_zone_select :time_zone, nil, :include_blank => true %>

<%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %>

<%= pref_fields.check_box :warn_on_leaving_unsaved %>

+

<%= pref_fields.check_box :monospace_textareas %>

<% end %> diff --git a/config/locales/de.yml b/config/locales/de.yml index 7dc2328..d88c0ef 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -389,6 +389,7 @@ de: field_version: Version field_visible: Sichtbar field_warn_on_leaving_unsaved: Vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen + field_monospace_textareas: "Nichtproportionale Schrift für Textfelder verwenden" field_watcher: Beobachter general_csv_decimal_separator: ',' diff --git a/config/locales/en.yml b/config/locales/en.yml index a6501c3..538f355 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -340,6 +340,7 @@ en: field_text: Text field field_visible: Visible field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text" + field_monospace_textareas: "Use monospaced font for text areas" field_issues_visibility: Issues visibility field_is_private: Private field_commit_logs_encoding: Commit messages encoding diff --git a/lib/redmine/wiki_formatting.rb b/lib/redmine/wiki_formatting.rb index 17348d1..bc8e54f 100644 --- a/lib/redmine/wiki_formatting.rb +++ b/lib/redmine/wiki_formatting.rb @@ -186,6 +186,7 @@ module Redmine module Helper def wikitoolbar_for(field_id) + javascript_tag("$(document).ready(function(){$('##{field_id}').addClass('monospace');});") if User.current.pref.monospace_textareas end def heads_for_wiki_formatter diff --git a/lib/redmine/wiki_formatting/markdown/helper.rb b/lib/redmine/wiki_formatting/markdown/helper.rb index f864988..16727d0 100644 --- a/lib/redmine/wiki_formatting/markdown/helper.rb +++ b/lib/redmine/wiki_formatting/markdown/helper.rb @@ -22,7 +22,9 @@ module Redmine def wikitoolbar_for(field_id) heads_for_wiki_formatter url = "#{Redmine::Utils.relative_url_root}/help/#{current_language.to_s.downcase}/wiki_syntax_markdown.html" - javascript_tag("var wikiToolbar = new jsToolBar(document.getElementById('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript url}'); wikiToolbar.draw();") + t = javascript_tag("var wikiToolbar = new jsToolBar(document.getElementById('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript url}'); wikiToolbar.draw();") + t << javascript_tag("$(document).ready(function(){$('##{field_id}').addClass('monospace');});") if User.current.pref.monospace_textareas + t end def initial_page_content(page) diff --git a/lib/redmine/wiki_formatting/textile/helper.rb b/lib/redmine/wiki_formatting/textile/helper.rb index eedbe6d..ff9b50f 100644 --- a/lib/redmine/wiki_formatting/textile/helper.rb +++ b/lib/redmine/wiki_formatting/textile/helper.rb @@ -23,7 +23,9 @@ module Redmine heads_for_wiki_formatter # Is there a simple way to link to a public resource? url = "#{Redmine::Utils.relative_url_root}/help/#{current_language.to_s.downcase}/wiki_syntax_textile.html" - javascript_tag("var wikiToolbar = new jsToolBar(document.getElementById('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript url}'); wikiToolbar.draw();") + t = javascript_tag("var wikiToolbar = new jsToolBar(document.getElementById('#{field_id}')); wikiToolbar.setHelpLink('#{escape_javascript url}'); wikiToolbar.draw();") + t << javascript_tag("$(document).ready(function(){$('##{field_id}').addClass('monospace');});") if User.current.pref.monospace_textareas + t end def initial_page_content(page) diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index da89fe2..875c3ab 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -378,7 +378,8 @@ hr { width: 100%; height: 1px; background: #ccc; border: 0;} blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;} blockquote blockquote { margin-left: 0;} abbr, span.field-description[title] { border-bottom: 1px dotted #aaa; cursor: help; } -textarea.wiki-edit {width:99%; resize:vertical;} +textarea.wiki-edit {width:99%; resize:vertical; font-family: Verdana, sans-serif; font-size: 12px;} +textarea.wiki-edit.monospace {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;} li p {margin-top: 0;} div.issue {background:#ffffdd; padding:6px; margin-bottom:6px; border: 1px solid #d7d7d7; border-radius:3px;} p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;} diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index 2a2cbbd..46c9487 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -672,4 +672,24 @@ class ProjectsControllerTest < Redmine::ControllerTest get :show, :id => 1 assert_select 'body.project-ecookbook' end + + def test_monospace_textareas_turned_on + user = User.find(1) + user.pref.monospace_textareas = '1' + user.pref.save! + @request.session[:user_id] = 1 + + get :settings, :id => 1 + assert_select 'script', :text => %r{addClass\('monospace'\)} + end + + def test_monospace_textareas_turned_off + user = User.find(1) + user.pref.monospace_textareas = '0' + user.pref.save! + @request.session[:user_id] = 1 + + get :settings, :id => 1 + assert_select 'script', :text => %r{addClass\('monospace'\)}, :count => 0 + end end diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb index 78a8b6c..18b450f 100644 --- a/test/functional/users_controller_test.rb +++ b/test/functional/users_controller_test.rb @@ -202,7 +202,8 @@ class UsersControllerTest < Redmine::ControllerTest 'hide_mail' => '1', 'time_zone' => 'Paris', 'comments_sorting' => 'desc', - 'warn_on_leaving_unsaved' => '0' + 'warn_on_leaving_unsaved' => '0', + 'monospace_textareas' => '1' } } end @@ -212,6 +213,7 @@ class UsersControllerTest < Redmine::ControllerTest assert_equal 'Paris', user.pref.time_zone assert_equal 'desc', user.pref[:comments_sorting] assert_equal '0', user.pref[:warn_on_leaving_unsaved] + assert_equal true, user.pref.monospace_textareas end def test_create_with_generate_password_should_email_the_password -- 2.7.2