Merge branch 'ce-6983-promote-starting-a-gitlab-com-trial' into 'master'
CE port Resolve "Promote starting a GitLab.com trial" See merge request gitlab-org/gitlab-ce!21551
This commit is contained in:
commit
f90fc922db
22 changed files with 117 additions and 38 deletions
|
@ -1,6 +1,6 @@
|
|||
import Visibility from 'visibilityjs';
|
||||
import Vue from 'vue';
|
||||
import initDismissableCallout from '~/dismissable_callout';
|
||||
import PersistentUserCallout from '../persistent_user_callout';
|
||||
import { s__, sprintf } from '../locale';
|
||||
import Flash from '../flash';
|
||||
import Poll from '../lib/utils/poll';
|
||||
|
@ -62,7 +62,7 @@ export default class Clusters {
|
|||
this.showTokenButton = document.querySelector('.js-show-cluster-token');
|
||||
this.tokenField = document.querySelector('.js-cluster-token');
|
||||
|
||||
initDismissableCallout('.js-cluster-security-warning');
|
||||
Clusters.initDismissableCallout();
|
||||
initSettingsPanels();
|
||||
setupToggleButtons(document.querySelector('.js-cluster-enable-toggle-area'));
|
||||
this.initApplications();
|
||||
|
@ -105,6 +105,12 @@ export default class Clusters {
|
|||
});
|
||||
}
|
||||
|
||||
static initDismissableCallout() {
|
||||
const callout = document.querySelector('.js-cluster-security-warning');
|
||||
|
||||
if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new
|
||||
}
|
||||
|
||||
addListeners() {
|
||||
if (this.showTokenButton) this.showTokenButton.addEventListener('click', this.showToken);
|
||||
eventHub.$on('installApplication', this.installApplication);
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
import createFlash from '~/flash';
|
||||
import { __ } from '~/locale';
|
||||
import setupToggleButtons from '~/toggle_buttons';
|
||||
import initDismissableCallout from '~/dismissable_callout';
|
||||
import PersistentUserCallout from '../persistent_user_callout';
|
||||
|
||||
import ClustersService from './services/clusters_service';
|
||||
|
||||
export default () => {
|
||||
const clusterList = document.querySelector('.js-clusters-list');
|
||||
|
||||
initDismissableCallout('.gcp-signup-offer');
|
||||
const callout = document.querySelector('.gcp-signup-offer');
|
||||
if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new
|
||||
|
||||
// The empty state won't have a clusterList
|
||||
if (clusterList) {
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
import $ from 'jquery';
|
||||
import axios from '~/lib/utils/axios_utils';
|
||||
import { __ } from '~/locale';
|
||||
import Flash from '~/flash';
|
||||
|
||||
export default function initDismissableCallout(alertSelector) {
|
||||
const alertEl = document.querySelector(alertSelector);
|
||||
if (!alertEl) {
|
||||
return;
|
||||
}
|
||||
|
||||
const closeButtonEl = alertEl.getElementsByClassName('close')[0];
|
||||
const { dismissEndpoint, featureId } = closeButtonEl.dataset;
|
||||
|
||||
closeButtonEl.addEventListener('click', () => {
|
||||
axios
|
||||
.post(dismissEndpoint, {
|
||||
feature_name: featureId,
|
||||
})
|
||||
.then(() => {
|
||||
$(alertEl).alert('close');
|
||||
})
|
||||
.catch(() => {
|
||||
Flash(__('An error occurred while dismissing the alert. Refresh the page and try again.'));
|
||||
});
|
||||
});
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import initDismissableCallout from '~/dismissable_callout';
|
||||
import initGkeDropdowns from '~/projects/gke_cluster_dropdowns';
|
||||
import PersistentUserCallout from '../../persistent_user_callout';
|
||||
import Project from './project';
|
||||
import ShortcutsNavigation from '../../behaviors/shortcuts/shortcuts_navigation';
|
||||
|
||||
|
@ -12,7 +12,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||
];
|
||||
|
||||
if (newClusterViews.indexOf(page) > -1) {
|
||||
initDismissableCallout('.gcp-signup-offer');
|
||||
const callout = document.querySelector('.gcp-signup-offer');
|
||||
if (callout) new PersistentUserCallout(callout); // eslint-disable-line no-new
|
||||
|
||||
initGkeDropdowns();
|
||||
}
|
||||
|
||||
|
|
5
app/assets/javascripts/pages/root/index.js
Normal file
5
app/assets/javascripts/pages/root/index.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
// if the "projects dashboard" is a user's default dashboard, when they visit the
|
||||
// instance root index, the dashboard will be served by the root controller instead
|
||||
// of a dashboard controller. The root index redirects for all other default dashboards.
|
||||
|
||||
import '../dashboard/projects/index';
|
34
app/assets/javascripts/persistent_user_callout.js
Normal file
34
app/assets/javascripts/persistent_user_callout.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
import axios from './lib/utils/axios_utils';
|
||||
import { __ } from './locale';
|
||||
import Flash from './flash';
|
||||
|
||||
export default class PersistentUserCallout {
|
||||
constructor(container) {
|
||||
const { dismissEndpoint, featureId } = container.dataset;
|
||||
this.container = container;
|
||||
this.dismissEndpoint = dismissEndpoint;
|
||||
this.featureId = featureId;
|
||||
|
||||
this.init();
|
||||
}
|
||||
|
||||
init() {
|
||||
const closeButton = this.container.querySelector('.js-close');
|
||||
closeButton.addEventListener('click', event => this.dismiss(event));
|
||||
}
|
||||
|
||||
dismiss(event) {
|
||||
event.preventDefault();
|
||||
|
||||
axios
|
||||
.post(this.dismissEndpoint, {
|
||||
feature_name: this.featureId,
|
||||
})
|
||||
.then(() => {
|
||||
this.container.remove();
|
||||
})
|
||||
.catch(() => {
|
||||
Flash(__('An error occurred while dismissing the alert. Refresh the page and try again.'));
|
||||
});
|
||||
}
|
||||
}
|
|
@ -21,6 +21,29 @@ module DashboardHelper
|
|||
links.any? { |link| dashboard_nav_link?(link) }
|
||||
end
|
||||
|
||||
def controller_action_to_child_dashboards(controller = controller_name, action = action_name)
|
||||
case "#{controller}##{action}"
|
||||
when 'projects#index', 'root#index', 'projects#starred', 'projects#trending'
|
||||
%w(projects stars)
|
||||
when 'dashboard#activity'
|
||||
%w(starred_project_activity project_activity)
|
||||
when 'groups#index'
|
||||
%w(groups)
|
||||
when 'todos#index'
|
||||
%w(todos)
|
||||
when 'dashboard#issues'
|
||||
%w(issues)
|
||||
when 'dashboard#merge_requests'
|
||||
%w(merge_requests)
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def user_default_dashboard?(user = current_user)
|
||||
controller_action_to_child_dashboards.any? {|dashboard| dashboard == user.dashboard }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def get_dashboard_nav_links
|
||||
|
|
|
@ -6,7 +6,8 @@ class UserCallout < ActiveRecord::Base
|
|||
enum feature_name: {
|
||||
gke_cluster_integration: 1,
|
||||
gcp_signup_offer: 2,
|
||||
cluster_security_warning: 3
|
||||
cluster_security_warning: 3,
|
||||
gold_trial: 4
|
||||
}
|
||||
|
||||
validates :user, presence: true
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
= content_for :meta_tags do
|
||||
= auto_discovery_link_tag(:atom, dashboard_projects_url(rss_url_options), title: "All activity")
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- page_title "Activity"
|
||||
- header_title "Activity", activity_dashboard_path
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
- header_title "Groups", dashboard_groups_path
|
||||
= render 'dashboard/groups_head'
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- if params[:filter].blank? && @groups.empty?
|
||||
= render 'shared/groups/empty_state'
|
||||
- else
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
= content_for :meta_tags do
|
||||
= auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{current_user.name} issues")
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
.top-area
|
||||
= render 'shared/issuable/nav', type: :issues, display_count: !@no_filters_set
|
||||
.nav-controls
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
- page_title _("Merge Requests")
|
||||
- @breadcrumb_link = merge_requests_dashboard_path(assignee_id: current_user.id)
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
.top-area
|
||||
= render 'shared/issuable/nav', type: :merge_requests, display_count: !@no_filters_set
|
||||
.nav-controls
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
= content_for :meta_tags do
|
||||
= auto_discovery_link_tag(:atom, dashboard_projects_url(rss_url_options), title: "All activity")
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- page_title "Projects"
|
||||
- header_title "Projects", dashboard_projects_path
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
- page_title "Starred Projects"
|
||||
- header_title "Projects", dashboard_projects_path
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
%div{ class: container_class }
|
||||
= render "projects/last_push"
|
||||
= render 'dashboard/projects_head'
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
- page_title "Todos"
|
||||
- header_title "Todos", dashboard_todos_path
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- if current_user.todos.any?
|
||||
.top-area
|
||||
%ul.nav-links.mobile-separator.nav.nav-tabs
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
- page_title _("Groups")
|
||||
- header_title _("Groups"), dashboard_groups_path
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- if current_user
|
||||
= render 'dashboard/groups_head'
|
||||
- else
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
- page_title _("Projects")
|
||||
- header_title _("Projects"), dashboard_projects_path
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- if current_user
|
||||
= render 'dashboard/projects_head'
|
||||
- else
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
- page_title _("Projects")
|
||||
- header_title _("Projects"), dashboard_projects_path
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- if current_user
|
||||
= render 'dashboard/projects_head'
|
||||
- else
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
- page_title _("Projects")
|
||||
- header_title _("Projects"), dashboard_projects_path
|
||||
|
||||
= content_for :above_breadcrumbs_content do
|
||||
= render_if_exists "shared/gold_trial_callout"
|
||||
|
||||
- if current_user
|
||||
= render 'dashboard/projects_head'
|
||||
- else
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
- container = @no_breadcrumb_container ? 'container-fluid' : container_class
|
||||
- hide_top_links = @hide_top_links || false
|
||||
|
||||
= yield :above_breadcrumbs_content
|
||||
%nav.breadcrumbs{ role: "navigation", class: [container, @content_class] }
|
||||
.breadcrumbs-container
|
||||
- if defined?(@left_sidebar)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
= s_("ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details")
|
||||
|
||||
- if show_cluster_security_warning?
|
||||
.js-cluster-security-warning.alert.alert-block.alert-dismissable.bs-callout.bs-callout-warning
|
||||
%button.close{ type: "button", data: { feature_id: UserCalloutsHelper::CLUSTER_SECURITY_WARNING, dismiss_endpoint: user_callouts_path } } ×
|
||||
.js-cluster-security-warning.alert.alert-block.alert-dismissable.bs-callout.bs-callout-warning{ data: { feature_id: UserCalloutsHelper::CLUSTER_SECURITY_WARNING, dismiss_endpoint: user_callouts_path } }
|
||||
%button.close.js-close{ type: "button" } ×
|
||||
= s_("ClusterIntegration|The default cluster configuration grants access to many functionalities needed to successfully build and deploy a containerised application.")
|
||||
= link_to s_("More information"), help_page_path('user/project/clusters/index.md', anchor: 'security-implications')
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- link = link_to(s_('ClusterIntegration|sign up'), 'https://console.cloud.google.com/freetrial?utm_campaign=2018_cpanel&utm_source=gitlab&utm_medium=referral', target: '_blank', rel: 'noopener noreferrer')
|
||||
.bs-callout.gcp-signup-offer.alert.alert-block.alert-dismissable.prepend-top-default.append-bottom-default{ role: 'alert' }
|
||||
%button.close{ type: "button", data: { feature_id: UserCalloutsHelper::GCP_SIGNUP_OFFER, dismiss_endpoint: user_callouts_path } } ×
|
||||
.bs-callout.gcp-signup-offer.alert.alert-block.alert-dismissable.prepend-top-default.append-bottom-default{ role: 'alert', data: { feature_id: UserCalloutsHelper::GCP_SIGNUP_OFFER, dismiss_endpoint: user_callouts_path } }
|
||||
%button.close.js-close{ type: "button" } ×
|
||||
.gcp-signup-offer--content
|
||||
.gcp-signup-offer--icon.append-right-8
|
||||
= sprite_icon("information", size: 16)
|
||||
|
|
Loading…
Reference in a new issue