Merge branch 'timeline' of github.com:opf/openproject into timeline

pull/4927/head
Oliver Günther 8 years ago
commit e9f293d0f3
No known key found for this signature in database
GPG Key ID: 88872239EB414F99
  1. 7
      app/assets/stylesheets/content/work_packages/_table_hierarchy.sass
  2. 4
      app/assets/stylesheets/layout/_top_menu.sass
  3. 3
      app/assets/stylesheets/layout/_work_package.sass
  4. 7
      app/controllers/custom_fields_controller.rb
  5. 3
      app/views/homescreen/blocks/_community.html.erb
  6. 17
      app/views/repositories/_dir_list.html.erb
  7. 1
      app/views/repositories/_dir_list_content.html.erb
  8. 5
      config/initializers/homescreen.rb
  9. 9
      doc/operation_guides/packager/installation-guide.md
  10. 4
      features/work_packages/moves/work_package_moves_new_copy.feature
  11. 2
      frontend/app/components/wp-buttons/wp-create-button/wp-create-button.directive.html
  12. 2
      frontend/app/components/wp-fast-table/builders/rows/hierarchy-rows-builder.ts
  13. 79
      frontend/app/components/wp-table/wp-table.directive.html
  14. 1
      lib/redmine/menu_manager/top_menu/help_menu.rb
  15. 26
      spec/features/custom_fields/custom_fields_spec.rb
  16. 2
      tslint.json

@ -20,8 +20,10 @@
display: inline
.wp-table--hierarchy-span
text-align: center
text-align: end
display: inline-block
margin-left: 5px
padding-right: 8px
.wp-table--hierarchy-indicator-icon
@include icon-common
@ -62,6 +64,9 @@
.wp-table--cell-td.subject:not(.-with-hierarchy)
padding-left: 25px !important
.wp-table--cell-td.subject.-with-hierarchy .wp-table--cell-span
padding-left: 0
.hierarchy-header--icon
display: inline-block
width: 20px

@ -36,7 +36,7 @@
margin-top: 13px
display: block
background: $header-home-link-bg
background-size: 150px
background-size: 140px
height: 42px
text-indent: -9999em
@ -309,7 +309,7 @@ input.top-menu-search--input
overflow: hidden
text-overflow: ellipsis
padding-right: 34px
font-size: 16px
font-size: 18px
font-weight: bold
&:after

@ -297,6 +297,9 @@
.form--field-container
max-width: 400px
#breadcrumb
display: none
%flex-grow-shrink-zero
flex-grow: 0
flex-shrink: 0

@ -61,9 +61,14 @@ class CustomFieldsController < ApplicationController
def edit; end
def update
if @custom_field.update_attributes(@custom_field_params)
ok = @custom_field.update_attributes(@custom_field_params)
if ok
set_custom_options!
ok = @custom_field.save
end
if ok
if @custom_field.is_a? WorkPackageCustomField
@custom_field.types.each do |type|
TypesHelper.update_type_attribute_visibility! type

@ -7,9 +7,6 @@
<li>
<%= static_link_to :user_guides %>
</li>
<li>
<%= static_link_to :faq %>
</li>
<li>
<a title="<%= l('homescreen.links.shortcuts') %>"
onClick="modalHelperInstance.createModal('/help/keyboard_shortcuts');">

@ -31,6 +31,7 @@ See doc/COPYRIGHT.rdoc for more details.
<table class="generic-table entries" id="browser">
<colgroup>
<col highlight-col>
<col>
<col highlight-col>
<col highlight-col>
<col highlight-col>
@ -48,6 +49,15 @@ See doc/COPYRIGHT.rdoc for more details.
</div>
</div>
</th>
<th class="hidden-for-sighted">
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
<span>
<%= I18n.t('js.tl_toolbar.outlines') %>
</span>
</div>
</div>
</th>
<th>
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
@ -61,7 +71,7 @@ See doc/COPYRIGHT.rdoc for more details.
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
<span>
<%= l(:label_revision) %>
<%= t(:label_revision) %>
</span>
</div>
</div>
@ -70,7 +80,7 @@ See doc/COPYRIGHT.rdoc for more details.
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
<span>
<%= l(:label_age) %>
<%= t(:label_age) %>
</span>
</div>
</div>
@ -99,6 +109,5 @@ See doc/COPYRIGHT.rdoc for more details.
<%= render partial: 'dir_list_content' %>
</tbody>
</table>
</div>
</div>
</div>

