@girder/core 5.0.0-beta.0 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,43 +7,8 @@ import { restRequest } from '@girder/core/rest';
7
7
  // TODO: this might need some fixing/testing, as it seems that
8
8
  // girder.corsAuth could be an override. See login doc below.
9
9
  var corsAuth = false;
10
-
11
- var cookie = {
12
- findAll: function () {
13
- var cookies = {};
14
- _(document.cookie.split(';'))
15
- .chain()
16
- .map(function (m) {
17
- return m.replace(/^\s+/, '').replace(/\s+$/, '');
18
- })
19
- .each(function (c) {
20
- var arr = c.split('='),
21
- key = arr[0],
22
- value = null,
23
- size = _.size(arr);
24
- if (size > 1) {
25
- value = arr.slice(1).join('');
26
- }
27
- cookies[key] = value;
28
- });
29
- return cookies;
30
- },
31
-
32
- find: function (name) {
33
- var foundCookie = null,
34
- list = this.findAll();
35
-
36
- _.each(list, function (value, key) {
37
- if (key === name) {
38
- foundCookie = value;
39
- }
40
- });
41
- return foundCookie;
42
- }
43
- };
44
-
45
10
  var currentUser = null;
46
- var currentToken = cookie.find('girderToken');
11
+ var currentToken = window.localStorage.getItem('girderToken');
47
12
 
