aboutsummaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorAlex Bozarth <ajbozart@us.ibm.com>2016-02-11 08:50:27 -0600
committerTom Graves <tgraves@yahoo-inc.com>2016-02-11 08:50:27 -0600
commit13c17cbb0530d52b9a08d5197017c96501d99e8c (patch)
tree4849bb848fa5fa2dffac429fc7622a8cac13b38f /core/src
parentf9ae99fee13681e436fde9899b6a189746348ba1 (diff)
downloadspark-13c17cbb0530d52b9a08d5197017c96501d99e8c.tar.gz
spark-13c17cbb0530d52b9a08d5197017c96501d99e8c.tar.bz2
spark-13c17cbb0530d52b9a08d5197017c96501d99e8c.zip
[SPARK-13124][WEB UI] Fixed CSS and JS issues caused by addition of JQuery DataTables
Made sure the old tables continue to use the old css and the new DataTables use the new css. Also fixed it so the Safari Web Inspector doesn't throw errors when on the new DataTables pages. Author: Alex Bozarth <ajbozart@us.ibm.com> Closes #11038 from ajbozarth/spark13124.
Diffstat (limited to 'core/src')
-rwxr-xr-xcore/src/main/resources/org/apache/spark/ui/static/jsonFormatter.min.js1
-rw-r--r--core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala2
-rw-r--r--core/src/main/scala/org/apache/spark/ui/UIUtils.scala31
3 files changed, 20 insertions, 14 deletions
diff --git a/core/src/main/resources/org/apache/spark/ui/static/jsonFormatter.min.js b/core/src/main/resources/org/apache/spark/ui/static/jsonFormatter.min.js
index f2ffcecd7f..aa86fa2a0c 100755
--- a/core/src/main/resources/org/apache/spark/ui/static/jsonFormatter.min.js
+++ b/core/src/main/resources/org/apache/spark/ui/static/jsonFormatter.min.js
@@ -1,2 +1 @@
(function($){$.fn.jsonFormatter=function(n){var _settings,u=new Date,r=new RegExp,i=function(n,t,i){for(var r="",u=0;u<n&&!i;u++)r+=_settings.tab;return t!=null&&t.length>0&&t.charAt(t.length-1)!="\n"&&(t=t+"\n"),r+t},f=function(n,t){for(var r,u,f="",i=0;i<n;i++)f+=_settings.tab;for(r=t.toString().split("\n"),u="",i=0;i<r.length;i++)u+=(i==0?"":f)+r[i]+"\n";return u},t=function(n,t,r,u,f,e){typeof n=="string"&&(n=n.split("<").join("&lt;").split(">").join("&gt;"));var o="<span class='"+e+"'>"+t+n+t+r+"<\/span>";return f&&(o=i(u,o)),o},_processObject=function(n,e,o,s,h){var c="",l=o?"<span class='jsonFormatter-coma'>,<\/span> ":"",v=typeof n,a="",y,p,k,w,b;if($.isArray(n))if(n.length==0)c+=i(e,"<span class='jsonFormatter-arrayBrace'>[ ]<\/span>"+l,h);else{for(a=_settings.collapsible?"<span class='jsonFormatter-expander jsonFormatter-expanded'><\/span><span class='jsonFormatter-collapsible'>":"",c+=i(e,"<span class='jsonFormatter-arrayBrace'>[<\/span>"+a,h),y=0;y<n.length;y++)c+=_processObject(n[y],e+1,y<n.length-1,!0,!1);a=_settings.collapsible?"<\/span>":"";c+=i(e,a+"<span class='jsonFormatter-arrayBrace'>]<\/span>"+l)}else if(v=="object")if(n==null)c+=t("null","",l,e,s,"jsonFormatter-null");else if(n.constructor==u.constructor)c+=t("new Date("+n.getTime()+") /*"+n.toLocaleString()+"*/","",l,e,s,"Date");else if(n.constructor==r.constructor)c+=t("new RegExp("+n+")","",l,e,s,"RegExp");else{p=0;for(w in n)p++;if(p==0)c+=i(e,"<span class='jsonFormatter-objectBrace'>{ }<\/span>"+l,h);else{a=_settings.collapsible?"<span class='jsonFormatter-expander jsonFormatter-expanded'><\/span><span class='jsonFormatter-collapsible'>":"";c+=i(e,"<span class='jsonFormatter-objectBrace'>{<\/span>"+a,h);k=0;for(w in n)b=_settings.quoteKeys?'"':"",c+=i(e+1,"<span class='jsonFormatter-propertyName'>"+b+w+b+"<\/span>: "+_processObject(n[w],e+1,++k<p,!1,!0));a=_settings.collapsible?"<\/span>":"";c+=i(e,a+"<span class='jsonFormatter-objectBrace'>}<\/span>"+l)}}else v=="number"?c+=t(n,"",l,e,s,"jsonFormatter-number"):v=="boolean"?c+=t(n,"",l,e,s,"jsonFormatter-boolean"):v=="function"?n.constructor==r.constructor?c+=t("new RegExp("+n+")","",l,e,s,"RegExp"):(n=f(e,n),c+=t(n,"",l,e,s,"jsonFormatter-function")):c+=v=="undefined"?t("undefined","",l,e,s,"jsonFormatter-null"):t(n.toString().split("\\").join("\\\\").split('"').join('\\"'),'"',l,e,s,"jsonFormatter-string");return c},e=function(element){var json=$(element).html(),obj,original;json.trim()==""&&(json='""');try{obj=eval("["+json+"]")}catch(exception){return}html=_processObject(obj[0],0,!1,!1,!1);original=$(element).wrapInner("<div class='jsonFormatter-original'><\/div>");_settings.hideOriginal===!0&&$(".jsonFormatter-original",original).hide();original.append("<PRE class='jsonFormatter-codeContainer'>"+html+"<\/PRE>")},o=function(){var n=$(this).next();n.length<1||($(this).hasClass("jsonFormatter-expanded")==!0?(n.hide(),$(this).removeClass("jsonFormatter-expanded").addClass("jsonFormatter-collapsed")):(n.show(),$(this).removeClass("jsonFormatter-collapsed").addClass("jsonFormatter-expanded")))};return _settings=$.extend({tab:" ",quoteKeys:!0,collapsible:!0,hideOriginal:!0},n),this.each(function(n,t){e(t);$(t).on("click",".jsonFormatter-expander",o)})}})(jQuery);
-//# sourceMappingURL=jsonFormatter.min.js.map
diff --git a/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala b/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala
index 513b81315b..cab7faefe8 100644
--- a/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala
+++ b/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala
@@ -69,7 +69,7 @@ private[history] class HistoryPage(parent: HistoryServer) extends WebUIPage("")
</a>
</div>
</div>
- UIUtils.basicSparkPage(content, "History Server")
+ UIUtils.basicSparkPage(content, "History Server", true)
}
private def makePageLink(showIncomplete: Boolean): String = {
diff --git a/core/src/main/scala/org/apache/spark/ui/UIUtils.scala b/core/src/main/scala/org/apache/spark/ui/UIUtils.scala
index 4ebee9093d..ddd7f713fe 100644
--- a/core/src/main/scala/org/apache/spark/ui/UIUtils.scala
+++ b/core/src/main/scala/org/apache/spark/ui/UIUtils.scala
@@ -157,22 +157,11 @@ private[spark] object UIUtils extends Logging {
def commonHeaderNodes: Seq[Node] = {
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href={prependBaseUri("/static/bootstrap.min.css")} type="text/css"/>
- <link rel="stylesheet"
- href={prependBaseUri("/static/jquery.dataTables.1.10.4.min.css")} type="text/css"/>
- <link rel="stylesheet"
- href={prependBaseUri("/static/dataTables.bootstrap.css")} type="text/css"/>
- <link rel="stylesheet" href={prependBaseUri("/static/jsonFormatter.min.css")} type="text/css"/>
<link rel="stylesheet" href={prependBaseUri("/static/vis.min.css")} type="text/css"/>
<link rel="stylesheet" href={prependBaseUri("/static/webui.css")} type="text/css"/>
<link rel="stylesheet" href={prependBaseUri("/static/timeline-view.css")} type="text/css"/>
<script src={prependBaseUri("/static/sorttable.js")} ></script>
<script src={prependBaseUri("/static/jquery-1.11.1.min.js")}></script>
- <script src={prependBaseUri("/static/jquery.dataTables.1.10.4.min.js")}></script>
- <script src={prependBaseUri("/static/jquery.cookies.2.2.0.min.js")}></script>
- <script src={prependBaseUri("/static/jquery.blockUI.min.js")}></script>
- <script src={prependBaseUri("/static/dataTables.bootstrap.min.js")}></script>
- <script src={prependBaseUri("/static/jsonFormatter.min.js")}></script>
- <script src={prependBaseUri("/static/jquery.mustache.js")}></script>
<script src={prependBaseUri("/static/vis.min.js")}></script>
<script src={prependBaseUri("/static/bootstrap-tooltip.js")}></script>
<script src={prependBaseUri("/static/initialize-tooltips.js")}></script>
@@ -189,6 +178,20 @@ private[spark] object UIUtils extends Logging {
<script src={prependBaseUri("/static/spark-dag-viz.js")}></script>
}
+ def dataTablesHeaderNodes: Seq[Node] = {
+ <link rel="stylesheet"
+ href={prependBaseUri("/static/jquery.dataTables.1.10.4.min.css")} type="text/css"/>
+ <link rel="stylesheet"
+ href={prependBaseUri("/static/dataTables.bootstrap.css")} type="text/css"/>
+ <link rel="stylesheet" href={prependBaseUri("/static/jsonFormatter.min.css")} type="text/css"/>
+ <script src={prependBaseUri("/static/jquery.dataTables.1.10.4.min.js")}></script>
+ <script src={prependBaseUri("/static/jquery.cookies.2.2.0.min.js")}></script>
+ <script src={prependBaseUri("/static/jquery.blockUI.min.js")}></script>
+ <script src={prependBaseUri("/static/dataTables.bootstrap.min.js")}></script>
+ <script src={prependBaseUri("/static/jsonFormatter.min.js")}></script>
+ <script src={prependBaseUri("/static/jquery.mustache.js")}></script>
+ }
+
/** Returns a spark page with correctly formatted headers */
def headerSparkPage(
title: String,
@@ -244,10 +247,14 @@ private[spark] object UIUtils extends Logging {
}
/** Returns a page with the spark css/js and a simple format. Used for scheduler UI. */
- def basicSparkPage(content: => Seq[Node], title: String): Seq[Node] = {
+ def basicSparkPage(
+ content: => Seq[Node],
+ title: String,
+ useDataTables: Boolean = false): Seq[Node] = {
<html>
<head>
{commonHeaderNodes}
+ {if (useDataTables) dataTablesHeaderNodes else Seq.empty}
<title>{title}</title>
</head>
<body>