diff --git a/front/src/views/rule.html b/front/src/views/rule.html
index c62e14f..fcc6ae0 100644
--- a/front/src/views/rule.html
+++ b/front/src/views/rule.html
@@ -62,6 +62,19 @@
+
+ {{offender.writeFn}}
+
+ called from
+ {{offender.from.functionName}}()
+
+ line {{offender.from.line}}
+
+
+ called from (no backtrace available)
+
+
+
{{offender.error}}
diff --git a/lib/metadata/policies.js b/lib/metadata/policies.js
index 2406e45..5b284c1 100644
--- a/lib/metadata/policies.js
+++ b/lib/metadata/policies.js
@@ -242,7 +242,53 @@ var policies = {
"isOkThreshold": 0,
"isBadThreshold": 10,
"isAbnormalThreshold": 20,
- "hasOffenders": false
+ "hasOffenders": true,
+ "offendersTransformFn": function(offenders) {
+ return {
+ count: offenders.length,
+ list: offenders.map(function(offender) {
+ var parts = /^document.write(ln)?\(\) used from (.*)$/.exec(offender);
+
+ if (parts) {
+
+ var writeFn = 'document.write' + (parts[1] || '');
+
+ var methodParts = /^([^\s]+) \((.+):(\d+)\)$/.exec(parts[2]);
+ if (methodParts) {
+ return {
+ writeFn: writeFn,
+ from: {
+ functionName: methodParts[1],
+ file: methodParts[2],
+ line: methodParts[3]
+ }
+ };
+ } else {
+ var noMethodParts = /^(.+):(\d+)$/.exec(parts[2]);
+
+ if (noMethodParts) {
+ return {
+ writeFn: writeFn,
+ from: {
+ file: noMethodParts[1],
+ line: noMethodParts[2]
+ }
+ };
+ } else {
+ return {
+
+ }
+ }
+ }
+ }
+
+ debug('documentWriteCalls offenders transform function error with "%s"', offender);
+ return {
+ parseError: offender
+ };
+ })
+ };
+ }
},
"consoleMessages": {
"tool": "phantomas",