8 Commits
Author SHA1 Message Date
ricky ec38414f06 Version Bump 2026-07-29 12:21:42 -04:00
ricky 06b7050d07 Fixed Issues Context Menu 2026-07-29 11:53:41 -04:00
ricky 1425758a53 removed log 2026-07-29 11:37:12 -04:00
ricky a2fff4a5cf Disabled contex menu patch & bumped required version 2026-07-29 11:29:07 -04:00
ricky e4846bf4ac Updated for redmine 7 2026-07-28 19:17:12 -04:00
ricky 60dfa7ae4a Added a setting to apply green/red colors to Start/Stop 2026-03-21 07:53:56 -04:00
ricky 490fbd476d Change link to be green to start and red to stop 2026-03-19 22:33:53 -04:00
Jens Kraemer 527f72f93b modern redmine + ruby versions 2025-12-04 10:20:10 +08:00
10 changed files with 63 additions and 38 deletions
+3 -4
View File
@@ -14,11 +14,10 @@ jobs:
strategy:
matrix:
redmine:
- '5.0'
- '5.1'
- '6.0'
- '6.1'
ruby:
- '3.0'
- '3.1'
- '3.3'
database:
- postgresql
- mysql
+5
View File
@@ -2,3 +2,8 @@
<label for="settings_default_activity"><%= t '.label_default_activity' %> </label>
<%= select_tag 'settings[default_activity]', options_from_collection_for_select( [['always_ask', t('.label_always_ask')], ['system', t('.label_system')]] + TimeEntryActivity.system.active.to_a.pluck(:id, :name), :first, :last, Stopwatch.settings['default_activity'] ) %>
</p>
<p>
<label for="settings_highlighted_links"><%= t '.label_highlighted_links' %> </label>
<%= check_box_tag 'settings[highlighted_links]', 1, Setting.plugin_stopwatch[:highlighted_links] %>
</p>
@@ -1,2 +1,3 @@
<%= javascript_include_tag "stopwatch", plugin: "stopwatch" %>
<%= stylesheet_link_tag "stopwatch", plugin: "stopwatch" %>
<%= stylesheet_link_tag "highlighted_links", plugin: "stopwatch" if Stopwatch.highlighted_links %>
+22
View File
@@ -0,0 +1,22 @@
a.stopwatch_issue_timer[href*="stop"] {
color: red;
}
a.stopwatch_issue_timer[href*="start"] {
color: limegreen;
}
/* Mobile only */
@media (max-width: 899px) {
a.stopwatch_issue_timer[href*="stop"] {
color: red;
background-color: #ffe5e5;
border: 1px solid red;
}
a.stopwatch_issue_timer[href*="start"] {
color: limegreen;
background-color: #eaffea;
border: 1px solid limegreen;
}
}
+1 -1
View File
@@ -1,3 +1,3 @@
tr.time-entry.running td.hours {
color: red;
}
}
+1
View File
@@ -5,6 +5,7 @@ en:
settings:
label_always_ask: 'Always ask'
label_default_activity: 'Default activity for "Start tracking"'
label_highlighted_links: "Color-code Start/Stop"
label_system: 'Use system default'
stopwatch_timers:
entries_list:
+3 -3
View File
@@ -3,9 +3,9 @@ Redmine::Plugin.register :stopwatch do
author 'Jens Krämer'
author_url 'https://jkraemer.net/'
description "Start/stop timer and quick access to today's time bookings for Redmine"
version '1.1.0'
version '2026.7.0'
requires_redmine version_or_higher: '6.0.0'
requires_redmine version_or_higher: '7.0.0'
settings default: {
'default_activity' => 'always_ask',
}, partial: 'stopwatch/settings'
@@ -18,4 +18,4 @@ Redmine::Plugin.register :stopwatch do
if: ->(*_){ User.current.logged? and User.current.allowed_to?(:log_time, nil, global: true) }
end
Stopwatch.setup
Stopwatch.setup
+4 -2
View File
@@ -2,14 +2,12 @@
module Stopwatch
def self.setup
Stopwatch::ContextMenusControllerPatch.apply
Stopwatch::IssuesControllerPatch.apply
::TimeEntry.prepend Stopwatch::TimeEntryPatch
::User.prepend Stopwatch::UserPatch
Stopwatch::Hooks # just load it
end
def self.settings
Setting.plugin_stopwatch
end
@@ -42,4 +40,8 @@ module Stopwatch
return activities.detect{ |a| a == default || a.parent == default }
end
end
def self.highlighted_links
settings[:highlighted_links]
end
end
@@ -1,28 +0,0 @@
# frozen_string_literal: true
module Stopwatch
module ContextMenusControllerPatch
module Helper
def watcher_link(objects, user)
link = +''
if params[:action] == 'issues' and
objects.one? and (issue = objects[0]).is_a?(Issue) and
User.current.allowed_to?(:log_time, issue.project)
t = Stopwatch::IssueTimer.new(issue: issue)
if t.running?
link << IssueLinks.new(issue, self).stop_timer
else
link << IssueLinks.new(issue, self).start_timer
end
end
super + content_tag(:li, link.html_safe)
end
end
def self.apply
ContextMenusController.class_eval do
helper Helper
end
end
end
end
+23
View File
@@ -6,5 +6,28 @@ module Stopwatch
partial: 'stopwatch/hooks/layouts_base_body_bottom'
render_on :view_time_entries_context_menu_start,
partial: 'stopwatch/hooks/time_entries_context_menu_start'
# This hook is natively provided by Redmine 7's issues context menu view
def view_issues_context_menu_start(context = {})
issues = context[:issues]
# We only append our element if exactly one issue is highlighted
return '' unless issues&.one?
issue = issues.first
return '' unless User.current.allowed_to?(:log_time, issue.project)
# 'controller' in this context gives access to view helper context
view = context[:controller].view_context
timer = Stopwatch::IssueTimer.new(issue: issue)
link = if timer.running?
IssueLinks.new(issue, view).stop_timer
else
IssueLinks.new(issue, view).start_timer
end
view.content_tag(:li, link.html_safe)
end
end
end