48
13
  function getCurrentUser() {
49
14
  return currentUser;
@@ -107,11 +72,7 @@ function login(username, password, otpToken = null) {
107
72
  setCurrentUser(new UserModel(response.user));
108
73
  setCurrentToken(response.user.token.token);
109
74
 
110
- if (!cookie.find('girderToken')) {
111
- // For cross-origin requests, we should write the token into
112
- // this document's cookie also.
113
- document.cookie = 'girderToken=' + getCurrentToken();
114
- }
75
+ window.localStorage.setItem('girderToken', response.user.token.token);
115
76
 
116
77
  events.trigger('g:login.success', response.user);
117
78
  events.trigger('g:login', response);
@@ -130,6 +91,8 @@ function logout() {
130
91
  setCurrentUser(null);
131
92
  setCurrentToken(null);
132
93
 
94
+ window.localStorage.removeItem('girderToken');
95
+
133
96
  events.trigger('g:login', null);
134
97
  events.trigger('g:logout.success');
135
98
  }).fail(function (jqxhr) {
@@ -138,7 +101,6 @@ function logout() {
138
101
  }
139
102
 
140
103
  export {
141
- cookie,
142
104
  corsAuth,
143
105
  getCurrentUser,
144
106
  setCurrentUser,
@@ -15,7 +15,6 @@ var AccessType = {
15
15
 
16
16
  var AssetstoreType = {
17
17
  FILESYSTEM: 0,
18
- GRIDFS: 1,
19
18
  S3: 2
20
19
  };
21
20
 
@@ -1,6 +1,7 @@
1
1
  declare const girder: {
2
2
  $: any;
3
3
  _: any;
4
+ Backbone: any;
4
5
  moment: any;
5
6
  initializeDefaultApp: (apiRoot: string, el?: string | HTMLElement) => Promise<unknown>;
6
7
  auth: any;
@@ -15,6 +15,7 @@ interface StaticFilesSpec {
15
15
  const apiRoot = import.meta.env.VITE_API_ROOT ?? '/api/v1';
16
16
 
17
17
  (async () => {
18
+ const origin = apiRoot.startsWith('/') ? window.origin : new URL(apiRoot).origin;
18
19
  const staticFilesResp = await fetch(`${apiRoot}/system/plugin_static_files`);
19
20
  const staticFiles: StaticFilesSpec = await staticFilesResp.json();
20
21
 
@@ -22,16 +23,23 @@ const apiRoot = import.meta.env.VITE_API_ROOT ?? '/api/v1';
22
23
  const link = document.createElement('link');
23
24
  link.rel = 'stylesheet';
24
25
  link.type = 'text/css';
25
- link.href = href;
26
+ link.href = new URL(href, origin).href;
26
27
  document.head.appendChild(link);
27
28
  });
28
29
 
29
- staticFiles.js.forEach((src) => {
30
- const script = document.createElement('script');
31
- script.type = 'text/javascript';
32
- script.src = src;
33
- document.head.appendChild(script);
34
- })
30
+ const scriptPromises: Promise<void>[] = [];
31
+ staticFiles.js.forEach((href) => {
32
+ scriptPromises.push(new Promise((resolve) => {
33
+ const script = document.createElement('script');
34
+ script.type = 'text/javascript';
35
+ script.src = new URL(href, origin).href;
36
+ document.head.appendChild(script);
37
+ script.addEventListener('load', function() {
38
+ resolve();
39
+ });
40
+ }));
41
+ });
35
42
 
43
+ await Promise.all(scriptPromises);
36
44
  await girder.initializeDefaultApp(apiRoot);
37
45
  })();
@@ -3,7 +3,7 @@ import _ from 'underscore';
3
3
  import Backbone from 'backbone';
4
4
 
5
5
  import events from '@girder/core/events';
6
- import { getCurrentToken, cookie } from '@girder/core/auth';
6
+ import { getCurrentToken, setCurrentUser, setCurrentToken } from '@girder/core/auth';
7
7
 
8
8
  let apiRoot;
9
9
  var uploadHandlers = {};
@@ -63,11 +63,13 @@ const restRequest = function (opts) {
63
63
  const defaults = {
64
64
  // the default 'method' is 'GET', as set by 'jquery.ajax'
65
65
 
66
- girderToken: getCurrentToken() || cookie.find('girderToken'),
66
+ girderToken: getCurrentToken() || window.localStorage.getItem('girderToken'),
67
67
 
68
68
  error: (error, status) => {
69
69
  let info;
70
70
  if (error.status === 401) {
71
+ setCurrentUser(null);
72
+ setCurrentToken(null);
71
73
  events.trigger('g:loginUi');
72
74
  info = {
73
75
  text: 'You must log in to view this resource',
@@ -119,6 +121,18 @@ const restRequest = function (opts) {
119
121
  // Overwrite defaults with passed opts, but do not mutate opts
120
122
  const args = _.extend({}, defaults, opts);
121
123
 
124
+ try {
125
+ // If the data is too large for a GET or PUT request, convert it to a POST request.
126
+ // Girder's REST API handles this for all requests.
127
+ if ((!args.method || args.method === 'GET' || args.method === 'PUT') && args.data && !args.contentType) {
128
+ if (JSON.stringify(args.data).length > 1536) {
129
+ args.headers = args.header || {};
130
+ args.headers['X-HTTP-Method-Override'] = args.method || 'GET';
131
+ args.method = 'POST';
132
+ }
133
+ }
134
+ } catch (err) { }
135
+
122
136
  if (!args.url) {
123
137
  throw new Error('restRequest requires a "url" argument');
124
138
  }
@@ -9,7 +9,7 @@ body
9
9
  word-wrap break-word
10
10
 
11
11
  i
12
- font-smoothing antialiased
12
+ -webkit-font-smoothing antialiased
13
13
 
14
14
  a
15
15
  cursor pointer
@@ -136,7 +136,7 @@
136
136
  font-size 20px
137
137
 
138
138
  // Responsive Goodness
139
- @media screen and (max-width1156px)
139
+ @media screen and (max-width 1156px)
140
140
  .g-account-otp-container
141
141
  .g-account-otp-steps
142
142
  .g-account-otp-step
@@ -146,7 +146,7 @@
146
146
  &:before
147
147
  display none
148
148
 
149
- @media screen and (max-width960px)
149
+ @media screen and (max-width 960px)
150
150
  .g-account-otp-container
151
151
  .g-account-otp-steps
152
152
  .g-account-otp-step
@@ -31,21 +31,6 @@
31
31
  div
32
32
  b File creation permissions (octal):
33
33
  span.g-assetstore-perms #{(assetstore.get('perms') || 0o600).toString(8)}
34
- else if assetstore.get('type') === types.GRIDFS
35
- div
36
- b Type:
37
- span.g-assetstore-type GridFS
38
- div
39
- b Database name:
40
- span.g-assetstore-root #{assetstore.get('db')}
41
- if assetstore.get('mongohost')
42
- div
43
- b Mongo Host URI:
44
- span.g-assetstore-mongohost #{assetstore.get('mongohost')}
45
- if assetstore.get('replicaset')
46
- div
47
- b Replica Set:
48
- span.g-assetstore-replicaset #{assetstore.get('replicaset')}
49
34
  else if assetstore.get('type') === types.S3
50
35
  div
51
36
  b Type:
@@ -1,6 +1,6 @@
1
1
  .g-frontpage-header
2
2
  .g-frontpage-logo-container
3
- img.g-frontpage-logo(src='/Girder_Mark.png')
3
+ img.g-frontpage-logo(src='Girder_Mark.png')
4
4
  .g-frontpage-title-container
5
5
  .g-frontpage-title #{brandName}
6
6
  .g-frontpage-subtitle Data management platform
@@ -139,28 +139,6 @@ form.g-settings-form(role="form")
139
139
  type="password", value=settings['core.smtp.password'] || '',
140
140
  title="The password, if any, used to authenticate to the SMTP server used to send emails.")
141
141
 
142
- .g-settings-form-container
143
- h4 Routing
144
- p.
145
- Altering routes requires a restart of the Girder server to take effect.
146
- .g-settings-form-container
147
- h5 Core Routes
148
- label core_girder
149
- input.g-core-route-table.form-control.input-sm(
150
- type="text",
151
- value=routes['core_girder'] || '',
152
- data-webroot-name="core_girder",
153
- title="The path to place core_girder.")
154
- if routeKeys.length > 2
155
- .form-group
156
- h5 Other Routes
157
- each name in routeKeys.slice(2)
158
- label= name
159
- input.g-core-route-table.form-control.input-sm(
160
- type="text",
161
- value=routes[name] || '',
162
- data-webroot-name=name,
163
- title="The path to place ${name}.")
164
142
  #g-configuration-accordion.panel-group
165
143
  .panel.panel-default
166
144
  .panel-heading(data-toggle="collapse",
@@ -180,7 +158,7 @@ form.g-settings-form(role="form")
180
158
  .form-group
181
159
  label(for="g-core-upload-minimum-chunk-size") Upload minimum chunk size (bytes)
182
160
  br
183
- span This applies to Filesystem and GridFS assetstores.
161
+ span This applies to Filesystem assetstores.
184
162
  input#g-core-upload-minimum-chunk-size.form-control.input-sm(
185
163
  type="text", value=settings['core.upload_minimum_chunk_size'] || '',
186
164
  title="For large files, the minimum size of all but the last chunk.")
@@ -17,18 +17,6 @@
17
17
  .form-group
18
18
  label.control-label(for="g-edit-fs-perms") File creation permissions (octal)
19
19
  input#g-edit-fs-perms.input-sm.form-control(type="text", placeholder="600")
20
- if assetstore.get('type') === types.GRIDFS
21
- .form-group
22
- label.control-label(for="g-edit-gridfs-db") Database name
23
- input#g-edit-gridfs-db.input-sm.form-control(type="text", placeholder="Database name")
24
- .form-group
25
- label.control-label(for="g-edit-gridfs-mongohost") Mongo Host URI
26
- input#g-edit-gridfs-mongohost.input-sm.form-control(
27
- type="text", placeholder="Mongo host uri (defaults to the main Girder database)",
28
- title="The URI is of the form mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]")
29
- .form-group
30
- label.control-label(for="g-edit-gridfs-replicaset") Replica Set
31
- input#g-edit-gridfs-replicaset.input-sm.form-control(type="text", placeholder="Replica set name (blank if not using a replica set)")
32
20
  if assetstore.get('type') === types.S3
33
21
  .form-group
34
22
  label.control-label(for="g-edit-s3-bucket") S3 bucket name
@@ -28,41 +28,6 @@
28
28
  p#g-new-fs-error.g-validation-failed-message
29
29
  input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type="submit", value="Create")
30
30
 
31
- .panel.panel-default
32
- .panel-heading(data-toggle="collapse",
33
- data-parent="#g-assetstore-accordion",
34
- data-target="#g-create-gridfs-tab")
35
- .panel-title
36
- a
37
- i.icon-leaf
38
- span Create new #[b GridFS] assetstore
39
- #g-create-gridfs-tab.panel-collapse.collapse
40
- .panel-body
41
- p.
42
- This type of assetstore uses
43
- MongoDB's #[a(target="_blank", href="http://docs.mongodb.org/manual/core/gridfs/") GridFS]
44
- storage engine. The files should be stored in a separate database
45
- from the rest of the server's information to avoid locking issues.
46
- form#g-new-gridfs-form(role="form")
47
- .form-group
48
- label.control-label(for="g-new-gridfs-name") Assetstore name
49
- input#g-new-gridfs-name.input-sm.form-control(type="text", placeholder="Name")
50
- .form-group
51
- label.control-label(for="g-new-gridfs-db") Database name
52
- input#g-new-gridfs-db.input-sm.form-control(
53
- type="text", placeholder="Database name")
54
- .form-group
55
- label.control-label(for="g-new-gridfs-mongohost") Mongo Host URI
56
- input#g-new-gridfs-mongohost.input-sm.form-control(
57
- type="text", placeholder="Mongo host uri (defaults to the main Girder database)",
58
- title="The URI is of the form mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]")
59
- .form-group
60
- label.control-label(for="g-new-gridfs-replicaset") Replica Set
61
- input#g-new-gridfs-replicaset.input-sm.form-control(
62
- type="text", placeholder="Replica set name (blank if not using a replica set)")
63
- p#g-new-gridfs-error.g-validation-failed-message
64
- input.g-new-assetstore-submit.btn.btn-sm.btn-primary(type="submit", value="Create")
65
-
66
31
  .panel.panel-default
67
32
  .panel-heading(data-toggle="collapse",
68
33
  data-parent="#g-assetstore-accordion",
@@ -1,6 +1,4 @@
1
- /* global process */
2
-
3
- const versionRaw = process.env.GIRDER_VERSION || null;
1
+ const versionRaw = import.meta.env.GIRDER_VERSION || null;
4
2
 
5
3
  // Enforce that it's a string or null to make TypeScript happy
6
4
  const version = versionRaw === null ? null : `${versionRaw}`;
@@ -1,4 +1,3 @@
1
- import $ from 'jquery';
2
1
  import _ from 'underscore';
3
2
 
4
3
  import AccessWidget from '@girder/core/views/widgets/AccessWidget';
@@ -30,14 +29,7 @@ var SystemConfigurationView = View.extend({
30
29
  var settings = _.map(this.settingsKeys, (key) => {
31
30
  const element = this.$('#g-' + key.replace(/[_.]/g, '-'));
32
31
 
33
- if (key === 'core.route_table') {
34
- return {
35
- key,
36
- value: _.object(_.map($('.g-core-route-table'), function (el) {
37
- return [$(el).data('webrootName'), $(el).val()];
38
- }))
39
- };
40
- } else if (_.contains(
32
+ if (_.contains(
41
33
  [
42
34
  'core.api_keys',
43
35
  'core.enable_password_login',
@@ -111,7 +103,6 @@ var SystemConfigurationView = View.extend({
111
103
  'core.add_to_group_policy',
112
104
  'core.collection_create_policy',
113
105
  'core.user_default_folders',
114
- 'core.route_table'
115
106
  ];
116
107
  this.settingsKeys = keys;
117
108
  restRequest({
@@ -129,11 +120,6 @@ var SystemConfigurationView = View.extend({
129
120
  render: function () {
130
121
  this.$el.html(SystemConfigurationTemplate({
131
122
  settings: this.settings,
132
- routes: this.settings['core.route_table'],
133
- routeKeys: _.sortBy(
134
- _.keys(this.settings['core.route_table']),
135
- (a) => a.indexOf('core_') === 0 ? -1 : 0
136
- ),
137
123
  JSON: window.JSON
138
124
  }));
139
125
 
@@ -1,7 +1,7 @@
1
1
  import UserModel from '@girder/core/models/UserModel';
2
2
  import View from '@girder/core/views/View';
3
3
  import events from '@girder/core/events';
4
- import { getCurrentUser, setCurrentUser, getCurrentToken, setCurrentToken, corsAuth } from '@girder/core/auth';
4
+ import { getCurrentUser, setCurrentUser, getCurrentToken, setCurrentToken } from '@girder/core/auth';
5
5
  import { handleClose, handleOpen } from '@girder/core/dialog';
6
6
 
7
7
  import RegisterDialogTemplate from '@girder/core/templates/layout/registerDialog.pug';
@@ -44,10 +44,7 @@ var RegisterView = View.extend({
44
44
  if (authToken.token) {
45
45
  setCurrentUser(user);
46
46
  setCurrentToken(authToken.token);
47
-
48
- if (corsAuth) {
49
- document.cookie = 'girderToken=' + getCurrentToken();
50
- }
47
+ window.localStorage.setItem('girderToken', getCurrentToken());
51
48
 
52
49
  events.trigger('g:login');
53
50
  } else {
@@ -100,21 +100,6 @@ fieldsMap[AssetstoreType.FILESYSTEM] = {
100
100
  }
101
101
  };
102
102
 
103
- fieldsMap[AssetstoreType.GRIDFS] = {
104
- get: function () {
105
- return {
106
- db: this.$('#g-edit-gridfs-db').val(),
107
- mongohost: this.$('#g-edit-gridfs-mongohost').val(),
108
- replicaset: this.$('#g-edit-gridfs-replicaset').val()
109
- };
110
- },
111
- set: function () {
112
- this.$('#g-edit-gridfs-db').val(this.model.get('db'));
113
- this.$('#g-edit-gridfs-mongohost').val(this.model.get('mongohost'));
114
- this.$('#g-edit-gridfs-replicaset').val(this.model.get('replicaset'));
115
- }
116
- };
117
-
118
103
  fieldsMap[AssetstoreType.S3] = {
119
104
  get: function () {
120
105
  return {
@@ -23,16 +23,6 @@ var NewAssetstoreWidget = View.extend({
23
23
  });
24
24
  },
25
25
 
26
- 'submit #g-new-gridfs-form': function (e) {
27
- this.createAssetstore(e, this.$('#g-new-gridfs-error'), {
28
- type: AssetstoreType.GRIDFS,
29
- name: this.$('#g-new-gridfs-name').val(),
30
- db: this.$('#g-new-gridfs-db').val(),
31
- mongohost: this.$('#g-new-gridfs-mongohost').val(),
32
- replicaset: this.$('#g-new-gridfs-replicaset').val()
33
- });
34
- },
35
-
36
26
  'submit #g-new-s3-form': function (e) {
37
27
  this.createAssetstore(e, this.$('#g-new-s3-error'), {
38
28
  type: AssetstoreType.S3,
@@ -9,7 +9,7 @@
9
9
  * @homepage https://bttstrp.github.io/bootstrap-switch
10
10
  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)
11
11
  * @license MIT
12
- */.bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:4px;border:1px solid;border-color:#ccc;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:4px;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:table-cell;vertical-align:middle;padding:6px 12px;font-size:14px;line-height:20px}.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-handle-off{text-align:center;z-index:1}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary{color:#fff;background:#337ab7}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info{color:#fff;background:#5bc0de}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success{color:#fff;background:#5cb85c}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning{background:#f0ad4e;color:#fff}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger{color:#fff;background:#d9534f}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default{color:#000;background:#eeeeee}.bootstrap-switch .bootstrap-switch-label{text-align:center;margin-top:-1px;margin-bottom:-1px;z-index:100;color:#333;background:#fff}.bootstrap-switch span:before{content:"​"}.bootstrap-switch .bootstrap-switch-handle-on{border-bottom-left-radius:3px;border-top-left-radius:3px}.bootstrap-switch .bootstrap-switch-handle-off{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch input[type=radio],.bootstrap-switch input[type=checkbox]{position:absolute!important;top:0;left:0;margin:0;z-index:-1;opacity:0;filter:alpha(opacity=0);visibility:hidden}.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label{padding:1px 5px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label{padding:5px 10px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label{padding:6px 16px;font-size:18px;line-height:1.3333333}.bootstrap-switch.bootstrap-switch-disabled,.bootstrap-switch.bootstrap-switch-readonly,.bootstrap-switch.bootstrap-switch-indeterminate{cursor:default!important}.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label{opacity:.5;filter:alpha(opacity=50);cursor:default!important}.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container{-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on{border-radius:0 3px 3px 0}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off{border-radius:3px 0 0 3px}.bootstrap-switch.bootstrap-switch-focused{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px #00000013,0 0 8px #66afe999}.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label{border-bottom-left-radius:3px;border-top-left-radius:3px}#g-account-tab-otp .g-user-settings-container{background:none;border:none}.g-account-otp-info-text{border-bottom:1px solid #ccc;margin-top:10px;padding-bottom:35px}.g-account-otp-container{padding-top:35px}.g-account-otp-container h2{margin:0 20px 10px 0;display:inline-block}.g-account-otp-container h2.g-user-otp-heading-enable{background:#effff0;border:1px solid #4caf50;border-radius:5px;color:#4caf50;font-size:26px;padding:20px 26px}.g-account-otp-container h2.g-user-otp-heading-enable:before{display:inline-block;content:"";font-family:fontello;margin-right:10px}.g-account-otp-container h3{color:#333;font-size:20px;font-weight:700;margin:0 0 5px}.g-account-otp-container h3.g-user-otp-heading-disable{margin-bottom:5px;margin-top:25px}.g-account-otp-container #g-user-otp-initialize-enable{display:block;margin-top:6px}.g-account-otp-container .g-account-otp-steps{background-color:#fafafa;border:1px solid #e3e3e3;border-radius:4px 4px 0 0;margin-bottom:0;margin-top:10px;overflow:visible;padding-right:40px;position:relative}.g-account-otp-container .g-account-otp-steps:before{background-color:#337ab7;border:1px solid #2e6da4;border-radius:4px 4px 0 0;content:"";display:block;height:6px;position:absolute;left:-1px;right:-1px;top:-1px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step{border-bottom:1px solid #e3e3e3;color:#bbb;font-size:20px;font-weight:600;padding:35px 0}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:after{clear:both;content:"";display:table}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:first-of-type{padding-top:30px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:last-of-type{border-bottom:none}.g-account-otp-container .g-account-otp-steps .g-account-otp-step div{color:#333;font-size:14px;font-weight:400;padding-top:5px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step div h4{font-size:16px;font-weight:700;color:#666;margin-bottom:20px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div{float:left;padding-top:20px;width:45%}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr{margin-right:4%;width:51%}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr:before{color:#337ab740;content:"";display:block;float:left;font-family:fontello;font-size:26em;font-style:normal;font-weight:400;line-height:280px;margin-right:40px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual{background:#fff;border:1px solid #e3e3e3;border-radius:4px;margin-top:26px;padding:20px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual h4{margin-top:0}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual h4 span{font-weight:400;display:block;padding-top:10px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual table tr th{min-width:80px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step #g-user-otp-token{padding:16px 20px;margin-top:12px}.g-account-otp-container .g-user-otp-footer{background-color:#3f3b3b;border-radius:0 0 4px 4px;padding:15px 20px 18px}.g-account-otp-container .g-user-otp-footer:after{clear:both;content:"";display:table}.g-account-otp-container .g-user-otp-footer .btn-default{margin:5px 0 0 5px}.g-account-otp-container .g-user-otp-footer .btn-primary{float:right;font-size:20px}@media screen and (max-width: 1156px){.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr:before{display:none}}@media screen and (max-width: 960px){.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div{float:none;width:100%}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr{margin-right:0;width:100%}}.g-user-settings-container{margin-top:10px;border-radius:4px;background-color:#fafafa;border:1px solid #e3e3e3;padding:13px;overflow:auto}.g-user-settings-container .g-validation-failed-message{margin-top:12px}#g-admin{margin-left:10px}.g-api-keys-list-container{margin-top:15px}.g-api-keys-list-container .g-api-keys-empty-message{font-style:italic}.g-api-keys-list-container .g-api-key-list-header{font-weight:700;font-size:16px;color:#666;margin-bottom:5px}.g-api-keys-list-container .g-api-key-table{width:100%}.g-api-keys-list-container .g-api-key-table .popover{max-width:100%}.g-api-keys-list-container .g-api-key-table th{padding:3px 4px 3px 3px;background-color:#723e92;color:#fff}.g-api-keys-list-container .g-api-key-table td{padding:3px 2px 3px 3px}.g-api-keys-list-container .g-api-key-table td button{margin-right:4px}.g-api-keys-list-container .g-paginate-container{float:right}.g-api-keys-list-container .g-paginate-container .pagination{margin:12px 0 0}.g-api-keys-list-container .g-api-key-list-bottom-buttons{margin-top:10px}.g-scope-selection-container .checkbox{margin-left:25px}.g-scope-selection-container .checkbox.disabled{color:#999}.g-search-results-title-container{display:block;padding:.5% 0 .5% .5%;font-size:20px;background-color:#eaebea;border-bottom:1px solid #ddd;color:#555}.g-search-results-title-container .g-search-results-title-element{display:inline-block}.g-search-results-type-container{display:block;margin:2px 0;border:1px solid #efefef;border-radius:5px}.g-search-results-type-container .g-search-result-type-header{display:inline-block;font-size:17px}.g-search-results-type-container .g-search-result-type-icon{padding:.5% 1%}.g-search-results-type-container ul.g-search-results-type{margin:0;padding:0}.g-search-results-type-container .g-search-result{list-style:none;padding:.15% 0 .15% 2%;border-top:1px solid #efefef;color:#337ab7;font-size:15px}.g-search-results-type-container .g-search-result:hover{background-color:#eee}.g-search-results-type-container .g-search-results-paginate ul.pagination{margin:5px 15px}.g-search-pending{padding:10px;font-size:30px}.g-search-no-results{padding:.5% 0 .5% 1%;border:1px solid #efefef;font-size:15px}body{font-family:Open Sans,sans-serif!important;padding:0;word-wrap:break-word}i{font-smoothing:antialiased}a{cursor:pointer;text-decoration:none!important}.g-clear-both{clear:both}.g-clear-right{clear:right}ul.dropdown-menu>li.dropdown-header{padding:3px 20px 3px 8px;margin-bottom:3px;background-color:#555;font-weight:700;color:#fff}ul.dropdown-menu>li>a{padding:3px 20px 3px 8px}ul.dropdown-menu>li>a:hover{background-color:#eee}ul.dropdown-menu>li>a>i{margin-right:3px}.panel-heading{padding:10px}.panel-title{font-size:15px}.g-body-title{font-size:20px;font-weight:700;color:#555}.g-body-subtitle{font-size:15px;color:#888;margin-bottom:5px}.g-dialog-subtitle{margin-top:5px;width:100%}#g-confirm-text{max-width:50%}.g-info-message-container{background-color:#fffee1;color:#777;padding:6px 8px;border:1px solid #e5e2c8}.nav-tabs>li:not(.active)>a{border:1px solid #e2e2e2}.modal-footer{margin-top:5px}.modal-content{border-radius:0;max-height:calc(100vh - 60px);overflow-y:auto;margin:30px auto}.modal-backdrop.in{opacity:.35}.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}blockquote p{font-size:inherit}code{font-family:monospace}.modal{overflow-y:auto}.g-monospace-viewer{font-family:monospace;border:1px solid #ccc;background-color:#f5f5f5;border-radius:0;overflow-x:scroll;padding:7px 11px;white-space:pre;word-wrap:initial;font-size:13px}textarea{max-width:100%}.g-top-level-list-title-container{display:inline-block;overflow:hidden;white-space:nowrap;width:calc(100% - 350px);position:relative}.g-top-level-list-title-container .g-text-fade{height:30px;width:45px;position:absolute;right:0;background:linear-gradient(to right,rgba(250,250,252,0),#fafafc)}.g-top-level-list-title-container .g-text-fade[public=false]{background:linear-gradient(to right,rgba(255,249,234,0),#fff9ea)}.g-list-public-status-icon{display:inline-block;line-height:40px;vertical-align:top;color:#888;margin-right:10px;border-right:1px solid #dedede;padding-right:5px;font-size:18px;margin-left:-5px}.g-top-level-list-entry{padding:11px 14px;margin:2px 0;border-radius:3px;background-color:#fafafc;border:1px solid #eaeaea;box-shadow:inset 0 0 2px 2px #f4f4f4}.g-top-level-list-entry[public=false]{box-shadow:inset 0 0 2px 2px #fff0e0;background-color:#fff9ea}#g-app-header-container{position:fixed;top:0;width:100%;z-index:50;height:52px}#g-app-body-container.g-default-layout{min-height:500px}#g-app-body-container.g-empty-layout{margin:0;padding:0}#g-alerts-container{position:fixed;top:65px;right:10px;width:320px;z-index:1240}#g-alerts-container .alert{display:none;padding-top:10px;padding-bottom:10px;border-color:#aaa;border-radius:0;box-shadow:0 0 0 5px #b4b4b454}.g-validation-failed-message{font-weight:700;color:#d22}.g-bottom-message{margin-top:15px;font-size:12px;color:#878080}.g-password-reset-explanation{font-size:13px;color:#505050;margin-bottom:10px}#g-app-progress-container{position:fixed;right:10px;bottom:0;width:400px;z-index:1140}.modal-body p{overflow:hidden;text-overflow:ellipsis}@media (min-width: 721px){#g-app-body-container.g-default-layout{padding:62px 10px 10px;margin-left:181px}#g-global-nav-container{position:fixed;top:52px;width:180px}}@media (max-width: 720px){#g-global-nav-container{width:100%;position:static;margin-top:52px}#g-app-body-container.g-default-layout{margin-left:0;padding:10px}}/*!
12
+ */.bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:4px;border:1px solid;border-color:#ccc;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:4px;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:table-cell;vertical-align:middle;padding:6px 12px;font-size:14px;line-height:20px}.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-handle-off{text-align:center;z-index:1}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary{color:#fff;background:#337ab7}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info{color:#fff;background:#5bc0de}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success{color:#fff;background:#5cb85c}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning{background:#f0ad4e;color:#fff}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger{color:#fff;background:#d9534f}.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default{color:#000;background:#eeeeee}.bootstrap-switch .bootstrap-switch-label{text-align:center;margin-top:-1px;margin-bottom:-1px;z-index:100;color:#333;background:#fff}.bootstrap-switch span:before{content:"​"}.bootstrap-switch .bootstrap-switch-handle-on{border-bottom-left-radius:3px;border-top-left-radius:3px}.bootstrap-switch .bootstrap-switch-handle-off{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch input[type=radio],.bootstrap-switch input[type=checkbox]{position:absolute!important;top:0;left:0;margin:0;z-index:-1;opacity:0;filter:alpha(opacity=0);visibility:hidden}.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label{padding:1px 5px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label{padding:5px 10px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label{padding:6px 16px;font-size:18px;line-height:1.3333333}.bootstrap-switch.bootstrap-switch-disabled,.bootstrap-switch.bootstrap-switch-readonly,.bootstrap-switch.bootstrap-switch-indeterminate{cursor:default!important}.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label{opacity:.5;filter:alpha(opacity=50);cursor:default!important}.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container{-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on{border-radius:0 3px 3px 0}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off{border-radius:3px 0 0 3px}.bootstrap-switch.bootstrap-switch-focused{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px #00000013,0 0 8px #66afe999}.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label{border-bottom-left-radius:3px;border-top-left-radius:3px}#g-account-tab-otp .g-user-settings-container{background:none;border:none}.g-account-otp-info-text{border-bottom:1px solid #ccc;margin-top:10px;padding-bottom:35px}.g-account-otp-container{padding-top:35px}.g-account-otp-container h2{margin:0 20px 10px 0;display:inline-block}.g-account-otp-container h2.g-user-otp-heading-enable{background:#effff0;border:1px solid #4caf50;border-radius:5px;color:#4caf50;font-size:26px;padding:20px 26px}.g-account-otp-container h2.g-user-otp-heading-enable:before{display:inline-block;content:"";font-family:fontello;margin-right:10px}.g-account-otp-container h3{color:#333;font-size:20px;font-weight:700;margin:0 0 5px}.g-account-otp-container h3.g-user-otp-heading-disable{margin-bottom:5px;margin-top:25px}.g-account-otp-container #g-user-otp-initialize-enable{display:block;margin-top:6px}.g-account-otp-container .g-account-otp-steps{background-color:#fafafa;border:1px solid #e3e3e3;border-radius:4px 4px 0 0;margin-bottom:0;margin-top:10px;overflow:visible;padding-right:40px;position:relative}.g-account-otp-container .g-account-otp-steps:before{background-color:#337ab7;border:1px solid #2e6da4;border-radius:4px 4px 0 0;content:"";display:block;height:6px;position:absolute;left:-1px;right:-1px;top:-1px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step{border-bottom:1px solid #e3e3e3;color:#bbb;font-size:20px;font-weight:600;padding:35px 0}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:after{clear:both;content:"";display:table}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:first-of-type{padding-top:30px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:last-of-type{border-bottom:none}.g-account-otp-container .g-account-otp-steps .g-account-otp-step div{color:#333;font-size:14px;font-weight:400;padding-top:5px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step div h4{font-size:16px;font-weight:700;color:#666;margin-bottom:20px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div{float:left;padding-top:20px;width:45%}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr{margin-right:4%;width:51%}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr:before{color:#337ab740;content:"";display:block;float:left;font-family:fontello;font-size:26em;font-style:normal;font-weight:400;line-height:280px;margin-right:40px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual{background:#fff;border:1px solid #e3e3e3;border-radius:4px;margin-top:26px;padding:20px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual h4{margin-top:0}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual h4 span{font-weight:400;display:block;padding-top:10px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-enter-manual table tr th{min-width:80px}.g-account-otp-container .g-account-otp-steps .g-account-otp-step #g-user-otp-token{padding:16px 20px;margin-top:12px}.g-account-otp-container .g-user-otp-footer{background-color:#3f3b3b;border-radius:0 0 4px 4px;padding:15px 20px 18px}.g-account-otp-container .g-user-otp-footer:after{clear:both;content:"";display:table}.g-account-otp-container .g-user-otp-footer .btn-default{margin:5px 0 0 5px}.g-account-otp-container .g-user-otp-footer .btn-primary{float:right;font-size:20px}@media screen and (max-width: 1156px){.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr:before{display:none}}@media screen and (max-width: 960px){.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div{float:none;width:100%}.g-account-otp-container .g-account-otp-steps .g-account-otp-step:nth-child(2) div.g-account-otp-scan-qr{margin-right:0;width:100%}}.g-user-settings-container{margin-top:10px;border-radius:4px;background-color:#fafafa;border:1px solid #e3e3e3;padding:13px;overflow:auto}.g-user-settings-container .g-validation-failed-message{margin-top:12px}#g-admin{margin-left:10px}.g-api-keys-list-container{margin-top:15px}.g-api-keys-list-container .g-api-keys-empty-message{font-style:italic}.g-api-keys-list-container .g-api-key-list-header{font-weight:700;font-size:16px;color:#666;margin-bottom:5px}.g-api-keys-list-container .g-api-key-table{width:100%}.g-api-keys-list-container .g-api-key-table .popover{max-width:100%}.g-api-keys-list-container .g-api-key-table th{padding:3px 4px 3px 3px;background-color:#723e92;color:#fff}.g-api-keys-list-container .g-api-key-table td{padding:3px 2px 3px 3px}.g-api-keys-list-container .g-api-key-table td button{margin-right:4px}.g-api-keys-list-container .g-paginate-container{float:right}.g-api-keys-list-container .g-paginate-container .pagination{margin:12px 0 0}.g-api-keys-list-container .g-api-key-list-bottom-buttons{margin-top:10px}.g-scope-selection-container .checkbox{margin-left:25px}.g-scope-selection-container .checkbox.disabled{color:#999}.g-search-results-title-container{display:block;padding:.5% 0 .5% .5%;font-size:20px;background-color:#eaebea;border-bottom:1px solid #ddd;color:#555}.g-search-results-title-container .g-search-results-title-element{display:inline-block}.g-search-results-type-container{display:block;margin:2px 0;border:1px solid #efefef;border-radius:5px}.g-search-results-type-container .g-search-result-type-header{display:inline-block;font-size:17px}.g-search-results-type-container .g-search-result-type-icon{padding:.5% 1%}.g-search-results-type-container ul.g-search-results-type{margin:0;padding:0}.g-search-results-type-container .g-search-result{list-style:none;padding:.15% 0 .15% 2%;border-top:1px solid #efefef;color:#337ab7;font-size:15px}.g-search-results-type-container .g-search-result:hover{background-color:#eee}.g-search-results-type-container .g-search-results-paginate ul.pagination{margin:5px 15px}.g-search-pending{padding:10px;font-size:30px}.g-search-no-results{padding:.5% 0 .5% 1%;border:1px solid #efefef;font-size:15px}body{font-family:Open Sans,sans-serif!important;padding:0;word-wrap:break-word}i{-webkit-font-smoothing:antialiased}a{cursor:pointer;text-decoration:none!important}.g-clear-both{clear:both}.g-clear-right{clear:right}ul.dropdown-menu>li.dropdown-header{padding:3px 20px 3px 8px;margin-bottom:3px;background-color:#555;font-weight:700;color:#fff}ul.dropdown-menu>li>a{padding:3px 20px 3px 8px}ul.dropdown-menu>li>a:hover{background-color:#eee}ul.dropdown-menu>li>a>i{margin-right:3px}.panel-heading{padding:10px}.panel-title{font-size:15px}.g-body-title{font-size:20px;font-weight:700;color:#555}.g-body-subtitle{font-size:15px;color:#888;margin-bottom:5px}.g-dialog-subtitle{margin-top:5px;width:100%}#g-confirm-text{max-width:50%}.g-info-message-container{background-color:#fffee1;color:#777;padding:6px 8px;border:1px solid #e5e2c8}.nav-tabs>li:not(.active)>a{border:1px solid #e2e2e2}.modal-footer{margin-top:5px}.modal-content{border-radius:0;max-height:calc(100vh - 60px);overflow-y:auto;margin:30px auto}.modal-backdrop.in{opacity:.35}.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}blockquote p{font-size:inherit}code{font-family:monospace}.modal{overflow-y:auto}.g-monospace-viewer{font-family:monospace;border:1px solid #ccc;background-color:#f5f5f5;border-radius:0;overflow-x:scroll;padding:7px 11px;white-space:pre;word-wrap:initial;font-size:13px}textarea{max-width:100%}.g-top-level-list-title-container{display:inline-block;overflow:hidden;white-space:nowrap;width:calc(100% - 350px);position:relative}.g-top-level-list-title-container .g-text-fade{height:30px;width:45px;position:absolute;right:0;background:linear-gradient(to right,rgba(250,250,252,0),#fafafc)}.g-top-level-list-title-container .g-text-fade[public=false]{background:linear-gradient(to right,rgba(255,249,234,0),#fff9ea)}.g-list-public-status-icon{display:inline-block;line-height:40px;vertical-align:top;color:#888;margin-right:10px;border-right:1px solid #dedede;padding-right:5px;font-size:18px;margin-left:-5px}.g-top-level-list-entry{padding:11px 14px;margin:2px 0;border-radius:3px;background-color:#fafafc;border:1px solid #eaeaea;box-shadow:inset 0 0 2px 2px #f4f4f4}.g-top-level-list-entry[public=false]{box-shadow:inset 0 0 2px 2px #fff0e0;background-color:#fff9ea}#g-app-header-container{position:fixed;top:0;width:100%;z-index:50;height:52px}#g-app-body-container.g-default-layout{min-height:500px}#g-app-body-container.g-empty-layout{margin:0;padding:0}#g-alerts-container{position:fixed;top:65px;right:10px;width:320px;z-index:1240}#g-alerts-container .alert{display:none;padding-top:10px;padding-bottom:10px;border-color:#aaa;border-radius:0;box-shadow:0 0 0 5px #b4b4b454}.g-validation-failed-message{font-weight:700;color:#d22}.g-bottom-message{margin-top:15px;font-size:12px;color:#878080}.g-password-reset-explanation{font-size:13px;color:#505050;margin-bottom:10px}#g-app-progress-container{position:fixed;right:10px;bottom:0;width:400px;z-index:1140}.modal-body p{overflow:hidden;text-overflow:ellipsis}@media (min-width: 721px){#g-app-body-container.g-default-layout{padding:62px 10px 10px;margin-left:181px}#g-global-nav-container{position:fixed;top:52px;width:180px}}@media (max-width: 720px){#g-global-nav-container{width:100%;position:static;margin-top:52px}#g-app-body-container.g-default-layout{margin-left:0;padding:10px}}/*!
13
13
  * Bootstrap Datetime Picker v4.17.49
14
14
  * Copyright 2015-2020 Jonathan Peterson
15
15
  * Licensed under MIT (https://github.com/Eonasdan/bootstrap-datetimepicker/blob/master/LICENSE)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@girder/core",
3
3
  "license": "Apache-2.0",
4
- "version": "5.0.0-beta.0",
4
+ "version": "5.0.0-beta.2",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist-lib"
@@ -1,64 +0,0 @@
1
- /* eslint-env jquery */
2
- $(function () {
3
- var apiRoot = $('#g-global-info-apiroot').text().replace(
4
- '%HOST%', window.location.origin);
5
- if (!apiRoot) {
6
- apiRoot = window.location.origin + window.location.pathname;
7
- }
8
- var swaggerUi = new window.SwaggerUIBundle({
9
- url: apiRoot + '/describe',
10
- dom_id: '#swagger-ui-container',
11
- supportHeaderParams: false,
12
- supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
13
- onComplete: function () {
14
- addApiKeyAuthorization();
15
- },
16
- onFailure: function (data) {
17
- if (console) {
18
- console.log('Unable to Load SwaggerUI');
19
- console.log(data);
20
- }
21
- },
22
- docExpansion: 'none',
23
- jsonEditor: false,
24
- apisSorter: 'alpha',
25
- operationsSorter: sortOperations,
26
- defaultModelRendering: 'model',
27
- showRequestHeaders: false,
28
- validatorUrl: null,
29
- tryItOutEnabled: true,
30
- defaultModelsExpandDepth: -1,
31
- deepLinking: true
32
- });
33
-
34
- var methodOrder = ['get', 'put', 'post', 'patch', 'delete'];
35
-
36
- // Comparator to sort operations by path and method.
37
- // Methods not in the pre-defined ordered list are placed at the end and
38
- // sorted alphabetically.
39
- function sortOperations(op1, op2) {
40
- var pathCmp = op1.get('path').localeCompare(op2.get('path'));
41
- if (pathCmp !== 0) {
42
- return pathCmp;
43
- }
44
- var index1 = methodOrder.indexOf(op1.get('method'));
45
- var index2 = methodOrder.indexOf(op2.get('method'));
46
- if (index1 > -1 && index2 > -1) {
47
- return index1 > index2 ? 1 : (index1 < index2 ? -1 : 0);
48
- }
49
- if (index1 > -1) {
50
- return -1;
51
- }
52
- if (index2 > -1) {
53
- return 1;
54
- }
55
- return op1.get('method').localeCompare(op2.get('method'));
56
- }
57
-
58
- function addApiKeyAuthorization() {
59
- const girderToken = localStorage.getItem('girderToken');
60
- if (girderToken) {
61
- swaggerUi.preauthorizeApiKey('Girder-Token', girderToken);
62
- }
63
- }
64
- });