Skip to content
Snippets Groups Projects
Unverified Commit b8a39319 authored by Markus Koller's avatar Markus Koller
Browse files

Add custom brand text on new project pages

parent 0f3f50d1
No related branches found
No related tags found
No related merge requests found
Showing
with 109 additions and 40 deletions
Loading
Loading
@@ -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
Loading
Loading
@@ -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
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'
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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 }
 
Loading
Loading
= 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:
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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' }
Loading
Loading
---
title: Add custom brand text on new project pages
merge_request: 15541
author: Markus Koller
type: changed
Loading
Loading
@@ -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
Loading
Loading
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
Loading
Loading
@@ -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|
Loading
Loading
Loading
Loading
@@ -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
 
Loading
Loading
# 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)
doc/customization/new_project_page/appearance_settings.png

69.5 KiB

doc/customization/new_project_page/custom_new_project_page.png

161 KiB

doc/customization/new_project_page/default_new_project_page.png

143 KiB

Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment