Make the contact page dynamic so that enterprise customers can configure it however they like
This commit is contained in:
parent
1df936350a
commit
8b331b453e
7 changed files with 82 additions and 35 deletions
|
@ -19,7 +19,8 @@ def build_requests_session():
|
|||
CLIENT_WHITELIST = ['SERVER_HOSTNAME', 'PREFERRED_URL_SCHEME', 'GITHUB_CLIENT_ID',
|
||||
'GITHUB_LOGIN_CLIENT_ID', 'MIXPANEL_KEY', 'STRIPE_PUBLISHABLE_KEY',
|
||||
'ENTERPRISE_LOGO_URL', 'SENTRY_PUBLIC_DSN', 'AUTHENTICATION_TYPE',
|
||||
'REGISTRY_TITLE', 'REGISTRY_TITLE_SHORT', 'GOOGLE_LOGIN_CLIENT_ID']
|
||||
'REGISTRY_TITLE', 'REGISTRY_TITLE_SHORT', 'GOOGLE_LOGIN_CLIENT_ID',
|
||||
'CONTACT_INFO']
|
||||
|
||||
|
||||
def getFrontendVisibleConfig(config_dict):
|
||||
|
@ -48,6 +49,12 @@ class DefaultConfig(object):
|
|||
|
||||
REGISTRY_TITLE = 'Quay.io'
|
||||
REGISTRY_TITLE_SHORT = 'Quay.io'
|
||||
CONTACT_INFO = [
|
||||
'mailto:support@quay.io',
|
||||
'irc://chat.freenode.net:6665/quayio',
|
||||
'tel:+1-888-930-3475',
|
||||
'https://twitter.com/quayio',
|
||||
]
|
||||
|
||||
# Mail config
|
||||
MAIL_SERVER = ''
|
||||
|
|
|
@ -170,6 +170,10 @@ def render_page_template(name, **kwargs):
|
|||
external_styles = get_external_css(local=not app.config.get('USE_CDN', True))
|
||||
external_scripts = get_external_javascript(local=not app.config.get('USE_CDN', True))
|
||||
|
||||
contact_href = None
|
||||
if len(app.config.get('CONTACT_INFO', [])) == 1:
|
||||
contact_href = app.config['CONTACT_INFO'][0]
|
||||
|
||||
resp = make_response(render_template(name, route_data=json.dumps(get_route_data()),
|
||||
external_styles=external_styles,
|
||||
external_scripts=external_scripts,
|
||||
|
@ -186,6 +190,7 @@ def render_page_template(name, **kwargs):
|
|||
show_chat=features.OLARK_CHAT,
|
||||
cache_buster=cache_buster,
|
||||
has_billing=features.BILLING,
|
||||
contact_href=contact_href,
|
||||
**kwargs))
|
||||
|
||||
resp.headers['X-FRAME-OPTIONS'] = 'DENY'
|
||||
|
|
|
@ -3974,7 +3974,7 @@ pre.command:before {
|
|||
color: #00b0ed;
|
||||
}
|
||||
|
||||
.contact-options .option-phone .fa-circle {
|
||||
.contact-options .option-tel .fa-circle {
|
||||
color: #1dd924;
|
||||
}
|
||||
|
||||
|
@ -3982,10 +3982,14 @@ pre.command:before {
|
|||
color: #e52f00;
|
||||
}
|
||||
|
||||
.contact-options .option-email .fa-circle {
|
||||
.contact-options .option-mailto .fa-circle {
|
||||
color: #1b72f1;
|
||||
}
|
||||
|
||||
.contact-options .option-url .fa-circle {
|
||||
color: #F1A51B;
|
||||
}
|
||||
|
||||
.about-us .row {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
|
|
@ -6474,6 +6474,14 @@ quayApp.directive('ngVisible', function () {
|
|||
};
|
||||
});
|
||||
|
||||
quayApp.config( [
|
||||
'$compileProvider',
|
||||
function( $compileProvider )
|
||||
{
|
||||
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|irc):/);
|
||||
}
|
||||
]);
|
||||
|
||||
quayApp.run(['$location', '$rootScope', 'Restangular', 'UserService', 'PlanService', '$http', '$timeout', 'CookieService', 'Features', '$anchorScroll',
|
||||
function($location, $rootScope, Restangular, UserService, PlanService, $http, $timeout, CookieService, Features, $anchorScroll) {
|
||||
|
||||
|
|
|
@ -8,7 +8,49 @@ function GuideCtrl() {
|
|||
function SecurityCtrl($scope) {
|
||||
}
|
||||
|
||||
function ContactCtrl($scope) {
|
||||
function ContactCtrl($scope, Config) {
|
||||
$scope.Config = Config;
|
||||
$scope.colsize = Math.floor(12 / Config.CONTACT_INFO.length);
|
||||
|
||||
$scope.getKind = function(contactInfo) {
|
||||
var colon = contactInfo.indexOf(':');
|
||||
var scheme = contactInfo.substr(0, colon);
|
||||
if (scheme == 'https' || scheme == 'http') {
|
||||
if (contactInfo.indexOf('//twitter.com/') > 0) {
|
||||
return 'twitter';
|
||||
}
|
||||
|
||||
return 'url';
|
||||
}
|
||||
|
||||
return scheme;
|
||||
};
|
||||
|
||||
$scope.getTitle = function(contactInfo) {
|
||||
switch ($scope.getKind(contactInfo)) {
|
||||
case 'url':
|
||||
return contactInfo;
|
||||
|
||||
case 'twitter':
|
||||
var parts = contactInfo.split('/');
|
||||
return '@' + parts[parts.length - 1];
|
||||
|
||||
case 'tel':
|
||||
return contactInfo.substr('tel:'.length);
|
||||
|
||||
case 'irc':
|
||||
// irc://chat.freenode.net:6665/quayio
|
||||
var parts = contactInfo.substr('irc://'.length).split('/');
|
||||
var server = parts[0];
|
||||
if (server.indexOf('freenode') > 0) {
|
||||
server = 'Freenode';
|
||||
}
|
||||
return server + ': #' + parts[parts.length - 1];
|
||||
|
||||
case 'mailto':
|
||||
return contactInfo.substr('mailto:'.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function PlansCtrl($scope, $location, UserService, PlanService, $routeParams) {
|
||||
|
|
|
@ -5,40 +5,21 @@
|
|||
</h2>
|
||||
|
||||
<div class="row contact-options">
|
||||
<div class="col-sm-3 text-center option-email">
|
||||
<div class="text-center" ng-repeat="info in Config.CONTACT_INFO"
|
||||
ng-class="['option-' + getKind(info), 'col-sm-' + colsize]">
|
||||
<span class="fa-stack fa-3x text-center">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-envelope fa-stack-1x fa-inverse"></i>
|
||||
<i class="fa fa-stack-1x fa-inverse"
|
||||
ng-class="{'mailto': 'fa-envelope', 'irc': 'fa-comment', 'tel': 'fa-phone', 'twitter': 'fa-twitter', 'url': 'fa-ticket'}[getKind(info)]"></i>
|
||||
</span>
|
||||
<h4>Email Us</h4>
|
||||
<h4><a href="mailto:support@quay.io">support@quay.io</a></h4>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-3 text-center option-irc">
|
||||
<span class="fa-stack fa-3x">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-comment fa-stack-1x fa-inverse"></i>
|
||||
<span ng-switch="getKind(info)">
|
||||
<h4 ng-switch-when="mailto">Email</h4>
|
||||
<h4 ng-switch-when="irc">IRC</h4>
|
||||
<h4 ng-switch-when="tel">Call</h4>
|
||||
<h4 ng-switch-when="twitter">Tweet</h4>
|
||||
<h4 ng-switch-when="url">Help System</h4>
|
||||
</span>
|
||||
<h4>IRC</h4>
|
||||
<h4><a href="irc://chat.freenode.net:6665/quayio">Freenode: #quayio</a></h4>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-3 text-center option-phone">
|
||||
<span class="fa-stack fa-3x">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-phone fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
<h4>Call Us</h4>
|
||||
<h4><a href="tel:+1-888-930-3475">888-930-3475</a></h4>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-3 text-center option-twitter">
|
||||
<span class="fa-stack fa-3x">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
<h4>Tweet Us</h4>
|
||||
<h4><a href="https://twitter.com/quayio">@quayio</a></h4>
|
||||
<h4><a ng-href="{{ info }}">{{ getTitle(info) }}</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -116,7 +116,7 @@ mixpanel.init("{{ mixpanel_key }}", { track_pageview : false, debug: {{ is_debug
|
|||
<li quay-require="['BILLING']"><a href="/privacy" target="_self">Privacy</a></li>
|
||||
<li quay-require="['BILLING']"><a href="/security/" target="_self">Security</a></li>
|
||||
<li quay-require="['BILLING']"><a href="/about/" target="_self">About</a></li>
|
||||
<li><b><a href="/contact/" target="_self">Contact</a></b></li>
|
||||
<li><b><a href="{{ contact_href or '/contact/' }}" target="_self">Contact</a></b></li>
|
||||
<li quay-require="['BILLING']"><b><a href="http://status.quay.io" target="_self">Service Status</a></b></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
Reference in a new issue