Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/INSTALL.sh
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/INSTALL.sh	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/INSTALL.sh	(revision 31383)
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+/bin/cp *.html *.js *.css ../solr-server-head/solr-webapp/webapp/.
+/bin/cp etc/jetty.xml etc/realm.properties ../solr-server-head/etc/.
+
+/bin/cp WEB-INF/*.xml ../solr-server-head/solr-webapp/webapp/WEB-INF/.
+
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/WEB-INF/web.xml
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/WEB-INF/web.xml	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/WEB-INF/web.xml	(revision 31383)
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+         version="2.5"
+         metadata-complete="true"
+>
+
+
+  <!-- Uncomment if you are trying to use a Resin version before 3.0.19.
+    Their XML implementation isn't entirely compatible with Xerces.
+    Below are the implementations to use with Sun's JVM.
+  <system-property javax.xml.xpath.XPathFactory=
+             "com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl"/>
+  <system-property javax.xml.parsers.DocumentBuilderFactory=
+             "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"/>
+  <system-property javax.xml.parsers.SAXParserFactory=
+             "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"/>
+   -->
+
+  <!-- People who want to hardcode their "Solr Home" directly into the
+       WAR File can set the JNDI property here...
+   -->
+  <!--
+    <env-entry>
+       <env-entry-name>solr/home</env-entry-name>
+       <env-entry-value>/put/your/solr/home/here</env-entry-value>
+       <env-entry-type>java.lang.String</env-entry-type>
+    </env-entry>
+   -->
+   
+  <!-- Any path (name) registered in solrconfig.xml will be sent to that filter -->
+  <filter>
+    <filter-name>SolrRequestFilter</filter-name>
+    <filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>
+    <!--
+    Exclude patterns is a list of directories that would be short circuited by the 
+    SolrDispatchFilter. It includes all Admin UI related static content.
+    NOTE: It is NOT a pattern but only matches the start of the HTTP ServletPath.
+    -->
+    <init-param>
+      <param-name>excludePatterns</param-name>
+      <param-value>/css/.+,/js/.+,/img/.+,/tpl/.+</param-value>
+    </init-param>
+  </filter>
+
+  <filter-mapping>
+    <!--
+      NOTE: When using multicore, /admin JSP URLs with a core specified
+      such as /solr/coreName/admin/stats.jsp get forwarded by a
+      RequestDispatcher to /solr/admin/stats.jsp with the specified core
+      put into request scope keyed as "org.apache.solr.SolrCore".
+
+      It is unnecessary, and potentially problematic, to have the SolrDispatchFilter
+      configured to also filter on forwards.  Do not configure
+      this dispatcher as <dispatcher>FORWARD</dispatcher>.
+    -->
+    <filter-name>SolrRequestFilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+
+  <servlet>
+    <servlet-name>LoadAdminUI</servlet-name>
+    <servlet-class>org.apache.solr.servlet.LoadAdminUiServlet</servlet-class>
+  </servlet>
+  
+  <!-- Remove in Solr 5.0 -->
+  <!-- This sends SC_MOVED_PERMANENTLY (301) for resources that changed in 4.0 -->
+  <servlet>
+    <servlet-name>RedirectOldAdminUI</servlet-name>
+    <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
+    <init-param>
+      <param-name>destination</param-name>
+      <param-value>${context}/#/</param-value>
+    </init-param>
+  </servlet>
+  
+  <servlet>
+    <servlet-name>RedirectOldZookeeper</servlet-name>
+    <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
+    <init-param>
+      <param-name>destination</param-name>
+      <param-value>${context}/admin/zookeeper</param-value>
+    </init-param>
+  </servlet>
+
+  <servlet>
+    <servlet-name>RedirectLogging</servlet-name>
+    <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
+    <init-param>
+      <param-name>destination</param-name>
+      <param-value>${context}/#/~logging</param-value>
+    </init-param>
+  </servlet>
+
+  <servlet>
+    <servlet-name>SolrRestApi</servlet-name>
+    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
+    <init-param>
+      <param-name>org.restlet.application</param-name>
+      <param-value>org.apache.solr.rest.SolrSchemaRestApi</param-value>
+    </init-param>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>RedirectOldAdminUI</servlet-name>
+    <url-pattern>/admin/</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>RedirectOldAdminUI</servlet-name>
+    <url-pattern>/admin</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>RedirectOldZookeeper</servlet-name>
+    <url-pattern>/zookeeper.jsp</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>RedirectOldZookeeper</servlet-name>
+    <url-pattern>/zookeeper</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>RedirectLogging</servlet-name>
+    <url-pattern>/logging</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>LoadAdminUI</servlet-name>
+    <url-pattern>/old.html</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>LoadAdminUI</servlet-name>
+    <url-pattern>/index.html</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>SolrRestApi</servlet-name>
+    <url-pattern>/schema/*</url-pattern>
+  </servlet-mapping>
+  
+  <mime-mapping>
+    <extension>.xsl</extension>
+    <!-- per http://www.w3.org/TR/2006/PR-xslt20-20061121/ -->
+    <mime-type>application/xslt+xml</mime-type>
+  </mime-mapping>
+
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+  </welcome-file-list>
+
+  <!-- Get rid of error message -->
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Disable TRACE</web-resource-name>
+      <url-pattern>/</url-pattern>
+      <http-method>TRACE</http-method>
+    </web-resource-collection>
+    <auth-constraint/>
+  </security-constraint>
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Enable everything but TRACE</web-resource-name>
+      <url-pattern>/</url-pattern>
+      <http-method-omission>TRACE</http-method-omission>
+    </web-resource-collection>
+  </security-constraint>
+
+
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Secured area</web-resource-name>
+      <url-pattern>/admin.html</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>admin</role-name>
+    </auth-constraint>
+  </security-constraint>
+
+  <login-config>
+    <auth-method>BASIC</auth-method>
+    <realm-name>HTRC-EF Realm</realm-name>
+  </login-config>
+  <security-role>
+    <role-name>admin</role-name>
+  </security-role>
+
+
+</web-app>
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/admin.html
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/admin.html	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/admin.html	(revision 31383)
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html ng-app="solrAdminApp">
+<head><!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+
+  <title>Solr Admin</title>
+
+  <link rel="icon" type="image/x-icon" href="img/favicon.ico?_=${version}">
+  <link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico?_=${version}">
+
+	
+  <link rel="stylesheet" type="text/css" href="css/angular/common.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/analysis.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/cloud.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/cores.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/collections.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/dashboard.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/dataimport.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/files.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/index.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/styles/java-properties.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/logging.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/menu.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/plugins.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/documents.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/query.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/stream.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/replication.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/schema.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/segments.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/threads.css?_=${version}">
+  <link rel="stylesheet" type="text/css" href="css/angular/chosen.css?_=${version}">
+
+  <meta http-equiv="x-ua-compatible" content="IE=9">
+  <script src="libs/jquery-2.1.3.min.js"></script>
+  <script src="libs/chosen.jquery.js"></script>
+  <script src="libs/jquery.jstree.js"></script>
+  <script src="libs/angular.js"></script>
+  <script src="libs/angular-chosen.js"></script>
+  <script src="libs/angular-resource.min.js"></script>
+  <script src="libs/angular-route.min.js"></script>
+  <script src="libs/angular-cookies.min.js"></script>
+  <script src="libs/ngtimeago.js"></script>
+  <script src="libs/highlight.js"></script>
+  <script src="libs/d3.js"></script>
+  <script src="js/angular/app.js"></script>
+  <script src="js/angular/services.js"></script>
+  <script src="js/angular/controllers/index.js"></script>
+  <script src="js/angular/controllers/logging.js"></script>
+  <script src="js/angular/controllers/cloud.js"></script>
+  <script src="js/angular/controllers/collections.js"></script>
+  <script src="js/angular/controllers/cores.js"></script>
+  <script src="js/angular/controllers/threads.js"></script>
+  <script src="js/angular/controllers/java-properties.js"></script>
+  <script src="js/angular/controllers/core-overview.js"></script>
+  <script src="js/angular/controllers/collection-overview.js"></script>
+  <script src="js/angular/controllers/analysis.js"></script>
+  <script src="js/angular/controllers/dataimport.js"></script>
+  <script src="js/angular/controllers/documents.js"></script>
+  <script src="js/angular/controllers/files.js"></script>
+  <script src="js/angular/controllers/query.js"></script>
+  <script src="js/angular/controllers/stream.js"></script>
+  <script src="js/angular/controllers/plugins.js"></script>
+  <script src="js/angular/controllers/replication.js"></script>
+  <script src="js/angular/controllers/schema.js"></script>
+  <script src="js/angular/controllers/segments.js"></script>
+
+</head>
+<body ng-controller="MainController">
+
+  <div id="wrapper" scrollable-when-small>
+
+    <div id="header">
+
+      <a href="./" id="solr"><span>Apache SOLR</span></a>
+
+      <p id="environment">&nbsp;</p>
+
+    </div>
+
+    <div id="main" class="clearfix">
+
+      <div class="header-message" id="init-failures" ng-show="showInitFailures">
+
+          <h2>SolrCore Initialization Failures</h2>
+          <ul>
+              <li ng-repeat="(core,error) in initFailures"><strong>{{core}}:</strong> {{error}}</li>
+          </ul>
+          <p>Please check your logs for more information</p>
+
+      </div>
+
+      <div id="loading" class="loader universal-loader" loading-status-message>&nbsp;</div>
+
+      <div id="connection-box" connection-message>
+        <div id="connection-status-modal">
+        </div>
+
+        <div class="connection-status header-message">
+          <h2>Connection to Solr lost</h2>
+          <p>Please check the Solr instance.</p>
+        </div>
+  <div class="connection-status header-message" id="connection-status-recovered"  ng-show="connectionRecovered">
+    <h2>Connection recovered...</h2>
+    <p>Continuing to load data...</p>
+  </div>
+      </div>
+      <div id="http-exception" class="header-message" ng-repeat="(url, exception) in exceptions">
+        <div class="exception">{{exception.msg}}</div>
+      </div>
+
+      <div class="other-ui-link">
+        Use <a class="ul" href="/solr/old.html">original UI</a><a target="_blank" href="http://wiki.apache.org/solr/AngularUI">&nbsp;<span class="help"></span></a>
+      </div>
+
+      <div id="content-wrapper">
+        <div ng-view id="content">
+
+        </div>
+      </div>
+
+      <div id="menu-wrapper">
+        <div>
+
+          <ul id="menu">
+
+            <li id="index" class="global" ng-class="{active:page=='index'}"><p><a href="#/">Dashboard</a></p></li>
+
+            <li id="logging" class="global" ng-class="{active:page=='logging'}"><p><a href="#/~logging">Logging</a></p>
+              <ul ng-show="showingLogging">
+                <li class="level" ng-class="{active:page=='logging-levels'}"><a href="#/~logging/level">Level</a></li>
+              </ul>
+            </li>
+
+            <li id="cloud" class="global optional" ng-show="isCloudEnabled" ng-class="{active:showingCloud}"><p><a href="#/~cloud">Cloud</a></p>
+              <ul ng-show="showingCloud">
+                <li class="tree" ng-class="{active:page=='cloud-tree'}"><a href="#/~cloud?view=tree">Tree</a></li>
+                <li class="graph" ng-class="{active:page=='cloud-graph'}"><a href="#/~cloud">Graph</a></li>
+                <li class="rgraph" ng-class="{active:page=='cloud-rgraph'}"><a href="#/~cloud?view=rgraph">Graph (Radial)</a></li>
+                <li class="dump" ng-class="{active:page=='cloud-dump'}"><a ng-click="dumpCloud()">Dump</a></li>
+              </ul>
+            </li>
+
+            <li ng-show="isCloudEnabled" id="collections" class="global" ng-class="{active:page=='collections'}"><p><a href="#/~collections">Collections</a></p></li>
+            <li ng-hide="isCloudEnabled" id="cores" class="global" ng-class="{active:page=='cores'}"><p><a href="#/~cores">Core Admin</a></p></li>
+
+            <li id="java-properties" class="global" ng-class="{active:page=='java-props'}"><p><a href="#/~java-properties">Java Properties</a></li>
+
+            <li id="threads" class="global" ng-class="{active:page=='threads'}"><p><a href="#/~threads">Thread Dump</a></p></li>
+
+          </ul>
+
+          <div id="collection-selector" ng-show="isCloudEnabled">
+            <div id="has-collections" ng-show="collections.length!=0">
+              <select data-placeholder="Collection Selector"
+                      ng-model="currentCollection"
+                      chosen
+                      ng-change="showCollection(currentCollection)"
+                      ng-options="collection.name for collection in collections"></select>
+            </div>
+            <p id="has-no-collections" ng-show="collections.length==0"><a href="#/~collections">
+              No collections available
+              <span>Go and create one</span>
+            </a></p>
+          </div>
+          <div id="collection-menu" class="sub-menu" ng-show="currentCollection">
+            <ul>
+              <li class="overview" ng-class="{active:page=='collection-overview'}"><a href="#/{{currentCollection.name}}/collection-overview"><span>Overview</span></a></li>
+              <li class="analysis" ng-class="{active:page=='analysis'}"><a href="#/{{currentCollection.name}}/analysis"><span>Analysis</span></a></li>
+              <li class="dataimport" ng-class="{active:page=='dataimport'}"><a href="#/{{currentCollection.name}}/dataimport"><span>Dataimport</span></a></li>
+              <li class="documents" ng-class="{active:page=='documents'}"><a href="#/{{currentCollection.name}}/documents"><span>Documents</span></a></li>
+              <li class="files" ng-class="{active:page=='files'}"><a href="#/{{currentCollection.name}}/files"><span>Files</span></a></li>
+              <li class="query" ng-class="{active:page=='query'}"><a href="#/{{currentCollection.name}}/query"><span>Query</span></a></li>
+              <li class="stream" ng-class="{active:page=='stream'}"><a href="#/{{currentCollection.name}}/stream"><span>Stream</span></a></li>
+              <li class="schema" ng-class="{active:page=='schema'}"><a href="#/{{currentCollection.name}}/schema"><span>Schema</span></a></li>
+        </ul>
+          </div>
+          <div id="core-selector">
+            <div id="has-cores" ng-show="cores.length!=0">
+              <select data-placeholder="Core Selector"
+                      ng-model="currentCore"
+                      chosen
+                      ng-change="showCore(currentCore)"
+                      ng-options="core.name for core in cores"></select>
+            </div>
+            <p id="has-no-cores" ng-show="cores.length==0"><a href="#/~cores">
+              No cores available
+              <span>Go and create one</span>
+            </a></p>
+          </div>
+          <div id="core-menu" class="sub-menu" ng-show="currentCore">
+            <ul>
+              <li class="overview" ng-class="{active:page=='overview'}"><a href="#/{{currentCore.name}}"><span>Overview</span></a></li>
+              <li ng-hide="isCloudEnabled" class="analysis" ng-class="{active:page=='analysis'}"><a href="#/{{currentCore.name}}/analysis"><span>Analysis</span></a></li>
+              <li ng-hide="isCloudEnabled" class="dataimport" ng-class="{active:page=='dataimport'}"><a href="#/{{currentCore.name}}/dataimport"><span>Dataimport</span></a></li>
+              <li ng-hide="isCloudEnabled" class="documents" ng-class="{active:page=='documents'}"><a href="#/{{currentCore.name}}/documents"><span>Documents</span></a></li>
+              <li ng-hide="isCloudEnabled" class="files" ng-class="{active:page=='files'}"><a href="#/{{currentCore.name}}/files"><span>Files</span></a></li>
+              <li class="ping" ng-class="{active:page=='ping'}"><a ng-click="ping()"><span>Ping</span><small class="qtime" ng-show="showPing"> (<span>{{pingMS}}ms</span>)</small></a></li>
+              <li class="plugins" ng-class="{active:page=='plugins'}"><a href="#/{{currentCore.name}}/plugins"><span>Plugins / Stats</span></a></li>
+              <li ng-hide="isCloudEnabled" class="query" ng-class="{active:page=='query'}"><a href="#/{{currentCore.name}}/query"><span>Query</span></a></li>
+              <li ng-hide="isCloudEnabled" class="replication" ng-class="{active:page=='replication'}"><a href="#/{{currentCore.name}}/replication"><span>Replication</span></a></li>
+              <li ng-hide="isCloudEnabled" class="schema" ng-class="{active:page=='schema'}"><a href="#/{{currentCore.name}}/schema"><span>Schema</span></a></li>
+              <li class="segments" ng-class="{active:page=='segments'}"><a href="#/{{currentCore.name}}/segments"><span>Segments info</span></a></li>
+      </ul>
+          </div>
+
+        </div>
+      </div>
+
+      <div id="meta">
+
+        <ul>
+
+          <li class="documentation"><a href="http://lucene.apache.org/solr/"><span>Documentation</span></a></li>
+          <li class="issues"><a href="http://issues.apache.org/jira/browse/SOLR"><span>Issue Tracker</span></a></li>
+          <li class="irc"><a href="http://webchat.freenode.net/?channels=#solr"><span>IRC Channel</span></a></li>
+          <li class="mailinglist"><a href="http://wiki.apache.org/solr/UsingMailingLists"><span>Community forum</span></a></li>
+          <li class="wiki-query-syntax"><a href="https://cwiki.apache.org/confluence/display/solr/Query+Syntax+and+Parsing"><span>Solr Query Syntax</span></a></li>
+
+        </ul>
+
+      </div>
+
+    </div>
+
+  </div>
+
+</body>
+</html>
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/etc/jetty.xml
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/etc/jetty.xml	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/etc/jetty.xml	(revision 31383)
@@ -0,0 +1,217 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server                                      -->
+<!--                                                                 -->
+<!-- Documentation of this file format can be found at:              -->
+<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax        -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+  <!-- =========================================================== -->
+  <!-- Configure the Server Thread Pool.                           -->
+  <!-- The server holds a common thread pool which is used by      -->
+  <!-- default as the executor used by all connectors and servlet  -->
+  <!-- dispatches.                                                 -->
+  <!--                                                             -->
+  <!-- Configuring a fixed thread pool is vital to controlling the -->
+  <!-- maximal memory footprint of the server and is a key tuning  -->
+  <!-- parameter for tuning.  In an application that rarely blocks -->
+  <!-- then maximal threads may be close to the number of 5*CPUs.  -->
+  <!-- In an application that frequently blocks, then maximal      -->
+  <!-- threads should be set as high as possible given the memory  -->
+  <!-- available.                                                  -->
+  <!--                                                             -->
+  <!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool   -->
+  <!-- for all configuration that may be set here.                 -->
+  <!-- =========================================================== -->
+  <Arg name="threadpool">
+    <New id="threadpool" class="com.codahale.metrics.jetty9.InstrumentedQueuedThreadPool">
+      <Arg name="registry">
+        <Call id="solrJettyMetricRegistry" name="getOrCreate" class="com.codahale.metrics.SharedMetricRegistries">
+          <Arg>solr.jetty</Arg>
+        </Call>
+      </Arg>
+    </New>
+  </Arg>
+
+  <Get name="ThreadPool">
+    <Set name="minThreads" type="int"><Property name="solr.jetty.threads.min" default="10"/></Set>
+    <Set name="maxThreads" type="int"><Property name="solr.jetty.threads.max" default="10000"/></Set>
+    <Set name="idleTimeout" type="int"><Property name="solr.jetty.threads.idle.timeout" default="5000"/></Set>
+    <Set name="stopTimeout" type="int"><Property name="solr.jetty.threads.stop.timeout" default="60000"/></Set>
+    <Set name="detailedDump">false</Set>
+  </Get>
+
+
+  <!-- =========================================================== -->
+  <!-- Http Configuration.                                         -->
+  <!-- This is a common configuration instance used by all         -->
+  <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, SPDY)-->
+  <!-- It configures the non wire protocol aspects of the HTTP     -->
+  <!-- semantic.                                                   -->
+  <!--                                                             -->
+  <!-- This configuration is only defined here and is used by      -->
+  <!-- reference from the jetty-http.xml, jetty-https.xml and      -->
+  <!-- jetty-spdy.xml configuration files which instantiate the    -->
+  <!-- connectors.                                                 -->
+  <!--                                                             -->
+  <!-- Consult the javadoc of o.e.j.server.HttpConfiguration       -->
+  <!-- for all configuration that may be set here.                 -->
+  <!-- =========================================================== -->
+  <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
+    <Set name="secureScheme">https</Set>
+    <Set name="securePort"><Property name="solr.jetty.secure.port" default="8443" /></Set>
+    <Set name="outputBufferSize"><Property name="solr.jetty.output.buffer.size" default="32768" /></Set>
+    <Set name="outputAggregationSize"><Property name="solr.jetty.output.aggregation.size" default="8192" /></Set>
+    <Set name="requestHeaderSize"><Property name="solr.jetty.request.header.size" default="8192" /></Set>
+    <Set name="responseHeaderSize"><Property name="solr.jetty.response.header.size" default="8192" /></Set>
+    <Set name="sendServerVersion"><Property name="solr.jetty.send.server.version" default="false" /></Set>
+    <Set name="sendDateHeader"><Property name="solr.jetty.send.date.header" default="false" /></Set>
+    <Set name="headerCacheSize"><Property name="solr.jetty.header.cache.size" default="512" /></Set>
+    <Set name="delayDispatchUntilContent"><Property name="solr.jetty.delayDispatchUntilContent" default="false"/></Set>
+    <!-- Uncomment to enable handling of X-Forwarded- style headers
+    <Call name="addCustomizer">
+      <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
+    </Call>
+    -->
+  </New>
+
+    <!-- =========================================================== -->
+    <!-- RewriteHandle to redirect root to Solr                      -->
+    <!-- =========================================================== -->
+     <New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
+      <Set name="rewriteRequestURI">true</Set>
+      <Set name="rewritePathInfo">false</Set>
+      <Set name="originalPathAttribute">requestedPath</Set>
+
+      <Call name="addRule">
+        <Arg>
+          <New class="org.eclipse.jetty.rewrite.handler.RedirectRegexRule">
+            <Set name="regex">^/$</Set>
+            <Set name="replacement">/solr/</Set>
+          </New>
+        </Arg>
+      </Call>
+     </New>
+
+    <!-- =========================================================== -->
+    <!-- Set handler Collection Structure                            -->
+    <!-- =========================================================== -->
+    <Set name="handler">
+      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
+        <Set name="handlers">
+         <Array type="org.eclipse.jetty.server.Handler">
+           <Item>
+             <Ref id="RewriteHandler"/>
+           </Item>
+           <Item>
+             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
+           </Item>
+           <Item>
+             <New id="InstrumentedHandler" class="com.codahale.metrics.jetty9.InstrumentedHandler">
+               <Arg><Ref refid="solrJettyMetricRegistry"/></Arg>
+               <Set name="handler">
+                 <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
+               </Set>
+             </New>
+           </Item>
+           <Item>
+             <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
+           </Item>
+         </Array>
+        </Set>
+      </New>
+    </Set>
+    
+    <!-- =========================================================== -->
+    <!-- Configure Request Log                                       -->
+    <!-- =========================================================== -->
+    <!--
+    <Ref id="Handlers">
+      <Call name="addHandler">
+        <Arg>
+          <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
+            <Set name="requestLog">
+              <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
+                <Set name="filename">
+                   logs/request.yyyy_mm_dd.log
+                </Set>
+                <Set name="filenameDateFormat">yyyy_MM_dd</Set>
+                <Set name="retainDays">90</Set>
+                <Set name="append">true</Set>
+                <Set name="extended">false</Set>
+                <Set name="logCookies">false</Set>
+                <Set name="LogTimeZone">UTC</Set>
+              </New>
+            </Set>
+          </New>
+        </Arg>
+      </Call>
+    </Ref>
+    -->
+
+    <!-- =========================================================== -->
+    <!-- extra options                                               -->
+    <!-- =========================================================== -->
+    <Set name="stopAtShutdown">true</Set>
+    <Set name="dumpAfterStart">false</Set>
+    <Set name="dumpBeforeStop">false</Set>
+
+    <Call name="addBean">
+      <Arg>
+        <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+          <Set name="contexts">
+            <Ref refid="Contexts" />
+          </Set>
+          <Call name="setContextAttribute">
+            <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
+            <Arg>.*/servlet-api-[^/]*\.jar$</Arg>
+          </Call>
+
+          <Call name="addAppProvider">
+            <Arg>
+              <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+                <Set name="monitoredDirName"><Property name="jetty.base" default="."/>/contexts</Set>
+                <Set name="scanInterval">0</Set>
+              </New>
+            </Arg>
+          </Call>
+          
+          <!-- Add a customize step to the deployment lifecycle -->
+          <!-- uncomment and replace DebugBinding with your extended AppLifeCycle.Binding class 
+          <Call name="insertLifeCycleNode">
+            <Arg>deployed</Arg>
+            <Arg>starting</Arg>
+            <Arg>customise</Arg>
+          </Call>
+          <Call name="addLifeCycleBinding">
+            <Arg>
+              <New class="org.eclipse.jetty.deploy.bindings.DebugBinding">
+                <Arg>customise</Arg>
+              </New>
+            </Arg>
+          </Call>
+          -->
+          
+        </New>
+      </Arg>
+    </Call>
+
+    
+    <Call name="addBean">
+      <Arg>
+	<New class="org.eclipse.jetty.security.HashLoginService">
+	  <Set name="name">HTRC-EF Realm</Set>
+	  <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
+	  <Set name="refreshInterval">0</Set>
+	</New>
+      </Arg>
+    </Call>
+
+
+</Configure>
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/etc/realm.properties
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/etc/realm.properties	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/etc/realm.properties	(revision 31383)
@@ -0,0 +1,1 @@
+admin: Wa!kat0,admin
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.css
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.css	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.css	(revision 31383)
@@ -0,0 +1,25 @@
+input:disabled {
+    background:#dddddd;
+}
+
+input:disabled+label{color:#cccccc;}
+
+/*
+input[type=text]+label {
+    float: left;
+}
+*/
+
+.evenline {
+    background-color: #eee;
+    margin: 0 0 0 0;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+.oddline {
+    background-color: #fff;
+    margin: 0 0 0 0;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.html
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.html	(revision 31378)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.html	(revision 31383)
@@ -1,28 +1,35 @@
 <!DOCTYPE html>
-<html>
-  <head>
-    <base href="https://analytics.hathitrust.org/" />    
-        <title> HTRC Portal - Home </title>
-        <link rel="shortcut icon" href="/assets/images/favicon.ico"/>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=windows-1252">
+    <!-- base href="https://analytics.hathitrust.org/" -->    
+        <title>HTRC Extracted Feature Solr Search</title>
+        <link rel="shortcut icon" href="https://analytics.hathitrust.org/assets/images/favicon.ico">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<!--
         <meta http-equiv="refresh" content="600">
+-->
             <!-- Bootstrap -->
-        <link href="/assets/stylesheets/bootstrap.min.css" rel="stylesheet" media="screen">
-        <link href="/assets/stylesheets/main.css" rel="stylesheet" media="screen">
-        <link href="/assets/stylesheets/flat.css" rel="stylesheet" media="screen">
-        <link href="/assets/stylesheets/font-awesome.min.css" rel="stylesheet">
-        <link href="/assets/stylesheets/tomorrow.min.css" rel="stylesheet">
-        
-        <link rel="stylesheet" href="/theme">
-        
-        <script src="/assets/javascripts/highlight.min.js"></script>
-        <script src="/assets/javascripts/jquery.min.js"></script>
-        <script src="/assets/javascripts/stupidtable.min.js"></script>
-        <script src="/assets/javascripts/bootstrap.min.js"></script>
-        <script src="/assets/javascripts/bowser.min.js"></script>
-        <script type="text/javascript" src="/assets/javascripts/htrcwarnings.js"></script>
-        <script type="text/javascript" src="/assets/javascripts/uploadws.js"></script>
-        <script type="text/javascript" src="/assets/javascripts/ga-download-tracking.js"></script>
-
+        <link href="HTRC_Mashup--Home_files/bootstrap.css" rel="stylesheet" media="screen">
+        <link href="HTRC_Mashup--Home_files/main.css" rel="stylesheet" media="screen">
+        <link href="HTRC_Mashup--Home_files/flat.css" rel="stylesheet" media="screen">
+        <link href="HTRC_Mashup--Home_files/font-awesome.css" rel="stylesheet">
+        <link href="HTRC_Mashup--Home_files/tomorrow.css" rel="stylesheet">
+<!--        
+        <link rel="stylesheet" href="HTRC_Mashup--Home_files/theme.css">
+	-->
+
+        <link href="index.css" rel="stylesheet">
+	
+        <script src="HTRC_Mashup--Home_files/highlight.js"></script>
+        <script src="HTRC_Mashup--Home_files/jquery.js"></script>
+        <script src="HTRC_Mashup--Home_files/stupidtable.js"></script>
+        <script src="HTRC_Mashup--Home_files/bootstrap.js"></script>
+        <script src="HTRC_Mashup--Home_files/bowser.js"></script>
+        <script type="text/javascript" src="HTRC_Mashup--Home_files/htrcwarnings.js"></script>
+        <script type="text/javascript" src="HTRC_Mashup--Home_files/uploadws.js"></script>
+        <script type="text/javascript" src="HTRC_Mashup--Home_files/ga-download-tracking.js"></script>
+	
+	<script src="iso-639-1.js"></script> <!-- defined var 'isoLangs' -->
+	<script src="index.js"></script>
   </head>
   <body>
@@ -36,6 +43,5 @@
                         <span class="icon-bar"></span>
                     </button>
-                    <a class="navbar-brand" href="/"><img src="/assets/images/hathi.jpg"
-                    width="36" height="32" style="padding-right : 5 px ; margin-top : - 1 px ;" alt=" ">
+                    <a class="navbar-brand" href="https://analytics.hathitrust.org/"><img src="HTRC_Mashup--Home_files/hathi.jpg" style="padding-right : 5 px ; margin-top : - 1 px ;" alt=" " height="32" width="36">
                         HTRC Portal
                     </a>
@@ -44,6 +50,6 @@
                 <div class="navbar-collapse collapse">
                     <ul class="nav navbar-nav">
-                        <li><a href="/">Home</a></li>
-                        </li>
+                        <li><a href="https://analytics.hathitrust.org/">Home</a></li>
+                        
 
                         <li class="dropdown">
@@ -52,5 +58,5 @@
                             <ul class="dropdown-menu">
                                 
-                                    <li><a href="#" onclick="loggingRequiredWarning('/listuserworksets')" >View my worksets</a></li>
+                                    <li><a href="#" onclick="loggingRequiredWarning('/listuserworksets')">View my worksets</a></li>
                                 
                                 <li class="divider"></li>
@@ -70,5 +76,5 @@
                         </li>
                         
-                            <li><a href="#" onclick="loggingRequiredWarning('/listalgorithms')" >Algorithms</a></li>
+                            <li><a href="#" onclick="loggingRequiredWarning('/listalgorithms')">Algorithms</a></li>
                         
                         
@@ -85,10 +91,10 @@
                                     <li class="divider"></li>
                                     
-                                        <li><a href="#" onclick="loggingRequiredWarning('/listvms')" >
+                                        <li><a href="#" onclick="loggingRequiredWarning('/listvms')">
                                             Show Capsules</a></li>
                                     
                                     <li class="divider"></li>
                                     
-                                        <li><a href="#" onclick="loggingRequiredWarning('/createvms')" >
+                                        <li><a href="#" onclick="loggingRequiredWarning('/createvms')">
                                             Create Capsule</a></li>
                                     
@@ -100,8 +106,8 @@
                                 Data<b class="caret"></b></a>
                             <ul class="dropdown-menu">
-                                <li><a href="/features">
+                                <li><a href="https://analytics.hathitrust.org/features">
                                     Extracted Features Dataset</a>
                                 </li>
-                                <li><a href="/genre">
+                                <li><a href="https://analytics.hathitrust.org/genre">
                                     Word Frequencies in English-Language Literature, 1700-1922</a>
                                 </li>
@@ -121,6 +127,6 @@
                             </ul>
                         </li>
-                        <li><a href="/about">About</a>
-                    </ul>
+                        <li><a href="https://analytics.hathitrust.org/about">About</a>
+                    </li></ul>
                     
                         <ul class="nav pull-right navbar-nav">
@@ -129,7 +135,7 @@
                                     Sign In<b class="caret"></b></a>
                                 <ul class="dropdown-menu">
-                                    <li><a href="/login">Sign In</a></li>
+                                    <li><a href="https://analytics.hathitrust.org/login">Sign In</a></li>
                                     <li class="divider"></li>
-                                    <li><a href="/passwordresetmail">
+                                    <li><a href="https://analytics.hathitrust.org/passwordresetmail">
                                         Forgot Password?</a></li>
                                 </ul>
@@ -137,5 +143,5 @@
 
 
-                            <li><a href="/signup"><span>Sign Up</span></a></li>
+                            <li><a href="https://analytics.hathitrust.org/signup"><span>Sign Up</span></a></li>
                         </ul>
                     
@@ -150,9 +156,9 @@
         <div class="row">
             <div class="col-md-2 col-sm-2 hidden-xs">
-                <img class="img-responsive"  src="/assets/images/hathi.jpg" alt=" ">
+                <img class="img-responsive" src="HTRC_Mashup--Home_files/hathi.jpg" alt=" ">
             </div>
             <div class="col-md-10 col-sm-10 col-xs-12 col-lg-8" style="margin-left: 0;">
                 <h1 style="font-weight:bold;font-size:56px">
-                    Worksets from Extract Features
+                    HTRC Extracted Feature Solr Search
                 </h1>
             </div>
@@ -160,98 +166,123 @@
         <div class="row" style="padding-top : 25px; font-size : 17px; line-height : 27px;">
             <div class="col-md-12">
-              <p>Fledgling portal, primarily giving&mdash;at this
-	         stage&mdash;access to the behind-the-scenes
-	         infrastructure being developed to ingest HTRC
-	         Extracted Feature JSON data into a Solr cloud.</p>
-	      <ul>
-		<li>
-		  <a href="http://10.10.0.52:8080" target="_blank">Hadoop Cluster Web Interface</a> (master
-		  node, for observing active and previous ingests)
-		</li>
-		<li>
-		  <a href="http://10.11.0.53:8983/solr" target="_blank">Solr Cloud web interface</a> (solr1 node, giving access
-		  to full Solr API, but in a raw form)
-		</li>
-	      </ul>
-                    
-	      <p>
-		Example query that searches the  &lsquo;full-text&rsquo;index (Solr field: <tt>eftext_txt</tt>)
-		of the HTRC Public Domain Extracted Features (<tt>htrc-pd-ef</tt>) Solr collection
-		for page-level matches to the word <tt>water</tt>:
-	      </p>
-	      <ul>
-		<li>
-		  <a href="http://10.11.0.53:8983/solr/htrc-pd-ef/select?indent=on&q=eftext_txt:water&wt=json"
-		     target="_blank">
-		    http://10.11.0.53:8983/solr/htrc-pd-ef/select?indent=on&q=eftext_txt:water&wt=json
-		  </a>
-		</li>
+
+
+
+	      <h2>Prototype Search</h2>
+	      <form action="htrc-full-ef/select" id="search-form">
+		<input type="hidden" id="indent" name="indent" value="on"/>
+		<input type="hidden" id="wt" name="wt" value="json"/>
+		<input type="text"   id="q" name="q" style="width: 600px;"/>
+		<input type="submit" id="search-submit" />
+
+
+		<fieldset>
+		  <legend style="margin-bottom: 5px; padding-top: 15px;">
+		    <input type="checkbox" name="en-enabled" id="en-enabled" checked="checked" />
+		    English:
+		  </legend>
+		  <div id="en-pos-choice">
+		  <input type="checkbox" name="en-VERB-htrctoken-cb" id="en-VERB-htrctoken-cb">
+		  <label for="en-VERB-htrctoken-cb"
+			 title="Verbs (all tenses and modes)">Verbs</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-NOUN-htrctoken-cb" id="en-NOUN-htrctoken-cb">
+		  <label for="en-NOUN-htrctoken-cb"
+			 title="Nouns (common and proper)">Nouns</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-ADJ-htrctoken-cb" id="en-ADJ-htrctoken-cb">
+		  <label for="en-ADJ-htrctoken-cb">Adjectives</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-ADV-htrctoken-cb" id="en-ADV-htrctoken-cb">
+		  <label for="en-ADV-htrctoken-cb">Adverbs</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-ADP-htrctoken-cb" id="en-ADP-htrctoken-cb">
+		  <label for="en-ADP-htrctoken-cb"
+			 title ="adpositions (prepositions and postpositions)">Adpositions</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-CONJ-htrctoken-cb" id="en-CONJ-htrctoken-cb">
+		  <label for="en-CONJ-htrctoken-cb">Conjunction</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-DET-htrctoken-cb" id="en-DET-htrctoken-cb">
+		  <label for="en-DET-htrctoken-cb">Determiners</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-NUM-htrctoken-cb" id="en-NUM-htrctoken-cb">
+		  <label for="en-NUM-htrctoken-cb"
+			 title="Cardinal numbers">Numbers</label>
+		  &nbsp;
+		  <input type="checkbox" name="en-PRT-htrctoken-cb" id="en-PRT-htrctoken-cb">
+		  <label for="en-PRT-htrctoken-cb"
+			 title="Particles or other function words">Particles</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-X-htrctokde-cb-" id="de-X-htrctokde-cb-10">
+		  <label for="en-X-htrctoken-cb0"
+			 title="Other words, such as foreign words, typos, abbreviations">Other</label>
+		  </div>
+		</fieldset>
+
+
+		<fieldset>
+		  <legend style="margin-bottom: 5px; padding-top: 15px;">
+		    <input type="checkbox" name="de-enabled" id="de-enabled" />
+		    German:
+		  </legend>
+		  <div id="de-pos-choice">
+		  <input type="checkbox" name="de-VERB-htrctokde-cb" id="de-VERB-htrctokde-cb">
+		  <label for="de-VERB-htrctokde-cb"
+			 title="Verbs (all tenses and modes)">Verbs</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-NOUN-htrctokde-cb" id="de-NOUN-htrctokde-cb">
+		  <label for="de-NOUN-htrctokde-cb"
+			 title="Nouns (common and proper)">Nouns</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-ADJ-htrctokde-cb" id="de-ADJ-htrctokde-cb">
+		  <label for="de-ADJ-htrctokde-cb">Adjectives</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-ADV-htrctokde-cb" id="de-ADV-htrctokde-cb">
+		  <label for="de-ADV-htrctokde-cb">Adverbs</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-ADP-htrctokde-cb" id="de-ADP-htrctokde-cb">
+		  <label for="de-ADP-htrctokde-cb"
+			 title ="adpositions (prepositions and postpositions)">Adpositions</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-CONJ-htrctokde-cb" id="de-CONJ-htrctokde-cb">
+		  <label for="de-CONJ-htrctokde-cb">Conjunction</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-DET-htrctokde-cb" id="de-DET-htrctokde-cb">
+		  <label for="de-DET-htrctokde-cb">Determiners</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-NUM-htrctokde-cb" id="de-NUM-htrctokde-cb">
+		  <label for="de-NUM-htrctokde-cb"
+			 title="Cardinal numbers">Numbers</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-PRT-htrctokde-cb" id="de-PRT-htrctokde-cb">
+		  <label for="de-PRT-htrctokde-cb"
+			 title="Particles or other function words">Particles</label>
+		  &nbsp;
+		  <input type="checkbox" name="de-X-htrctokde-cb-" id="de-X-htrctokde-cb-10">
+		  <label for="de-X-htrctokde-cb0"
+			 title="Other words, such as foreign words, typos, abbreviations">Other</label>
+		  </div>
+		</fieldset>
+
+
+		<fieldset>
+		  <legend style="margin-bottom: 5px; padding-top: 15px;">
+		    Other Languages (without modelled parts-of-speech)
+		  </legend>
+		  <div id="other-langs">
+		  </div>
+		</fieldset>
+
+	      </form>
+
+
 	    </div>
         </div>
 
-	<!--
-       <div class="row">
-            <div class="col-md-12" style="margin-top : 20px;">
-                <h2 style="margin-top : 0">What would you like to do today?</h2>
-            </div>
-        </div>
-
-        <div class="row">
-            <div class="col-md-3">
-                <div class="panel panel-default panel-htrc margin-bt-0">
-                    <div class="panel-heading">
-                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" onclick="blacklightLoggingWarning('https://analytics.hathitrust.org/blacklight')">Create Workset</a>
-                    </div>
-                    <div class="panel-body">
-                        <div class="text-content">Create workset using our workset builder.</div>
-                     </div>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="panel panel-default panel-htrc margin-bt-0">
-                    <div class="panel-heading">
-                        
-                            <a href="#" onclick="loggingRequiredWarning('/uploadworkset')">Upload Workset</a>
-                        
-                    </div>
-                    <div class="panel-body">
-
-                        <div class="text-content">Upload a workset by specifying the
-                            necessary data about its volumes through a text file.</div>
-                        </div>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="panel panel-default panel-htrc margin-bt-0">
-                    <div class="panel-heading">
-                        
-                            <a href="#" onclick="loggingRequiredWarning('/listallworksets')">Browse Workset</a>
-                        
-                    </div>
-                    <div class="panel-body">
-                        <div class="text-content">Browse through already created worksets.</div>
-                    </div>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="panel panel-default panel-htrc margin-bt-0">
-                    <div class="panel-heading">
-                        
-                            <a href="#" onclick="loggingRequiredWarning('/listalgorithms')">Execute Algorithms</a>
-                        
-                    </div>
-                    <div class="panel-body">
-
-                                    <div class="text-content">Select and execute
-                                        text analysis algorithms for word count to more sophisticated
-                                        approaches.</div>
-
-                    </div>
-                </div>
-            </div>
-	
-        </div>
-	-->
-
+	<hr />
+	<div id="search-results">
+	</div>
+	
     </div>
 
@@ -270,5 +301,7 @@
         
         
-        
+        <div>
+	  <a href="solr1.ischool.illinois.edu/solr/htrc-full-ef_shard6_replica1/admin/luke">Luke XML on shard</a>
+	</div>
         
         
@@ -279,15 +312,19 @@
                 <div class="modal-content">
                     <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                         <h4 class="modal-title">Create Workset</h4>
                     </div>
                     <div class="modal-body">
-                        <p>You are being redirected to the Workset Builder.
-                            If this is the first time accessing it during this browser session,
-                            you will need to select "Login" from the top-right menu bar before creating or modifying a workset.
-                            We are aware this is inconvenient and we're working on a technical solution to eliminate this requirement.</p>
+                        <p>You are being redirected to the Workset 
+Builder.
+                            If this is the first time accessing it 
+during this browser session,
+                            you will need to select "Login" from the 
+top-right menu bar before creating or modifying a workset.
+                            We are aware this is inconvenient and we're 
+working on a technical solution to eliminate this requirement.</p>
                     </div>
                     <div class="modal-footer">
-                        <span class="pull-left" style="padding-top : 5 px ;"><input type="checkbox" id="dont-show" style="margin : - 3 px 0 0 ;">
+                        <span class="pull-left" style="padding-top : 5 px ;"><input id="dont-show" style="margin : - 3 px 0 0 ;" type="checkbox">
                             Don't Show This Again.</span>
                         <a href="#" class="btn btn-link btn-sm" data-dismiss="modal" aria-hidden="true">Cancel</a>
@@ -302,5 +339,5 @@
                 <div class="modal-content">
                     <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                         <h4 class="modal-title">Please Sign in</h4>
                     </div>
@@ -331,8 +368,9 @@
 	-->
 	
-  </body>
-
-
-
-</html>
-
+  
+
+
+
+
+
+</body></html>
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.js
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.js	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.js	(revision 31383)
@@ -0,0 +1,172 @@
+
+var langs_with_pos =["da","de","en","nl","pt"];
+var langs_without_pos =["af","ar","bg","bn","cs","el","es","et","fa","fi","fr","he","hi","hr","hu","id","it","ja","kn","ko","lt","lv","mk","ml","mr","ne","no","pa","pl","ro","ru","sk","sl","so","sq","sv","sw","ta","te","th","tl","tr","uk","ur","vi","zh-cn","zh-tw"];
+
+function lang_pos_toggle(event) {
+    var $this =$(this);
+    var checked_state = $this.prop("checked");
+
+    var id = $this.attr("id");
+    var split_id = id.split("-");
+    var related_id = split_id[0] + "-pos-choice";
+
+    //console.log("checked state = " + checked_state);
+
+    var disable_state = !checked_state;
+    $('#'+related_id + " *").prop('disabled',disable_state);
+};
+
+function ajax_error(jqXHR, textStatus, errorThrown) {
+    alert('An error occurred... Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!');
+
+    console.log('jqXHR:' + jqXHR);
+    console.log('textStatus:' + textStatus);
+    console.log('errorThrown:' + errorThrown);
+}		
+
+
+function add_titles(json_data) {
+    $.each( json_data, function( htid_with_prefix, htid_val ) {
+	var htid = htid_with_prefix.replace(/^htid:/,"");
+	
+	$.each(htid_val.records, function( internalid, metadata ) {
+	    var title = metadata.titles[0];
+	    $("[name='"+htid+"']").each(function() {$(this).html(title)});
+	    console.log(htid + ", title = " + metadata.titles[0]);
+	});
+    });
+}
+
+function show_results(jsonData) {
+    var response = jsonData.response;
+    var num_found = response.numFound;
+    var docs = response.docs;
+    var num_docs = docs.length;
+
+    var $search_results = $('#search-results');
+    if (num_docs>0) {
+	$search_results.html("<p>Results: " + num_found + " volumes/documents matched</p>");
+	$search_results.append("<p>Showing matches: 1-" + num_docs + "</p>");
+    }
+    else {
+	$search_results.html("<p>No volumes/documents matched your query</p>");
+    }
+
+    // https://babel.hathitrust.org/cgi/pt?id=hvd.hnnssu;view=1up;seq=11
+
+    var htids = [];
+    
+    for (var i=0; i<num_docs; i++) {
+	var doc = docs[i];
+	var id_and_page = doc.id.split(".page-");
+	var id = id_and_page[0];
+	var page = parseInt(id_and_page[1]);
+
+	
+	var css_class = (i%2 == 0) ? 'class="evenline"' : 'class="oddline"';
+	//var restful_safe_id = id.replace(/\./g,",").replace(/:/g, "+").replace(/\//g, "=");
+	
+	var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+page;
+
+	var result_item = '<a target="_blank" href="' + babel_url + '">' + id + ', page ' + page + '</a>';
+	result_item += ' <span style="font-style: italic;" name="'+id+'"><span style="cursor: progress;">Loading ...</span></span>';
+	$search_results.append('<p ' + css_class + '>'+result_item+'</p>');
+
+	htids.push("htid:"+id);
+
+    }
+
+    // Example URL for catalog metadata (multiple items)
+    // http://catalog.hathitrust.org/api/volumes/brief/json/id:552;lccn:70628581|isbn:0030110408
+
+    var htids_str = htids.join("|",htids);
+    var cat_url = "http://catalog.hathitrust.org/api/volumes/brief/json/" + htids_str;
+    	$.ajax({
+	    url: cat_url,
+	    dataType: 'jsonp',
+	    jsonpCallback: "add_titles"
+	});
+
+
+    //var json_pretty = JSON.stringify(jsonData.response, null, '\t');
+    //$('#search-results').text(json_pretty)
+}
+
+$(function() {
+    $('#en-enabled').click(lang_pos_toggle);
+    $('#de-enabled').click(lang_pos_toggle);
+    $('#de-pos-choice *').prop('disabled',true);
+
+    // setup other languages
+    // for each 'langs_without_pos' generate HTML of the form:
+    //    <input type="checkbox" name="fr-enabled" id="fr-enabled" />French
+    var $other_langs = $('#other-langs');
+    for (var i=0; i<langs_without_pos.length; i++) {
+	var lang = langs_without_pos[i];
+	$other_langs.append('<input type="checkbox" name="'+lang+'-enabled" id="'+lang+'-enabled" />');
+	/*
+	if (lang === "zh-cn") {
+	    console.log("Mapping zh-cn => zh");
+	    lang = "zh";
+	}
+	if (lang === "zh-tw") {
+	    console.log("Mapping zh-tw => zh");
+	    lang = "zh";
+	}
+*/
+	var lang_full = isoLangs[lang].name;
+	var lang_native_full = isoLangs[lang].nativeName;
+	var opt_title = (lang_full !== lang_native_full) ? 'title="'+lang_native_full+'"' : "";
+	
+	$other_langs.append('<span style="padding-right: 10px;" ' + opt_title + '>'+lang_full+'</span> ');
+	
+    }
+	
+
+    
+    $('#search-submit').click(function(event) {
+	event.preventDefault();
+
+	var action = $('#search-form').attr("action");
+
+	var arg_indent = $('#indent').attr('value');
+	var arg_wt = $('#wt').attr('value');
+	var q_text = $('#q').val();
+
+	var fields = [];
+	var langs_with_pos = [ "da", "de", "en", "nl", "pt", "se" ];
+	var universal_pos_tags = [ "VERB", "NOUN", "ADJ", "ADV", "ADP", "CONJ", "DET", "NUM", "PRT", "X" ];
+
+	for (var l=0; l<langs_with_pos.length; l++) {
+	    var lang = langs_with_pos[l];
+	    for (var t=0; t<universal_pos_tags.length; t++) {
+		var tag = universal_pos_tags[t];
+		var lang_tag_id = lang+"-"+tag+"-htrctoken-cb";
+		var $lang_tag_cb = $('#'+lang_tag_id);
+		if ($lang_tag_cb.is(':checked')) {
+		    var lang_tag_field = "xxxx"+lang+"_"+tag+"_htrctoken";
+		fields.push(lang_tag_field+":"+q_text);
+		}
+	    }
+	}
+	
+	var arg_q = fields.join(" OR ");
+
+
+	// Example search on one of the htrc-full-ef fields is: 
+	//  q=xxxxen_NOUN_htrctoken:farming
+
+	var args = { q: arg_q, indent: arg_indent, wt: arg_wt };
+
+	$.ajax({
+	    type: 'GET',
+	    url: action,
+	    data: args,
+	    dataType: 'json',
+	    success: show_results,
+	    error: ajax_error
+	});
+
+    });
+
+});
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/iso-639-1.js
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/iso-639-1.js	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/iso-639-1.js	(revision 31383)
@@ -0,0 +1,754 @@
+/**
+ * @author Phil Teare
+ * using wikipedia data
+ */
+
+// Based on: http://stackoverflow.com/questions/3217492/list-of-language-codes-in-yaml-or-json
+// Downloaded from: http://pastebin.com/raw/ppdMS687
+
+var isoLangs = {
+    "ab":{
+        "name":"Abkhaz",
+        "nativeName":"Ð°Ò§ÑÑÐ°"
+    },
+    "aa":{
+        "name":"Afar",
+        "nativeName":"Afaraf"
+    },
+    "af":{
+        "name":"Afrikaans",
+        "nativeName":"Afrikaans"
+    },
+    "ak":{
+        "name":"Akan",
+        "nativeName":"Akan"
+    },
+    "sq":{
+        "name":"Albanian",
+        "nativeName":"Shqip"
+    },
+    "am":{
+        "name":"Amharic",
+        "nativeName":"á áá­á"
+    },
+    "ar":{
+        "name":"Arabic",
+        "nativeName":"Ø§ÙØ¹Ø±ØšÙØ©"
+    },
+    "an":{
+        "name":"Aragonese",
+        "nativeName":"AragonÃ©s"
+    },
+    "hy":{
+        "name":"Armenian",
+        "nativeName":"ÕÕ¡ÕµÕ¥ÖÕ¥Õ¶"
+    },
+    "as":{
+        "name":"Assamese",
+        "nativeName":"àŠ
+àŠžàŠ®à§àŠ¯àŠŒàŠŸ"
+    },
+    "av":{
+        "name":"Avaric",
+        "nativeName":"Ð°Ð²Ð°Ñ ÐŒÐ°ÑÓ, ÐŒÐ°Ð³ÓÐ°ÑÑÐ» ÐŒÐ°ÑÓ"
+    },
+    "ae":{
+        "name":"Avestan",
+        "nativeName":"avesta"
+    },
+    "ay":{
+        "name":"Aymara",
+        "nativeName":"aymar aru"
+    },
+    "az":{
+        "name":"Azerbaijani",
+        "nativeName":"azÉrbaycan dili"
+    },
+    "bm":{
+        "name":"Bambara",
+        "nativeName":"bamanankan"
+    },
+    "ba":{
+        "name":"Bashkir",
+        "nativeName":"Ð±Ð°ÑÒ¡ÐŸÑÑ ÑÐµÐ»Ðµ"
+    },
+    "eu":{
+        "name":"Basque",
+        "nativeName":"euskara, euskera"
+    },
+    "be":{
+        "name":"Belarusian",
+        "nativeName":"ÐÐµÐ»Ð°ÑÑÑÐºÐ°Ñ"
+    },
+    "bn":{
+        "name":"Bengali",
+        "nativeName":"àŠ¬àŠŸàŠàŠ²àŠŸ"
+    },
+    "bh":{
+        "name":"Bihari",
+        "nativeName":"à€­à¥à€à€ªà¥à€°à¥"
+    },
+    "bi":{
+        "name":"Bislama",
+        "nativeName":"Bislama"
+    },
+    "bs":{
+        "name":"Bosnian",
+        "nativeName":"bosanski jezik"
+    },
+    "br":{
+        "name":"Breton",
+        "nativeName":"brezhoneg"
+    },
+    "bg":{
+        "name":"Bulgarian",
+        "nativeName":"Ð±ÑÐ»Ð³Ð°ÑÑÐºÐž ÐµÐ·ÐžÐº"
+    },
+    "my":{
+        "name":"Burmese",
+        "nativeName":"ááá¬á
+á¬"
+    },
+    "ca":{
+        "name":"Catalan; Valencian",
+        "nativeName":"CatalÃ "
+    },
+    "ch":{
+        "name":"Chamorro",
+        "nativeName":"Chamoru"
+    },
+    "ce":{
+        "name":"Chechen",
+        "nativeName":"ÐœÐŸÑ
+ÑÐžÐ¹Ðœ ÐŒÐŸÑÑ"
+    },
+    "ny":{
+        "name":"Chichewa; Chewa; Nyanja",
+        "nativeName":"chiCheÅµa, chinyanja"
+    },
+    "zh":{
+        "name":"Chinese",
+        "nativeName":"äž­æ (ZhÅngwÃ©n), æ±è¯­, æŒ¢èª"
+    },
+    "zh-cn":{
+        "name":"Mainland Chinese",
+        "nativeName":"äž­æ (ZhÅngwÃ©n), æ±è¯­, æŒ¢èª"
+    },
+    "zh-tw":{
+        "name":"Taiwanese Chinese (Traditional Characters)",
+        "nativeName":"äž­æ (ZhÅngwÃ©n), æ±è¯­, æŒ¢èª"
+    },
+    "cv":{
+        "name":"Chuvash",
+        "nativeName":"ÑÓÐ²Ð°Ñ ÑÓÐ»Ñ
+Ðž"
+    },
+    "kw":{
+        "name":"Cornish",
+        "nativeName":"Kernewek"
+    },
+    "co":{
+        "name":"Corsican",
+        "nativeName":"corsu, lingua corsa"
+    },
+    "cr":{
+        "name":"Cree",
+        "nativeName":"ááŠáá­ááá£"
+    },
+    "hr":{
+        "name":"Croatian",
+        "nativeName":"hrvatski"
+    },
+    "cs":{
+        "name":"Czech",
+        "nativeName":"Äesky, ÄeÅ¡tina"
+    },
+    "da":{
+        "name":"Danish",
+        "nativeName":"dansk"
+    },
+    "dv":{
+        "name":"Divehi; Dhivehi; Maldivian;",
+        "nativeName":"ÞÞšÞÞ¬ÞÞš"
+    },
+    "nl":{
+        "name":"Dutch",
+        "nativeName":"Nederlands, Vlaams"
+    },
+    "en":{
+        "name":"English",
+        "nativeName":"English"
+    },
+    "eo":{
+        "name":"Esperanto",
+        "nativeName":"Esperanto"
+    },
+    "et":{
+        "name":"Estonian",
+        "nativeName":"eesti, eesti keel"
+    },
+    "ee":{
+        "name":"Ewe",
+        "nativeName":"EÊegbe"
+    },
+    "fo":{
+        "name":"Faroese",
+        "nativeName":"fÃžroyskt"
+    },
+    "fj":{
+        "name":"Fijian",
+        "nativeName":"vosa Vakaviti"
+    },
+    "fi":{
+        "name":"Finnish",
+        "nativeName":"suomi, suomen kieli"
+    },
+    "fr":{
+        "name":"French",
+        "nativeName":"franÃ§ais, langue franÃ§aise"
+    },
+    "ff":{
+        "name":"Fula; Fulah; Pulaar; Pular",
+        "nativeName":"Fulfulde, Pulaar, Pular"
+    },
+    "gl":{
+        "name":"Galician",
+        "nativeName":"Galego"
+    },
+    "ka":{
+        "name":"Georgian",
+        "nativeName":"á¥áá áá£áá"
+    },
+    "de":{
+        "name":"German",
+        "nativeName":"Deutsch"
+    },
+    "el":{
+        "name":"Greek, Modern",
+        "nativeName":"ÎÎ»Î»Î·ÎœÎ¹ÎºÎ¬"
+    },
+    "gn":{
+        "name":"GuaranÃ­",
+        "nativeName":"AvaÃ±eáºœ"
+    },
+    "gu":{
+        "name":"Gujarati",
+        "nativeName":"àªà«àªàª°àªŸàª€à«"
+    },
+    "ht":{
+        "name":"Haitian; Haitian Creole",
+        "nativeName":"KreyÃ²l ayisyen"
+    },
+    "ha":{
+        "name":"Hausa",
+        "nativeName":"Hausa, ÙÙÙÙØ³Ù"
+    },
+    "he":{
+        "name":"Hebrew (modern)",
+        "nativeName":"×¢××š××ª"
+    },
+    "hz":{
+        "name":"Herero",
+        "nativeName":"Otjiherero"
+    },
+    "hi":{
+        "name":"Hindi",
+        "nativeName":"à€¹à€¿à€šà¥à€Šà¥, à€¹à€¿à€à€Šà¥"
+    },
+    "ho":{
+        "name":"Hiri Motu",
+        "nativeName":"Hiri Motu"
+    },
+    "hu":{
+        "name":"Hungarian",
+        "nativeName":"Magyar"
+    },
+    "ia":{
+        "name":"Interlingua",
+        "nativeName":"Interlingua"
+    },
+    "id":{
+        "name":"Indonesian",
+        "nativeName":"Bahasa Indonesia"
+    },
+    "ie":{
+        "name":"Interlingue",
+        "nativeName":"Originally called Occidental; then Interlingue after WWII"
+    },
+    "ga":{
+        "name":"Irish",
+        "nativeName":"Gaeilge"
+    },
+    "ig":{
+        "name":"Igbo",
+        "nativeName":"Asá»¥sá»¥ Igbo"
+    },
+    "ik":{
+        "name":"Inupiaq",
+        "nativeName":"IÃ±upiaq, IÃ±upiatun"
+    },
+    "io":{
+        "name":"Ido",
+        "nativeName":"Ido"
+    },
+    "is":{
+        "name":"Icelandic",
+        "nativeName":"Ãslenska"
+    },
+    "it":{
+        "name":"Italian",
+        "nativeName":"Italiano"
+    },
+    "iu":{
+        "name":"Inuktitut",
+        "nativeName":"ááááááŠ"
+    },
+    "ja":{
+        "name":"Japanese",
+        "nativeName":"æ¥æ¬èª (ã«ã»ããïŒã«ã£ãœãã)"
+    },
+    "jv":{
+        "name":"Javanese",
+        "nativeName":"basa Jawa"
+    },
+    "kl":{
+        "name":"Kalaallisut, Greenlandic",
+        "nativeName":"kalaallisut, kalaallit oqaasii"
+    },
+    "kn":{
+        "name":"Kannada",
+        "nativeName":"à²à²šà³à²šà²¡"
+    },
+    "kr":{
+        "name":"Kanuri",
+        "nativeName":"Kanuri"
+    },
+    "ks":{
+        "name":"Kashmiri",
+        "nativeName":"à€à€¶à¥à€®à¥à€°à¥, ÙØŽÙ
+ÙØ±Ùâ"
+    },
+    "kk":{
+        "name":"Kazakh",
+        "nativeName":"ÒÐ°Ð·Ð°Ò ÑÑÐ»Ñ"
+    },
+    "km":{
+        "name":"Khmer",
+        "nativeName":"áá¶áá¶ááááá"
+    },
+    "ki":{
+        "name":"Kikuyu, Gikuyu",
+        "nativeName":"GÄ©kÅ©yÅ©"
+    },
+    "rw":{
+        "name":"Kinyarwanda",
+        "nativeName":"Ikinyarwanda"
+    },
+    "ky":{
+        "name":"Kirghiz, Kyrgyz",
+        "nativeName":"ÐºÑÑÐ³ÑÐ· ÑÐžÐ»Ðž"
+    },
+    "kv":{
+        "name":"Komi",
+        "nativeName":"ÐºÐŸÐŒÐž ÐºÑÐ²"
+    },
+    "kg":{
+        "name":"Kongo",
+        "nativeName":"KiKongo"
+    },
+    "ko":{
+        "name":"Korean",
+        "nativeName":"íêµ­ìŽ (éåèª), ì¡°ì ë§ (æé®®èª)"
+    },
+    "ku":{
+        "name":"Kurdish",
+        "nativeName":"KurdÃ®, ÙÙØ±Ø¯Ûâ"
+    },
+    "kj":{
+        "name":"Kwanyama, Kuanyama",
+        "nativeName":"Kuanyama"
+    },
+    "la":{
+        "name":"Latin",
+        "nativeName":"latine, lingua latina"
+    },
+    "lb":{
+        "name":"Luxembourgish, Letzeburgesch",
+        "nativeName":"LÃ«tzebuergesch"
+    },
+    "lg":{
+        "name":"Luganda",
+        "nativeName":"Luganda"
+    },
+    "li":{
+        "name":"Limburgish, Limburgan, Limburger",
+        "nativeName":"Limburgs"
+    },
+    "ln":{
+        "name":"Lingala",
+        "nativeName":"LingÃ¡la"
+    },
+    "lo":{
+        "name":"Lao",
+        "nativeName":"àºàº²àºªàº²àº¥àº²àº§"
+    },
+    "lt":{
+        "name":"Lithuanian",
+        "nativeName":"lietuviÅ³ kalba"
+    },
+    "lu":{
+        "name":"Luba-Katanga",
+        "nativeName":""
+    },
+    "lv":{
+        "name":"Latvian",
+        "nativeName":"latvieÅ¡u valoda"
+    },
+    "gv":{
+        "name":"Manx",
+        "nativeName":"Gaelg, Gailck"
+    },
+    "mk":{
+        "name":"Macedonian",
+        "nativeName":"ÐŒÐ°ÐºÐµÐŽÐŸÐœÑÐºÐž ÑÐ°Ð·ÐžÐº"
+    },
+    "mg":{
+        "name":"Malagasy",
+        "nativeName":"Malagasy fiteny"
+    },
+    "ms":{
+        "name":"Malay",
+        "nativeName":"bahasa Melayu, ØšÙØ§Ø³ Ù
+ÙØ§ÙÙâ"
+    },
+    "ml":{
+        "name":"Malayalam",
+        "nativeName":"àŽ®àŽ²àŽ¯àŽŸàŽ³àŽ"
+    },
+    "mt":{
+        "name":"Maltese",
+        "nativeName":"Malti"
+    },
+    "mi":{
+        "name":"MÄori",
+        "nativeName":"te reo MÄori"
+    },
+    "mr":{
+        "name":"Marathi (MarÄá¹­hÄ«)",
+        "nativeName":"à€®à€°à€Ÿà€ à¥"
+    },
+    "mh":{
+        "name":"Marshallese",
+        "nativeName":"Kajin MÌ§ajeÄŒ"
+    },
+    "mn":{
+        "name":"Mongolian",
+        "nativeName":"ÐŒÐŸÐœÐ³ÐŸÐ»"
+    },
+    "na":{
+        "name":"Nauru",
+        "nativeName":"EkakairÅ© Naoero"
+    },
+    "nv":{
+        "name":"Navajo, Navaho",
+        "nativeName":"DinÃ© bizaad, DinÃ©kÊŒehÇ°Ã­"
+    },
+    "nb":{
+        "name":"Norwegian BokmÃ¥l",
+        "nativeName":"Norsk bokmÃ¥l"
+    },
+    "nd":{
+        "name":"North Ndebele",
+        "nativeName":"isiNdebele"
+    },
+    "ne":{
+        "name":"Nepali",
+        "nativeName":"à€šà¥à€ªà€Ÿà€²à¥"
+    },
+    "ng":{
+        "name":"Ndonga",
+        "nativeName":"Owambo"
+    },
+    "nn":{
+        "name":"Norwegian Nynorsk",
+        "nativeName":"Norsk nynorsk"
+    },
+    "no":{
+        "name":"Norwegian",
+        "nativeName":"Norsk"
+    },
+    "ii":{
+        "name":"Nuosu",
+        "nativeName":"êê ê¿ Nuosuhxop"
+    },
+    "nr":{
+        "name":"South Ndebele",
+        "nativeName":"isiNdebele"
+    },
+    "oc":{
+        "name":"Occitan",
+        "nativeName":"Occitan"
+    },
+    "oj":{
+        "name":"Ojibwe, Ojibwa",
+        "nativeName":"ááááá¯á§áá"
+    },
+    "cu":{
+        "name":"Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic",
+        "nativeName":"Ñ©Ð·ÑÐºÑ ÑÐ»ÐŸÐ²Ñ£ÐœÑÑÐºÑ"
+    },
+    "om":{
+        "name":"Oromo",
+        "nativeName":"Afaan Oromoo"
+    },
+    "or":{
+        "name":"Oriya",
+        "nativeName":"à¬à¬¡à¬Œà¬¿à¬"
+    },
+    "os":{
+        "name":"Ossetian, Ossetic",
+        "nativeName":"ÐžÑÐŸÐœ ÃŠÐ²Ð·Ð°Ð³"
+    },
+    "pa":{
+        "name":"Panjabi, Punjabi",
+        "nativeName":"àšªà©°àšàšŸàš¬à©, ÙŸÙØ¬Ø§ØšÛâ"
+    },
+    "pi":{
+        "name":"PÄli",
+        "nativeName":"à€ªà€Ÿà€Žà€¿"
+    },
+    "fa":{
+        "name":"Persian",
+        "nativeName":"ÙØ§Ø±Ø³Û"
+    },
+    "pl":{
+        "name":"Polish",
+        "nativeName":"polski"
+    },
+    "ps":{
+        "name":"Pashto, Pushto",
+        "nativeName":"ÙŸÚØªÙ"
+    },
+    "pt":{
+        "name":"Portuguese",
+        "nativeName":"PortuguÃªs"
+    },
+    "qu":{
+        "name":"Quechua",
+        "nativeName":"Runa Simi, Kichwa"
+    },
+    "rm":{
+        "name":"Romansh",
+        "nativeName":"rumantsch grischun"
+    },
+    "rn":{
+        "name":"Kirundi",
+        "nativeName":"kiRundi"
+    },
+    "ro":{
+        "name":"Romanian, Moldavian, Moldovan",
+        "nativeName":"romÃ¢nÄ"
+    },
+    "ru":{
+        "name":"Russian",
+        "nativeName":"ÑÑÑÑÐºÐžÐ¹ ÑÐ·ÑÐº"
+    },
+    "sa":{
+        "name":"Sanskrit (Saá¹ská¹ta)",
+        "nativeName":"à€žà€à€žà¥à€à¥à€€à€®à¥"
+    },
+    "sc":{
+        "name":"Sardinian",
+        "nativeName":"sardu"
+    },
+    "sd":{
+        "name":"Sindhi",
+        "nativeName":"à€žà€¿à€šà¥à€§à¥, Ø³ÙÚÙØ Ø³ÙØ¯ÚŸÛâ"
+    },
+    "se":{
+        "name":"Northern Sami",
+        "nativeName":"DavvisÃ¡megiella"
+    },
+    "sm":{
+        "name":"Samoan",
+        "nativeName":"gagana faa Samoa"
+    },
+    "sg":{
+        "name":"Sango",
+        "nativeName":"yÃ¢ngÃ¢ tÃ® sÃ€ngÃ¶"
+    },
+    "sr":{
+        "name":"Serbian",
+        "nativeName":"ÑÑÐ¿ÑÐºÐž ÑÐµÐ·ÐžÐº"
+    },
+    "gd":{
+        "name":"Scottish Gaelic; Gaelic",
+        "nativeName":"GÃ idhlig"
+    },
+    "sn":{
+        "name":"Shona",
+        "nativeName":"chiShona"
+    },
+    "si":{
+        "name":"Sinhala, Sinhalese",
+        "nativeName":"à·à·à¶à·à¶œ"
+    },
+    "sk":{
+        "name":"Slovak",
+        "nativeName":"slovenÄina"
+    },
+    "sl":{
+        "name":"Slovene",
+        "nativeName":"slovenÅ¡Äina"
+    },
+    "so":{
+        "name":"Somali",
+        "nativeName":"Soomaaliga, af Soomaali"
+    },
+    "st":{
+        "name":"Southern Sotho",
+        "nativeName":"Sesotho"
+    },
+    "es":{
+        "name":"Spanish; Castilian",
+        "nativeName":"espaÃ±ol, castellano"
+    },
+    "su":{
+        "name":"Sundanese",
+        "nativeName":"Basa Sunda"
+    },
+    "sw":{
+        "name":"Swahili",
+        "nativeName":"Kiswahili"
+    },
+    "ss":{
+        "name":"Swati",
+        "nativeName":"SiSwati"
+    },
+    "sv":{
+        "name":"Swedish",
+        "nativeName":"svenska"
+    },
+    "ta":{
+        "name":"Tamil",
+        "nativeName":"à®€à®®à®¿à®Žà¯"
+    },
+    "te":{
+        "name":"Telugu",
+        "nativeName":"à°€à±à°²à±à°à±"
+    },
+    "tg":{
+        "name":"Tajik",
+        "nativeName":"ÑÐŸÒ·ÐžÐºÓ£, toÄikÄ«, ØªØ§Ø¬ÛÚ©Ûâ"
+    },
+    "th":{
+        "name":"Thai",
+        "nativeName":"à¹àžàž¢"
+    },
+    "ti":{
+        "name":"Tigrinya",
+        "nativeName":"áµáá­á"
+    },
+    "bo":{
+        "name":"Tibetan Standard, Tibetan, Central",
+        "nativeName":"àœàœŒàœàŒàœ¡àœ²àœ"
+    },
+    "tk":{
+        "name":"Turkmen",
+        "nativeName":"TÃŒrkmen, Ð¢Ò¯ÑÐºÐŒÐµÐœ"
+    },
+    "tl":{
+        "name":"Tagalog",
+        "nativeName":"Wikang Tagalog, áááá
+á áááááá"
+    },
+    "tn":{
+        "name":"Tswana",
+        "nativeName":"Setswana"
+    },
+    "to":{
+        "name":"Tonga (Tonga Islands)",
+        "nativeName":"faka Tonga"
+    },
+    "tr":{
+        "name":"Turkish",
+        "nativeName":"TÃŒrkÃ§e"
+    },
+    "ts":{
+        "name":"Tsonga",
+        "nativeName":"Xitsonga"
+    },
+    "tt":{
+        "name":"Tatar",
+        "nativeName":"ÑÐ°ÑÐ°ÑÑÐ°, tatarÃ§a, ØªØ§ØªØ§Ø±ÚØ§â"
+    },
+    "tw":{
+        "name":"Twi",
+        "nativeName":"Twi"
+    },
+    "ty":{
+        "name":"Tahitian",
+        "nativeName":"Reo Tahiti"
+    },
+    "ug":{
+        "name":"Uighur, Uyghur",
+        "nativeName":"UyÆ£urqÉ, ØŠÛÙØºÛØ±ÚÛâ"
+    },
+    "uk":{
+        "name":"Ukrainian",
+        "nativeName":"ÑÐºÑÐ°ÑÐœÑÑÐºÐ°"
+    },
+    "ur":{
+        "name":"Urdu",
+        "nativeName":"Ø§Ø±Ø¯Ù"
+    },
+    "uz":{
+        "name":"Uzbek",
+        "nativeName":"zbek, ÐÐ·Ð±ÐµÐº, Ø£ÛØ²ØšÛÙâ"
+    },
+    "ve":{
+        "name":"Venda",
+        "nativeName":"Tshivenáža"
+    },
+    "vi":{
+        "name":"Vietnamese",
+        "nativeName":"Tiáº¿ng Viá»t"
+    },
+    "vo":{
+        "name":"VolapÃŒk",
+        "nativeName":"VolapÃŒk"
+    },
+    "wa":{
+        "name":"Walloon",
+        "nativeName":"Walon"
+    },
+    "cy":{
+        "name":"Welsh",
+        "nativeName":"Cymraeg"
+    },
+    "wo":{
+        "name":"Wolof",
+        "nativeName":"Wollof"
+    },
+    "fy":{
+        "name":"Western Frisian",
+        "nativeName":"Frysk"
+    },
+    "xh":{
+        "name":"Xhosa",
+        "nativeName":"isiXhosa"
+    },
+    "yi":{
+        "name":"Yiddish",
+        "nativeName":"××ÖŽ×××©"
+    },
+    "yo":{
+        "name":"Yoruba",
+        "nativeName":"YorÃ¹bÃ¡"
+    },
+    "za":{
+        "name":"Zhuang, Chuang",
+        "nativeName":"SaÉ¯ cueÅÆ
+, Saw cuengh"
+    }
+}
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/luke_lang_mappings.html
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/luke_lang_mappings.html	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/luke_lang_mappings.html	(revision 31383)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=windows-1252">
+        <title>Luke HTRC Language POS Mappings</title>
+        <link rel="shortcut icon" href="https://analytics.hathitrust.org/assets/images/favicon.ico">
+
+        <script src="HTRC_Mashup--Home_files/jquery.js"></script>
+	
+	<script src="luke_lang_mappings.js"></script>
+  </head>
+  <body>
+    <div id="js-excerpt">
+    </div>
+  <body>
+</html>
Index: other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/luke_lang_mappings.js
===================================================================
--- other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/luke_lang_mappings.js	(revision 31383)
+++ other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/luke_lang_mappings.js	(revision 31383)
@@ -0,0 +1,59 @@
+
+var langs_with_pos = [];
+var langs_without_pos = [];
+
+function ajax_error(jqXHR, textStatus, errorThrown) {
+    alert('An error occurred... Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!');
+
+    console.log('jqXHR:' + jqXHR);
+    console.log('textStatus:' + textStatus);
+    console.log('errorThrown:' + errorThrown);
+}		
+
+
+$(function() {
+    //var luke_url="solr1.ischool.illinois.edu/solr/htrc-full-ef_shard6_replica1/admin/luke";
+    var luke_url="htrc-full-ef_shard6_replica1/admin/luke";
+    
+    $.ajax({
+	type: 'GET',
+	url: luke_url,
+	dataType: 'xml',
+	success: function(xml_data) {
+	    var $fields = $(xml_data).find("lst[name='fields']");
+
+	    var langs_with_pos_keys = {};
+	    
+	    $fields.children().each(function() {
+		var name = $(this).attr("name");
+		if (name.endsWith("_htrctoken")) {
+		    if (name.startsWith("xxxx")) {
+			var num_underscores = (name.match(/_/g) || []).length;
+			if (num_underscores == 2) {
+			    var lang = name.replace(/^xxxx/,"").replace(/_.*?_htrctoken$/,"");
+			    langs_with_pos_keys[lang]=1;
+			}
+			else {
+			    var lang = name.replace(/^xxxx/,"").replace(/_htrctoken$/,"");
+			    langs_without_pos.push(lang);
+			}
+		    }
+		}
+		
+	    });
+
+	    // Get the keys
+	    langs_with_pos = $.map(langs_with_pos_keys, function(v, i){
+		return i;
+	    });
+	    
+	    var $js_excerpt = $('#js-excerpt');
+	    
+	    $js_excerpt.append("var langs_with_pos =" + JSON.stringify(langs_with_pos) + ";" + "<br/>");
+	    $js_excerpt.append("var langs_without_pos =" + JSON.stringify(langs_without_pos) + ";");
+	    
+	    //console.log("xml_data = " + $fields.html());
+	},
+	error: ajax_error
+    });
+});
