From 0b94dbfb13c4d9292ac53635bf16487017ca656f Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 11:49:40 -0600 Subject: [PATCH 01/12] update @labkey/components package version --- assay/package-lock.json | 8 ++++---- assay/package.json | 2 +- core/package-lock.json | 8 ++++---- core/package.json | 2 +- experiment/package-lock.json | 8 ++++---- experiment/package.json | 2 +- pipeline/package-lock.json | 8 ++++---- pipeline/package.json | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 43c863f9952..25b5a33ff14 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -8,7 +8,7 @@ "name": "assay", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.3.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2525,9 +2525,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.3.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.3.2.tgz", - "integrity": "sha512-wlzgvqR/JDxsoBkmbSNKG9040h0EiYdAl9J+NayOF9KKR2SGsrzs/VDE3XNjZVFURxfa2qxrkn05VSPwVXNk4A==", + "version": "7.7.1-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/assay/package.json b/assay/package.json index 4eccd41c80f..136083e4ee5 100644 --- a/assay/package.json +++ b/assay/package.json @@ -12,7 +12,7 @@ "clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen" }, "dependencies": { - "@labkey/components": "7.3.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/core/package-lock.json b/core/package-lock.json index deeafe7a952..9257a78e39d 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.3.2", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0", "@labkey/themes": "1.5.0" }, "devDependencies": { @@ -3547,9 +3547,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.3.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.3.2.tgz", - "integrity": "sha512-wlzgvqR/JDxsoBkmbSNKG9040h0EiYdAl9J+NayOF9KKR2SGsrzs/VDE3XNjZVFURxfa2qxrkn05VSPwVXNk4A==", + "version": "7.7.1-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/core/package.json b/core/package.json index 935ce60ee32..d73e5def892 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.3.2", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0", "@labkey/themes": "1.5.0" }, "devDependencies": { diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 1f30507f173..fc0f04531d6 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -8,7 +8,7 @@ "name": "experiment", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.3.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -3314,9 +3314,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.3.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.3.2.tgz", - "integrity": "sha512-wlzgvqR/JDxsoBkmbSNKG9040h0EiYdAl9J+NayOF9KKR2SGsrzs/VDE3XNjZVFURxfa2qxrkn05VSPwVXNk4A==", + "version": "7.7.1-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/experiment/package.json b/experiment/package.json index 63d1e1ec4e4..c92b27e24bb 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -13,7 +13,7 @@ "test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js" }, "dependencies": { - "@labkey/components": "7.3.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index 92eaed8c830..01c5a3ae178 100644 --- a/pipeline/package-lock.json +++ b/pipeline/package-lock.json @@ -8,7 +8,7 @@ "name": "pipeline", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.3.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2759,9 +2759,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.3.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.3.2.tgz", - "integrity": "sha512-wlzgvqR/JDxsoBkmbSNKG9040h0EiYdAl9J+NayOF9KKR2SGsrzs/VDE3XNjZVFURxfa2qxrkn05VSPwVXNk4A==", + "version": "7.7.1-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/pipeline/package.json b/pipeline/package.json index 3d3c40486a1..18be9ccf7ca 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -14,7 +14,7 @@ "build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map webpack --config node_modules/@labkey/build/webpack/prod.config.js --color --progress --profile" }, "dependencies": { - "@labkey/components": "7.3.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", From ecebf3f70b3e8f8bc5eaaa8701ab0f015be634bd Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 11:58:03 -0600 Subject: [PATCH 02/12] Server side support for domain field URLTargetWindow property, saved with exp.PropertyDescriptor row --- .../client/model/GWTPropertyDescriptor.java | 12 ++++++++++++ .../api/data/ColumnRenderPropertiesImpl.java | 1 + .../org/labkey/api/data/WrappedColumnInfo.java | 9 ++++++++- .../org/labkey/api/exp/ImportTypesHelper.java | 9 +++++++++ .../org/labkey/api/exp/OntologyManager.java | 3 ++- .../api/exp/property/DomainProperty.java | 2 ++ .../labkey/api/exp/property/DomainUtil.java | 1 + .../api/property/DomainPropertyImpl.java | 18 ++++++++++++++++++ 8 files changed, 53 insertions(+), 2 deletions(-) diff --git a/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java b/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java index 61f37f8038d..6f9428c1e53 100644 --- a/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java +++ b/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java @@ -59,6 +59,7 @@ public class GWTPropertyDescriptor implements IsSerializable private final BooleanProperty mvEnabled = new BooleanProperty(false); private final StringProperty importAliases = new StringProperty(); private final StringProperty url = new StringProperty(); + private final StringProperty urlTargetWindow = new StringProperty(); private final BooleanProperty shownInInsertView = new BooleanProperty(true); private final BooleanProperty shownInUpdateView = new BooleanProperty(true); private final BooleanProperty shownInDetailsView = new BooleanProperty(true); @@ -137,6 +138,7 @@ public GWTPropertyDescriptor(GWTPropertyDescriptor s, boolean isNew) setDefaultDisplayValue(s.getDefaultDisplayValue()); setImportAliases(s.getImportAliases()); setURL(s.getURL()); + setURLTargetWindow(s.getURLTargetWindow()); setFacetingBehaviorType(s.getFacetingBehaviorType()); setPHI(s.getPHI()); setExcludeFromShifting(s.isExcludeFromShifting()); @@ -662,6 +664,16 @@ public void setURL(String url) this.url.set(url); } + public String getURLTargetWindow() + { + return urlTargetWindow.toString(); + } + + public void setURLTargetWindow(String urlTargetWindow) + { + this.urlTargetWindow.set(urlTargetWindow); + } + public String getLookupDescription() { if (StringUtils.isEmpty(getLookupSchema()) || StringUtils.isEmpty(getLookupQuery())) diff --git a/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java b/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java index 25b989cf011..02d04ed319a 100644 --- a/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java +++ b/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java @@ -157,6 +157,7 @@ public void copyTo(ColumnRenderPropertiesImpl to) to._recommendedVariable = _recommendedVariable; to._defaultScale = _defaultScale; to._url = _url; + to._urlTargetWindow = _urlTargetWindow; to._importAliases = copyFixedList(_importAliases); to._facetingBehaviorType = _facetingBehaviorType; to._crosstabColumnMember = _crosstabColumnMember; diff --git a/api/src/org/labkey/api/data/WrappedColumnInfo.java b/api/src/org/labkey/api/data/WrappedColumnInfo.java index 30ec4b3e260..f217dcd14d8 100644 --- a/api/src/org/labkey/api/data/WrappedColumnInfo.java +++ b/api/src/org/labkey/api/data/WrappedColumnInfo.java @@ -395,7 +395,14 @@ public StringExpression getURL() public void setURLTargetWindow(String urlTargetWindow) { checkLocked(); - throw new UnsupportedOperationException(); + delegate = new AbstractWrappedColumnInfo(delegate) + { + @Override + public String getURLTargetWindow() + { + return urlTargetWindow; + } + }; } @Override diff --git a/api/src/org/labkey/api/exp/ImportTypesHelper.java b/api/src/org/labkey/api/exp/ImportTypesHelper.java index 450598e7095..a10c5cf5dcc 100644 --- a/api/src/org/labkey/api/exp/ImportTypesHelper.java +++ b/api/src/org/labkey/api/exp/ImportTypesHelper.java @@ -182,6 +182,7 @@ else if (columnXml.isSetKeyVariable()) builder.setInputType(columnXml.isSetInputType() ? columnXml.getInputType() : null); builder.setHidden(columnXml.getIsHidden()); builder.setUrl(columnXml.getUrl()); + builder.setUrlTargetWindow(columnXml.getUrlTarget()); builder.setValidators(ValidatorKind.convertFromXML(columnXml.getValidators())); builder.setConditionalFormats(ConditionalFormat.convertFromXML(columnXml.getConditionalFormats())); @@ -303,6 +304,7 @@ public static class Builder implements org.labkey.api.data.Builder aliases); void setURL(String url); String getURL(); + void setURLTargetWindow(String urlTargetWindow); + String getURLTargetWindow(); DefaultValueType getDefaultValueTypeEnum(); void setDefaultValueTypeEnum(DefaultValueType defaultValueType); diff --git a/api/src/org/labkey/api/exp/property/DomainUtil.java b/api/src/org/labkey/api/exp/property/DomainUtil.java index 5d929ddbbd2..5c4f454add8 100644 --- a/api/src/org/labkey/api/exp/property/DomainUtil.java +++ b/api/src/org/labkey/api/exp/property/DomainUtil.java @@ -524,6 +524,7 @@ public static GWTPropertyDescriptor getPropertyDescriptor(PropertyDescriptor pro gwtProp.setImportAliases(prop.getImportAliases()); StringExpression url = prop.getURL(); gwtProp.setURL(url == null ? null : url.toString()); + gwtProp.setURLTargetWindow(prop.getURLTargetWindow()); gwtProp.setScale(prop.getScale()); gwtProp.setRedactedText(prop.getRedactedText()); gwtProp.setPrincipalConceptCode(prop.getPrincipalConceptCode()); diff --git a/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java b/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java index 0c0a088aa0c..a773e526290 100644 --- a/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java +++ b/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java @@ -499,6 +499,20 @@ public String getURL() return _pd.getURL() == null ? null : _pd.getURL().toString(); } + @Override + public void setURLTargetWindow(String urlTargetWindow) + { + if (Strings.CS.equals(getURLTargetWindow(), urlTargetWindow)) + return; + edit().setURLTargetWindow(urlTargetWindow); + } + + @Override + public String getURLTargetWindow() + { + return _pd.getURLTargetWindow(); + } + private boolean isEdited() { return null != _pdOld; @@ -1039,6 +1053,7 @@ public void copyFrom(DomainProperty propSrc, Container targetContainer) setImportAliasSet(propSrc.getImportAliasSet()); setPhi(propSrc.getPHI()); setURL(propSrc.getURL()); + setURLTargetWindow(propSrc.getURLTargetWindow()); setHidden(propSrc.isHidden()); setShownInDetailsView(propSrc.isShownInDetailsView()); setShownInInsertView(propSrc.isShownInInsertView()); @@ -1171,6 +1186,8 @@ public Map getAuditRecordMap(@Nullable String validatorStr, @Nul map.put("Format", getFormat()); if (!StringUtils.isEmpty(getURL())) map.put("URL", getURL()); + if (!StringUtils.isEmpty(getURLTargetWindow())) + map.put("URLTargetWindow", getURLTargetWindow()); if (getPHI() != null) map.put("PHI", getPHI().getLabel()); if (getDefaultScale() != null) @@ -1337,6 +1354,7 @@ private PropertyDescriptor getPropertyDescriptor(Container c, String domainURI) pd.setContainer(c); pd.setDescription("description"); pd.setURL(StringExpressionFactory.createURL((String)null)); + pd.setURLTargetWindow(null); pd.setImportAliases(null); pd.setRequired(false); pd.setHidden(false); From 099828f9c60fc7f91246a9ad97c9144cc8e5611f Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 11:58:30 -0600 Subject: [PATCH 03/12] exp.PropertyDescriptor add column for URLTargetWindow --- .../schemas/dbscripts/postgresql/exp-25.016-25.017.sql | 1 + .../resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql | 1 + experiment/src/org/labkey/experiment/ExperimentModule.java | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql create mode 100644 experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql diff --git a/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql b/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql new file mode 100644 index 00000000000..cf2fbcb6b04 --- /dev/null +++ b/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql @@ -0,0 +1 @@ +ALTER TABLE exp.PropertyDescriptor ADD COLUMN URLTargetWindow VARCHAR(10) NULL; \ No newline at end of file diff --git a/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql b/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql new file mode 100644 index 00000000000..80a5a054d64 --- /dev/null +++ b/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql @@ -0,0 +1 @@ +ALTER TABLE exp.PropertyDescriptor ADD URLTargetWindow NVARCHAR(10) NULL; \ No newline at end of file diff --git a/experiment/src/org/labkey/experiment/ExperimentModule.java b/experiment/src/org/labkey/experiment/ExperimentModule.java index 232e064d838..2a10f8b8b05 100644 --- a/experiment/src/org/labkey/experiment/ExperimentModule.java +++ b/experiment/src/org/labkey/experiment/ExperimentModule.java @@ -202,7 +202,7 @@ public String getName() @Override public Double getSchemaVersion() { - return 25.016; + return 25.016; // TODO need to increment this } @Nullable From ccc1e0674ecde547f3f1ad076cb941f2717464d5 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 13:41:19 -0600 Subject: [PATCH 04/12] update @labkey/components package version --- assay/package-lock.json | 8 ++++---- assay/package.json | 2 +- core/package-lock.json | 8 ++++---- core/package.json | 2 +- experiment/package-lock.json | 8 ++++---- experiment/package.json | 2 +- pipeline/package-lock.json | 8 ++++---- pipeline/package.json | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 25b5a33ff14..8cc7c650bb5 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -8,7 +8,7 @@ "name": "assay", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2525,9 +2525,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", - "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", + "version": "7.7.1-fb-urlTargetWindow503.1", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", + "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/assay/package.json b/assay/package.json index 136083e4ee5..309ab32e601 100644 --- a/assay/package.json +++ b/assay/package.json @@ -12,7 +12,7 @@ "clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/core/package-lock.json b/core/package-lock.json index 9257a78e39d..d536cbea07e 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1", "@labkey/themes": "1.5.0" }, "devDependencies": { @@ -3547,9 +3547,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", - "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", + "version": "7.7.1-fb-urlTargetWindow503.1", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", + "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/core/package.json b/core/package.json index d73e5def892..22ac0a7a010 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1", "@labkey/themes": "1.5.0" }, "devDependencies": { diff --git a/experiment/package-lock.json b/experiment/package-lock.json index fc0f04531d6..d452dcb7959 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -8,7 +8,7 @@ "name": "experiment", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -3314,9 +3314,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", - "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", + "version": "7.7.1-fb-urlTargetWindow503.1", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", + "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/experiment/package.json b/experiment/package.json index c92b27e24bb..9cd207acdce 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -13,7 +13,7 @@ "test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index 01c5a3ae178..699264c8b56 100644 --- a/pipeline/package-lock.json +++ b/pipeline/package-lock.json @@ -8,7 +8,7 @@ "name": "pipeline", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2759,9 +2759,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.0", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.0.tgz", - "integrity": "sha512-RIL2aLaJxhQ1Y9tbAqqikp4YeWesYJCLgpduXD8j/14aTfUCXYTqCSNExrmhl44YNkPCiLOn6fPhW1XZeX0GDg==", + "version": "7.7.1-fb-urlTargetWindow503.1", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", + "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/pipeline/package.json b/pipeline/package.json index 18be9ccf7ca..baaaac0aadd 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -14,7 +14,7 @@ "build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map webpack --config node_modules/@labkey/build/webpack/prod.config.js --color --progress --profile" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.0" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" }, "devDependencies": { "@labkey/build": "8.7.0", From b3e27ceca1ed93171f740bfadc44b215fc0a75c1 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 13:41:53 -0600 Subject: [PATCH 05/12] add a few more URLTargetWindow references on server side --- .../gwt/client/assay/model/GWTPropertyDescriptorMixin.java | 4 +++- experiment/resources/schemas/exp.xml | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java b/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java index fc45287c2b8..8218636a397 100644 --- a/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java +++ b/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java @@ -38,10 +38,12 @@ }) public abstract class GWTPropertyDescriptorMixin { - GWTPropertyDescriptorMixin(@JsonProperty("PHI") StringProperty phi, @JsonProperty("URL") StringProperty url) + GWTPropertyDescriptorMixin(@JsonProperty("PHI") StringProperty phi, @JsonProperty("URL") StringProperty url, @JsonProperty("URLTargetWindow") StringProperty URLTargetWindow) { } @JsonProperty("PHI") abstract void setPHI(String phi); // rename property on deserialize @JsonProperty("URL") abstract void setURL(String url); // rename property on deserialize + @JsonProperty("URLTargetWindow") + abstract void setURLTargetWindow(String urlTargetWindow); // rename property on deserialize } diff --git a/experiment/resources/schemas/exp.xml b/experiment/resources/schemas/exp.xml index 959a40c6c0a..a542ed58993 100644 --- a/experiment/resources/schemas/exp.xml +++ b/experiment/resources/schemas/exp.xml @@ -524,6 +524,7 @@ + From baa5a3f6aea34fe33fdda7ae8a5b231741ecdc53 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 14:11:32 -0600 Subject: [PATCH 06/12] urlTargetWindow -> urlTarget --- .../model/GWTPropertyDescriptorMixin.java | 6 +++--- .../client/model/GWTPropertyDescriptor.java | 12 ++++++------ .../api/data/AbstractWrappedColumnInfo.java | 4 ++-- .../org/labkey/api/data/BaseColumnInfo.java | 4 ++-- .../api/data/ColumnRenderProperties.java | 2 +- .../api/data/ColumnRenderPropertiesImpl.java | 12 ++++++------ api/src/org/labkey/api/data/DataColumn.java | 2 +- .../data/MutableColumnRenderProperties.java | 2 +- .../org/labkey/api/data/WrappedColumnInfo.java | 6 +++--- .../org/labkey/api/exp/ImportTypesHelper.java | 10 +++++----- .../org/labkey/api/exp/OntologyManager.java | 4 ++-- .../api/exp/property/DomainProperty.java | 4 ++-- .../labkey/api/exp/property/DomainUtil.java | 2 +- .../labkey/core/query/ModulesTableInfo.java | 8 ++++---- .../dbscripts/postgresql/exp-25.016-25.017.sql | 2 +- .../dbscripts/sqlserver/exp-25.016-25.017.sql | 2 +- experiment/resources/schemas/exp.xml | 2 +- .../api/ExpDataClassDataTableImpl.java | 4 ++-- .../api/property/DomainPropertyImpl.java | 18 +++++++++--------- list/src/org/labkey/list/model/ListTable.java | 4 ++-- 20 files changed, 55 insertions(+), 55 deletions(-) diff --git a/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java b/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java index 8218636a397..88642a23a37 100644 --- a/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java +++ b/api/gwtsrc/org/labkey/api/gwt/client/assay/model/GWTPropertyDescriptorMixin.java @@ -38,12 +38,12 @@ }) public abstract class GWTPropertyDescriptorMixin { - GWTPropertyDescriptorMixin(@JsonProperty("PHI") StringProperty phi, @JsonProperty("URL") StringProperty url, @JsonProperty("URLTargetWindow") StringProperty URLTargetWindow) + GWTPropertyDescriptorMixin(@JsonProperty("PHI") StringProperty phi, @JsonProperty("URL") StringProperty url, @JsonProperty("URLTarget") StringProperty URLTarget) { } @JsonProperty("PHI") abstract void setPHI(String phi); // rename property on deserialize @JsonProperty("URL") abstract void setURL(String url); // rename property on deserialize - @JsonProperty("URLTargetWindow") - abstract void setURLTargetWindow(String urlTargetWindow); // rename property on deserialize + @JsonProperty("URLTarget") + abstract void setURLTarget(String urlTarget); // rename property on deserialize } diff --git a/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java b/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java index 6f9428c1e53..303fd309ede 100644 --- a/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java +++ b/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java @@ -59,7 +59,7 @@ public class GWTPropertyDescriptor implements IsSerializable private final BooleanProperty mvEnabled = new BooleanProperty(false); private final StringProperty importAliases = new StringProperty(); private final StringProperty url = new StringProperty(); - private final StringProperty urlTargetWindow = new StringProperty(); + private final StringProperty urlTarget = new StringProperty(); private final BooleanProperty shownInInsertView = new BooleanProperty(true); private final BooleanProperty shownInUpdateView = new BooleanProperty(true); private final BooleanProperty shownInDetailsView = new BooleanProperty(true); @@ -138,7 +138,7 @@ public GWTPropertyDescriptor(GWTPropertyDescriptor s, boolean isNew) setDefaultDisplayValue(s.getDefaultDisplayValue()); setImportAliases(s.getImportAliases()); setURL(s.getURL()); - setURLTargetWindow(s.getURLTargetWindow()); + setURLTarget(s.getURLTarget()); setFacetingBehaviorType(s.getFacetingBehaviorType()); setPHI(s.getPHI()); setExcludeFromShifting(s.isExcludeFromShifting()); @@ -664,14 +664,14 @@ public void setURL(String url) this.url.set(url); } - public String getURLTargetWindow() + public String getURLTarget() { - return urlTargetWindow.toString(); + return urlTarget.toString(); } - public void setURLTargetWindow(String urlTargetWindow) + public void setURLTarget(String urlTarget) { - this.urlTargetWindow.set(urlTargetWindow); + this.urlTarget.set(urlTarget); } public String getLookupDescription() diff --git a/api/src/org/labkey/api/data/AbstractWrappedColumnInfo.java b/api/src/org/labkey/api/data/AbstractWrappedColumnInfo.java index 991bb009676..73165428e45 100644 --- a/api/src/org/labkey/api/data/AbstractWrappedColumnInfo.java +++ b/api/src/org/labkey/api/data/AbstractWrappedColumnInfo.java @@ -566,9 +566,9 @@ public StringExpression getURL() } @Override - public String getURLTargetWindow() + public String getURLTarget() { - return delegate.getURLTargetWindow(); + return delegate.getURLTarget(); } @Override diff --git a/api/src/org/labkey/api/data/BaseColumnInfo.java b/api/src/org/labkey/api/data/BaseColumnInfo.java index f3c53e25d9c..ccd50829965 100644 --- a/api/src/org/labkey/api/data/BaseColumnInfo.java +++ b/api/src/org/labkey/api/data/BaseColumnInfo.java @@ -559,7 +559,7 @@ public void copyURLFrom(ColumnInfo col, @Nullable FieldKey parent, @Nullable Map } setURL(url); } - setURLTargetWindow(col.getURLTargetWindow()); + setURLTarget(col.getURLTarget()); setURLCls(col.getURLCls()); setOnClick(col.getOnClick()); } @@ -1166,7 +1166,7 @@ public void loadFromXml(ColumnType xmlCol, boolean merge) if (xmlCol.isSetUrl()) setURL(StringExpressionFactory.fromXML(xmlCol.getUrl(), false)); if (xmlCol.isSetUrlTarget()) - setURLTargetWindow(xmlCol.getUrlTarget()); + setURLTarget(xmlCol.getUrlTarget()); if (xmlCol.isSetIsAutoInc()) _isAutoIncrement = xmlCol.getIsAutoInc(); if (xmlCol.isSetHasDbSequence()) diff --git a/api/src/org/labkey/api/data/ColumnRenderProperties.java b/api/src/org/labkey/api/data/ColumnRenderProperties.java index a282ddfa5bf..6d7c25dce97 100644 --- a/api/src/org/labkey/api/data/ColumnRenderProperties.java +++ b/api/src/org/labkey/api/data/ColumnRenderProperties.java @@ -84,7 +84,7 @@ public interface ColumnRenderProperties extends ImportAliasable StringExpression getURL(); - String getURLTargetWindow(); + String getURLTarget(); String getURLCls(); diff --git a/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java b/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java index 02d04ed319a..0fcd3129166 100644 --- a/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java +++ b/api/src/org/labkey/api/data/ColumnRenderPropertiesImpl.java @@ -86,7 +86,7 @@ public abstract class ColumnRenderPropertiesImpl implements MutableColumnRenderP protected boolean _shownInDetailsView = true; protected boolean _shownInLookupView = false; protected StringExpression _url; - protected String _urlTargetWindow; + protected String _urlTarget; protected String _urlCls; protected String _onClick; // methods use Set<>, but I'm using a List<> here because it is simpler and more thread safe and explicitly preserves order @@ -157,7 +157,7 @@ public void copyTo(ColumnRenderPropertiesImpl to) to._recommendedVariable = _recommendedVariable; to._defaultScale = _defaultScale; to._url = _url; - to._urlTargetWindow = _urlTargetWindow; + to._urlTarget = _urlTarget; to._importAliases = copyFixedList(_importAliases); to._facetingBehaviorType = _facetingBehaviorType; to._crosstabColumnMember = _crosstabColumnMember; @@ -423,16 +423,16 @@ public void setURL(StringExpression url) } @Override - public String getURLTargetWindow() + public String getURLTarget() { - return _urlTargetWindow; + return _urlTarget; } @Override - public void setURLTargetWindow(String urlTargetWindow) + public void setURLTarget(String urlTarget) { assert _checkLocked(); - _urlTargetWindow = urlTargetWindow; + _urlTarget = urlTarget; } @Override diff --git a/api/src/org/labkey/api/data/DataColumn.java b/api/src/org/labkey/api/data/DataColumn.java index ff2c8c20738..f8f6253c82b 100644 --- a/api/src/org/labkey/api/data/DataColumn.java +++ b/api/src/org/labkey/api/data/DataColumn.java @@ -116,7 +116,7 @@ public DataColumn(ColumnInfo col, boolean withLookups) StringExpression url = withLookups ? _boundColumn.getEffectiveURL() : _boundColumn.getURL(); if (null != url) super.setURLExpression(url); - setLinkTarget(_boundColumn.getURLTargetWindow()); + setLinkTarget(_boundColumn.getURLTarget()); setLinkCls(_boundColumn.getURLCls()); setOnClick(_boundColumn.getOnClick()); setFormatString(_displayColumn.getFormat()); diff --git a/api/src/org/labkey/api/data/MutableColumnRenderProperties.java b/api/src/org/labkey/api/data/MutableColumnRenderProperties.java index bbb9a42a388..89b759f6fe9 100644 --- a/api/src/org/labkey/api/data/MutableColumnRenderProperties.java +++ b/api/src/org/labkey/api/data/MutableColumnRenderProperties.java @@ -46,7 +46,7 @@ public interface MutableColumnRenderProperties extends ColumnRenderProperties, M void setURL(StringExpression url); - void setURLTargetWindow(String urlTargetWindow); + void setURLTarget(String urlTarget); void setURLCls(String urlCls); diff --git a/api/src/org/labkey/api/data/WrappedColumnInfo.java b/api/src/org/labkey/api/data/WrappedColumnInfo.java index f217dcd14d8..d0bdf3fb40c 100644 --- a/api/src/org/labkey/api/data/WrappedColumnInfo.java +++ b/api/src/org/labkey/api/data/WrappedColumnInfo.java @@ -392,15 +392,15 @@ public StringExpression getURL() } @Override - public void setURLTargetWindow(String urlTargetWindow) + public void setURLTarget(String urlTarget) { checkLocked(); delegate = new AbstractWrappedColumnInfo(delegate) { @Override - public String getURLTargetWindow() + public String getURLTarget() { - return urlTargetWindow; + return urlTarget; } }; } diff --git a/api/src/org/labkey/api/exp/ImportTypesHelper.java b/api/src/org/labkey/api/exp/ImportTypesHelper.java index a10c5cf5dcc..f694a2f3a28 100644 --- a/api/src/org/labkey/api/exp/ImportTypesHelper.java +++ b/api/src/org/labkey/api/exp/ImportTypesHelper.java @@ -182,7 +182,7 @@ else if (columnXml.isSetKeyVariable()) builder.setInputType(columnXml.isSetInputType() ? columnXml.getInputType() : null); builder.setHidden(columnXml.getIsHidden()); builder.setUrl(columnXml.getUrl()); - builder.setUrlTargetWindow(columnXml.getUrlTarget()); + builder.setUrlTarget(columnXml.getUrlTarget()); builder.setValidators(ValidatorKind.convertFromXML(columnXml.getValidators())); builder.setConditionalFormats(ConditionalFormat.convertFromXML(columnXml.getConditionalFormats())); @@ -304,7 +304,7 @@ public static class Builder implements org.labkey.api.data.Builder aliases); void setURL(String url); String getURL(); - void setURLTargetWindow(String urlTargetWindow); - String getURLTargetWindow(); + void setURLTarget(String urlTarget); + String getURLTarget(); DefaultValueType getDefaultValueTypeEnum(); void setDefaultValueTypeEnum(DefaultValueType defaultValueType); diff --git a/api/src/org/labkey/api/exp/property/DomainUtil.java b/api/src/org/labkey/api/exp/property/DomainUtil.java index 5c4f454add8..bd9d766b243 100644 --- a/api/src/org/labkey/api/exp/property/DomainUtil.java +++ b/api/src/org/labkey/api/exp/property/DomainUtil.java @@ -524,7 +524,7 @@ public static GWTPropertyDescriptor getPropertyDescriptor(PropertyDescriptor pro gwtProp.setImportAliases(prop.getImportAliases()); StringExpression url = prop.getURL(); gwtProp.setURL(url == null ? null : url.toString()); - gwtProp.setURLTargetWindow(prop.getURLTargetWindow()); + gwtProp.setURLTarget(prop.getURLTarget()); gwtProp.setScale(prop.getScale()); gwtProp.setRedactedText(prop.getRedactedText()); gwtProp.setPrincipalConceptCode(prop.getPrincipalConceptCode()); diff --git a/core/src/org/labkey/core/query/ModulesTableInfo.java b/core/src/org/labkey/core/query/ModulesTableInfo.java index 135c53a060a..4ac0e57b83b 100644 --- a/core/src/org/labkey/core/query/ModulesTableInfo.java +++ b/core/src/org/labkey/core/query/ModulesTableInfo.java @@ -79,7 +79,7 @@ public void addColumns() var nameCol = addWrapColumn(getRealTable().getColumn("Name")); nameCol.setKeyField(true); nameCol.setURL(new StringExpressionFactory.URLStringExpression("${URL}")); - nameCol.setURLTargetWindow("_blank"); + nameCol.setURLTarget("_blank"); addTextColumn("ReleaseVersion").setScale(255); var schemaVersionColumn = addWrapColumn(getRealTable().getColumn("SchemaVersion")); @@ -88,19 +88,19 @@ public void addColumns() addTextColumn("Label").setScale(255); addTextColumn("Description").setScale(4000); - addTextColumn("URL").setURLTargetWindow("_blank"); + addTextColumn("URL").setURLTarget("_blank"); addTextColumn("Author"); addTextColumn("Maintainer"); addColumn("ManageVersion", JdbcType.BOOLEAN); var orgCol = addTextColumn("Organization"); orgCol.setURL(StringExpressionFactory.createURL("${OrganizationURL}")); - orgCol.setURLTargetWindow("_blank"); + orgCol.setURLTarget("_blank"); addTextColumn("OrganizationURL").setHidden(true); var licenseCol = addTextColumn("License"); licenseCol.setURL(StringExpressionFactory.createURL("${LicenseURL}")); - licenseCol.setURLTargetWindow("_blank"); + licenseCol.setURLTarget("_blank"); addTextColumn("ActiveFolders").setDisplayColumnFactory(new ExpandableTextDisplayColumnFactory()); addTextColumn("LicenseURL").setHidden(true); addTextColumn("VcsRevision"); diff --git a/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql b/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql index cf2fbcb6b04..0085f4bdfde 100644 --- a/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql +++ b/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql @@ -1 +1 @@ -ALTER TABLE exp.PropertyDescriptor ADD COLUMN URLTargetWindow VARCHAR(10) NULL; \ No newline at end of file +ALTER TABLE exp.PropertyDescriptor ADD COLUMN URLTarget VARCHAR(10) NULL; \ No newline at end of file diff --git a/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql b/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql index 80a5a054d64..f30b214d5e5 100644 --- a/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql +++ b/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql @@ -1 +1 @@ -ALTER TABLE exp.PropertyDescriptor ADD URLTargetWindow NVARCHAR(10) NULL; \ No newline at end of file +ALTER TABLE exp.PropertyDescriptor ADD URLTarget NVARCHAR(10) NULL; \ No newline at end of file diff --git a/experiment/resources/schemas/exp.xml b/experiment/resources/schemas/exp.xml index a542ed58993..fde31761992 100644 --- a/experiment/resources/schemas/exp.xml +++ b/experiment/resources/schemas/exp.xml @@ -524,7 +524,7 @@ - + diff --git a/experiment/src/org/labkey/experiment/api/ExpDataClassDataTableImpl.java b/experiment/src/org/labkey/experiment/api/ExpDataClassDataTableImpl.java index cc96470d824..f4178e1dbca 100644 --- a/experiment/src/org/labkey/experiment/api/ExpDataClassDataTableImpl.java +++ b/experiment/src/org/labkey/experiment/api/ExpDataClassDataTableImpl.java @@ -536,11 +536,11 @@ private void configureAttachmentURL(MutableColumnInfo col) if (FileLinkDisplayColumn.AS_ATTACHMENT_FORMAT.equalsIgnoreCase(col.getFormat())) { url.addParameter("inline", "false"); - col.setURLTargetWindow(null); + col.setURLTarget(null); } else { - col.setURLTargetWindow("_blank"); + col.setURLTarget("_blank"); } col.setURL(StringExpressionFactory.createURL(url)); } diff --git a/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java b/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java index a773e526290..2b10c8c8718 100644 --- a/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java +++ b/experiment/src/org/labkey/experiment/api/property/DomainPropertyImpl.java @@ -500,17 +500,17 @@ public String getURL() } @Override - public void setURLTargetWindow(String urlTargetWindow) + public void setURLTarget(String urlTarget) { - if (Strings.CS.equals(getURLTargetWindow(), urlTargetWindow)) + if (Strings.CS.equals(getURLTarget(), urlTarget)) return; - edit().setURLTargetWindow(urlTargetWindow); + edit().setURLTarget(urlTarget); } @Override - public String getURLTargetWindow() + public String getURLTarget() { - return _pd.getURLTargetWindow(); + return _pd.getURLTarget(); } private boolean isEdited() @@ -1053,7 +1053,7 @@ public void copyFrom(DomainProperty propSrc, Container targetContainer) setImportAliasSet(propSrc.getImportAliasSet()); setPhi(propSrc.getPHI()); setURL(propSrc.getURL()); - setURLTargetWindow(propSrc.getURLTargetWindow()); + setURLTarget(propSrc.getURLTarget()); setHidden(propSrc.isHidden()); setShownInDetailsView(propSrc.isShownInDetailsView()); setShownInInsertView(propSrc.isShownInInsertView()); @@ -1186,8 +1186,8 @@ public Map getAuditRecordMap(@Nullable String validatorStr, @Nul map.put("Format", getFormat()); if (!StringUtils.isEmpty(getURL())) map.put("URL", getURL()); - if (!StringUtils.isEmpty(getURLTargetWindow())) - map.put("URLTargetWindow", getURLTargetWindow()); + if (!StringUtils.isEmpty(getURLTarget())) + map.put("URLTarget", getURLTarget()); if (getPHI() != null) map.put("PHI", getPHI().getLabel()); if (getDefaultScale() != null) @@ -1354,7 +1354,7 @@ private PropertyDescriptor getPropertyDescriptor(Container c, String domainURI) pd.setContainer(c); pd.setDescription("description"); pd.setURL(StringExpressionFactory.createURL((String)null)); - pd.setURLTargetWindow(null); + pd.setURLTarget(null); pd.setImportAliases(null); pd.setRequired(false); pd.setHidden(false); diff --git a/list/src/org/labkey/list/model/ListTable.java b/list/src/org/labkey/list/model/ListTable.java index 82694915f40..46b8a23ce59 100644 --- a/list/src/org/labkey/list/model/ListTable.java +++ b/list/src/org/labkey/list/model/ListTable.java @@ -371,11 +371,11 @@ private void configureAttachmentURL(MutableColumnInfo col) if (FileLinkDisplayColumn.AS_ATTACHMENT_FORMAT.equalsIgnoreCase(col.getFormat())) { url.addParameter("inline", "false"); - col.setURLTargetWindow(null); + col.setURLTarget(null); } else { - col.setURLTargetWindow("_blank"); + col.setURLTarget("_blank"); } col.setURL(StringExpressionFactory.createURL(url)); } From c2690e823706cc5bd4078b4fc7e223126fc8a169 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 14:12:29 -0600 Subject: [PATCH 07/12] update @labkey/components package version --- assay/package-lock.json | 8 ++++---- assay/package.json | 2 +- core/package-lock.json | 8 ++++---- core/package.json | 2 +- experiment/package-lock.json | 8 ++++---- experiment/package.json | 2 +- pipeline/package-lock.json | 8 ++++---- pipeline/package.json | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 8cc7c650bb5..01992ff237e 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -8,7 +8,7 @@ "name": "assay", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2525,9 +2525,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.1", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", - "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", + "version": "7.7.1-fb-urlTargetWindow503.2", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", + "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/assay/package.json b/assay/package.json index 309ab32e601..eba6a686b68 100644 --- a/assay/package.json +++ b/assay/package.json @@ -12,7 +12,7 @@ "clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/core/package-lock.json b/core/package-lock.json index d536cbea07e..68c978f15a4 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2", "@labkey/themes": "1.5.0" }, "devDependencies": { @@ -3547,9 +3547,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.1", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", - "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", + "version": "7.7.1-fb-urlTargetWindow503.2", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", + "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/core/package.json b/core/package.json index 22ac0a7a010..15feef68cbc 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2", "@labkey/themes": "1.5.0" }, "devDependencies": { diff --git a/experiment/package-lock.json b/experiment/package-lock.json index d452dcb7959..8b0a0834391 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -8,7 +8,7 @@ "name": "experiment", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -3314,9 +3314,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.1", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", - "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", + "version": "7.7.1-fb-urlTargetWindow503.2", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", + "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/experiment/package.json b/experiment/package.json index 9cd207acdce..3e2ef42f8a7 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -13,7 +13,7 @@ "test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index 699264c8b56..e3e1bc59684 100644 --- a/pipeline/package-lock.json +++ b/pipeline/package-lock.json @@ -8,7 +8,7 @@ "name": "pipeline", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2759,9 +2759,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.1", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.1.tgz", - "integrity": "sha512-XDWvO8hXaKxxyQ1ciYVP6HHt9hMXiSPj8eKpGOS7R8StgneOVjT7hW2S3rES6avBR/wR5zh7arZSp4P8H46j0w==", + "version": "7.7.1-fb-urlTargetWindow503.2", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", + "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/pipeline/package.json b/pipeline/package.json index baaaac0aadd..f5145eeffc9 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -14,7 +14,7 @@ "build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map webpack --config node_modules/@labkey/build/webpack/prod.config.js --color --progress --profile" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.1" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" }, "devDependencies": { "@labkey/build": "8.7.0", From 99f31ca5b9d003a4bd9529e1bf1ce8c64c32ab38 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 14:40:11 -0600 Subject: [PATCH 08/12] URLTarget support in folder export/import via XAR writer --- api/schemas/expTypes.xsd | 1 + experiment/src/org/labkey/experiment/XarExporter.java | 4 ++++ .../labkey/experiment/api/property/PropertyServiceImpl.java | 1 + 3 files changed, 6 insertions(+) diff --git a/api/schemas/expTypes.xsd b/api/schemas/expTypes.xsd index ef4ea5798ba..4ea60f56df6 100644 --- a/api/schemas/expTypes.xsd +++ b/api/schemas/expTypes.xsd @@ -529,6 +529,7 @@ + A structure that describes a foreign key relationship between a column in the current table and a target column in another table. diff --git a/experiment/src/org/labkey/experiment/XarExporter.java b/experiment/src/org/labkey/experiment/XarExporter.java index 1961b6016b8..f3a658db3cd 100644 --- a/experiment/src/org/labkey/experiment/XarExporter.java +++ b/experiment/src/org/labkey/experiment/XarExporter.java @@ -842,6 +842,10 @@ private void addPropertyDescriptor(DomainDescriptorType xDomain, DomainProperty { xProp.setURL(prop.getURL().toString()); } + if (prop.getURLTarget() != null) + { + xProp.setURLTarget(prop.getURLTarget()); + } if (!prop.getImportAliasSet().isEmpty()) { PropertyDescriptorType.ImportAliases xImportAliases = xProp.addNewImportAliases(); diff --git a/experiment/src/org/labkey/experiment/api/property/PropertyServiceImpl.java b/experiment/src/org/labkey/experiment/api/property/PropertyServiceImpl.java index 545600dcee5..ffc075e4375 100644 --- a/experiment/src/org/labkey/experiment/api/property/PropertyServiceImpl.java +++ b/experiment/src/org/labkey/experiment/api/property/PropertyServiceImpl.java @@ -497,6 +497,7 @@ private static void loadPropertyDescriptor(Domain domain, XarContext context, Pr } prop.setURL(xProp.getURL()); + prop.setURLTarget(xProp.getURLTarget()); Set importAliases = new LinkedHashSet<>(); if (xProp.isSetImportAliases()) { From f4c57c3bbf4982419bf777ebe1a9130b8fe17f04 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 30 Dec 2025 14:51:51 -0600 Subject: [PATCH 09/12] update @labkey/components package version --- assay/package-lock.json | 8 ++++---- assay/package.json | 2 +- core/package-lock.json | 8 ++++---- core/package.json | 2 +- experiment/package-lock.json | 8 ++++---- experiment/package.json | 2 +- pipeline/package-lock.json | 8 ++++---- pipeline/package.json | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 01992ff237e..773706e7021 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -8,7 +8,7 @@ "name": "assay", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2525,9 +2525,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", - "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", + "version": "7.7.1-fb-urlTargetWindow503.3", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", + "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/assay/package.json b/assay/package.json index eba6a686b68..79a969778fc 100644 --- a/assay/package.json +++ b/assay/package.json @@ -12,7 +12,7 @@ "clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/core/package-lock.json b/core/package-lock.json index 68c978f15a4..1926f9f5020 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3", "@labkey/themes": "1.5.0" }, "devDependencies": { @@ -3547,9 +3547,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", - "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", + "version": "7.7.1-fb-urlTargetWindow503.3", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", + "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/core/package.json b/core/package.json index 15feef68cbc..d1fd11d0a47 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2", + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3", "@labkey/themes": "1.5.0" }, "devDependencies": { diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 8b0a0834391..81dd602a83f 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -8,7 +8,7 @@ "name": "experiment", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -3314,9 +3314,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", - "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", + "version": "7.7.1-fb-urlTargetWindow503.3", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", + "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/experiment/package.json b/experiment/package.json index 3e2ef42f8a7..d648bdc3acf 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -13,7 +13,7 @@ "test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index e3e1bc59684..d8b630eb323 100644 --- a/pipeline/package-lock.json +++ b/pipeline/package-lock.json @@ -8,7 +8,7 @@ "name": "pipeline", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2759,9 +2759,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.2", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.2.tgz", - "integrity": "sha512-9vL0q95B58WCzciCat7NZ2C9SmIwPTcAftBoiPoHfKpnLeJuQ+5GZ5Oni2uayZTjQSmruPl7IeDCpGflMcpmIQ==", + "version": "7.7.1-fb-urlTargetWindow503.3", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", + "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/pipeline/package.json b/pipeline/package.json index f5145eeffc9..b5a17668c96 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -14,7 +14,7 @@ "build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map webpack --config node_modules/@labkey/build/webpack/prod.config.js --color --progress --profile" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.2" + "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" }, "devDependencies": { "@labkey/build": "8.7.0", From f0cba1de07fca41e5b7a4781090d8d7731ca4b4b Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 2 Jan 2026 11:11:39 -0600 Subject: [PATCH 10/12] update @labkey/components package version --- assay/package-lock.json | 8 ++++---- assay/package.json | 2 +- core/package-lock.json | 8 ++++---- core/package.json | 2 +- experiment/package-lock.json | 8 ++++---- experiment/package.json | 2 +- pipeline/package-lock.json | 8 ++++---- pipeline/package.json | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 773706e7021..c65d43d51b7 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -8,7 +8,7 @@ "name": "assay", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2525,9 +2525,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.3", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", - "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", + "version": "7.7.3-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.3-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-0c/KKeP3uw9yL2X8DP8AjXtLa19jBiZBbviyIiqJoc+6ImrRBgcSv1Q1RhJjPoycr0PdHxhuJfnTkRkH5KwL6Q==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/assay/package.json b/assay/package.json index 79a969778fc..f93b302a710 100644 --- a/assay/package.json +++ b/assay/package.json @@ -12,7 +12,7 @@ "clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/core/package-lock.json b/core/package-lock.json index 1926f9f5020..e2168a81d27 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8,7 +8,7 @@ "name": "labkey-core", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3", + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0", "@labkey/themes": "1.5.0" }, "devDependencies": { @@ -3547,9 +3547,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.3", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", - "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", + "version": "7.7.3-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.3-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-0c/KKeP3uw9yL2X8DP8AjXtLa19jBiZBbviyIiqJoc+6ImrRBgcSv1Q1RhJjPoycr0PdHxhuJfnTkRkH5KwL6Q==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/core/package.json b/core/package.json index d1fd11d0a47..19a562851ab 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3", + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0", "@labkey/themes": "1.5.0" }, "devDependencies": { diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 81dd602a83f..bbd567dff18 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -8,7 +8,7 @@ "name": "experiment", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -3314,9 +3314,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.3", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", - "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", + "version": "7.7.3-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.3-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-0c/KKeP3uw9yL2X8DP8AjXtLa19jBiZBbviyIiqJoc+6ImrRBgcSv1Q1RhJjPoycr0PdHxhuJfnTkRkH5KwL6Q==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/experiment/package.json b/experiment/package.json index d648bdc3acf..f0a0c15769a 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -13,7 +13,7 @@ "test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index d8b630eb323..3dad7b2d229 100644 --- a/pipeline/package-lock.json +++ b/pipeline/package-lock.json @@ -8,7 +8,7 @@ "name": "pipeline", "version": "0.0.0", "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", @@ -2759,9 +2759,9 @@ } }, "node_modules/@labkey/components": { - "version": "7.7.1-fb-urlTargetWindow503.3", - "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.1-fb-urlTargetWindow503.3.tgz", - "integrity": "sha512-paoV4TKFajPhd2P1Mqf2iGgqBUAN3PcOBzI6Jn1B3Kw+u30+jwhVfMwwFwBN357rJd5BIKg4+ueHFOqkFv5/Jw==", + "version": "7.7.3-fb-urlTargetWindow503.0", + "resolved": "https://labkey.jfrog.io/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-7.7.3-fb-urlTargetWindow503.0.tgz", + "integrity": "sha512-0c/KKeP3uw9yL2X8DP8AjXtLa19jBiZBbviyIiqJoc+6ImrRBgcSv1Q1RhJjPoycr0PdHxhuJfnTkRkH5KwL6Q==", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/pipeline/package.json b/pipeline/package.json index b5a17668c96..f502742f0b1 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -14,7 +14,7 @@ "build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map webpack --config node_modules/@labkey/build/webpack/prod.config.js --color --progress --profile" }, "dependencies": { - "@labkey/components": "7.7.1-fb-urlTargetWindow503.3" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", From 069754f0d7da2ea493b2d6e1040a7e752f4206e3 Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 2 Jan 2026 11:40:34 -0600 Subject: [PATCH 11/12] sql upgrade script and version bump --- .../postgresql/{exp-25.016-25.017.sql => exp-26.000-26.001.sql} | 0 .../sqlserver/{exp-25.016-25.017.sql => exp-26.000-26.001.sql} | 0 experiment/src/org/labkey/experiment/ExperimentModule.java | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename experiment/resources/schemas/dbscripts/postgresql/{exp-25.016-25.017.sql => exp-26.000-26.001.sql} (100%) rename experiment/resources/schemas/dbscripts/sqlserver/{exp-25.016-25.017.sql => exp-26.000-26.001.sql} (100%) diff --git a/experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql b/experiment/resources/schemas/dbscripts/postgresql/exp-26.000-26.001.sql similarity index 100% rename from experiment/resources/schemas/dbscripts/postgresql/exp-25.016-25.017.sql rename to experiment/resources/schemas/dbscripts/postgresql/exp-26.000-26.001.sql diff --git a/experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql b/experiment/resources/schemas/dbscripts/sqlserver/exp-26.000-26.001.sql similarity index 100% rename from experiment/resources/schemas/dbscripts/sqlserver/exp-25.016-25.017.sql rename to experiment/resources/schemas/dbscripts/sqlserver/exp-26.000-26.001.sql diff --git a/experiment/src/org/labkey/experiment/ExperimentModule.java b/experiment/src/org/labkey/experiment/ExperimentModule.java index ddd97d0f18b..ab459df94f7 100644 --- a/experiment/src/org/labkey/experiment/ExperimentModule.java +++ b/experiment/src/org/labkey/experiment/ExperimentModule.java @@ -202,7 +202,7 @@ public String getName() @Override public Double getSchemaVersion() { - return 26.000; + return 26.001; } @Nullable From ef3e8d410343828bc3aea20acfdd20e0349eaaad Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 2 Jan 2026 12:00:12 -0600 Subject: [PATCH 12/12] Handle URLTarget prop/setting for calculated fields in XML instead of exp.PropertyDescriptor --- api/src/org/labkey/api/exp/property/DomainUtil.java | 2 ++ api/src/org/labkey/api/query/MetadataColumnJSON.java | 2 ++ query/src/org/labkey/query/MetadataTableJSON.java | 10 ++++++++++ 3 files changed, 14 insertions(+) diff --git a/api/src/org/labkey/api/exp/property/DomainUtil.java b/api/src/org/labkey/api/exp/property/DomainUtil.java index bd9d766b243..af2309f42c8 100644 --- a/api/src/org/labkey/api/exp/property/DomainUtil.java +++ b/api/src/org/labkey/api/exp/property/DomainUtil.java @@ -617,6 +617,8 @@ public static GWTPropertyDescriptor getPropertyDescriptor(ColumnType columnXml) // TODO: Include null value behavior if (columnXml.isSetUrl()) gwtProp.setURL(columnXml.getUrl().getStringValue()); + if (columnXml.isSetUrlTarget()) + gwtProp.setURLTarget(columnXml.getUrlTarget()); if (columnXml.isSetShownInInsertView()) gwtProp.setShownInInsertView(columnXml.getShownInInsertView()); if (columnXml.isSetShownInUpdateView()) diff --git a/api/src/org/labkey/api/query/MetadataColumnJSON.java b/api/src/org/labkey/api/query/MetadataColumnJSON.java index 67b3080957c..6590390c35a 100644 --- a/api/src/org/labkey/api/query/MetadataColumnJSON.java +++ b/api/src/org/labkey/api/query/MetadataColumnJSON.java @@ -138,6 +138,8 @@ public Map getAuditRecordMap() map.put("Format", getFormat()); if (!StringUtils.isEmpty(getURL())) map.put("URL", getURL()); + if (!StringUtils.isEmpty(getURLTarget())) + map.put("URLTarget", getURLTarget()); if (!StringUtils.isEmpty(getPHI())) map.put("PHI", getPHI()); if (!StringUtils.isEmpty(getDefaultScale())) diff --git a/query/src/org/labkey/query/MetadataTableJSON.java b/query/src/org/labkey/query/MetadataTableJSON.java index a361b2b5caa..934c621caa6 100644 --- a/query/src/org/labkey/query/MetadataTableJSON.java +++ b/query/src/org/labkey/query/MetadataTableJSON.java @@ -411,6 +411,16 @@ else if (xmlColumn.isSetUrl()) xmlColumn.unsetUrl(); } + // Set the URL Target + if (shouldStoreValue(metadataColumnJSON.getURLTarget(), rawColumnInfo.getURLTarget())) + { + xmlColumn.setUrlTarget(metadataColumnJSON.getURLTarget()); + } + else if (xmlColumn.isSetUrlTarget()) + { + xmlColumn.unsetUrlTarget(); + } + // Set the ImportAliases Set importAliasSet = rawColumnInfo.getImportAliasSet(); if (metadataColumnJSON.getImportAliases() != null)