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..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,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("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("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 61f37f8038d..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,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 urlTarget = 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()); + setURLTarget(s.getURLTarget()); setFacetingBehaviorType(s.getFacetingBehaviorType()); setPHI(s.getPHI()); setExcludeFromShifting(s.isExcludeFromShifting()); @@ -662,6 +664,16 @@ public void setURL(String url) this.url.set(url); } + public String getURLTarget() + { + return urlTarget.toString(); + } + + public void setURLTarget(String urlTarget) + { + this.urlTarget.set(urlTarget); + } + public String getLookupDescription() { if (StringUtils.isEmpty(getLookupSchema()) || StringUtils.isEmpty(getLookupQuery())) 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/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 25b989cf011..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,6 +157,7 @@ public void copyTo(ColumnRenderPropertiesImpl to) to._recommendedVariable = _recommendedVariable; to._defaultScale = _defaultScale; to._url = _url; + to._urlTarget = _urlTarget; to._importAliases = copyFixedList(_importAliases); to._facetingBehaviorType = _facetingBehaviorType; to._crosstabColumnMember = _crosstabColumnMember; @@ -422,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 30ec4b3e260..d0bdf3fb40c 100644 --- a/api/src/org/labkey/api/data/WrappedColumnInfo.java +++ b/api/src/org/labkey/api/data/WrappedColumnInfo.java @@ -392,10 +392,17 @@ public StringExpression getURL() } @Override - public void setURLTargetWindow(String urlTargetWindow) + public void setURLTarget(String urlTarget) { checkLocked(); - throw new UnsupportedOperationException(); + delegate = new AbstractWrappedColumnInfo(delegate) + { + @Override + public String getURLTarget() + { + return urlTarget; + } + }; } @Override diff --git a/api/src/org/labkey/api/exp/ImportTypesHelper.java b/api/src/org/labkey/api/exp/ImportTypesHelper.java index 450598e7095..f694a2f3a28 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.setUrlTarget(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 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 5d929ddbbd2..af2309f42c8 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.setURLTarget(prop.getURLTarget()); gwtProp.setScale(prop.getScale()); gwtProp.setRedactedText(prop.getRedactedText()); gwtProp.setPrincipalConceptCode(prop.getPrincipalConceptCode()); @@ -616,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/assay/package-lock.json b/assay/package-lock.json index 43c863f9952..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.3.2" + "@labkey/components": "7.7.3-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.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 4eccd41c80f..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.3.2" + "@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 deeafe7a952..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.3.2", + "@labkey/components": "7.7.3-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.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 935ce60ee32..19a562851ab 100644 --- a/core/package.json +++ b/core/package.json @@ -53,7 +53,7 @@ } }, "dependencies": { - "@labkey/components": "7.3.2", + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0", "@labkey/themes": "1.5.0" }, "devDependencies": { 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/package-lock.json b/experiment/package-lock.json index 1f30507f173..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.3.2" + "@labkey/components": "7.7.3-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.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 63d1e1ec4e4..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.3.2" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", diff --git a/experiment/resources/schemas/dbscripts/postgresql/exp-26.000-26.001.sql b/experiment/resources/schemas/dbscripts/postgresql/exp-26.000-26.001.sql new file mode 100644 index 00000000000..0085f4bdfde --- /dev/null +++ b/experiment/resources/schemas/dbscripts/postgresql/exp-26.000-26.001.sql @@ -0,0 +1 @@ +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-26.000-26.001.sql b/experiment/resources/schemas/dbscripts/sqlserver/exp-26.000-26.001.sql new file mode 100644 index 00000000000..f30b214d5e5 --- /dev/null +++ b/experiment/resources/schemas/dbscripts/sqlserver/exp-26.000-26.001.sql @@ -0,0 +1 @@ +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 959a40c6c0a..fde31761992 100644 --- a/experiment/resources/schemas/exp.xml +++ b/experiment/resources/schemas/exp.xml @@ -524,6 +524,7 @@ + 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 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/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 0c0a088aa0c..2b10c8c8718 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 setURLTarget(String urlTarget) + { + if (Strings.CS.equals(getURLTarget(), urlTarget)) + return; + edit().setURLTarget(urlTarget); + } + + @Override + public String getURLTarget() + { + return _pd.getURLTarget(); + } + 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()); + setURLTarget(propSrc.getURLTarget()); 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(getURLTarget())) + map.put("URLTarget", getURLTarget()); 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.setURLTarget(null); pd.setImportAliases(null); pd.setRequired(false); pd.setHidden(false); 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()) { 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)); } diff --git a/pipeline/package-lock.json b/pipeline/package-lock.json index 92eaed8c830..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.3.2" + "@labkey/components": "7.7.3-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.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 3d3c40486a1..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.3.2" + "@labkey/components": "7.7.3-fb-urlTargetWindow503.0" }, "devDependencies": { "@labkey/build": "8.7.0", 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)