From 312d0f3f01c1038e8a38bc42b99dbda33719b27a Mon Sep 17 00:00:00 2001
From: "Mark M. Florida" <markflorida@wustl.edu>
Date: Mon, 25 Apr 2016 20:33:07 -0500
Subject: [PATCH] Adding changes from last commit on custom-page branch - I
 want to get ONLY these changes into the master branch - there's probably a
 better way to do this...

---
 .../webapp/scripts/xnat/app/customPage.js     |  15 +-
 .../webapp/xnat-templates/layouts/Basic.vm    |   9 ++
 .../webapp/xnat-templates/layouts/Content.vm  |  11 ++
 .../xnat-templates/navigations/AppJS.vm       |  26 ++++
 .../xnat-templates/navigations/BaseJS.vm      |  50 +++++++
 .../navigations/HeaderIncludes.vm             | 136 ++++++------------
 .../xnat-templates/navigations/htmlOpen.vm    |  10 +-
 .../webapp/xnat-templates/screens/Basic.vm    |  32 +++++
 .../webapp/xnat-templates/screens/Blank.vm    |   4 +
 9 files changed, 186 insertions(+), 107 deletions(-)
 create mode 100644 src/main/webapp/xnat-templates/layouts/Basic.vm
 create mode 100644 src/main/webapp/xnat-templates/layouts/Content.vm
 create mode 100644 src/main/webapp/xnat-templates/navigations/AppJS.vm
 create mode 100644 src/main/webapp/xnat-templates/navigations/BaseJS.vm
 create mode 100644 src/main/webapp/xnat-templates/screens/Basic.vm
 create mode 100644 src/main/webapp/xnat-templates/screens/Blank.vm

diff --git a/src/main/webapp/scripts/xnat/app/customPage.js b/src/main/webapp/scripts/xnat/app/customPage.js
index 3dd20bd8..b2290809 100644
--- a/src/main/webapp/scripts/xnat/app/customPage.js
+++ b/src/main/webapp/scripts/xnat/app/customPage.js
@@ -2,7 +2,11 @@
  * Retrieve custom pages via AJAX
  * Used in: /xnat-templates/screens/Page.vm
  */
