+
+ ${item.name}
+
-
${item.name}
${item.description}
@@ -52,24 +52,36 @@ THE SOFTWARE.
-
- ${%tip-first}
- ${%tip-second}
- ${%tip-third}
- ${%tip-fourth}
+
+
+
+
+ ${%tip-first}
+ ${%tip-second}
+
+
+ ${%tip-third}
+
+
+ ${%tip-fourth}
+
+
+
- ${%Semantics}
-
-
-
-
-
+
+
+
+
+
+
+
- ${%Palette}
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Conventions/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Conventions/index.jelly
deleted file mode 100644
index 4f36c037..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Conventions/index.jelly
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
- Stylesheets (CSS/SCSS)
-
- Naming
-
- Classnames should follow Block Element Modifier (BEM) methodology and be prefixed.
-
-
-
-
Block
- Standalone entity that is meaningful on its own
- e.g. header
, container
, menu
, checkbox
, input
-
-
-
Element
- A part of a block that has no standalone meaning and is semantically tied to its block
- e.g. __item
, __checkbox-caption
, __header
-
-
-
Modifier
- A flag on a block or element. Use them to change appearance or behavior
- e.g. --disabled
, --selected
, --large
-
-
-
- An example classname following this strategy could be .jenkins-cards __item --large
or .jenkins-button --disabled
.
-
-
- Not every class falls neatly into BEM, for example a class that does not belong to a particular component - such as a spacing or color class. For those classes we use the -!-
convention to indicate that the classes can be used on any component.
-
-
-
- Examples include: .jenkins-!-padding-6
, .jenkins-!-margin-6
and .jenkins-!-destructive-color
.
-
-
- Prefixes
-
-
- Classes should be prefixed in a way that is unique to your service or plugin. We use prefixes due to the extensible nature of Jenkins, without prefixing we couldn't be certain a plugin class wouldn't interfere with a Jenkins class. We also use prefixing to prevent clashes with other libraries, such as Bootstrap.
-
-
-
- Jenkins uses the prefixes jenkins-
and app-
to namespace CSS classes, these prefixes should not be used in your plugins. Due to legacy reasons, some classes in use in Jenkins aren't namespaced however they are okay to use in your plugin.
-
-
-
- Classes prefixed with jenkins-
indicate that they can be used in your plugin with confidence that they will only receive minimal changes.
-
-
-
- Classes prefixed with app-
indicate that they should not be used in your plugin as these classes are internal to Jenkins and may change at any time.
-
-
-
- A simple way to come up with a prefix for your plugin is to abbreviate your plugin name, e.g. Jenkins Design Library becomes jdl-
.
-
-
-
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/form.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/form.jelly
index 3d83147a..8eeac19c 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/form.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/form.jelly
@@ -1,5 +1,5 @@
-
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/index.jelly
index d8d9e985..96d5f458 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Dialogs/index.jelly
@@ -1,15 +1,180 @@
-
-
- ${%description}
+
+
+
+
+
+
+ Error
+ This doesn't work.
+
+ OK
+
+ Cancel
+
+
+
+
+
+ ${%alerts}
+
+
+
+
+
+
+ Welcome to the Dialog demo
+ How should I call you?
+
+
+
+
+ OK
+ Cancel
+
+
+
+
+
+ ${%prompts}
+
+
+
+
+
+
+ Do it
+ Are you sure?
+
+ Yes
+ No
+
+
+
+
+
+ ${%confirmations}
+
+
+
+
+
+
+ Modal
+
+
+
Behaviour
+ Click on the "X" in the top right or outside to close me.
+
You can include icons
+
+
+
+
+ Dialogs are cool.
+
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%modals}
+
+
+
+
+
+
+ Order your ice cream
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%forms}
+
+
${%Behaviour}
${%closeme}
${%You can include icons}
- ${%Dialogs are cool}.
+
+ ${%Dialogs are cool}.
+
@@ -24,65 +189,64 @@
-
- ${%alerts}
-
-
-
- ${%prompts}
-
-
-
- ${%confirmations}
-
-
-
- ${%modals}
-
-
-
-
- ${%forms}
-
-
-
-
-
-
-
-
Customizing the appearance and behaviour
- All dialogs take a second optional parameter with options that allow to change certain aspects.
-
-
-
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Dropdowns/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Dropdowns/index.jelly
deleted file mode 100644
index cbaa9a9b..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Dropdowns/index.jelly
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
- ${%description.1}
-
- ${%description.2}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${%Delete}
-
-
-
-
-
-
-
-
-
-
- ${%do}
- ${%dont}
-
-
-
-
- ${%do.1}
- ${%dont.1}
-
-
- ${%do.2}
- ${%dont.2}
-
-
- ${%do.3}
-
-
-
-
-
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Dropdowns/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Dropdowns/index.properties
deleted file mode 100644
index 780d03e9..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Dropdowns/index.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-description.1=Dropdowns allow you to group similar controls under one roof. They''re an effective way to de-clutter your page whilst offering users the actions they need.
-description.2=The overflow button displays a temporary menu of actions that relate to one another.
-do=Do
-dont=Don''t
-do.1=Use dropdowns to avoid overcomplicating your page
-dont.1=Avoid moving important, commonly used actions to dropdowns
-do.2=Use dropdowns to offer quick access to a subpage''s actions
-dont.2=Don''t overcomplicate your dropdowns, avoid using more than one level of submenus
-do.3=Use color to emphasise differences between actions
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/DynamicDropDownListBox/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/DynamicDropDownListBox/index.jelly
index 881ead9c..b067e461 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/DynamicDropDownListBox/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/DynamicDropDownListBox/index.jelly
@@ -23,6 +23,6 @@ THE SOFTWARE.
-->
-
-
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/File/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/File/index.jelly
index edbca58f..20252fdb 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/File/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/File/index.jelly
@@ -24,27 +24,29 @@ THE SOFTWARE.
-
- ${%parameters}
-
- field - ${%parameters.field}
- clazz - ${%parameters.clazz}
-
-
-
-
- ${%parameters.additional}
-
-
-
+
+
+
+
+
+
+
+
+
+ ${%parameters}
+
+ field - ${%parameters.field}
+ clazz - ${%parameters.clazz}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/index.jelly
deleted file mode 100644
index a18eac74..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/index.jelly
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
- ${%description}
-
-
- Configure me!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Current configuration:
-
-
-
-
-
-
-
-
-
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Home/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index.jelly
new file mode 100644
index 00000000..e90f3bae
--- /dev/null
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index.jelly
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
${%welcome}
+
${%description}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index.properties
similarity index 88%
rename from src/main/resources/io/jenkins/plugins/designlibrary/Root/index.properties
rename to src/main/resources/io/jenkins/plugins/designlibrary/Home/index.properties
index a61a0ff6..89afd289 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index.properties
@@ -1,7 +1,6 @@
-title=Design Library
welcome=Welcome to Jenkins Design Library
description=Design Library makes it easy for developers to build complex and consistent interfaces using Jenkins UI components.
-topics=Topics for modernising your interface
+topics=Popular topics
cards=Cards
cards-description=Use cards to surface related information and controls to users
dropdowns=Dropdowns
@@ -10,7 +9,7 @@ buttons=Buttons
buttons-description=Use the new Jenkins buttons design
symbols=Symbols
symbols-description=Enhance your interface with modern iconography
-gitter=Get involved
+get-involved=Get involved
gitter-description=Join the UX discussion on Gitter
ux-youtube=Watch the latest Jenkins UX meetings
ux-wip-core=View in-progress UX work
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index_fr.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index_fr.properties
similarity index 95%
rename from src/main/resources/io/jenkins/plugins/designlibrary/Root/index_fr.properties
rename to src/main/resources/io/jenkins/plugins/designlibrary/Home/index_fr.properties
index 96800102..8b845523 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index_fr.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index_fr.properties
@@ -6,7 +6,7 @@ buttons=Boutons
buttons-description=Utilisez le nouveau design des boutons Jenkins
symbols=Symboles
symbols-description=Am\u00e9liorez votre interface avec l''iconographie moderne
-gitter=Comment s''impliquer
+get-involved=Comment s''impliquer
gitter-description=Participez \u00e0 la discussion UX sur Gitter
ux-youtube=Regardez les derni\u00e8res r\u00e9unions de Jenkins UX
ux-wip-core=Voir les travaux UX en cours et leur progression
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index_zh.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index_zh.properties
similarity index 95%
rename from src/main/resources/io/jenkins/plugins/designlibrary/Root/index_zh.properties
rename to src/main/resources/io/jenkins/plugins/designlibrary/Home/index_zh.properties
index 5d2d6ad9..49547e14 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index_zh.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Home/index_zh.properties
@@ -6,7 +6,7 @@ buttons=\u6309\u94ae
buttons-description=\u4f7f\u7528\u65b0\u7684Jenkins\u6309\u94ae\u8bbe\u8ba1
symbols=\u7b26\u53f7
symbols-description=\u4f7f\u7528\u4e0e\u73b0\u4ee3\u56fe\u50cf\u53bb\u589e\u5f3a\u60a8\u7684\u754c\u9762
-gitter=\u52a0\u5165\u6211\u4eec
+get-involved=\u52a0\u5165\u6211\u4eec
gitter-description=\u52a0\u5165Gitter\u4e0a\u7684UX\u8ba8\u8bba
ux-youtube=\u89c2\u770b\u6700\u65b0\u7684Jenkins UX\u4f1a\u8bae
ux-wip-core=\u67e5\u770b\u6b63\u5728\u8fdb\u884c\u7684UX\u5de5\u4f5c
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.jelly
index 77493cb6..3fc22a98 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.jelly
@@ -22,115 +22,59 @@
~ THE SOFTWARE.
-->
-
-
- ${%inputs}
- ${%Textbox}
-
-
- ${%autoCompletion}
- ${%autoCompletion.description.1}
-
-
-
-
-
- ${%autoCompletion.description.2}
-
-
-
-
- ${%combobox.description}
-
-
-
- config.jelly:
-
-
- SimpleCombobox.java:
-
-
- ${%dynamicCombobox}
- ${%dynamicCombobox.description}
-
-
-
- config.jelly:
-
-
- DynamicCombobox.java:
-
-
- ${%Number fields}
-
-
-
- ${%Password fields}
-
-
-
- ${%syntaxHighlight}
-
-
-
${%syntaxHighlight.description.1}
-
-
-
-
-
-
- ${%syntaxHighlight.description.2}
-
- ${%Shell}
-
-
-
-
- ${%HTML}
- ${%html.description}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%syntaxHighlight.description.2}
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.properties
index 54c01972..a6a91765 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Inputs/index.properties
@@ -7,9 +7,8 @@ dynamicCombobox=Dynamic combobox
dynamicCombobox.description=Like many other fields combo-boxes can be updated dynamically based on other field values:
syntaxHighlight=Textarea with syntax highlighting
syntaxHighlight.description.1=CodeMirror can be used to turn an ordinary text area into a syntax-highlighted content-assistive text area.
-syntaxHighlight.description.2=You will want to use f:textarea
to pass more CodeMirror configuration if you are doing more \
- than displaying a groovy text editor. There is support for many languages like groovy, xml, yaml, css, javascript, shell, python, perl
\
- \ and many more. Use the attribute codemirror-config
to specify additional key/value pairs in the JSON \
+syntaxHighlight.description.2=There is support for languages like groovy
, xml
, yaml
, css
, javascript
, shell
, python
, perl
\
+ \ and many more. Use the attribute codemirror-config
to specify additional key/value pairs in the JSON \
format (except the start and end bracket) to be passed as CodeMirror option object.
html.description=To edit html and have a preview you need the OWASP Markup Formatter \
plugin. Below snippet ensures that when the plugin is not installed that the preview will just print plain text.
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/JavaScriptProxy/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/JavaScriptProxy/index.jelly
index e3e40a3b..4bcfd1ae 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/JavaScriptProxy/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/JavaScriptProxy/index.jelly
@@ -22,43 +22,50 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
-
-
- ${%description.1}
+
+
+
+
+
+ 0
+
+
- ${%description.2}
+ ${%description.1}
-
+ ${%description.2}
- ${%description.3}
+
-
+ ${%description.3}
- ${%description.4}
+
-
+ ${%description.4}
-
+
-
-
+
- ${%invokingMethod}
- ${%invokingMethod.description.1}
+
+
- ${%invokingMethod.description.2}
+
+ ${%invokingMethod.description.1}
- ${%invokingMethod.description.3}
+ ${%invokingMethod.description.2}
- ${%tips}
+ ${%invokingMethod.description.3}
+
- ${%tips.description.1}
- ${%tips.description.1.body}
+
+ ${%tips.description.1.body}
- ${%tips.description.1.more}
+ ${%tips.description.1.more}
+
- ${%tips.description.2}
-
- ${%tips.description.2.body}
-
+
+ ${%tips.description.2.body}
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.jelly
index 2e1dfc5e..dba90379 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.jelly
@@ -1,62 +1,54 @@
-
-
-
-
-
-
${%Two column}
-
-
- Two column layouts are for 'hub' style pages, pages that have child pages
- for the user to navigate to.
-
+
+
-
Examples of such pages include 'Dashboard', 'Design Library' and 'Plugin Manager'.
+
+
+
+ Two column layouts are for 'hub' style pages, pages that have child pages
+ for the user to navigate to.
+
-
+ Examples of such pages include 'Dashboard', 'Design Library' and 'Plugin Manager'.
-
-
-
- ${%do}
- ${%dont}
-
-
-
+
${%two-column.do.1}
${%two-column.dont.1}
@@ -71,101 +63,83 @@
${%two-column.do.4}
-
-
-
-
-
- ${%Usage}
-
- The 'two-column' layout is default, so you don't need to do anything to use it.
-
-
-
-
- The example above is all you need to set up a two-column page,
- it's complete with headings, sidebar items and content.
-
-
- ${%Badges}
-
-
- You can include badges (instances of jenkins.management.badge
) in your sidebar to highlight important information.
- You should only use a badge if the information is useful to the user, for example:
-
-
-
-
- Updates count on the 'Plugins' page
-
-
- Passing/failed tests count
-
-
- Unread notifications
-
-
-
-
-
-
${%One column}
-
-
- One column layouts are for pages that don't need navigation; they're ideal for standalone pages
- that don't have child navigation.
-
-
-
-
-
-
-
- ${%do}
- ${%dont}
-
-
-
+
+
+
+
+ The 'two-column' layout is default, so you don't need to do anything to use it.
+
+
+
+
+ The example above is all you need to set up a two-column page,
+ it's complete with headings, sidebar items and content.
+
+
+
+
+
+ You can include badges (instances of jenkins.management.badge
) in your sidebar to highlight important information.
+ You should only use a badge if the information is useful to the user, for example:
+
+
+
+
+ Updates count on the 'Plugins' page
+
+
+ Passing/failed tests count
+
+
+ Unread notifications
+
+
+
+
+
+
+
+
+ One column layouts are for pages that don't need navigation; they're ideal for standalone pages
+ that don't have child navigation.
+
+
+
${%one-column.do.1}
${%one-column.dont.1}
-
-
-
-
-
-
${%Usage}
-
-
Set the type attribute to 'one-column' to use this layout:
-
-
-
-
-
-
${%Fullscreen}
-
-
- Fullscreen layouts hide the Jenkins user interface, providing a blank canvas for your page.
-
- Such layouts aren't intended for the average page and should only be used if your page needs it.
-
-
-
- An example of such a page is
-
- Build Monitor View
-
-
-
-
-
${%Usage}
-
-
Set the type attribute to 'full-screen' to use this layout:
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ Fullscreen layouts hide the Jenkins user interface, providing a blank canvas for your page.
+
+ Such layouts aren't intended for the average page and should only be used if your page needs it.
+
+
+
+ An example of such a page is
+
+ Build Monitor View
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.properties
index d86bf03e..688ad045 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/index.properties
@@ -1,6 +1,3 @@
-do=Do
-dont=Don''t
-
two-column.do.1=Include a title on your sidebar that best encapsulates its child pages
two-column.do.2=Ensure all child pages share the same sidebar for consistency
two-column.do.3=Buttons should only relate to/manipulate their parent column
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/layout-preview.js b/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/layout-preview.js
index 652c7a43..62273112 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/layout-preview.js
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Layouts/layout-preview.js
@@ -1,15 +1,10 @@
window.addEventListener("load", () => {
- const appBar = document.querySelector("#main-panel .jenkins-app-bar")
- const componentSample = document.querySelector(".jdl-component-sample")
const tabBar = document.querySelector(".tabBar")
const twoPaneTab = tabBar.querySelector(".tab:first-of-type")
const onePaneTab = tabBar.querySelector(".tab:nth-of-type(2)")
const fullscreenTab = tabBar.querySelector(".tab:last-of-type")
const layoutPreview = document.querySelector("#layout-preview")
- appBar.insertAdjacentElement('afterend', tabBar)
- appBar.insertAdjacentElement('afterend', componentSample)
-
function resetLayoutPreview() {
layoutPreview.classList.remove("jdl-layout-preview--one-column")
layoutPreview.classList.remove("jdl-layout-preview--two-column")
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.groovy b/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.groovy
deleted file mode 100644
index da03af06..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.groovy
+++ /dev/null
@@ -1,46 +0,0 @@
-package io.jenkins.plugins.designlibrary.Links;
-
-import lib.JenkinsTagLib
-
-def st=namespace("jelly:stapler")
-def s = namespace("/lib/samples")
-
-t=namespace(JenkinsTagLib.class)
-
-def example(html) {
- tr {
- td {
- text(html)
- }
- td {
- raw(html)
- }
- }
-}
-
-
-
-s.sample(title:_("title")) {
- raw(_("blurb"))
-
- h2(_("define.title"))
- raw(_("blurb.define"))
- s.code(language:"java", file:"Links.java")
-
- h2(_("breadcrumb.title"))
- raw(_("blurb.breadcrumb"))
-
-
- h2(_("hyperlink.title"))
- raw(_("blurb.modelLink"))
- table(class:"jenkins-table") {
- example "
self "
- example "
up "
- }
-
- raw(_("blurb.modelLink.inside"))
- table(class:"jenkins-table") {
- example "
self "
- example "
up "
- }
-}
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.jelly
new file mode 100644
index 00000000..32b6a077
--- /dev/null
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.jelly
@@ -0,0 +1,58 @@
+
+
+
+
+ ${%blurb}
+
+
+
+
+
+
+
+ ${%blurb.breadcrumb}
+
+
+
+ ${%blurb.modelLink}
+
+
+
+ <a href='.' class='model-link'>self</a>
+
+
+ self
+
+
+
+
+ <a href='..' class='model-link'>up</a>
+
+
+ up
+
+
+
+
+ ${%blurb.modelLink.inside}
+
+
+
+ <a href='.' class='model-link'>self</a>
+
+
+ self
+
+
+
+
+ <a href='..' class='model-link'>up</a>
+
+
+ up
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.properties
index c28b9779..c305a11f 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Links/index.properties
@@ -1,12 +1,10 @@
-title=Navigational context menu integration
-
blurb=
Jenkins consists of a large and complex graph of domain objects (ModelObject
), where each node in the graph is a web page and edges are hyperlinks. \
To help users navigate quickly on this graph, Jenkins provides a mechanism to attach context menus to model objects, \
which can be used to hop multiple edges without going through individual hyperlinks.
define.title=Defining context menu
-blurb.define=
To define a context menu on ModelObject
, implement ModelObjectWithContextMenu
.
+blurb.define=To define a context menu on ModelObject
, implement ModelObjectWithContextMenu
.
breadcrumb.title=Breadcrumb integration
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Menu/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Menu/index.jelly
new file mode 100644
index 00000000..ebf978b1
--- /dev/null
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Menu/index.jelly
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%Delete}
+
+
+
+
+
+
+
+
+
+ ${%do.1}
+ ${%dont.1}
+
+
+ ${%do.2}
+ ${%dont.2}
+
+
+ ${%do.3}
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Menu/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Menu/index.properties
new file mode 100644
index 00000000..10248521
--- /dev/null
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Menu/index.properties
@@ -0,0 +1,5 @@
+do.1=Use overflow buttons to avoid overcomplicating your page
+dont.1=Avoid moving important, commonly used actions to menus
+do.2=Use overflow buttons to offer quick access to a subpage''s actions
+dont.2=Don''t overcomplicate your menus, avoid using more than one level of submenus
+do.3=Use color to emphasise differences between actions
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Notifications/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Notifications/index.jelly
index e6396206..27d722b4 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Notifications/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Notifications/index.jelly
@@ -1,65 +1,90 @@
-
-
- ${%description}
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
-
-
${%usage.1}
-
Default
-
-
-
-
${%usage.1}
-
Success
-
-
-
-
${%usage.1}
-
Warning
-
-
-
-
${%usage.1}
-
Error
-
-
-
-
+
+
+
+
+
+
+
+
- ${%usage.2}
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Progress/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Progress/index.jelly
index 590c24d5..3788402c 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Progress/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Progress/index.jelly
@@ -1,68 +1,77 @@
-
- ${%spinner.description}
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
- ${%progressAnimation.description}
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
- ${%progressBar.description}
-
-
-
-
-
- ${%progressiveRendering}
- ${%progressiveRendering.description}
-
-
-
-
- Factors of ${number}:
-
-
-
-
-
- ${%description.adjuncts}
-
-
+
+
+
+
+
+
+
+ Factors of ${number}:
+
+
+
+
+
+
+
+
+
+ ${%description.adjuncts}
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Radios/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Radios/index.jelly
index e32dcfae..bb698d27 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Radios/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Radios/index.jelly
@@ -23,33 +23,35 @@ THE SOFTWARE.
-->
-
-
- Descriptor radio list
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Boolean radio
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/ChoiceEntry/config.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/ChoiceEntry/config.jelly
similarity index 89%
rename from src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/ChoiceEntry/config.jelly
rename to src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/ChoiceEntry/config.jelly
index 9fba9524..8f46df3a 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/ChoiceEntry/config.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/ChoiceEntry/config.jelly
@@ -28,5 +28,4 @@ THE SOFTWARE.
-
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/Config/config.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/Config/config.jelly
similarity index 96%
rename from src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/Config/config.jelly
rename to src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/Config/config.jelly
index bac136e3..179de90b 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/Config/config.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/Config/config.jelly
@@ -27,7 +27,7 @@ THE SOFTWARE.
-
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/HeteroRadioEntry/config.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/HeteroRadioEntry/config.jelly
similarity index 97%
rename from src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/HeteroRadioEntry/config.jelly
rename to src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/HeteroRadioEntry/config.jelly
index d7270fed..957f651d 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/HeteroRadioEntry/config.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/HeteroRadioEntry/config.jelly
@@ -25,7 +25,7 @@ THE SOFTWARE.
-
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/SimpleEntry/config.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/SimpleEntry/config.jelly
similarity index 100%
rename from src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/SimpleEntry/config.jelly
rename to src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/SimpleEntry/config.jelly
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/configure.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/index.jelly
similarity index 51%
rename from src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/configure.jelly
rename to src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/index.jelly
index 7a356a2e..565165f6 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/configure.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/index.jelly
@@ -24,19 +24,34 @@ THE SOFTWARE.
-->
-
-
-
- Configuration
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%description}
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/index.properties
similarity index 62%
rename from src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/index.properties
rename to src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/index.properties
index b90e00db..b38fc37d 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/HeteroList/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/RepeatableList/index.properties
@@ -1,11 +1,10 @@
-description=Create a heterogeneous list, where the user can choose an arbitrary number of arbitrary \
- items with a common describable base type, and configure them independently. Each describable class \
- needs to provide a config.jelly
. \
+description=A flexible list of items, all derived from a shared base type. Users can add as many items as they need \
+ and configure each one independently. Each describable class needs to provide a config.jelly
. \
The submission can be data-bound into List<T>
where T is the common base \
- type for the describable instances (Entry
in the snippet below). \
+ type for the describable instances (Entry
in the snippet above). \
See the documentation of repeatableHeteroProperty for a complete list of attributes and what they do.\
\
\
- The example classes shown below are snippets from a parent class that implements the Describable interface. To use these \
+ The example classes shown above are snippets from a parent class that implements the Describable interface. To use these \
classes, you must define them as inner classes within a parent class that also implements Describable.
\ No newline at end of file
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Root/index.jelly
deleted file mode 100644
index 5c09626a..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Root/index.jelly
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
${%welcome}
-
${%description}
-
-
${%topics}
-
-
${%gitter}
-
-
-
-
-
-
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.jelly
index ff8726ea..ff2b4b05 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.jelly
@@ -23,48 +23,85 @@ THE SOFTWARE.
-->
-
- ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- ${%usage.1}
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
- config.jelly:
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- Java source code:
-
-
- ${%dynamic}
-
- ${%dynamic.description}
-
-
-
-
-
-
-
-
-
-
-
-
-
- config.jelly:
-
-
- Sample.java:
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.properties
index 8c2c5d8c..db585ab0 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Select/index.properties
@@ -1,7 +1,8 @@
-title=There are a couple of ways to create a dropdown in Jenkins.
usage.1=You can use dropdownDescriptorSelector
to create a fully data-bound form and the option to include a \
config page for the descriptor
by creating a file called config.jelly
.
usage.2=If you want a simpler select
to be rendered you can use the f:select
\
Jelly tag and create a doFillFieldNameItems
method in the descriptor
.
dynamic=Dynamic select
dynamic.description=Updates the contents of a "select" control dynamically based on selections of other controls.
+searchable=Searchable select
+searchable.description=Allows users to quickly browse a select by typing to filter the available choices. Start typing a U.S. state for results to appear.
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.jelly
index 149e7a30..743a8e43 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.jelly
@@ -1,34 +1,18 @@
-
- ${%title}
+
+
+
+
+
- ${%description.1}
+ ${%description.1}
- ${%description.2}
+ ${%description.2}
- ${%description.3}
-
- ${%examples}
-
-
-
jenkins-!-margin-bottom-5
-
-
jenkins-!-margin-bottom-4
-
-
jenkins-!-margin-bottom-3
-
-
jenkins-!-margin-bottom-2
-
-
jenkins-!-margin-bottom-1
-
-
jenkins-!-margin-bottom-0
-
-
-
-
+ ${%description.3}
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.properties
index 4ab530f4..f2fe1f44 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Spacing/index.properties
@@ -1,4 +1,3 @@
-title=Spacing override classes
description.1=Jenkins features a range of spacing helper classes to enable you to set the margin and padding for your element.
description.2=This is done through the jenkins-!-margin-*
and jenkins-!-padding-*
classes. \
The *
is the spacing modifier, it ranges from \
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Stylesheets/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Stylesheets/index.jelly
new file mode 100644
index 00000000..383e18c2
--- /dev/null
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Stylesheets/index.jelly
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+ Classnames should follow Block Element Modifier (BEM) methodology and be prefixed.
+
+
+
+
Block
+ Standalone entity that is meaningful on its own
+ e.g. header
, container
, menu
, checkbox
, input
+
+
+
Element
+ A part of a block that has no standalone meaning and is semantically tied to its block
+ e.g. __item
, __checkbox-caption
, __header
+
+
+
Modifier
+ A flag on a block or element. Use them to change appearance or behavior
+ e.g. --disabled
, --selected
, --large
+
+
+
+ An example classname following this strategy could be .jenkins-cards __item --large
or .jenkins-button --disabled
.
+
+
+ Not every class falls neatly into BEM, for example a class that does not belong to a particular component - such as a spacing or color class. For those classes we use the -!-
convention to indicate that the classes can be used on any component.
+
+
+
+ Examples include: .jenkins-!-padding-6
, .jenkins-!-margin-6
and .jenkins-!-destructive-color
.
+
+
+
+
+
+ Classes should be prefixed in a way that is unique to your service or plugin. We use prefixes due to the extensible nature of Jenkins, without prefixing we couldn't be certain a plugin class wouldn't interfere with a Jenkins class. We also use prefixing to prevent clashes with other libraries, such as Bootstrap.
+
+
+
+ Jenkins uses the prefixes jenkins-
and app-
to namespace CSS classes, these prefixes should not be used in your plugins. Due to legacy reasons, some classes in use in Jenkins aren't namespaced however they are okay to use in your plugin.
+
+
+
+ Classes prefixed with jenkins-
indicate that they can be used in your plugin with confidence that they will only receive minimal changes.
+
+
+
+ Classes prefixed with app-
indicate that they should not be used in your plugin as these classes are internal to Jenkins and may change at any time.
+
+
+
+ A simple way to come up with a prefix for your plugin is to abbreviate your plugin name, e.g. Jenkins Design Library becomes jdl-
.
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.jelly
index 281bbbe7..c3a9fc1f 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.jelly
@@ -1,49 +1,42 @@
-
+
-
-
- ${%leadParagraph}
-
-
-
-
-
-
- ${%do}
- ${%dont}
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%leadParagraph}
+
+
${%do.1}
${%dont.1}
@@ -55,119 +48,120 @@
${%do.3}
-
-
-
-
-
- ${%usage.title}
- ${%usage.1}
-
-
-
- ${%usage.2}
-
-
- ${%usage.3}
-
-
- ${%usage.4}
-
-
- ${%usage.5}
-
-
- ${%usage.6}
-
-
-
-
- ${%View the complete list of Jenkins Symbols on GitHub}
-
-
-
-
- ${%ioniconsApi}
- ${%customSymbols.ionicons-api}
-
-
-
- ${%Click here for a sample how to add the API to your plugin}
+
+
+
+
+ ${%usage.1}
+
+
+
+
+
+
+
+
+ ${%usage.2}
+
+
+
+
+
+
+
+ ${%usage.3}
+
+
+
+
+
+
+
+ ${%usage.4}
+
+
+
+
+
+
+
+
+
+
+ ${%usage.5}
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%usage.6}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%View the complete list of Jenkins Symbols on GitHub}
+
+
+
+
+
+
+ ${%customSymbols.ionicons-api}
+
+
+
+ ${%Click here for a sample how to add the API to your plugin}
+
+
+
+
+ ${%customSymbols.description.2}
+
+
+
+ ${%View the complete list of all symbols provided by the ionicons-api-plugin on ionic.io/ionicons}
-
-
- ${%customSymbols.description.2}
-
-
-
- ${%View the complete list of all symbols provided by the ionicons-api-plugin on ionic.io/ionicons}
-
-
-
- ${%customSymbols}
- ${%customSymbols.description.1}
-
-
- ${%customSymbols.description.2}
-
-
- ${%customSymbols.information}
-
- symbolName - ${%customSymbols.symbolName}
- yourArtifactId - ${%customSymbols.artifactId}
-
-
- ${%customSymbols.artifactId.description}
-
- ${%customSymbols.theme}
-
- stroke="currentColor"
- fill="currentColor"
-
- ${%customSymbols.theme.clarification}
-
+
+
+
+ ${%customSymbols.description.1}
+
+
+ ${%customSymbols.description.2}
+
+
+ ${%customSymbols.information}
+
+ symbolName - ${%customSymbols.symbolName}
+ yourArtifactId - ${%customSymbols.artifactId}
+
+
+ ${%customSymbols.artifactId.description}
+
+ ${%customSymbols.theme}
+
+ stroke="currentColor"
+ fill="currentColor"
+
+ ${%customSymbols.theme.clarification}
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.properties
index 5c5c4ad2..1d11408f 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Symbols/index.properties
@@ -1,11 +1,10 @@
-leadParagraph=Jenkins Symbols are an extensive and consistent collection of icons for use in Jenkins and plugins. \
-Symbols are intended to be used everywhere a traditional icon would be used, such as in the sidebar, in buttons and in tables. \
+leadParagraph=Symbols are intended to be used everywhere a traditional icon would be used, such as in the sidebar, in buttons and in tables. \
Symbols are scalable, support different weights and adapt to the user''s theme.
do=Do
dont=Don''t
do.1=Symbols should be used to help a user recognise what a task does at a glance
do.2=They should be recognisable and relevant, e.g.\u0020
-do.2Continued=\u0020for credentials
+do.2Continued=\u0020for locked resources
do.3=Use a tooltip on the symbol if there isn''t any accompanying text
dont.1=Don''t use custom symbols that aren''t consistent with Jenkins
dont.2=Don''t add symbols to headings, they just create visual clutter
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.jelly
index 952b6485..d9c1e4a4 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.jelly
@@ -24,14 +24,62 @@ THE SOFTWARE.
-
- ${%title}
-
-
-
-
-
+
+
+
+
+
+
+
+ Name
+
+
+ Status
+
+
+ Reason
+
+
+
+
+
+ Link 1
+
+
+ Success
+ #7
+
+
+ No Errors
+
+
+
+
+ Link 2
+
+
+ Failure
+
+
+ Can't compile
+
+
+
+
+ Link 3
+
+
+ Unstable
+
+
+ Test Failed
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.properties
deleted file mode 100644
index ee6b18e7..00000000
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Table/index.properties
+++ /dev/null
@@ -1 +0,0 @@
-title=Jenkins Tables are created by adding the .jenkins-table
CSS class.
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.jelly
index 767fb0b7..60c372d3 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.jelly
@@ -1,34 +1,35 @@
-
-
+
+
+
+
+
+
+
+
+
- ${%toggle.usage.1}
-
+
+
+
+
+
+
+
+
- ${%dynamicLabels}
- ${%dynamicLabels.usage.1}
- ${%dynamicLabels.usage.2}
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.properties
index ce5f0096..2a4ea137 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/ToggleSwitch/index.properties
@@ -1,4 +1,3 @@
toggle.usage.1=You can invert the position of the label with the invertLabel
attribute.
dynamicLabels=Dynamic labels
-dynamicLabels.usage.1=Toggle switches labels can update in real time to reflect their status by setting the checkTitle
attribute.
-dynamicLabels.usage.2=Try clicking on the toggle switch below to see how this works.
+dynamicLabels.usage.1=Toggle switches labels can update in real time to reflect their status by setting the checkTitle
attribute. Try clicking on the toggle switch below to see how this works.
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.jelly
index 5b827d16..f102b3dd 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.jelly
@@ -1,37 +1,40 @@
-
-
-
-
- Hover over me
-
-
-
-
+
+
+
+
+
+ Hover over me
+
+
+
+
+
- ${%HTML and interactive content}
-
-
-
+
+
+
+
-
-
-
- Hover over me
-
-
-
-
+
+
+
+ Hover over me
+
+
+
+
- ${%symbols-description}
-
- ${%warning}
-
+ ${%symbols-description}
+
+
+
+
+
+
+ ${%warning}
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.properties
index ef0a22fa..5662595c 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Tooltips/index.properties
@@ -3,4 +3,4 @@ warning=Make sure that text is \
Preventing Cross-Site Scripting in Jelly views .
-symbols-description=You can use tooltips with Jenkins Symbols too, using either the tooltip
or htmlTooltip
attribute. Setting both will prioritise the htmlTooltip
.
+symbols-description=You can use tooltips with Jenkins Symbols too, using either the tooltip
or htmlTooltip
attribute. Setting both will prioritise the htmlTooltip
.
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.jelly b/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.jelly
index 3363ca17..5329ac91 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.jelly
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.jelly
@@ -1,18 +1,28 @@
-
- ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+ ${%title}
- ${%validation.description}
-
-
-
-
-
+ ${%validation.description}
+
+
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.properties b/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.properties
index 50a888cc..d6d2c193 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.properties
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/Validation/index.properties
@@ -1,7 +1,7 @@
title=Form field validation can access values of the nearby input controls, \
which is useful for performing complex context-sensitive form validation. \
The same technique can be also used for auto-completion, populating combobox/listbox, and so on. \
- The example below is a bit contrived, but all the input elements are named "name" (for city name and state name), \
+ The example above is a bit contrived, but all the input elements are named "name" (for city name and state name), \
and we use @RelativePath
\
so that the validation of the state name refers to the capital name, and the validation of the city name refers to the state name.
validation.description=To implement this you need to provide a doCheckXXX
method, where XXX is the name of your field. \
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/sample.js b/src/main/resources/io/jenkins/plugins/designlibrary/sample.js
index 97d1686b..0bb8c8bc 100644
--- a/src/main/resources/io/jenkins/plugins/designlibrary/sample.js
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/sample.js
@@ -4,54 +4,47 @@ document.addEventListener("DOMContentLoaded", () => {
document.querySelectorAll('.sample-remote')
.forEach(element => {
+ const uiComponentName = element.dataset.componentName;
const fileName = element.dataset.sample;
const executable = element.dataset.executable;
- const render = element.dataset.render
// On the inputs page the preview markup link adds a hash to the url which breaks the regex extraction
- const strippedHash = window.location.href.replace('#', '')
- const componentName = strippedHash.match(/.+design-library\/(.+)$/)[1]
-
- const fullUrl = `${url}/plugin/design-library/${componentName}${fileName}`;
+ const fullUrl = `${url}/plugin/design-library/${uiComponentName}/${fileName}`;
fetch(fullUrl)
.then(response => response.text())
.then(text => {
- if (render === "true") {
- element.innerHTML = text
- } else {
- element.innerText = text
+ element.innerText = text
- Prism.highlightElement(element)
+ Prism.highlightElement(element)
- function setPrismBackgroundVariable() {
- const computedStyle = window.getComputedStyle(element.parentElement)
- const background = computedStyle.getPropertyValue('background')
+ function setPrismBackgroundVariable() {
+ const computedStyle = window.getComputedStyle(element.parentElement)
+ const background = computedStyle.getPropertyValue('background')
- document.documentElement.style
- .setProperty(prismVariable, background);
- }
+ document.documentElement.style
+ .setProperty(prismVariable, background);
+ }
- // This is for the copy clipboard section which doesn't use prism
- // We need to match the colour
- const prismVariable = '--prism-background'
- if (!getComputedStyle(document.documentElement).getPropertyValue(prismVariable)) {
- setPrismBackgroundVariable()
+ // This is for the copy clipboard section which doesn't use prism
+ // We need to match the colour
+ const prismVariable = '--prism-background'
+ if (!getComputedStyle(document.documentElement).getPropertyValue(prismVariable)) {
+ setPrismBackgroundVariable()
- if (window.isSystemRespectingTheme) {
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
- // If done immediately while appearance is changing from light to dark sometimes the wrong value is retrieved
- // A slight delay fixes this
- setTimeout(() => setPrismBackgroundVariable(), 50)
- });
- }
- }
+ if (window.isSystemRespectingTheme) {
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
+ // If done immediately while appearance is changing from light to dark sometimes the wrong value is retrieved
+ // A slight delay fixes this
+ setTimeout(() => setPrismBackgroundVariable(), 50)
+ });
+ }
+ }
- const codeWrapper = element.closest(".jdl-component-code");
- if (codeWrapper) {
+ const codeWrapper = element.closest(".jdl-component-code");
+ if (codeWrapper) {
const copyButton = codeWrapper.querySelector(".copy-button, .jenkins-copy-button")
copyButton.setAttribute("text", text)
}
- }
});
if (executable === "true") {
const script = document.createElement("script"); // create a script DOM node
@@ -68,7 +61,7 @@ document.addEventListener("DOMContentLoaded", () => {
}
shareButton
- .addEventListener("click", async (e) => {
+ .addEventListener("click", async () => {
try {
const shareData = {
title: document.title,
diff --git a/src/main/resources/io/jenkins/plugins/designlibrary/tabs.js b/src/main/resources/io/jenkins/plugins/designlibrary/tabs.js
new file mode 100644
index 00000000..3e49be31
--- /dev/null
+++ b/src/main/resources/io/jenkins/plugins/designlibrary/tabs.js
@@ -0,0 +1,61 @@
+document.addEventListener("DOMContentLoaded", () => {
+ // Find all the tab groups (each group is a container for tab panes)
+ const tabGroups = document.querySelectorAll(".jdl-tab-panes");
+
+ tabGroups.forEach((tabGroup) => {
+ const tabPanes = tabGroup.querySelectorAll(".jdl-tab-pane");
+
+ // Hide all tab panes initially
+ tabPanes.forEach((tabPane) => {
+ tabPane.style.display = "none";
+ });
+
+ // Show the first tab pane by default
+ tabPanes[0].style.display = "block";
+
+ // Create the tab bar for this tab group
+ const tabBar = document.createElement("div");
+ tabBar.className = "jdl-component-code__tab-bar";
+
+ // Add tabs for each tab pane in this group
+ tabPanes.forEach((tabPane, index) => {
+ const tabPaneTitle = tabPane.querySelector(".jdl-tab-pane__title");
+ tabPaneTitle.style.display = "none";
+
+ const tab = document.createElement("button");
+ tab.className = "tab";
+
+ // Mark the first tab as active
+ if (index === 0) {
+ tab.classList.add("active");
+ }
+
+ // Add click event to each tab
+ tab.addEventListener("click", function (e) {
+ e.preventDefault();
+
+ // Remove active class from all tabs in this tab group
+ tabBar.querySelectorAll(".tab").forEach((tab) => {
+ tab.classList.remove("active");
+ });
+ tab.classList.add("active");
+
+ // Hide all tab panes in this group
+ tabPanes.forEach((tabPane) => {
+ tabPane.style.display = "none";
+ });
+ // Show the clicked tab pane
+ tabPanes[index].style.display = "block";
+ });
+
+ // Set the tab text to the title of the tab pane
+ tab.innerText = tabPaneTitle.textContent;
+
+ // Append the tab to the tab bar
+ tabBar.append(tab);
+ });
+
+ // Insert the tab bar before the first tab pane in this group
+ tabGroup.insertBefore(tabBar, tabPanes[0]);
+ });
+});
\ No newline at end of file
diff --git a/src/main/resources/lib/samples/card.jelly b/src/main/resources/lib/samples/card.jelly
new file mode 100644
index 00000000..f3d960fb
--- /dev/null
+++ b/src/main/resources/lib/samples/card.jelly
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${attrs.title} ${attrs.tag}
+
+ ${attrs.description}
+
+
+
diff --git a/src/main/resources/lib/samples/code-pane.jelly b/src/main/resources/lib/samples/code-pane.jelly
new file mode 100644
index 00000000..06f6789e
--- /dev/null
+++ b/src/main/resources/lib/samples/code-pane.jelly
@@ -0,0 +1,13 @@
+
+
+
+
+ The title of the tab
+
+
+
+
+
diff --git a/src/main/resources/lib/samples/code-panes.jelly b/src/main/resources/lib/samples/code-panes.jelly
new file mode 100644
index 00000000..7503ba6b
--- /dev/null
+++ b/src/main/resources/lib/samples/code-panes.jelly
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/main/resources/lib/samples/code.jelly b/src/main/resources/lib/samples/code.jelly
index 7991ad2f..7b17a0e3 100644
--- a/src/main/resources/lib/samples/code.jelly
+++ b/src/main/resources/lib/samples/code.jelly
@@ -1,16 +1,20 @@
+ Displays a copyable code snippet.
+
-
-
-
+
+ Defaults to 'xml'.
+
+
+
-
+
${code}
@@ -20,16 +24,16 @@
-
+
-
+
-
+
diff --git a/src/main/resources/lib/samples/group.jelly b/src/main/resources/lib/samples/group.jelly
new file mode 100644
index 00000000..da6facb5
--- /dev/null
+++ b/src/main/resources/lib/samples/group.jelly
@@ -0,0 +1,10 @@
+
+
+
+ Groups a with a or
+
+
+
+
+
+
diff --git a/src/main/resources/lib/samples/sample.jelly b/src/main/resources/lib/samples/layout.jelly
similarity index 60%
rename from src/main/resources/lib/samples/sample.jelly
rename to src/main/resources/lib/samples/layout.jelly
index 843fd69f..fd4fb352 100644
--- a/src/main/resources/lib/samples/sample.jelly
+++ b/src/main/resources/lib/samples/layout.jelly
@@ -26,26 +26,18 @@ THE SOFTWARE.
Page layout for Design Library
-
-
- Overrides the default page title (defaults to the class display name)
-
-
-
-
-
-
-
+
+
@@ -54,30 +46,20 @@ THE SOFTWARE.
-
-
-
-
+
+
+
+
+ Since ${it.since}
+
+
+ ${it.description}
+
-
+
diff --git a/src/main/resources/lib/samples/sample.properties b/src/main/resources/lib/samples/layout.properties
similarity index 57%
rename from src/main/resources/lib/samples/sample.properties
rename to src/main/resources/lib/samples/layout.properties
index 32d89682..7e3c6fec 100644
--- a/src/main/resources/lib/samples/sample.properties
+++ b/src/main/resources/lib/samples/layout.properties
@@ -1,3 +1,2 @@
-sharePage=Share page
previous=Previous
next=Next
diff --git a/src/main/resources/lib/samples/sample_fr.properties b/src/main/resources/lib/samples/layout_fr.properties
similarity index 100%
rename from src/main/resources/lib/samples/sample_fr.properties
rename to src/main/resources/lib/samples/layout_fr.properties
diff --git a/src/main/resources/lib/samples/sample_zh.properties b/src/main/resources/lib/samples/layout_zh.properties
similarity index 100%
rename from src/main/resources/lib/samples/sample_zh.properties
rename to src/main/resources/lib/samples/layout_zh.properties
diff --git a/src/main/resources/lib/samples/preview.jelly b/src/main/resources/lib/samples/preview.jelly
new file mode 100644
index 00000000..a4a0c6b3
--- /dev/null
+++ b/src/main/resources/lib/samples/preview.jelly
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/lib/samples/previous-next-controls.jelly b/src/main/resources/lib/samples/previous-next-controls.jelly
new file mode 100644
index 00000000..5c839918
--- /dev/null
+++ b/src/main/resources/lib/samples/previous-next-controls.jelly
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/lib/samples/section.jelly b/src/main/resources/lib/samples/section.jelly
new file mode 100644
index 00000000..e1055a72
--- /dev/null
+++ b/src/main/resources/lib/samples/section.jelly
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+ ${attrs.title}
+
+
+
+
+
+
+
diff --git a/src/main/resources/lib/samples/sidepanel.jelly b/src/main/resources/lib/samples/sidepanel.jelly
index 47d086c0..7163e60e 100644
--- a/src/main/resources/lib/samples/sidepanel.jelly
+++ b/src/main/resources/lib/samples/sidepanel.jelly
@@ -5,12 +5,15 @@
-
+
-
+
-
-
+
+ ${s.key.displayName}
+
+
+
diff --git a/src/main/resources/scss/abstracts/_mixins.scss b/src/main/resources/scss/abstracts/_mixins.scss
index 5e6587cc..63f6912d 100644
--- a/src/main/resources/scss/abstracts/_mixins.scss
+++ b/src/main/resources/scss/abstracts/_mixins.scss
@@ -1,5 +1,4 @@
@mixin base-text {
- font-size: 1.05rem;
- font-weight: 400;
+ font-size: 0.9375rem;
line-height: 1.66;
}
diff --git a/src/main/resources/scss/abstracts/_overrides.scss b/src/main/resources/scss/abstracts/_overrides.scss
index f6c68571..fedf32c7 100644
--- a/src/main/resources/scss/abstracts/_overrides.scss
+++ b/src/main/resources/scss/abstracts/_overrides.scss
@@ -1,12 +1,21 @@
:root {
--jdl-spacing: var(--section-padding);
+ --jdl-border-width: 1.5px;
+ --jdl-border: var(--jdl-border-width) solid color-mix(in srgb, var(--text-color-secondary) 9%, transparent);
+ --jdl-box-shadow: 0 0 0 var(--jdl-border-width) color-mix(in srgb, currentColor 5%, transparent),
+ 0 10px 15px rgba(0, 0, 0, 0.05);
+
+ @media (prefers-contrast: more) {
+ --jdl-border: var(--jdl-border-width) solid var(--text-color);
+ --jdl-box-shadow: 0 0 0 var(--jdl-border-width) var(--text-color);
+ }
}
#main-panel {
display: flex !important;
flex-direction: column;
width: 100%;
- max-width: min(1200px, 65vw);
+ max-width: min(1200px, 60vw);
margin-top: 18px;
margin-left: auto;
margin-right: auto;
@@ -25,18 +34,12 @@ code {
color: var(--text-color-secondary);
}
-hr {
- display: inline-block;
- width: 100%;
- border: none;
- height: 2px;
- background: currentColor;
- margin: 0 0 var(--jdl-spacing) 0;
- opacity: 0.05;
-}
-
a {
font-weight: inherit;
+
+ code {
+ color: unset;
+ }
}
#side-panel .jenkins-app-bar {
@@ -48,9 +51,16 @@ a {
position: absolute;
top: 130px;
left: var(--section-padding);
- font-size: 0.95rem;
+ font-size: 0.9375rem;
font-weight: 600;
font-family: "Georgia", serif;
color: var(--text-color-secondary);
margin: 0;
}
+
+.app-sidepanel__heading {
+ font-size: 0.875rem;
+ color: var(--text-color-secondary);
+ font-weight: 450;
+ margin: 1rem 0 0.25rem 0;
+}
diff --git a/src/main/resources/scss/abstracts/_typography.scss b/src/main/resources/scss/abstracts/_typography.scss
index db0e182e..b926a0da 100644
--- a/src/main/resources/scss/abstracts/_typography.scss
+++ b/src/main/resources/scss/abstracts/_typography.scss
@@ -1,34 +1,20 @@
@use "mixins";
-.jdl-heading {
- font-weight: 500;
- font-size: 1.2rem;
- margin: 0 0 var(--jdl-spacing) 0;
-}
-
-.jdl-leading-paragraph {
- font-size: 1.2rem;
- font-weight: 500;
- margin: 0 0 var(--jdl-spacing) 0;
- line-height: 1.66;
-
- & + & {
- margin-top: calc((var(--jdl-spacing) / 2) * -1);
- }
+.jdl-subtitle {
+ @include mixins.base-text;
+ margin: calc(var(--jdl-spacing) * -0.25) 0 var(--jdl-spacing) 0;
+ color: var(--text-color-secondary);
}
.jdl-paragraph {
@include mixins.base-text;
- margin: 0 0 var(--jdl-spacing) 0;
-
- & + & {
- margin-top: calc((var(--jdl-spacing) / 2) * -1);
- }
+ max-width: 100ch;
+ margin: 0;
}
.jdl-list {
@include mixins.base-text;
- margin: 0 0 var(--jdl-spacing) 0;
+ margin: 0;
}
.jdl-important-point {
@@ -36,7 +22,6 @@
position: relative;
font-weight: 500;
padding-left: calc(1.5rem + 1ch);
- line-height: 1.5;
&::before {
content: "";
diff --git a/src/main/resources/scss/components/_component-group.scss b/src/main/resources/scss/components/_component-group.scss
index 6e6b82c5..31f27d9b 100644
--- a/src/main/resources/scss/components/_component-group.scss
+++ b/src/main/resources/scss/components/_component-group.scss
@@ -9,5 +9,7 @@
margin-top: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
+ margin-bottom: 0;
+ border-top: none;
}
}
diff --git a/src/main/resources/scss/components/_component-sample.scss b/src/main/resources/scss/components/_component-sample.scss
index 802033bf..cfc1c91d 100644
--- a/src/main/resources/scss/components/_component-sample.scss
+++ b/src/main/resources/scss/components/_component-sample.scss
@@ -6,64 +6,68 @@
flex-direction: column;
width: 100%;
padding: var(--jdl-spacing);
- margin-bottom: var(--jdl-spacing);
z-index: 0;
gap: 1rem;
border-radius: 0.66rem;
+ border: var(--jdl-border);
- &::before,
- &::after {
+ &::before {
content: "";
position: absolute;
inset: 0;
- background-image: radial-gradient(at 40% 20%, hsl(312, 42%, 60%) 0, transparent 50%),
+ border-radius: inherit;
+ background: radial-gradient(at 40% 20%, hsl(312, 42%, 60%) 0, transparent 50%),
radial-gradient(at 80% 0%, hsl(11, 100%, 56%) 0, transparent 50%),
radial-gradient(at 0% 50%, hsl(354, 64%, 72%) 0, transparent 50%),
radial-gradient(at 80% 50%, hsl(319, 66%, 64%) 0, transparent 50%),
radial-gradient(at 0% 100%, hsl(264, 37%, 59%) 0, transparent 50%),
radial-gradient(at 80% 100%, hsl(342, 55%, 41%) 0, transparent 50%),
radial-gradient(at 0% 0%, hsla(343, 100%, 76%, 1) 0, transparent 50%);
- border-radius: inherit;
- z-index: -1;
- animation: rotate-hue 100s linear infinite;
+ background-attachment: fixed;
+ background-position: center;
+ //z-index: -1;
+ opacity: 0.075;
}
- &::before {
- opacity: 0.05;
+ &--full-width {
+ align-items: unset;
+ }
+
+ &--no-bottom-padding {
+ padding-bottom: 0;
}
- &::after {
- mask-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='300px' height='300px' viewBox='0 0 300 300' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Ccircle id='Oval' fill='%23D8D8D8' cx='300' cy='0' r='10'%3E%3C/circle%3E%3Ccircle id='Oval' fill='%23D8D8D8' cx='0' cy='0' r='10'%3E%3C/circle%3E%3Ccircle id='Oval' fill='%23D8D8D8' cx='0' cy='300' r='10'%3E%3C/circle%3E%3Ccircle id='Oval' fill='%23D8D8D8' cx='300' cy='300' r='10'%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
- mask-position: center;
- mask-size: 3rem;
- opacity: 0.5;
+ * > & {
+ z-index: 1;
}
- &--gridless {
- &::after {
- display: none;
- }
+ /* Component preview styling */
+
+ .jenkins-card {
+ margin-bottom: 0;
}
- &--full-width {
- align-items: unset;
+ .jenkins-form-item, .jenkins-search-container {
+ margin-bottom: 0;
+ min-width: 300px;
}
- &--no-bottom-padding {
- padding-bottom: 0;
+ .repeated-container {
+ min-width: 600px;
}
- &--horizontal {
- flex-direction: row;
+ .jenkins-alert, .CodeMirror {
+ margin-bottom: 0;
}
- #bottom-sticker {
- margin: -1.5rem -2rem;
+ .jenkins-file-upload {
+ width: unset;
}
-}
-@keyframes rotate-hue {
- to {
- filter: hue-rotate(360deg);
+ .jenkins-dialog {
+ position: relative;
+ width: 400px;
+ animation: none;
+ box-shadow: var(--jdl-box-shadow);
}
}
diff --git a/src/main/resources/scss/components/_dos-donts.scss b/src/main/resources/scss/components/_dos-donts.scss
index 489ab9d9..df998738 100644
--- a/src/main/resources/scss/components/_dos-donts.scss
+++ b/src/main/resources/scss/components/_dos-donts.scss
@@ -1,42 +1,44 @@
+@use "../abstracts/mixins";
@use "../abstracts/symbols";
.jdl-dos-donts {
- margin-bottom: var(--jdl-spacing);
- border-collapse: collapse;
- border-style: hidden;
+ display: flex;
+ flex-direction: column;
+ gap: calc(var(--jdl-spacing) * 0.5);
- th, td {
- width: 50%;
- padding: 0;
- border-top: 1rem solid transparent;
- border-left: 3rem solid transparent;
+ thead, tbody {
+ display: contents;
}
svg {
- width: 1.2rem;
- height: 1.2rem;
- margin-top: 4px;
+ width: 1rem;
+ height: 1rem;
+ translate: 0 3px;
* {
stroke-width: 55px !important;
}
}
+ tr {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: calc(var(--jdl-spacing) * 0.5);
+ }
+
thead {
th {
font-weight: 500;
- font-size: 1rem;
+ font-size: 1.125rem;
text-align: left;
- opacity: 0.75;
}
}
tbody {
td {
+ @include mixins.base-text;
+ display: block;
position: relative;
- font-size: 1.1rem;
- font-weight: 500;
- line-height: 1.66;
padding-left: calc(2rem + 1.5ch);
&::before,
@@ -46,7 +48,7 @@
display: inline-block;
width: 2rem;
height: 2rem;
- top: 0;
+ top: -4px;
left: 0;
border-radius: 100%;
}
diff --git a/src/main/resources/scss/components/_index.scss b/src/main/resources/scss/components/_index.scss
index c1b0e3fb..d68446a9 100644
--- a/src/main/resources/scss/components/_index.scss
+++ b/src/main/resources/scss/components/_index.scss
@@ -2,4 +2,6 @@
@use "component-sample";
@use "dos-donts";
@use "previous-next-controls";
+@use "section";
+@use "since-tag";
@use "source-block";
diff --git a/src/main/resources/scss/components/_previous-next-controls.scss b/src/main/resources/scss/components/_previous-next-controls.scss
index c3948a87..64f895c0 100644
--- a/src/main/resources/scss/components/_previous-next-controls.scss
+++ b/src/main/resources/scss/components/_previous-next-controls.scss
@@ -4,64 +4,50 @@
position: relative;
display: flex;
justify-content: space-between;
- padding-top: var(--section-padding);
+ border-top: var(--jdl-border);
+ padding-top: var(--jdl-spacing);
+
+ @media (min-width: 767px) {
+ & > div:nth-of-type(2) {
+ position: absolute;
+ left: 50%;
+ translate: -50% 0;
+ }
+ }
- &::before {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- height: 2px;
- background: currentColor;
- opacity: 0.05;
- border-radius: 2px;
+ .jenkins-button {
+ font-size: 0.9375rem;
}
.jdl-previous-button,
.jdl-next-button {
- @include mixins.base-text;
- display: grid;
- grid-template-columns: auto auto;
- gap: 0.5rem 0.75rem;
-
- span {
- margin: 0;
- padding: 0;
+ display: flex;
+ gap: 0.8rem;
- &:last-of-type {
- opacity: 0.5;
- margin-top: -0.3rem;
- }
+ svg * {
+ stroke-width: 36px;
}
- svg {
- width: 1.1rem;
- height: 1.1rem;
+ & > * {
transition: transform var(--elastic-transition);
}
}
.jdl-previous-button {
- justify-items: flex-start;
-
- span:last-of-type {
- grid-column: 2;
- }
-
&:hover {
- svg {
+ transform: translateX(-1px);
+
+ & > * {
transform: translateX(-2px);
}
}
}
.jdl-next-button {
- justify-items: flex-end;
- margin-left: auto;
-
&:hover {
- svg {
+ transform: translateX(1px);
+
+ & > * {
transform: translateX(2px);
}
}
diff --git a/src/main/resources/scss/components/_section.scss b/src/main/resources/scss/components/_section.scss
new file mode 100644
index 00000000..b48832e8
--- /dev/null
+++ b/src/main/resources/scss/components/_section.scss
@@ -0,0 +1,29 @@
+@use "../abstracts/mixins";
+
+.jdl-section {
+ display: flex;
+ flex-direction: column;
+ gap: var(--jdl-spacing);
+ border-top: var(--jdl-border);
+ padding-top: var(--jdl-spacing);
+ margin-bottom: var(--jdl-spacing);
+
+ &__title {
+ font-weight: 450;
+ font-size: 1.125rem;
+ line-height: 1;
+ margin: 0;
+ }
+
+ &__description {
+ @include mixins.base-text;
+ max-width: 95ch;
+ color: var(--text-color-secondary);
+ margin: 0;
+ }
+
+ &--no-border {
+ border-top: none;
+ padding-top: 0;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/scss/components/_since-tag.scss b/src/main/resources/scss/components/_since-tag.scss
new file mode 100644
index 00000000..35db5812
--- /dev/null
+++ b/src/main/resources/scss/components/_since-tag.scss
@@ -0,0 +1,21 @@
+.jdl-since-tag {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ background: rgb(255 255 255 / 0.025);
+ color: var(--text-color) !important;
+ font-size: 0.75rem;
+ border-radius: 100px;
+ padding: 0.4rem 0.75rem;
+ min-height: 0;
+ white-space: nowrap;
+ justify-self: center;
+
+ &::after {
+ border: var(--jdl-border);
+ }
+
+ &:hover, &:focus, &:active {
+ background: transparent;
+ }
+}
diff --git a/src/main/resources/scss/components/_source-block.scss b/src/main/resources/scss/components/_source-block.scss
index e24b548d..216e44d4 100644
--- a/src/main/resources/scss/components/_source-block.scss
+++ b/src/main/resources/scss/components/_source-block.scss
@@ -1,13 +1,19 @@
$jdl-component-code-controls-spacing: 0.75rem;
.jdl-component-code {
+ --prism-background: var(--card-background);
+ background: var(--card-background);
position: relative;
display: grid;
align-items: center;
grid-template-columns: 1fr auto;
- margin-bottom: var(--jdl-spacing);
z-index: 0;
border-radius: 0.66rem;
+ border: var(--jdl-border);
+
+ pre {
+ background-color: transparent !important;
+ }
&::before {
content: "";
@@ -38,10 +44,64 @@ $jdl-component-code-controls-spacing: 0.75rem;
padding: $jdl-component-code-controls-spacing;
}
+ &__tab-bar {
+ background: var(--card-background);
+ border-left: var(--jdl-border);
+ border-right: var(--jdl-border);
+ display: flex;
+ gap: 0.9rem;
+ padding: 1em;
+
+ .tab {
+ position: relative;
+ appearance: none;
+ background: none;
+ border: none;
+ outline: none;
+ padding: 4px 6px;
+ color: var(--text-color-secondary);
+ font-size: 0.75rem;
+ cursor: pointer;
+ font-family: var(--font-family-mono) !important;
+
+ &::before {
+ content: "";
+ position: absolute;
+ inset: -2px -5px;
+ border-radius: 100px;
+ background: color-mix(in srgb, var(--text-color-secondary) 0%, transparent);
+ border: 1px solid color-mix(in srgb, var(--text-color-secondary) 0%, transparent);
+ }
+
+ &:hover {
+ color: var(--text-color);
+ }
+
+ &.active {
+ color: var(--text-color);
+
+ &::before {
+ background: color-mix(in srgb, var(--text-color-secondary) 4%, transparent);
+ border: var(--jdl-border);
+
+ @media (prefers-contrast: more) {
+ border: var(--jdl-border-width) solid var(--text-color);
+ }
+ }
+ }
+ }
+ }
+
&:not(:hover) {
.jenkins-button {
transition: var(--standard-transition);
- opacity: 0.5;
+ @media (prefers-contrast: no-preference) {
+ opacity: 0.5;
+
+ span {
+ color: var(--text-color-secondary) !important;
+ }
+ }
&::before {
opacity: 0;
@@ -49,3 +109,16 @@ $jdl-component-code-controls-spacing: 0.75rem;
}
}
}
+
+.jdl-tab-pane__text {
+ padding: 0 1em 1em 1em;
+ border-left: var(--jdl-border);
+ border-right: var(--jdl-border);
+ font-family: var(--font-family-mono) !important;
+ color: var(--text-color-secondary);
+ margin: 0;
+}
+
+.jdl-tab-pane pre {
+ padding-top: 0 !important;
+}
diff --git a/src/main/resources/scss/pages/_cards.scss b/src/main/resources/scss/pages/_cards.scss
index 016616d0..eca4f19a 100644
--- a/src/main/resources/scss/pages/_cards.scss
+++ b/src/main/resources/scss/pages/_cards.scss
@@ -3,8 +3,7 @@
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 1rem;
- height: 680px;
- margin-bottom: calc(var(--section-padding) * 1.5);
+ height: 625px;
.jenkins-card {
margin-bottom: 0;
diff --git a/src/main/resources/scss/pages/_colors.scss b/src/main/resources/scss/pages/_colors.scss
index b1d69b5b..554934a5 100644
--- a/src/main/resources/scss/pages/_colors.scss
+++ b/src/main/resources/scss/pages/_colors.scss
@@ -20,10 +20,10 @@
.jdl-colors {
display: grid;
grid-template-columns: repeat(3, 1fr);
- gap: 2rem 1rem;
+ gap: var(--jdl-spacing);
list-style-type: none;
padding: 0;
- margin-bottom: var(--section-padding);
+ margin: 0;
@media(max-width: 1300px){
grid-template-columns: repeat(2, 1fr);
@@ -36,7 +36,9 @@
& > li {
.jdl-colors__item {
display: flex;
- gap: 0.75rem;
+ flex-direction: column;
+ align-items: start;
+ gap: calc(var(--jdl-spacing) * 0.4);
.copy-button {
opacity: 0;
@@ -49,39 +51,49 @@
}
}
- .jdl-colors__item__icon {
+ .jdl-colors__item__title {
+ @include mixins.base-text;
display: flex;
align-items: center;
- justify-content: center;
- width: 2.75rem;
- height: 2.75rem;
- flex-shrink: 0;
- border-radius: 100%;
+ gap: 0.5rem;
+ font-weight: 450;
+ margin: 0;
+ font-size: 0.875rem;
+ padding: 0.35rem 0.9rem;
+ background: var(--color);
+ text-shadow: 0 2px 2px color-mix(in srgb, var(--text-color) 10%, transparent);
+ border-radius: 100px;
+ color: var(--background);
svg {
- width: 50%;
- height: 50%;
- color: var(--background);
+ width: 1rem;
+ height: 1rem;
}
}
.jdl-colors__item__contents {
+ position: relative;
display: flex;
flex-direction: column;
- align-items: flex-start;
- justify-content: flex-start;
- gap: 0.5rem 0.25rem;
+ gap: inherit;
+ padding-left: calc(2rem + 2px);
- .jdl-colors__item__contents__title {
- @include mixins.base-text;
- font-weight: 500;
- margin: 0;
+ &::before {
+ content: "";
+ position: absolute;
+ top: 0.2rem;
+ left: 1rem;
+ bottom: 0.2rem;
+ background: var(--color);
+ border-radius: 100px;
+ width: var(--jdl-border-width);
+ opacity: 0.2;
}
.jdl-colors__item__contents__description {
@include mixins.base-text;
color: var(--text-color-secondary);
- margin: 0 0 0.5rem 0;
+ margin: 0;
}
.jdl-colors__item__contents__line {
@@ -89,8 +101,6 @@
align-items: center;
justify-content: start;
font-family: var(--font-family-mono);
- font-size: 0.85rem;
- font-weight: 500;
color: var(--text-color-secondary);
opacity: 0.85;
diff --git a/src/main/resources/scss/pages/_conventions.scss b/src/main/resources/scss/pages/_conventions.scss
index 0b5112bd..c768a077 100644
--- a/src/main/resources/scss/pages/_conventions.scss
+++ b/src/main/resources/scss/pages/_conventions.scss
@@ -1,10 +1,10 @@
.jdl-bem-table {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(330px, 1fr));
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
margin-bottom: var(--jdl-spacing);
- font-size: 1.1rem;
- gap: 1rem;
- font-weight: 500;
+ font-size: 0.9375rem;
+ gap: 1.5rem;
+ font-weight: 450;
& > div {
display: flex;
diff --git a/src/main/resources/scss/pages/_home.scss b/src/main/resources/scss/pages/_home.scss
index d1f2c6cc..03eea9a9 100644
--- a/src/main/resources/scss/pages/_home.scss
+++ b/src/main/resources/scss/pages/_home.scss
@@ -1,27 +1,10 @@
@use "../abstracts/mixins";
-.app-home {
- position: relative;
- display: flex;
- flex-direction: column;
- width: 100%;
- max-width: max(950px, 65vw);
- gap: 2rem;
-}
-
-.app-home__subheading {
- margin: 0 0 -1.2rem;
- font-weight: 500;
- font-size: 1.05rem;
- color: var(--text-color-secondary);
- background-color: var(--background);
-}
-
.app-home__side-by-side {
position: relative;
display: grid;
grid-template-columns: 1fr 1fr;
- grid-gap: 2rem;
+ grid-gap: var(--jdl-spacing);
overflow: hidden;
@media (max-width: 970px) {
@@ -31,18 +14,43 @@
}
.app-card__container {
+ position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
color: var(--text-color) !important;
text-decoration: none !important;
+ gap: 0.15rem;
+
+ &--large {
+ gap: var(--jdl-spacing);
+
+ .jdl-section__title {
+ margin-bottom: calc(var(--jdl-spacing) * -0.75);
+ }
+
+ .jdl-section__description {
+ font-size: 1rem;
+ }
+ }
+
+ &::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ aspect-ratio: 16 / 7;
+ border: var(--jdl-border);
+ border-radius: 1rem;
+ }
}
.app-card__container:link:hover .app-card__preview {
filter: brightness(1.2);
}
-.app-card__container:link:hover .app-card__title {
+.app-card__container:link:hover .app-card__title span:first-of-type {
text-decoration: underline;
text-decoration-thickness: 2px;
}
@@ -54,7 +62,6 @@
justify-content: center;
aspect-ratio: 16 / 7;
overflow: hidden;
- margin-bottom: 0.8rem;
transition: var(--standard-transition);
border-radius: 1rem;
z-index: 0;
@@ -69,8 +76,8 @@
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
- max-width: 40%;
- max-height: max(40%, 80px)
+ max-width: 45%;
+ max-height: max(45%, 80px)
}
}
@@ -89,10 +96,17 @@
width: 100%;
margin: -10%;
aspect-ratio: 1;
- background: repeating-conic-gradient(var(--background) 0deg, rgba(100, 100, 100, 0.25) 20deg);
- animation: sunburst-rotation 100s infinite linear;
+ backdrop-filter: invert(2%) blur(100px);
+ mask-image: repeating-conic-gradient(
+ from 90deg,
+ var(--background) 0deg,
+ transparent 20deg
+ );
+ @media (prefers-reduced-motion: no-preference) {
+ animation: sunburst-rotation 100s infinite linear;
+ }
z-index: -1;
- opacity: 0.2;
+ opacity: 0.4;
border-radius: 100%;
flex: 1;
}
@@ -104,40 +118,42 @@
}
}
-.app-card__preview::before, .app-card__preview::after {
- content: "";
- position: absolute;
- inset: 0;
- z-index: -1;
- background-attachment: fixed;
- background-size: max(950px, 65vw) 100vh;
- background-repeat: no-repeat;
- --sidebar-width: 340px;
- --content-width: max(950px, 65vw);
-
- @media (max-width: 970px) {
- --sidebar-width: 0;
- --content-width: 100%;
- background-size: 100%;
+.app-card__preview {
+ &::before, &::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ z-index: -1;
+ background-attachment: fixed;
+ background-size: max(950px, 65vw) 100vh;
+ background-repeat: no-repeat;
+ --sidebar-width: 340px;
+ --content-width: max(950px, 65vw);
+ background-position-x: calc(var(--sidebar-width) + ((100vw - (var(--content-width) + var(--sidebar-width))) / 2));
+ opacity: 0.25;
+
+ @media (max-width: 970px) {
+ --sidebar-width: 0;
+ --content-width: 100%;
+ background-size: 100%;
+ }
}
- background-position-x: calc(var(--sidebar-width) + ((100vw - (var(--content-width) + var(--sidebar-width))) / 2));
-}
-
-.app-card__preview {
&::before {
background-image: radial-gradient(
at 40% 20%,
- var(--orange) 0,
+ var(--light-orange) 0,
transparent 50%
),
- radial-gradient(at 80% 0%, var(--cyan) 0, transparent 50%),
+ radial-gradient(at 80% 0%, var(--light-cyan) 0, transparent 50%),
radial-gradient(at 0% 50%, var(--light-pink) 0, transparent 50%),
radial-gradient(at 80% 50%, var(--light-red) 0, transparent 50%),
radial-gradient(at 0% 100%, var(--light-yellow) 0, transparent 50%),
- radial-gradient(at 80% 100%, var(--dark-purple) 0, transparent 50%),
- radial-gradient(at 0% 0%, var(--pink) 0, transparent 50%);
- animation: aurora-one 5s linear infinite;
+ radial-gradient(at 80% 100%, var(--light-purple) 0, transparent 50%),
+ radial-gradient(at 0% 0%, var(--light-pink) 0, transparent 50%);
+ @media (prefers-reduced-motion: no-preference) {
+ animation: aurora-one 5s linear infinite;
+ }
}
&::after {
@@ -146,13 +162,15 @@
var(--light-cyan) 0,
transparent 50%
),
- radial-gradient(at 80% 0%, var(--dark-orange) 0, transparent 50%),
+ radial-gradient(at 80% 0%, var(--light-orange) 0, transparent 50%),
radial-gradient(at 0% 50%, var(--light-blue) 0, transparent 50%),
radial-gradient(at 80% 50%, var(--light-green) 0, transparent 50%),
radial-gradient(at 0% 100%, var(--light-red) 0, transparent 50%),
radial-gradient(at 80% 100%, var(--light-yellow) 0, transparent 50%),
- radial-gradient(at 0% 0%, var(--cyan) 0, transparent 50%);
- animation: aurora-two 8s linear infinite;
+ radial-gradient(at 0% 0%, var(--light-cyan) 0, transparent 50%);
+ @media (prefers-reduced-motion: no-preference) {
+ animation: aurora-two 8s linear infinite;
+ }
}
}
@@ -182,11 +200,12 @@
.app-card__title {
@include mixins.base-text;
- display: flex;
+ display: inline-flex;
+ font-size: 1rem;
align-items: center;
- margin: 0;
- font-weight: 500;
+ font-weight: 450;
gap: 1.15rem;
+ margin: 0.6rem 0 0;
}
.app-card__new-tag {
@@ -210,6 +229,7 @@
.app-card__description {
@include mixins.base-text;
+ font-size: 1rem;
margin: 0;
color: var(--text-color-secondary);
}
diff --git a/src/main/resources/scss/pages/_index.scss b/src/main/resources/scss/pages/_index.scss
index 3c4d8d4c..c99cd0f1 100644
--- a/src/main/resources/scss/pages/_index.scss
+++ b/src/main/resources/scss/pages/_index.scss
@@ -3,6 +3,7 @@
@use "conventions";
@use "dialogs";
@use "home";
+@use "javascript-proxy";
@use "layouts";
@use "notifications";
@use "spacing";
diff --git a/src/main/resources/scss/pages/_javascript-proxy.scss b/src/main/resources/scss/pages/_javascript-proxy.scss
new file mode 100644
index 00000000..0d7905ce
--- /dev/null
+++ b/src/main/resources/scss/pages/_javascript-proxy.scss
@@ -0,0 +1,9 @@
+.jdl-javascript-proxy__counter {
+ background: color-mix(in srgb, var(--text-color-secondary) 5%, transparent);
+ border: var(--jdl-border);
+ border-radius: 1rem;
+ padding: 0 1.5rem;
+ margin: 1rem;
+ font-size: 5rem;
+ font-weight: 600;
+}
\ No newline at end of file
diff --git a/src/main/resources/scss/pages/_layouts.scss b/src/main/resources/scss/pages/_layouts.scss
index c0990dd5..80496a97 100644
--- a/src/main/resources/scss/pages/_layouts.scss
+++ b/src/main/resources/scss/pages/_layouts.scss
@@ -4,11 +4,9 @@
width: 250px;
aspect-ratio: 16 / 10;
border-radius: 1rem;
- box-shadow: 0 0 5px 1px rgba(0, 0, 20, 0.05),
- 0 10px 15px rgba(0, 0, 20, 0.2);
+ background: var(--background);
+ box-shadow: var(--jdl-box-shadow);
overflow: hidden;
- backdrop-filter: blur(5px) brightness(2);
- -webkit-backdrop-filter: blur(5px) brightness(2);
* {
transition: var(--elastic-transition);
@@ -16,10 +14,10 @@
&__navigation {
position: absolute;
- top: 0;
+ top: -18px;
left: 0;
right: 0;
- height: 22px;
+ height: 40px;
background: var(--header-bg-classic);
}
@@ -159,7 +157,7 @@
&--full-screen {
#{ $self }__navigation {
- top: -22px;
+ top: -40px;
}
#{ $self }__sidebar {
diff --git a/src/main/resources/scss/pages/_spacing.scss b/src/main/resources/scss/pages/_spacing.scss
index db6b4d7d..4c4abd13 100644
--- a/src/main/resources/scss/pages/_spacing.scss
+++ b/src/main/resources/scss/pages/_spacing.scss
@@ -1,32 +1,9 @@
-$margin-color: var(--blue, blue);
-$padding-color: var(--violet, violet);
-
-.jdl-spacing-box {
- position: relative;
- border: 2px dashed $margin-color;
- border-radius: 6px;
- width: 200px;
-
- &::before {
- content: "";
- position: absolute;
- inset: -2px;
- border-radius: inherit;
- background: $margin-color;
- opacity: 0.25;
- }
-
- @for $i from 1 through 6 {
- &--#{$i} {
- height: #{$i}rem;
- }
- }
-}
+$padding-color: var(--purple);
.jdl-padding-box {
position: relative;
- border: 2px dashed $padding-color;
- border-radius: 6px;
+ border: 1.5px dashed $padding-color;
+ border-radius: 0.66rem;
z-index: 0;
&::before {
@@ -35,7 +12,7 @@ $padding-color: var(--violet, violet);
inset: -2px;
border-radius: inherit;
background: $padding-color;
- opacity: 0.25;
+ opacity: 0.2;
z-index: -1;
}
@@ -45,11 +22,12 @@ $padding-color: var(--violet, violet);
p {
position: relative;
- border: 2px dashed $padding-color;
- border-radius: 6px;
- padding: 0.9rem 1rem;
+ border: 1.5px dashed $padding-color;
+ border-radius: 0.66rem;
+ padding: 1rem;
margin: 0;
z-index: 1;
+ font-family: var(--font-family-mono);
&::before {
content: "";
diff --git a/src/main/resources/scss/pages/_symbols.scss b/src/main/resources/scss/pages/_symbols.scss
index 93362efd..c684912d 100644
--- a/src/main/resources/scss/pages/_symbols.scss
+++ b/src/main/resources/scss/pages/_symbols.scss
@@ -5,56 +5,11 @@ $delay: 0.1;
display: grid;
grid-template-columns: repeat(7, 1fr);
grid-template-rows: repeat(3, 1fr);
- grid-gap: 1fr;
align-items: center;
justify-items: center;
width: 100%;
aspect-ratio: 3 / 1;
z-index: 0;
- margin-bottom: var(--jdl-spacing);
- padding: 1rem 0;
-
- &::before,
- &::after {
- content: "";
- position: absolute;
- inset: 0;
- z-index: -1;
- border-radius: 10px;
- overflow: hidden;
-
- @media (max-width: 970px) {
- --sidebar-width: 0;
- --content-width: 100%;
- background-size: 100%;
- }
-
- background-position-x: calc(var(--sidebar-width) + ((100vw - (var(--content-width) + var(--sidebar-width))) / 2));
- }
-
- &::before {
- content: "";
- position: absolute;
- inset: 0;
- z-index: -1;
- background-image: radial-gradient(at 40% 20%, hsl(312, 42%, 60%) 0, transparent 50%),
- radial-gradient(at 80% 0%, hsl(11, 100%, 56%) 0, transparent 50%),
- radial-gradient(at 0% 50%, hsl(354, 64%, 72%) 0, transparent 50%),
- radial-gradient(at 80% 50%, hsl(319, 66%, 64%) 0, transparent 50%),
- radial-gradient(at 0% 100%, hsl(264, 37%, 59%) 0, transparent 50%),
- radial-gradient(at 80% 100%, hsl(342, 55%, 41%) 0, transparent 50%),
- radial-gradient(at 0% 0%, hsla(343, 100%, 76%, 1) 0, transparent 50%);
- animation: rotate-colors 10s linear infinite;
- }
- .app-card__preview::after {
- background-image: radial-gradient(at 80% 0%, hsla(13, 100%, 56%, 1) 0, transparent 50%),
- radial-gradient(at 0% 50%, hsl(31, 100%, 80%) 0, transparent 50%),
- radial-gradient(at 80% 50%, hsla(164, 100%, 76%, 1) 0, transparent 50%),
- radial-gradient(at 0% 100%, hsl(206, 60%, 57%) 0, transparent 50%),
- radial-gradient(at 80% 100%, hsl(146, 64%, 79%) 0, transparent 50%),
- radial-gradient(at 0% 0%, hsla(167, 100%, 76%, 1) 0, transparent 50%);
- animation: rotate-colors-2 10s linear infinite;
- }
div {
display: contents;
diff --git a/src/main/webapp/Banner/danger.jelly b/src/main/webapp/Banner/danger.jelly
new file mode 100644
index 00000000..ef4afcb9
--- /dev/null
+++ b/src/main/webapp/Banner/danger.jelly
@@ -0,0 +1,3 @@
+
+ Hello world
+
diff --git a/src/main/webapp/Banner/index.jelly b/src/main/webapp/Banner/index.jelly
deleted file mode 100644
index f3d54d46..00000000
--- a/src/main/webapp/Banner/index.jelly
+++ /dev/null
@@ -1,12 +0,0 @@
-
- Hello world
-
-
- Hello world
-
-
- Hello world
-
-
- Hello world
-
diff --git a/src/main/webapp/Banner/info.jelly b/src/main/webapp/Banner/info.jelly
new file mode 100644
index 00000000..d11ef81f
--- /dev/null
+++ b/src/main/webapp/Banner/info.jelly
@@ -0,0 +1,3 @@
+
+ Hello world
+
diff --git a/src/main/webapp/Banner/success.jelly b/src/main/webapp/Banner/success.jelly
new file mode 100644
index 00000000..6e5287ad
--- /dev/null
+++ b/src/main/webapp/Banner/success.jelly
@@ -0,0 +1,3 @@
+
+ Hello world
+
diff --git a/src/main/webapp/Banner/warning.jelly b/src/main/webapp/Banner/warning.jelly
new file mode 100644
index 00000000..d6d63f62
--- /dev/null
+++ b/src/main/webapp/Banner/warning.jelly
@@ -0,0 +1,3 @@
+
+ Hello world
+
diff --git a/src/main/webapp/Cards/actions.jelly b/src/main/webapp/Cards/actions.jelly
new file mode 100644
index 00000000..594916ef
--- /dev/null
+++ b/src/main/webapp/Cards/actions.jelly
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+ Card content
+
diff --git a/src/main/webapp/Cards/card.jelly b/src/main/webapp/Cards/card.jelly
index 21c6be61..06ef2002 100644
--- a/src/main/webapp/Cards/card.jelly
+++ b/src/main/webapp/Cards/card.jelly
@@ -1,8 +1,3 @@
-
-
-
-
-
-
+
Card content
diff --git a/src/main/webapp/Inputs/codemirror-html.jelly b/src/main/webapp/Inputs/codemirror-html.jelly
deleted file mode 100644
index 9e3d312f..00000000
--- a/src/main/webapp/Inputs/codemirror-html.jelly
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/main/webapp/Inputs/codemirror-shell.jelly b/src/main/webapp/Inputs/codemirror-shell.jelly
deleted file mode 100644
index d25fa76b..00000000
--- a/src/main/webapp/Inputs/codemirror-shell.jelly
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/main/webapp/Inputs/codemirror.jelly b/src/main/webapp/Inputs/codemirror.jelly
index fb42566c..d25fa76b 100644
--- a/src/main/webapp/Inputs/codemirror.jelly
+++ b/src/main/webapp/Inputs/codemirror.jelly
@@ -1,2 +1 @@
-println "Hello, World!"
-
+
diff --git a/src/main/webapp/Inputs/search.jelly b/src/main/webapp/Inputs/search.jelly
new file mode 100644
index 00000000..3dac69a2
--- /dev/null
+++ b/src/main/webapp/Inputs/search.jelly
@@ -0,0 +1 @@
+
diff --git a/src/main/webapp/Dropdowns/default.jelly b/src/main/webapp/Menu/default.jelly
similarity index 100%
rename from src/main/webapp/Dropdowns/default.jelly
rename to src/main/webapp/Menu/default.jelly
diff --git a/src/main/webapp/HeteroList/ChoiceEntry.java b/src/main/webapp/RepeatableList/ChoiceEntry.java
similarity index 100%
rename from src/main/webapp/HeteroList/ChoiceEntry.java
rename to src/main/webapp/RepeatableList/ChoiceEntry.java
diff --git a/src/main/webapp/HeteroList/Config.java b/src/main/webapp/RepeatableList/Config.java
similarity index 99%
rename from src/main/webapp/HeteroList/Config.java
rename to src/main/webapp/RepeatableList/Config.java
index 431ef857..13add812 100644
--- a/src/main/webapp/HeteroList/Config.java
+++ b/src/main/webapp/RepeatableList/Config.java
@@ -11,5 +11,4 @@ public List getEntries() {
}
@Extension public static class DescriptorImpl extends Descriptor {}
-
}
diff --git a/src/main/webapp/HeteroList/Entry.java b/src/main/webapp/RepeatableList/Entry.java
similarity index 100%
rename from src/main/webapp/HeteroList/Entry.java
rename to src/main/webapp/RepeatableList/Entry.java
diff --git a/src/main/webapp/HeteroList/SimpleEntry.java b/src/main/webapp/RepeatableList/SimpleEntry.java
similarity index 100%
rename from src/main/webapp/HeteroList/SimpleEntry.java
rename to src/main/webapp/RepeatableList/SimpleEntry.java
diff --git a/src/main/webapp/HeteroList/config.jelly b/src/main/webapp/RepeatableList/config.jelly
similarity index 83%
rename from src/main/webapp/HeteroList/config.jelly
rename to src/main/webapp/RepeatableList/config.jelly
index 5a70f9ab..6a0b0da1 100644
--- a/src/main/webapp/HeteroList/config.jelly
+++ b/src/main/webapp/RepeatableList/config.jelly
@@ -2,7 +2,7 @@
-
+
diff --git a/src/main/webapp/Select/Advanced.java b/src/main/webapp/Select/Advanced.java
new file mode 100644
index 00000000..60e0621c
--- /dev/null
+++ b/src/main/webapp/Select/Advanced.java
@@ -0,0 +1,51 @@
+public DescriptorExtensionList> getFruitDescriptors() {
+ return Jenkins.get().getDescriptorList(Fruit.class);
+}
+
+public abstract static class Fruit implements ExtensionPoint, Describable {
+ protected String name;
+
+ protected Fruit(String name) {
+ this.name = name;
+ }
+
+ public Descriptor getDescriptor() {
+ return Jenkins.get().getDescriptor(getClass());
+ }
+}
+
+public static class FruitDescriptor extends Descriptor {}
+
+public static class Apple extends Fruit {
+ private final int seeds;
+
+ @DataBoundConstructor
+ public Apple(int seeds) {
+ super("Apple");
+ this.seeds = seeds;
+ }
+
+ public int getSeeds() {
+ return seeds;
+ }
+
+ @Extension
+ public static final class DescriptorImpl extends FruitDescriptor {}
+}
+
+public static class Banana extends Fruit {
+ private final boolean yellow;
+
+ @DataBoundConstructor
+ public Banana(boolean yellow) {
+ super("Banana");
+ this.yellow = yellow;
+ }
+
+ public boolean isYellow() {
+ return yellow;
+ }
+
+ @Extension
+ public static final class DescriptorImpl extends FruitDescriptor {}
+}
diff --git a/src/main/webapp/Select/DynamicSample.java b/src/main/webapp/Select/DynamicSample.java
index fd26690b..9b8eb8d7 100644
--- a/src/main/webapp/Select/DynamicSample.java
+++ b/src/main/webapp/Select/DynamicSample.java
@@ -1,22 +1,17 @@
public static final class DescriptorImpl extends UISampleDescriptor {
- public ListBoxModel doFillStateItems(@QueryParameter String country) {
- ListBoxModel model = new ListBoxModel();
- for (String state : asList("A", "B", "C")) {
- model.add(String.format("State %s in %s", state, country),
- country + ':' + state);
+ public ListBoxModel doFillStateItems() {
+ ListBoxModel m = new ListBoxModel();
+ for (String s : asList("A", "B", "C")) {
+ m.add(String.format("State %s", s), s);
}
- return model;
+ return m;
}
- public ListBoxModel doFillCityItems(
- @QueryParameter String country,
- @QueryParameter String state
- ) {
- ListBoxModel model = new ListBoxModel();
- for (String city : asList("X", "Y", "Z")) {
- model.add(String.format("City %s in %s %s", city, state, country),
- state + ':' + city);
+ public ListBoxModel doFillCityItems(@QueryParameter String state) {
+ ListBoxModel m = new ListBoxModel();
+ for (String s : asList("X", "Y", "Z")) {
+ m.add(String.format("City %s in %s", s, state), state + ':' + s);
}
- return model;
+ return m;
}
}
diff --git a/src/main/webapp/Select/Sample.java b/src/main/webapp/Select/Simple.java
similarity index 100%
rename from src/main/webapp/Select/Sample.java
rename to src/main/webapp/Select/Simple.java
diff --git a/src/main/webapp/Select/Textbox.java b/src/main/webapp/Select/Textbox.java
new file mode 100644
index 00000000..faab2efc
--- /dev/null
+++ b/src/main/webapp/Select/Textbox.java
@@ -0,0 +1,11 @@
+public class Sample {
+ public AutoCompletionCandidates doAutoCompleteState(@QueryParameter String value) {
+ AutoCompletionCandidates c = new AutoCompletionCandidates();
+ for (String state : STATES) {
+ if (state.toLowerCase().startsWith(value.toLowerCase())) {
+ c.add(state);
+ }
+ }
+ return c;
+ }
+}
\ No newline at end of file
diff --git a/src/main/webapp/Select/sample.jelly b/src/main/webapp/Select/advanced.jelly
similarity index 100%
rename from src/main/webapp/Select/sample.jelly
rename to src/main/webapp/Select/advanced.jelly
diff --git a/src/main/webapp/Select/dynamic-sample.jelly b/src/main/webapp/Select/dynamic-sample.jelly
index 27654010..ba08e484 100644
--- a/src/main/webapp/Select/dynamic-sample.jelly
+++ b/src/main/webapp/Select/dynamic-sample.jelly
@@ -1,7 +1,4 @@
-
-
-
diff --git a/src/main/webapp/Select/sample2.jelly b/src/main/webapp/Select/simple.jelly
similarity index 100%
rename from src/main/webapp/Select/sample2.jelly
rename to src/main/webapp/Select/simple.jelly
diff --git a/src/main/webapp/Select/textbox.jelly b/src/main/webapp/Select/textbox.jelly
new file mode 100644
index 00000000..d0777c7e
--- /dev/null
+++ b/src/main/webapp/Select/textbox.jelly
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/main/webapp/Table/index.jelly b/src/main/webapp/Table/index.jelly
index c7db04b0..e3e3e536 100644
--- a/src/main/webapp/Table/index.jelly
+++ b/src/main/webapp/Table/index.jelly
@@ -1,4 +1,4 @@
-
+
Name
@@ -17,7 +17,7 @@
Success
- #7
+ #7
No Errors
diff --git a/src/test/java/io/jenkins/plugins/designlibrary/HeteroListTest.java b/src/test/java/io/jenkins/plugins/designlibrary/HeteroListTest.java
deleted file mode 100644
index 0d07bcbe..00000000
--- a/src/test/java/io/jenkins/plugins/designlibrary/HeteroListTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package io.jenkins.plugins.designlibrary;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import hudson.XmlFile;
-import java.util.List;
-import org.assertj.core.api.Assertions;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.jvnet.hudson.test.JenkinsRule;
-
-public class HeteroListTest {
-
- public static final String CONFIGURE_URL = "configure";
- public static final String CONFIG_FORM_NAME = "config";
-
- @Rule
- public JenkinsRule j = new JenkinsRule();
-
- @Test
- @Ignore("HtmlUnit doesn't work with prism or async code in sample.js")
- public void Hetero_Radio_Roundtrip() throws Exception {
- HeteroList.Entry firstRadioEntry = new HeteroList.HeteroRadioEntry(new HeteroList.SimpleEntry("first"));
- HeteroList.Entry secondRadioEntry = new HeteroList.HeteroRadioEntry(new HeteroList.SimpleEntry("second"));
-
- List savedEntries = configRoundtrip(firstRadioEntry, secondRadioEntry);
-
- Assertions.assertThat(savedEntries).extracting("entry.text").containsExactly("first", "second");
- }
-
- private List configRoundtrip(HeteroList.Entry... entries) throws Exception {
- HeteroList heteroList = new HeteroList();
- XmlFile configFile = heteroList.getConfigFile();
- heteroList.setConfig(new HeteroList.Config(ImmutableList.copyOf(entries)));
- configFile.write(heteroList);
- long savedManually = configFile.getFile().lastModified();
-
- configRoundtrip(heteroList);
- long savedViaWebInterface = configFile.getFile().lastModified();
-
- assertThat(savedManually).isLessThan(savedViaWebInterface);
-
- HeteroList saved = new HeteroList();
-
- return saved.getConfig().getEntries();
- }
-
- private void configRoundtrip(UISample uiSample) throws Exception {
- j.submit(j.createWebClient().goTo(getUiSampleConfigureUrl(uiSample)).getFormByName(CONFIG_FORM_NAME));
- }
-
- private String getUiSampleConfigureUrl(UISample uiSample) {
- return Joiner.on('/').join(new Root().getUrlName(), uiSample.getUrlName(), CONFIGURE_URL);
- }
-}