@ -51,6 +51,7 @@ See doc/COPYRIGHT.rdoc for more details.
{action: (entry.dir? ? 'show' : 'changes'), project_id: @project, path: to_path_param(ent_path), rev: @rev},
class: (entry.dir? ? 'icon-context icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(ent_name)}")%>
</td>
<td class="hidden-for-sighted"> <%= depth %></td>
<td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.dir? %></td>
<% changeset = @project.repository.find_changeset_by_name(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
<td class="revision"><%= link_to_revision(changeset, @project) if changeset %></td>

@ -58,11 +58,6 @@ OpenProject::Static::Homescreen.manage :links do |links|
icon: 'icon-context icon-rename',
url: static_links[:user_guides][:href]
},
{
label: :faq,
icon: 'icon-context icon-faq',
url: static_links[:faq][:href]
},
{
label: :glossary,
icon: 'icon-context icon-glossar',

@ -25,7 +25,7 @@ server machine.
The installation procedure assumes the following prerequisites:
* A server running one of the Linux distributions listed in the [system requirements]: https://www.openproject.org/systemrequirements
* A server running one of the Linux distributions listed in the [system requirements](https://www.openproject.org/systemrequirements).
* A mail server that is accessible via SMTP that can be used for sending
notification emails. OpenProject supports authentication, yet does not
provide support for SMTP via SSL/TLS.
@ -337,3 +337,10 @@ openproject configure
Using `configure` will take your previous decisions in the installer and simply re-apply them, which is an idempotent operation. It will detect the Gemfile config option being set and re-bundle the application.
# Frequently asked questions (FAQ)
## How can I install OpenProject?
Follow the installation guide for the [packaged installation](https://www.openproject.org/open-source/download/packaged-installation-guide/). For more plugins and support take a look at the [Enterprise Edition](https://www.openproject.org/enterprise-edition/).
## I encountered a problem while trying to install OpenProject. What can I do?
Take a look at the [OpenProject installation forum](https://community.openproject.com/projects/openproject/boards/9). Other users may have had the same problem. If you don't find an answer feel free to ask a new question / open a new thread.

@ -87,7 +87,7 @@ Feature: Copying a work package
When I click "Copy and follow"
Then I should see "Successful creation."
Then I should see "issue1" within ".wp-edit-field.subject"
And I should see "project_2" within ".breadcrumb"
And I should see "project_2" within "#projects-menu"
@javascript @selenium
Scenario: Issue children are moved
@ -97,7 +97,7 @@ Feature: Copying a work package
When I click "Move and follow"
#Then I should see "Successful update."
Then I should see "issue1" within ".wp-edit-field.subject"
And I should see "project_2" within ".breadcrumb"
And I should see "project_2" within "#projects-menu"
Scenario: Move an issue to project with missing type

@ -12,7 +12,7 @@
<span class="button--text"
ng-bind="::$ctrl.text.createWithDropdown"
aria-hidden="true"></span>
<i class="button--icon icon-pulldown"></i>
<i class="button--icon icon-small icon-pulldown"></i>
</button>
<button class="button -alt-highlight add-work-package"
ng-if="!$ctrl.projectIdentifier"

@ -114,7 +114,7 @@ export class HierarchyRowsBuilder extends PlainRowsBuilder {
const hierarchyIndicator = document.createElement('span');
const collapsed = this.wpTableHierarchy.collapsed(workPackage.id);
hierarchyIndicator.classList.add(hierarchyCellClassName);
hierarchyIndicator.style.width = 25 + (15 * level) + 'px';
hierarchyIndicator.style.width = 25 + (20 * level) + 'px';
if (workPackage.$loaded && workPackage.isLeaf) {
hierarchyIndicator.innerHTML = `

@ -12,45 +12,48 @@
<span ng-bind="::text.tableSummaryHints"></span>
</caption>
<thead class="-sticky">
<tr>
<th sort-header
ng-repeat="column in columns"
has-dropdown-menu
position-relative-to=".generic-table--sort-header-outer"
collision-container=".work-packages--list"
target="columnContextMenu"
locals="columns, column"
locale="column.custom_field && columns.custom_field.name_locale || locale"
header-name="column.name"
header-title="column.title"
sortable="column.sortable"
query="query"
ng-class="column.name == 'id' && '-short' ">
</th>
<th class="wp-table--details-column -short hide-when-print">
<div class="generic-table--sort-header-outer">
<accessible-by-keyboard
execute="openColumnsModal()"
link-class="wp-table--columns-selection">
<span class="icon-button icon-columns"></span>
</accessible-by-keyboard>
</div>
</th>
<th class="wp-timeline--th" ng-show="wpTimelineContainer.visible">
<div class="wp-timeline--slider-wrapper">
<div class="wp-timeline--slider"></div>
</div>
<div class="wp-timeline-header-controls generic-table--sort-header-outer">
<timeline-control></timeline-control>
</div>
<div class="wp-timeline-header-container generic-table--sort-header-outer">
<div class="wp-timeline--scroll-wrapper">
<span class="generic-table--sort-header wp-timeline-header">
</span>
<tr>
<th sort-header ng-repeat="column in columns"
has-dropdown-menu
position-relative-to=".generic-table--sort-header-outer"
collision-container=".work-packages--list"
target="columnContextMenu"
locals="columns, column"
locale="column.custom_field && columns.custom_field.name_locale || locale"
header-name="column.name"
header-title="column.title"
sortable="column.sortable"
query="query"
ng-class="column.name == 'id' && '-short' ">
</th>
<th class="wp-table--details-column -short hide-when-print">
<div class="generic-table--sort-header-outer">
<accessible-by-keyboard
execute="openColumnsModal()"
link-class="wp-table--columns-selection">
<span class="icon-button icon-small icon-add"></span>
</accessible-by-keyboard>
</div>
</div>
</th>
</tr>
</th>
<th class="wp-timeline--th" ng-show="wpTimelineContainer.visible">
<div class="wp-timeline--slider-wrapper">
<div class="wp-timeline--slider"></div>
</div>
<div class="wp-timeline-header-controls generic-table--sort-header-outer">
<timeline-control></timeline-control>
</div>
<div class="wp-timeline-header-container generic-table--sort-header-outer">
<div class="wp-timeline--scroll-wrapper">
<span class="generic-table--sort-header wp-timeline-header">
</span>
</div>
</div>
</th>
</tr>
</thead>
<tbody class="work-package--empty-tbody" ng-if="query.hasError || rowcount === 0">
<tr id="empty-row-notification">

@ -87,7 +87,6 @@ module Redmine::MenuManager::TopMenu::HelpMenu
result << static_link_item(:upsale, href_suffix: "?utm_source=ce-helpmenu")
end
result << static_link_item(:user_guides)
result << static_link_item(:faq)
result << content_tag(:li) {
link_to l('homescreen.links.shortcuts'),
'',

@ -82,6 +82,32 @@ describe 'custom fields', js: true do
click_on custom_field.name
end
it "adds new options" do
click_on "add-custom-option"
expect(page).to have_selector('.custom-option-row', count: 5)
within all(".custom-option-row").last do
find("input.custom-option-value").set "Sega"
end
click_on "add-custom-option"
expect(page).to have_selector('.custom-option-row', count: 6)
within all(".custom-option-row").last do
find("input.custom-option-value").set "Atari"
end
click_on "Save"
expect(page).to have_text("Successful update")
expect(page).to have_text("Platform")
expect(page).to have_selector('.custom-option-row', count: 6)
values = all(".custom-option-value").map(&:value)
expect(values).to eq ["Playstation", "Xbox", "Nintendo", "PC", "Sega", "Atari"]
end
it "updates the values and orders of the custom options" do
expect(page).to have_text("Platform")

@ -102,7 +102,7 @@
"check-type"
],
"typedef-whitespace": [
true,
false,
{
"call-signature": "nospace",
"index-signature": "nospace",

Loading…
Cancel
Save