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 |
||||
|
||||
@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 |
||||
@import ../../../frontend/src/global_styles/**/_*.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 "layout/drop_down" |
||||
@import "~global_styles/layout/colors" |
||||
@import "~global_styles/layout/drop_down" |
||||
|
||||
.xeokit-context-menu |
||||
@extend .dropdown |
@ -1,4 +1,4 @@ |
||||
@import "content/tooltips" |
||||
@import "~global_styles/content/tooltips" |
||||
|
||||
.xeokit-toolbar [data-tippy-content] |
||||
@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 |
||||
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" |
||||
|