Updated Replace By Expression
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-expression-widget@100143 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
056dab337f
commit
b4158cf9a1
|
@ -323,6 +323,9 @@ public class ColumnExpressionPanel extends FramedPanel {
|
|||
|
||||
protected void applyRule() {
|
||||
C_Expression exp = conditionWidget.getExpression();
|
||||
if(exp==null){
|
||||
return;
|
||||
}
|
||||
switch (type) {
|
||||
case ColumnRule:
|
||||
parentRuleDialog.setExpression(exp);
|
||||
|
|
|
@ -13,6 +13,7 @@ import org.gcube.portlets.user.td.expressionwidget.client.resources.ExpressionRe
|
|||
import org.gcube.portlets.user.td.expressionwidget.shared.model.OperatorTypeMap;
|
||||
import org.gcube.portlets.user.td.gwtservice.shared.tr.ColumnData;
|
||||
import org.gcube.portlets.user.td.widgetcommonevent.shared.expression.C_Expression;
|
||||
import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnDataType;
|
||||
|
||||
import com.allen_sauer.gwt.log.client.Log;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
|
@ -512,7 +513,7 @@ public class ConditionWidget extends SimpleContainer {
|
|||
.getItemByItemId(itemIdCombo);
|
||||
Log.debug("combo: " + comboOp.getCurrentValue().toString());
|
||||
|
||||
if (column.getDataTypeName().compareTo("Date") == 0) {
|
||||
if (column.getDataTypeName().compareTo(ColumnDataType.Date.toString()) == 0) {
|
||||
firstArgDate = (DateField) horiz
|
||||
.getItemByItemId(itemIdFirstArgDate);
|
||||
secondArgDate = (DateField) horiz
|
||||
|
@ -531,7 +532,8 @@ public class ConditionWidget extends SimpleContainer {
|
|||
firstArg = (TextField) horiz.getItemByItemId(itemIdFirstArg);
|
||||
secondArg = (TextField) horiz.getItemByItemId(itemIdSecondArg);
|
||||
Log.debug("argLeft: " + firstArg.getCurrentValue() + " argRight: " + secondArg.getCurrentValue());
|
||||
|
||||
|
||||
|
||||
expression = mapOp.map(column, comboOp.getCurrentValue()
|
||||
.getOperatorType(),
|
||||
firstArg == null ? null : firstArg.getCurrentValue(),
|
||||
|
@ -586,6 +588,7 @@ public class ConditionWidget extends SimpleContainer {
|
|||
return exp;
|
||||
}
|
||||
|
||||
|
||||
public String getReadableExpression() {
|
||||
return readableExpression;
|
||||
}
|
||||
|
|
|
@ -1,40 +1,40 @@
|
|||
<!-- file: ./HelpReplaceByExp.html -->
|
||||
<div>
|
||||
<div class='HelpReplaceRegexClear'>
|
||||
<div class="HelpReplaceRegexClear">
|
||||
<h2>Replace Column By Expression</h2>
|
||||
</div>
|
||||
<div class='HelpReplaceRegexClear'>
|
||||
<div class="HelpReplaceRegexClear">
|
||||
<h3>Basic Example 1</h3>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<div class="{style.dataStyle}"></div>
|
||||
<!-- <img class='HelpReplaceRegexImg' src='Data.png' width="200" height="155" alt=""> -->
|
||||
<div class=""></div>
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="Data.png" width="200" height="155" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleConcat.png" width="705" height="484" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="SimpleConcat.png" width="705" height="484" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleConcatResultData.png" width="203" height="158" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="SimpleConcatResultData.png" width="203" height="158" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleReplaceMatchingRegex.png" width="707" height="480" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="SimpleReplaceMatchingRegex.png" width="707" height="480" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleReplaceMatchingRegexResultData.png" width="204" height="155" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="SimpleReplaceMatchingRegexResultData.png" width="204" height="155" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleSubstringByIndex.png" width="709" height="484" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="SimpleSubstringByIndex.png" width="709" height="484" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleSubstringByIndexResultData.png" width="206" height="155" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="SimpleSubstringByIndexResultData.png" width="206" height="155" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="Simple2Concat.png" width="712" height="484" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="Simple2Concat.png" width="712" height="484" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="Simple2ConcatResultData.png" width="236" height="159" alt="">
|
||||
<p class="HelpReplaceRegexClear">
|
||||
<img class="HelpReplaceRegexImg" src="Simple2ConcatResultData.png" width="236" height="159" alt="">
|
||||
</p>
|
||||
</div>
|
||||
<div class='HelpReplaceRegexClear'>
|
||||
<div class="HelpReplaceRegexClear">
|
||||
<h3>Regular Expression</h3>
|
||||
<p>
|
||||
<a href="http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP">POSIX Regular Expressions Reference</a>
|
||||
|
|
|
@ -6,5 +6,9 @@
|
|||
.HelpReplaceRegexClear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.DataStyle {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -50,7 +50,8 @@ public class HelpReplaceColumnByExpression {
|
|||
}
|
||||
|
||||
public HelpReplaceColumnByExpression() {
|
||||
this.style = HelpReplaceByExpResources.INSTANCE.style();
|
||||
HelpReplaceByExpResources resource=HelpReplaceByExpResources.INSTANCE;
|
||||
this.style = resource.style();
|
||||
this.style.ensureInjected();
|
||||
|
||||
this.template = GWT.create(HelpReplaceByExpTemplate.class);
|
||||
|
@ -58,16 +59,15 @@ public class HelpReplaceColumnByExpression {
|
|||
|
||||
public void render(SafeHtmlBuilder sb) {
|
||||
sb.append(template.render(style));
|
||||
|
||||
XElement parent=XDOM.create(sb.toSafeHtml());
|
||||
XElement element = parent.selectNode("." + style.getDataStyle());
|
||||
Image image = new Image(HelpReplaceByExpResources.INSTANCE.data());
|
||||
Element img = image.getElement();
|
||||
element.appendChild(img);
|
||||
|
||||
}
|
||||
|
||||
protected void renderImg() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -38,7 +38,6 @@ public class HelpReplaceColumnByExpressionPanel extends FramedPanel {
|
|||
protected HelpReplaceColumnByExpressionDialog parent;
|
||||
|
||||
private TextButton btnClose;
|
||||
|
||||
|
||||
public HelpReplaceColumnByExpressionPanel(
|
||||
HelpReplaceColumnByExpressionDialog parent, EventBus eventBus) {
|
||||
|
@ -63,27 +62,35 @@ public class HelpReplaceColumnByExpressionPanel extends FramedPanel {
|
|||
VerticalLayoutContainer basicLayout = new VerticalLayoutContainer();
|
||||
basicLayout.setAdjustForScroll(true);
|
||||
basicLayout.setScrollMode(ScrollMode.AUTO);
|
||||
|
||||
|
||||
//
|
||||
SimpleContainer helpContent=new SimpleContainer();
|
||||
SimpleContainer helpContent = new SimpleContainer();
|
||||
helpContent.setWidth(HELP_CONTENT_WIDTH);
|
||||
helpContent.setHeight(HELP_CONTENT_HEIGHT);
|
||||
|
||||
VerticalLayoutContainer helpContentLayout=new VerticalLayoutContainer();
|
||||
|
||||
VerticalLayoutContainer helpContentLayout = new VerticalLayoutContainer();
|
||||
helpContent.add(helpContentLayout);
|
||||
SafeHtmlBuilder safeHelp=new SafeHtmlBuilder();
|
||||
HelpReplaceColumnByExpression helpR=new HelpReplaceColumnByExpression();
|
||||
helpR.render(safeHelp);
|
||||
HTML htmlHelp=new HTML();
|
||||
SafeHtmlBuilder safeHelp = new SafeHtmlBuilder();
|
||||
HelpReplaceColumnByExpression helpR;
|
||||
try {
|
||||
|
||||
helpR = new HelpReplaceColumnByExpression();
|
||||
helpR.render(safeHelp);
|
||||
} catch (Throwable e) {
|
||||
Log.error("Error in Help:" + e.getLocalizedMessage());
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
HTML htmlHelp = new HTML();
|
||||
htmlHelp.setHTML(safeHelp.toSafeHtml());
|
||||
helpContentLayout.add(htmlHelp);
|
||||
|
||||
|
||||
//
|
||||
HBoxLayoutContainer flowButton = new HBoxLayoutContainer();
|
||||
flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE);
|
||||
flowButton.setPack(BoxLayoutPack.CENTER);
|
||||
|
||||
|
||||
|
||||
btnClose = new TextButton("Close");
|
||||
btnClose.setIcon(ExpressionResources.INSTANCE.close());
|
||||
btnClose.setIconAlign(IconAlign.RIGHT);
|
||||
|
@ -98,16 +105,15 @@ public class HelpReplaceColumnByExpressionPanel extends FramedPanel {
|
|||
flowButton.add(btnClose, new BoxLayoutData(new Margins(2, 4, 2, 4)));
|
||||
|
||||
// Add to basic layout
|
||||
basicLayout.add(helpContent, new VerticalLayoutData(-1, -1, new Margins(
|
||||
1)));
|
||||
|
||||
basicLayout.add(helpContent, new VerticalLayoutData(-1, -1,
|
||||
new Margins(1)));
|
||||
|
||||
basicLayout.add(flowButton, new VerticalLayoutData(-1, 36, new Margins(
|
||||
5, 2, 5, 2)));
|
||||
add(basicLayout);
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected void close() {
|
||||
parent.close();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package org.gcube.portlets.user.td.expressionwidget.shared.exception;
|
||||
|
||||
|
||||
public class OperatorTypeMapException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -9066034060104406559L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public OperatorTypeMapException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param message
|
||||
*/
|
||||
public OperatorTypeMapException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
|
||||
public OperatorTypeMapException(String message,Throwable t) {
|
||||
super(message,t);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -86,6 +86,11 @@ public class OperatorTypeMap {
|
|||
case ANY:
|
||||
break;
|
||||
case BEGINS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextBeginsWith(placeHolder, new TD_Value(dataType,
|
||||
firstArg));
|
||||
readableExpression = "Begins(" + readablePlaceHolder + ", "
|
||||
|
@ -100,6 +105,11 @@ public class OperatorTypeMap {
|
|||
+ firstArg + ", " + secondArg + "))";
|
||||
break;
|
||||
case CONTAINS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
fArg = new TD_Value(dataType, firstArg);
|
||||
exp = new C_TextContains(placeHolder, fArg);
|
||||
readableExpression = "Contains(" + readablePlaceHolder + ", "
|
||||
|
@ -108,12 +118,22 @@ public class OperatorTypeMap {
|
|||
case DIVISION:
|
||||
break;
|
||||
case ENDS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextEndsWith(placeHolder, new TD_Value(dataType,
|
||||
firstArg));
|
||||
readableExpression = "TextEndsWith(" + readablePlaceHolder + ","
|
||||
+ firstArg + ")";
|
||||
break;
|
||||
case EQUALS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_Equals(placeHolder, new TD_Value(dataType, firstArg));
|
||||
readableExpression = "Equals(" + readablePlaceHolder + ","
|
||||
+ firstArg + ")";
|
||||
|
@ -157,6 +177,11 @@ public class OperatorTypeMap {
|
|||
case LIKE:
|
||||
break;
|
||||
case MATCH_REGEX:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextMatchSQLRegexp(placeHolder, new TD_Value(dataType,
|
||||
firstArg));
|
||||
readableExpression = "TextMatchSQLRegexp(" + readablePlaceHolder
|
||||
|
@ -169,6 +194,11 @@ public class OperatorTypeMap {
|
|||
case NOT:
|
||||
break;
|
||||
case NOT_BEGINS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextBeginsWith(placeHolder, new TD_Value(dataType,
|
||||
firstArg));
|
||||
exp = new C_Not(exp);
|
||||
|
@ -185,6 +215,11 @@ public class OperatorTypeMap {
|
|||
+ ", Range(" + firstArg + ", " + secondArg + ")))";
|
||||
break;
|
||||
case NOT_CONTAINS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
fArg = new TD_Value(dataType, firstArg);
|
||||
exp = new C_TextContains(placeHolder, fArg);
|
||||
exp = new C_Not(exp);
|
||||
|
@ -192,6 +227,11 @@ public class OperatorTypeMap {
|
|||
+ firstArg + "))";
|
||||
break;
|
||||
case NOT_ENDS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextEndsWith(placeHolder, new TD_Value(dataType,
|
||||
firstArg));
|
||||
exp = new C_Not(exp);
|
||||
|
@ -199,6 +239,11 @@ public class OperatorTypeMap {
|
|||
+ "," + firstArg + "))";
|
||||
break;
|
||||
case NOT_EQUALS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_NotEquals(placeHolder, new TD_Value(dataType, firstArg));
|
||||
readableExpression = "NotEquals(" + readablePlaceHolder + ","
|
||||
+ firstArg + ")";
|
||||
|
@ -219,6 +264,11 @@ public class OperatorTypeMap {
|
|||
case NOT_LIKE:
|
||||
break;
|
||||
case NOT_MATCH_REGEX:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextMatchSQLRegexp(placeHolder, new TD_Value(dataType,
|
||||
firstArg));
|
||||
exp = new C_Not(exp);
|
||||
|
@ -268,6 +318,11 @@ public class OperatorTypeMap {
|
|||
case ANY:
|
||||
break;
|
||||
case BEGINS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextBeginsWith(columnReference, new TD_Value(dataType,
|
||||
firstArg));
|
||||
readableExpression = "TextBeginsWith(" + readableColumnReference
|
||||
|
@ -282,6 +337,11 @@ public class OperatorTypeMap {
|
|||
+ ", Range(" + firstArg + ", " + secondArg + "))";
|
||||
break;
|
||||
case CONTAINS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
fArg = new TD_Value(dataType, firstArg);
|
||||
exp = new C_TextContains(columnReference, fArg);
|
||||
readableExpression = "Contains(" + columnReference + ", "
|
||||
|
@ -290,12 +350,22 @@ public class OperatorTypeMap {
|
|||
case DIVISION:
|
||||
break;
|
||||
case ENDS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextEndsWith(columnReference, new TD_Value(dataType,
|
||||
firstArg));
|
||||
readableExpression = "TextEndsWith(" + readableColumnReference
|
||||
+ ", " + firstArg + ")";
|
||||
break;
|
||||
case EQUALS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_Equals(columnReference,
|
||||
new TD_Value(dataType, firstArg));
|
||||
readableExpression = "Equals(" + readableColumnReference + ", "
|
||||
|
@ -341,6 +411,11 @@ public class OperatorTypeMap {
|
|||
case LIKE:
|
||||
break;
|
||||
case MATCH_REGEX:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextMatchSQLRegexp(columnReference, new TD_Value(
|
||||
dataType, firstArg));
|
||||
readableExpression = "TextMatchSQLRegexp("
|
||||
|
@ -353,6 +428,11 @@ public class OperatorTypeMap {
|
|||
case NOT:
|
||||
break;
|
||||
case NOT_BEGINS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextBeginsWith(columnReference, new TD_Value(dataType,
|
||||
firstArg));
|
||||
exp = new C_Not(exp);
|
||||
|
@ -369,6 +449,11 @@ public class OperatorTypeMap {
|
|||
+ ", Range(" + firstArg + ", " + secondArg + ")))";
|
||||
break;
|
||||
case NOT_CONTAINS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
fArg = new TD_Value(dataType, firstArg);
|
||||
exp = new C_TextContains(columnReference, fArg);
|
||||
exp = new C_Not(exp);
|
||||
|
@ -376,6 +461,11 @@ public class OperatorTypeMap {
|
|||
+ firstArg + "))";
|
||||
break;
|
||||
case NOT_ENDS_WITH:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextEndsWith(columnReference, new TD_Value(dataType,
|
||||
firstArg));
|
||||
exp = new C_Not(exp);
|
||||
|
@ -383,6 +473,11 @@ public class OperatorTypeMap {
|
|||
+ "," + firstArg + "))";
|
||||
break;
|
||||
case NOT_EQUALS:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_NotEquals(columnReference, new TD_Value(dataType,
|
||||
firstArg));
|
||||
readableExpression = "NotEquals(" + readableColumnReference + ","
|
||||
|
@ -405,6 +500,11 @@ public class OperatorTypeMap {
|
|||
case NOT_LIKE:
|
||||
break;
|
||||
case NOT_MATCH_REGEX:
|
||||
if(column.getDataTypeName().compareTo(ColumnDataType.Text.toString())==0){
|
||||
if(firstArg==null){
|
||||
firstArg="";
|
||||
}
|
||||
}
|
||||
exp = new C_TextMatchSQLRegexp(columnReference, new TD_Value(
|
||||
dataType, firstArg));
|
||||
exp = new C_Not(exp);
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
</div>
|
||||
<div class='HelpReplaceRegexClear'>
|
||||
<h3>Basic Example 1</h3>
|
||||
<p>
|
||||
<img class='HelpReplaceRegexImg' src='Data.png' width="200" height="155" alt="">
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src='Data.png' width="200" height="155" alt="">
|
||||
</p>
|
||||
<p class='HelpReplaceRegexClear'>
|
||||
<img class='HelpReplaceRegexImg' src="SimpleConcat.png" width="705" height="484" alt="">
|
||||
|
|
Loading…
Reference in New Issue