Merge branch 'master' into new-buttons-1-dashboard

This commit is contained in:
Jan Faracik 2022-07-07 14:50:14 +01:00
commit 296e309afc
43 changed files with 466 additions and 235 deletions

View File

@ -0,0 +1,20 @@
name: "Label conflicting PRs"
on:
push:
pull_request_target:
types: [synchronize]
permissions:
pull-requests: write
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Label conflicting PRs
uses: eps1lon/actions-label-merge-conflict@b8bf8341285ec9a4567d4318ba474fee998a6919 # v2.0.1
with:
dirtyLabel: "unresolved-merge-conflict"
repoToken: "${{ secrets.GITHUB_TOKEN }}"
commentOnDirty: "Please take a moment and address the merge conflicts of your pull request. Thanks!"
continueOnMissingPermissions: true

View File

@ -143,7 +143,7 @@ public class WebAppMain implements ServletContextListener {
Formatter formatter = (Formatter) Class.forName("io.jenkins.lib.support_log_formatter.SupportLogFormatter").getDeclaredConstructor().newInstance();
for (Handler h : Logger.getLogger("").getHandlers()) {
if (h instanceof ConsoleHandler) {
((ConsoleHandler) h).setFormatter(formatter);
h.setFormatter(formatter);
}
}
} catch (ClassNotFoundException x) {

View File

@ -1746,7 +1746,7 @@ public abstract class AbstractProject<P extends AbstractProject<P, R>, R extends
super.submit(req, rsp);
JSONObject json = req.getSubmittedForm();
makeDisabled(json.optBoolean("disable"));
makeDisabled(!json.optBoolean("enable"));
jdk = json.optString("jdk", null);

View File

@ -1025,11 +1025,7 @@ public class UpdateSite {
switch (this.type) {
case CORE:
VersionNumber current = Jenkins.getVersion();
if (!isRelevantToVersion(current)) {
return false;
}
return true;
return isRelevantToVersion(current);
case PLUGIN:
// check whether plugin is installed

View File

@ -516,9 +516,7 @@ public abstract class View extends AbstractModelObject implements AccessControll
// Check root project for sub-job projects (e.g. matrix jobs).
if (item.task instanceof AbstractProject<?, ?>) {
AbstractProject<?, ?> project = (AbstractProject<?, ?>) item.task;
if (viewItems.contains(project.getRootProject())) {
return true;
}
return viewItems.contains(project.getRootProject());
}
return false;
}

View File

@ -1056,7 +1056,7 @@ public abstract class VirtualFile implements Comparable<VirtualFile>, Serializab
@Override public InputStream open(boolean noFollowLinks) throws IOException {
try {
return f.read(root == null ? null : root, noFollowLinks);
return f.read(root, noFollowLinks);
} catch (InterruptedException x) {
throw new IOException(x);
}

View File

@ -28,7 +28,6 @@ THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:p="/lib/hudson/project" xmlns:this="this">
<p:config-disableBuild/>
<p:config-concurrentBuild />
<j:set var="jdks" value="${app.JDKs}" />

View File

@ -2,6 +2,7 @@ package hudson.model.AllView
import hudson.model.Computer
import hudson.model.Item
import hudson.model.Job
import jenkins.model.Jenkins
def l = namespace(lib.LayoutTagLib)
@ -11,7 +12,7 @@ def canSetUpDistributedBuilds = Jenkins.get().hasPermission(Computer.CREATE) &&
Jenkins.get().clouds.isEmpty() &&
Jenkins.get().getNodes().isEmpty();
def hasAdministerJenkinsPermission = Jenkins.get().hasPermission(Jenkins.ADMINISTER);
def hasItemCreatePermission = my.owner.hasPermission(Item.CREATE);
def hasItemCreatePermission = my.owner.itemGroup.hasPermission(Item.CREATE);
div {

View File

@ -26,50 +26,66 @@ THE SOFTWARE.
Config page. derived class specific entries should go to configure-entries.jsp
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout" xmlns:f="/lib/form">
<l:layout type="one-column" permission="${it.EXTENDED_READ}" title="${%Config(it.displayName)}">
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout" xmlns:f="/lib/form" xmlns:p="/lib/hudson/project">
<l:layout permission="${it.EXTENDED_READ}" title="${%Config(it.displayName)}">
<j:set var="readOnlyMode" value="${!it.hasPermission(it.CONFIGURE)}" />
<l:js src="jsbundles/config-scrollspy.js" />
<l:css src="jsbundles/config-scrollspy.css" />
<l:header>
<script src="${resURL}/jsbundles/section-to-sidebar-items.js" type="text/javascript" defer="true" />
</l:header>
<l:main-panel>
<div class="container">
<div class="row">
<div class="jenkins-config-container">
<div class="behavior-loading"><l:spinner text="${%LOADING}"/></div>
<f:form method="post" action="configSubmit" name="config" tableClass="config-table scrollspy">
<j:set var="descriptor" value="${it.descriptor}" />
<j:set var="instance" value="${it}" />
<div class="jenkins-section">
<f:entry title="${%Description}" help="${app.markupFormatter.helpUrl}">
<f:textarea name="description" value="${it.description}" codemirror-mode="${app.markupFormatter.codeMirrorMode}" codemirror-config="${app.markupFormatter.codeMirrorConfig}" previewEndpoint="/markupFormatter/previewDescription"/>
</f:entry>
</div>
<f:descriptorList field="properties" descriptors="${h.getJobPropertyDescriptors(it)}" forceRowSet="true"/>
<!-- additional entries from derived classes -->
<st:include page="configure-entries.jelly" />
<j:if test="${h.hasPermission(it,it.CONFIGURE)}">
<f:bottomButtonBar>
<!--<input type="button" name="StructureTest" value="Test" onclick="buildFormTree(this.form)" />-->
<f:submit value="${%Save}" large="true"/>
<f:apply value="${%Apply}" large="true" />
</f:bottomButtonBar>
</j:if>
</f:form>
<j:if test="${h.hasPermission(it,it.CONFIGURE)}">
<st:adjunct includes="lib.form.confirm" />
</j:if>
<l:side-panel>
<div id="tasks">
<div class="jenkins-app-bar">
<div class="jenkins-app-bar__content">
<h1>${%Configuration}</h1>
</div>
</div>
</div>
</div>
</l:side-panel>
<l:main-panel>
<div class="behavior-loading"><l:spinner text="${%LOADING}"/></div>
<f:form method="post" class="jenkins-form" action="configSubmit" name="config" tableClass="config-table">
<div class="jenkins-app-bar">
<div class="jenkins-app-bar__content">
<h2>
<div class="jenkins-hidden">
<l:icon src="symbol-settings" />
</div>
<span>${%General}</span>
</h2>
</div>
<div class="jenkins-app-bar__controls">
<p:config-disableBuild />
</div>
</div>
<j:set var="descriptor" value="${it.descriptor}" />
<j:set var="instance" value="${it}" />
<div class="jenkins-section jenkins-section--no-border jenkins-!-margin-top-6">
<f:entry title="${%Description}" help="${app.markupFormatter.helpUrl}">
<f:textarea name="description" value="${it.description}" codemirror-mode="${app.markupFormatter.codeMirrorMode}" codemirror-config="${app.markupFormatter.codeMirrorConfig}" previewEndpoint="/markupFormatter/previewDescription"/>
</f:entry>
</div>
<f:descriptorList field="properties" descriptors="${h.getJobPropertyDescriptors(it)}" forceRowSet="true"/>
<!-- additional entries from derived classes -->
<st:include page="configure-entries.jelly" />
<j:if test="${h.hasPermission(it,it.CONFIGURE)}">
<f:bottomButtonBar>
<f:submit value="${%Save}" />
<f:apply value="${%Apply}" />
</f:bottomButtonBar>
</j:if>
</f:form>
<j:if test="${h.hasPermission(it,it.CONFIGURE)}">
<st:adjunct includes="lib.form.confirm" />
</j:if>
</l:main-panel>
</l:layout>
</j:jelly>

View File

@ -34,4 +34,4 @@ THE SOFTWARE.
<p:config-buildWrappers />
<p:config-builders />
<p:config-publishers2 />
</j:jelly>
</j:jelly>

View File

@ -23,11 +23,11 @@ THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form" xmlns:st="jelly:stapler" xmlns:t="/hudson/tools">
<t:label />
<f:entry title="${%Command}" field="command">
<f:textarea checkMethod="post"/>
</f:entry>
<f:entry title="${%Tool Home}" field="toolHome">
<f:textbox/>
</f:entry>
<t:label />
</j:jelly>

View File

@ -23,11 +23,13 @@ THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form" xmlns:st="jelly:stapler" xmlns:t="/hudson/tools">
<t:label />
<f:entry title="${%Download URL for binary archive}" field="url">
<f:textbox checkMethod="post"/>
</f:entry>
<f:entry title="${%Subdirectory of extracted archive}" field="subdir">
<f:textbox/>
</f:entry>
<f:advanced>
<t:label />
</f:advanced>
</j:jelly>

View File

@ -30,6 +30,10 @@ THE SOFTWARE.
<st:attribute name="title">
Human readable title of the section to be rendered in HTML.
</st:attribute>
<st:attribute name="icon">
Sets the icon on the sidebar item for the section anchor link
The icon isn't visible in the section itself
</st:attribute>
<st:attribute name="descriptors" use="required">
hudson.model.Descriptor collection whose configuration page is rendered.
</st:attribute>
@ -65,7 +69,7 @@ THE SOFTWARE.
<j:set var="instances" value="${attrs.instances ?: instance[field] ?: descriptor['default'+h.capitalize(field)]}"/>
<j:if test="${!empty(descriptors) or context['org.apache.commons.jelly.body']!=null}">
<f:section title="${attrs.title}" name="${attrs.field?:attrs.name}">
<f:section title="${attrs.title}" name="${attrs.field?:attrs.name}" icon="${attrs.icon}">
<j:if test="${attrs.field!=null}">
<div class="stapler-class-bag tr">
<div>

View File

@ -59,7 +59,7 @@ THE SOFTWARE.
Default: false
</st:attribute>
</st:documentation>
<form id="${id}" class="${class}" action="${action}" method="${method}" enctype="${attrs.enctype}" name="${name}" target="${attrs.target}" autocomplete="${attrs.autocomplete==true?'on':'off'}">
<form id="${id}" class="${attrs.class}" action="${action}" method="${method}" enctype="${attrs.enctype}" name="${name}" target="${attrs.target}" autocomplete="${attrs.autocomplete==true?'on':'off'}">
<div width="100%" class="${attrs.tableClass}">
<d:invokeBody/>
</div>

View File

@ -53,7 +53,7 @@ THE SOFTWARE.
</j:when>
<j:otherwise>
<j:if test="${contents.length() != 0}">
<div class="${isFormItem.equals('false') ? '' : 'jenkins-form-item'} ${class}">
<div class="${isFormItem.equals('false') ? '' : 'jenkins-form-item'} ${attrs.class}">
<div ref="${attrs.ref}" class="row-set-start row-group-start tr" style="display:none" name="${attrs.name}"></div>
<j:out value="${contents}" />
<div class="row-set-end row-group-end tr"></div>

View File

@ -31,6 +31,9 @@ THE SOFTWARE.
The section header text.
If null is given, the entire &lt;f:section> tag becomes no-op.
</st:attribute>
<st:attribute name="icon">
Optional attribute to set an icon for the section, this is only visible when using section-to-sidebar-items.js
</st:attribute>
<st:attribute name="name">
Optional attribute to create a JSON object from this section.
</st:attribute>
@ -42,10 +45,13 @@ THE SOFTWARE.
<div class="${attrs.title!=null ? 'jenkins-section' : ''}">
<j:if test="${attrs.title!=null}">
<div class="jenkins-section__title">
${title}
<div class="jenkins-hidden">
<l:icon src="${attrs.icon ?: 'symbol-settings'}" />
</div>
${attrs.title}
</div>
</j:if>
<d:invokeBody />
</div>
</f:rowSet>
</j:jelly>
</j:jelly>

View File

@ -23,65 +23,83 @@ THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<st:documentation>
&lt;input type="checkbox"> tag that takes true/false for @checked, which is more Jelly friendly.
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout"
xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<st:documentation>
&lt;input type="checkbox"> tag that takes true/false for @checked, which is more Jelly friendly.
<st:attribute name="name" />
<st:attribute name="checked" />
<st:attribute name="value" />
<st:attribute name="json">
Normally, the submitted JSON will be boolean indicating whether the checkbox was checked or not.
This is sometimes inconvenient if you have a UI that lets user select a subset of a set.
If this attribute is present, the submitted JSON will have this as a string value if the checkbox is checked,
and none otherwise, making the subset selection easier.
</st:attribute>
<st:attribute name="default">
The default value of the check box, in case both @checked and @instance are null.
If this attribute is unspecified or null, it defaults to unchecked, otherwise checked.
</st:attribute>
<st:attribute name="id" />
<st:attribute name="onclick" />
<st:attribute name="class" />
<st:attribute name="negative" />
<st:attribute name="readonly">
If set to true, this will take precedence over the onclick attribute and prevent the state of the checkbox from being changed.
<st:attribute name="name"/>
<st:attribute name="checked"/>
<st:attribute name="value"/>
<st:attribute name="json">
Normally, the submitted JSON will be boolean indicating whether the checkbox was checked or not.
This is sometimes inconvenient if you have a UI that lets user select a subset of a set.
If this attribute is present, the submitted JSON will have this as a string value if the checkbox is checked,
and none otherwise, making the subset selection easier.
</st:attribute>
<st:attribute name="default">
The default value of the check box, in case both @checked and @instance are null.
If this attribute is unspecified or null, it defaults to unchecked, otherwise checked.
</st:attribute>
<st:attribute name="id"/>
<st:attribute name="onclick"/>
<st:attribute name="class"/>
<st:attribute name="invertLabel">
Move the label of the toggle switch to the opposite side
</st:attribute>
<st:attribute name="readonly">
If set to true, this will take precedence over the onclick attribute and prevent the state of the checkbox from
being changed.
Note: if you want an actual read only checkbox then add:
&lt;j:set var="readOnlyMode" value="true"/&gt; inside your entry tag
See https://www.jenkins.io/doc/developer/views/read-only/#enabling-read-only-view-support
</st:attribute>
<st:attribute name="field">
Used for databinding. TBD.
</st:attribute>
<st:attribute name="title">
If specified, this human readable text will follow the checkbox, and clicking this text also
toggles the checkbox.
</st:attribute>
<st:attribute name="tooltip">
Used as tooltip of the checkbox, and, if a title is specified, of the title
</st:attribute>
</st:documentation>
<f:prepareDatabinding />
<j:set var="name" value="${attrs.name ?: '_.'+attrs.field}"/>
<j:set var="default" value="${attrs.default ?: false}"/>
<j:set var="value" value="${attrs.checked ?: instance[attrs.field] ?: default}"/>
Note: if you want an actual read only checkbox then add:
&lt;j:set var="readOnlyMode" value="true"/&gt; inside your entry tag
See https://www.jenkins.io/doc/developer/views/read-only/#enabling-read-only-view-support
</st:attribute>
<st:attribute name="field">
Used for databinding. TBD.
</st:attribute>
<st:attribute name="title">
If specified, this text will follow the toggle switch
</st:attribute>
<st:attribute name="checkedTitle">
If specified, this title will be used when the toggle switch is checked - otherwise the title attribute
will be used for both states
</st:attribute>
<st:attribute name="tooltip">
Used as tooltip of the checkbox, and, if a title is specified, of the title
</st:attribute>
</st:documentation>
<f:prepareDatabinding/>
<j:set var="name" value="${attrs.name ?: '_.'+attrs.field}"/>
<j:set var="default" value="${attrs.default ?: false}"/>
<j:set var="value" value="${attrs.checked ?: instance[attrs.field] ?: default}"/>
<span class="jenkins-toggle-switch">
<input type="checkbox"
name="${name}"
value="${attrs.value}"
title="${attrs.tooltip}"
onclick="${attrs.readonly=='true' ? 'return false;' : attrs.onclick}"
id="${attrs.id}"
class="${attrs.class} ${attrs.negative!=null ? 'negative' : null} ${attrs.checkUrl!=null?'validated':''}"
checkUrl="${attrs.checkUrl}"
checkDependsOn="${attrs.checkDependsOn}" json="${attrs.json}"
disabled="${readOnlyMode ? 'true' : null}"
checked="${value ? 'true' : null}"/>
<label class="attach-previous">${attrs.title}</label>
<j:if test="${attrs.description != null and !attrs.description.trim().isEmpty()}">
<span class="jenkins-toggle-switch__description">${attrs.description}</span>
</j:if>
</span>
</j:jelly>
<span tooltip="${attrs.tooltip}" id="toggle-switch-${id}"
class="jenkins-toggle-switch ${attrs.invertLabel != null ? 'jenkins-toggle-switch--invert-label' : null}">
<input type="checkbox"
name="${name}"
value="${value}"
id="${id}"
onclick="${readonly=='true' ? 'return false;' : onclick}"
class="jenkins-toggle-switch__input ${attrs.class} ${checkUrl!=null?'validated':''}"
checkUrl="${checkUrl}"
checkDependsOn="${checkDependsOn}" json="${json}"
disabled="${readOnlyMode ? 'true' : null}"
checked="${value ? 'true' : null}"/>
<label class="jenkins-toggle-switch__label ${id != null ? '' : 'attach-previous'}"
for="${id}" data-title="${title}" data-checked-title="${checkedTitle}">
<j:choose>
<j:when test="${checkedTitle == null}">
${title}
</j:when>
<j:otherwise>
<span class="jenkins-toggle-switch__label__unchecked-title">${title}</span>
<span class="jenkins-toggle-switch__label__checked-title">${checkedTitle}</span>
</j:otherwise>
</j:choose>
</label>
<j:if test="${description != null and !description.trim().isEmpty()}">
<span class="jenkins-toggle-switch__description">${description}</span>
</j:if>
</span>
</j:jelly>

View File

@ -31,6 +31,7 @@ THE SOFTWARE.
<j:if test="${!empty(wrappers)}">
<f:descriptorList title="${%Build Environment}"
descriptors="${wrappers}"
instances="${it.buildWrappers}" />
instances="${it.buildWrappers}"
icon="symbol-environment" />
</j:if>
</j:jelly>
</j:jelly>

View File

@ -27,7 +27,7 @@ THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:p="/lib/hudson/project">
<f:section title="${%Build}">
<f:section title="${%Build Steps}" icon="symbol-build-steps">
<f:block>
<f:hetero-list name="builder" hasHeader="true"
descriptors="${h.getBuilderDescriptors(it)}"
@ -35,4 +35,4 @@ THE SOFTWARE.
addCaption="${%Add build step}"/>
</f:block>
</f:section>
</j:jelly>
</j:jelly>

View File

@ -22,11 +22,21 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<!--
Configuration entry for disabling a project; applies to ParameterizedJob
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:optionalBlock name="disable" title="${%Disable this project}" checked="${it.disabled}"
help="/help/project-config/disable.html" inline="true" />
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:f="/lib/form">
<st:documentation>
Configuration entry for disabling a project; applies to ParameterizedJob
<st:attribute name="tooltip" use="optional">
Replaces the default tooltip for the toggle switch
</st:attribute>
</st:documentation>
<f:toggleSwitch id="enable-disable-project"
name="enable"
title="${%Disabled}"
checkedTitle="${%Enabled}"
checked="${!it.disabled}"
invertLabel="true"
tooltip="${tooltip ?: '%Enable or disable the current project'}" />
</j:jelly>

View File

@ -27,7 +27,7 @@ THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
<f:section title="${%Post-build Actions}">
<f:section title="${%Post-build Actions}" icon="symbol-post-build">
<f:block>
<f:hetero-list name="publisher" hasHeader="true"
descriptors="${h.getPublisherDescriptors(it)}"
@ -38,4 +38,4 @@ THE SOFTWARE.
addCaption="${%Add post-build action}"/>
</f:block>
</f:section>
</j:jelly>
</j:jelly>

View File

@ -25,7 +25,7 @@ THE SOFTWARE.
<!-- SCM config pane -->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:section title="${%Source Code Management}">
<f:section title="${%Source Code Management}" icon="symbol-source-code-management">
<!-- Could use f:descriptorRadioList were it not for scm/scmd compatibility code; pending JENKINS-20959 would not help with performance -->
<j:forEach var="descriptor" items="${h.getSCMDescriptors(instance)}" varStatus="loop">
<j:set var="scmd" value="${descriptor}" /><!-- backward compatibility with <1.238 -->
@ -45,4 +45,4 @@ THE SOFTWARE.
descriptors="${descriptors}" />
</f:section>
</j:if>
</j:jelly>
</j:jelly>

View File

@ -33,9 +33,10 @@ THE SOFTWARE.
</j:invokeStatic>
<f:descriptorList title="${%Build Triggers}"
descriptors="${triggers}"
instances="${it.triggers}">
instances="${it.triggers}"
icon="symbol-trigger">
<d:invokeBody />
<!-- pseudo-trigger to configure URL to trigger builds remotely. -->
<st:include page="/hudson/model/BuildAuthorizationToken/config.jelly" />
</f:descriptorList>
</j:jelly>
</j:jelly>

View File

@ -1,7 +1,7 @@
---
ath:
useLocalSnapshots: false
athRevision: "acceptance-test-harness-1.112"
athRevision: "acceptance-test-harness-1.113"
athImage: "jenkins/ath:1.97-pre"
categories:
- org.jenkinsci.test.acceptance.junit.SmokeTest

13
pom.xml
View File

@ -28,7 +28,7 @@ THE SOFTWARE.
<parent>
<groupId>org.jenkins-ci</groupId>
<artifactId>jenkins</artifactId>
<version>1.79</version>
<version>1.80</version>
<relativePath />
</parent>
@ -629,16 +629,5 @@ THE SOFTWARE.
</plugins>
</build>
</profile>
<profile>
<id>specific-test</id>
<activation>
<property>
<name>test</name>
</property>
</activation>
<properties>
<failIfNoTests>false</failIfNoTests>
</properties>
</profile>
</profiles>
</project>

View File

@ -90,7 +90,7 @@ THE SOFTWARE.
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jenkins-test-harness</artifactId>
<version>1795.vdec8c5cf0eca_</version>
<version>1797.v711534844e8a_</version>
<scope>test</scope>
<exclusions>
<exclusion>

View File

@ -38,7 +38,7 @@
"jest-handlebars": "^1.0.1",
"jest-junit": "^12.0.0",
"jest-standard-reporter": "^1.0.4",
"less": "^3.10.3",
"less": "^3.13.1",
"less-loader": "^5.0.0",
"mini-css-extract-plugin": "^0.9.0",
"postcss": "^8.4.14",
@ -46,7 +46,7 @@
"style-loader": "^1.2.1",
"stylelint": "^14.9.1",
"stylelint-config-standard": "^26.0.0",
"webpack": "^4.41.2",
"webpack": "^4.46.0",
"webpack-cli": "^4.10.0",
"webpack-fix-style-only-entries": "^0.5.0"
},

View File

@ -0,0 +1,77 @@
import {createElementFromHtml, toId} from "./util/dom";
import page from "./util/page";
const HEADER_SELECTOR = ".config-table .jenkins-app-bar h2, .config-table > .jenkins-section > .jenkins-section__title";
const DEFAULT_ICON = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M262.29 192.31a64 64 0 1057.4 57.4 64.13 64.13 0 00-57.4-57.4zM416.39 256a154.34 154.34 0 01-1.53 20.79l45.21 35.46a10.81 10.81 0 012.45 13.75l-42.77 74a10.81 10.81 0 01-13.14 4.59l-44.9-18.08a16.11 16.11 0 00-15.17 1.75A164.48 164.48 0 01325 400.8a15.94 15.94 0 00-8.82 12.14l-6.73 47.89a11.08 11.08 0 01-10.68 9.17h-85.54a11.11 11.11 0 01-10.69-8.87l-6.72-47.82a16.07 16.07 0 00-9-12.22 155.3 155.3 0 01-21.46-12.57 16 16 0 00-15.11-1.71l-44.89 18.07a10.81 10.81 0 01-13.14-4.58l-42.77-74a10.8 10.8 0 012.45-13.75l38.21-30a16.05 16.05 0 006-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16 16 0 00-6.07-13.94l-38.19-30A10.81 10.81 0 0149.48 186l42.77-74a10.81 10.81 0 0113.14-4.59l44.9 18.08a16.11 16.11 0 0015.17-1.75A164.48 164.48 0 01187 111.2a15.94 15.94 0 008.82-12.14l6.73-47.89A11.08 11.08 0 01213.23 42h85.54a11.11 11.11 0 0110.69 8.87l6.72 47.82a16.07 16.07 0 009 12.22 155.3 155.3 0 0121.46 12.57 16 16 0 0015.11 1.71l44.89-18.07a10.81 10.81 0 0113.14 4.58l42.77 74a10.8 10.8 0 01-2.45 13.75l-38.21 30a16.05 16.05 0 00-6.05 14.08c.33 4.14.55 8.3.55 12.47z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/></svg>`;
window.addEventListener("load", function() {
const sidebar = document.querySelector("#tasks");
const sectionHeaders = document.querySelectorAll(HEADER_SELECTOR);
// Ensure sidebar is sticky
sidebar.style.position = "sticky";
sidebar.style.top = `calc(${page.breadcrumbBarHeight()}px + 1.6rem)`;
// Create the sidebar items
sectionHeaders.forEach(function (header, i) {
const headerId = toId(header.textContent);
header.id = headerId;
const icon = header.querySelector("svg") ? header.querySelector("svg").outerHTML : DEFAULT_ICON;
const item = createElementFromHtml(`
<div class="task">
<span class="task-link-wrapper">
<button data-section-id=${headerId} class="task-link">
<span class="task-icon-link">
${icon}
</span>
<span class="task-link-text">
${header.textContent}
</span>
</button>
</span>
</div>
`);
item.addEventListener("click", () => {
const headerToScrollTo = document.getElementById(item.querySelector(".task-link").dataset.sectionId);
document.documentElement.scrollTop = i === 0 ? 0 : (headerToScrollTo.getBoundingClientRect().top + window.scrollY) - 70;
});
sidebar.insertAdjacentElement('beforeend', item);
});
// TODO - Remove when Matrix-Project plugin has been updated to only have one enable/disable project toggle
// Having multiple toggles on the same page for the same field corrupts submission for that field, so
// remove all but the first
document.querySelectorAll(".jenkins-form-item + span input[name='enable']").forEach(input => {
input.parentElement.remove();
});
document.addEventListener("scroll", () => onScroll());
onScroll();
})
/**
* Change the selected item depending on the user's vertical scroll position
*/
function onScroll() {
const scrollY = Math.max(window.scrollY, 0);
const sectionHeaders = document.querySelectorAll(HEADER_SELECTOR);
let selectedSection = null;
// Calculate the top and height of each section to know when to switch selected sidebar item
sectionHeaders.forEach(function (section, i) {
const previousSection = i === 1 ? document.querySelectorAll(".jenkins-section")[0] : sectionHeaders[Math.max(i - 1, 0)].parentNode;
const viewportEntryOffset = i === 0 ? 0 : (section.parentNode.getBoundingClientRect().top + window.scrollY) - (previousSection.offsetHeight / 2);
if (scrollY >= viewportEntryOffset) {
selectedSection = section;
}
})
document.querySelectorAll(".task-link--active").forEach(function (selected) {
selected.classList.remove("task-link--active");
})
document.querySelector(".task-link[data-section-id='" + selectedSection.id + "']").classList.add("task-link--active");
}

View File

@ -0,0 +1,9 @@
export function createElementFromHtml(html) {
const template = document.createElement("template");
template.innerHTML = html.trim();
return template.content.firstElementChild;
}
export function toId(string) {
return string.trim().replace(/[\W_]+/g, "-").toLowerCase();
}

View File

@ -1,6 +1,6 @@
@unit: 0.4rem;
each(range(0, 5), {
each(range(0, 6), {
.jenkins-\!-margin-@{value} {
margin: @value * @unit !important;
}
@ -22,7 +22,7 @@ each(range(0, 5), {
}
});
each(range(0, 5), {
each(range(0, 6), {
.jenkins-\!-padding-@{value} {
padding: @value * @unit !important;
}

View File

@ -431,6 +431,19 @@ pre.console {
color: white;
}
div.behavior-loading {
position: fixed;
display: flex;
align-items: center;
justify-content: center;
top: 56px;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
background: var(--background);
}
.bottom-sticker, #bottom-sticker {
position: sticky;
// This has to be set to -1px so that IntersectionObserver can add the

View File

@ -33,7 +33,8 @@
}
}
.jenkins-toggle-switch__label__enabled-title, .jenkins-toggle-switch__label__disabled-title {
.jenkins-toggle-switch__label__checked-title,
.jenkins-toggle-switch__label__unchecked-title {
left: unset !important;
right: calc(50px + 1rem) !important;
}
@ -71,6 +72,14 @@
width: 25px;
}
}
.jenkins-toggle-switch__label__checked-title {
opacity: 1;
}
.jenkins-toggle-switch__label__unchecked-title {
opacity: 0;
}
}
}
@ -119,7 +128,7 @@
mask-position: center;
border-radius: 100px;
transition: var(--standard-transition);
box-shadow: -1px 0 0 rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
}
&:hover::before {
@ -137,14 +146,15 @@
}
}
.jenkins-toggle-switch__label__enabled-title {
.jenkins-toggle-switch__label__checked-title {
opacity: 0;
}
.jenkins-toggle-switch__label__enabled-title, .jenkins-toggle-switch__label__disabled-title {
.jenkins-toggle-switch__label__checked-title,
.jenkins-toggle-switch__label__unchecked-title {
position: absolute;
left: calc(50px + 1rem);
transition: 0.55s cubic-bezier(0, 0.68, 0.5, 1.25);
transform-style: preserve-3d;
transition: opacity 0.4s;
user-select: none;
}
}

View File

@ -31,7 +31,8 @@
border-bottom: 2px solid var(--panel-border-color);
}
h1 {
h1,
h2 {
margin: 0;
font-size: 1.6rem;
}

View File

@ -16,6 +16,11 @@
display: none;
}
&--no-border {
border-top: none;
padding-top: 0;
}
&--bottom-padding {
padding-bottom: var(--section-padding);
}

View File

@ -14,6 +14,10 @@
}
}
#tasks h1 {
margin-top: 0.4rem;
}
#tasks .task {
margin: 0 0 0 -0.8rem;
}
@ -27,6 +31,7 @@
justify-content: flex-start;
padding: 0.55rem 0.8rem;
gap: 0.75rem;
width: 100%;
cursor: pointer;
z-index: 0;
font-weight: 500 !important;
@ -36,6 +41,7 @@
outline: none;
border: none;
text-decoration: none;
margin: 0;
.task-icon-link {
display: contents;

View File

@ -11,6 +11,7 @@ html {
letter-spacing: -0.016em;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
scroll-behavior: smooth;
}
@import './abstracts/mixins';

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="580px" height="580px" viewBox="0 0 580 580" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M47.265625,85.0076715 L47.265625,163.898578 C47.265625,168.642915 51.8902644,171.657091 55.6987909,169.382857 L123.136915,129.020637 C126.43401,127.048364 126.43401,121.857886 123.136915,119.885613 L55.6987909,79.5233933 C51.8902644,77.2491588 47.265625,80.2633356 47.265625,85.0076715 Z" stroke="currentColor" stroke-width="26"></path>
<path d="M239.866777,84.75 L494.508223,84.75 C507.09031,84.75 512.181981,85.9876748 517.147259,88.3117694 C522.112536,90.6358639 526.009316,94.0463783 528.664775,98.3920572 C531.320235,102.737736 532.734375,107.194036 532.734375,118.206051 L532.734375,131.293949 C532.734375,142.305964 531.320235,146.762264 528.664775,151.107943 C526.009316,155.453621 522.112536,158.864136 517.147259,161.18823 C512.181981,163.512325 507.09031,164.75 494.508223,164.75 L239.866777,164.75 C227.28469,164.75 222.193019,163.512325 217.227741,161.18823 C212.262464,158.864136 208.365684,155.453621 205.710225,151.107943 C203.054765,146.762264 201.640625,142.305964 201.640625,131.293949 L201.640625,118.206051 C201.640625,107.194036 203.054765,102.737736 205.710225,98.3920572 C208.365684,94.0463783 212.262464,90.6358639 217.227741,88.3117694 C222.193019,85.9876748 227.28469,84.75 239.866777,84.75 Z" stroke="currentColor" stroke-width="32.5"></path>
<path d="M47.265625,250.554547 L47.265625,329.445453 C47.265625,334.18979 51.8902644,337.203966 55.6987909,334.929732 L123.136915,294.567511 C126.43401,292.595239 126.43401,287.404761 123.136915,285.432489 L55.6987909,245.070268 C51.8902644,242.796034 47.265625,245.81021 47.265625,250.554547 Z" stroke="currentColor" stroke-width="26"></path>
<path d="M239.866777,250.296875 L494.508223,250.296875 C507.09031,250.296875 512.181981,251.53455 517.147259,253.858645 C522.112536,256.182739 526.009316,259.593254 528.664775,263.938932 C531.320235,268.284611 532.734375,272.740911 532.734375,283.752926 L532.734375,296.840824 C532.734375,307.852839 531.320235,312.309139 528.664775,316.654818 C526.009316,321.000496 522.112536,324.411011 517.147259,326.735105 C512.181981,329.0592 507.09031,330.296875 494.508223,330.296875 L239.866777,330.296875 C227.28469,330.296875 222.193019,329.0592 217.227741,326.735105 C212.262464,324.411011 208.365684,321.000496 205.710225,316.654818 C203.054765,312.309139 201.640625,307.852839 201.640625,296.840824 L201.640625,283.752926 C201.640625,272.740911 203.054765,268.284611 205.710225,263.938932 C208.365684,259.593254 212.262464,256.182739 217.227741,253.858645 C222.193019,251.53455 227.28469,250.296875 239.866777,250.296875 Z" stroke="currentColor" stroke-width="32.5"></path>
<path d="M47.265625,416.101422 L47.265625,494.992328 C47.265625,499.736665 51.8902644,502.750841 55.6987909,500.476607 L123.136915,460.114386 C126.43401,458.142114 126.43401,452.951636 123.136915,450.979364 L55.6987909,410.617143 C51.8902644,408.342909 47.265625,411.357085 47.265625,416.101422 Z" stroke="currentColor" stroke-width="26"></path>
<path d="M239.866777,415.84375 L494.508223,415.84375 C507.09031,415.84375 512.181981,417.081425 517.147259,419.40552 C522.112536,421.729614 526.009316,425.140129 528.664775,429.485807 C531.320235,433.831486 532.734375,438.287786 532.734375,449.299801 L532.734375,462.387699 C532.734375,473.399714 531.320235,477.856014 528.664775,482.201693 C526.009316,486.547371 522.112536,489.957886 517.147259,492.28198 C512.181981,494.606075 507.09031,495.84375 494.508223,495.84375 L239.866777,495.84375 C227.28469,495.84375 222.193019,494.606075 217.227741,492.28198 C212.262464,489.957886 208.365684,486.547371 205.710225,482.201693 C203.054765,477.856014 201.640625,473.399714 201.640625,462.387699 L201.640625,449.299801 C201.640625,438.287786 203.054765,433.831486 205.710225,429.485807 C208.365684,425.140129 212.262464,421.729614 217.227741,419.40552 C222.193019,417.081425 227.28469,415.84375 239.866777,415.84375 Z" stroke="currentColor" stroke-width="32.5"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path d="M256 48c-58.07 0-112.67 93.13-112.67 208S197.93 464 256 464s112.67-93.13 112.67-208S314.07 48 256 48z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path d="M117.33 117.33c38.24 27.15 86.38 43.34 138.67 43.34s100.43-16.19 138.67-43.34M394.67 394.67c-38.24-27.15-86.38-43.34-138.67-43.34s-100.43 16.19-138.67 43.34" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><path fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32" d="M256 48v416M464 256H48"/></svg>

After

Width:  |  Height:  |  Size: 807 B

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="512px" height="512px" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
<path d="M448,341.339707 L448,170.579707 C447.98613,159.20656 441.936771,148.695371 432.11,142.969707 L280.11,54.5097067 C265.201263,45.8300978 246.778737,45.8300978 231.87,54.5097067 L79.89,142.969707 C70.0632289,148.695371 64.0138705,159.20656 64,170.579707 L64,341.339707 C64.0067627,352.719997 70.0570661,363.240443 79.89,368.969707 L231.89,457.429707 C246.802122,466.096765 265.217878,466.096765 280.13,457.429707 L432.13,368.969707 C441.955241,363.235397 448,352.715896 448,341.339707 Z" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></path>
<line x1="69" y1="153.959707" x2="256" y2="263.959707" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="256" y1="263.959707" x2="318" y2="226" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="382.5" y1="190.5" x2="443" y2="153.959707" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="163" y1="208.959707" x2="225" y2="171" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="289.5" y1="135.5" x2="350" y2="98.9597067" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="256" y1="463.959707" x2="256" y2="263.959707" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="131" y1="115.959707" x2="318" y2="225.959707" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="191" y1="80.9597067" x2="378" y2="190.959707" id="Path" stroke="currentColor" stroke-width="32" stroke-linejoin="round"></line>
<line x1="318" y1="227" x2="317.991704" y2="345.768179" id="Path-3" stroke="currentColor" stroke-width="32"></line>
<line x1="382.876735" y1="194.959707" x2="382.876735" y2="308.645029" id="Path-4" stroke="currentColor" stroke-width="32"></line>
<line x1="318" y1="346" x2="382.876735" y2="308.645029" id="Path-5" stroke="currentColor" stroke-width="32"></line>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><circle cx="160" cy="96" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><circle cx="160" cy="416" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M160 368V144"/><circle cx="352" cy="160" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><path d="M352 208c0 128-192 48-192 160" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/></svg>

After

Width:  |  Height:  |  Size: 729 B

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"><title>Locate</title><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M256 96V56M256 456v-40"/><path d="M256 112a144 144 0 10144 144 144 144 0 00-144-144z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M416 256h40M56 256h40"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M112.91 128A191.85 191.85 0 0064 254c-1.18 106.35 85.65 193.8 192 194 106.2.2 192-85.83 192-192 0-104.54-83.55-189.61-187.5-192a4.36 4.36 0 00-4.5 4.37V152" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><path d="M233.38 278.63l-79-113a8.13 8.13 0 0111.32-11.32l113 79a32.5 32.5 0 01-37.25 53.26 33.21 33.21 0 01-8.07-7.94z" fill="currentColor" /></svg>

Before

Width:  |  Height:  |  Size: 507 B

After

Width:  |  Height:  |  Size: 477 B

View File

@ -31,6 +31,7 @@ module.exports = (env, argv) => ({
path.join(__dirname, "src/main/js/config-tabbar.less"),
],
"sortable-drag-drop": [path.join(__dirname, "src/main/js/sortable-drag-drop.js")],
"section-to-sidebar-items": [path.join(__dirname, "src/main/js/section-to-sidebar-items.js")],
"section-to-tabs": [path.join(__dirname, "src/main/js/section-to-tabs.js")],
"filter-build-history": [path.join(__dirname, "src/main/js/filter-build-history.js")],
"simple-page": [path.join(__dirname, "src/main/less/simple-page.less")],

View File

@ -1731,27 +1731,12 @@ ajv-errors@^1.0.0:
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
ajv-keywords@^3.5.2:
ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5:
version "6.12.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ajv@^6.12.5:
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.5, ajv@^6.5.5:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@ -1870,6 +1855,14 @@ anymatch@^3.0.3, anymatch@~3.1.1:
normalize-path "^3.0.0"
picomatch "^2.0.4"
anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
aproba@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
@ -1940,11 +1933,6 @@ arrify@^1.0.0, arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
asn1.js@^4.0.0:
version "4.10.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@ -2649,6 +2637,21 @@ chokidar@^3.4.0:
optionalDependencies:
fsevents "~2.1.2"
chokidar@^3.4.1:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@ -2757,7 +2760,7 @@ clone@^1.0.0:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
clone@^2.1.1, clone@^2.1.2:
clone@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
@ -2908,6 +2911,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0,
dependencies:
safe-buffer "~5.1.1"
copy-anything@^2.0.1:
version "2.0.6"
resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
dependencies:
is-what "^3.14.1"
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@ -3545,10 +3555,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
enhanced-resolve@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
enhanced-resolve@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
dependencies:
graceful-fs "^4.1.2"
memory-fs "^0.5.0"
@ -4172,6 +4182,11 @@ fsevents@^2.1.2, fsevents@~2.1.2:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@ -4275,7 +4290,7 @@ glob-parent@^5.0.0, glob-parent@~5.1.0:
dependencies:
is-glob "^4.0.1"
glob-parent@^5.1.2:
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@ -5164,6 +5179,11 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
is-what@^3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@ -5946,21 +5966,20 @@ less-loader@^5.0.0:
loader-utils "^1.1.0"
pify "^4.0.1"
less@^3.10.3:
version "3.11.1"
resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2"
integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g==
less@^3.13.1:
version "3.13.1"
resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909"
integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==
dependencies:
clone "^2.1.2"
copy-anything "^2.0.1"
tslib "^1.10.0"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
make-dir "^2.1.0"
mime "^1.4.1"
mkdirp "^0.5.0"
promise "^7.1.1"
request "^2.83.0"
native-request "^1.0.5"
source-map "~0.6.0"
leven@^3.1.0:
@ -6407,7 +6426,7 @@ minimist-options@4.1.0:
is-plain-obj "^1.1.0"
kind-of "^6.0.3"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@ -6482,25 +6501,18 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mkdirp@~0.5.1:
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
dependencies:
minimist "^1.2.6"
mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@ -6562,6 +6574,11 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
native-request@^1.0.5:
version "1.1.0"
resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.1.0.tgz#acdb30fe2eefa3e1bc8c54b3a6852e9c5c0d3cb0"
integrity sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@ -7591,13 +7608,6 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
dependencies:
asap "~2.0.3"
prompts@^2.0.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
@ -7788,6 +7798,13 @@ readdirp@~3.4.0:
dependencies:
picomatch "^2.2.1"
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
rechoir@^0.7.0:
version "0.7.1"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
@ -7952,7 +7969,7 @@ request-promise-native@^1.0.8:
stealthy-require "^1.1.1"
tough-cookie "^2.3.3"
request@^2.55.0, request@^2.83.0, request@^2.88.2:
request@^2.55.0, request@^2.88.2:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
@ -9429,23 +9446,23 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
watchpack-chokidar2@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
watchpack-chokidar2@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
dependencies:
chokidar "^2.1.8"
watchpack@^1.6.1:
version "1.7.2"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa"
integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==
watchpack@^1.7.4:
version "1.7.5"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
dependencies:
graceful-fs "^4.1.2"
neo-async "^2.5.0"
optionalDependencies:
chokidar "^3.4.0"
watchpack-chokidar2 "^2.0.0"
chokidar "^3.4.1"
watchpack-chokidar2 "^2.0.1"
webidl-conversions@^5.0.0:
version "5.0.0"
@ -9504,10 +9521,10 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
source-list-map "^2.0.0"
source-map "~0.6.1"
webpack@^4.41.2:
version "4.43.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
webpack@^4.46.0:
version "4.46.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542"
integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-module-context" "1.9.0"
@ -9517,7 +9534,7 @@ webpack@^4.41.2:
ajv "^6.10.2"
ajv-keywords "^3.4.1"
chrome-trace-event "^1.0.2"
enhanced-resolve "^4.1.0"
enhanced-resolve "^4.5.0"
eslint-scope "^4.0.3"
json-parse-better-errors "^1.0.2"
loader-runner "^2.4.0"
@ -9530,7 +9547,7 @@ webpack@^4.41.2:
schema-utils "^1.0.0"
tapable "^1.1.3"
terser-webpack-plugin "^1.4.3"
watchpack "^1.6.1"
watchpack "^1.7.4"
webpack-sources "^1.4.1"
whatwg-encoding@^1.0.5: