[289739, 323933] WCAG 2.0/JIS support (level AA)
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.visualization.engines.lowvision/META-INF/MANIFEST.MF
index f61defd..ccbc6b9 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/META-INF/MANIFEST.MF
@@ -9,7 +9,9 @@
org.eclipse.actf.core,
org.eclipse.actf.visualization,
org.eclipse.actf.visualization.eval,
- org.eclipse.actf.model.ui
+ org.eclipse.actf.model.ui,
+ org.eclipse.actf.model.dom.dombycom,
+ org.eclipse.actf.util.vocab
Export-Package: org.eclipse.actf.visualization.engines.lowvision,
org.eclipse.actf.visualization.engines.lowvision.image
Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties
index 7f8ab24..9de3f9b 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties
@@ -27,6 +27,7 @@
ProhibitedForegroundColorProblem_The_foreground_color_is_not_allowed_by_the_design_guideline__1=The foreground color is not allowed by the design guideline.
ProhibitedBackgroundColorProblem_The_background_color_is_not_allowed_by_the_design_guideline__1=The background color is not allowed by the design guideline.
ContrastRatio = Contrast Ratio
+TargetString = Corresponding Texts
#
# lowvision.ScoreUtil
#
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties
index 869b482..e90b376 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties
@@ -27,6 +27,7 @@
ProhibitedForegroundColorProblem_The_foreground_color_is_not_allowed_by_the_design_guideline__1 = \u6587\u5b57\u8272\u306b\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3067\u8a31\u3055\u308c\u3066\u3044\u306a\u3044\u8272\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059
ProhibitedBackgroundColorProblem_The_background_color_is_not_allowed_by_the_design_guideline__1 = \u80cc\u666f\u8272\u306b\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3067\u8a31\u3055\u308c\u3066\u3044\u306a\u3044\u8272\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059
ContrastRatio = \u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u6bd4
+TargetString = \u5bfe\u8c61\u6587\u5b57\u5217
#
# lowvision.ScoreUtil
#
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
index d472036..beac243 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
@@ -35,10 +35,14 @@
tmp.setSubType(target[i].getLowVisionProblemType());
try {
switch (tmp.getSubType()) {
- case ILowvisionProblemSubtype.LOWVISION_BACKGROUND_IMAGE_WARNING:
+ case ILowvisionProblemSubtype.LOWVISION_BACKGROUND_IMAGE_WARNING:
+ ColorProblem cp = (ColorProblem)target[i].getRepresentative();
+ tmp.setTargetNode(cp.getElement());
+ tmp.setDescription(tmp.getDescription()+cp.getAdditionalDescription());
break;
case ILowvisionProblemSubtype.LOWVISION_COLOR_PROBLEM:
tmp.setDescription(target[i].getRepresentative().getDescription());
+ tmp.setTargetNode(target[i].getRepresentative().getElement());
break;
default:
tmp.setDescription(target[i].getDescription());
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java
index b76eb0f..bb1bffb 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java
@@ -41,6 +41,7 @@
public static String PageEvaluation_Poor;
public static String ImageDumpUtil_TrueColor;
public static String ContrastRatio;
+ public static String TargetString;
static {
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
index 5f61755..9d2f9b8 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
@@ -128,8 +128,9 @@
return;
}
- String fgStr = style.getColor();
- String bgStr = style.getBackgroundColor();
+ String fgStr = style.getComputedColor();
+ String bgStr = style.getComputedBackgroundColor();
+
try {
foregroundColor = (new ColorCSS(fgStr)).toInt();
backgroundColor = (new ColorCSS(bgStr)).toInt();
@@ -274,35 +275,38 @@
if (!isTextTag()) {
return (null);
}
-
- ColorIRGB fgOrg = new ColorIRGB(foregroundColor);
- ColorIRGB bgOrg = new ColorIRGB(backgroundColor);
-
- W3CColorChecker w3c = new W3CColorChecker(fgOrg, bgOrg);
- double contrast = w3c.calcContrast();
try {
- if (contrast > 4.5) {
- if (style.getBackgroundImage() != null
- && !style.getBackgroundImage().equalsIgnoreCase("none")) {
- ColorProblem result = new ColorProblem(this, _lvType, 0);
- result.setHasBackgroundImage(true);
- return (result);
- }
+ if (style.hasDescendantTextWithBGImage()) {
+ ColorProblem result = new ColorProblem(this, _lvType, 0);
+ result.setElement(style.getElement());
+ result.setHasBackgroundImage(true);
+ result.setTargetStrings(style.getDescendantTextsWithBGImage());
+ return (result);
+ }
+
+ if (!style.hasChildText()
+ || (style.getComputedBackgroundImage() != null && !style
+ .getComputedBackgroundImage().equalsIgnoreCase(
+ "none"))) {
return (null);
- } else {
+ }
+
+ ColorIRGB fgOrg = new ColorIRGB(foregroundColor);
+ ColorIRGB bgOrg = new ColorIRGB(backgroundColor);
+
+ W3CColorChecker w3c = new W3CColorChecker(fgOrg, bgOrg);
+ double contrast = w3c.calcContrast();
+ if (contrast < 7) {
ColorProblem result = new ColorProblem(this, _lvType,
w3c.calcSeverity());
- if (style.getBackgroundImage() != null
- && !style.getBackgroundImage().equalsIgnoreCase("none")){
- result.setHasBackgroundImage(true);
- }else{
- result.setContrast(contrast);
- }
+ result.setElement(style.getElement());
+ result.setContrast(contrast);
+ result.setTargetStrings(style.getChildTexts());
return (result);
}
} catch (LowVisionProblemException e) {
- return (null);
}
+ return (null);
/*
* if (!(_lvType.doChangeColors())) { //TODO ColorIRGB fgSim = null;
@@ -368,7 +372,7 @@
String fontStr = style.getFontSize().toLowerCase();
- //System.out.println(fontStr);
+ // System.out.println(fontStr);
// directly under the <BODY>
if (fontStr.indexOf(DELIM) == -1) {
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java
index 128df73..af70f60 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java
@@ -157,8 +157,11 @@
double sevL = 0.0;
if(contrast>7){
return sevL;
+ }else if(contrast<3){
+ return 1.0;
+ }else{
+ return(1.0-(contrast-3)/(7.0-3));
}
- return(1.0-(contrast-1)/(7.0-1));
}
@Override
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java
index 79922c9..ce3d4e9 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java
@@ -27,6 +27,7 @@
private int backgroundColor = -1;
private boolean hasBackgroundImage = false;
private double contrast = 0;
+ private String[] targetStrings;
public ColorProblem( PageComponent _pc, LowVisionType _lvType, double _proba ) throws LowVisionProblemException{
super( LOWVISION_COLOR_PROBLEM, _lvType, Messages.ColorProblem_Foreground_and_background_colors_are_too_close__1, _pc, _proba );
@@ -66,13 +67,26 @@
}
public String getDescription() throws LowVisionProblemException{
- if(contrast>=1&&contrast<=21){
- BigDecimal bd = new BigDecimal(contrast);
- return(super.getDescription()+"("+Messages.ContrastRatio+"="+bd.setScale(2,BigDecimal.ROUND_HALF_UP)+")");
- }
- return( super.getDescription() );
+ return(super.getDescription()+getAdditionalDescription());
}
+ public String getAdditionalDescription(){
+ StringBuffer tmpSB = new StringBuffer();
+ if(contrast>=1&&contrast<=21){
+ BigDecimal bd = new BigDecimal(contrast);
+ tmpSB.append("("+Messages.ContrastRatio+" = "+bd.setScale(2,BigDecimal.ROUND_HALF_UP)+") ");
+ }
+ if(targetStrings!=null && targetStrings.length>0){
+ tmpSB.append("("+Messages.TargetString+" = ");
+ for(String tmpS : targetStrings){
+ tmpSB.append(tmpS+", ");
+ }
+ tmpSB.delete(tmpSB.length()-2, tmpSB.length());
+ tmpSB.append(")");
+ }
+ return(tmpSB.toString());
+ }
+
public int getForegroundColor(){
return( foregroundColor );
}
@@ -101,4 +115,12 @@
public void setContrast(double contrast) {
this.contrast = contrast;
}
+
+ public String[] getTargetStrings() {
+ return targetStrings;
+ }
+
+ public void setTargetStrings(String[] targetStrings) {
+ this.targetStrings = targetStrings;
+ }
}
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/LowVisionProblem.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/LowVisionProblem.java
index ad3e485..62c73d0 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/LowVisionProblem.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/LowVisionProblem.java
@@ -21,6 +21,7 @@
import org.eclipse.actf.visualization.internal.engines.lowvision.image.ConnectedComponent;
import org.eclipse.actf.visualization.internal.engines.lowvision.image.Int2D;
import org.eclipse.actf.visualization.internal.engines.lowvision.image.PageComponent;
+import org.w3c.dom.Element;
public abstract class LowVisionProblem implements ILowvisionProblemSubtype{
@@ -49,6 +50,8 @@
LowVisionRecommendation[] recommendations = null;
boolean isGroupFlag = false; // is LowVisionProblemGroup?
+ Element element;
+
protected LowVisionProblem(){
}
@@ -261,4 +264,12 @@
_problems[k].drawSurroundingBox( _img );
}
}
+
+ public Element getElement() {
+ return element;
+ }
+
+ public void setElement(Element element) {
+ this.element = element;
+ }
}
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF
index bd054e1..1d0069e 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.visualization.lowvision/META-INF/MANIFEST.MF
@@ -13,6 +13,8 @@
org.eclipse.actf.visualization.eval,
org.eclipse.actf.visualization.ui.report,
org.eclipse.actf.model.dom.html,
- org.eclipse.actf.ui
+ org.eclipse.actf.ui,
+ org.eclipse.actf.model.dom.dombycom,
+ org.eclipse.actf.util.vocab
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
index 84598c6..b16515f 100644
--- a/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
+++ b/plugins/org.eclipse.actf.visualization.lowvision/src/org/eclipse/actf/visualization/lowvision/ui/internal/PartControlLowVision.java
@@ -21,6 +21,8 @@
import java.util.Vector;
import org.eclipse.actf.mediator.Mediator;
+import org.eclipse.actf.model.dom.dombycom.IElementEx;
+import org.eclipse.actf.model.dom.dombycom.IStyle;
import org.eclipse.actf.model.ui.IModelService;
import org.eclipse.actf.model.ui.IModelServiceHolder;
import org.eclipse.actf.model.ui.IModelServiceScrollManager;
@@ -55,6 +57,7 @@
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.ISelectionListener;
@@ -62,6 +65,8 @@
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
public class PartControlLowVision implements ISelectionListener,
IVisualizationConst {
@@ -104,9 +109,9 @@
private File reportImageFile;
private File visResultFile;
-
+
private File dumpImgFile;
-
+
private File sourceHtmlFile;
private String dumpImageFile;
@@ -142,13 +147,12 @@
_shell.getDisplay().syncExec(new Runnable() {
public void run() {
- checker
- .setStatusMessage(Messages.LowVisionView_begin_to_check_problems__4);
+ checker.setStatusMessage(Messages.LowVisionView_begin_to_check_problems__4);
}
});
- lowvisionProblemList = targetPage.check(paramLowVision
- .getLowVisionType(), address, frameId);
+ lowvisionProblemList = targetPage.check(
+ paramLowVision.getLowVisionType(), address, frameId);
// TODO frames
try {
@@ -162,8 +166,8 @@
PREFIX_REPORT, SUFFIX_BMP);
targetPage
.generateReport(reportFile.getParent(),
- reportFile.getName(), reportImageFile
- .getName(),
+ reportFile.getName(),
+ reportImageFile.getName(),
lowvisionProblemList);
} else {// current lv mode doesn't support ODF
reportImageFile = null;
@@ -240,8 +244,7 @@
.getAbsolutePath());
mediator.setReport(checker, checkResult);
- checker
- .setStatusMessage(Messages.LowVisionView_simulation_of_current_page_is_over__8);
+ checker.setStatusMessage(Messages.LowVisionView_simulation_of_current_page_is_over__8);
_shell.setCursor(null);
_isInSimulate = false;
@@ -269,8 +272,8 @@
try {
removeTempFile(dumpImgFile);
- dumpImgFile = LowVisionVizPlugin.createTempFile(
- PREFIX_SCREENSHOT, SUFFIX_BMP);
+ dumpImgFile = LowVisionVizPlugin.createTempFile(PREFIX_SCREENSHOT,
+ SUFFIX_BMP);
dumpImageFile = dumpImgFile.getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
@@ -281,8 +284,9 @@
public void saveReport() {
IModelService modelService = ModelServiceUtils.getActiveModelService();
if (is1stSimulateDone && !isBInSimulate() && modelService != null) {
- this._saveReportLowVision.doSave(modelService.getURL(), checkResult
- .getProblemList(), visResultFile, reportImageFile);
+ this._saveReportLowVision.doSave(modelService.getURL(),
+ checkResult.getProblemList(), visResultFile,
+ reportImageFile);
}
}
@@ -313,7 +317,18 @@
private HashMap<String, WaitExecSyncEventListener> eventhandlerHolder = new HashMap<String, WaitExecSyncEventListener>();
private static final String LISTENER_KEY = "browser"; //$NON-NLS-1$
- public void doSimulate() {
+ public void doSimulate(){
+ clearHighlight();
+ Display.getCurrent().timerExec(50, new Runnable() {
+
+ public void run() {
+ doSimulateInternal();
+ }
+ });
+ }
+
+ private void doSimulateInternal() {
+
is1stSimulateDone = true;
// TODO button: enable,disable
if (isBInSimulate()) {
@@ -425,8 +440,7 @@
private void prepareInt2Ds(IModelService modelService, int frameId,
int lastFrame) {
try {
- checker
- .setStatusMessage(Messages.LowVisionView_dump_the_image_in_the_web_browser__26);
+ checker.setStatusMessage(Messages.LowVisionView_dump_the_image_in_the_web_browser__26);
ModelServiceImageCreator imgCreator = new ModelServiceImageCreator(
modelService);
@@ -448,8 +462,7 @@
}
if (framePageImage[frameId] != null) {
- checker
- .setStatusMessage(Messages.LowVisionView_get_information_of_all_images__25);
+ checker.setStatusMessage(Messages.LowVisionView_get_information_of_all_images__25);
if (browser != null) {
imageInfoInHtmlArray[frameId] = browser
.getAllImagePosition();
@@ -471,8 +484,7 @@
framePageImage[frameId].getHeight()));
}
- checker
- .setStatusMessage(Messages.LowVisionView_begin_to_make_PageImage__2);
+ checker.setStatusMessage(Messages.LowVisionView_begin_to_make_PageImage__2);
ExtractCheckThread checkThread = new ExtractCheckThread(
frameId, frameUrl[frameId]);
@@ -517,16 +529,15 @@
pageImageWhole = framePageImage[0];
}
- checker
- .setStatusMessage(Messages.LowVisionView_prepare_Simulation_Image__29);
+ checker.setStatusMessage(Messages.LowVisionView_prepare_Simulation_Image__29);
try {
removeTempFile(visResultFile);
visResultFile = LowVisionVizPlugin.createTempFile(
PREFIX_VISUALIZATION, SUFFIX_BMP);
ImageData[] imageDataArray = SimulateLowVision.doSimulate(
- pageImageWhole, paramLowVision, visResultFile
- .getAbsolutePath());
+ pageImageWhole, paramLowVision,
+ visResultFile.getAbsolutePath());
if (imageDataArray.length > 0) {
lowVisionView.displayImage(imageDataArray[0],
targetModelService, checker.isWholepage());
@@ -577,8 +588,7 @@
// TODO null check?
if (frameUrl.length == 0) {
- checker
- .setStatusMessage(Messages.LowVisionView_begin_to_make_PageImage__2);
+ checker.setStatusMessage(Messages.LowVisionView_begin_to_make_PageImage__2);
// TODO check(original is getAddressText())
ExtractCheckThread checkThread = new ExtractCheckThread(0,
modelService.getURL());
@@ -623,8 +633,20 @@
this.dump_image_size = dump_image_size;
}
+ private ArrayList<IElementEx> highlightElements = new ArrayList<IElementEx>();
+
+ private void clearHighlight() {
+ for (IElementEx tmpE : highlightElements) {
+ if (tmpE != null) {
+ tmpE.unhighlight();
+ }
+ }
+ highlightElements.clear();
+ }
+
@SuppressWarnings("unchecked")
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ clearHighlight();
if (selection == null || !(selection instanceof IStructuredSelection)) {
DebugPrintUtil.devOrDebugPrintln(this.getClass().getName()
+ ": Iselection"); //$NON-NLS-1$
@@ -640,6 +662,12 @@
IPositionSize ips = (IPositionSize) item;
result.add(ips);
}
+
+ if (item.getTargetNode() instanceof IElementEx) {
+ IElementEx tmpE = (IElementEx) item.getTargetNode();
+ tmpE.highlight();
+ highlightElements.add(tmpE);
+ }
}
setHighlightPositions(result);
}
@@ -648,10 +676,10 @@
lowVisionView.setCurrentModelService(modelService);
}
- private void removeTempFile(File target){
- if(target!=null){
+ private void removeTempFile(File target) {
+ if (target != null) {
target.delete();
}
}
-
+
}