Skip to content

Commit

Permalink
task #3: No highlight in view-source mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Dominik Chmaj committed Sep 16, 2015
1 parent d8e8191 commit 1473167
Show file tree
Hide file tree
Showing 12 changed files with 191 additions and 71 deletions.
94 changes: 94 additions & 0 deletions app/models/code_theme_user_setting.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@

class CodeThemeUserSetting < ActiveRecord::Base
unloadable
belongs_to :user
validates_presence_of :user

DEFAULT_CODE_THEME = '__default_code_theme__'
CODE_THEMES = {
'agate' => 'agate',
'androidstudio' => 'androidstudio',
'arta' => 'arta',
'ascetic' => 'ascetic',
'atelier cave (light)' => 'atelier-cave.light',
'atelier cave (dark)' => 'atelier-cave.dark',
'atelier dune (light)' => 'atelier-dune.light',
'atelier dune (dark)' => 'atelier-dune.dark',
'atelier estuary (light)' => 'atelier-estuary.light',
'atelier estuary (dark)' => 'atelier-estuary.dark',
'atelier forest (light)' => 'atelier-forest.light',
'atelier forest (dark)' => 'atelier-forest.dark',
'atelier heath (light)' => 'atelier-heath.light',
'atelier heath (dark)' => 'atelier-heath.dark',
'atelier lakeside (light)' => 'atelier-lakeside.light',
'atelier lakeside (dark)' => 'atelier-lakeside.dark',
'atelier plateau (light)' => 'atelier-plateau.light',
'atelier plateau (dark)' => 'atelier-plateau.dark',
'atelier savanna (light)' => 'atelier-savanna.light',
'atelier savanna (dark)' => 'atelier-savanna.dark',
'atelier seaside (light)' => 'atelier-seaside.light',
'atelier seaside (dark)' => 'atelier-seaside.dark',
'atelier sulphurpool (light)' => 'atelier-sulphurpool.light',
'atelier sulphurpool (dark)' => 'atelier-sulphurpool.dark',
'brown paper' => 'brown_paper',
'codepen embed' => 'codepen-embed',
'color brewer' => 'color-brewer',
'dark' => 'dark',
'darkula' => 'darkula',
'default' => 'default',
'docco' => 'docco',
'far' => 'far',
'foundation' => 'foundation',
'github' => 'github',
'github gist' => 'github-gist',
'googlecode' => 'googlecode',
'grayscale' => 'grayscale',
'hopscotch' => 'hopscotch',
'hybrid' => 'hybrid',
'idea' => 'idea',
'ir_black' => 'ir_black',
'kimbie (light)' => 'kimbie.light',
'kimbie (dark)' => 'kimbie.dark',
'magula' => 'magula',
'mono-blue' => 'mono-blue',
'monokai' => 'monokai',
'monokai sublime' => 'monokai_sublime',
'obsidian' => 'obsidian',
'paraiso (light)' => 'paraiso.light',
'paraiso (dark)' => 'paraiso.dark',
'pojoaque' => 'pojoaque',
'pojoaque.jpg' => 'pojoaque.jpg',
'railscasts' => 'railscasts',
'rainbow' => 'rainbow',
'school_book' => 'school_book',
'solarized (light)' => 'solarized_light',
'solarized (dark)' => 'solarized_dark',
'sunburst' => 'sunburst',
'tomorrow night' => 'tomorrow-night',
'tomorrow night (blue)' => 'tomorrow-night-blue',
'tomorrow night (bright)' => 'tomorrow-night-bright',
'tomorrow night (eighties)' => 'tomorrow-night-eighties',
'tomorrow' => 'tomorrow',
'vs' => 'vs',
'xcode' => 'xcode',
'zenburn' => 'zenburn'
}

def self.find_code_theme_by_user_id(user_id)
CodeThemeUserSetting.find(:first, :conditions => ['user_id = ?', user_id])
end

def self.find_or_create_code_theme_by_user_id(user_id)
code_theme = find_code_theme_by_user_id(user_id)
unless code_theme
code_theme = CodeThemeUserSetting.new
code_theme.user_id = user_id
end
return code_theme
end

def code_theme_name
return '' if code_theme == DEFAULT_CODE_THEME
code_theme
end
end
19 changes: 19 additions & 0 deletions app/views/settings/_code_theme_form.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<fieldset class="box <%= 'hidden' if Setting.plugin_redmine_highlightjs[:allow_redefine].nil? %>">

