mirror of
https://github.com/moparisthebest/mailcatcher
synced 2024-12-21 23:08:54 -05:00
Remove fractal analysis, it doesn't work at the moment anyway
This commit is contained in:
parent
65743c22fd
commit
184773b664
@ -4,7 +4,6 @@
|
|||||||
#= require favcount
|
#= require favcount
|
||||||
#= require flexie
|
#= require flexie
|
||||||
#= require keymaster
|
#= require keymaster
|
||||||
#= require xslt
|
|
||||||
|
|
||||||
# Add a new jQuery selector expression which does a case-insensitive :contains
|
# Add a new jQuery selector expression which does a case-insensitive :contains
|
||||||
jQuery.expr[":"].icontains = (a, i, m) ->
|
jQuery.expr[":"].icontains = (a, i, m) ->
|
||||||
@ -27,10 +26,6 @@ class MailCatcher
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@loadMessageBody @selectedMessage(), $($(e.currentTarget).parent("li")).data("message-format")
|
@loadMessageBody @selectedMessage(), $($(e.currentTarget).parent("li")).data("message-format")
|
||||||
|
|
||||||
$("#message .views .analysis.tab a").live "click", (e) =>
|
|
||||||
e.preventDefault()
|
|
||||||
@loadMessageAnalysis @selectedMessage()
|
|
||||||
|
|
||||||
$("#message iframe").load =>
|
$("#message iframe").load =>
|
||||||
@decorateMessageBody()
|
@decorateMessageBody()
|
||||||
|
|
||||||
@ -254,10 +249,7 @@ class MailCatcher
|
|||||||
|
|
||||||
$("#message .views .download a").attr("href", "/messages/#{id}.eml")
|
$("#message .views .download a").attr("href", "/messages/#{id}.eml")
|
||||||
|
|
||||||
if $("#message .views .tab.analysis.selected").length
|
@loadMessageBody()
|
||||||
@loadMessageAnalysis()
|
|
||||||
else
|
|
||||||
@loadMessageBody()
|
|
||||||
|
|
||||||
# XXX: These should probably cache their iframes for the current message now we're using a remote service:
|
# XXX: These should probably cache their iframes for the current message now we're using a remote service:
|
||||||
|
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
|
||||||
<xsl:template match="/xml">
|
|
||||||
<section class="fractal-analysis">
|
|
||||||
<h1>Fractal Results</h1>
|
|
||||||
<xsl:choose>
|
|
||||||
<xsl:when test="not(result/errors/node())">
|
|
||||||
<p class="report-intro valid">Your HTML and CSS for your email is valid.</p>
|
|
||||||
</xsl:when>
|
|
||||||
<xsl:otherwise>
|
|
||||||
<p class="report-intro invalid">Your HTML and CSS for your email contains potential errors:</p>
|
|
||||||
<ol>
|
|
||||||
<xsl:for-each select="result/errors/error">
|
|
||||||
<li>
|
|
||||||
<p class="error-intro">The <code><xsl:value-of select="rule/rule_name" /></code> near <code><xsl:value-of select="snippet" /></code> on line <code><xsl:value-of select="error_line" /></code> of your code.</p>
|
|
||||||
<dl class="unsupported-clients">
|
|
||||||
<dt>This is unsupported in:</dt>
|
|
||||||
<dd>
|
|
||||||
<ul>
|
|
||||||
<xsl:for-each select="rule/email_client//item">
|
|
||||||
<li><xsl:value-of select="." /></li>
|
|
||||||
</xsl:for-each>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</li>
|
|
||||||
</xsl:for-each>
|
|
||||||
</ol>
|
|
||||||
</xsl:otherwise>
|
|
||||||
</xsl:choose>
|
|
||||||
</section>
|
|
||||||
</xsl:template>
|
|
||||||
</xsl:stylesheet>
|
|
122
vendor/assets/javascripts/jquery.xslt.js
vendored
122
vendor/assets/javascripts/jquery.xslt.js
vendored
@ -1,122 +0,0 @@
|
|||||||
/*
|
|
||||||
* jquery.xslt.js
|
|
||||||
*
|
|
||||||
* Copyright (c) 2005-2008 Johann Burkard (<mailto:jb@eaio.com>)
|
|
||||||
* <http://eaio.com>
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
||||||
* NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
||||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
||||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery client-side XSLT plugins.
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:jb@eaio.com">Johann Burkard</a>
|
|
||||||
* @version $Id: jquery.xslt.js,v 1.10 2008/08/29 21:34:24 Johann Exp $
|
|
||||||
*/
|
|
||||||
(function($) {
|
|
||||||
$.fn.xslt = function() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
var str = /^\s*</;
|
|
||||||
if (document.recalc) { // IE 5+
|
|
||||||
$.fn.xslt = function(xml, xslt) {
|
|
||||||
var target = $(this);
|
|
||||||
|
|
||||||
var change = function() {
|
|
||||||
var c = 'complete';
|
|
||||||
if (xm.readyState == c && xs.readyState == c) {
|
|
||||||
window.setTimeout(function() {
|
|
||||||
target.html(xm.transformNode(xs.XMLDocument));
|
|
||||||
}, 50);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var xm = document.createElement('xml');
|
|
||||||
xm.onreadystatechange = change;
|
|
||||||
xm[str.test(xml) ? "innerHTML" : "src"] = xml;
|
|
||||||
|
|
||||||
var xs = document.createElement('xml');
|
|
||||||
xs.onreadystatechange = change;
|
|
||||||
xs[str.test(xslt) ? "innerHTML" : "src"] = xslt;
|
|
||||||
|
|
||||||
$('body').append(xm).append(xs);
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else if (window.DOMParser != undefined && window.XMLHttpRequest != undefined && window.XSLTProcessor != undefined) { // Mozilla 0.9.4+, Opera 9+
|
|
||||||
var processor = new XSLTProcessor();
|
|
||||||
var support = false;
|
|
||||||
if ($.isFunction(processor.transformDocument)) {
|
|
||||||
support = window.XMLSerializer != undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
support = true;
|
|
||||||
}
|
|
||||||
if (support) {
|
|
||||||
$.fn.xslt = function(xml, xslt) {
|
|
||||||
var target = $(this);
|
|
||||||
var transformed = false;
|
|
||||||
|
|
||||||
var xm = {
|
|
||||||
readyState: 4
|
|
||||||
};
|
|
||||||
var xs = {
|
|
||||||
readyState: 4
|
|
||||||
};
|
|
||||||
|
|
||||||
var change = function() {
|
|
||||||
if (xm.readyState == 4 && xs.readyState == 4 && !transformed) {
|
|
||||||
var processor = new XSLTProcessor();
|
|
||||||
if ($.isFunction(processor.transformDocument)) {
|
|
||||||
// obsolete Mozilla interface
|
|
||||||
resultDoc = document.implementation.createDocument("", "", null);
|
|
||||||
processor.transformDocument(xm.responseXML, xs.responseXML, resultDoc, null);
|
|
||||||
target.html(new XMLSerializer().serializeToString(resultDoc));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
processor.importStylesheet(xs.responseXML);
|
|
||||||
resultDoc = processor.transformToFragment(xm.responseXML, document);
|
|
||||||
target.empty().append(resultDoc);
|
|
||||||
}
|
|
||||||
transformed = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (str.test(xml)) {
|
|
||||||
xm.responseXML = new DOMParser().parseFromString(xml, "text/xml");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
xm = $.ajax({ dataType: "xml", url: xml});
|
|
||||||
xm.onreadystatechange = change;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str.test(xslt)) {
|
|
||||||
xs.responseXML = new DOMParser().parseFromString(xslt, "text/xml");
|
|
||||||
change();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
xs = $.ajax({ dataType: "xml", url: xslt});
|
|
||||||
xs.onreadystatechange = change;
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})(jQuery);
|
|
263
vendor/assets/javascripts/xslt.js
vendored
263
vendor/assets/javascripts/xslt.js
vendored
@ -1,263 +0,0 @@
|
|||||||
/*
|
|
||||||
* xslt.js
|
|
||||||
*
|
|
||||||
* Copyright (c) 2005-2008 Johann Burkard (<mailto:jb@eaio.com>)
|
|
||||||
* <http://eaio.com>
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
||||||
* NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
||||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
||||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for client-side XSLT transformations.
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:jb@eaio.com">Johann Burkard</a>
|
|
||||||
* @version $Id: xslt.js,v 1.7 2008/08/29 21:22:55 Johann Exp $
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function Transformation() {
|
|
||||||
|
|
||||||
var xml;
|
|
||||||
|
|
||||||
var xmlDoc;
|
|
||||||
|
|
||||||
var xslt;
|
|
||||||
|
|
||||||
var xsltDoc;
|
|
||||||
|
|
||||||
var callback = function() {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sort of like a fix for Opera who doesn't always get readyStates right.
|
|
||||||
*/
|
|
||||||
var transformed = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the URL of the XML document.
|
|
||||||
*
|
|
||||||
* @return the URL of the XML document
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
this.getXml = function() {
|
|
||||||
return xml;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the XML document.
|
|
||||||
*
|
|
||||||
* @return the XML document
|
|
||||||
*/
|
|
||||||
this.getXmlDocument = function() {
|
|
||||||
return xmlDoc
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the URL of the XML document.
|
|
||||||
*
|
|
||||||
* @param x the URL of the XML document
|
|
||||||
* @return this
|
|
||||||
* @type Transformation
|
|
||||||
*/
|
|
||||||
this.setXml = function(x) {
|
|
||||||
xml = x;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the URL of the XSLT document.
|
|
||||||
*
|
|
||||||
* @return the URL of the XSLT document
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
this.getXslt = function() {
|
|
||||||
return xslt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the XSLT document.
|
|
||||||
*
|
|
||||||
* @return the XSLT document
|
|
||||||
*/
|
|
||||||
this.getXsltDocument = function() {
|
|
||||||
return xsltDoc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the URL of the XSLT document.
|
|
||||||
*
|
|
||||||
* @param x the URL of the XML document
|
|
||||||
* @return this
|
|
||||||
* @type Transformation
|
|
||||||
*/
|
|
||||||
this.setXslt = function(x) {
|
|
||||||
xslt = x;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the callback function.
|
|
||||||
*
|
|
||||||
* @return the callback function
|
|
||||||
*/
|
|
||||||
this.getCallback = function() {
|
|
||||||
return callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the callback function
|
|
||||||
*
|
|
||||||
* @param c the callback function
|
|
||||||
* @return this
|
|
||||||
* @type Transformation
|
|
||||||
*/
|
|
||||||
this.setCallback = function(c) {
|
|
||||||
callback = c;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the target element to write the transformed content to and <em>asynchronously</em>
|
|
||||||
* starts the transformation process.
|
|
||||||
* <p>
|
|
||||||
* <code>target</code> is the ID of an element. 2DO
|
|
||||||
* <p>
|
|
||||||
* This method may only be called after {@link #setXml} and {@link #setXslt} have
|
|
||||||
* been called.
|
|
||||||
* <p>
|
|
||||||
* Note that the target element must exist once this method is called. Calling
|
|
||||||
* this method before <code>onload</code> was fired will most likely
|
|
||||||
* not work.
|
|
||||||
*
|
|
||||||
* @param target the ID of an element
|
|
||||||
*/
|
|
||||||
this.transform = function(target) {
|
|
||||||
if (!browserSupportsXSLT()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var str = /^\s*</;
|
|
||||||
var t = this;
|
|
||||||
if (document.recalc) {
|
|
||||||
var change = function() {
|
|
||||||
var c = 'complete';
|
|
||||||
if (xm.readyState == c && xs.readyState == c) {
|
|
||||||
window.setTimeout(function() {
|
|
||||||
xmlDoc = xm.XMLDocument;
|
|
||||||
xsltDoc = xs.XMLDocument;
|
|
||||||
callback(t);
|
|
||||||
document.all[target].innerHTML = xm.transformNode(xs.XMLDocument);
|
|
||||||
}, 50);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var xm = document.createElement('xml');
|
|
||||||
xm.onreadystatechange = change;
|
|
||||||
xm[str.test(xml) ? "innerHTML" : "src"] = xml;
|
|
||||||
|
|
||||||
var xs = document.createElement('xml');
|
|
||||||
xs.onreadystatechange = change;
|
|
||||||
xs[str.test(xslt) ? "innerHTML" : "src"] = xslt;
|
|
||||||
|
|
||||||
with (document.body) {
|
|
||||||
insertBefore(xm);
|
|
||||||
insertBefore(xs);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var transformed = false;
|
|
||||||
|
|
||||||
var xm = {
|
|
||||||
readyState: 4
|
|
||||||
};
|
|
||||||
var xs = {
|
|
||||||
readyState: 4
|
|
||||||
};
|
|
||||||
var change = function() {
|
|
||||||
if (xm.readyState == 4 && xs.readyState == 4 && !transformed) {
|
|
||||||
xmlDoc = xm.responseXML;
|
|
||||||
xsltDoc = xs.responseXML;
|
|
||||||
var resultDoc;
|
|
||||||
var processor = new XSLTProcessor();
|
|
||||||
|
|
||||||
if (typeof processor.transformDocument == 'function') {
|
|
||||||
// obsolete Mozilla interface
|
|
||||||
resultDoc = document.implementation.createDocument("", "", null);
|
|
||||||
processor.transformDocument(xm.responseXML, xs.responseXML, resultDoc, null);
|
|
||||||
var out = new XMLSerializer().serializeToString(resultDoc);
|
|
||||||
callback(t);
|
|
||||||
document.getElementById(target).innerHTML = out;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
processor.importStylesheet(xs.responseXML);
|
|
||||||
resultDoc = processor.transformToFragment(xm.responseXML, document);
|
|
||||||
callback(t);
|
|
||||||
document.getElementById(target).innerHTML = '';
|
|
||||||
document.getElementById(target).appendChild(resultDoc);
|
|
||||||
}
|
|
||||||
|
|
||||||
transformed = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (str.test(xml)) {
|
|
||||||
xm.responseXML = new DOMParser().parseFromString(xml, "text/xml");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
xm = new XMLHttpRequest();
|
|
||||||
xm.onreadystatechange = change;
|
|
||||||
xm.open("GET", xml);
|
|
||||||
xm.send(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str.test(xslt)) {
|
|
||||||
xs.responseXML = new DOMParser().parseFromString(xslt, "text/xml");
|
|
||||||
change();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
xs = new XMLHttpRequest();
|
|
||||||
xs.onreadystatechange = change;
|
|
||||||
xs.open("GET", xslt);
|
|
||||||
xs.send(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns whether the browser supports XSLT.
|
|
||||||
*
|
|
||||||
* @return the browser supports XSLT
|
|
||||||
* @type boolean
|
|
||||||
*/
|
|
||||||
function browserSupportsXSLT() {
|
|
||||||
var support = false;
|
|
||||||
if (document.recalc) { // IE 5+
|
|
||||||
support = true;
|
|
||||||
}
|
|
||||||
else if (window.XMLHttpRequest != undefined && window.XSLTProcessor != undefined) { // Mozilla 0.9.4+, Opera 9+
|
|
||||||
var processor = new XSLTProcessor();
|
|
||||||
if (typeof processor.transformDocument == 'function') {
|
|
||||||
support = window.XMLSerializer != undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
support = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return support;
|
|
||||||
}
|
|
@ -50,8 +50,6 @@
|
|||||||
%a{:href => "#"} Plain Text
|
%a{:href => "#"} Plain Text
|
||||||
%li.format.tab.source{"data-message-format" => "source"}
|
%li.format.tab.source{"data-message-format" => "source"}
|
||||||
%a{:href => "#"} Source
|
%a{:href => "#"} Source
|
||||||
%li.tab.analysis
|
|
||||||
%a{:href => "#"} Analysis
|
|
||||||
%li.action.download
|
%li.action.download
|
||||||
%a.button{:href => "#"}
|
%a.button{:href => "#"}
|
||||||
%span Download
|
%span Download
|
||||||
|
Loading…
Reference in New Issue
Block a user