Merge pull request #13282 from dannon/client-dependency-updates

Client dependency updates, swap to node 16.
This commit is contained in:
Dannon
2022-02-10 07:11:34 -05:00
committed by GitHub
47 changed files with 2593 additions and 6443 deletions
+1 -1
View File
@@ -104,7 +104,7 @@ jobs:
- run: tox -e test_galaxy_packages
js_lint:
docker:
- image: cimg/node:14.15
- image: cimg/node:16.13.2
<<: *set_workdir
steps:
- *restore_yarn_cache
-5
View File
@@ -1,5 +0,0 @@
src/qunit
src/mocha
src/libs
src/nls
src/legacy
+19 -20
View File
@@ -1,38 +1,36 @@
module.exports = {
extends: [
{
"extends": [
"eslint:recommended",
"plugin:vue/strongly-recommended",
"plugin:vue/strongly-recommended"
//"airbnb-base", eventually
],
env: {
browser: true,
commonjs: true,
es6: true,
node: true,
jest: true,
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true,
"jest": true
},
parserOptions: {
parser: "babel-eslint",
sourceType: "module",
"parserOptions": {
"parser": "@babel/eslint-parser",
"sourceType": "module"
},
rules: {
"rules": {
// Standard rules
"no-console": "off",
"no-unused-vars": ["error", { args: "none" }],
"no-unused-vars": ["error", { "args": "none" }],
"prefer-const": "error",
"one-var": ["error", "never"],
"curly": "error",
"vue/valid-v-slot": "error",
"vue/v-slot-style": ["error", { atComponent: "v-slot", default: "v-slot", named: "longform" }],
// Now in strongly-recommended, enforce instead of warn.
"vue/attribute-hyphenation": "error",
"vue/v-slot-style": ["error", { "atComponent": "v-slot", "default": "v-slot", "named": "longform" }],
// Vue TODO (enable these)
"vue/require-default-prop": "warn",
"vue/require-prop-types": "warn",
"vue/prop-name-casing": "warn",
"vue/multi-word-component-names": "warn",
// Prettier compromises/workarounds -- mostly #wontfix?
"vue/html-indent": "off",
@@ -41,6 +39,7 @@ module.exports = {
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline": "off",
"vue/html-closing-bracket-newline": "off",
"vue/html-closing-bracket-spacing": "off",
"vue/html-closing-bracket-spacing": "off"
},
};
"ignorePatterns": ["src/qunit", "src/mocha", "src/libs", "src/nls", "src/legacy"]
}
+1 -1
View File
@@ -1 +1 @@
14.15.0
16.13.2
-5
View File
@@ -1,5 +0,0 @@
The \*.md files in this directory are rendered as a style guide generated when
running ```yarn run styleguide```.
For more details see [Vue
Styleguidist](https://github.com/vue-styleguidist/vue-styleguidist).
-15
View File
@@ -1,15 +0,0 @@
/**
* Component root for rendering inside the styleguide, injects vuex store and other common elements
* into each component example section.
*/
import store from "../src/store";
export default (previewComponent) => {
return {
store,
render(h) {
return h(previewComponent);
},
};
};
-142
View File
@@ -1,142 +0,0 @@
/**
* Functions for generating the sections for the style guide. Has the old style doc glob and a
* recursive tree-walker that looks through the components folder and tries to arrange found
* markdown docs in a tree.
*/
const path = require("path");
const fs = require("fs");
const glob = require("glob");
const { humanize, titleize } = require("underscore.string");
/**
* Gets the table of contents sections for documentation in the components folder.
*
* @param {string} rootPath absolute path to components folder
* @return {Object} Rootnode, section map, childMap
*/
function getDocSections(rootPath, options = {}) {
const { ignore = [], docSelector = "*.@(vue|md)" } = options;
const sections = new Map(); // absolute section directory path -> section object
const childToParent = new Map(); // absolute child path -> absolute parent path
// create root node
const rootNode = newSection(rootPath, ignore);
sections.set(rootPath, rootNode);
childToParent.set(rootPath, null);
// get all matching doc files
const selector = path.join(rootPath, "**", docSelector);
const allFiles = glob.sync(selector, { ignore });
allFiles.forEach((file) => {
const p = path.parse(file);
// intermediate dir names between this dir and root
const relPath = path.relative(rootPath, p.dir);
const midFolders = relPath.split(path.sep);
// build intermediate parent sections in the event that this is deeply-nested
while (midFolders.length) {
const sectionPath = path.join(rootPath, ...midFolders);
if (!sections.has(sectionPath)) {
// create new section
const section = newSection(sectionPath, ignore);
sections.set(sectionPath, section);
// register relationship for tree-build later
const parentPath = path.join(sectionPath, "..");
childToParent.set(sectionPath, parentPath);
}
midFolders.pop();
}
// if it's a MD file, add to parent as a subsection
const section = sections.get(p.dir);
if (section && isSubsection(section, file)) {
section.children.add({
name: titleize(humanize(p.name)),
content: file,
});
}
});
// assemble recursive section tree under rootNode
buildSectionTree(sections, childToParent);
// rootNode is the main result, returning the maps so the user has the option to manipulate the
// tree before handing it over to the styleguide configs
return { sections, childToParent, rootNode };
}
function isSubsection(section, file) {
const p = path.parse(file);
// it's not a subsection if it's not a markdown file
if (p.ext !== ".md") return false;
// it's not a subsection if it's the same file as the section content
if (file === section.content) return false;
// it's not a subsection if it's an example for an existing component
const matchingComponentPath = path.join(p.dir, `${p.name}.vue`);
const componentExists = fs.existsSync(matchingComponentPath);
if (componentExists) return false;
return true;
}
/**
* Creates a new section in the TOC from passed path.
*
* @param {string} dir absolute directory path
* @return {Object} section object
*/
function newSection(dir, ignore = []) {
const section = {
name: titleize(humanize(path.basename(dir))),
components: () => glob.sync(path.join(dir, "*.vue"), { ignore }),
children: new Set(),
sectionDepth: 1,
};
// summary doc is readme/docs/index.md
const summarySelector = path.join(dir, "@(readme|docs|index).md");
const summaryDocs = glob.sync(summarySelector, { ignore, nocase: true });
if (summaryDocs.length) {
section.content = summaryDocs[0];
}
return section;
}
/**
* Turns the pair of maps into a nested object for use in the styleguide config script. Operates on
* sections array by reference.
*
* @param {Map} sections Map of path -> section object
* @param {Map} childToParent Map of childPath -> parentPath
*/
function buildSectionTree(sections, childToParent) {
// add each child to its parent
for (const [childPath, parentPath] of childToParent) {
const child = sections.get(childPath);
const parent = sections.get(parentPath);
if (child && parent && parent.children) {
parent.children.add(child);
}
}
// convert child Sets to arrays now that de-dupe not required
for (const section of sections.values()) {
section.sections = Array.from(section.children).sort((a, b) => a.name.localeCompare(b.name));
delete section.children;
}
}
module.exports = {
// public function
getDocSections,
// exporting these in case user wants to tweak the result tree and rebuild it
buildSectionTree,
newSection,
};
-379
View File
@@ -1,379 +0,0 @@
## Buttons
Regular buttons
```vue
<div>
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-link">Link</button>
</div>
```
Disabled
```vue
<div>
<button type="button" class="btn btn-primary disabled">Primary</button>
<button type="button" class="btn btn-secondary disabled">Secondary</button>
<button type="button" class="btn btn-success disabled">Success</button>
<button type="button" class="btn btn-info disabled">Info</button>
<button type="button" class="btn btn-warning disabled">Warning</button>
<button type="button" class="btn btn-danger disabled">Danger</button>
<button type="button" class="btn btn-link disabled">Link</button>
</div>
```
```vue
<div>
<button type="button" class="btn btn-outline-primary">Primary</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
<button type="button" class="btn btn-outline-success">Success</button>
<button type="button" class="btn btn-outline-info">Info</button>
<button type="button" class="btn btn-outline-warning">Warning</button>
<button type="button" class="btn btn-outline-danger">Danger</button>
</div>
```
```vue
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<button type="button" class="btn btn-primary">Primary</button>
<div class="btn-group" role="group">
<button id="btnGroupDrop1" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu" aria-labelledby="btnGroupDrop1">
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
</div>
</div>
</div>
```
```vue
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<button type="button" class="btn btn-success">Success</button>
<div class="btn-group" role="group">
<button id="btnGroupDrop2" type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu" aria-labelledby="btnGroupDrop2">
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
</div>
</div>
</div>
```
```vue
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<button type="button" class="btn btn-info">Info</button>
<div class="btn-group" role="group">
<button id="btnGroupDrop3" type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu" aria-labelledby="btnGroupDrop3">
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
</div>
</div>
</div>
```
```vue
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<button type="button" class="btn btn-danger">Danger</button>
<div class="btn-group" role="group">
<button id="btnGroupDrop4" type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu" aria-labelledby="btnGroupDrop4">
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
<a class="dropdown-item" href="javascript:void(0)">Dropdown link</a>
</div>
</div>
</div>
```
```vue
<div>
<button type="button" class="btn btn-primary btn-lg">Large button</button>
<button type="button" class="btn btn-primary">Default button</button>
<button type="button" class="btn btn-primary btn-sm">Small button</button>
</div>
```
## Alerts
```vue
<div class="alert alert-dismissable alert-warning">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<h4>Warning!</h4>
<p>Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, <a href="javascript:void(0)" class="alert-link">vel scelerisque nisl consectetur et</a>.</p>
</div>
```
```vue
<div class="alert alert-dismissable alert-danger">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Oh snap!</strong> <a href="javascript:void(0)" class="alert-link">Change a few things up</a> and try submitting again.
</div>
```
```vue
<div class="alert alert-dismissable alert-success">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Well done!</strong> You successfully read <a href="javascript:void(0)" class="alert-link">this important alert message</a>.
</div>
```
```vue
<div class="alert alert-dismissable alert-info">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Heads up!</strong> This <a href="javascript:void(0)" class="alert-link">alert needs your attention</a>, but it's not super important.
</div>
```
## Badges
```vue
<div>
<span class="badge badge-primary">Primary</span>
<span class="badge badge-secondary">Secondary</span>
<span class="badge badge-success">Success</span>
<span class="badge badge-warning">Warning</span>
<span class="badge badge-danger">Danger</span>
<span class="badge badge-info">Info</span>
</div>
```
```vue
<div class="">
<ul class="nav nav-pills">
<li class="active"><a href="javascript:void(0)">Home <span class="badge">42</span></a></li>
<li><a href="javascript:void(0)">Profile <span class="badge-pill"></span></a></li>
<li><a href="javascript:void(0)">Messages <span class="badge-pill">3</span></a></li>
</ul>
</div>
```
## Tables
```vue
<div class="">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>#</th>
<th>Column heading</th>
<th>Column heading</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr>
<td>2</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr>
<td>3</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="table-success">
<td>4</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="table-danger">
<td>5</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="table-warning">
<td>6</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="table-active">
<td>7</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
</tbody>
</table>
</div>
```
## Cards
```vue
<div class="row">
<div class="col-lg-4">
<div class="bs-component">
<div class="card text-white bg-primary mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Primary card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card text-white bg-secondary mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Secondary card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card text-white bg-success mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Success card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card text-white bg-danger mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Danger card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card text-white bg-warning mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Warning card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card text-white bg-info mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Info card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card bg-light mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Light card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card text-white bg-dark mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Dark card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="bs-component">
<div class="card border-primary mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Primary card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-secondary mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Secondary card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-success mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Success card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-danger mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Danger card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-warning mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Warning card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-info mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Info card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-light mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Light card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
<div class="card border-dark mb-3" style="max-width: 20rem;">
<div class="card-header">Header</div>
<div class="card-body">
<h4 class="card-title">Dark card title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="bs-component">
<div class="card mb-3">
<h3 class="card-header">Card header</h3>
<div class="card-body">
<h5 class="card-title">Special title treatment</h5>
<h6 class="card-subtitle text-muted">Support card subtitle</h6>
</div>
<img style="height: 200px; width: 100%; display: block;" src="data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%22318%22%20height%3D%22180%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20318%20180%22%20preserveAspectRatio%3D%22none%22%3E%3Cdefs%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%23holder_158bd1d28ef%20text%20%7B%20fill%3Argba(255%2C255%2C255%2C.75)%3Bfont-weight%3Anormal%3Bfont-family%3AHelvetica%2C%20monospace%3Bfont-size%3A16pt%20%7D%20%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22holder_158bd1d28ef%22%3E%3Crect%20width%3D%22318%22%20height%3D%22180%22%20fill%3D%22%23777%22%3E%3C%2Frect%3E%3Cg%3E%3Ctext%20x%3D%22129.359375%22%20y%3D%2297.35%22%3EImage%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E" alt="Card image">
<div class="card-body">
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">Cras justo odio</li>
<li class="list-group-item">Dapibus ac facilisis in</li>
<li class="list-group-item">Vestibulum at eros</li>
</ul>
<div class="card-body">
<a href="javascript:void(0)" class="card-link">Card link</a>
<a href="javascript:void(0)" class="card-link">Another link</a>
</div>
<div class="card-footer text-muted">
2 days ago
</div>
</div>
<div class="card">
<div class="card-body">
<h4 class="card-title">Card title</h4>
<h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
<a href="javascript:void(0)" class="card-link">Card link</a>
<a href="javascript:void(0)" class="card-link">Another link</a>
</div>
</div>
</div>
</div>
</div>
```
@@ -1,49 +0,0 @@
## Buttons
```vue
<button>Just a default button</button>
```
```vue
<a href="javascript:void(0)" class="action-button">An anchor with .action-button</a>
```
All the crazy permutations of menu button...
```vue
<a href="javascript:void(0)" class="menubutton">An anchor with .menu-button</a>
```
```vue
<a href="javascript:void(0)" class="menubutton popup">An anchor with .menu-button.popup</a>
```
```vue
<a href="javascript:void(0)" class="menubutton popup split">
<a class="menubutton-label">An anchor with .menu-button.popup.split</a>
</a>
```
## Radio Buttons
As generated by mvc.ui.ui-options
```vue
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="options" id="option1" autocomplete="off" checked> Active
</label>
<label class="btn btn-secondary">
<input type="radio" name="options" id="option2" autocomplete="off"> Radio
</label>
<label class="btn btn-secondary">
<input type="radio" name="options" id="option3" autocomplete="off"> Radio
</label>
</div>
```
## Pagination
```vue
<ul class="pagination"><li class="page-item disabled"><a class="page-link" href="#page/1"><span class="fa fa-angle-double-left"></span></a></li><li class="page-item disabled"><a class="page-link" href="#page/1">0</a></li><li class="page-item active"><a class="page-link" href="#page/1">1</a></li><li class="page-item"><a class="page-link" href="#page/2">2</a></li><li class="page-item"><a class="page-link" href="#page/4"><span class="fa fa-angle-double-right"></span></a></li></ul>
```
@@ -1,55 +0,0 @@
## Forms
Manually crafted "tool" form class, this is broken in the BS4 branch I think.
```vue
<div class="tool-form">
<form name="foo">
<div class="form-row">
<label>Label Input 1</label>
<input id="input1" type="text" name="input1" size="40" />
</div>
<div class="form-row">
<input type="submit" id="send" name="submit" value="submit" />
</div>
</form>
</div>
```
Portlet variant generated by mvc.form.form-view
```vue
<div class="ui-portlet-limited" id="uid-8">
<div class="portlet-header">
<div class="portlet-operations"></div>
<div class="portlet-title">
<i class="portlet-title-icon fa fa-unlock-alt" style="display: inline;"></i>
<span class="portlet-title-text">Portlet Title</span></div>
</div>
<div class="portlet-content">
<div class="portlet-body">
<div class="ui-message alert alert-info"></div>
<div>
<div class="ui-form-element section-row">
<div class="ui-form-error ui-error"><span class="fa fa-arrow-down"></span><span class="ui-form-error-text"></span></div>
<div class="ui-form-title">
<div class="ui-form-collapsible" style="display: none;">
<i class="ui-form-collapsible-icon"></i>
<span class="ui-form-collapsible-text"></span>
</div>
<span class="ui-form-title-text">Text Field 1</span>
</div>
<div class="ui-form-field">
<input class="ui-input" id="field-uid-4" type="text">
<span class="ui-form-info"></span>
<div class="ui-form-backdrop" style="display: none;"></div>
</div>
<div class="ui-form-preview" style="display: none;"></div>
</div>
<div class="ui-form-element section-row">
<div class="ui-form-error ui-error" style="display: none;"><span class="fa fa-arrow-down"></span><span class="ui-form-error-text"></span></div>
<div class="ui-form-title"><div class="ui-form-collapsible" style="display: none;"><i class="ui-form-collapsible-icon"></i><span class="ui-form-collapsible-text"></span></div><span class="ui-form-title-text" style="display: inline;">Password</span></div>
<div class="ui-form-field">
<input class="ui-input" type="password"><span class="ui-form-info"></span><div class="ui-form-backdrop" style="display: none;"></div></div><div class="ui-form-preview" style="display: none;"></div></div>
<div class="ui-form-element section-row" id="uid-7" style="display: none;"><div class="ui-form-error ui-error" style="display: none;"><span class="fa fa-arrow-down"></span><span class="ui-form-error-text"></span></div><div class="ui-form-title"><div class="ui-form-collapsible" style="display: none;"><i class="ui-form-collapsible-icon"></i><span class="ui-form-collapsible-text"></span></div><span class="ui-form-title-text" style="display: inline;">token</span></div><div class="ui-form-field"><div id="field-uid-7"><div style="display: none;"></div><div></div></div><span class="ui-form-info"></span><div class="ui-form-backdrop" style="display: none;"></div></div><div class="ui-form-preview" style="display: none;"></div></div></div></div><div class="portlet-buttons"><button type="button" class="ui-button-default btn btn-primary ui-clear-float" id="submit" data-original-title="" title=""><i class="icon fa fa-save ui-margin-right"></i><span class="title">Submit</span><div class="progress" style="display: none;"><div class="progress-bar" style="width: 0%;"></div></div></button></div></div><div class="portlet-backdrop"></div></div>
```
@@ -1,69 +0,0 @@
## Masthead
As generated by layout.masthead.js
Default height:
```vue
<nav id="masthead" class="navbar navbar-expand justify-content-center navbar-dark bg-dark">
<a class="navbar-brand">
<img class="navbar-brand-image"/>
<span class="navbar-brand-title">Title</span>
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link">Header 1</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle">Header 2</a>
</li>
<li class="nav-item active">
<a class="nav-link">Active Header</a>
</li>
</ul>
</nav>
```
Override height with "height: 80px;"
```vue
<nav id="masthead" class="navbar navbar-expand justify-content-center navbar-dark bg-dark" style="height: 80px;">
<a class="navbar-brand">
<img class="navbar-brand-image"/>
<span class="navbar-brand-title">Title</span>
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link">Header 1</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle">Header 2</a>
</li>
<li class="nav-item active">
<a class="nav-link">Active Header</a>
</li>
</ul>
</nav>
```
Override height with "height: 4rem;"
```vue
<nav id="masthead" class="navbar navbar-expand justify-content-center navbar-dark bg-dark" style="height: 4rem;">
<a class="navbar-brand">
<img class="navbar-brand-image"/>
<span class="navbar-brand-title">Title</span>
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link">Header 1</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle">Header 2</a>
</li>
<li class="nav-item active">
<a class="nav-link">Active Header</a>
</li>
</ul>
</nav>
```
@@ -1,19 +0,0 @@
## Popup menus
These are the classes for the menu itself, normally floating, so placed inside
a relative element.
```vue
<div style="position: relative; height: 12rem;">
<div class="popmenu-wrapper" style="top: 0;">
<ul class="dropdown-menu">
<li class="head"><a>Heading one</a></li>
<li><a>An item</a></li>
<li><a>Another item</a></li>
<li class="head"><a>Heading two</a></li>
<li><a>Third item</a></li>
<li><a>Last item</a></li>
</ul>
</div>
</div>
```
@@ -1,33 +0,0 @@
### Panel Messages
Messages that appear across the top of the panel view below the masthead.
```vue
<div>
<div v-for="type in ['done', 'info', 'warning', 'error']">
<div v-bind:class="'panel-' + type + '-message'">I'm a panel-{{type}}-message</div>
</div>
</div>
```
### Large Messages
Used for providing feedback inline.
```vue
<div>
<div v-for="type in ['done', 'info', 'warning', 'error']">
<div v-bind:class="type + 'messagelarge'">I'm a {{type}}messagelarge</div>
</div>
</div>
```
### Small Messages
```vue
<div>
<div v-for="type in ['done', 'info', 'warning', 'error']">
<div v-bind:class="type + 'message'">I'm a {{type}}message</div>
</div>
</div>
```
@@ -1,20 +0,0 @@
## Panel (toolMenuContainer)
```vue
<div style="height: 200px;">
<div style="position: absolute; width: 250px; height: 200px; border: dotted gray 1px">
<div class="unified-panel-header">
<div class="unified-panel-header-inner">
Header
</div>
</div>
<div class="unified-panel-body">
<div class="toolMenuContainer">
one<br>
two<br>
three<br>
</div>
</div>
</div>
</div>
```
@@ -1,14 +0,0 @@
## Tables
Tables using the .grid class
```vue
<table class="grid">
<thead class="grid-table-header">
<tr><th>One</th><th>Two</th></tr>
</thead>
<tbody class="grid-table-body">
<tr><td>Value 1</td><td>Value 2</td></tr>
</tbody>
</table>
```
@@ -1,32 +0,0 @@
## Tabs
Tabs as generated by mvc.ui.ui-tabs
```vue
<ul style="display: flex;" class="tab-navigation nav nav-tabs">
<li class="tab-element nav-item" id="tab-attribute" style="display: list-item;" data-original-title="" title="">
<a class="nav-link active" id="tab-title-link-attribute">
<i class="tab-icon fa fa-bars"></i>
<span id="tab-title-text-attribute" class="tab-title-text">Attributes</span>
</a>
</li>
<li class="tab-element nav-item" id="tab-convert" style="display: list-item;" data-original-title="" title="">
<a class="nav-link" id="tab-title-link-convert">
<i class="tab-icon fa fa-gear"></i>
<span id="tab-title-text-convert" class="tab-title-text">Convert</span>
</a>
</li>
<li class="tab-element nav-item" id="tab-datatype" style="display: list-item;" data-original-title="" title="">
<a class="nav-link" id="tab-title-link-datatype">
<i class="tab-icon fa fa-database"></i>
<span id="tab-title-text-datatype" class="tab-title-text">Datatypes</span>
</a>
</li>
<li class="tab-element nav-item" id="tab-permissions" style="display: list-item;" data-original-title="" title="">
<a class="nav-link" id="tab-title-link-permissions">
<i class="tab-icon fa fa-user"></i>
<span id="tab-title-text-permissions" class="tab-title-text">Permissions</span>
</a>
</li>
</ul>
```
-1
View File
@@ -1 +0,0 @@
# testdocs/a-file.md
@@ -1 +0,0 @@
# testdocs/another-file.md
@@ -1,3 +0,0 @@
<template>
<div>Yay!</div>
</template>
@@ -1 +0,0 @@
# ignored-file.md
@@ -1 +0,0 @@
# some-loose-file.md
@@ -1 +0,0 @@
# loose file
@@ -1 +0,0 @@
# testdocs/abc/readme.md
@@ -1 +0,0 @@
# foo
@@ -1 +0,0 @@
# another loose file
@@ -1 +0,0 @@
# Loose file
-62
View File
@@ -1,62 +0,0 @@
/**
* Tests the functions which build the sections for the styleguide.
*/
const path = require("path");
const { getDocSections } = require("../sections");
const getSectionByName = (sections, name) => sections.find((o) => o.name == name);
describe("getDocSections", () => {
const ignore = [
// ignoring a whole directory
"**/ignored/*",
// ignoring a file
"**/ignore*",
];
const testDocRoot = path.join(__dirname, "sample-docs");
const { rootNode } = getDocSections(testDocRoot, { ignore });
test("section generation", () => {
expect(rootNode.name).toEqual("Sample Docs");
expect(rootNode.sections.length).toEqual(7);
expect(rootNode.content).toBeUndefined();
});
test("nested subsection should appear even if no docs in intermediate folders", () => {
const deepSection = getSectionByName(rootNode.sections, "Nested Folders");
expect(deepSection.sections.length).toEqual(1);
});
test("subdirectory with readme should register as summary", () => {
const subsection = getSectionByName(rootNode.sections, "Has Readme");
// readme interpreted as content file and not as loose section
// one other loose file
expect(subsection.content).toContain("readme.md");
expect(subsection.sections.length).toEqual(1);
});
test("subdirectory with no readme file", () => {
const subsection = getSectionByName(rootNode.sections, "No Summary File");
// should just see 2 folders no summary
expect(subsection.content).toBeUndefined();
expect(subsection.sections.length).toEqual(2);
});
test("subdirectory with ignored file", () => {
const subsection = getSectionByName(rootNode.sections, "Contains Ommitted File");
expect(subsection.sections.length).toEqual(1);
});
test("ignored subdirectory", () => {
const ignoredSection = getSectionByName(rootNode.sections, "Ignored");
expect(ignoredSection).toBeUndefined();
});
test("should not create a section for a component example file", () => {
const section = getSectionByName(rootNode.sections, "Component Example");
expect(section.sections.length).toEqual(0);
});
});
+63 -64
View File
@@ -11,8 +11,7 @@
},
"license": "AFL-3.0",
"resolutions": {
"**/chokidar": "3.5.2",
"**/ua-parser-js": "0.7.30"
"**/chokidar": "3.5.3"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.15.4",
@@ -20,21 +19,22 @@
"@fortawesome/free-brands-svg-icons": "^5.15.4",
"@fortawesome/free-regular-svg-icons": "^5.15.4",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/vue-fontawesome": "^2.0.2",
"@fortawesome/vue-fontawesome": "^2.0.6",
"@galaxyproject/bootstrap-tour": "^0.12.1",
"@handsontable/vue": "^2.0.0-beta1",
"@hirez_io/observer-spy": "^2.1.0",
"@hirez_io/observer-spy": "^2.1.2",
"@johmun/vue-tags-input": "^2.1.0",
"@sentry/browser": "^5.20.1",
"axios": "^0.21.1",
"@sentry/browser": "^6.17.4",
"assert": "^2.0.0",
"axios": "^0.25.0",
"babel-runtime": "^6.26.0",
"backbone": "1.4.0",
"bootstrap": "4.5.0",
"bootstrap": "4.6",
"bootstrap-vue": "^2.21.2",
"citation-js": "^0.5.1",
"core-js": "^3.19.1",
"citation-js": "^0.5.5",
"core-js": "^3.21.0",
"d3": "3",
"date-fns": "^2.24.0",
"date-fns": "^2.28.0",
"decode-uri-component": "^0.2.0",
"deep-diff": "^1.0.2",
"deep-equal": "^2.0.5",
@@ -44,18 +44,19 @@
"flush-promises": "^1.0.2",
"glob": "^7.2.0",
"handsontable": "^2.0.0",
"imask": "^6.2.2",
"imask": "^6.4.0",
"in-viewport": "^3.6.0",
"is-promise": "^4.0.0",
"isotope-layout": "^3.0.6",
"iter-tools": "7.1.4",
"iter-tools": "7.2.0",
"jquery": "2",
"jquery-migrate": "~1.4",
"jquery-mousewheel": "^3.1.13",
"jquery-ui": "^1.12.1",
"jquery-ui": "^1.13.1",
"jquery.cookie": "^1.4.1",
"jspdf": "^2.4.0",
"linkifyjs": "^2.1.9",
"jspdf": "^2.5.1",
"linkify-html": "^3.0.5",
"linkifyjs": "^3.0.5",
"markdown-it": "^12.3.2",
"markdown-it-regexp": "^0.4.0",
"moment": "2.29.1",
@@ -68,36 +69,38 @@
"pouchdb-find": "^7.2.2",
"pouchdb-upsert": "^2.2.0",
"pretty-bytes": "^5.6.0",
"proper-skip-list": "^4.0.2",
"proper-skip-list": "^4.1.0",
"pyre-to-regexp": "^0.0.5",
"querystring-es3": "^0.2.1",
"regenerator-runtime": "^0.13.9",
"regression": "^2.0.1",
"requirejs": "2.3.6",
"rxjs": "^7.4.0",
"rxjs-spy": "^8.0.0",
"rxjs": "^7.5.2",
"rxjs-spy": "^8.0.2",
"rxjs-spy-devtools-plugin": "^0.0.4",
"slugify": "^1.6.0",
"slugify": "^1.6.5",
"snake-case": "^3.0.4",
"splitpanes": "2.3.8",
"stream-browserify": "^3.0.0",
"threads": "^1.6.5",
"threads": "^1.7.0",
"timers-browserify": "^2.0.12",
"toastr": "^2.1.4",
"tus-js-client": "^2.3.0",
"underscore": "^1.10.2",
"underscore.string": "^3.3.5",
"underscore": "^1.13.2",
"underscore.string": "^3.3.6",
"util": "^0.12.4",
"vue": "^2.6.14",
"vue-infinite-scroll": "^2.0.2",
"vue-multiselect": "^2.1.0",
"vue-multiselect": "^2.1.6",
"vue-observe-visibility": "^1.0.0",
"vue-prismjs": "^1.2.0",
"vue-router": "^3.5.2",
"vue-router": "^3.5.3",
"vue-rx": "^6.2.0",
"vue-scrollto": "^2.20.0",
"vuedraggable": "2.24.3",
"vueisotope": "^3.1.2",
"vuex": "^3.4.0",
"vuex-cache": "^3.2.0",
"vuex": "^3.6.2",
"vuex-cache": "^3.4.0",
"vuex-persist": "^3.1.3",
"vuex-persistedstate": "^4.1.0",
"xml-beautifier": "^0.5.0"
@@ -117,76 +120,72 @@
"save-build-hash": "(git rev-parse HEAD 2>/dev/null || echo '') >../static/client_build_hash.txt",
"prettier": "prettier --write 'src/style/scss/**/*.scss' 'src/**/{*.js,*.vue}' '!src/libs/**'",
"prettier-check": "prettier --check 'src/style/scss/**/*.scss' 'src/**/{*.js,*.vue}' '!src/libs/**'",
"styleguide": "vue-styleguidist server",
"styleguide:build": "vue-styleguidist build",
"test": "yarn run qunit && yarn run jest",
"jest": "jest --config tests/jest/jest.config.js",
"jest-watch": "jest --config tests/jest/jest.config.js --watch",
"qunit": "karma start tests/karma/karma.config.qunit.js",
"eslint": "eslint -c .eslintrc.js src --ext .js,.vue"
"eslint": "eslint -c .eslintrc.json src --ext .js,.vue"
},
"devDependencies": {
"@babel/core": "^7.15.8",
"@babel/helper-validator-identifier": "^7.15.7",
"@babel/core": "^7.17.0",
"@babel/eslint-parser": "^7.17.0",
"@babel/helper-validator-identifier": "^7.16.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-runtime": "^7.15.8",
"@babel/preset-env": "^7.15.8",
"@babel/plugin-transform-runtime": "^7.17.0",
"@babel/preset-env": "^7.16.11",
"@cerner/duplicate-package-checker-webpack-plugin": "^2.1.0",
"@testing-library/jest-dom": "^5.14.1",
"@vue/test-utils": "^1.2.2",
"@vue/vue2-jest": "^27.0.0-alpha.2",
"@testing-library/jest-dom": "^5.16.2",
"@vue/test-utils": "^1.3.0",
"@vue/vue2-jest": "^27.0.0-alpha.4",
"amdi18n-loader": "^0.9.3",
"autoprefixer": "^10.3.5",
"autoprefixer": "^10.4.2",
"axios-mock-adapter": "^1.20.0",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^10.1.0",
"babel-jest": "^27.2.5",
"babel-loader": "^8.2.2",
"babel-jest": "^27.4.6",
"babel-loader": "^8.2.3",
"babel-plugin-transform-inline-environment-variables": "^0.4.3",
"babel-plugin-transform-vue-template": "^0.4.2",
"buffer": "^6.0.3",
"chai": "^4.2.0",
"chokidar": "^3.5.2",
"css-loader": "^6.3.0",
"css-minimizer-webpack-plugin": "^3.0.2",
"chai": "^4.3.6",
"css-loader": "^6.6.0",
"css-minimizer-webpack-plugin": "^3.4.1",
"del": "^6.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^7.18.0",
"expose-loader": "^3.0.0",
"eslint": "^8.8.0",
"eslint-plugin-vue": "^8.4.1",
"expose-loader": "^3.1.0",
"gulp": "^4.0.2",
"ignore-loader": "^0.1.2",
"imports-loader": "^3.0.0",
"jest": "^27.2.5",
"imports-loader": "^3.1.1",
"jest": "^27.4.7",
"jest-raw-loader": "^1.0.1",
"jest-transform-yaml": "0.1.2",
"jest-transform-yaml": "1.0.0",
"json-loader": "^0.5.7",
"karma": "^6.3.4",
"karma": "^6.3.13",
"karma-chrome-launcher": "^3.1.0",
"karma-polyfill": "^1.1.0",
"karma-qunit": "^4.1.1",
"karma-qunit": "^4.1.2",
"karma-webpack": "^5.0.0",
"mini-css-extract-plugin": "^2.4.2",
"postcss-loader": "^6.1.1",
"prettier": "^2.4.1",
"mini-css-extract-plugin": "^2.5.3",
"postcss-loader": "^6.2.1",
"prettier": "^2.5.1",
"process": "^0.11.10",
"qunit": "^2.17.2",
"raw-loader": "^4.0.2",
"sass": "^1.42.1",
"sass-loader": "^12.1.0",
"sinon": "^11.1.2",
"sass": "^1.49.7",
"sass-loader": "^12.4.0",
"sinon": "^13.0.1",
"store": "^2.0.12",
"style-loader": "^3.3.0",
"style-loader": "^3.3.1",
"uuid": "^8.3.2",
"vue-loader": "^15.9.8",
"vue-styleguidist": "^4.41.2",
"vue-template-compiler": "^2.6.14",
"webpack": "^5.58.0",
"webpack-cli": "^4.9.0",
"webpack-dev-server": "^4.2.1",
"webpack": "^5.68.0",
"webpack-cli": "^4.9.2",
"webpack-dev-server": "^4.7.4",
"webpack-merge": "^5.8.0",
"yaml-loader": "^0.6.0"
},
"peerDependencies": {
"postcss": "^8.2.8"
"postcss": "^8.4.6"
}
}
@@ -248,13 +248,7 @@
</span>
</div>
<div
class="
unpaired-filter
forward-unpaired-filter
float-left
search-input search-query
input-group
">
class="unpaired-filter forward-unpaired-filter float-left search-input search-query input-group">
<input
type="text"
:placeholder="filterTextPlaceholder"
@@ -307,13 +301,7 @@
>
</div>
<div
class="
unpaired-filter
reverse-unpaired-filter
float-left
search-input search-query
input-group
">
class="unpaired-filter reverse-unpaired-filter float-left search-input search-query input-group">
<input
type="text"
:placeholder="filterTextPlaceholder"
@@ -51,7 +51,7 @@ export default {
dismissCountDown: 0,
errorMessage: "",
fractionWarning: "This output doesn't allow fractions!",
decimalPlaces: this.isInteger ? 0 : this.getNumberOfDecimals(this.value),
decimalPlaces: this.type.toLowerCase() === "integer" ? 0 : this.getNumberOfDecimals(this.value),
};
},
computed: {
+2 -2
View File
@@ -1,7 +1,7 @@
<template>
<div
class="galaxy-loader"
:class="[`galaxy-loader_${style}`, { 'galaxy-loader_center': center }]"
:class="[`galaxy-loader_${variant}`, { 'galaxy-loader_center': center }]"
:style="{ transform: `scale(${size / 100})` }">
<div class="galaxy-loader_strip-1"></div>
<div class="galaxy-loader_strip-2"></div>
@@ -12,7 +12,7 @@
<script>
export default {
props: {
style: {
variant: {
type: String,
default: "light",
},
@@ -36,7 +36,7 @@ import { MAX_DESCRIPTION_LENGTH } from "components/Libraries/library-utils";
import BootstrapVue from "bootstrap-vue";
import Vue from "vue";
import linkify from "linkifyjs/html";
import linkifyHtml from "linkify-html";
Vue.use(BootstrapVue);
export default {
@@ -67,7 +67,7 @@ export default {
this.$emit("toggleDescriptionExpand");
},
linkify(raw_text) {
return linkify(raw_text);
return linkifyHtml(raw_text);
},
},
};
@@ -277,7 +277,7 @@ import UtcDate from "components/UtcDate";
import BootstrapVue from "bootstrap-vue";
import { Services } from "./services";
import Utils from "utils/utils";
import linkify from "linkifyjs/html";
import linkifyHtml from "linkify-html";
import { fields } from "./table-fields";
import { Toast } from "ui/toast";
import FolderTopBar from "./TopToolbar/FolderTopBar";
@@ -507,7 +507,7 @@ export default {
this.isBusy = value;
},
linkify(raw_text) {
return linkify(raw_text);
return linkifyHtml(raw_text);
},
toggleEditMode(item) {
item.editMode = !item.editMode;
@@ -1,5 +1,7 @@
<template>
<div>
<!-- todo: rewrite this to send events up instead of two way prop binding -->
<!-- eslint-disable vue/no-mutating-props-->
<b-table
small
hover
-57
View File
@@ -1,57 +0,0 @@
const path = require("path");
const { getDocSections } = require("./docs/sections");
const buildWebpack = require("./webpack.config.js");
function getWebpack() {
const cfg = buildWebpack();
// looks like our src plays with the webpack publicPath dynamically,
// presumably to allow for dyamic loads, but this is a problem when
// you're not outputting code to a non-standard location.
// allowing this to happen breaks the styleguide.
cfg.module.rules.push({
test: /onload\/publicPath/,
use: { loader: "ignore-loader" },
});
return cfg;
}
// TODO: Fix broken module imports before attempting to view in styleguidef
const problemChildren = ["**/HistoryView.vue", "**/admin/DataManager/*", "**/LibraryFolder/*"];
if (problemChildren.length) {
console.warn("Not rendering styleguide for the following components:", problemChildren);
}
function getSections() {
// Style sections
const docRootPath = path.join(__dirname, "docs/src");
const { rootNode: docRoot } = getDocSections(docRootPath, { docSelector: "*.md" });
const [design, styles] = docRoot.sections;
delete docRoot.components;
// recursive component tree docs
const cmpPath = path.join(__dirname, "src/components");
const { rootNode: componentDocs } = getDocSections(cmpPath, { ignore: problemChildren });
return [design, styles, componentDocs];
}
module.exports = {
webpackConfig: getWebpack(),
title: "Galaxy Client Resources",
sections: getSections(),
getExampleFilename(componentPath) {
return componentPath.replace(/\.(vue|js)?$/, ".md");
},
require: [
"./src/style/scss/base.scss",
"./src/polyfills.js",
// "./src/bundleEntries.js"
],
tocMode: "collapse",
renderRootJsx: "./docs/root",
styleguideDir: "./docs/dist",
pagePerSection: true,
ignore: problemChildren,
};
+5 -2
View File
@@ -34,6 +34,9 @@ module.exports = (env = {}, argv = {}) => {
timers: require.resolve("timers-browserify"),
stream: require.resolve("stream-browserify"),
"process/browser": require.resolve("process/browser"),
querystring: require.resolve("querystring-es3"),
util: require.resolve("util/"),
assert: require.resolve("assert/"),
},
alias: {
jquery$: `${libsBase}/jquery.custom.js`,
@@ -208,7 +211,7 @@ module.exports = (env = {}, argv = {}) => {
},
},
devMiddleware: {
publicPath: '/static/dist'
publicPath: "/static/dist",
},
hot: true,
port: 8081,
@@ -221,7 +224,7 @@ module.exports = (env = {}, argv = {}) => {
target: process.env.GALAXY_URL || "http://localhost:8080",
secure: process.env.CHANGE_ORIGIN ? !process.env.CHANGE_ORIGIN : true,
changeOrigin: !!process.env.CHANGE_ORIGIN,
logLevel: 'debug'
logLevel: "debug",
},
},
},
+2493 -5366
View File
File diff suppressed because it is too large Load Diff