<legend><%=h l(:code_theme_title) %></legend>
<div class="tabular">
<p>
<label><%=h l(:code_theme) %></label>
<%=select_tag("pref[code_theme]", options_for_select(
{
l(:label_default) => CodeThemeUserSetting::DEFAULT_CODE_THEME
}.merge(CodeThemeUserSetting::CODE_THEMES),
user.preference.code_theme))
%>
</p>
<p>
<em><span class="helpLink"> <%= l(:try_it_link) %> <a href="https://highlightjs.org/static/demo/" target="_blank">https://highlightjs.org/static/demo/</a> </span></em>
</p>
</div>

</fieldset>
73 changes: 5 additions & 68 deletions app/views/settings/_highlightjs_settings.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -3,77 +3,14 @@
<tr>
<th><label for="settings_theme"><%= l(:highlighting_theme) %></label></th>
<td><%= select_tag('settings[theme]',
options_for_select({
'agate' => 'agate',
'androidstudio' => 'androidstudio',
'arta' => 'arta',
'ascetic' => 'ascetic',
'atelier cave (light)' => 'atelier-cave.light',
'atelier cave (dark)' => 'atelier-cave.dark',
'atelier dune (light)' => 'atelier-dune.light',
'atelier dune (dark)' => 'atelier-dune.dark',
'atelier estuary (light)' => 'atelier-estuary.light',
'atelier estuary (dark)' => 'atelier-estuary.dark',
'atelier forest (light)' => 'atelier-forest.light',
'atelier forest (dark)' => 'atelier-forest.dark',
'atelier heath (light)' => 'atelier-heath.light',
'atelier heath (dark)' => 'atelier-heath.dark',
'atelier lakeside (light)' => 'atelier-lakeside.light',
'atelier lakeside (dark)' => 'atelier-lakeside.dark',
'atelier plateau (light)' => 'atelier-plateau.light',
'atelier plateau (dark)' => 'atelier-plateau.dark',
'atelier savanna (light)' => 'atelier-savanna.light',
'atelier savanna (dark)' => 'atelier-savanna.dark',
'atelier seaside (light)' => 'atelier-seaside.light',
'atelier seaside (dark)' => 'atelier-seaside.dark',
'atelier sulphurpool (light)' => 'atelier-sulphurpool.light',
'atelier sulphurpool (dark)' => 'atelier-sulphurpool.dark',
'brown paper' => 'brown_paper',
'codepen embed' => 'codepen-embed',
'color brewer' => 'color-brewer',
'dark' => 'dark',
'darkula' => 'darkula',
'default' => 'default',
'docco' => 'docco',
'far' => 'far',
'foundation' => 'foundation',
'github' => 'github',
'github gist' => 'github-gist',
'googlecode' => 'googlecode',
'grayscale' => 'grayscale',
'hopscotch' => 'hopscotch',
'hybrid' => 'hybrid',
'idea' => 'idea',
'ir_black' => 'ir_black',
'kimbie (light)' => 'kimbie.light',
'kimbie (dark)' => 'kimbie.dark',
'magula' => 'magula',
'mono-blue' => 'mono-blue',
'monokai' => 'monokai',
'monokai sublime' => 'monokai_sublime',
'obsidian' => 'obsidian',
'paraiso (light)' => 'paraiso.light',
'paraiso (dark)' => 'paraiso.dark',
'pojoaque' => 'pojoaque',
'pojoaque.jpg' => 'pojoaque.jpg',
'railscasts' => 'railscasts',
'rainbow' => 'rainbow',
'school_book' => 'school_book',
'solarized (light)' => 'solarized_light',
'solarized (dark)' => 'solarized_dark',
'sunburst' => 'sunburst',
'tomorrow night' => 'tomorrow-night',
'tomorrow night (blue)' => 'tomorrow-night-blue',
'tomorrow night (bright)' => 'tomorrow-night-bright',
'tomorrow night (eighties)' => 'tomorrow-night-eighties',
'tomorrow' => 'tomorrow',
'vs' => 'vs',
'xcode' => 'xcode',
'zenburn' => 'zenburn'
}, settings['theme'])) %>
options_for_select(CodeThemeUserSetting::CODE_THEMES, settings['theme'])) %>
<span class="helpLink"> <%= l(:try_it_link) %> <a href="https://highlightjs.org/static/demo/" target="_blank">https://highlightjs.org/static/demo/</a> </span>
</td>
</tr>
<tr>
<th><label for="settings_allow_redefine"><%= l(:allow_redefine) %></label></th>
<td><%=check_box_tag 'settings[allow_redefine]', 'yes', settings['allow_redefine'] == 'yes' %></td>
</tr>
</tbody>
</table>

Expand Down
4 changes: 4 additions & 0 deletions assets/stylesheets/fixes.css
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,7 @@ pre code.nohighlight {
padding: 10px !important;
display: block !important;
}

