Merge branch 'feature/custom-text-for-new-projects' into 'master'
Add custom brand text on new project pages Closes #15265 See merge request gitlab-org/gitlab-ce!15541
This commit is contained in:
commit
844d95fb74
|
@ -4,8 +4,8 @@ class Admin::AppearancesController < Admin::ApplicationController
|
|||
def show
|
||||
end
|
||||
|
||||
def preview
|
||||
render 'preview', layout: 'devise'
|
||||
def preview_sign_in
|
||||
render 'preview_sign_in', layout: 'devise'
|
||||
end
|
||||
|
||||
def create
|
||||
|
@ -52,7 +52,7 @@ class Admin::AppearancesController < Admin::ApplicationController
|
|||
def appearance_params
|
||||
params.require(:appearance).permit(
|
||||
:title, :description, :logo, :logo_cache, :header_logo, :header_logo_cache,
|
||||
:updated_by
|
||||
:new_project_guidelines, :updated_by
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,30 +1,26 @@
|
|||
module AppearancesHelper
|
||||
def brand_title
|
||||
if brand_item && brand_item.title
|
||||
brand_item.title
|
||||
else
|
||||
'GitLab Community Edition'
|
||||
end
|
||||
brand_item&.title.presence || 'GitLab Community Edition'
|
||||
end
|
||||
|
||||
def brand_image
|
||||
if brand_item.logo?
|
||||
image_tag brand_item.logo
|
||||
else
|
||||
nil
|
||||
end
|
||||
image_tag(brand_item.logo) if brand_item&.logo?
|
||||
end
|
||||
|
||||
def brand_text
|
||||
markdown_field(brand_item, :description)
|
||||
end
|
||||
|
||||
def brand_new_project_guidelines
|
||||
markdown_field(brand_item, :new_project_guidelines)
|
||||
end
|
||||
|
||||
def brand_item
|
||||
@appearance ||= Appearance.current
|
||||
end
|
||||
|
||||
def brand_header_logo
|
||||
if brand_item && brand_item.header_logo?
|
||||
if brand_item&.header_logo?
|
||||
image_tag brand_item.header_logo
|
||||
else
|
||||
render 'shared/logo.svg'
|
||||
|
@ -33,7 +29,7 @@ module AppearancesHelper
|
|||
|
||||
# Skip the 'GitLab' type logo when custom brand logo is set
|
||||
def brand_header_logo_type
|
||||
unless brand_item && brand_item.header_logo?
|
||||
unless brand_item&.header_logo?
|
||||
render 'shared/logo_type.svg'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,9 +2,8 @@ class Appearance < ActiveRecord::Base
|
|||
include CacheMarkdownField
|
||||
|
||||
cache_markdown_field :description
|
||||
cache_markdown_field :new_project_guidelines
|
||||
|
||||
validates :title, presence: true
|
||||
validates :description, presence: true
|
||||
validates :logo, file_size: { maximum: 1.megabyte }
|
||||
validates :header_logo, file_size: { maximum: 1.megabyte }
|
||||
|
||||
|
|
|
@ -1,6 +1,23 @@
|
|||
= form_for @appearance, url: admin_appearances_path, html: { class: 'form-horizontal'} do |f|
|
||||
= form_errors(@appearance)
|
||||
|
||||
%fieldset.app_logo
|
||||
%legend
|
||||
Navigation bar:
|
||||
.form-group
|
||||
= f.label :header_logo, 'Header logo', class: 'control-label'
|
||||
.col-sm-10
|
||||
- if @appearance.header_logo?
|
||||
= image_tag @appearance.header_logo_url, class: 'appearance-light-logo-preview'
|
||||
- if @appearance.persisted?
|
||||
%br
|
||||
= link_to 'Remove header logo', header_logos_admin_appearances_path, data: { confirm: "Header logo will be removed. Are you sure?"}, method: :delete, class: "btn btn-remove btn-sm remove-logo"
|
||||
%hr
|
||||
= f.hidden_field :header_logo_cache
|
||||
= f.file_field :header_logo, class: ""
|
||||
.hint
|
||||
Maximum file size is 1MB. Pages are optimized for a 28px tall header logo
|
||||
|
||||
%fieldset.sign-in
|
||||
%legend
|
||||
Sign in/Sign up pages:
|
||||
|
@ -28,27 +45,22 @@
|
|||
.hint
|
||||
Maximum file size is 1MB. Pages are optimized for a 640x360 px logo.
|
||||
|
||||
%fieldset.app_logo
|
||||
%fieldset
|
||||
%legend
|
||||
Navigation bar:
|
||||
New project pages:
|
||||
.form-group
|
||||
= f.label :header_logo, 'Header logo', class: 'control-label'
|
||||
= f.label :new_project_guidelines, class: 'control-label'
|
||||
.col-sm-10
|
||||
- if @appearance.header_logo?
|
||||
= image_tag @appearance.header_logo_url, class: 'appearance-light-logo-preview'
|
||||
- if @appearance.persisted?
|
||||
%br
|
||||
= link_to 'Remove header logo', header_logos_admin_appearances_path, data: { confirm: "Header logo will be removed. Are you sure?"}, method: :delete, class: "btn btn-remove btn-sm remove-logo"
|
||||
%hr
|
||||
= f.hidden_field :header_logo_cache
|
||||
= f.file_field :header_logo, class: ""
|
||||
= f.text_area :new_project_guidelines, class: "form-control", rows: 10
|
||||
.hint
|
||||
Maximum file size is 1MB. Pages are optimized for a 28px tall header logo
|
||||
Guidelines parsed with #{link_to "GitLab Flavored Markdown", help_page_path('user/markdown'), target: '_blank'}.
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Save', class: 'btn btn-save append-right-10'
|
||||
- if @appearance.persisted?
|
||||
= link_to 'Preview last save', preview_admin_appearances_path, class: 'btn', target: '_blank', rel: 'noopener noreferrer'
|
||||
Preview last save:
|
||||
= link_to 'Sign-in page', preview_sign_in_admin_appearances_path, class: 'btn', target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to 'New project page', new_project_path, class: 'btn', target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- if @appearance.updated_at
|
||||
%span.pull-right
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
.col-sm-7.brand-holder.pull-left
|
||||
%h1
|
||||
= brand_title
|
||||
- if brand_item
|
||||
= brand_image
|
||||
- if brand_item&.description?
|
||||
= brand_text
|
||||
- else
|
||||
%h3 Open source software to collaborate on code
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), #{link_to 'among other things', help_page_path("user/project/index.md", anchor: "projects-features"), target: '_blank'}.
|
||||
%p
|
||||
All features are enabled when you create a project, but you can disable the ones you don’t need in the project settings.
|
||||
= brand_new_project_guidelines
|
||||
.col-lg-9.js-toggle-container
|
||||
%ul.nav-links.gitlab-tabs{ role: 'tablist' }
|
||||
%li.active{ role: 'presentation' }
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add custom brand text on new project pages
|
||||
merge_request: 15541
|
||||
author: Markus Koller
|
||||
type: changed
|
|
@ -97,7 +97,7 @@ namespace :admin do
|
|||
|
||||
resource :appearances, only: [:show, :create, :update], path: 'appearance' do
|
||||
member do
|
||||
get :preview
|
||||
get :preview_sign_in
|
||||
delete :logo
|
||||
delete :header_logos
|
||||
end
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
class AddNewProjectGuidelinesToAppearances < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
def change
|
||||
change_table :appearances do |t|
|
||||
t.text :new_project_guidelines
|
||||
t.text :new_project_guidelines_html
|
||||
end
|
||||
end
|
||||
end
|
|
@ -36,6 +36,8 @@ ActiveRecord::Schema.define(version: 20171124150326) do
|
|||
t.datetime_with_timezone "updated_at", null: false
|
||||
t.text "description_html"
|
||||
t.integer "cached_markdown_version"
|
||||
t.text "new_project_guidelines"
|
||||
t.text "new_project_guidelines_html"
|
||||
end
|
||||
|
||||
create_table "application_settings", force: :cascade do |t|
|
||||
|
|
|
@ -189,6 +189,7 @@ have access to GitLab administration tools and settings.
|
|||
- [Issue closing pattern](administration/issue_closing_pattern.md): Customize how to close an issue from commit messages.
|
||||
- [Libravatar](customization/libravatar.md): Use Libravatar instead of Gravatar for user avatars.
|
||||
- [Welcome message](customization/welcome_message.md): Add a custom welcome message to the sign-in page.
|
||||
- [New project page](customization/new_project_page.md): Customize the new project page.
|
||||
|
||||
### Admin tools
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# Customizing the new project page
|
||||
|
||||
It is possible to add a markdown-formatted message to your GitLab
|
||||
new project page.
|
||||
|
||||
By default, the new project page shows a sidebar with general information:
|
||||
|
||||
![](new_project_page/default_new_project_page.png)
|
||||
|
||||
## Changing the appearance of the new project page
|
||||
|
||||
Navigate to the **Admin** area and go to the **Appearance** page.
|
||||
|
||||
Fill in your project guidelines:
|
||||
|
||||
![](new_project_page/appearance_settings.png)
|
||||
|
||||
After saving the page, your new project page will show the guidelines in the sidebar, below the general information:
|
||||
|
||||
![](new_project_page/custom_new_project_page.png)
|
Binary file not shown.
After Width: | Height: | Size: 70 KiB |
Binary file not shown.
After Width: | Height: | Size: 161 KiB |
Binary file not shown.
After Width: | Height: | Size: 144 KiB |
|
@ -4,5 +4,6 @@ FactoryGirl.define do
|
|||
factory :appearance do
|
||||
title "MepMep"
|
||||
description "This is my Community Edition instance"
|
||||
new_project_guidelines "Custom project guidelines"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,6 +9,7 @@ feature 'Admin Appearance' do
|
|||
|
||||
fill_in 'appearance_title', with: 'MyCompany'
|
||||
fill_in 'appearance_description', with: 'dev server'
|
||||
fill_in 'appearance_new_project_guidelines', with: 'Custom project guidelines'
|
||||
click_button 'Save'
|
||||
|
||||
expect(current_path).to eq admin_appearances_path
|
||||
|
@ -16,21 +17,39 @@ feature 'Admin Appearance' do
|
|||
|
||||
expect(page).to have_field('appearance_title', with: 'MyCompany')
|
||||
expect(page).to have_field('appearance_description', with: 'dev server')
|
||||
expect(page).to have_field('appearance_new_project_guidelines', with: 'Custom project guidelines')
|
||||
expect(page).to have_content 'Last edit'
|
||||
end
|
||||
|
||||
scenario 'Preview appearance' do
|
||||
scenario 'Preview sign-in page appearance' do
|
||||
sign_in(create(:admin))
|
||||
|
||||
visit admin_appearances_path
|
||||
click_link "Preview"
|
||||
click_link "Sign-in page"
|
||||
|
||||
expect_page_has_custom_appearance(appearance)
|
||||
expect_custom_sign_in_appearance(appearance)
|
||||
end
|
||||
|
||||
scenario 'Preview new project page appearance' do
|
||||
sign_in(create(:admin))
|
||||
|
||||
visit admin_appearances_path
|
||||
click_link "New project page"
|
||||
|
||||
expect_custom_new_project_appearance(appearance)
|
||||
end
|
||||
|
||||
scenario 'Custom sign-in page' do
|
||||
visit new_user_session_path
|
||||
expect_page_has_custom_appearance(appearance)
|
||||
|
||||
expect_custom_sign_in_appearance(appearance)
|
||||
end
|
||||
|
||||
scenario 'Custom new project page' do
|
||||
sign_in create(:user)
|
||||
visit new_project_path
|
||||
|
||||
expect_custom_new_project_appearance(appearance)
|
||||
end
|
||||
|
||||
scenario 'Appearance logo' do
|
||||
|
@ -57,11 +76,15 @@ feature 'Admin Appearance' do
|
|||
expect(page).not_to have_css(header_logo_selector)
|
||||
end
|
||||
|
||||
def expect_page_has_custom_appearance(appearance)
|
||||
def expect_custom_sign_in_appearance(appearance)
|
||||
expect(page).to have_content appearance.title
|
||||
expect(page).to have_content appearance.description
|
||||
end
|
||||
|
||||
def expect_custom_new_project_appearance(appearance)
|
||||
expect(page).to have_content appearance.new_project_guidelines
|
||||
end
|
||||
|
||||
def logo_selector
|
||||
'//img[data-src^="/uploads/-/system/appearance/logo"]'
|
||||
end
|
||||
|
|
|
@ -5,9 +5,6 @@ describe Appearance do
|
|||
|
||||
it { is_expected.to be_valid }
|
||||
|
||||
it { is_expected.to validate_presence_of(:title) }
|
||||
it { is_expected.to validate_presence_of(:description) }
|
||||
|
||||
it { is_expected.to have_many(:uploads).dependent(:destroy) }
|
||||
|
||||
describe '.current', :use_clean_rails_memory_store_caching do
|
||||
|
|
Loading…
Reference in New Issue