-(function(NS, factory){
+
+var XNAT = getObject(XNAT);
+XNAT.app = getObject(XNAT.app||{});
+
+(function(factory){
     if (typeof define === 'function' && define.amd) {
         define(factory);
     }
@@ -10,14 +14,11 @@
         module.exports = factory();
     }
     else {
-        return factory(NS);
+        return factory();
     }
-}('app.customPage', function(NS, undefined){
-
-    // setExtendedObject() hasn't been tested yet
-    // var customPage = setExtendedObject(XNAT, NS);
+}(function(){
 
-    var customPage = getObject(eval('XNAT.'+NS)||{});
+    var customPage = getObject(XNAT.app.customPage||{});
 
     customPage.getName = function(){
         var name = getQueryStringValue('view');
diff --git a/src/main/webapp/xnat-templates/layouts/Basic.vm b/src/main/webapp/xnat-templates/layouts/Basic.vm
new file mode 100644
index 00000000..b0f4c7f5
--- /dev/null
+++ b/src/main/webapp/xnat-templates/layouts/Basic.vm
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+##Copyright 2005 Harvard University / Howard Hughes Medical Institute (HHMI) All Rights Reserved
+<!-- start xnat-templates/layouts/Basic.vm -->
+<!--[if lt IE 9]><html class="ie ie8 ltie9 ltie10"><![endif]-->
+<!--[if IE 9]><html class="ie ie9 ltie10"><![endif]-->
+<!--[if gt IE 9]><!--> <html> <!--<![endif]-->
+    $screen_placeholder
+<!-- end xnat-templates/layouts/Basic.vm -->
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/xnat-templates/layouts/Content.vm b/src/main/webapp/xnat-templates/layouts/Content.vm
new file mode 100644
index 00000000..d4a7e632
--- /dev/null
+++ b/src/main/webapp/xnat-templates/layouts/Content.vm
@@ -0,0 +1,11 @@
+<!-- start xnat-templates/layouts/Content.vm -->
+
+## probably don't want to load these since
+## they may already be loaded elsewhere
+##
+## #parse("/navigations/BaseJS.vm")
+## #parse("/navigations/AppJS.vm")
+
+$screen_placeholder
+
+<!-- end xnat-templates/layouts/Content.vm -->
diff --git a/src/main/webapp/xnat-templates/navigations/AppJS.vm b/src/main/webapp/xnat-templates/navigations/AppJS.vm
new file mode 100644
index 00000000..21060b3c
--- /dev/null
+++ b/src/main/webapp/xnat-templates/navigations/AppJS.vm
@@ -0,0 +1,26 @@
+## Main JavaScript and CSS files for XNAT
+
+## only load once
+#if (!$appJS)
+
+    <!-- app.css loaded last -->
+    <link rel="stylesheet" type="text/css" href="$content.getURI('style/app.css?v=1.7.0a1')">
+
+    <link rel="stylesheet" type="text/css" href="$content.getURI('scripts/xmodal-v1/xmodal.css?v=1.7.0a1')">
+    <script src="$content.getURI('scripts/xmodal-v1/xmodal.js')"></script>
+    <script src="$content.getURI('scripts/xmodal-v1/xmodal-migrate.js')"></script>
+
+    <!-- XNAT JLAPI scripts -->
+    <script src="$content.getURI('scripts/xnat/url.js')"></script>
+    <script src="$content.getURI('scripts/xnat/xhr.js')"></script>
+    ##<script src="$content.getURI('scripts/xnat/widget.js')"></script>
+    <script src="$content.getURI('scripts/xnat/ui/popup.js')"></script>
+    <script src="$content.getURI('scripts/xnat/ui/dialog.js')"></script>
+
+    #set ($appJS = true)
+
+#else
+
+    <!-- AppJS is loaded -->
+
+#end
diff --git a/src/main/webapp/xnat-templates/navigations/BaseJS.vm b/src/main/webapp/xnat-templates/navigations/BaseJS.vm
new file mode 100644
index 00000000..8743a995
--- /dev/null
+++ b/src/main/webapp/xnat-templates/navigations/BaseJS.vm
@@ -0,0 +1,50 @@
+## Base JavaScript files
+
+## only load once
+#if (!$baseJS)
+
+    <!-- load polyfills before ANY other JavaScript -->
+    <script src="$content.getURI('scripts/polyfills.js')"></script>
+
+    <!-- set global vars that are used often -->
+    <script>
+
+        var XNAT = XNAT || {};
+        var serverRoot = "$content.getURI('')";
+        var csrfToken = "$!data.getSession().getAttribute("XNAT_CSRF")";
+        var showReason = typeof $showReason != 'undefined' ? $showReason : null;
+        var requireReason = typeof $requireReason != 'undefined' ? $showReason : null;
+
+    </script>
+    ## separate script tags so not everything breaks if showReason or requireReason blows up
+
+    <!-- XNAT global functions (no dependencies) -->
+    <script src="$content.getURI('scripts/globals.js')"></script>
+
+    <!-- required libraries -->
+    <script src="$content.getURI('scripts/lib/loadjs/loadjs.js')"></script>
+    <script src="$content.getURI('scripts/lib/jquery/jquery.min.js')"></script>
+    <script src="$content.getURI('scripts/lib/jquery/jquery-migrate-1.2.1.min.js')"></script>
+    <script>
+        // alias jQuery to jq
+        var jq = jQuery;
+    </script>
+
+    <!-- jQuery plugins -->
+    <link rel="stylesheet" type="text/css" href="$content.getURI('scripts/lib/jquery-plugins/chosen/chosen.min.css?v=1.7.0a1')">
+    <script src="$content.getURI('scripts/lib/jquery-plugins/chosen/chosen.jquery.min.js')"></script>
+    <script src="$content.getURI('scripts/lib/jquery-plugins/jquery.maskedinput.min.js')"></script>
+
+    <!-- other libraries -->
+    <script src="$content.getURI('scripts/lib/spawn/spawn.js')"></script>
+
+    <!-- XNAT utility functions -->
+    <script src="$content.getURI('scripts/utils.js')"></script>
+
+    #set ($baseJS = true)
+
+#else
+
+    <!-- BaseJS is loaded -->
+
+#end
diff --git a/src/main/webapp/xnat-templates/navigations/HeaderIncludes.vm b/src/main/webapp/xnat-templates/navigations/HeaderIncludes.vm
index 9368f855..6de32667 100755
--- a/src/main/webapp/xnat-templates/navigations/HeaderIncludes.vm
+++ b/src/main/webapp/xnat-templates/navigations/HeaderIncludes.vm
@@ -15,56 +15,12 @@
 <meta http-equiv="expires" content="-1">
 <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT">
 
-<!-- load polyfills before ANY other JavaScript -->
-<script type="text/javascript" src="$content.getURI('scripts/polyfills.js')"></script>
 
-<!-- set global vars that are used often -->
-<script type="text/javascript">
+## pull in the base JavaScript files
+$navigation.setTemplate("/BaseJS.vm")
 
-    var serverRoot = "$content.getURI('')";
-    var csrfToken = "$!data.getSession().getAttribute("XNAT_CSRF")";
-    var showReason = typeof $showReason != 'undefined' ? $showReason : null;
-    var requireReason = typeof $requireReason != 'undefined' ? $showReason : null;
 
-</script>
-## separate script tags so not everything breaks if showReason or requireReason blows up
-
-<!-- XNAT global functions (no dependencies) -->
-<script type="text/javascript" src="$content.getURI('scripts/globals.js')"></script>
-
-<!-- required libraries -->
 <script>
-    // loads minified versions by default
-    // add ?debug=true to the query string
-    // or #debug to the url hash to load
-    // the non-minified versions
-    writeScripts([
-        scriptUrl('lib/loadjs/loadjs'),
-        scriptUrl('lib/jquery/jquery|.min'),
-        scriptUrl('lib/jquery/jquery-migrate-1.2.1|.min'),
-    ]);
-</script>
-##<script type="text/javascript" src="$content.getURI('scripts/lib/loadjs/loadjs.js')"></script>
-##<script type="text/javascript" src="$content.getURI('scripts/lib/jquery/jquery.min.js')"></script>
-##<script type="text/javascript" src="$content.getURI('scripts/lib/jquery/jquery-migrate-1.2.1.min.js')"></script>
-<script type="text/javascript">
-    // use 'jq' to avoid _possible_ conflicts with Velocity
-    var jq = jQuery;
-</script>
-
-<!-- jQuery plugins -->
-<link rel="stylesheet" type="text/css" href="$content.getURI('scripts/lib/jquery-plugins/chosen/chosen.min.css?v=1.7.0a1')">
-<script type="text/javascript" src="$content.getURI('scripts/lib/jquery-plugins/chosen/chosen.jquery.min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/lib/jquery-plugins/jquery.maskedinput.min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/lib/jquery-plugins/jquery.spawn.js')"></script>
-
-<!-- other libraries -->
-<script type="text/javascript" src="$content.getURI('scripts/lib/spawn/spawn.js')"></script>
-
-<!-- XNAT utility functions -->
-<script type="text/javascript" src="$content.getURI('scripts/utils.js')"></script>
-
-<script type="text/javascript">
 
     /*
      * XNAT global namespace object, which will not be overwriten if
@@ -206,7 +162,7 @@
     })(XNAT.data.todaysDate);
 
 </script>
-<script type="text/javascript">
+<script>
     // initialize "Chosen" menus on DOM load
     // all <select class="chosen-menu"> elements
     // will be converted
@@ -214,39 +170,43 @@
     // the jQuery DOM-ready queue
     jq(function(){chosenInit()});
 </script>
-<script type="text/javascript" src="$content.getURI('scripts/xdat.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/DynamicJSLoad.js')"></script>
+<script src="$content.getURI('scripts/xdat.js')"></script>
+<script src="$content.getURI('scripts/DynamicJSLoad.js')"></script>
 
 <!-- YAHOO USER INTERFACE files below here -->
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/yahoo-dom-event/yahoo-dom-event.js')"></script>
-##<script type="text/javascript" src="$content.getURI('scripts/yui/build/event/event.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/event/event-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/container/container-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/menu/menu-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/element/element-beta-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/button/button-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/connection/connection-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/treeview/treeview-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/cookie/cookie-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/tabview/tabview-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/datasource/datasource-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/resize/resize-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/dragdrop/dragdrop-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/datatable/datatable-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/paginator/paginator-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/json/json-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/xnat_loader.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/LeftBarTreeView.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/justification/justification.js')"></script>
-<script type="text/javascript">
+<script src="$content.getURI('scripts/yui/build/yahoo-dom-event/yahoo-dom-event.js')"></script>
+##<script src="$content.getURI('scripts/yui/build/event/event.js')"></script>
+<script src="$content.getURI('scripts/yui/build/event/event-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/container/container-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/menu/menu-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/element/element-beta-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/button/button-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/connection/connection-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/treeview/treeview-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/cookie/cookie-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/tabview/tabview-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/datasource/datasource-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/resize/resize-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/dragdrop/dragdrop-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/datatable/datatable-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/paginator/paginator-min.js')"></script>
+<script src="$content.getURI('scripts/yui/build/json/json-min.js')"></script>
+<script src="$content.getURI('scripts/yui/xnat_loader.js')"></script>
+<script src="$content.getURI('scripts/LeftBarTreeView.js')"></script>
+<script src="$content.getURI('scripts/justification/justification.js')"></script>
+<script>
 
     // The YUIDOM alias is used throughout XNAT
     var YUIDOM = YAHOO.util.Dom;
 
     XNAT.dom = getObject(XNAT.dom||{});
-    XNAT.dom.addFormCSRF = function(__form){
-        __form = isDefined(__form) ? $$(__form) : jq('form');
-        __form.append('<input type="hidden" name="XNAT_CSRF" value="' + csrfToken + '">')
+    XNAT.dom.addFormCSRF = function(form){
+        $$(form||'form').each(function(){
+            var form$ = $(this);
+            if (!form$.has('input[name="XNAT_CSRF"]').length){
+                form$.append('<input type="hidden" name="XNAT_CSRF" value="' + csrfToken + '">')
+            }
+        });
     };
 
     jq(function(){
@@ -260,29 +220,19 @@
 <!-- YUI css -->
 <link rel="stylesheet" type="text/css" href="$content.getURI('scripts/yui/build/assets/skins/sam/skin.css?v=1.7.0a1')">
 
-<!-- xdat.css and xnat.css loaded last to override YUI styles -->
-<link rel="stylesheet" type="text/css" href="$content.getURI('style/app.css?v=1.7.0a1')">
-##<link rel="stylesheet" type="text/css" href="$content.getURI('style/xnat.css?v=1.7.0a1')">
-##<link rel="stylesheet" type="text/css" href="$content.getURI('style/icons.css?v=1.7.0a1')">
+<!-- date input stuff -->
+<link type="text/css" rel="stylesheet" href="$content.getURI('scripts/yui/build/calendar/assets/skins/sam/calendar.css?v=1.7.0a1')">
+##<script src="$content.getURI('scripts/yui/build/calendar/calendar.js')"></script>
+<script src="$content.getURI('scripts/yui/build/calendar/calendar-min.js')"></script>
+<script src="$content.getURI('scripts/ezCalendar.js')"></script>
+
 
-<link rel="stylesheet" type="text/css" href="$content.getURI('scripts/xmodal-v1/xmodal.css?v=1.7.0a1')">
-<script type="text/javascript" src="$content.getURI('scripts/xmodal-v1/xmodal.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/xmodal-v1/xmodal-migrate.js')"></script>
+## pull in the XNAT app JavaScript files
+$navigation.setTemplate("/AppJS.vm")
 
-<link rel="stylesheet" type="text/css" href="$content.getURI('scripts/tabWrangler/tabWrangler.css?v=1.7.0a1')">
-<script type="text/javascript" src="$content.getURI('scripts/tabWrangler/tabWrangler.js')"></script>
 
-<!-- date input stuff -->
-<link type="text/css" rel="stylesheet" href="$content.getURI('scripts/yui/build/calendar/assets/skins/sam/calendar.css?v=1.7.0a1')">
-##<script type="text/javascript" src="$content.getURI('scripts/yui/build/calendar/calendar.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/yui/build/calendar/calendar-min.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/ezCalendar.js')"></script>
+<link rel="stylesheet" type="text/css" href="$content.getURI('scripts/tabWrangler/tabWrangler.css?v=1.7.0a1')">
+<script src="$content.getURI('scripts/tabWrangler/tabWrangler.js')"></script>
 
-<!-- XNAT JLAPI scripts -->
-<script type="text/javascript" src="$content.getURI('scripts/xnat/url.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/xnat/xhr.js')"></script>
-##<script type="text/javascript" src="$content.getURI('scripts/xnat/widget.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/xnat/ui/popup.js')"></script>
-<script type="text/javascript" src="$content.getURI('scripts/xnat/ui/dialog.js')"></script>
 
 #addGlobalCustomScreens("header")
diff --git a/src/main/webapp/xnat-templates/navigations/htmlOpen.vm b/src/main/webapp/xnat-templates/navigations/htmlOpen.vm
index 1e874a5d..f2b595ab 100644
--- a/src/main/webapp/xnat-templates/navigations/htmlOpen.vm
+++ b/src/main/webapp/xnat-templates/navigations/htmlOpen.vm
@@ -1,12 +1,8 @@
 <!DOCTYPE html>
 ##Copyright 2005 Harvard University / Howard Hughes Medical Institute (HHMI) All Rights Reserved
-<!--[if lt IE 7]> <html class="ie ie6 ltie7 ltie8 ltie9 ltie10 no-js"> <![endif]-->
-<!--[if IE 7]>    <html class="ie ie7 ltie8 ltie9 ltie10 no-js"> <![endif]-->
-<!--[if IE 8]>    <html class="ie ie8 ltie9 ltie10 no-js"> <![endif]-->
-<!--[if IE 9]>    <html class="ie ie9 ltie10 no-js"> <![endif]-->
-<!--[if gt IE 9]><!--> <html class="no-js"> <!--<![endif]-->
-##<!-- the "no-js" class is for Modernizr - are we even using that? -->
-
+<!--[if lt IE 9]><html class="ie ie8 ltie9 ltie10"><![endif]-->
+<!--[if IE 9]><html class="ie ie9 ltie10"><![endif]-->
+<!--[if gt IE 9]><!--><html><!--<![endif]-->
 <head>
 <script type="text/javascript">
     var XNAT = {};
diff --git a/src/main/webapp/xnat-templates/screens/Basic.vm b/src/main/webapp/xnat-templates/screens/Basic.vm
new file mode 100644
index 00000000..98eb09a9
--- /dev/null
+++ b/src/main/webapp/xnat-templates/screens/Basic.vm
@@ -0,0 +1,32 @@
+## There's not a Java class file for this template yet.
+###* @vtlvariable name="displayManager" type="org.nrg.xdat.display.DisplayManager" *#
+###* @vtlvariable name="par_count" type="java.lang.Integer" *#
+###* @vtlvariable name="data" type="org.apache.turbine.util.RunData" *#
+###* @vtlvariable name="turbineUtils" type="org.nrg.xdat.turbine.utils.TurbineUtils" *#
+###* @vtlvariable name="siteConfig" type="java.util.Properties" *#
+###* @vtlvariable name="content" type="org.apache.turbine.services.pull.tools.ContentTool" *#
+#set ($template = $data.getTemplateInfo())
+$!template.setLayoutTemplate("Basic.vm")
+<head>
+    <!-- start xnat-templates/screens/Basic.vm -->
+
+    ## base JavaScript libraries
+    #parse("/navigations/BaseJS.vm")
+
+    ## XNAT css and JLAPI scripts
+    #parse("/navigations/AppJS.vm")
+
+</head>
+<body id="basic-page" class="xnat app basic">
+
+    <!-- Bare-bones HTML file. No YUI files and only -->
+    <!-- essential js and css files for new pages. -->
+
+
+    <!-- ================= -->
+    <!-- CONTENT GOES HERE -->
+    <!-- ================= -->
+
+
+    <!-- end xnat-templates/screens/Basic.vm -->
+</body>
\ No newline at end of file
diff --git a/src/main/webapp/xnat-templates/screens/Blank.vm b/src/main/webapp/xnat-templates/screens/Blank.vm
new file mode 100644
index 00000000..454822f7
--- /dev/null
+++ b/src/main/webapp/xnat-templates/screens/Blank.vm
@@ -0,0 +1,4 @@
+#set ($template = $data.getTemplateInfo())
+$!template.setLayoutTemplate("Content.vm")
+
+<p>It's blank.</p>
-- 
GitLab