fieldset.hidden {
display: none !important;
}
4 changes: 4 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@ en:
supported_languages: Language Markups supported in this build
highlighting_theme: Highlight using theme
try_it_link: "Try theme with online demo:"
code_theme: Highlight Code Theme
code_theme_title: Podświetlenie bloków kodu
allow_redefine: Allow to redefine by user

5 changes: 4 additions & 1 deletion config/locales/pl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@ pl:
supported_languages: Definicje wspierane w tej wersji biblioteki
highlighting_theme: Schemat kolorów
try_it_link: "Wybierz korzystając z demo online:"

code_theme: Schemat podświetlania
code_theme_title: Podświetlenie bloków kodu
allow_redefine: Pozwalaj zmieniać użytkownikom

13 changes: 13 additions & 0 deletions db/migrate/0002_create_code_theme_user_settings.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class CreateCodeThemeUserSettings < ActiveRecord::Migration
def self.up
create_table :code_theme_user_settings do |t|
t.column :user_id, :integer
t.column :code_theme, :string
t.column :updated_at, :timestamp
end
end

def self.down
drop_table :code_theme_user_settings
end
end
13 changes: 12 additions & 1 deletion init.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
require 'redmine'
require 'code_theme_my_account_hooks'
require 'code_theme_user_patch'
require 'code_theme_themes_patch'

require_dependency 'hooks/view_highlighted_hook'

Expand All @@ -8,11 +11,19 @@
url 'https://github.com/dominch/redmine_highlightjs'
author_url 'http://dominik.net.pl/'
description 'Adds much better syntax highlighting with autodetection'
version '1.0.1'
version '1.0.2'
settings :default => {'theme' => 'monokai_sublime'}, :partial => 'settings/highlightjs_settings'
requires_redmine :version_or_higher => '2.0.0'
end

ActionDispatch::Callbacks.to_prepare do
require_dependency 'highlightjs_highlighting'
Redmine::SyntaxHighlighting.highlighter = 'Highlightjs'
end

Rails.configuration.to_prepare do
require_dependency 'user_preference'
unless UserPreference.included_modules.include? CodeThemeUserPreferencePatch
UserPreference.send(:include, CodeThemeUserPreferencePatch)
end
end
3 changes: 3 additions & 0 deletions lib/code_theme_my_account_hooks.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class CodeThemeMyAccountHooks < Redmine::Hook::ViewListener
render_on :view_my_account, :partial => 'settings/code_theme_form', :multipart => true
end
8 changes: 8 additions & 0 deletions lib/code_theme_themes_patch.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module ApplicationHelper
def get_code_theme
setting = CodeThemeUserSetting.find_code_theme_by_user_id(User.current.id)
return Setting.ui_theme unless setting
return Setting.ui_theme if setting.code_theme == CodeThemeUserSetting::DEFAULT_CODE_THEME
return setting.code_theme_name
end
end
23 changes: 23 additions & 0 deletions lib/code_theme_user_patch.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module CodeThemeUserPreferencePatch
def self.included(base)
base.send(:include, UserPreferenceInstanceMethodsForCodeTheme)
base.class_eval do
unloadable
end
end
end

module UserPreferenceInstanceMethodsForCodeTheme

def code_theme
code_theme_setting = CodeThemeUserSetting.find_code_theme_by_user_id(user.id)
return nil unless code_theme_setting
code_theme_setting.code_theme
end

def code_theme=(name)
code_theme_setting = CodeThemeUserSetting.find_or_create_code_theme_by_user_id(user.id)
code_theme_setting.code_theme = name
code_theme_setting.save!
end
end
3 changes: 2 additions & 1 deletion lib/hooks/view_highlighted_hook.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ def view_layouts_base_html_head(context={})
if SupportedBrowsers.detect { |browser| user_agent >= browser }
Rails.logger.info "redmine_highlightjs2: supported browser: #{user_agent}"
Redmine::SyntaxHighlighting.highlighter = 'Highlightjs'
setting = Setting.plugin_redmine_highlightjs[:theme]
setting = User.current.preference.code_theme if !Setting.plugin_redmine_highlightjs[:allow_redefine].nil?
setting = Setting.plugin_redmine_highlightjs[:theme] if setting.nil? || setting.empty? || setting == CodeThemeUserSetting::DEFAULT_CODE_THEME
setting = 'monokai_sublime' if setting.nil? || setting.empty?
return stylesheet_link_tag("themes/#{setting}.css", :plugin => "redmine_highlightjs", :media => "screen") +
stylesheet_link_tag("fixes.css", :plugin => "redmine_highlightjs", :media => "screen") +
Expand Down

0 comments on commit 1473167

Please sign in to comment.