Revision 1450:020bc7fe7a2a
| config/routes.rb | ||
|---|---|---|
| 336 | 336 |
|
| 337 | 337 |
match 'sys/projects', :to => 'sys#projects', :via => :get |
| 338 | 338 |
match 'sys/projects/:id/repository', :to => 'sys#create_project_repository', :via => :post |
| 339 |
match 'sys/projects/:id/repository_cache.:format', :controller => 'sys', :action => 'clear_repository_cache', :conditions => { :method => :post }
|
|
| 339 | 340 |
match 'sys/projects/:id/embedded.:format', :controller => 'sys', :action => 'set_embedded_active', :conditions => { :method => :post }
|
| 340 | 341 |
match 'sys/fetch_changesets', :to => 'sys#fetch_changesets', :via => :get |
| 341 | 342 |
|
| extra/soundsoftware/convert-external-repos.rb | ||
|---|---|---|
| 146 | 146 |
if project.identifier.empty? |
| 147 | 147 |
log("\tno identifier for project #{project.name}")
|
| 148 | 148 |
next |
| 149 |
elsif not project.identifier.match(/^[a-z0-9\-]+$/) |
|
| 149 |
elsif not project.identifier.match(/^[a-z0-9_\-]+$/)
|
|
| 150 | 150 |
log("\tinvalid identifier for project #{project.name} : #{project.identifier}");
|
| 151 | 151 |
next |
| 152 | 152 |
end |
| extra/soundsoftware/reposman-soundsoftware.rb | ||
|---|---|---|
| 263 | 263 |
if project.identifier.empty? |
| 264 | 264 |
log("\tno identifier for project #{project.name}!")
|
| 265 | 265 |
next |
| 266 |
elsif not project.identifier.match(/^[a-z0-9\-_]+$/)
|
|
| 266 |
elsif not project.identifier.match(/^[a-z0-9_\-]+$/)
|
|
| 267 | 267 |
log("\tinvalid identifier for project #{project.name} : #{project.identifier}!");
|
| 268 | 268 |
next; |
| 269 | 269 |
end |
| plugins/redmine_bibliography/app/controllers/publications_controller.rb | ||
|---|---|---|
| 203 | 203 |
# todo: make sure query works with both pgres and mysql ~lf.20131010 |
| 204 | 204 |
authors_list = Author.joins(:authorships).where("LOWER(authorships.name_on_paper) LIKE LOWER(?)", "%#{params[:term]}%").uniq
|
| 205 | 205 |
|
| 206 |
users_list = User.active.like(params[:term]).find(:all, :limit => 100) |
|
| 206 |
# name_like scope, defined in lib/user_author patch |
|
| 207 |
users_list = User.active.name_like(params[:term]).find(:all, :limit => 100) |
|
| 207 | 208 |
|
| 208 | 209 |
logger.debug "Query for \"#{params[:term]}\" returned \"#{authors_list.size}\" authors and \"#{users_list.size}\" users"
|
| 209 | 210 |
|
| plugins/redmine_bibliography/app/views/projects/show.html.erb | ||
|---|---|---|
| 58 | 58 |
<%= textilizable @project.description %> |
| 59 | 59 |
</div> |
| 60 | 60 |
<% end %> |
| 61 |
<ul>
|
|
| 62 |
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= link_to h(@project.homepage), @project.homepage %></li><% end %>
|
|
| 61 |
<div class="overviewfields">
|
|
| 62 |
<% unless @project.homepage.blank? %><h4><%=l(:field_homepage)%>:</h4><ul><li><%= link_to h(@project.homepage), @project.homepage %></li></ul><% end %>
|
|
| 63 | 63 |
<% if @subprojects.any? %> |
| 64 |
<li><%=l(:label_subproject_plural)%>: |
|
| 65 |
<%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ").html_safe %></li>
|
|
| 64 |
<h4><%=l(:label_subproject_plural)%>:</h4> |
|
| 65 |
<ul> |
|
| 66 |
<li><%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join("</li><li>").html_safe %></li>
|
|
| 67 |
</ul> |
|
| 66 | 68 |
<% end %> |
| 67 | 69 |
<% @project.visible_custom_field_values.each do |custom_value| %> |
| 68 | 70 |
<% if !custom_value.value.blank? %> |
| 69 |
<li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
|
| 71 |
<h4><%= custom_value.custom_field.name%>:</h4><ul><li><%=h show_value(custom_value) %></li></ul>
|
|
| 70 | 72 |
<% end %> |
| 71 | 73 |
<% end %> |
| 72 |
</ul> |
|
| 73 |
|
|
| 74 |
</div> |
|
| 74 | 75 |
<% if User.current.allowed_to?(:view_issues, @project) and @open_issues_by_tracker.values.any? %> |
| 75 | 76 |
<div class="issues box"> |
| 76 | 77 |
<h3><%=l(:label_issue_tracking)%></h3> |
| plugins/redmine_bibliography/lib/bibliography/user_author_patch.rb | ||
|---|---|---|
| 4 | 4 |
module UserAuthorPatch |
| 5 | 5 |
def self.included(base) |
| 6 | 6 |
base.send(:include, InstanceMethods) |
| 7 |
extend ClassMethods |
|
| 7 |
|
|
| 8 |
base.class_eval do |
|
| 9 |
# adapted from the app/models/principals_model.rb |
|
| 10 |
# to remove the email address from the search |
|
| 11 |
scope :name_like, lambda {|q|
|
|
| 12 |
q = q.to_s |
|
| 13 |
if q.blank? |
|
| 14 |
where({})
|
|
| 15 |
else |
|
| 16 |
pattern = "%#{q}%"
|
|
| 17 |
sql = %w(login firstname lastname).map {|column| "LOWER(#{ table_name}. #{column}) LIKE LOWER(:p)"}.join(" OR ")
|
|
| 18 |
params = {:p => pattern}
|
|
| 19 |
if q =~ /^(.+)\s+(.+)$/ |
|
| 20 |
a, b = "#{$1}%", "#{$2}%"
|
|
| 21 |
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:a) AND LOWER (#{table_name}.lastname) LIKE LOWER(:b))"
|
|
| 22 |
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:b) AND LOWER (#{table_name}.lastname) LIKE LOWER(:a))"
|
|
| 23 |
params.merge!(:a => a, :b => b) |
|
| 24 |
end |
|
| 25 |
where(sql, params) |
|
| 26 |
end |
|
| 27 |
} |
|
| 28 |
end #base.class_eval |
|
| 8 | 29 |
|
| 9 | 30 |
end #self.included |
| 10 | 31 |
|
| 11 |
module ClassMethods |
|
| 12 |
end |
|
| 13 |
|
|
| 14 | 32 |
module InstanceMethods |
| 15 | 33 |
|
| 34 |
# todo: deprecated? ~lf.20131011 |
|
| 16 | 35 |
def institution |
| 17 | 36 |
unless self.ssamr_user_detail.nil? |
| 18 | 37 |
institution_name = self.ssamr_user_detail.institution_name |
| public/stylesheets/application.css | ||
|---|---|---|
| 762 | 762 |
|
| 763 | 763 |
#roadmap table.progress td { height: 1.2em; }
|
| 764 | 764 |
/***** Tabs *****/ |
| 765 |
#content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
|
|
| 766 |
#content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
|
|
| 767 |
#content .tabs ul li {
|
|
| 765 |
#content .tabs, #content .tabs2 {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
|
|
| 766 |
#content .tabs ul, #content .tabs2 ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
|
|
| 767 |
#content .tabs ul li, #content .tabs2 ul li {
|
|
| 768 | 768 |
float:left; |
| 769 | 769 |
list-style-type:none; |
| 770 | 770 |
white-space:nowrap; |
| ... | ... | |
| 773 | 773 |
position:relative; |
| 774 | 774 |
margin-bottom:-1px; |
| 775 | 775 |
} |
| 776 |
#content .tabs ul li a{
|
|
| 776 |
#content .tabs ul li a, #content .tabs2 ul li a {
|
|
| 777 | 777 |
display:block; |
| 778 | 778 |
font-size: 0.9em; |
| 779 | 779 |
text-decoration:none; |
| ... | ... | |
| 788 | 788 |
border-top-right-radius:3px; |
| 789 | 789 |
} |
| 790 | 790 |
|
| 791 |
#content .tabs ul li a:hover {
|
|
| 791 |
#content .tabs ul li a:hover, #content .tabs2 ul li a:hover {
|
|
| 792 | 792 |
background-color: #ffffdd; |
| 793 | 793 |
text-decoration:none; |
| 794 | 794 |
} |
| 795 | 795 |
|
| 796 |
#content .tabs ul li a.selected {
|
|
| 796 |
#content .tabs ul li a.selected, #content .tabs2 ul li a.selected {
|
|
| 797 | 797 |
background-color: #fff; |
| 798 | 798 |
border: 1px solid #bbbbbb; |
| 799 | 799 |
border-bottom: 1px solid #fff; |
| 800 | 800 |
color:#444; |
| 801 | 801 |
} |
| 802 | 802 |
|
| 803 |
#content .tabs ul li a.selected:hover {background-color: #fff;}
|
|
| 803 |
#content .tabs ul li a.selected:hover, #content .tabs2 ul li a.selected:hover {background-color: #fff;}
|
|
| 804 | 804 |
|
| 805 | 805 |
div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
|
| 806 | 806 |
|
| public/themes/soundsoftware/stylesheets/application.css | ||
|---|---|---|
| 158 | 158 |
|
| 159 | 159 |
.wiki p, .wiki li { margin-left: 30px; margin-right: 3em; }
|
| 160 | 160 |
|
| 161 |
.overviewfields h4 { margin-left: 30px; margin-bottom: 0; }
|
|
| 162 |
.overviewfields ul { margin-top: 0; }
|
|
| 163 |
|
|
| 161 | 164 |
.repository-info .wiki p { margin-left: 0 }
|
| 162 | 165 |
|
| 163 | 166 |
div.issue { background: #fdfaf0; border: 1px solid #a9b680; border-left: 4px solid #a9b680; }
|
| ... | ... | |
| 231 | 234 |
.TableRowColor td { background-color: #fdfbf5; color: #000000; border: 0; }
|
| 232 | 235 |
.NavBarCell1 { background-color: #ffe69b; color:#000000 }
|
| 233 | 236 |
|
| 234 |
.embedded table { border: 0px solid #fff; }
|
|
| 235 |
.embedded h3 { margin-top: 0.5em; }
|
|
| 236 |
.embedded hr { color: #a9b680; background-color: #a9b680 }
|
|
| 237 |
.embedded center { text-align: left; } /* haha */
|
|
| 237 |
.controller-redmine_embedded table { border: 0px solid #fff; }
|
|
| 238 |
.controller-redmine_embedded h3 { margin-top: 0.5em; }
|
|
| 239 |
.controller-redmine_embedded hr { color: #a9b680; background-color: #a9b680 }
|
|
| 240 |
.controller-redmine_embedded center { text-align: left; } /* haha */
|
|
| 241 |
.controller-redmine_embedded th { font-weight: normal; text-align: left; }
|
|
| 242 |
.controller-redmine_embedded caption { text-align: left; font-weight: bold; font-size: 14px; margin-top: 1em; }
|
|
| 243 |
.controller-redmine_embedded li.blockList { list-style-type: none; }
|
|
| 244 |
|
|
| 245 |
.controller-redmine_embedded .summary { font-style: normal; margin-bottom: 1.5em; }
|
|
| 238 | 246 |
|
| 239 | 247 |
/* Special hack to hide the FRAMES | NO FRAMES links -- they don't |
| 240 | 248 |
work in this context -- and right-align the All Classes and Detail links */ |
| 241 |
.embedded .NavBarCell2 a[target=_top] { width: 0px; visibility: hidden; }
|
|
| 242 |
.embedded .NavBarCell2 + .NavBarCell2 { text-align: right; }
|
|
| 243 |
.embedded .NavBarCell3 + .NavBarCell3 { text-align: right; }
|
|
| 249 |
.controller-redmine_embedded .NavBarCell2 a[target=_top] { width: 0px; visibility: hidden; }
|
|
| 250 |
.controller-redmine_embedded .NavBarCell2 + .NavBarCell2 { text-align: right; }
|
|
| 251 |
.controller-redmine_embedded .NavBarCell3 + .NavBarCell3 { text-align: right; }
|
|
| 252 |
|
|
| 253 |
.topNav, .bottomNav { position: relative; overflow: hidden; }
|
|
| 254 |
.topNav ul li, .bottomNav ul li { float: left; list-style-type: none; margin-right: 14px; position: relative; font-weight: bold; }
|
|
| 255 |
.controller-redmine_embedded .subNav .navList { display: none; }
|
|
| 244 | 256 |
|
| 245 | 257 |
/* For Doxygen in Embedded context (though note some of the Javadoc |
| 246 | 258 |
rules will also apply to Doxygen): */ |
| ... | ... | |
| 251 | 263 |
.memTemplItemLeft, |
| 252 | 264 |
.memTemplItemRight, |
| 253 | 265 |
.indexkey, |
| 254 |
.indexvalue, |
|
| 255 | 266 |
.memproto, |
| 256 | 267 |
.memproto td, |
| 257 |
.memdoc a, |
|
| 258 |
.embedded li .el, |
|
| 259 |
.embedded a.el { font-family: monospace; }
|
|
| 268 |
.memdoc a { font-family: 'SourceCodePro-Regular', monospace; font-size: 0.9em; font-weight: normal; }
|
|
| 260 | 269 |
|
| 261 |
.embedded .memTemplParams { font-style: italic; }
|
|
| 270 |
.controller-redmine_embedded .memTemplParams { font-style: italic; }
|
|
| 262 | 271 |
|
| 263 |
.embedded .memItemRight a:first-child, |
|
| 264 |
.embedded .memTemplItemRight a:first-child, |
|
| 265 |
.embedded .indexkey a:first-child, |
|
| 266 |
.embedded a.el, |
|
| 267 |
.embedded .memdoc a { font-weight: bold; } /* function names, etc */
|
|
| 272 |
.controller-redmine_embedded #projectname, |
|
| 273 |
.controller-redmine_embedded .title { font-weight: bold; font-size: 14px; }
|
|
| 268 | 274 |
|
| 269 |
.embedded .memitem { border-bottom: 1px solid #a9b680; padding-top: 0.5em; }
|
|
| 270 |
.embedded .memitem:last-child { border-bottom: 0px; }
|
|
| 275 |
.controller-redmine_embedded h2 { font-size: 16px; }
|
|
| 271 | 276 |
|
| 272 |
.embedded .contents { margin-top: 0.5em; }
|
|
| 273 |
.embedded .contents td { padding: 0px; }
|
|
| 277 |
.controller-redmine_embedded .memitem { border-bottom: 1px solid #a9b680; padding-top: 0.5em; }
|
|
| 278 |
.controller-redmine_embedded .memitem:last-child { border-bottom: 0px; }
|
|
| 274 | 279 |
|
| 275 |
.embedded .contents h1, |
|
| 276 |
.embedded .contents h2, |
|
| 277 |
.embedded .navigation h1, |
|
| 278 |
.embedded .navigation h2 { padding-top: 0.5em; padding-bottom: 0.25em; }
|
|
| 280 |
.controller-redmine_embedded .contents { margin-top: 0.5em; }
|
|
| 281 |
.controller-redmine_embedded .contents td { padding: 0px; }
|
|
| 279 | 282 |
|
| 280 |
.embedded .contents .center { text-align: center; } /* undo javadoc hack above */
|
|
| 283 |
.controller-redmine_embedded .contents h1, |
|
| 284 |
.controller-redmine_embedded .contents h2, |
|
| 285 |
.controller-redmine_embedded .navigation h1, |
|
| 286 |
.controller-redmine_embedded .navigation h2 { padding-top: 1em; padding-bottom: 0; }
|
|
| 287 |
|
|
| 288 |
.controller-redmine_embedded .contents .center { text-align: center; } /* undo javadoc hack above */
|
|
| 281 | 289 |
|
| 282 | 290 |
/* For MATLAB documentation */ |
| 283 | 291 |
|
| 284 |
.embedded #matlabdoc th { text-align: left; }
|
|
| 292 |
.controller-redmine_embedded #matlabdoc th { text-align: left; }
|
|
| 285 | 293 |
|
| 286 | 294 |
/* autocomplete positioning fix */ |
| 287 | 295 |
div.autocomplete {
|
Also available in: Unified diff