Merge pull request #8469 from opf/housekeeping/33508-Move-global-CSS-to-frontend-styles
[33508] Move global CSS to frontend/styles [ci skip]pull/8486/head
Before Width: | Height: | Size: 597 B |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
@ -1,80 +0,0 @@ |
|||||||
@import content/accounts |
|
||||||
@import content/accounts_mobile |
|
||||||
@import content/augmented |
|
||||||
@import content/badges |
|
||||||
@import content/blockquotes |
|
||||||
@import content/context_menu |
|
||||||
@import content/editable_toolbar |
|
||||||
@import content/forms |
|
||||||
@import content/forms_mobile |
|
||||||
@import content/calendars |
|
||||||
@import content/comments |
|
||||||
@import content/collapsible_section |
|
||||||
@import content/copy_to_clipboard |
|
||||||
@import content/custom_logo |
|
||||||
@import content/notifications |
|
||||||
@import content/notifications_mobile |
|
||||||
@import content/links |
|
||||||
@import content/loading_indicator |
|
||||||
@import content/enterprise |
|
||||||
@import content/members |
|
||||||
@import content/my_account |
|
||||||
@import content/my_page |
|
||||||
@import content/project_overview |
|
||||||
@import content/news |
|
||||||
@import content/buttons |
|
||||||
@import content/icon_control |
|
||||||
@import content/drag_and_drop |
|
||||||
@import content/boxes |
|
||||||
@import content/info_boxes |
|
||||||
@import content/headings |
|
||||||
@import content/watchers |
|
||||||
@import content/simple_filters |
|
||||||
@import content/advanced_filters |
|
||||||
@import content/attributes_key_value |
|
||||||
@import content/attributes_group |
|
||||||
@import content/information_section |
|
||||||
@import content/widget_box |
|
||||||
@import content/wiki |
|
||||||
@import content/list |
|
||||||
@import content/work_packages |
|
||||||
@import content/table |
|
||||||
@import content/tables |
|
||||||
@import content/tabular |
|
||||||
@import content/types_form_configuration |
|
||||||
@import content/user |
|
||||||
@import content/preview |
|
||||||
@import content/modal |
|
||||||
@import content/journal |
|
||||||
@import content/pagination |
|
||||||
@import content/progress_bar |
|
||||||
@import content/request_for_confirmation |
|
||||||
@import content/form_error_messages |
|
||||||
@import content/ajax_indicator |
|
||||||
@import content/tooltips |
|
||||||
@import content/tabs |
|
||||||
@import content/autocomplete |
|
||||||
@import content/diff |
|
||||||
@import content/projects_list |
|
||||||
@import content/datepicker |
|
||||||
@import content/focus_within |
|
||||||
@import content/help_texts |
|
||||||
@import content/on_off_status |
|
||||||
@import content/custom_actions |
|
||||||
@import content/user_mention |
|
||||||
@import content/hide_section |
|
||||||
@import content/hide_until_initialized |
|
||||||
@import content/hidden |
|
||||||
@import content/search |
|
||||||
@import content/security_badge |
|
||||||
@import content/contextual |
|
||||||
@import content/tooltip |
|
||||||
@import content/grid |
|
||||||
@import content/grid_mobile |
|
||||||
@import content/resizer |
|
||||||
@import content/version |
|
||||||
@import content/project_status |
|
||||||
|
|
||||||
@import content/menus/_project_autocompletion |
|
||||||
@import content/menus/_menu_blocks |
|
||||||
@import content/editor/index |
|
@ -1,17 +0,0 @@ |
|||||||
# Preview |
|
||||||
|
|
||||||
``` |
|
||||||
<fieldset class="preview"> |
|
||||||
<legend class="preview--legend">Preview - Description</legend> |
|
||||||
<div class="wiki"> |
|
||||||
<h2>An article that's still being written.</h2> |
|
||||||
</div> |
|
||||||
</fieldset> |
|
||||||
``` |
|
||||||
|
|
||||||
``` |
|
||||||
<fieldset class="preview"> |
|
||||||
<legend class="preview--legend">Preview - Description</legend> |
|
||||||
<span class="preview--nothing-to-preview">Nothing to preview</span> |
|
||||||
</fieldset> |
|
||||||
``` |
|
@ -1,5 +0,0 @@ |
|||||||
@import './markdown' |
|
||||||
@import './ckeditor' |
|
||||||
@import './macros' |
|
||||||
@import './rouge' |
|
||||||
@import './codemirror' |
|
@ -1,2 +0,0 @@ |
|||||||
@import fonts/lato |
|
||||||
@import fonts/openproject_icon_font |
|
@ -1,7 +0,0 @@ |
|||||||
@import ./table |
|
||||||
@import ./table_embedded |
|
||||||
@import ./details_view |
|
||||||
@import ./full_view |
|
||||||
@import ./mobile |
|
||||||
@import ./print |
|
||||||
@import ./query_menu |
|
@ -1,48 +0,0 @@ |
|||||||
/*-- copyright |
|
||||||
* OpenProject is an open source project management software. |
|
||||||
* Copyright (C) 2012-2020 the OpenProject GmbH |
|
||||||
* |
|
||||||
* This program is free software; you can redistribute it and/or |
|
||||||
* modify it under the terms of the GNU General Public License version 3. |
|
||||||
* |
|
||||||
* OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
|
||||||
* Copyright (C) 2006-2013 Jean-Philippe Lang |
|
||||||
* Copyright (C) 2010-2013 the ChiliProject Team |
|
||||||
* |
|
||||||
* This program is free software; you can redistribute it and/or |
|
||||||
* modify it under the terms of the GNU General Public License |
|
||||||
* as published by the Free Software Foundation; either version 2 |
|
||||||
* of the License, or (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program; if not, write to the Free Software |
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
||||||
* |
|
||||||
* See docs/COPYRIGHT.rdoc for more details. ++ |
|
||||||
*/ |
|
||||||
|
|
||||||
// Enable asset pipeline for Bourbon mixins (e.g. +font-face) |
|
||||||
// @see http://bourbon.io/docs/#asset-pipeline |
|
||||||
$bourbon: ("rails-asset-pipeline": function-exists(font-url)) |
|
||||||
|
|
||||||
|
|
||||||
// Variables |
|
||||||
@import openproject/variables |
|
||||||
// Foundation variables |
|
||||||
@import openproject/settings |
|
||||||
|
|
||||||
// Dependencies |
|
||||||
@import bourbon |
|
||||||
@import foundation |
|
||||||
|
|
||||||
// Core styles |
|
||||||
@import fonts/index |
|
||||||
@import openproject/index |
|
||||||
@import vendor/index |
|
||||||
@import layout/index |
|
||||||
@import content/index |
|
@ -1,13 +0,0 @@ |
|||||||
@import openproject/accessibility |
|
||||||
@import openproject/announcements |
|
||||||
@import openproject/functions |
|
||||||
@import openproject/homescreen |
|
||||||
|
|
||||||
@import openproject/generic |
|
||||||
|
|
||||||
@import openproject/mixins |
|
||||||
@import openproject/onboarding |
|
||||||
@import openproject/scm |
|
||||||
|
|
||||||
// allow plugins to hook into global assets |
|
||||||
@import openproject/plugins |
|
@ -1,5 +0,0 @@ |
|||||||
<% Redmine::Plugin.all.collect do |plugin| %> |
|
||||||
<% plugin.registered_global_assets[:css].each do |path| %> |
|
||||||
@import "<%= path %>"; |
|
||||||
<% end %> |
|
||||||
<% end %> |
|
@ -1,11 +0,0 @@ |
|||||||
Color Variables |
|
||||||
=============== |
|
||||||
|
|
||||||
## Global Color Variables |
|
||||||
|
|
||||||
@colors { |
|
||||||
- $body-font-color - - |
|
||||||
- $gray-lighter $gray-light $gray $gray-dark |
|
||||||
- $primary-color $primary-color-dark $alternative-color |
|
||||||
- $secondary-color |
|
||||||
} |
|
@ -1,41 +0,0 @@ |
|||||||
<%# |
|
||||||
Depend on the design file so that this is recompiled on core changes. |
|
||||||
Doesn't work for theme plugins, sorry :-/ just update the core design.rb as well to reload! |
|
||||||
%> |
|
||||||
<% depend_on Rails.root.join('lib', 'open_project', 'custom_styles', 'design.rb') %> |
|
||||||
|
|
||||||
<%# |
|
||||||
Set defaults for the following variables |
|
||||||
primary-color |
|
||||||
primary-color-dark |
|
||||||
alternative-color |
|
||||||
This allows us to dynamically define CSS4 + Sass variables from a single map |
|
||||||
%> |
|
||||||
<% ::OpenProject::CustomStyles::Design.variables.each do |var, hexcode| %> |
|
||||||
$<%= var %>: <%= hexcode %>; |
|
||||||
<% end %> |
|
||||||
|
|
||||||
:root { |
|
||||||
<% ::OpenProject::CustomStyles::Design.variables.each do |var, definition| %> |
|
||||||
<% css4definition = definition.gsub(/\$([\w-]+)/, 'var(--\1)') %> |
|
||||||
--<%= var %>: <%= css4definition %>; |
|
||||||
<% end %> |
|
||||||
} |
|
||||||
|
|
||||||
<%# Construct a sass map to lookup variables in the mixin below %> |
|
||||||
$variable-map: ( |
|
||||||
<% ::OpenProject::CustomStyles::Design.variables.each do |var, definition| %> |
|
||||||
<%= var %>: #{<%= definition %>}, |
|
||||||
<% end %> |
|
||||||
); |
|
||||||
|
|
||||||
|
|
||||||
// use CSS4 + Sass variable fallback for the given property |
|
||||||
// e.g., @include varprop(background-color, primary-color) |
|
||||||
@mixin varprop($prop, $name, $suffix:"") { |
|
||||||
#{$prop}: map-get($variable-map, $name) unquote($suffix); |
|
||||||
#{$prop}: var(--#{$name}) unquote($suffix); |
|
||||||
} |
|
||||||
|
|
||||||
// Other variables |
|
||||||
$work-package-details--tab-height: 40px; |
|
@ -1,108 +1 @@ |
|||||||
@require sassc |
@import ../../../frontend/src/global_styles/**/_*.lsg |
||||||
|
|
||||||
@sass ../stylesheets/openproject.sass |
|
||||||
@title "Living Style Guide for OpenProject" |
|
||||||
|
|
||||||
@style base-font: Lato |
|
||||||
@style base-font-size: 16px |
|
||||||
@style background-color: white |
|
||||||
|
|
||||||
@default preprocessor: sass |
|
||||||
|
|
||||||
@css |
|
||||||
.livingstyleguide--header { |
|
||||||
@include grid-content; |
|
||||||
} |
|
||||||
|
|
||||||
.livingstyleguide--footer { |
|
||||||
@include grid-content; |
|
||||||
} |
|
||||||
|
|
||||||
.livingstyleguide--intro { |
|
||||||
@include grid-content; |
|
||||||
} |
|
||||||
|
|
||||||
.styleguide-banner { |
|
||||||
height: 280px; |
|
||||||
padding: 200px 0 0; |
|
||||||
background: url('/assets/styleguide/logo_openproject.png'); |
|
||||||
background-position: top center; |
|
||||||
background-repeat: no-repeat; |
|
||||||
} |
|
||||||
|
|
||||||
.styleguide-banner--text { |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
|
|
||||||
.styleguide-nav--menu-items { |
|
||||||
@extend %menu-bar; |
|
||||||
@include menu-bar-layout; |
|
||||||
@include menu-bar-style(#eee); |
|
||||||
} |
|
||||||
|
|
||||||
.livingstyleguide--code-block { |
|
||||||
max-height: 300px; |
|
||||||
} |
|
||||||
|
|
||||||
.livingstyleguide--example { |
|
||||||
overflow: visible; |
|
||||||
} |
|
||||||
|
|
||||||
.lsg-search-box { |
|
||||||
width: 40%; |
|
||||||
margin: 0 auto; |
|
||||||
} |
|
||||||
|
|
||||||
.icon-list { |
|
||||||
display: flex; |
|
||||||
flex-flow: row wrap; |
|
||||||
width: 640px; |
|
||||||
margin: 0 auto; |
|
||||||
} |
|
||||||
|
|
||||||
.icon-list li { |
|
||||||
flex: 1; |
|
||||||
flex-basis: 15%; |
|
||||||
display: block; |
|
||||||
text-align: center; |
|
||||||
margin: 10px; |
|
||||||
font-size: 12px; |
|
||||||
} |
|
||||||
|
|
||||||
.icon-list span.icon { |
|
||||||
display: block; |
|
||||||
font-size: 30px; |
|
||||||
} |
|
||||||
|
|
||||||
@header |
|
||||||
<header class="livingstyleguide--header"> |
|
||||||
<div class="styleguide-banner"> |
|
||||||
<h1 class="styleguide-banner--text">Living Style Guide</h1> |
|
||||||
</div> |
|
||||||
</header> |
|
||||||
|
|
||||||
<nav class="styleguide-nav"> |
|
||||||
<ul class="styleguide-nav--menu-items"> |
|
||||||
<li><a target="_self" href="#color-variables">Colors</a></li> |
|
||||||
<li><a target="_self" href="#fonts">Fonts</a></li> |
|
||||||
<li><a target="_self" href="#forms">Forms</a></li> |
|
||||||
<li><a target="_self" href="#notifications">Notifications</a></li> |
|
||||||
<li><a target="_self" href="#buttons">Buttons</a></li> |
|
||||||
<li><a target="_self" href="#pagination">Pagination</a></li> |
|
||||||
</ul> |
|
||||||
</nav> |
|
||||||
|
|
||||||
<section class="livingstyleguide--intro"> |
|
||||||
<p> </p> |
|
||||||
</section> |
|
||||||
|
|
||||||
@javascript-before /assets/styleguide.js |
|
||||||
|
|
||||||
@search-box |
|
||||||
|
|
||||||
@footer |
|
||||||
<footer class="livingstyleguide--footer"> |
|
||||||
Copyright © 2019 OpenProject - All rights reserved. |
|
||||||
</footer> |
|
||||||
|
|
||||||
@import ../stylesheets/**/_*.lsg |
|
||||||
|
@ -1,5 +0,0 @@ |
|||||||
// Vendor definitions from plugins/gems |
|
||||||
|
|
||||||
@import vendor/dragula |
|
||||||
@import vendor/jquery_ui |
|
||||||
@import vendor/enjoyhint |
|
@ -1,431 +0,0 @@ |
|||||||
//-- copyright |
|
||||||
// OpenProject is an open source project management software. |
|
||||||
// Copyright (C) 2012-2020 the OpenProject GmbH |
|
||||||
// |
|
||||||
// This program is free software; you can redistribute it and/or |
|
||||||
// modify it under the terms of the GNU General Public License version 3. |
|
||||||
// |
|
||||||
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
|
||||||
// Copyright (C) 2006-2013 Jean-Philippe Lang |
|
||||||
// Copyright (C) 2010-2013 the ChiliProject Team |
|
||||||
// |
|
||||||
// This program is free software; you can redistribute it and/or |
|
||||||
// modify it under the terms of the GNU General Public License |
|
||||||
// as published by the Free Software Foundation; either version 2 |
|
||||||
// of the License, or (at your option) any later version. |
|
||||||
// |
|
||||||
// This program is distributed in the hope that it will be useful, |
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
// GNU General Public License for more details. |
|
||||||
// |
|
||||||
// You should have received a copy of the GNU General Public License |
|
||||||
// along with this program; if not, write to the Free Software |
|
||||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
||||||
// |
|
||||||
// See docs/COPYRIGHT.rdoc for more details. |
|
||||||
//++ |
|
||||||
|
|
||||||
/*! |
|
||||||
* jQuery UI CSS Framework 1.10.4 |
|
||||||
* http://jqueryui.com |
|
||||||
* |
|
||||||
* Copyright 2014 jQuery Foundation and other contributors |
|
||||||
* Released under the MIT license. |
|
||||||
* http://jquery.org/license |
|
||||||
* |
|
||||||
* http://api.jqueryui.com/category/theming/ |
|
||||||
* |
|
||||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/ |
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
/* Component containers |
|
||||||
----------------------------------*/ |
|
||||||
.ui-widget { |
|
||||||
font-family: $body-font-family; |
|
||||||
font-size: rem-calc(15px); |
|
||||||
} |
|
||||||
.ui-widget .ui-widget { |
|
||||||
font-size: 1em; |
|
||||||
} |
|
||||||
.ui-widget input, |
|
||||||
.ui-widget select, |
|
||||||
.ui-widget textarea, |
|
||||||
.ui-widget button { |
|
||||||
font-family: $body-font-family; |
|
||||||
font-size: 1em; |
|
||||||
} |
|
||||||
.ui-widget-content { |
|
||||||
border: 1px solid #aaaaaa/*{borderColorContent}*/; |
|
||||||
background: #ffffff/*{bgColorContent}*/; |
|
||||||
color: #222222/*{fcContent}*/; |
|
||||||
} |
|
||||||
.ui-widget-content a { |
|
||||||
color: #222222/*{fcContent}*/; |
|
||||||
} |
|
||||||
.ui-widget-header { |
|
||||||
border: 1px solid #aaaaaa/*{borderColorHeader}*/; |
|
||||||
background: #cccccc/*{bgColorHeader}*/; |
|
||||||
color: #222222/*{fcHeader}*/; |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
.ui-widget-header a { |
|
||||||
color: #222222/*{fcHeader}*/; |
|
||||||
} |
|
||||||
|
|
||||||
/* Interaction states |
|
||||||
----------------------------------*/ |
|
||||||
.ui-state-default, |
|
||||||
.ui-widget-content .ui-state-default, |
|
||||||
.ui-widget-header .ui-state-default { |
|
||||||
border: 1px solid #d3d3d3/*{borderColorDefault}*/; |
|
||||||
background: #e6e6e6/*{bgColorDefault}*/; |
|
||||||
font-weight: normal/*{fwDefault}*/; |
|
||||||
color: #555555/*{fcDefault}*/; |
|
||||||
} |
|
||||||
.ui-state-default a, |
|
||||||
.ui-state-default a:link, |
|
||||||
.ui-state-default a:visited { |
|
||||||
color: #555555/*{fcDefault}*/; |
|
||||||
text-decoration: none; |
|
||||||
} |
|
||||||
.ui-state-hover, |
|
||||||
.ui-widget-content .ui-state-hover, |
|
||||||
.ui-widget-header .ui-state-hover, |
|
||||||
.ui-state-focus, |
|
||||||
.ui-widget-content .ui-state-focus, |
|
||||||
.ui-widget-header .ui-state-focus { |
|
||||||
border: 1px solid #999999/*{borderColorHover}*/; |
|
||||||
background: #dadada/*{bgColorHover}*/; |
|
||||||
font-weight: normal/*{fwDefault}*/; |
|
||||||
color: #212121/*{fcHover}*/; |
|
||||||
} |
|
||||||
.ui-state-hover a, |
|
||||||
.ui-state-hover a:hover, |
|
||||||
.ui-state-hover a:link, |
|
||||||
.ui-state-hover a:visited, |
|
||||||
.ui-state-focus a, |
|
||||||
.ui-state-focus a:hover, |
|
||||||
.ui-state-focus a:link, |
|
||||||
.ui-state-focus a:visited { |
|
||||||
color: #212121/*{fcHover}*/; |
|
||||||
text-decoration: none; |
|
||||||
} |
|
||||||
.ui-state-active, |
|
||||||
.ui-widget-content .ui-state-active, |
|
||||||
.ui-widget-header .ui-state-active { |
|
||||||
border: 1px solid #aaaaaa/*{borderColorActive}*/; |
|
||||||
background: #ffffff/*{bgColorActive}*/; |
|
||||||
font-weight: normal/*{fwDefault}*/; |
|
||||||
color: #212121/*{fcActive}*/; |
|
||||||
} |
|
||||||
.ui-state-active a, |
|
||||||
.ui-state-active a:link, |
|
||||||
.ui-state-active a:visited { |
|
||||||
color: #212121/*{fcActive}*/; |
|
||||||
text-decoration: none; |
|
||||||
} |
|
||||||
|
|
||||||
/* Interaction Cues |
|
||||||
----------------------------------*/ |
|
||||||
.ui-state-highlight, |
|
||||||
.ui-widget-content .ui-state-highlight, |
|
||||||
.ui-widget-header .ui-state-highlight { |
|
||||||
border: 1px solid #fcefa1/*{borderColorHighlight}*/; |
|
||||||
background: #fbf9ee/*{bgColorHighlight}*/; |
|
||||||
color: #363636/*{fcHighlight}*/; |
|
||||||
} |
|
||||||
.ui-state-highlight a, |
|
||||||
.ui-widget-content .ui-state-highlight a, |
|
||||||
.ui-widget-header .ui-state-highlight a { |
|
||||||
color: #363636/*{fcHighlight}*/; |
|
||||||
} |
|
||||||
.ui-state-error, |
|
||||||
.ui-widget-content .ui-state-error, |
|
||||||
.ui-widget-header .ui-state-error { |
|
||||||
border: 1px solid #cd0a0a/*{borderColorError}*/; |
|
||||||
background: #fef1ec/*{bgColorError}*/; |
|
||||||
color: #cd0a0a/*{fcError}*/; |
|
||||||
} |
|
||||||
.ui-state-error a, |
|
||||||
.ui-widget-content .ui-state-error a, |
|
||||||
.ui-widget-header .ui-state-error a { |
|
||||||
color: #cd0a0a/*{fcError}*/; |
|
||||||
} |
|
||||||
.ui-state-error-text, |
|
||||||
.ui-widget-content .ui-state-error-text, |
|
||||||
.ui-widget-header .ui-state-error-text { |
|
||||||
color: #cd0a0a/*{fcError}*/; |
|
||||||
} |
|
||||||
.ui-priority-primary, |
|
||||||
.ui-widget-content .ui-priority-primary, |
|
||||||
.ui-widget-header .ui-priority-primary { |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
.ui-priority-secondary, |
|
||||||
.ui-widget-content .ui-priority-secondary, |
|
||||||
.ui-widget-header .ui-priority-secondary { |
|
||||||
opacity: .7; |
|
||||||
font-weight: normal; |
|
||||||
} |
|
||||||
.ui-state-disabled, |
|
||||||
.ui-widget-content .ui-state-disabled, |
|
||||||
.ui-widget-header .ui-state-disabled { |
|
||||||
opacity: .35; |
|
||||||
background-image: none; |
|
||||||
} |
|
||||||
|
|
||||||
/* Icons |
|
||||||
----------------------------------*/ |
|
||||||
|
|
||||||
/* states and images */ |
|
||||||
.ui-icon { |
|
||||||
width: 16px; |
|
||||||
height: 16px; |
|
||||||
} |
|
||||||
.ui-icon, |
|
||||||
.ui-widget-content .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_222222_256x240.png')/*{iconsContent}*/; |
|
||||||
} |
|
||||||
.ui-widget-header .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_222222_256x240.png')/*{iconsHeader}*/; |
|
||||||
} |
|
||||||
.ui-state-default .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_888888_256x240.png')/*{iconsDefault}*/; |
|
||||||
} |
|
||||||
.ui-state-hover .ui-icon, |
|
||||||
.ui-state-focus .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_454545_256x240.png')/*{iconsHover}*/; |
|
||||||
} |
|
||||||
.ui-state-active .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_454545_256x240.png')/*{iconsActive}*/; |
|
||||||
} |
|
||||||
.ui-state-highlight .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_2e83ff_256x240.png')/*{iconsHighlight}*/; |
|
||||||
} |
|
||||||
.ui-state-error .ui-icon, |
|
||||||
.ui-state-error-text .ui-icon { |
|
||||||
background-image: image-url('jquery-ui/ui-icons_cd0a0a_256x240.png')/*{iconsError}*/; |
|
||||||
} |
|
||||||
|
|
||||||
/* positioning */ |
|
||||||
.ui-icon-blank { background-position: 16px 16px; } |
|
||||||
.ui-icon-carat-1-n { background-position: 0 0; } |
|
||||||
.ui-icon-carat-1-ne { background-position: -16px 0; } |
|
||||||
.ui-icon-carat-1-e { background-position: -32px 0; } |
|
||||||
.ui-icon-carat-1-se { background-position: -48px 0; } |
|
||||||
.ui-icon-carat-1-s { background-position: -64px 0; } |
|
||||||
.ui-icon-carat-1-sw { background-position: -80px 0; } |
|
||||||
.ui-icon-carat-1-w { background-position: -96px 0; } |
|
||||||
.ui-icon-carat-1-nw { background-position: -112px 0; } |
|
||||||
.ui-icon-carat-2-n-s { background-position: -128px 0; } |
|
||||||
.ui-icon-carat-2-e-w { background-position: -144px 0; } |
|
||||||
.ui-icon-triangle-1-n { background-position: 0 -16px; } |
|
||||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; } |
|
||||||
.ui-icon-triangle-1-e { background-position: -32px -16px; } |
|
||||||
.ui-icon-triangle-1-se { background-position: -48px -16px; } |
|
||||||
.ui-icon-triangle-1-s { background-position: -64px -16px; } |
|
||||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; } |
|
||||||
.ui-icon-triangle-1-w { background-position: -96px -16px; } |
|
||||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; } |
|
||||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; } |
|
||||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; } |
|
||||||
.ui-icon-arrow-1-n { background-position: 0 -32px; } |
|
||||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; } |
|
||||||
.ui-icon-arrow-1-e { background-position: -32px -32px; } |
|
||||||
.ui-icon-arrow-1-se { background-position: -48px -32px; } |
|
||||||
.ui-icon-arrow-1-s { background-position: -64px -32px; } |
|
||||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; } |
|
||||||
.ui-icon-arrow-1-w { background-position: -96px -32px; } |
|
||||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; } |
|
||||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; } |
|
||||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } |
|
||||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; } |
|
||||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } |
|
||||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; } |
|
||||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; } |
|
||||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; } |
|
||||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; } |
|
||||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; } |
|
||||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } |
|
||||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; } |
|
||||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; } |
|
||||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; } |
|
||||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } |
|
||||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; } |
|
||||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } |
|
||||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } |
|
||||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } |
|
||||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } |
|
||||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } |
|
||||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } |
|
||||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } |
|
||||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } |
|
||||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } |
|
||||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } |
|
||||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } |
|
||||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } |
|
||||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } |
|
||||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } |
|
||||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } |
|
||||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } |
|
||||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } |
|
||||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } |
|
||||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } |
|
||||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } |
|
||||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } |
|
||||||
.ui-icon-arrow-4 { background-position: 0 -80px; } |
|
||||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; } |
|
||||||
.ui-icon-extlink { background-position: -32px -80px; } |
|
||||||
.ui-icon-newwin { background-position: -48px -80px; } |
|
||||||
.ui-icon-refresh { background-position: -64px -80px; } |
|
||||||
.ui-icon-shuffle { background-position: -80px -80px; } |
|
||||||
.ui-icon-transfer-e-w { background-position: -96px -80px; } |
|
||||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; } |
|
||||||
.ui-icon-folder-collapsed { background-position: 0 -96px; } |
|
||||||
.ui-icon-folder-open { background-position: -16px -96px; } |
|
||||||
.ui-icon-document { background-position: -32px -96px; } |
|
||||||
.ui-icon-document-b { background-position: -48px -96px; } |
|
||||||
.ui-icon-note { background-position: -64px -96px; } |
|
||||||
.ui-icon-mail-closed { background-position: -80px -96px; } |
|
||||||
.ui-icon-mail-open { background-position: -96px -96px; } |
|
||||||
.ui-icon-suitcase { background-position: -112px -96px; } |
|
||||||
.ui-icon-comment { background-position: -128px -96px; } |
|
||||||
.ui-icon-person { background-position: -144px -96px; } |
|
||||||
.ui-icon-print { background-position: -160px -96px; } |
|
||||||
.ui-icon-trash { background-position: -176px -96px; } |
|
||||||
.ui-icon-locked { background-position: -192px -96px; } |
|
||||||
.ui-icon-unlocked { background-position: -208px -96px; } |
|
||||||
.ui-icon-bookmark { background-position: -224px -96px; } |
|
||||||
.ui-icon-tag { background-position: -240px -96px; } |
|
||||||
.ui-icon-home { background-position: 0 -112px; } |
|
||||||
.ui-icon-flag { background-position: -16px -112px; } |
|
||||||
.ui-icon-calendar { background-position: -32px -112px; } |
|
||||||
.ui-icon-cart { background-position: -48px -112px; } |
|
||||||
.ui-icon-pencil { background-position: -64px -112px; } |
|
||||||
.ui-icon-clock { background-position: -80px -112px; } |
|
||||||
.ui-icon-disk { background-position: -96px -112px; } |
|
||||||
.ui-icon-calculator { background-position: -112px -112px; } |
|
||||||
.ui-icon-zoomin { background-position: -128px -112px; } |
|
||||||
.ui-icon-zoomout { background-position: -144px -112px; } |
|
||||||
.ui-icon-search { background-position: -160px -112px; } |
|
||||||
.ui-icon-wrench { background-position: -176px -112px; } |
|
||||||
.ui-icon-gear { background-position: -192px -112px; } |
|
||||||
.ui-icon-heart { background-position: -208px -112px; } |
|
||||||
.ui-icon-star { background-position: -224px -112px; } |
|
||||||
.ui-icon-link { background-position: -240px -112px; } |
|
||||||
.ui-icon-cancel { background-position: 0 -128px; } |
|
||||||
.ui-icon-plus { background-position: -16px -128px; } |
|
||||||
.ui-icon-plusthick { background-position: -32px -128px; } |
|
||||||
.ui-icon-minus { background-position: -48px -128px; } |
|
||||||
.ui-icon-minusthick { background-position: -64px -128px; } |
|
||||||
.ui-icon-close { background-position: -80px -128px; } |
|
||||||
.ui-icon-closethick { background-position: -96px -128px; } |
|
||||||
.ui-icon-key { background-position: -112px -128px; } |
|
||||||
.ui-icon-lightbulb { background-position: -128px -128px; } |
|
||||||
.ui-icon-scissors { background-position: -144px -128px; } |
|
||||||
.ui-icon-clipboard { background-position: -160px -128px; } |
|
||||||
.ui-icon-copy { background-position: -176px -128px; } |
|
||||||
.ui-icon-contact { background-position: -192px -128px; } |
|
||||||
.ui-icon-image { background-position: -208px -128px; } |
|
||||||
.ui-icon-video { background-position: -224px -128px; } |
|
||||||
.ui-icon-script { background-position: -240px -128px; } |
|
||||||
.ui-icon-alert { background-position: 0 -144px; } |
|
||||||
.ui-icon-info { background-position: -16px -144px; } |
|
||||||
.ui-icon-notice { background-position: -32px -144px; } |
|
||||||
.ui-icon-help { background-position: -48px -144px; } |
|
||||||
.ui-icon-check { background-position: -64px -144px; } |
|
||||||
.ui-icon-bullet { background-position: -80px -144px; } |
|
||||||
.ui-icon-radio-on { background-position: -96px -144px; } |
|
||||||
.ui-icon-radio-off { background-position: -112px -144px; } |
|
||||||
.ui-icon-pin-w { background-position: -128px -144px; } |
|
||||||
.ui-icon-pin-s { background-position: -144px -144px; } |
|
||||||
.ui-icon-play { background-position: 0 -160px; } |
|
||||||
.ui-icon-pause { background-position: -16px -160px; } |
|
||||||
.ui-icon-seek-next { background-position: -32px -160px; } |
|
||||||
.ui-icon-seek-prev { background-position: -48px -160px; } |
|
||||||
.ui-icon-seek-end { background-position: -64px -160px; } |
|
||||||
.ui-icon-seek-start { background-position: -80px -160px; } |
|
||||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ |
|
||||||
.ui-icon-seek-first { background-position: -80px -160px; } |
|
||||||
.ui-icon-stop { background-position: -96px -160px; } |
|
||||||
.ui-icon-eject { background-position: -112px -160px; } |
|
||||||
.ui-icon-volume-off { background-position: -128px -160px; } |
|
||||||
.ui-icon-volume-on { background-position: -144px -160px; } |
|
||||||
.ui-icon-power { background-position: 0 -176px; } |
|
||||||
.ui-icon-signal-diag { background-position: -16px -176px; } |
|
||||||
.ui-icon-signal { background-position: -32px -176px; } |
|
||||||
.ui-icon-battery-0 { background-position: -48px -176px; } |
|
||||||
.ui-icon-battery-1 { background-position: -64px -176px; } |
|
||||||
.ui-icon-battery-2 { background-position: -80px -176px; } |
|
||||||
.ui-icon-battery-3 { background-position: -96px -176px; } |
|
||||||
.ui-icon-circle-plus { background-position: 0 -192px; } |
|
||||||
.ui-icon-circle-minus { background-position: -16px -192px; } |
|
||||||
.ui-icon-circle-close { background-position: -32px -192px; } |
|
||||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; } |
|
||||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; } |
|
||||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; } |
|
||||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; } |
|
||||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; } |
|
||||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; } |
|
||||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; } |
|
||||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; } |
|
||||||
.ui-icon-circle-zoomin { background-position: -176px -192px; } |
|
||||||
.ui-icon-circle-zoomout { background-position: -192px -192px; } |
|
||||||
.ui-icon-circle-check { background-position: -208px -192px; } |
|
||||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; } |
|
||||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; } |
|
||||||
.ui-icon-circlesmall-close { background-position: -32px -208px; } |
|
||||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; } |
|
||||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; } |
|
||||||
.ui-icon-squaresmall-close { background-position: -80px -208px; } |
|
||||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } |
|
||||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } |
|
||||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; } |
|
||||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } |
|
||||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } |
|
||||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; } |
|
||||||
|
|
||||||
|
|
||||||
/* Misc visuals |
|
||||||
----------------------------------*/ |
|
||||||
|
|
||||||
/* Corner radius */ |
|
||||||
.ui-corner-all, |
|
||||||
.ui-corner-top, |
|
||||||
.ui-corner-left, |
|
||||||
.ui-corner-tl { |
|
||||||
border-top-left-radius: 4px/*{cornerRadius}*/; |
|
||||||
} |
|
||||||
.ui-corner-all, |
|
||||||
.ui-corner-top, |
|
||||||
.ui-corner-right, |
|
||||||
.ui-corner-tr { |
|
||||||
border-top-right-radius: 4px/*{cornerRadius}*/; |
|
||||||
} |
|
||||||
.ui-corner-all, |
|
||||||
.ui-corner-bottom, |
|
||||||
.ui-corner-left, |
|
||||||
.ui-corner-bl { |
|
||||||
border-bottom-left-radius: 4px/*{cornerRadius}*/; |
|
||||||
} |
|
||||||
.ui-corner-all, |
|
||||||
.ui-corner-bottom, |
|
||||||
.ui-corner-right, |
|
||||||
.ui-corner-br { |
|
||||||
border-bottom-right-radius: 4px/*{cornerRadius}*/; |
|
||||||
} |
|
||||||
|
|
||||||
/* Overlays */ |
|
||||||
.ui-widget-overlay { |
|
||||||
background: #aaaaaa/*{bgColorOverlay}*/; |
|
||||||
opacity: .3/*{opacityOverlay}*/; |
|
||||||
} |
|
||||||
.ui-widget-shadow { |
|
||||||
margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; |
|
||||||
padding: 8px/*{thicknessShadow}*/; |
|
||||||
background: #aaaaaa/*{bgColorShadow}*/; |
|
||||||
opacity: .3/*{opacityShadow}*/; |
|
||||||
border-radius: 8px/*{cornerRadiusShadow}*/; |
|
||||||
} |
|
@ -1,49 +0,0 @@ |
|||||||
// Foundation for Apps |
|
||||||
// by ZURB |
|
||||||
// foundation.zurb.com |
|
||||||
// Licensed under MIT Open Source |
|
||||||
|
|
||||||
$foundation-version: '1.1.0'; |
|
||||||
|
|
||||||
// Make sure the charset is set appropriately |
|
||||||
@charset "UTF-8"; |
|
||||||
|
|
||||||
// Libraries (let's make Normalize an external dependency eventually) |
|
||||||
@import |
|
||||||
"vendor/normalize"; |
|
||||||
|
|
||||||
// Helpers |
|
||||||
@import |
|
||||||
"helpers/functions", |
|
||||||
"helpers/mixins", |
|
||||||
"helpers/breakpoints", |
|
||||||
"helpers/images"; |
|
||||||
|
|
||||||
// Global styles |
|
||||||
@import |
|
||||||
"global"; |
|
||||||
|
|
||||||
// Components |
|
||||||
@import |
|
||||||
"components/action-sheet", |
|
||||||
"components/block-list", |
|
||||||
"components/button", |
|
||||||
"components/button-group", |
|
||||||
"components/card", |
|
||||||
"components/extras", |
|
||||||
"components/forms", |
|
||||||
"components/grid", |
|
||||||
"components/title-bar", |
|
||||||
"components/label", |
|
||||||
"components/list", |
|
||||||
"components/menu-bar", |
|
||||||
"components/modal", |
|
||||||
"components/motion", |
|
||||||
"components/notification", |
|
||||||
"components/off-canvas", |
|
||||||
"components/popup", |
|
||||||
"components/switch", |
|
||||||
"components/tabs", |
|
||||||
"components/accordion", |
|
||||||
"components/typography", |
|
||||||
"components/utilities"; |
|
@ -0,0 +1,89 @@ |
|||||||
|
#-- copyright |
||||||
|
# OpenProject is an open source project management software. |
||||||
|
# Copyright (C) 2012-2020 the OpenProject GmbH |
||||||
|
# |
||||||
|
# This program is free software; you can redistribute it and/or |
||||||
|
# modify it under the terms of the GNU General Public License version 3. |
||||||
|
# |
||||||
|
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
||||||
|
# Copyright (C) 2006-2017 Jean-Philippe Lang |
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team |
||||||
|
# |
||||||
|
# This program is free software; you can redistribute it and/or |
||||||
|
# modify it under the terms of the GNU General Public License |
||||||
|
# as published by the Free Software Foundation; either version 2 |
||||||
|
# of the License, or (at your option) any later version. |
||||||
|
# |
||||||
|
# This program is distributed in the hope that it will be useful, |
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
# GNU General Public License for more details. |
||||||
|
# |
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with this program; if not, write to the Free Software |
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||||
|
# |
||||||
|
# See docs/COPYRIGHT.rdoc for more details. |
||||||
|
#++ |
||||||
|
|
||||||
|
module Design |
||||||
|
class UpdateDesignService |
||||||
|
attr_reader :params |
||||||
|
|
||||||
|
def initialize(params) |
||||||
|
@params = params |
||||||
|
end |
||||||
|
|
||||||
|
def call |
||||||
|
CustomStyle.transaction do |
||||||
|
set_logo |
||||||
|
set_colors |
||||||
|
set_theme |
||||||
|
|
||||||
|
custom_style.save! |
||||||
|
|
||||||
|
ServiceResult.new success: true, result: custom_style |
||||||
|
end |
||||||
|
rescue StandardError => e |
||||||
|
ServiceResult.new success: false, message: e.message |
||||||
|
end |
||||||
|
|
||||||
|
private |
||||||
|
|
||||||
|
def set_logo |
||||||
|
custom_style.theme_logo = params[:logo].presence |
||||||
|
end |
||||||
|
|
||||||
|
def set_colors |
||||||
|
return unless params[:colors] |
||||||
|
|
||||||
|
# reset all colors if a new theme is set |
||||||
|
if params[:theme].present? |
||||||
|
DesignColor.delete_all |
||||||
|
end |
||||||
|
|
||||||
|
params[:colors].each do |param_variable, param_hexcode| |
||||||
|
if design_color = DesignColor.find_by(variable: param_variable) |
||||||
|
if param_hexcode.blank? |
||||||
|
design_color.destroy |
||||||
|
elsif design_color.hexcode != param_hexcode |
||||||
|
design_color.hexcode = param_hexcode |
||||||
|
design_color.save |
||||||
|
end |
||||||
|
else |
||||||
|
# create that design_color |
||||||
|
design_color = DesignColor.new variable: param_variable, hexcode: param_hexcode |
||||||
|
design_color.save |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def set_theme |
||||||
|
custom_style.theme = params[:theme].presence |
||||||
|
end |
||||||
|
|
||||||
|
def custom_style |
||||||
|
@custom_style ||= (CustomStyle.current || CustomStyle.create!) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -1,41 +0,0 @@ |
|||||||
<%#-- copyright |
|
||||||
OpenProject is an open source project management software. |
|
||||||
Copyright (C) 2012-2020 the OpenProject GmbH |
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or |
|
||||||
modify it under the terms of the GNU General Public License version 3. |
|
||||||
|
|
||||||
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
|
||||||
Copyright (C) 2006-2017 Jean-Philippe Lang |
|
||||||
Copyright (C) 2010-2013 the ChiliProject Team |
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or |
|
||||||
modify it under the terms of the GNU General Public License |
|
||||||
as published by the Free Software Foundation; either version 2 |
|
||||||
of the License, or (at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program; if not, write to the Free Software |
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
||||||
|
|
||||||
See docs/COPYRIGHT.rdoc for more details. |
|
||||||
|
|
||||||
++#%> |
|
||||||
|
|
||||||
<% texts.each_pair do |caption, text| %> |
|
||||||
<fieldset class="preview"> |
|
||||||
<legend class="preview--legend"><%= "#{l(:label_preview)} - #{caption}" %></legend> |
|
||||||
<% if text.blank? %> |
|
||||||
<span class="preview--nothing-to-preview"><%= l(:nothing_to_preview) %></span> |
|
||||||
<% else %> |
|
||||||
<div class="wiki"> |
|
||||||
<%= format_text text, attachments: attachments, object: previewed %> |
|
||||||
</div> |
|
||||||
<% end %> |
|
||||||
</fieldset> |
|
||||||
<% end %> |
|
@ -0,0 +1,110 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<base href="/" /> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta content="ie=edge" http-equiv="x-ua-compatible"> |
||||||
|
<meta content="width=device-width,initial-scale=1" name="viewport"> |
||||||
|
<meta content="livingstyleguide.org <%= LivingStyleGuide::VERSION %>" name="generator"> |
||||||
|
<title>Living Style Guide for OpenProject</title> |
||||||
|
<script src="http://localhost:4200/assets/frontend/vendor.js"></script> |
||||||
|
<script src="http://localhost:4200/assets/frontend/polyfills.js"></script> |
||||||
|
<script src="http://localhost:4200/assets/frontend/runtime.js"></script> |
||||||
|
<script src="http://localhost:4200/assets/frontend/main.js"></script> |
||||||
|
<script src="http://localhost:4200/assets/frontend/styles.js"></script> |
||||||
|
<style> |
||||||
|
body { |
||||||
|
max-width: 65vw; |
||||||
|
margin: 0 auto; |
||||||
|
font-family: Lato; |
||||||
|
font-size: 16px; |
||||||
|
background-color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.lsg-code { |
||||||
|
display: block; |
||||||
|
margin: 10px 0; |
||||||
|
} |
||||||
|
|
||||||
|
.styleguide-banner { |
||||||
|
height: 280px; |
||||||
|
padding: 200px 0 0; |
||||||
|
background: url('/assets/styleguide/logo_openproject.png'); |
||||||
|
background-position: top center; |
||||||
|
background-repeat: no-repeat; |
||||||
|
} |
||||||
|
|
||||||
|
.styleguide-banner--text { |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
.styleguide-nav--menu-items { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
list-style: none; |
||||||
|
} |
||||||
|
|
||||||
|
.livingstyleguide--code-block { |
||||||
|
max-height: 300px; |
||||||
|
} |
||||||
|
|
||||||
|
.livingstyleguide--example { |
||||||
|
overflow: visible; |
||||||
|
} |
||||||
|
|
||||||
|
.lsg-search-box { |
||||||
|
width: 40%; |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-list { |
||||||
|
display: flex; |
||||||
|
flex-flow: row wrap; |
||||||
|
width: 640px; |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-list li { |
||||||
|
flex: 1; |
||||||
|
flex-basis: 15%; |
||||||
|
display: block; |
||||||
|
text-align: center; |
||||||
|
margin: 10px; |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-list span.icon { |
||||||
|
display: block; |
||||||
|
font-size: 30px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body class="lsg"> |
||||||
|
<header class="livingstyleguide--header grid-content"> |
||||||
|
<div class="styleguide-banner"> |
||||||
|
<h1 class="styleguide-banner--text">Living Style Guide</h1> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
|
||||||
|
<nav class="styleguide-nav"> |
||||||
|
<ul class="styleguide-nav--menu-items"> |
||||||
|
<li><a target="_self" href="#color-variables">Colors</a></li> |
||||||
|
<li><a target="_self" href="#fonts">Fonts</a></li> |
||||||
|
<li><a target="_self" href="#forms">Forms</a></li> |
||||||
|
<li><a target="_self" href="#notifications">Notifications</a></li> |
||||||
|
<li><a target="_self" href="#buttons">Buttons</a></li> |
||||||
|
<li><a target="_self" href="#pagination">Pagination</a></li> |
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
<section class="livingstyleguide--intro grid-content"> |
||||||
|
<p> </p> |
||||||
|
</section> |
||||||
|
<article class="lsg-container"> |
||||||
|
<%= html %> |
||||||
|
</article> |
||||||
|
<footer class="livingstyleguide--footer grid-content"> |
||||||
|
Copyright © 2020 OpenProject - All rights reserved. |
||||||
|
</footer> |
||||||
|
</body> |
||||||
|
</html> |
@ -1,56 +0,0 @@ |
|||||||
#-- encoding: UTF-8 |
|
||||||
#-- copyright |
|
||||||
# OpenProject is an open source project management software. |
|
||||||
# Copyright (C) 2012-2020 the OpenProject GmbH |
|
||||||
# |
|
||||||
# This program is free software; you can redistribute it and/or |
|
||||||
# modify it under the terms of the GNU General Public License version 3. |
|
||||||
# |
|
||||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
|
||||||
# Copyright (C) 2006-2017 Jean-Philippe Lang |
|
||||||
# Copyright (C) 2010-2013 the ChiliProject Team |
|
||||||
# |
|
||||||
# This program is free software; you can redistribute it and/or |
|
||||||
# modify it under the terms of the GNU General Public License |
|
||||||
# as published by the Free Software Foundation; either version 2 |
|
||||||
# of the License, or (at your option) any later version. |
|
||||||
# |
|
||||||
# This program is distributed in the hope that it will be useful, |
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
# GNU General Public License for more details. |
|
||||||
# |
|
||||||
# You should have received a copy of the GNU General Public License |
|
||||||
# along with this program; if not, write to the Free Software |
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
||||||
# |
|
||||||
# See docs/COPYRIGHT.rdoc for more details. |
|
||||||
#++ |
|
||||||
|
|
||||||
Capybara.register_driver :selenium_with_firebug do |app| |
|
||||||
Capybara::Selenium::Driver |
|
||||||
profile = Selenium::WebDriver::Firefox::Profile.new |
|
||||||
profile.add_extension(File.expand_path('../firebug-1.11.4.xpi', __FILE__)) |
|
||||||
profile.add_extension(File.expand_path('../firepath-0.9.7-fx.xpi', __FILE__)) |
|
||||||
|
|
||||||
# Prevent "Welcome!" tab |
|
||||||
profile['extensions.firebug.currentVersion'] = '999' |
|
||||||
|
|
||||||
# Enable for all sites. |
|
||||||
profile['extensions.firebug.allPagesActivation'] = 'on' |
|
||||||
|
|
||||||
# Enable all features. |
|
||||||
['console', 'net', 'script'].each do |feature| |
|
||||||
profile["extensions.firebug.#{feature}.enableSites"] = true |
|
||||||
end |
|
||||||
|
|
||||||
profile['intl.accept_languages'] = 'en,en-us' |
|
||||||
|
|
||||||
Capybara::Selenium::Driver.new(app, |
|
||||||
browser: :firefox, |
|
||||||
profile: profile) |
|
||||||
end |
|
||||||
|
|
||||||
Before '@firebug' do |
|
||||||
Capybara.current_driver = :selenium_with_firebug |
|
||||||
end |
|
@ -1,111 +0,0 @@ |
|||||||
//-- copyright
|
|
||||||
// OpenProject is an open source project management software.
|
|
||||||
// Copyright (C) 2012-2020 the OpenProject GmbH
|
|
||||||
//
|
|
||||||
// This program is free software; you can redistribute it and/or
|
|
||||||
// modify it under the terms of the GNU General Public License version 3.
|
|
||||||
//
|
|
||||||
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
|
||||||
// Copyright (C) 2006-2017 Jean-Philippe Lang
|
|
||||||
// Copyright (C) 2010-2013 the ChiliProject Team
|
|
||||||
//
|
|
||||||
// This program is free software; you can redistribute it and/or
|
|
||||||
// modify it under the terms of the GNU General Public License
|
|
||||||
// as published by the Free Software Foundation; either version 2
|
|
||||||
// of the License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program; if not, write to the Free Software
|
|
||||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
//
|
|
||||||
// See docs/COPYRIGHT.rdoc for more details.
|
|
||||||
//++
|
|
||||||
jQuery(function($) { |
|
||||||
var regions = $.datepicker.regional; |
|
||||||
var regional = regions[I18n.locale] || regions['']; |
|
||||||
|
|
||||||
// see ./app/helpers/application_helper.rb:508
|
|
||||||
if (typeof I18n.firstDayOfWeek === 'number') { |
|
||||||
regional.firstDay = I18n.firstDayOfWeek; |
|
||||||
} |
|
||||||
|
|
||||||
$.datepicker.setDefaults(regional); |
|
||||||
|
|
||||||
var gotoToday = $.datepicker._gotoToday; |
|
||||||
|
|
||||||
$.datepicker._gotoToday = function (id) { |
|
||||||
gotoToday.call(this, id); |
|
||||||
var target = $(id), |
|
||||||
inst = this._getInst(target[0]), |
|
||||||
dateStr = $.datepicker._formatDate(inst); |
|
||||||
target.val(dateStr); |
|
||||||
target.blur(); |
|
||||||
$.datepicker._hideDatepicker(); |
|
||||||
}; |
|
||||||
|
|
||||||
var defaults = { |
|
||||||
showWeek: true, |
|
||||||
changeMonth: true, |
|
||||||
changeYear: true, |
|
||||||
yearRange: 'c-100:c+10', |
|
||||||
dateFormat: 'yy-mm-dd', |
|
||||||
showButtonPanel: true, |
|
||||||
calculateWeek: function (day) { |
|
||||||
var dayOfWeek = new Date(+day); |
|
||||||
|
|
||||||
if (day.getDay() != 1) { |
|
||||||
dayOfWeek.setDate(day.getDate() - day.getDay() + 1); |
|
||||||
} |
|
||||||
|
|
||||||
return $.datepicker.iso8601Week(dayOfWeek); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
$.datepicker.setDefaults(defaults); |
|
||||||
|
|
||||||
$.extend($.datepicker, { |
|
||||||
|
|
||||||
_originalGotoToday: $.datepicker._gotoToday, |
|
||||||
_gotoToday: function(id) { |
|
||||||
var target = $(id), |
|
||||||
inst = this._getInst(target[0]), |
|
||||||
today = new Date(), |
|
||||||
date = this._formatDate(inst, today.getDate(), today.getMonth(), today.getFullYear()); |
|
||||||
this._originalGotoToday(id); |
|
||||||
this._selectDate(id, date); |
|
||||||
}, |
|
||||||
|
|
||||||
// Reference the orignal function so we can override it and call it later
|
|
||||||
_inlineDatepicker2: $.datepicker._inlineDatepicker, |
|
||||||
|
|
||||||
// Override the _inlineDatepicker method
|
|
||||||
_inlineDatepicker: function (target, inst) { |
|
||||||
|
|
||||||
// Call the original
|
|
||||||
this._inlineDatepicker2(target, inst); |
|
||||||
|
|
||||||
var beforeShow = $.datepicker._get(inst, 'beforeShow'); |
|
||||||
|
|
||||||
if (beforeShow) { |
|
||||||
beforeShow.apply(target, [target, inst]); |
|
||||||
} |
|
||||||
}, |
|
||||||
_checkOffsetOriginal: $.datepicker._checkOffset, |
|
||||||
|
|
||||||
_checkOffset: function(inst, offset, isFixed) { |
|
||||||
var _offset = $.datepicker._checkOffsetOriginal(inst, offset, isFixed); |
|
||||||
var alterOffset = this._get(inst, 'alterOffset'); |
|
||||||
if (alterOffset) { |
|
||||||
var inp = inst.input ? inst.input[0] : null; |
|
||||||
// trigger custom callback
|
|
||||||
return alterOffset.apply(inp, [_offset]); |
|
||||||
} |
|
||||||
return _offset; |
|
||||||
} |
|
||||||
}); |
|
||||||
}); |
|
@ -0,0 +1,19 @@ |
|||||||
|
import {Component, OnInit, ViewEncapsulation} from "@angular/core"; |
||||||
|
|
||||||
|
export const backlogsPageComponentSelector = 'op-backlogs-page'; |
||||||
|
|
||||||
|
@Component({ |
||||||
|
selector: backlogsPageComponentSelector, |
||||||
|
// Empty wrapper around legacy backlogs for CSS loading
|
||||||
|
// that got removed in the Rails assets pipeline
|
||||||
|
encapsulation: ViewEncapsulation.None, |
||||||
|
template: '', |
||||||
|
styleUrls: [ |
||||||
|
'./styles/backlogs.sass' |
||||||
|
] |
||||||
|
}) |
||||||
|
export class BacklogsPageComponent implements OnInit { |
||||||
|
ngOnInit() { |
||||||
|
document.getElementById('projected-content')!.hidden = false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,185 @@ |
|||||||
|
/*-- copyright |
||||||
|
OpenProject Backlogs Plugin |
||||||
|
|
||||||
|
Copyright (C)2013-2014 the OpenProject Foundation (OPF) |
||||||
|
Copyright (C)2011 Stephan Eckardt, Tim Felgentreff, Marnen Laibow-Koser, Sandro Munda |
||||||
|
Copyright (C)2010-2011 friflaj |
||||||
|
Copyright (C)2010 Maxime Guilbot, Andrew Vit, Joakim Kolsjö, ibussieres, Daniel Passos, Jason Vasquez, jpic, Emiliano Heyns |
||||||
|
Copyright (C)2009-2010 Mark Maglana |
||||||
|
Copyright (C)2009 Joe Heck, Nate Lowrie |
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under |
||||||
|
the terms of the GNU General Public License version 3. |
||||||
|
|
||||||
|
OpenProject Backlogs is a derivative work based on ChiliProject Backlogs. |
||||||
|
The copyright follows: |
||||||
|
Copyright (C) 2010-2011 - Emiliano Heyns, Mark Maglana, friflaj |
||||||
|
Copyright (C) 2011 - Jens Ulferts, Gregor Schmidt - Finn GmbH - Berlin, Germany |
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or |
||||||
|
modify it under the terms of the GNU General Public License |
||||||
|
as published by the Free Software Foundation; either version 2 |
||||||
|
of the License, or (at your option) any later version. |
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with this program; if not, write to the Free Software |
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||||
|
|
||||||
|
See docs/COPYRIGHT.rdoc for more details. |
||||||
|
|
||||||
|
++*/ |
||||||
|
|
||||||
|
.jqplot-target { |
||||||
|
position: relative; |
||||||
|
color: #666; |
||||||
|
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; |
||||||
|
font-size: 1em; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-axis { |
||||||
|
font-size: .75em; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-xaxis { |
||||||
|
margin-top: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-x2axis { |
||||||
|
margin-bottom: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-yaxis { |
||||||
|
margin-right: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis { |
||||||
|
margin-left: 10px; |
||||||
|
margin-right: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick { |
||||||
|
position: absolute; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-xaxis-tick { |
||||||
|
top: 0; |
||||||
|
left: 15px; |
||||||
|
vertical-align: top; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-x2axis-tick { |
||||||
|
bottom: 0; |
||||||
|
left: 15px; |
||||||
|
vertical-align: bottom; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-yaxis-tick { |
||||||
|
right: 0; |
||||||
|
top: 15px; |
||||||
|
text-align: right; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick { |
||||||
|
left: 0; |
||||||
|
top: 15px; |
||||||
|
text-align: left; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-xaxis-label { |
||||||
|
margin-top: 10px; |
||||||
|
font-size: 11pt; |
||||||
|
position: absolute; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-x2axis-label { |
||||||
|
margin-bottom: 10px; |
||||||
|
font-size: 11pt; |
||||||
|
position: absolute; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-yaxis-label { |
||||||
|
margin-right: 10px; |
||||||
|
font-size: 11pt; |
||||||
|
position: absolute; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label { |
||||||
|
font-size: 11pt; |
||||||
|
position: absolute; |
||||||
|
} |
||||||
|
|
||||||
|
table.jqplot-table-legend, table.jqplot-cursor-legend { |
||||||
|
background-color: rgba(255, 255, 255, 0.6); |
||||||
|
border: 1px solid #ccc; |
||||||
|
position: absolute; |
||||||
|
font-size: .75em; |
||||||
|
} |
||||||
|
|
||||||
|
td.jqplot-table-legend { |
||||||
|
vertical-align: middle; |
||||||
|
} |
||||||
|
|
||||||
|
td.jqplot-table-legend > div { |
||||||
|
border: 1px solid #ccc; |
||||||
|
padding: .2em; |
||||||
|
} |
||||||
|
|
||||||
|
div.jqplot-table-legend-swatch { |
||||||
|
width: 0; |
||||||
|
height: 0; |
||||||
|
border-top-width: .35em; |
||||||
|
border-bottom-width: .35em; |
||||||
|
border-left-width: .6em; |
||||||
|
border-right-width: .6em; |
||||||
|
border-top-style: solid; |
||||||
|
border-bottom-style: solid; |
||||||
|
border-left-style: solid; |
||||||
|
border-right-style: solid; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-title { |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
padding-bottom: .5em; |
||||||
|
font-size: 1.2em; |
||||||
|
} |
||||||
|
|
||||||
|
table.jqplot-cursor-tooltip { |
||||||
|
border: 1px solid #ccc; |
||||||
|
font-size: .75em; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-cursor-tooltip { |
||||||
|
border: 1px solid #ccc; |
||||||
|
font-size: .75em; |
||||||
|
white-space: nowrap; |
||||||
|
background: rgba(208, 208, 208, 0.5); |
||||||
|
padding: 1px; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-highlighter-tooltip { |
||||||
|
border: 1px solid #ccc; |
||||||
|
font-size: .75em; |
||||||
|
white-space: nowrap; |
||||||
|
background: rgba(208, 208, 208, 0.5); |
||||||
|
padding: 1px; |
||||||
|
} |
||||||
|
|
||||||
|
.jqplot-point-label { |
||||||
|
font-size: .75em; |
||||||
|
} |
||||||
|
|
||||||
|
td.jqplot-cursor-legend-swatch { |
||||||
|
vertical-align: middle; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
div.jqplot-cursor-legend-swatch { |
||||||
|
width: 1.2em; |
||||||
|
height: .7em; |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
// -- copyright
|
||||||
|
// OpenProject is an open source project management software.
|
||||||
|
// Copyright (C) 2012-2020 the OpenProject GmbH
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License version 3.
|
||||||
|
//
|
||||||
|
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||||
|
// Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||||
|
// Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License
|
||||||
|
// as published by the Free Software Foundation; either version 2
|
||||||
|
// of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
//
|
||||||
|
// See docs/COPYRIGHT.rdoc for more details.
|
||||||
|
// ++
|
||||||
|
|
||||||
|
import {Ng2StateDeclaration, UIRouter} from "@uirouter/angular"; |
||||||
|
import {BacklogsPageComponent} from "core-app/modules/backlogs/backlogs-page/backlogs-page.component"; |
||||||
|
|
||||||
|
export const BACKLOGS_ROUTES:Ng2StateDeclaration[] = [ |
||||||
|
{ |
||||||
|
name: 'backlogs', |
||||||
|
parent: 'root', |
||||||
|
url: '/backlogs', |
||||||
|
component: BacklogsPageComponent |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: 'backlogs_sprint', |
||||||
|
parent: 'root', |
||||||
|
url: '/sprints/{sprintId:int}/taskboard', |
||||||
|
component: BacklogsPageComponent |
||||||
|
}, |
||||||
|
]; |
@ -1,5 +1,5 @@ |
|||||||
@import "layout/colors" |
@import "~global_styles/layout/colors" |
||||||
@import "layout/drop_down" |
@import "~global_styles/layout/drop_down" |
||||||
|
|
||||||
.xeokit-context-menu |
.xeokit-context-menu |
||||||
@extend .dropdown |
@extend .dropdown |
@ -1,4 +1,4 @@ |
|||||||
@import "content/tooltips" |
@import "~global_styles/content/tooltips" |
||||||
|
|
||||||
.xeokit-toolbar [data-tippy-content] |
.xeokit-toolbar [data-tippy-content] |
||||||
@extend .tooltip--bottom |
@extend .tooltip--bottom |
@ -0,0 +1,49 @@ |
|||||||
|
// -- copyright
|
||||||
|
// OpenProject is an open source project management software.
|
||||||
|
// Copyright (C) 2012-2020 the OpenProject GmbH
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License version 3.
|
||||||
|
//
|
||||||
|
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||||
|
// Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||||
|
// Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License
|
||||||
|
// as published by the Free Software Foundation; either version 2
|
||||||
|
// of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
//
|
||||||
|
// See docs/COPYRIGHT.rdoc for more details.
|
||||||
|
// ++
|
||||||
|
|
||||||
|
import {NgModule} from '@angular/core'; |
||||||
|
import {UIRouterModule} from "@uirouter/angular"; |
||||||
|
import { |
||||||
|
REPORTING_ROUTES, |
||||||
|
} from "core-app/modules/reporting/openproject-reporting.routes"; |
||||||
|
import {ReportingPageComponent} from "core-app/modules/reporting/reporting-page/reporting-page.component"; |
||||||
|
|
||||||
|
@NgModule({ |
||||||
|
imports: [ |
||||||
|
// Routes for /cost_reports
|
||||||
|
UIRouterModule.forChild({ |
||||||
|
states: REPORTING_ROUTES |
||||||
|
}), |
||||||
|
], |
||||||
|
declarations: [ |
||||||
|
ReportingPageComponent |
||||||
|
] |
||||||
|
}) |
||||||
|
export class OpenprojectReportingModule { |
||||||
|
} |
||||||
|
|
@ -0,0 +1,44 @@ |
|||||||
|
// -- copyright
|
||||||
|
// OpenProject is an open source project management software.
|
||||||
|
// Copyright (C) 2012-2020 the OpenProject GmbH
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License version 3.
|
||||||
|
//
|
||||||
|
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||||
|
// Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||||
|
// Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License
|
||||||
|
// as published by the Free Software Foundation; either version 2
|
||||||
|
// of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
//
|
||||||
|
// See docs/COPYRIGHT.rdoc for more details.
|
||||||
|
// ++
|
||||||
|
|
||||||
|
import {Ng2StateDeclaration, UIRouter} from "@uirouter/angular"; |
||||||
|
import {ReportingPageComponent} from "core-app/modules/reporting/reporting-page/reporting-page.component"; |
||||||
|
|
||||||
|
export const REPORTING_ROUTES:Ng2StateDeclaration[] = [ |
||||||
|
{ |
||||||
|
name: 'reporting', |
||||||
|
parent: 'root', |
||||||
|
url: '/cost_reports', |
||||||
|
component: ReportingPageComponent |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: 'reporting.show', |
||||||
|
url: '/:id', |
||||||
|
component: ReportingPageComponent |
||||||
|
}, |
||||||
|
]; |
@ -0,0 +1,19 @@ |
|||||||
|
import {Component, OnInit, ViewEncapsulation} from "@angular/core"; |
||||||
|
|
||||||
|
export const reportingPageComponentSelector = 'op-reporting-page'; |
||||||
|
|
||||||
|
@Component({ |
||||||
|
selector: reportingPageComponentSelector, |
||||||
|
// Empty wrapper around legacy backlogs for CSS loading
|
||||||
|
// that got removed in the Rails assets pipeline
|
||||||
|
encapsulation: ViewEncapsulation.None, |
||||||
|
template: '', |
||||||
|
styleUrls: [ |
||||||
|
'./styles/reporting.sass' |
||||||
|
] |
||||||
|
}) |
||||||
|
export class ReportingPageComponent implements OnInit { |
||||||
|
ngOnInit() { |
||||||
|
document.getElementById('projected-content')!.hidden = false; |
||||||
|
} |
||||||
|
} |
@ -1,4 +1,7 @@ |
|||||||
@import "fonts/openproject_icon_definitions" |
@import "~global_styles/fonts/openproject_icon_definitions" |
||||||
|
@import _reporting_group_by |
||||||
|
@import _reporting_table |
||||||
|
@import _reporting_table_print |
||||||
|
|
||||||
@mixin sort-icons |
@mixin sort-icons |
||||||
font-family: "openproject-icon-font" !important |
font-family: "openproject-icon-font" !important |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@ -1,2 +1,7 @@ |
|||||||
@import "../../../../app/assets/stylesheets/openproject/_mixins" |
/** |
||||||
@import "../../../../app/assets/stylesheets/content/drag_and_drop" |
* Ensure you're exposing only mixins and sass stuff here |
||||||
|
* as all CSS output will be duplicated in EVERY component |
||||||
|
* importing these helpers! |
||||||
|
*/ |
||||||
|
@import "~global_styles/openproject/_mixins" |
||||||
|
@import "~global_styles/content/drag_and_drop" |
||||||
|