Repository 'cs_overview'
hg clone https://toolshed.g2.bx.psu.edu/repos/immport-devteam/cs_overview

Changeset 2:a64ece32a01a (2020-07-28)
Previous changeset 1:bca68066a957 (2020-05-20)
Commit message:
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/cs_overview commit a46097db0b6056e1125237393eb6974cfd51eb41"
modified:
crossSampleOverview.xml
test-data/csBoxplotData.json
test-data/out.html
added:
crossSampleOverview.py
css/parallelCoordinates.css
images/barssm.png
js/Editor-1.5.6/css/dataTables.editor.css
js/Editor-1.5.6/css/editor.bootstrap.css
js/Editor-1.5.6/css/editor.bootstrap.min.css
js/Editor-1.5.6/css/editor.dataTables.css
js/Editor-1.5.6/css/editor.dataTables.min.css
js/Editor-1.5.6/css/editor.foundation.css
js/Editor-1.5.6/css/editor.foundation.min.css
js/Editor-1.5.6/css/editor.jqueryui.css
js/Editor-1.5.6/css/editor.jqueryui.min.css
js/Editor-1.5.6/css/scss/bubble.scss
js/Editor-1.5.6/css/scss/datatable.scss
js/Editor-1.5.6/css/scss/datetime.scss
js/Editor-1.5.6/css/scss/envelope.scss
js/Editor-1.5.6/css/scss/fields.scss
js/Editor-1.5.6/css/scss/inline.scss
js/Editor-1.5.6/css/scss/lightbox.scss
js/Editor-1.5.6/css/scss/main.scss
js/Editor-1.5.6/css/scss/mixins.scss
js/Editor-1.5.6/css/scss/upload.scss
js/Editor-1.5.6/images/ajax-loader-small.gif
js/Editor-1.5.6/images/ajax-loader.gif
js/Editor-1.5.6/images/calender.png
js/Editor-1.5.6/images/close.png
js/Editor-1.5.6/images/shadow_left.png
js/Editor-1.5.6/images/shadow_right.png
js/Editor-1.5.6/js/dataTables.editor.js
js/Editor-1.5.6/js/dataTables.editor.min.js
js/Editor-1.5.6/js/editor.bootstrap.js
js/Editor-1.5.6/js/editor.bootstrap.min.js
js/Editor-1.5.6/js/editor.foundation.js
js/Editor-1.5.6/js/editor.foundation.min.js
js/Editor-1.5.6/js/editor.jqueryui.js
js/Editor-1.5.6/js/editor.jqueryui.min.js
js/boxplots.js
js/color_palette.js
js/crossSamplePlots.js
js/csOverview.js
js/pCoordCSstats.js
js/pCoordMFIstats.js
templates/csOverview.template
b
diff -r bca68066a957 -r a64ece32a01a crossSampleOverview.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crossSampleOverview.py Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,212 @@
+#!/usr/bin/env python
+
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+
+# version 1.1 -- August 2017
+# added checks for consistency between input files
+# and upper limit on nb of cluster to look at
+
+from __future__ import print_function
+import sys
+import os
+import logging
+import fileinput
+import pandas as pd
+from argparse import ArgumentParser
+from jinja2 import Environment, FileSystemLoader
+from shutil import copyfile
+from collections import defaultdict
+
+
+def check_pops(mfi_file, stat1):
+    df = pd.read_table(mfi_file)
+    df1 = pd.read_table(stat1)
+    nb_pop = len(set(df.Population))
+    nb_pop1 = len(df1.columns) - 2
+    if (nb_pop > 40):
+        sys.stderr.write("There are " + str(nb_pop) + " in the input file.")
+        sys.exit(1)
+    if (nb_pop != nb_pop1):
+        sys.exit(2)
+
+
+def panel_to_json_string(df):
+    # from http://stackoverflow.com/questions/28078118/merge-many-json-strings-with-python-pandas-inputs
+    def __merge_stream(key, stream):
+        return '"' + key + '"' + ': ' + stream + ', '
+    try:
+        if 'Unnamed: 0' in df.columns:
+            df = df.drop(['Unnamed: 0'], axis=1)
+        stream = '{'
+        for index, subdf in df.groupby(level=0):
+            stream += __merge_stream(index, df.loc[index, :, :].droplevel(0).to_json())
+        # take out extra last comma
+        stream = stream[:-2]
+        # add the final paren
+        stream += '}'
+    except:
+        logging.exception('Panel Encoding did not work')
+    return stream
+
+
+def get_outliers(group, upper, lower):
+    cat = group.name
+    out = {}
+    for marker in group:
+        # skip population since upper and lower don't contain it, since it was made after a group by Population
+        if marker != 'Population':
+            out[marker] = group[(group[marker] > upper.loc[cat][marker]) | (group[marker] < lower.loc[cat][marker])][marker]
+    return out
+
+
+def get_boxplot_stats(all_data, mfi_file, output_json):
+    # modified code from http://bokeh.pydata.org/en/latest/docs/gallery/boxplot.html
+    # Get initial MFI values
+    mfi = pd.read_table(mfi_file)
+    mfi = mfi.set_index('Population')
+
+    df = pd.read_table(all_data)
+    # check if ever some pops not in cs_files
+    missing_pop = [x for x in mfi.index if x not in set(df.Population)]
+
+    if (missing_pop):
+        zeros = {}
+        for m in df.columns:
+            zeros[m] = [0 for x in missing_pop]
+        tmpdf = pd.DataFrame(zeros)
+        tmpdf.Population = missing_pop
+        df = df.append(tmpdf)
+
+    pops = df.groupby('Population')
+    q1 = pops.quantile(q=0.25)
+    q2 = pops.quantile(q=0.5)
+    q3 = pops.quantile(q=0.75)
+    iqr = q3 - q1
+    upper = q3 + 1.5*iqr
+    lower = q1 - 1.5*iqr
+    resampled = False
+    # get outliers
+    out = pops.apply(get_outliers, upper, lower).dropna()
+    outliers = defaultdict(dict)
+    for population in set(df.Population):
+        for marker in df.columns:
+            if marker != 'Population':
+                tmp_outliers = list(out[population][marker])
+                if (len(list(out[population][marker])) > 100):
+                    tmp_outliers = list(out[population][marker].sample(n=100))
+                    resampled = True
+                outliers[population][marker] = tmp_outliers
+    outdf = pd.DataFrame(outliers)
+
+    data = pd.concat({'q1': q1,
+            'q2': q2,
+            'q3': q3,
+            'upper': upper,
+            'lower': lower,
+            'outliers': outdf.T,
+            'mfi': mfi}, keys=['q1','q2','q3','upper','lower','outliers','mfi'])
+
+    with open(output_json, "w") as js_all:
+        js_all.write(panel_to_json_string(data))
+
+    return resampled
+
+
+def cs_overview(input_file, input_mfi, init_mfi, output_file, output_dir, tools_dir, cs_files):
+    os.mkdir(output_dir)
+
+    env = Environment(loader=FileSystemLoader(tools_dir + "/templates"))
+    template = env.get_template("csOverview.template")
+
+    real_directory = output_dir.replace("/job_working_directory", "")
+    context = {'outputDirectory': real_directory}
+    overview = template.render(**context)
+    with open(output_file, "w") as outf:
+        outf.write(overview)
+
+    cs_overview_file = output_dir + "/csOverview.tsv"
+    copyfile(input_file, cs_overview_file)
+
+    cs_overview_mfis = output_dir + "/csAllMFIs.tsv"
+    copyfile(input_mfi, cs_overview_mfis)
+
+    # Get all the data to calculate quantiles, IRC and outliers.
+    tmp_all_data = "csAllData.tsv"
+    with open(tmp_all_data, "a") as alldata:
+        # assumes that the files have ran through flock and CS and therefore have the same headers
+        df1 = pd.read_table(cs_files[0])
+        df1.to_csv(alldata, sep="\t", header=True, index=False)
+        for i in range(1, len(cs_files)):
+            df = pd.read_table(cs_files[i])
+            df.to_csv(alldata, sep="\t", header=False, index=False)
+
+    cs_boxplot_data = output_dir + "/csBoxplotData.json"
+    resampled = get_boxplot_stats(tmp_all_data, init_mfi, cs_boxplot_data)
+    if resampled:
+        to_find = '<div id="outlierWarning" style="display:none;">'
+        to_replace = '<div id="outlierWarning">'
+        ## yay python 2.7
+        ro = fileinput.input(output_file, inplace=True, backup=".bak")
+        for roline in ro:
+            print(roline.replace(to_find, to_replace), end='')
+        ro.close()
+
+    return
+
+
+if __name__ == "__main__":
+    parser = ArgumentParser(
+             prog="csOverview",
+             description="Generate an overview plot of crossSample results.")
+
+    parser.add_argument(
+            '-i',
+            dest="input_file",
+            required=True,
+            help="File location for the summary statistics from CrossSample.")
+
+    parser.add_argument(
+            '-I',
+            dest="input_mfi",
+            required=True,
+            help="File location for the MFI summary statistics from CrossSample.")
+
+    parser.add_argument(
+            '-s',
+            dest="cs_outputs",
+            required=True,
+            action='append',
+            help="File location for the CrossSample output files.")
+
+    parser.add_argument(
+            '-o',
+            dest="output_file",
+            required=True,
+            help="File location for the HTML output file.")
+
+    parser.add_argument(
+            '-m',
+            dest="mfi",
+            required=True,
+            help="File location for the MFI from FLOCK.")
+
+    parser.add_argument(
+            '-d',
+            dest="output_directory",
+            required=True,
+            help="Directory location for the html supporting files.")
+
+    parser.add_argument(
+            '-t',
+            dest="tool_directory",
+            required=True,
+            help="Location of the Tool Directory.")
+
+    args = parser.parse_args()
+
+    cs_files = [f for f in args.cs_outputs]
+    check_pops(args.mfi, args.input_file)
+    cs_overview(args.input_file, args.input_mfi, args.mfi, args.output_file, args.output_directory, args.tool_directory, cs_files)
b
diff -r bca68066a957 -r a64ece32a01a crossSampleOverview.xml
--- a/crossSampleOverview.xml Wed May 20 16:04:43 2020 -0400
+++ b/crossSampleOverview.xml Tue Jul 28 08:32:36 2020 -0400
[
@@ -1,25 +1,23 @@
-<tool id="cross_sample_overview" name="Generate overview information" version="1.1+galaxy0">
+<tool id="cross_sample_overview" name="Generate overview information" version="1.1+galaxy1">
   <description>of a multi-sample analysis.</description>
   <requirements>
-    <requirement type="package" version="2.0.2">ig-flowtools</requirement>
+    <requirement type="package" version="1.0.5">pandas</requirement>
+    <requirement type="package" version="2.11.2">jinja2</requirement>
   </requirements>
   <stdio>
     <exit_code range="1" level="fatal" description="There are too many populations in the input files. The maximum number of populations is 40." />
     <exit_code range="2" level="fatal" description="There are populations inconsistencies between provided inputs." />
+    <exit_code range="3:"/>
   </stdio>
   <command><![CDATA[
-    mkdir templates &&
-    mkdir -p static/flowtools &&
-    mkdir -p static/images/flowtools &&
-    export FLOWTOOL='which crossSampleOverview.py' &&
-    FLOWTOOLDIR=\$(dirname $FLOWTOOL) &&
-    cp $FLOWTOOLDIR/../share/templates/* templates/ &&
-    cp -r $FLOWTOOLDIR/../share/static/flowtools/* static/flowtools/ &&
-    cp $FLOWTOOLDIR/../share/static/images/flowtools/* static/images/flowtools/ &&
-    crossSampleOverview.py -i '${input}' -I '${inputmfi}' -o '${html_file}' -m '${mfi}' -d '${html_file.files_path}' -t 'templates/'
+    python '$__tool_directory__/crossSampleOverview.py' -i '${input}' -I '${inputmfi}' -o '${html_file}' -m '${mfi}' -d '${html_file.files_path}' -t '$__tool_directory__'
     #for $f in $cs_outputs
        -s $f
     #end for
+    ;
+    cp -r '$__tool_directory__'/js '${html_file.files_path}/';
+    cp -r '$__tool_directory__'/css '${html_file.files_path}/';
+    cp -r '$__tool_directory__'/images '${html_file.files_path}/';
   ]]>
   </command>
   <inputs>
@@ -47,7 +45,7 @@
       <output name="html_file" file="out.html" compare="sim_size">
         <extra_files type="file" name="csAllMFIs.tsv" value="csAllMFIs.tsv"/>
         <extra_files type="file" name="csOverview.tsv" value="csOverview.tsv"/>
-        <extra_files type="file" name="csBoxplotData.json" value="csBoxplotData.json" compare="contains"/>
+        <extra_files type="file" name="csBoxplotData.json" value="csBoxplotData.json" compare="sim_size"/>
       </output>
     </test>
   </tests>
b
diff -r bca68066a957 -r a64ece32a01a css/parallelCoordinates.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/css/parallelCoordinates.css Tue Jul 28 08:32:36 2020 -0400
b
@@ -0,0 +1,170 @@
+/*Chart*/
+.chartDiv {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    margin-left: 10px;
+    margin-right: 10px;
+    background-color: #ffffff;
+}
+/*This for stacked / bar plot*/
+.optionButtons{
+    padding-bottom: 8px;
+}
+.igbtn {
+    border-radius: 4px;
+    color: white;
+    background-color: #0E3163;
+    border:1px;
+    font-size: 14px;
+    font-weight: bold;
+    border-color: #0E3163;
+    padding: 6px 12px;
+    background: -webkit-linear-gradient(#0E3163, #3e6db0);
+    background: -o-linear-gradient(#0E3163, #3e6db0);
+    background: -moz-linear-gradient(#0E3163, #3e6db0);
+    background: linear-gradient(#0E3163, #3e6db0);
+}
+ #togglePlot {
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+    height: 60px;
+    width: 90px;
+    padding: 4px 8px 8px 4px;
+}
+/*DataTables config*/
+div.dt-buttons {
+    float: right;
+}
+th {
+    background-color:#3965A4;
+    color:#fff;
+    border-radius: 2px;
+    padding:6px 12px;
+    font-size:14px;
+    text-align: center;
+}
+.igtable th {
+  background: -webkit-linear-gradient(#0E3163, #3e6db0);
+  background: -o-linear-gradient(#0E3163, #3e6db0);
+  background: -moz-linear-gradient(#0E3163, #3e6db0);
+  background: linear-gradient(#0E3163, #3e6db0)
+}
+body td {
+    max-width: 50px;
+    font-size: 14px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+.pctable td {
+    max-width: 100px;
+}
+.dtable td {
+    max-width: 50px;
+    word-break: break-all;
+    word-wrap: break-word;
+}
+.popt thead {
+    display:none;
+}
+.popt td {
+    max-width: 40px;
+    word-break: break-all;
+    word-wrap: break-word;
+}
+div.dataTables_wrapper {
+    width: 95%;
+    margin: 0 auto;
+}
+/*Opacity widget*/
+.widget {
+  margin-top: 4px;
+  padding: 4px 4px 8px 4px;
+  margin-bottom: 10px
+  height: 36px;
+  line-height: 12px;
+  font-size: 12px;
+  text-align: center;
+ // float: right;
+}
+/*This section for coordinates plot*/
+.table th {
+    text-align: center;
+    padding: 10px;
+}
+.table {
+    width:100%;
+    border:0px solid;
+    border-collapse:collapse;
+    text-align:center;
+    font-size: 14px;
+}
+svg {
+  font: 10px sans-serif;
+}
+.background path {
+  fill: none;
+  stroke: #F0F0F0;
+  shape-rendering: crispEdges;
+}
+.foreground path {
+  fill: none;
+  stroke-opacity: .8;
+}
+.brush .extent {
+  fill-opacity: .3;
+  stroke: #fff;
+  shape-rendering: crispEdges;
+}
+.axis line,
+.axis path {
+  fill: none;
+  stroke: #000;
+  stroke-width: 2;
+  shape-rendering: crispEdges;
+}
+.axis text {
+  text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
+}
+.xlabel {
+  font-size: 14px;
+  fill: #808080;
+}
+.ylabel {
+  font-size: 16px;
+  fill: #808080;
+}
+/*This section for boxplots*/
+.box {
+  font: 10px sans-serif;
+}
+.box line,
+.box rect,
+.box circle {
+   fill: red;
+  stroke: #000;
+  stroke-width: 1px;
+}
+.box .center {
+  stroke-dasharray: 3,3;
+}
+.box .outlier {
+  fill: none;
+  stroke: #000;
+}
+.axisbp path,
+.axisbp line {
+  stroke-width: 1px;
+  fill:
+}
+.y.axisbp path {
+  stroke-width: 2;
+  stroke: #000;
+  fill: none;
+}
+.x.axisbp path {
+  fill: none;
+  stroke: #C8C8C8;
+  stroke-width: 0px;
+  shape-rendering: crispEdges;
+}
b
diff -r bca68066a957 -r a64ece32a01a images/barssm.png
b
Binary file images/barssm.png has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.bootstrap.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.bootstrap.css Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,590 @@\n+div.DTE div.DTE_Form_Error {\n+  display: none;\n+  color: #b11f1f;\n+}\n+\n+div.DTE_Field div.multi-value,\n+div.DTE_Field div.multi-restore {\n+  display: none;\n+  cursor: pointer;\n+}\n+div.DTE_Field div.multi-value span,\n+div.DTE_Field div.multi-restore span {\n+  display: block;\n+  color: #666;\n+}\n+div.DTE_Field div.multi-value:hover,\n+div.DTE_Field div.multi-restore:hover {\n+  background-color: #f1f1f1;\n+}\n+div.DTE_Field div.multi-restore {\n+  margin-top: 0.5em;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+}\n+div.DTE_Field:after {\n+  display: block;\n+  content: ".";\n+  height: 0;\n+  line-height: 0;\n+  clear: both;\n+  visibility: hidden;\n+}\n+\n+div.DTE_Inline {\n+  position: relative;\n+  display: table;\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons {\n+  display: table-cell;\n+  vertical-align: middle;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field {\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label {\n+  display: none;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input {\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button {\n+  margin: -6px 0 -6px 4px;\n+  padding: 5px;\n+}\n+div.DTE_Inline div.DTE_Field input[type="color"],\n+div.DTE_Inline div.DTE_Field input[type="date"],\n+div.DTE_Inline div.DTE_Field input[type="datetime"],\n+div.DTE_Inline div.DTE_Field input[type="datetime-local"],\n+div.DTE_Inline div.DTE_Field input[type="email"],\n+div.DTE_Inline div.DTE_Field input[type="month"],\n+div.DTE_Inline div.DTE_Field input[type="number"],\n+div.DTE_Inline div.DTE_Field input[type="password"],\n+div.DTE_Inline div.DTE_Field input[type="search"],\n+div.DTE_Inline div.DTE_Field input[type="tel"],\n+div.DTE_Inline div.DTE_Field input[type="text"],\n+div.DTE_Inline div.DTE_Field input[type="time"],\n+div.DTE_Inline div.DTE_Field input[type="url"],\n+div.DTE_Inline div.DTE_Field input[type="week"] {\n+  margin: -6px 0;\n+}\n+div.DTE_Inline.DTE_Processing:after {\n+  position: absolute;\n+  content: \' \';\n+  display: block;\n+  top: 4px;\n+  right: 10px;\n+  height: 12px;\n+  width: 17px;\n+  background: url("../images/ajax-loader-small.gif") no-repeat top left;\n+}\n+\n+span.dtr-data div.DTE_Inline {\n+  display: inline-table;\n+}\n+\n+div.DTE_Inline div.DTE_Field {\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Field > div {\n+  width: 100%;\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Field input.form-control {\n+  height: 30px;\n+}\n+div.DTE_Inline div.DTE_Field div.help-block {\n+  display: none;\n+}\n+div.DTE_Inline.DTE_Processing:after {\n+  top: 5px;\n+}\n+\n+div.DTE_Field_Type_checkbox div.controls,\n+div.DTE_Field_Type_radio div.controls {\n+  margin-top: 0.4em;\n+}\n+div.DTE_Field_Type_checkbox div.controls label,\n+div.DTE_Field_Type_radio div.controls label {\n+  margin-left: 0.75em;\n+  margin-bottom: 0;\n+  vertical-align: middle;\n+  font-weight: normal;\n+}\n+\n+div.DTE_Bubble {\n+  position: absolute;\n+  z-index: 11;\n+  margin-top: -6px;\n+  opacity: 0;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner {\n+  position: absolute;\n+  bottom: 0;\n+  border: 1px solid black;\n+  width: 300px;\n+  margin-left: -150px;\n+  background-color: white;\n+  box-shadow: 2px 2px 7px #555;\n+  border-radius: 5px;\n+  border: 2px solid #444;\n+  padding: 1em;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table {\n+  display: table;\n+  width: 100%;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form {\n+  display: table-cell;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content {\n+  padding: 0;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_'..b'editor-datetime table td.day.today {\n+  background-color: #ddd;\n+}\n+div.editor-datetime table td.day.today button {\n+  font-weight: bold;\n+}\n+div.editor-datetime table td.day.selected button {\n+  background: #337ab7;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.day button:hover {\n+  background: #ff8000;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.editor-datetime-week {\n+  font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.bootstrap.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.bootstrap.min.css Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+div.DTE div.DTE_Form_Error{display:none;color:#b11f1f}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{margin-top:0.5em;font-size:0.8em;line-height:1.25em}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type="color"],div.DTE_Inline div.DTE_Field input[type="date"],div.DTE_Inline div.DTE_Field input[type="datetime"],div.DTE_Inline div.DTE_Field input[type="datetime-local"],div.DTE_Inline div.DTE_Field input[type="email"],div.DTE_Inline div.DTE_Field input[type="month"],div.DTE_Inline div.DTE_Field input[type="number"],div.DTE_Inline div.DTE_Field input[type="password"],div.DTE_Inline div.DTE_Field input[type="search"],div.DTE_Inline div.DTE_Field input[type="tel"],div.DTE_Inline div.DTE_Field input[type="text"],div.DTE_Inline div.DTE_Field input[type="time"],div.DTE_Inline div.DTE_Field input[type="url"],div.DTE_Inline div.DTE_Field input[type="week"]{margin:-6px 0}div.DTE_Inline.DTE_Processing:after{position:absolute;content:\' \';display:block;top:4px;right:10px;height:12px;width:17px;background:url("../images/ajax-loader-small.gif") no-repeat top left}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field{width:100%}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input.form-control{height:30px}div.DTE_Inline div.DTE_Field div.help-block{display:none}div.DTE_Inline.DTE_Processing:after{top:5px}div.DTE_Field_Type_checkbox div.controls,div.DTE_Field_Type_radio div.controls{margin-top:0.4em}div.DTE_Field_Type_checkbox div.controls label,div.DTE_Field_Type_radio div.controls label{margin-left:0.75em;margin-bottom:0;vertical-align:middle;font-weight:normal}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:2px 2px 7px #555;border-radius:5px;border:2px solid #444;padding:1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{display:table;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form{display:table-cell}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;zoom:1;margin-bottom:0.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{display:table-cell;vertical-align:bottom;padding:0 0 0 0.75em;width:1%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{pad'..b'div.editor-datetime div.editor-datetime-title{text-align:center;padding:5px 0px 3px}div.editor-datetime table{border-spacing:0;margin:6px 13px}div.editor-datetime table th{font-size:0.8em;color:#777;font-weight:normal;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.editor-datetime table td{font-size:0.9em;color:#444;padding:0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#337ab7;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.dataTables.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.dataTables.css Tue Jul 28 08:32:36 2020 -0400
b
b'@@ -0,0 +1,1266 @@\n+div.DTE {\n+  position: relative;\n+}\n+div.DTE div.DTE_Processing_Indicator {\n+  position: absolute;\n+  top: 10px;\n+  right: 13px;\n+  height: 32px;\n+  width: 32px;\n+  background: url("../images/ajax-loader.gif") no-repeat top left;\n+  display: none;\n+  z-index: 20;\n+}\n+div.DTE div.DTE_Header {\n+  position: absolute;\n+  top: 0;\n+  left: 0;\n+  height: 50px;\n+  width: 100%;\n+  background-color: #f3f3f3;\n+  border-bottom: 1px solid #ddd;\n+  padding: 16px 10px 2px 16px;\n+  font-size: 1.3em;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+div.DTE div.DTE_Footer {\n+  position: absolute;\n+  bottom: 0;\n+  left: 0;\n+  height: 50px;\n+  width: 100%;\n+  background-color: #f3f3f3;\n+  border-top: 1px solid #ddd;\n+  padding: 10px;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+div.DTE div.DTE_Form_Info {\n+  margin-bottom: 0.5em;\n+  display: none;\n+}\n+div.DTE div.DTE_Form_Content {\n+  position: relative;\n+  padding: 10px;\n+}\n+div.DTE div.DTE_Form_Error {\n+  float: left;\n+  padding: 5px;\n+  display: none;\n+  color: #b11f1f;\n+}\n+div.DTE button.btn,\n+div.DTE div.DTE_Form_Buttons button {\n+  position: relative;\n+  text-align: center;\n+  display: block;\n+  margin-top: 0;\n+  padding: 5px 15px;\n+  cursor: pointer;\n+  float: right;\n+  margin-left: 0.75em;\n+  font-size: 14px;\n+  text-shadow: 0 1px 0 white;\n+  border: 1px solid #999;\n+  -webkit-border-radius: 4px;\n+  -moz-border-radius: 4px;\n+  -ms-border-radius: 4px;\n+  -o-border-radius: 4px;\n+  border-radius: 4px;\n+  -webkit-box-shadow: 1px 1px 3px #ccc;\n+  -moz-box-shadow: 1px 1px 3px #ccc;\n+  box-shadow: 1px 1px 3px #ccc;\n+  background-color: #f9f9f9 100%;\n+  /* Fallback */\n+  background-image: -webkit-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* Chrome 10+, Saf5.1+, iOS 5+ */\n+  background-image: -moz-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* FF3.6 */\n+  background-image: -ms-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* IE10 */\n+  background-image: -o-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* Opera 11.10+ */\n+  background-image: linear-gradient(to bottom, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#ffffff\', EndColorStr=\'#f9f9f9\');\n+}\n+div.DTE button.btn:hover,\n+div.DTE div.DTE_Form_Buttons button:hover {\n+  border: 1px solid #666;\n+  -webkit-box-shadow: 1px 1px 3px #999;\n+  -moz-box-shadow: 1px 1px 3px #999;\n+  box-shadow: 1px 1px 3px #999;\n+  background-color: #f4f4f4 100%;\n+  /* Fallback */\n+  background-image: -webkit-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* Chrome 10+, Saf5.1+, iOS 5+ */\n+  background-image: -moz-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* FF3.6 */\n+  background-image: -ms-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* IE10 */\n+  background-image: -o-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* Opera 11.10+ */\n+  background-image: linear-gradient(to bottom, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#f3f3f3\', EndColorStr=\'#f4f4f4\');\n+}\n+div.DTE button.btn:active,\n+div.DTE div.DTE_Form_Buttons button:active {\n+  -webkit-box-shadow: inset 1px 1px 3px #999;\n+  -moz-box-shadow: inset 1px 1px 3px #999;\n+  box-shadow: inset 1px 1px 3px #999;\n+}\n+div.DTE button.btn:focus,\n+div.DTE div.DTE_Form_Buttons button:focus {\n+  border: 1px solid #426c9e;\n+  text-shadow: 0 1px 0 #c4def1;\n+  background-color: #a3d0ef 100%;\n+  /* Fallback */\n+  background-image: -webkit-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n+  /* Chrome 10+, Saf5.1+, iOS 5+ */\n+  background-image: -moz-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n+  /* FF3.6 */\n+  background-image: -ms-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n+ '..b'editor-datetime table td.day.today {\n+  background-color: #ddd;\n+}\n+div.editor-datetime table td.day.today button {\n+  font-weight: bold;\n+}\n+div.editor-datetime table td.day.selected button {\n+  background: #4E6CA3;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.day button:hover {\n+  background: #ff8000;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.editor-datetime-week {\n+  font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.dataTables.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.dataTables.min.css Tue Jul 28 08:32:36 2020 -0400
b
b'@@ -0,0 +1,1 @@\n+div.DTE{position:relative}div.DTE div.DTE_Processing_Indicator{position:absolute;top:10px;right:13px;height:32px;width:32px;background:url("../images/ajax-loader.gif") no-repeat top left;display:none;z-index:20}div.DTE div.DTE_Header{position:absolute;top:0;left:0;height:50px;width:100%;background-color:#f3f3f3;border-bottom:1px solid #ddd;padding:16px 10px 2px 16px;font-size:1.3em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE div.DTE_Footer{position:absolute;bottom:0;left:0;height:50px;width:100%;background-color:#f3f3f3;border-top:1px solid #ddd;padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE div.DTE_Form_Info{margin-bottom:0.5em;display:none}div.DTE div.DTE_Form_Content{position:relative;padding:10px}div.DTE div.DTE_Form_Error{float:left;padding:5px;display:none;color:#b11f1f}div.DTE button.btn,div.DTE div.DTE_Form_Buttons button{position:relative;text-align:center;display:block;margin-top:0;padding:5px 15px;cursor:pointer;float:right;margin-left:0.75em;font-size:14px;text-shadow:0 1px 0 white;border:1px solid #999;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background-color:#f9f9f9 100%;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:-o-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:linear-gradient(to bottom, #fff 0%, #eee 65%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#ffffff\', EndColorStr=\'#f9f9f9\')}div.DTE button.btn:hover,div.DTE div.DTE_Form_Buttons button:hover{border:1px solid #666;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background-color:#f4f4f4 100%;background-image:-webkit-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:-moz-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:-ms-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:-o-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:linear-gradient(to bottom, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#f3f3f3\', EndColorStr=\'#f4f4f4\')}div.DTE button.btn:active,div.DTE div.DTE_Form_Buttons button:active{-webkit-box-shadow:inset 1px 1px 3px #999;-moz-box-shadow:inset 1px 1px 3px #999;box-shadow:inset 1px 1px 3px #999}div.DTE button.btn:focus,div.DTE div.DTE_Form_Buttons button:focus{border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;background-color:#a3d0ef 100%;background-image:-webkit-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-moz-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-ms-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-o-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:linear-gradient(to bottom, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#a3d0ef\', EndColorStr=\'#a3d0ef\');outline:none}div.DTE button.btn:focus:after,div.DTE div.DTE_Form_Buttons button:focus:after{position:absolute;top:0;left:0;right:0;bottom:0;background:white;display:block;content:" ";-webkit-animation-duration:1s;-webkit-animation-name:buttonPulse;-webkit-animation-fill-mode:forwards;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-webkit-animation-direction:alternate;-moz-animation-duration:1s;-moz-animation-name:buttonPulse;-moz-animation-fill-mode:forwards;-moz-animation-iteration-c'..b'div.editor-datetime div.editor-datetime-title{text-align:center;padding:5px 0px 3px}div.editor-datetime table{border-spacing:0;margin:6px 13px}div.editor-datetime table th{font-size:0.8em;color:#777;font-weight:normal;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.editor-datetime table td{font-size:0.9em;color:#444;padding:0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#4E6CA3;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.foundation.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.foundation.css Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,612 @@\n+div.DTE div.DTE_Form_Error {\n+  display: none;\n+  color: #b11f1f;\n+}\n+\n+div.DTE_Field div.multi-value,\n+div.DTE_Field div.multi-restore {\n+  display: none;\n+  cursor: pointer;\n+  padding: 0.75rem;\n+}\n+div.DTE_Field div.multi-value span,\n+div.DTE_Field div.multi-restore span {\n+  display: block;\n+  color: #666;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+}\n+div.DTE_Field div.multi-value:hover,\n+div.DTE_Field div.multi-restore:hover {\n+  background-color: #e5e5e5;\n+}\n+div.DTE_Field div.multi-restore {\n+  margin-top: 0.5em;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+  padding: 0.5rem 0.75rem;\n+}\n+div.DTE_Field div.label {\n+  margin-top: 0.5rem;\n+  margin-bottom: 0.5rem;\n+}\n+div.DTE_Field div.label:empty {\n+  padding: 0;\n+  margin: 0;\n+}\n+div.DTE_Field:after {\n+  display: block;\n+  content: ".";\n+  height: 0;\n+  line-height: 0;\n+  clear: both;\n+  visibility: hidden;\n+}\n+\n+div.reveal-modal button.close {\n+  position: absolute;\n+  top: -1.5em;\n+  right: -2.5em;\n+}\n+div.reveal-modal button.close.close-button {\n+  right: 1rem;\n+  top: .5rem;\n+  z-index: 100;\n+}\n+div.reveal-modal div.DTE_Header {\n+  position: relative;\n+  top: -0.5em;\n+  font-size: 2.05556rem;\n+  line-height: 1.4;\n+}\n+div.reveal-modal div.DTE_Form_Content {\n+  width: 75%;\n+  margin: 0 auto;\n+}\n+div.reveal-modal div.DTE_Footer {\n+  position: relative;\n+  bottom: -0.5em;\n+  float: right;\n+}\n+div.reveal-modal div.DTE_Footer button {\n+  margin-bottom: 0;\n+}\n+\n+div.DTE_Inline {\n+  position: relative;\n+  display: table;\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons {\n+  display: table-cell;\n+  vertical-align: middle;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field {\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label {\n+  display: none;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input {\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button {\n+  margin: -6px 0 -6px 4px;\n+  padding: 5px;\n+}\n+div.DTE_Inline div.DTE_Field input[type="color"],\n+div.DTE_Inline div.DTE_Field input[type="date"],\n+div.DTE_Inline div.DTE_Field input[type="datetime"],\n+div.DTE_Inline div.DTE_Field input[type="datetime-local"],\n+div.DTE_Inline div.DTE_Field input[type="email"],\n+div.DTE_Inline div.DTE_Field input[type="month"],\n+div.DTE_Inline div.DTE_Field input[type="number"],\n+div.DTE_Inline div.DTE_Field input[type="password"],\n+div.DTE_Inline div.DTE_Field input[type="search"],\n+div.DTE_Inline div.DTE_Field input[type="tel"],\n+div.DTE_Inline div.DTE_Field input[type="text"],\n+div.DTE_Inline div.DTE_Field input[type="time"],\n+div.DTE_Inline div.DTE_Field input[type="url"],\n+div.DTE_Inline div.DTE_Field input[type="week"] {\n+  margin: -6px 0;\n+}\n+div.DTE_Inline.DTE_Processing:after {\n+  position: absolute;\n+  content: \' \';\n+  display: block;\n+  top: 4px;\n+  right: 10px;\n+  height: 12px;\n+  width: 17px;\n+  background: url("../images/ajax-loader-small.gif") no-repeat top left;\n+}\n+\n+span.dtr-data div.DTE_Inline {\n+  display: inline-table;\n+}\n+\n+div.DTE_Inline div.DTE_Field > div {\n+  width: 100%;\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Field input {\n+  height: 30px;\n+  margin-bottom: 0;\n+}\n+div.DTE_Inline div.DTE_Field div.label:empty {\n+  display: none;\n+}\n+\n+div.DTE_Bubble {\n+  position: absolute;\n+  z-index: 11;\n+  margin-top: -6px;\n+  opacity: 0;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner {\n+  position: absolute;\n+  bottom: 0;\n+  border: 1px solid black;\n+  width: 300px;\n+  margin-left: -150px;\n+  background-color: white;\n+  box-shadow: 2px 2px 7px #555;\n+  border-radius: 5px;\n+  border: 2px solid #444;\n+  padding: 1em;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n'..b'editor-datetime table td.day.today {\n+  background-color: #ddd;\n+}\n+div.editor-datetime table td.day.today button {\n+  font-weight: bold;\n+}\n+div.editor-datetime table td.day.selected button {\n+  background: #008CBA;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.day button:hover {\n+  background: #ff8000;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.editor-datetime-week {\n+  font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.foundation.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.foundation.min.css Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+div.DTE div.DTE_Form_Error{display:none;color:#b11f1f}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer;padding:0.75rem}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666;font-size:0.8em;line-height:1.25em}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#e5e5e5}div.DTE_Field div.multi-restore{margin-top:0.5em;font-size:0.8em;line-height:1.25em;padding:0.5rem 0.75rem}div.DTE_Field div.label{margin-top:0.5rem;margin-bottom:0.5rem}div.DTE_Field div.label:empty{padding:0;margin:0}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.reveal-modal button.close{position:absolute;top:-1.5em;right:-2.5em}div.reveal-modal button.close.close-button{right:1rem;top:.5rem;z-index:100}div.reveal-modal div.DTE_Header{position:relative;top:-0.5em;font-size:2.05556rem;line-height:1.4}div.reveal-modal div.DTE_Form_Content{width:75%;margin:0 auto}div.reveal-modal div.DTE_Footer{position:relative;bottom:-0.5em;float:right}div.reveal-modal div.DTE_Footer button{margin-bottom:0}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type="color"],div.DTE_Inline div.DTE_Field input[type="date"],div.DTE_Inline div.DTE_Field input[type="datetime"],div.DTE_Inline div.DTE_Field input[type="datetime-local"],div.DTE_Inline div.DTE_Field input[type="email"],div.DTE_Inline div.DTE_Field input[type="month"],div.DTE_Inline div.DTE_Field input[type="number"],div.DTE_Inline div.DTE_Field input[type="password"],div.DTE_Inline div.DTE_Field input[type="search"],div.DTE_Inline div.DTE_Field input[type="tel"],div.DTE_Inline div.DTE_Field input[type="text"],div.DTE_Inline div.DTE_Field input[type="time"],div.DTE_Inline div.DTE_Field input[type="url"],div.DTE_Inline div.DTE_Field input[type="week"]{margin:-6px 0}div.DTE_Inline.DTE_Processing:after{position:absolute;content:\' \';display:block;top:4px;right:10px;height:12px;width:17px;background:url("../images/ajax-loader-small.gif") no-repeat top left}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input{height:30px;margin-bottom:0}div.DTE_Inline div.DTE_Field div.label:empty{display:none}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:2px 2px 7px #555;border-radius:5px;border:2px solid #444;padding:1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{display:table;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form{display:table-cell}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;zoom:1;margin-bottom:0.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{display:table-cell;vertical-align:botto'..b'div.editor-datetime div.editor-datetime-title{text-align:center;padding:5px 0px 3px}div.editor-datetime table{border-spacing:0;margin:6px 13px}div.editor-datetime table th{font-size:0.8em;color:#777;font-weight:normal;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.editor-datetime table td{font-size:0.9em;color:#444;padding:0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#008CBA;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.jqueryui.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.jqueryui.css Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,801 @@\n+div.DTE_Field input,\n+div.DTE_Field textarea {\n+  box-sizing: border-box;\n+  background-color: white;\n+  -webkit-transition: background-color ease-in-out .15s;\n+  transition: background-color ease-in-out .15s;\n+}\n+div.DTE_Field input:focus,\n+div.DTE_Field textarea:focus {\n+  background-color: #ffffee;\n+}\n+div.DTE_Field input[type="color"],\n+div.DTE_Field input[type="date"],\n+div.DTE_Field input[type="datetime"],\n+div.DTE_Field input[type="datetime-local"],\n+div.DTE_Field input[type="email"],\n+div.DTE_Field input[type="month"],\n+div.DTE_Field input[type="number"],\n+div.DTE_Field input[type="password"],\n+div.DTE_Field input[type="search"],\n+div.DTE_Field input[type="tel"],\n+div.DTE_Field input[type="text"],\n+div.DTE_Field input[type="time"],\n+div.DTE_Field input[type="url"],\n+div.DTE_Field input[type="week"] {\n+  padding: 6px 4px;\n+  width: 100%;\n+}\n+div.DTE_Field div.DTE_Field_Info,\n+div.DTE_Field div.DTE_Field_Message {\n+  font-size: 11px;\n+  line-height: 1em;\n+}\n+div.DTE_Field div.DTE_Field_Error {\n+  font-size: 11px;\n+  line-height: 1em;\n+  display: none;\n+  color: red;\n+  margin-top: 5px;\n+}\n+div.DTE_Field div.multi-value {\n+  display: none;\n+  border: 1px dotted #666;\n+  border-radius: 3px;\n+  padding: 5px;\n+  background-color: #fafafa;\n+  cursor: pointer;\n+}\n+div.DTE_Field div.multi-value span {\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+  display: block;\n+  color: #666;\n+}\n+div.DTE_Field div.multi-value:hover {\n+  background-color: #f1f1f1;\n+}\n+div.DTE_Field div.multi-restore {\n+  display: none;\n+  margin-top: 0.5em;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+  color: #3879d9;\n+}\n+div.DTE_Field div.multi-restore:hover {\n+  text-decoration: underline;\n+  cursor: pointer;\n+}\n+\n+div.DTE_Field_Type_textarea textarea {\n+  padding: 3px;\n+  width: 100%;\n+  height: 80px;\n+}\n+\n+div.DTE_Field.DTE_Field_Type_date img {\n+  vertical-align: middle;\n+  cursor: pointer;\n+  *cursor: hand;\n+}\n+div.DTE_Field.DTE_Field_Type_date input.jqueryui {\n+  width: 87%;\n+  margin-right: 6px;\n+}\n+\n+div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div,\n+div.DTE_Field_Type_radio div.DTE_Field_Input > div > div {\n+  margin-bottom: 0.25em;\n+}\n+div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div:last-child,\n+div.DTE_Field_Type_radio div.DTE_Field_Input > div > div:last-child {\n+  margin-bottom: 0;\n+}\n+div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div label,\n+div.DTE_Field_Type_radio div.DTE_Field_Input > div > div label {\n+  margin-left: 0.75em;\n+  vertical-align: middle;\n+}\n+\n+div.DTE_Field_Type_select div.DTE_Field_Input {\n+  padding-top: 4px;\n+}\n+\n+div.DTE_Body {\n+  padding: 50px 0;\n+}\n+div.DTE_Body div.DTE_Body_Content {\n+  position: relative;\n+  overflow: auto;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info {\n+  padding: 1em 1em 0 1em;\n+  margin: 0;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field {\n+  position: relative;\n+  zoom: 1;\n+  clear: both;\n+  padding: 5px 20%;\n+  border: 1px solid transparent;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field:after {\n+  display: block;\n+  content: ".";\n+  height: 0;\n+  line-height: 0;\n+  clear: both;\n+  visibility: hidden;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover {\n+  background-color: #f9f9f9;\n+  border: 1px solid #f3f3f3;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field > label {\n+  float: left;\n+  width: 40%;\n+  padding-top: 6px;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input {\n+  float: right;\n+  width: 60%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.full {\n+  padding: 5px 0 5px 20%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label {\n+  width: 30%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input {\n+  width: 70%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input {\n+  float: none;\n+  clear: both;\n+  width: 100%;\n+}\n+\n+html[dir="rtl"] div.DTE_Body div.DTE_Body_Content div.DTE_Field > label {\n+  float: right;\n+}\n+'..b' font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n+\n+div.DTE {\n+  font-size: 0.91em;\n+}\n+div.DTE div.DTE_Header {\n+  display: none;\n+}\n+div.DTE div.DTE_Body {\n+  padding: 0;\n+}\n+div.DTE div.DTE_Body div.DTE_Body_Content {\n+  overflow: hidden;\n+}\n+div.DTE div.DTE_Body div.DTE_Body_Content div.DTE_Field {\n+  padding: 5px 5%;\n+}\n+div.DTE div.DTE_Footer {\n+  display: none;\n+}\n+div.DTE div.DTE_Form_Error {\n+  padding-top: 1em;\n+  color: red;\n+  display: none;\n+  color: #b11f1f;\n+}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/editor.jqueryui.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.jqueryui.min.css Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+div.DTE_Field input,div.DTE_Field textarea{box-sizing:border-box;background-color:white;-webkit-transition:background-color ease-in-out .15s;transition:background-color ease-in-out .15s}div.DTE_Field input:focus,div.DTE_Field textarea:focus{background-color:#ffffee}div.DTE_Field input[type="color"],div.DTE_Field input[type="date"],div.DTE_Field input[type="datetime"],div.DTE_Field input[type="datetime-local"],div.DTE_Field input[type="email"],div.DTE_Field input[type="month"],div.DTE_Field input[type="number"],div.DTE_Field input[type="password"],div.DTE_Field input[type="search"],div.DTE_Field input[type="tel"],div.DTE_Field input[type="text"],div.DTE_Field input[type="time"],div.DTE_Field input[type="url"],div.DTE_Field input[type="week"]{padding:6px 4px;width:100%}div.DTE_Field div.DTE_Field_Info,div.DTE_Field div.DTE_Field_Message{font-size:11px;line-height:1em}div.DTE_Field div.DTE_Field_Error{font-size:11px;line-height:1em;display:none;color:red;margin-top:5px}div.DTE_Field div.multi-value{display:none;border:1px dotted #666;border-radius:3px;padding:5px;background-color:#fafafa;cursor:pointer}div.DTE_Field div.multi-value span{font-size:0.8em;line-height:1.25em;display:block;color:#666}div.DTE_Field div.multi-value:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{display:none;margin-top:0.5em;font-size:0.8em;line-height:1.25em;color:#3879d9}div.DTE_Field div.multi-restore:hover{text-decoration:underline;cursor:pointer}div.DTE_Field_Type_textarea textarea{padding:3px;width:100%;height:80px}div.DTE_Field.DTE_Field_Type_date img{vertical-align:middle;cursor:pointer;*cursor:hand}div.DTE_Field.DTE_Field_Type_date input.jqueryui{width:87%;margin-right:6px}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div{margin-bottom:0.25em}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div:last-child,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div:last-child{margin-bottom:0}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div label,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div label{margin-left:0.75em;vertical-align:middle}div.DTE_Field_Type_select div.DTE_Field_Input{padding-top:4px}div.DTE_Body{padding:50px 0}div.DTE_Body div.DTE_Body_Content{position:relative;overflow:auto}div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info{padding:1em 1em 0 1em;margin:0}div.DTE_Body div.DTE_Body_Content div.DTE_Field{position:relative;zoom:1;clear:both;padding:5px 20%;border:1px solid transparent}div.DTE_Body div.DTE_Body_Content div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover{background-color:#f9f9f9;border:1px solid #f3f3f3}div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:left;width:40%;padding-top:6px}div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:right;width:60%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 20%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:30%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:70%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{float:none;clear:both;width:100%}html[dir="rtl"] div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:right}html[dir="rtl"] div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:left}html[dir="rtl"] div.DTE div.DTE_Form_Buttons button{float:left}@media only screen and (max-width: 768px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:35.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:64.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}@media only screen and (max-width: 640px){div.DTE_Body div.DTE'..b':0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#4E6CA3;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}div.DTE{font-size:0.91em}div.DTE div.DTE_Header{display:none}div.DTE div.DTE_Body{padding:0}div.DTE div.DTE_Body div.DTE_Body_Content{overflow:hidden}div.DTE div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 5%}div.DTE div.DTE_Footer{display:none}div.DTE div.DTE_Form_Error{padding-top:1em;color:red;display:none;color:#b11f1f}\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/bubble.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/bubble.scss Tue Jul 28 08:32:36 2020 -0400
b
@@ -0,0 +1,130 @@
+
+// Bubble form editing
+// Very similar to the main form, but attached to a particular node and the
+// form layout is slightly different with the fields container and buttons
+// making up a table of a single row and two columns. This allows the buttons
+// to be removed from the display and under this condition the fields will
+// take up the full width available.
+div.DTE_Bubble {
+ position: absolute;
+ z-index: 11;
+ margin-top: -6px;
+ opacity: 0;
+
+ div.DTE_Bubble_Liner {
+ position: absolute;
+ bottom: 0;
+ border: 1px solid black;
+ width: 300px;
+ margin-left: -150px;
+ background-color: white;
+ box-shadow: 2px 2px 7px #555;
+ border-radius: 5px;
+ border: 2px solid #444;
+ padding: 1em;
+ @include box-sizing(border-box);
+
+ div.DTE_Bubble_Table {
+ display: table;
+ width: 100%;
+
+ > form {
+ display: table-cell;
+
+ div.DTE_Form_Content {
+ padding: 0;
+
+ div.DTE_Field {
+ position: relative;
+ zoom: 1;
+ margin-bottom: 0.5em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+
+ div.DTE_Form_Buttons {
+ display: table-cell;
+ vertical-align: bottom;
+ padding: 0 0 0 0.75em;
+ width: 1%; // browser will resize to a min width
+ }
+ }
+
+ div.DTE_Header {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+ div.DTE_Header + div.DTE_Form_Info,
+ div.DTE_Header + div.DTE_Bubble_Table {
+ padding-top: 42px;
+ }
+
+
+ div.DTE_Form_Error {
+ float: none;
+ display: none;
+ padding: 0;
+ margin-bottom: 0.5em;
+ }
+
+ div.DTE_Bubble_Close {
+ @include close-icon();
+ }
+ }
+
+ div.DTE_Bubble_Triangle {
+ position: absolute;
+ height: 10px;
+ width: 10px;
+ top: -6px;
+ background-color: white;
+ border: 2px solid #444;
+ border-top: none;
+ border-right: none;
+
+ -webkit-transform: rotate(-45deg);
+    -moz-transform: rotate(-45deg);
+     -ms-transform: rotate(-45deg);
+      -o-transform: rotate(-45deg);
+         transform: rotate(-45deg);
+ }
+
+ &.DTE_Processing {
+ div.DTE_Bubble_Liner:after {
+ position: absolute;
+ content: ' ';
+ display: block;
+ top: 12px;
+ right: 18px;
+ height: 12px;
+ width: 17px;
+ background: url('../images/ajax-loader-small.gif') no-repeat top left;
+ }
+ }
+
+ &.below {
+ div.DTE_Bubble_Liner {
+ top: 10px;
+ bottom: auto;
+ }
+
+ div.DTE_Bubble_Triangle {
+ top: 4px;
+ -webkit-transform: rotate(135deg);
+    -moz-transform: rotate(135deg);
+     -ms-transform: rotate(135deg);
+      -o-transform: rotate(135deg);
+         transform: rotate(135deg);
+ }
+ }
+}
+
+div.DTE_Bubble_Background {
+ @include overlay-background();
+}
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/datatable.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/datatable.scss Tue Jul 28 08:32:36 2020 -0400
b
@@ -0,0 +1,93 @@
+
+// Row highlighting on edit styles
+//
+// To change the colour of the highlight, simply modify the variable below and
+// recompile the SCSS stylesheet (if you don't have SASS installed, you can use
+// the online service at http://sassmeister.com/ .
+//
+// The DataTables styles below match the default DataTables stylesheet:
+// http://next.datatables.net/manual/styling/classes so you can retain the full
+// benefits of the DataTables styling options.
+
+$table-row-highlight: #FFFBCC;
+
+table.dataTable {
+ tbody {
+ tr.highlight {
+ background-color: $table-row-highlight !important;
+ }
+
+ tr.highlight,
+ tr.noHighlight,
+ tr.highlight td,
+ tr.noHighlight td {
+ @include background-transision();
+ }
+ }
+
+ &.stripe tbody,
+ &.display tbody {
+ tr.odd {
+ &.highlight {
+ background-color: shade($table-row-highlight, 2.35%);
+ }
+ }
+ }
+
+ // Hover classes - add "hover" class to the table to activate
+ &.hover tbody,
+ &.display tbody {
+ tr:hover,
+ tr.odd:hover,
+ tr.even:hover {
+ &.highlight {
+ background-color: shade($table-row-highlight, 3.6%);
+ }
+ }
+ }
+
+
+ // Sort column highlighting - add "hover" class to the table to activate
+ &.order-column,
+ &.display {
+ tbody {
+ tr.highlight>.sorting_1,
+ tr.highlight>.sorting_2,
+ tr.highlight>.sorting_3 {
+ background-color: shade($table-row-highlight, 2%);
+ }
+ }
+ }
+
+ &.display tbody,
+ &.order-column.stripe tbody {
+ tr.odd {
+ &.highlight {
+ >.sorting_1 { background-color: shade($table-row-highlight, 5.4%);}
+ >.sorting_2 { background-color: shade($table-row-highlight, 4.7%);}
+ >.sorting_3 { background-color: shade($table-row-highlight, 3.9%);}
+ }
+ }
+
+ tr.even {
+ &.highlight {
+ >.sorting_1 { background-color: shade($table-row-highlight, 2%); }
+ >.sorting_2 { background-color: shade($table-row-highlight, 1.2%); }
+ >.sorting_3 { background-color: shade($table-row-highlight, 0.4%); }
+ }
+ }
+ }
+
+ &.display tbody,
+ &.order-column.hover tbody {
+ tr:hover,
+ tr.odd:hover,
+ tr.even:hover {
+ &.highlight {
+ >.sorting_1 { background-color: shade($table-row-highlight, 8.2%); }
+ >.sorting_2 { background-color: shade($table-row-highlight, 7.5%); }
+ >.sorting_3 { background-color: shade($table-row-highlight, 6.3%); }
+ }
+ }
+ }
+}
\ No newline at end of file
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/datetime.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/datetime.scss Tue Jul 28 08:32:36 2020 -0400
b
@@ -0,0 +1,184 @@
+
+$editor-datetime-selected: #4E6CA3 !default;
+
+div.editor-datetime {
+ position: absolute;
+ background-color: white;
+ z-index: 2050;
+    border: 1px solid #ccc;
+ box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);
+ padding-bottom: 5px;
+
+ div.editor-datetime-title {
+ text-align: center;
+     padding: 5px 0px 3px;
+ }
+
+ table {
+ border-spacing: 0;
+ margin: 6px 13px;
+
+ th {
+ font-size: 0.8em;
+ color: #777;
+ font-weight: normal;
+ width: 14.285714286%;
+ padding: 0 0 4px 0;
+ text-align: center;
+ }
+
+ td {
+ font-size: 0.9em;
+ color: #444;
+ padding: 0;
+ }
+
+ td.day {
+ text-align: right;
+ background: #f5f5f5;
+
+ &.disabled {
+ color: #aaa;
+ background: white;
+ }
+
+ &.today {
+ background-color: #ddd;
+
+ button {
+ font-weight: bold;
+ }
+ }
+
+ &.selected button {
+ background: $editor-datetime-selected;
+ color: white;
+ border-radius: 2px;
+ }
+
+ button:hover {
+ background: #ff8000;
+ color: white;
+ border-radius: 2px;
+ }
+ }
+
+ td.editor-datetime-week {
+ font-size: 0.7em;
+ }
+
+ button {
+ width: 100%;
+ box-sizing: border-box;
+ border: none;
+ background: transparent;
+ font-size: inherit;
+ color: inherit;
+ text-align: inherit;
+ padding: 5px 9px;
+ cursor: pointer;
+ margin: 0;
+ }
+
+ &.weekNumber th {
+ width: 12.5%;
+ }
+ }
+
+ div.editor-datetime-label {
+ position: relative;
+ display: inline-block;
+ height: 30px;
+ padding: 5px 6px;
+ border: 1px solid transparent;
+ box-sizing: border-box;
+ cursor: pointer;
+
+ &:hover {
+ border: 1px solid #ddd;
+ border-radius: 2px;
+ background-color: #f5f5f5;
+ }
+
+ span {
+
+ }
+
+ select {
+ position: absolute;
+ top: 6px;
+ left: 0;
+ cursor: pointer;
+ opacity: 0;
+ -ms-filter: "alpha(opacity=0)";
+ }
+ }
+
+ div.editor-datetime-time {
+ text-align: center;
+
+ > span {
+ vertical-align: middle;
+ }
+
+ div.editor-datetime-timeblock {
+ display: inline-block;
+ vertical-align: middle;
+ }
+ }
+
+
+ div.editor-datetime-iconLeft,
+ div.editor-datetime-iconRight,
+ div.editor-datetime-iconUp,
+ div.editor-datetime-iconDown {
+ width: 30px;
+ height: 30px;
+ background-position: center;
+ background-repeat: no-repeat;
+ opacity: 0.3;
+ overflow: hidden;
+ box-sizing: border-box;
+
+ &:hover {
+ border: 1px solid #ccc;
+ border-radius: 2px;
+ background-color: #f0f0f0;
+ opacity: 0.6;
+ }
+
+ button {
+ border: none;
+ background: transparent;
+ text-indent: 30px;
+ height: 100%;
+ width: 100%;
+ cursor: pointer;
+ }
+ }
+
+ div.editor-datetime-iconLeft {
+ position: absolute;
+ top: 5px;
+ left: 5px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==');
+ }
+
+ div.editor-datetime-iconRight {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=');
+ }
+
+ div.editor-datetime-iconUp {
+ height: 20px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=');
+ }
+
+ div.editor-datetime-iconDown {
+ height: 20px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC');
+ }
+}
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/envelope.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/envelope.scss Tue Jul 28 08:32:36 2020 -0400
b
@@ -0,0 +1,102 @@
+
+/*
+ * Namespace: DTED - DataTables Editor Display - Envelope
+ */
+
+div.DTED_Envelope_Wrapper {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ height: 100%;
+ z-index: 11;
+ display: none;
+ overflow: hidden;
+
+ // Create a shadow display at the top of the evelope to make it look like it has
+ // come from under the element that it is attached to/ Left and right to give a
+ // slight fade and the two ends
+ div.DTED_Envelope_ShadowLeft {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 50%;
+ height: 9px;
+ background: url('../images/shadow_left.png') no-repeat top left;
+ z-index: 10;
+ }
+
+ div.DTED_Envelope_ShadowRight {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 50%;
+ height: 9px;
+ background: url('../images/shadow_right.png') no-repeat top right;
+ z-index: 10;
+ }
+
+
+ div.DTED_Envelope_Container {
+ position: absolute;
+ top: 0;
+ left: 5%;
+ width: 90%;
+
+ border-left: 1px solid #777;
+ border-right: 1px solid #777;
+ border-bottom: 1px solid #777;
+ box-shadow: 3px 3px 10px #555;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ background-color: white;
+
+ div.DTE_Processing_Indicator {
+ right: 36px;
+ }
+
+ div.DTE_Footer {
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+
+ div.DTED_Envelope_Close {
+ position: absolute;
+ top: 16px;
+ right: 10px;
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ *cursor: hand;
+ z-index: 12;
+ text-align: center;
+ font-size: 12px;
+
+ background: #F8F8F8;
+ background: -webkit-gradient(linear, center bottom, center top, from(#CCC), to(white));
+ background: -moz-linear-gradient(top, white, #CCC);
+ background: linear-gradient(to bottom, white, #CCC);
+ text-shadow: 0 1px 0 white;
+ border: 1px solid #999;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ box-shadow: 0px 0px 1px #999;
+ -moz-box-shadow: 0px 0px 1px #999;
+ -webkit-box-shadow: 0px 0px 1px #999;
+ }
+ }
+}
+
+
+div.DTED_Envelope_Background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 10;
+ @include radial-gradient( rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4) );
+}
+
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/fields.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/fields.scss Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,128 @@
+
+
+// Generic field styling
+div.DTE_Field {
+ input,
+ textarea {
+ box-sizing: border-box;
+ background-color: white;
+ -webkit-transition: background-color ease-in-out .15s;
+         transition: background-color ease-in-out .15s;
+ }
+
+ input:focus,
+ textarea:focus {
+ background-color: #ffffee; 
+ }
+
+ input[type="color"],
+ input[type="date"],
+ input[type="datetime"],
+ input[type="datetime-local"],
+ input[type="email"],
+ input[type="month"],
+ input[type="number"],
+ input[type="password"],
+ input[type="search"],
+ input[type="tel"],
+ input[type="text"],
+ input[type="time"],
+ input[type="url"],
+ input[type="week"] {
+ padding: 6px 4px;
+ width: 100%;
+ }
+
+
+ div.DTE_Field_Info,
+ div.DTE_Field_Message {
+ font-size: 11px;
+ line-height: 1em;
+ }
+
+ div.DTE_Field_Error {
+ font-size: 11px;
+ line-height: 1em;
+ display: none;
+ color: red;
+ margin-top: 5px;
+ }
+
+ div.multi-value {
+ display: none;
+ border: 1px dotted #666;
+ border-radius: 3px;
+ padding: 5px;
+ background-color: #fafafa;
+ cursor: pointer;
+
+ span {
+ font-size: 0.8em;
+ line-height: 1.25em;
+ display: block;
+ color: #666;
+ }
+
+ &:hover {
+ background-color: #f1f1f1;
+ }
+ }
+
+ div.multi-restore {
+ display: none;
+ margin-top: 0.5em;
+ font-size: 0.8em;
+ line-height: 1.25em;
+ color: #3879d9;
+
+ &:hover {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+ }
+}
+
+// Specific field type styling
+div.DTE_Field_Type_textarea {
+ textarea {
+ padding: 3px;
+ width: 100%;
+ height: 80px;
+ }
+}
+
+div.DTE_Field.DTE_Field_Type_date {
+ img {
+ vertical-align: middle;
+ cursor: pointer;
+ *cursor: hand;
+ }
+
+ input.jqueryui {
+ width: 87%;
+ margin-right: 6px;
+ }
+}
+
+div.DTE_Field_Type_checkbox,
+div.DTE_Field_Type_radio {
+ div.DTE_Field_Input > div > div {
+ margin-bottom: 0.25em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ input {
+ }
+
+ label {
+ margin-left: 0.75em;
+ vertical-align: middle;
+ }
+ }
+}
+
+div.DTE_Field_Type_select div.DTE_Field_Input {
+ padding-top: 4px;
+}
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/inline.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/inline.scss Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,65 @@
+
+// Inline form editing
+// Hide the label and allow the field to take the full width
+div.DTE_Inline {
+ position: relative;
+ display: table;
+ width: 100%;
+
+ div.DTE_Inline_Field,
+ div.DTE_Inline_Buttons {
+ display: table-cell;
+ vertical-align: middle;
+
+ div.DTE_Field {
+ padding: 0;
+
+ >label {
+ display: none;
+ }
+
+ input {
+ width: 100%;
+ }
+ }
+
+ div.DTE_Form_Buttons button {
+ margin: -6px 0 -6px 4px;
+ padding: 5px;
+ }
+ }
+
+ // Have the input types take up full space, taking into account the cell padding
+ div.DTE_Field input[type="color"],
+ div.DTE_Field input[type="date"],
+ div.DTE_Field input[type="datetime"],
+ div.DTE_Field input[type="datetime-local"],
+ div.DTE_Field input[type="email"],
+ div.DTE_Field input[type="month"],
+ div.DTE_Field input[type="number"],
+ div.DTE_Field input[type="password"],
+ div.DTE_Field input[type="search"],
+ div.DTE_Field input[type="tel"],
+ div.DTE_Field input[type="text"],
+ div.DTE_Field input[type="time"],
+ div.DTE_Field input[type="url"],
+ div.DTE_Field input[type="week"] {
+ margin: -6px 0;
+ }
+
+ &.DTE_Processing:after {
+ position: absolute;
+ content: ' ';
+ display: block;
+ top: 4px;
+ right: 10px;
+ height: 12px;
+ width: 17px;
+ background: url('../images/ajax-loader-small.gif') no-repeat top left;
+ }
+}
+
+// Responsive integration
+span.dtr-data div.DTE_Inline {
+ display: inline-table;
+}
\ No newline at end of file
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/lightbox.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/lightbox.scss Tue Jul 28 08:32:36 2020 -0400
b
@@ -0,0 +1,147 @@
+
+
+div.DTED_Lightbox_Wrapper {
+ position: fixed;
+ top: 0;
+ left: 50%;
+ margin-left: -390px;
+ width: 780px;
+ height: 100%;
+ z-index: 11;
+
+ div.DTED_Lightbox_Container {
+ *position: absolute; /* IE6 */
+ *top: 50%;
+ #position: absolute; /* IE7 */
+ #top: 50%;
+ display: table;
+ height: 100%;
+ width: 100%;
+
+ div.DTED_Lightbox_Content_Wrapper {
+ *position: relative; /* IE6 */
+ #position: relative; /* IE7 */
+ display: table-cell;
+ vertical-align: middle;
+ width: 100%;
+
+ div.DTED_Lightbox_Content {
+ *top: -50%; /* IE6 */
+ #top: -50%; /* IE7 */
+ position: relative;
+ border: 7px solid rgba(220, 220, 220, 0.5);
+ box-shadow: 2px 2px 10px #555;
+ border-radius: 10px;
+ @include box-sizing(border-box);
+
+ div.DTE {
+ background: white;
+ border-radius: 6px;
+ box-shadow: 0 0 5px #555;
+ border: 2px solid #444;
+ @include box-sizing(border-box);
+
+ div.DTE_Header {
+ top: 2px;
+ left: 2px;
+ right: 2px;
+ width: auto;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+ div.DTE_Footer {
+ bottom: 2px;
+ left: 2px;
+ right: 2px;
+ width: auto;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+ }
+
+ div.DTED_Lightbox_Close {
+ @include close-icon();
+ }
+ }
+ }
+ }
+}
+
+
+div.DTED_Lightbox_Background {
+ @include overlay-background();
+}
+
+
+body.DTED_Lightbox_Mobile {
+ div.DTED_Lightbox_Background {
+ height: 0;
+ }
+
+ div.DTED_Lightbox_Shown {
+ display: none;
+ }
+
+ div.DTED_Lightbox_Wrapper {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ width: auto;
+ height: auto;
+ margin-left: 0;
+ -webkit-overflow-scrolling: touch;
+
+ div.DTED_Lightbox_Container {
+ display: block;
+
+ div.DTED_Lightbox_Content_Wrapper {
+ display: block;
+
+ div.DTED_Lightbox_Content {
+ border: 4px solid rgba(220, 220, 220, 0.5);
+ border-radius: 0;
+
+ div.DTE {
+ border-radius: 0;
+ box-shadow: 0 0 5px #555;
+ border: 2px solid #444;
+
+ div.DTE_Header {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+
+ div.DTE_Footer {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+
+ div.DTED_Lightbox_Close {
+ top: 11px;
+ right: 15px;
+ }
+ }
+ }
+ }
+ }
+}
+
+@media only screen 
+and (max-width: 780px) {
+ div.DTED_Lightbox_Wrapper {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ margin-left: 0;
+ }
+}
+
+
+
+
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/main.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/main.scss Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,188 @@
+
+
+// The main form.
+// Most of the styles for display of the main form come from the display
+// controller (lightbox and envelope are the two built in options).
+div.DTE_Body {
+ padding: 50px 0; // space for hte header and footer which are position: absolute
+
+ div.DTE_Body_Content {
+ position: relative;
+ overflow: auto;
+
+ div.DTE_Form_Info {
+ padding: 1em 1em 0 1em;
+ margin: 0;
+ }
+
+ div.DTE_Field {
+ position: relative;
+ zoom: 1;
+
+ clear: both;
+ padding: 5px 20%;
+ border: 1px solid transparent;
+
+ &:after {
+ display: block;
+ content: ".";
+ height: 0;
+ line-height: 0;
+ clear: both;
+ visibility: hidden;
+ }
+
+ &:hover {
+ background-color: #f9f9f9;
+ border: 1px solid #f3f3f3;
+ }
+
+ >label {
+ float: left;
+ width: 40%;
+ padding-top: 6px;
+ }
+
+ >div.DTE_Field_Input {
+ float: right;
+ width: 60%;
+ }
+
+ // Field in error state
+ &.DTE_Field_StateError { }
+
+ &.full {
+ padding: 5px 0 5px 20%;
+
+ >label {
+ width: 30%;
+ }
+
+ >div.DTE_Field_Input {
+ width: 70%;
+ }
+ }
+
+ &.block {
+ >div.DTE_Field_Input {
+ float: none;
+ clear: both;
+ width: 100%;
+ }
+ }
+ }
+ }
+}
+
+html[dir="rtl"] {
+ div.DTE_Body div.DTE_Body_Content div.DTE_Field {
+ > label {
+ float: right;
+ }
+
+ >div.DTE_Field_Input {
+ float: left;
+ }
+ }
+
+ div.DTE div.DTE_Form_Buttons button {
+ float: left;
+ }
+}
+
+// iPad in portrait 
+@media only screen 
+and (max-width : 768px) {
+ div.DTE_Body {
+ div.DTE_Body_Content {
+ div.DTE_Field {
+ padding: 5px 10%;
+
+ &.full {
+ padding: 5px 0 5px 10%;
+
+ >label {
+ width: 35.5%;
+ }
+
+ >div.DTE_Field_Input {
+ width: 64.5%;
+ }
+ }
+
+ &.block {
+ >div.DTE_Field_Input {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+}
+
+@media only screen 
+and (max-width : 640px) {
+ div.DTE_Body {
+ div.DTE_Body_Content {
+ div.DTE_Field {
+ padding: 5px 0;
+
+ &.full {
+ padding: 5px 0%;
+
+ >label {
+ width: 40%;
+ }
+
+ >div.DTE_Field_Input {
+ width: 60%;
+ }
+ }
+
+ &.block {
+ >div.DTE_Field_Input {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+}
+
+// For devices with smaller screens, the fields should be shown stacked
+@media only screen 
+and (max-width : 580px) {
+ div.DTE_Body {
+ div.DTE_Body_Content {
+ div.DTE_Field {
+ position: relative;
+ zoom: 1;
+
+ clear: both;
+ padding: 5px 0;
+
+ >label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ }
+
+ >div.DTE_Field_Input {
+ float: none;
+ width: auto;
+ }
+
+ &.full,
+ &.block {
+ padding: 5px 0;
+
+ >label,
+ >div.DTE_Field_Input {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+}
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/mixins.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/mixins.scss Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,176 @@
+
+
+@function tint( $color, $percent ) {
+ @return mix(white, $color, $percent);
+}
+
+@function shade( $color, $percent ) {
+ @return mix(black, $color, $percent);
+}
+
+
+@mixin border-radius ( $radius ) {
+ -webkit-border-radius: $radius;
+    -moz-border-radius: $radius;
+     -ms-border-radius: $radius;
+      -o-border-radius: $radius;
+         border-radius: $radius;
+}
+
+@mixin box-sizing($box-model) {
+  -webkit-box-sizing: $box-model; // Safari <= 5
+     -moz-box-sizing: $box-model; // Firefox <= 19
+          box-sizing: $box-model;
+}
+
+@mixin box-shadow($top, $left, $blur, $color, $inset: false) {
+  @if $inset {
+    -webkit-box-shadow:inset $top $left $blur $color;
+    -moz-box-shadow:inset $top $left $blur $color;
+    box-shadow:inset $top $left $blur $color;
+  } @else {
+    -webkit-box-shadow: $top $left $blur $color;
+    -moz-box-shadow: $top $left $blur $color;
+    box-shadow: $top $left $blur $color;
+  }
+}
+
+@mixin three-stop-gradient($fromColor, $middleColor, $toColor) {
+ background-color: $toColor; /* Fallback */
+ background-image: -webkit-linear-gradient(top, $fromColor, $middleColor, $toColor); /* Chrome 10+, Saf5.1+, iOS 5+ */
+ background-image:    -moz-linear-gradient(top, $fromColor, $middleColor, $toColor); /* FF3.6 */
+ background-image:     -ms-linear-gradient(top, $fromColor, $middleColor, $toColor); /* IE10 */
+ background-image:      -o-linear-gradient(top, $fromColor, $middleColor, $toColor); /* Opera 11.10+ */
+ background-image:         linear-gradient(to bottom, $fromColor, $middleColor, $toColor);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}');
+}
+
+@mixin radial-gradient ($fromColor, $toColor ) {
+ background: $toColor; /* Fallback */
+ background:     -ms-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* IE10 Consumer Preview */ 
+ background:    -moz-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Firefox */ 
+ background:      -o-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Opera */ 
+ background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, $fromColor), color-stop(1, $toColor)); /* Webkit (Safari/Chrome 10) */ 
+ background: -webkit-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Webkit (Chrome 11+) */ 
+ background: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */ 
+}
+
+@mixin keyframe ($animation_name) {
+    @-webkit-keyframes #{$animation_name} {
+        @content;
+    }

+    @-moz-keyframes #{$animation_name} {
+        @content;
+    }

+    @-o-keyframes #{$animation_name} {
+        @content;
+    }

+    @keyframes #{$animation_name} {
+        @content;
+    }
+}
+
+@mixin animation ($duration, $animation) {
+ -webkit-animation-duration: $duration;
+ -webkit-animation-name: $animation;
+ -webkit-animation-fill-mode: forwards;
+ -webkit-animation-iteration-count: infinite;
+ -webkit-animation-timing-function: linear;
+ -webkit-animation-direction: alternate;
+
+ -moz-animation-duration: $duration;
+ -moz-animation-name: $animation;
+ -moz-animation-fill-mode: forwards;
+ -moz-animation-iteration-count: infinite;
+ -moz-animation-timing-function: linear;
+ -moz-animation-direction: alternate;
+
+ -o-animation-duration: $duration;
+ -o-animation-name: $animation;
+ -o-animation-fill-mode: forwards;
+ -o-animation-iteration-count: infinite;
+ -o-animation-timing-function: linear;
+ -o-animation-direction: alternate;
+
+ animation-duration: $duration;
+ animation-name: $animation;
+ animation-fill-mode: forwards;
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+ animation-direction: alternate;
+}
+
+@mixin close-icon () {
+ position: absolute;
+ top: -11px;
+ right: -11px;
+ width: 22px;
+ height: 22px;
+ border: 2px solid white;
+ background-color: black;
+ text-align: center;
+ border-radius: 15px;
+ cursor: pointer;
+ z-index: 12;
+ box-shadow: 2px 2px 6px #111;
+
+ &:after {
+ content: '\00d7';
+ color: white;
+ font-weight: bold;
+ font-size: 18px;
+ line-height: 22px;
+ font-family: 'Courier New', Courier, monospace;
+ padding-left: 1px;
+ }
+
+ &:hover {
+ background-color: #092079;
+ box-shadow: 2px 2px 9px #111;
+ }
+}
+
+@mixin overlay-background () {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+
+ @include radial-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.7) );
+
+ z-index: 10;
+
+ // IE8- doesn't support RGBA and jQuery uses `filter:` for the fade-in
+ // animation, so we need a child element that is used just for the display
+ >div {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+
+ // IE7-
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
+
+ // IE8
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";
+ }
+
+ // IE9 has both filter and rgba support, so we need a hack to disable the filter
+ >div:not([dummy]) {
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled='false');
+ }
+}
+
+@mixin background-transision () {
+ -webkit-transition: background-color 500ms linear;
+    -moz-transition: background-color 500ms linear;
+     -ms-transition: background-color 500ms linear;
+      -o-transition: background-color 500ms linear;
+ transition: background-color 500ms linear;
+}
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/css/scss/upload.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/upload.scss Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,142 @@
+
+div.DTE div.editor_upload {
+ padding-top: 4px;
+
+ div.eu_table {
+ display: table;
+ width: 100%;
+ }
+
+ div.row {
+ display: table-row;
+ }
+
+ div.cell {
+ display: table-cell;
+ position: relative;
+ width: 50%;
+ vertical-align: top;
+ }
+
+ div.cell + div.cell {
+ padding-left: 10px;
+ }
+
+ div.row + div.row {
+ div.cell {
+ padding-top: 10px;
+ }
+ }
+
+ button.btn,
+ input[type=file] {
+ width: 100%;
+ height: 2.3em;
+ font-size: 0.8em;
+ text-align: center;
+ line-height: 1em;
+ }
+
+ input[type=file] {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ opacity: 0;
+ }
+
+ div.drop {
+ position: relative;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ border: 3px dashed #ccc;
+ border-radius: 6px;
+ min-height: 4em;
+ color: #999;
+ padding-top: 3px;
+ text-align: center;
+
+ &.over {
+ border: 3px dashed #111;
+ color: #111;
+ }
+
+ span {
+ max-width: 75%;
+ font-size: 0.85em;
+ line-height: 1em;
+ }
+ }
+
+ div.rendered {
+ img {
+ max-width: 8em;
+ margin: 0 auto;
+ }
+ }
+
+ &.noDrop {
+ div.drop {
+ display: none;
+ }
+
+ div.row.second {
+ display: none;
+ }
+
+ div.rendered {
+ margin-top: 10px;
+ }
+ }
+
+ &.noClear {
+ div.clearValue button {
+ display: none;
+ }
+ }
+
+ &.multi {
+ div.cell {
+ display: block;
+ width: 100%;
+
+ div.drop {
+ min-height: 0;
+ padding-bottom: 5px;
+ }
+ }
+
+ div.clearValue {
+ display: none;
+ }
+
+ ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+
+ li {
+ position: relative;
+ margin-top: 0.5em;
+
+ &:first-child {
+ margin-top: 0;
+ }
+
+ img {
+ vertical-align: middle;
+ }
+
+ button {
+ position: absolute;
+ width: 40px;
+ right: 0;
+ top: 50%;
+ margin-top: -1.5em;
+ }
+ }
+ }
+ }
+}
+
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/images/ajax-loader-small.gif
b
Binary file js/Editor-1.5.6/images/ajax-loader-small.gif has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/images/ajax-loader.gif
b
Binary file js/Editor-1.5.6/images/ajax-loader.gif has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/images/calender.png
b
Binary file js/Editor-1.5.6/images/calender.png has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/images/close.png
b
Binary file js/Editor-1.5.6/images/close.png has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/images/shadow_left.png
b
Binary file js/Editor-1.5.6/images/shadow_left.png has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/images/shadow_right.png
b
Binary file js/Editor-1.5.6/images/shadow_right.png has changed
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/dataTables.editor.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/dataTables.editor.js Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,8844 @@\n+/*! DataTables Editor v1.5.6\n+ *\n+ * \xc2\xa92012-2016 SpryMedia Ltd, all rights reserved.\n+ * License: editor.datatables.net/license\n+ */\n+\n+/**\n+ * @summary     DataTables Editor\n+ * @description Table editing library for DataTables\n+ * @version     1.5.6\n+ * @file        dataTables.editor.js\n+ * @author      SpryMedia Ltd\n+ * @contact     www.datatables.net/contact\n+ */\n+\n+/*jslint evil: true, undef: true, browser: true */\n+/*globals jQuery,alert,console */\n+\n+(function( factory ){\n+\tif ( typeof define === \'function\' && define.amd ) {\n+\t\t// AMD\n+\t\tdefine( [\'jquery\', \'datatables.net\'], function ( $ ) {\n+\t\t\treturn factory( $, window, document );\n+\t\t} );\n+\t}\n+\telse if ( typeof exports === \'object\' ) {\n+\t\t// CommonJS\n+\t\tmodule.exports = function (root, $) {\n+\t\t\tif ( ! root ) {\n+\t\t\t\troot = window;\n+\t\t\t}\n+\n+\t\t\tif ( ! $ || ! $.fn.dataTable ) {\n+\t\t\t\t$ = require(\'datatables.net\')(root, $).$;\n+\t\t\t}\n+\n+\t\t\treturn factory( $, root, root.document );\n+\t\t};\n+\t}\n+\telse {\n+\t\t// Browser\n+\t\tfactory( jQuery, window, document );\n+\t}\n+}(function( $, window, document, undefined ) {\n+\'use strict\';\n+var DataTable = $.fn.dataTable;\n+\n+\n+if ( ! DataTable || ! DataTable.versionCheck || ! DataTable.versionCheck(\'1.10.7\') ) {\n+\tthrow \'Editor requires DataTables 1.10.7 or newer\';\n+}\n+\n+/**\n+ * Editor is a plug-in for <a href="http://datatables.net">DataTables</a> which\n+ * provides an interface for creating, reading, editing and deleting and entries\n+ * (a CRUD interface) in a DataTable. The documentation presented here is\n+ * primarily focused on presenting the API for Editor. For a full list of\n+ * features, examples and the server interface protocol, please refer to the <a\n+ * href="http://editor.datatables.net">Editor web-site</a>.\n+ *\n+ * Note that in this documentation, for brevity, the `DataTable` refers to the\n+ * jQuery parameter `jQuery.fn.dataTable` through which it may be  accessed.\n+ * Therefore, when creating a new Editor instance, use `jQuery.fn.Editor` as\n+ * shown in the examples below.\n+ *\n+ *  @class\n+ *  @param {object} [oInit={}] Configuration object for Editor. Options\n+ *    are defined by {@link Editor.defaults}.\n+ *  @requires jQuery 1.7+\n+ *  @requires DataTables 1.10+\n+ */\n+var Editor = function ( opts )\n+{\n+\tif ( ! this instanceof Editor ) {\n+\t\talert( "DataTables Editor must be initialised as a \'new\' instance\'" );\n+\t}\n+\n+\tthis._constructor( opts );\n+};\n+\n+// Export Editor as a DataTables property\n+DataTable.Editor = Editor;\n+$.fn.DataTable.Editor = Editor;\n+\n+// Internal methods\n+\n+\n+/**\n+ * Get an Editor node based on the data-dte-e (element) attribute and return it\n+ * as a jQuery object.\n+ *  @param {string} dis The data-dte-e attribute name to match for the element\n+ *  @param {node} [ctx=document] The context for the search - recommended this\n+ *    parameter is included for performance.\n+ *  @returns {jQuery} jQuery object of found node(s).\n+ *  @private\n+ */\n+var _editor_el = function ( dis, ctx )\n+{\n+\tif ( ctx === undefined ) {\n+\t\tctx = document;\n+\t}\n+\n+\treturn $(\'*[data-dte-e="\'+dis+\'"]\', ctx);\n+};\n+\n+\n+/** @internal Counter for unique event namespaces in the inline control */\n+var __inlineCounter = 0;\n+\n+var _pluck = function ( a, prop )\n+{\n+\tvar out = [];\n+\n+\t$.each( a, function ( idx, el ) {\n+\t\tout.push( el[ prop ] );\n+\t} );\n+\n+\treturn out;\n+};\n+\n+// Field class\n+\n+\n+Editor.Field = function ( opts, classes, host ) {\n+\tvar that = this;\n+\tvar multiI18n = host.i18n.multi;\n+\n+\topts = $.extend( true, {}, Editor.Field.defaults, opts );\n+\t\n+\tif ( ! Editor.fieldTypes[ opts.type ] ) {\n+\t\tthrow "Error adding field - unknown field type "+opts.type;\n+\t}\n+\n+\tthis.s = $.extend( {}, Editor.Field.settings, { // has to be a shallow copy!\n+\t\ttype:       Editor.fieldTypes[ opts.type ],\n+\t\tname:       opts.name,\n+\t\tclasses:    classes,\n+\t\thost:       host,\n+\t\topts:       opts,\n+\t\tmultiValue: false\n+\t} );\n+\n+\t// No id, so assign one to have the label reference work\n+\tif ( ! opts.id ) {\n+\t\topts.id = \'DTE_Field_\'+opts.name;'..b' - included for naming consistency.\n+ *  @name Editor#postCreate\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that was used to update the DataTable\n+ */\n+\n+/**\n+ * Edit method activated event, fired when the edit API method has been called,\n+ * just prior to the form being shown. Useful for manipulating the form specifically\n+ * for the edit state.\n+ *  @name Editor#initEdit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {node} tr TR element of the row to be edited\n+ *  @param {array|object} data Data source array / object for the row to be\n+ *    edited\n+ */\n+\n+/**\n+ * Pre-edit row event, fired just before DataTables calls the fnUpdate method\n+ * to edit data in a DataTables row, allowing modification of the data that will be\n+ * used to update the table.\n+ *  @name Editor#preEdit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that will be used to update the DataTable\n+ */\n+\n+/**\n+ * Edit row event, fired when a row has been edited in the DataTable by a form\n+ * submission. This is called just after the fnUpdate call to the DataTable.\n+ *  @name Editor#edit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that was used to update the DataTable\n+ */\n+\n+/**\n+ * As per the `edit` event - included for naming consistency.\n+ *  @name Editor#postEdit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that was used to update the DataTable\n+ */\n+\n+/**\n+ * Remove method activated event, fired when the remove API method has been\n+ * called, just prior to the form being shown. Useful for manipulating the form\n+ * specifically for the remove state.\n+ *  @name Editor#initRemove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {array} trs Array of the TR elements for the removed to be deleted\n+ *  @param {array} data Array of the data source array / objects for the rows to\n+ *    be deleted. This is in the same index order as the TR nodes in the second\n+ *    parameter.\n+ */\n+\n+/**\n+ * Pre-remove row event, fired just before DataTables calls the fnDeleteRow method\n+ * to delete a DataTables row.\n+ *  @name Editor#preRemove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ */\n+\n+/**\n+ * Row removed event, fired when a row has been removed in the DataTable by a form\n+ * submission. This is called just after the fnDeleteRow call to the DataTable.\n+ *  @name Editor#remove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ */\n+\n+/**\n+ * As per the `postRemove` event - included for naming consistency.\n+ *  @name Editor#postRemove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ */\n+\n+/**\n+ * Set data event, fired when the data is gathered from the form to be used\n+ * to update the DataTable. This is a "global" version of `preCreate`, `preEdit`\n+ * and `preRemove` and can be used to manipulate the data that will be added\n+ * to the DataTable for all three actions\n+ *  @name Editor#setData\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that will be used to update the DataTable\n+ *  @param {string} action The action being performed by the form - \'create\',\n+ *    \'edit\' or \'remove\'.\n+ */\n+\n+/**\n+ * Initialisation of the Editor instance has been completed.\n+ *  @name Editor#initComplete\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ */\n+\n+\n+return Editor;\n+}));\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/dataTables.editor.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/dataTables.editor.min.js Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,140 @@\n+/*!\n+ DataTables Editor v1.5.6\n+\n+ \xc2\xa92012-2016 SpryMedia Ltd, all rights reserved.\n+ License: editor.datatables.net/license\n+*/\n+(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(j){return d(j,window,document)}):"object"===typeof exports?module.exports=function(j,q){j||(j=window);if(!q||!q.fn.dataTable)q=require("datatables.net")(j,q).$;return d(q,j,j.document)}:d(jQuery,window,document)})(function(d,j,q,h){function v(a){a=a.context[0];return a.oInit.editor||a._editor}function B(a,b,c,e){b||(b={});b.buttons===h&&(b.buttons="_basic");b.title===h&&(b.title=a.i18n[c].title);b.message===\n+h&&("remove"===c?(a=a.i18n[c].confirm,b.message=1!==e?a._.replace(/%d/,e):a["1"]):b.message="");return b}var r=d.fn.dataTable;if(!r||!r.versionCheck||!r.versionCheck("1.10.7"))throw"Editor requires DataTables 1.10.7 or newer";var f=function(a){!this instanceof f&&alert("DataTables Editor must be initialised as a \'new\' instance\'");this._constructor(a)};r.Editor=f;d.fn.DataTable.Editor=f;var t=function(a,b){b===h&&(b=q);return d(\'*[data-dte-e="\'+a+\'"]\',b)},N=0,y=function(a,b){var c=[];d.each(a,function(a,\n+d){c.push(d[b])});return c};f.Field=function(a,b,c){var e=this,l=c.i18n.multi,a=d.extend(!0,{},f.Field.defaults,a);if(!f.fieldTypes[a.type])throw"Error adding field - unknown field type "+a.type;this.s=d.extend({},f.Field.settings,{type:f.fieldTypes[a.type],name:a.name,classes:b,host:c,opts:a,multiValue:!1});a.id||(a.id="DTE_Field_"+a.name);a.dataProp&&(a.data=a.dataProp);""===a.data&&(a.data=a.name);var k=r.ext.oApi;this.valFromData=function(b){return k._fnGetObjectDataFn(a.data)(b,"editor")};this.valToData=\n+k._fnSetObjectDataFn(a.data);b=d(\'<div class="\'+b.wrapper+" "+b.typePrefix+a.type+" "+b.namePrefix+a.name+" "+a.className+\'"><label data-dte-e="label" class="\'+b.label+\'" for="\'+a.id+\'">\'+a.label+\'<div data-dte-e="msg-label" class="\'+b["msg-label"]+\'">\'+a.labelInfo+\'</div></label><div data-dte-e="input" class="\'+b.input+\'"><div data-dte-e="input-control" class="\'+b.inputControl+\'"/><div data-dte-e="multi-value" class="\'+b.multiValue+\'">\'+l.title+\'<span data-dte-e="multi-info" class="\'+b.multiInfo+\n+\'">\'+l.info+\'</span></div><div data-dte-e="msg-multi" class="\'+b.multiRestore+\'">\'+l.restore+\'</div><div data-dte-e="msg-error" class="\'+b["msg-error"]+\'"></div><div data-dte-e="msg-message" class="\'+b["msg-message"]+\'"></div><div data-dte-e="msg-info" class="\'+b["msg-info"]+\'">\'+a.fieldInfo+"</div></div></div>");c=this._typeFn("create",a);null!==c?t("input-control",b).prepend(c):b.css("display","none");this.dom=d.extend(!0,{},f.Field.models.dom,{container:b,inputControl:t("input-control",b),label:t("label",\n+b),fieldInfo:t("msg-info",b),labelInfo:t("msg-label",b),fieldError:t("msg-error",b),fieldMessage:t("msg-message",b),multi:t("multi-value",b),multiReturn:t("msg-multi",b),multiInfo:t("multi-info",b)});this.dom.multi.on("click",function(){e.val("")});this.dom.multiReturn.on("click",function(){e.s.multiValue=true;e._multiValueCheck()});d.each(this.s.type,function(a,b){typeof b==="function"&&e[a]===h&&(e[a]=function(){var b=Array.prototype.slice.call(arguments);b.unshift(a);b=e._typeFn.apply(e,b);return b===\n+h?e:b})})};f.Field.prototype={def:function(a){var b=this.s.opts;if(a===h)return a=b["default"]!==h?b["default"]:b.def,d.isFunction(a)?a():a;b.def=a;return this},disable:function(){this._typeFn("disable");return this},displayed:function(){var a=this.dom.container;return a.parents("body").length&&"none"!=a.css("display")?!0:!1},enable:function(){this._typeFn("enable");return this},error:function(a,b){var c=this.s.classes;a?this.dom.container.addClass(c.error):this.dom.container.removeClass(c.error);\n+return this._msg(this.dom.fieldError,a,b)},isMultiValue:function(){return this.s.multiValue},inError:function(){return this.dom.container.hasClass(this.s.classes.error)},input:function(){return this.s.type.input?this._typeFn("input"):d("input, select, textarea",this.dom.container)}'..b's._preChecked)this.checked=true})});return a._input[0]},get:function(a){a=a._input.find("input:checked");return a.length?a[0]._editor_val:h},set:function(a,b){a._input.find("input").each(function(){this._preChecked=false;\n+if(this._editor_val==b)this._preChecked=this.checked=true;else this._preChecked=this.checked=false});A(a._input.find("input:checked"))},enable:function(a){a._input.find("input").prop("disabled",false)},disable:function(a){a._input.find("input").prop("disabled",true)},update:function(a,b){var c=s.radio,d=c.get(a);c._addOptions(a,b);var f=a._input.find("input");c.set(a,f.filter(\'[value="\'+d+\'"]\').length?d:f.eq(0).attr("value"))}});s.date=d.extend(!0,{},p,{create:function(a){a._input=d("<input />").attr(d.extend({id:f.safeId(a.id),\n+type:"text"},a.attr));if(d.datepicker){a._input.addClass("jqueryui");if(!a.dateFormat)a.dateFormat=d.datepicker.RFC_2822;if(a.dateImage===h)a.dateImage="../../images/calender.png";setTimeout(function(){d(a._input).datepicker(d.extend({showOn:"both",dateFormat:a.dateFormat,buttonImage:a.dateImage,buttonImageOnly:true},a.opts));d("#ui-datepicker-div").css("display","none")},10)}else a._input.attr("type","date");return a._input[0]},set:function(a,b){d.datepicker&&a._input.hasClass("hasDatepicker")?a._input.datepicker("setDate",\n+b).change():d(a._input).val(b)},enable:function(a){d.datepicker?a._input.datepicker("enable"):d(a._input).prop("disabled",false)},disable:function(a){d.datepicker?a._input.datepicker("disable"):d(a._input).prop("disabled",true)},owns:function(a,b){return d(b).parents("div.ui-datepicker").length||d(b).parents("div.ui-datepicker-header").length?true:false}});s.datetime=d.extend(!0,{},p,{create:function(a){a._input=d("<input />").attr(d.extend(true,{id:f.safeId(a.id),type:"text"},a.attr));a._picker=\n+new f.DateTime(a._input,d.extend({format:a.format,i18n:this.i18n.datetime},a.opts));return a._input[0]},set:function(a,b){a._picker.val(b);A(a._input)},owns:function(a,b){return a._picker.owns(b)},destroy:function(a){a._picker.destroy()},minDate:function(a,b){a._picker.min(b)},maxDate:function(a,b){a._picker.max(b)}});s.upload=d.extend(!0,{},p,{create:function(a){var b=this;return M(b,a,function(c){f.fieldTypes.upload.set.call(b,a,c[0])})},get:function(a){return a._val},set:function(a,b){a._val=b;\n+var c=a._input;if(a.display){var d=c.find("div.rendered");a._val?d.html(a.display(a._val)):d.empty().append("<span>"+(a.noFileText||"No file")+"</span>")}d=c.find("div.clearValue button");if(b&&a.clearText){d.html(a.clearText);c.removeClass("noClear")}else c.addClass("noClear");a._input.find("input").triggerHandler("upload.editor",[a._val])},enable:function(a){a._input.find("input").prop("disabled",false);a._enabled=true},disable:function(a){a._input.find("input").prop("disabled",true);a._enabled=\n+false}});s.uploadMany=d.extend(!0,{},p,{create:function(a){var b=this,c=M(b,a,function(c){a._val=a._val.concat(c);f.fieldTypes.uploadMany.set.call(b,a,a._val)});c.addClass("multi").on("click","button.remove",function(c){c.stopPropagation();c=d(this).data("idx");a._val.splice(c,1);f.fieldTypes.uploadMany.set.call(b,a,a._val)});return c},get:function(a){return a._val},set:function(a,b){b||(b=[]);if(!d.isArray(b))throw"Upload collections must have an array as a value";a._val=b;var c=this,e=a._input;\n+if(a.display){e=e.find("div.rendered").empty();if(b.length){var f=d("<ul/>").appendTo(e);d.each(b,function(b,d){f.append("<li>"+a.display(d,b)+\' <button class="\'+c.classes.form.button+\' remove" data-idx="\'+b+\'">&times;</button></li>\')})}else e.append("<span>"+(a.noFileText||"No files")+"</span>")}a._input.find("input").triggerHandler("upload.editor",[a._val])},enable:function(a){a._input.find("input").prop("disabled",false);a._enabled=true},disable:function(a){a._input.find("input").prop("disabled",\n+true);a._enabled=false}});r.ext.editorFields&&d.extend(f.fieldTypes,r.ext.editorFields);r.ext.editorFields=f.fieldTypes;f.files={};f.prototype.CLASS="Editor";f.version="1.5.6";return f});\n'
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/editor.bootstrap.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.bootstrap.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,220 @@
+/*! Bootstrap integration for DataTables' Editor
+ * Â©2015 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-bs', 'datatables.net-editor'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-bs')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Editor ) {
+ require('datatables.net-editor')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/*
+ * Set the default display controller to be our bootstrap control 
+ */
+DataTable.Editor.defaults.display = "bootstrap";
+
+
+/*
+ * Alter the buttons that Editor adds to TableTools so they are suitable for bootstrap
+ */
+var i18nDefaults = DataTable.Editor.defaults.i18n;
+i18nDefaults.create.title = "<h3>"+i18nDefaults.create.title+"</h3>";
+i18nDefaults.edit.title = "<h3>"+i18nDefaults.edit.title+"</h3>";
+i18nDefaults.remove.title = "<h3>"+i18nDefaults.remove.title+"</h3>";
+
+var tt = DataTable.TableTools;
+if ( tt ) {
+ tt.BUTTONS.editor_create.formButtons[0].className = "btn btn-primary";
+ tt.BUTTONS.editor_edit.formButtons[0].className = "btn btn-primary";
+ tt.BUTTONS.editor_remove.formButtons[0].className = "btn btn-danger";
+}
+
+
+/*
+ * Change the default classes from Editor to be classes for Bootstrap
+ */
+$.extend( true, $.fn.dataTable.Editor.classes, {
+ "header": {
+ "wrapper": "DTE_Header modal-header"
+ },
+ "body": {
+ "wrapper": "DTE_Body modal-body"
+ },
+ "footer": {
+ "wrapper": "DTE_Footer modal-footer"
+ },
+ "form": {
+ "tag": "form-horizontal",
+ "button": "btn btn-default"
+ },
+ "field": {
+ "wrapper": "DTE_Field",
+ "label":   "col-lg-4 control-label",
+ "input":   "col-lg-8 controls",
+ "error":   "error has-error",
+ "msg-labelInfo": "help-block",
+ "msg-info":      "help-block",
+ "msg-message":   "help-block",
+ "msg-error":     "help-block",
+ "multiValue":    "well well-sm multi-value",
+ "multiInfo":     "small",
+ "multiRestore":  "well well-sm multi-restore"
+ }
+} );
+
+
+/*
+ * Bootstrap display controller - this is effectively a proxy to the Bootstrap
+ * modal control.
+ */
+
+var self;
+
+DataTable.Editor.display.bootstrap = $.extend( true, {}, DataTable.Editor.models.displayController, {
+ /*
+  * API methods
+  */
+ "init": function ( dte ) {
+ // init can be called multiple times (one for each Editor instance), but
+ // we only support a single construct here (shared between all Editor
+ // instances)
+ if ( ! self._dom.content ) {
+ self._dom.content = $(
+ '<div class="modal fade">'+
+ '<div class="modal-dialog">'+
+ '<div class="modal-content"/>'+
+ '</div>'+
+ '</div>'
+ );
+
+ self._dom.close = $('<button class="close">&times;</div>');
+
+ self._dom.close.click( function () {
+ self._dte.close('icon');
+ } );
+
+ $(document).on('click', 'div.modal', function (e) {
+ if ( $(e.target).hasClass('modal') && self._shown ) {
+ self._dte.background();
+ }
+ } );
+
+ dte.on( 'open.dtebs', function ( e, type ) {
+ if ( type === 'inline' || type === 'bubble' ) {
+ $('div.DTE input[type=text], div.DTE select, div.DTE textarea').addClass( 'form-control' );
+ }
+ } );
+ }
+
+ return self;
+ },
+
+ "open": function ( dte, append, callback ) {
+ if ( self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ self._dte = dte;
+ self._shown = true;
+
+ var content = self._dom.content.find('div.modal-content');
+ content.children().detach();
+ content.append( append );
+
+ $('div.modal-header', append).prepend( self._dom.close );
+
+ $(self._dom.content)
+ .one('shown.bs.modal', function () {
+ // Can only give elements focus when shown
+ if ( self._dte.s.setFocus ) {
+ self._dte.s.setFocus.focus();
+ }
+
+ if ( callback ) {
+ callback();
+ }
+ })
+ .one('hidden', function () {
+ self._shown = false;
+ })
+ .appendTo( 'body' )
+ .modal( {
+ backdrop: "static",
+ keyboard: false
+ } );
+
+ $('input:not([type=checkbox]):not([type=radio]), select, textarea', self._dom.content)
+ .addClass( 'form-control' );
+ },
+
+ "close": function ( dte, callback ) {
+ if ( !self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ $(self._dom.content)
+ .one( 'hidden.bs.modal', function () {
+ $(this).detach();
+ } )
+ .modal('hide');
+
+ self._dte = dte;
+ self._shown = false;
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ node: function ( dte ) {
+ return self._dom.content[0];
+ },
+
+
+ /*
+  * Private properties
+  */
+  "_shown": false,
+ "_dte": null,
+ "_dom": {}
+} );
+
+self = DataTable.Editor.display.bootstrap;
+
+
+return DataTable.Editor;
+}));
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/editor.bootstrap.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.bootstrap.min.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,10 @@
+/*!
+ Bootstrap integration for DataTables' Editor
+ Â©2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-editor"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net-bs")(a,d).$;d.fn.dataTable.Editor||require("datatables.net-editor")(a,d);return c(d,a,a.document)}:c(jQuery,window,document)})(function(c,a,d){a=c.fn.dataTable;a.Editor.defaults.display="bootstrap";var e=a.Editor.defaults.i18n;
+e.create.title="<h3>"+e.create.title+"</h3>";e.edit.title="<h3>"+e.edit.title+"</h3>";e.remove.title="<h3>"+e.remove.title+"</h3>";if(e=a.TableTools)e.BUTTONS.editor_create.formButtons[0].className="btn btn-primary",e.BUTTONS.editor_edit.formButtons[0].className="btn btn-primary",e.BUTTONS.editor_remove.formButtons[0].className="btn btn-danger";c.extend(!0,c.fn.dataTable.Editor.classes,{header:{wrapper:"DTE_Header modal-header"},body:{wrapper:"DTE_Body modal-body"},footer:{wrapper:"DTE_Footer modal-footer"},
+form:{tag:"form-horizontal",button:"btn btn-default"},field:{wrapper:"DTE_Field",label:"col-lg-4 control-label",input:"col-lg-8 controls",error:"error has-error","msg-labelInfo":"help-block","msg-info":"help-block","msg-message":"help-block","msg-error":"help-block",multiValue:"well well-sm multi-value",multiInfo:"small",multiRestore:"well well-sm multi-restore"}});var b;a.Editor.display.bootstrap=c.extend(!0,{},a.Editor.models.displayController,{init:function(a){if(!b._dom.content){b._dom.content=
+c('<div class="modal fade"><div class="modal-dialog"><div class="modal-content"/></div></div>');b._dom.close=c('<button class="close">&times;</div>');b._dom.close.click(function(){b._dte.close("icon")});c(d).on("click","div.modal",function(a){c(a.target).hasClass("modal")&&b._shown&&b._dte.background()});a.on("open.dtebs",function(b,a){(a==="inline"||a==="bubble")&&c("div.DTE input[type=text], div.DTE select, div.DTE textarea").addClass("form-control")})}return b},open:function(a,e,d){if(b._shown)d&&
+d();else{b._dte=a;b._shown=true;a=b._dom.content.find("div.modal-content");a.children().detach();a.append(e);c("div.modal-header",e).prepend(b._dom.close);c(b._dom.content).one("shown.bs.modal",function(){b._dte.s.setFocus&&b._dte.s.setFocus.focus();d&&d()}).one("hidden",function(){b._shown=false}).appendTo("body").modal({backdrop:"static",keyboard:false});c("input:not([type=checkbox]):not([type=radio]), select, textarea",b._dom.content).addClass("form-control")}},close:function(a,d){if(b._shown){c(b._dom.content).one("hidden.bs.modal",
+function(){c(this).detach()}).modal("hide");b._dte=a;b._shown=false}d&&d()},node:function(){return b._dom.content[0]},_shown:!1,_dte:null,_dom:{}});b=a.Editor.display.bootstrap;return a.Editor});
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/editor.foundation.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.foundation.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,180 @@
+/*! Foundation integration for DataTables' Editor
+ * Â©2015 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-zf', 'datatables.net-editor'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-zf')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Editor ) {
+ require('datatables.net-editor')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/*
+ * Set the default display controller to be our foundation control 
+ */
+DataTable.Editor.defaults.display = "foundation";
+
+
+/*
+ * Change the default classes from Editor to be classes for Foundation
+ */
+$.extend( true, $.fn.dataTable.Editor.classes, {
+ field: {
+ wrapper:         "DTE_Field row",
+ label:           "small-4 columns inline",
+ input:           "small-8 columns",
+ error:           "error",
+ multiValue:      "panel radius multi-value",
+ multiInfo:       "small",
+ multiRestore:    "panel radius multi-restore",
+ "msg-labelInfo": "label secondary",
+ "msg-info":      "label secondary",
+ "msg-message":   "label secondary",
+ "msg-error":     "label alert"
+ },
+ form: {
+ button:  "button small"
+ }
+} );
+
+
+/*
+ * Foundation display controller - this is effectively a proxy to the Foundation
+ * modal control.
+ */
+var self;
+
+DataTable.Editor.display.foundation = $.extend( true, {}, DataTable.Editor.models.displayController, {
+ /*
+  * API methods
+  */
+ "init": function ( dte ) {
+ self._dom.content = $(
+ '<div class="reveal reveal-modal" data-reveal />'
+ );
+ self._dom.close = $('<button class="close close-button">&times;</div>');
+
+ self._dom.close.click( function () {
+ self._dte.close('icon');
+ } );
+
+ return self;
+ },
+
+ "open": function ( dte, append, callback ) {
+ if ( self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ self._dte = dte;
+ self._shown = true;
+
+ var content = self._dom.content;
+ content.children().detach();
+ content.append( append );
+ content.prepend( self._dom.close );
+
+ $(self._dom.content)
+ .one('opened.fndtn.reveal', function () {
+ if ( callback ) {
+ callback();
+ }
+ })
+ .one('closed.fndtn.reveal', function () {
+ self._shown = false;
+ });
+
+ if ( window.Foundation && window.Foundation.Reveal ) {
+ // Foundation 6
+ if ( ! self._reveal ) {
+ self._reveal = new window.Foundation.Reveal( self._dom.content, {
+ closeOnClick: false
+ } );
+ }
+
+ $(self._dom.content).appendTo('body');
+ self._reveal.open();
+ }
+ else {
+ // Foundation 5
+ $(self._dom.content).foundation( 'reveal','open' );
+ }
+
+ $(document).on('click.dte-zf', 'div.reveal-modal-bg, div.reveal-overlay', function () {
+ self._dte.background();
+ } );
+ },
+
+ "close": function ( dte, callback ) {
+ if ( !self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ if ( self._reveal ) {
+ self._reveal.close();
+ }
+ else {
+ $(self._dom.content).foundation( 'reveal', 'close' );
+ }
+
+ $(document).off( 'click.dte-zf' );
+
+ self._dte = dte;
+ self._shown = false;
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ node: function ( dte ) {
+ return self._dom.content[0];
+ },
+
+
+ /*
+  * Private properties
+  */
+  "_shown": false,
+ "_dte": null,
+ "_dom": {}
+} );
+
+self = DataTable.Editor.display.foundation;
+
+
+return DataTable.Editor;
+}));
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/editor.foundation.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.foundation.min.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,8 @@
+/*!
+ Foundation integration for DataTables' Editor
+ Â©2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-editor"],function(c){return b(c,window,document)}):"object"===typeof exports?module.exports=function(c,d){c||(c=window);if(!d||!d.fn.dataTable)d=require("datatables.net-zf")(c,d).$;d.fn.dataTable.Editor||require("datatables.net-editor")(c,d);return b(d,c,c.document)}:b(jQuery,window,document)})(function(b,c,d){var e=b.fn.dataTable;e.Editor.defaults.display="foundation";b.extend(!0,b.fn.dataTable.Editor.classes,
+{field:{wrapper:"DTE_Field row",label:"small-4 columns inline",input:"small-8 columns",error:"error",multiValue:"panel radius multi-value",multiInfo:"small",multiRestore:"panel radius multi-restore","msg-labelInfo":"label secondary","msg-info":"label secondary","msg-message":"label secondary","msg-error":"label alert"},form:{button:"button small"}});var a;e.Editor.display.foundation=b.extend(!0,{},e.Editor.models.displayController,{init:function(){a._dom.content=b('<div class="reveal reveal-modal" data-reveal />');
+a._dom.close=b('<button class="close close-button">&times;</div>');a._dom.close.click(function(){a._dte.close("icon")});return a},open:function(f,e,g){if(a._shown)g&&g();else{a._dte=f;a._shown=true;f=a._dom.content;f.children().detach();f.append(e);f.prepend(a._dom.close);b(a._dom.content).one("opened.fndtn.reveal",function(){g&&g()}).one("closed.fndtn.reveal",function(){a._shown=false});if(c.Foundation&&c.Foundation.Reveal){if(!a._reveal)a._reveal=new c.Foundation.Reveal(a._dom.content,{closeOnClick:false});
+b(a._dom.content).appendTo("body");a._reveal.open()}else b(a._dom.content).foundation("reveal","open");b(d).on("click.dte-zf","div.reveal-modal-bg, div.reveal-overlay",function(){a._dte.background()})}},close:function(c,e){if(a._shown){a._reveal?a._reveal.close():b(a._dom.content).foundation("reveal","close");b(d).off("click.dte-zf");a._dte=c;a._shown=false}e&&e()},node:function(){return a._dom.content[0]},_shown:!1,_dte:null,_dom:{}});a=e.Editor.display.foundation;return e.Editor});
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/editor.jqueryui.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.jqueryui.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,141 @@
+/*! jQuery UI integration for DataTables' Editor
+ * Â©2015 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-jqui', 'datatables.net-editor'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-jqui')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Editor ) {
+ require('datatables.net-editor')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+var Editor = DataTable.Editor;
+var doingClose = false;
+
+/*
+ * Set the default display controller to be our foundation control 
+ */
+Editor.defaults.display = "jqueryui";
+
+/*
+ * Change the default classes from Editor to be classes for Bootstrap
+ */
+$.extend( true, $.fn.dataTable.Editor.classes, {
+ form: {
+ button:  "btn ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
+ }
+} );
+
+/*
+ * jQuery UI display controller - this is effectively a proxy to the jQuery UI
+ * modal control.
+ */
+Editor.display.jqueryui = $.extend( true, {}, Editor.models.displayController, {
+ init: function ( dte ) {
+ dte.__dialouge = $('<div/>')
+ .css('display', 'none')
+ .appendTo('body')
+ .dialog( $.extend( true, Editor.display.jqueryui.modalOptions, {
+ autoOpen: false,
+ buttons: { "A": function () {} }, // fake button so the button container is created
+ closeOnEscape: false // allow editor's escape function to run
+ } ) );
+
+ // Need to know when the dialogue is closed using its own trigger
+ // so we can reset the form
+ $(dte.__dialouge).on( 'dialogclose', function (e) {
+ if ( ! doingClose ) {
+ dte.close();
+ }
+ } );
+
+ return Editor.display.jqueryui;
+ },
+
+ open: function ( dte, append, callback ) {
+ dte.__dialouge
+ .append( append )
+ .dialog( 'open' );
+
+ $(dte.dom.formError).appendTo(
+ dte.__dialouge.parent().find('div.ui-dialog-buttonpane')
+ );
+
+ dte.__dialouge.parent().find('.ui-dialog-title').html( dte.dom.header.innerHTML );
+ dte.__dialouge.parent().addClass('DTED');
+
+ // Modify the Editor buttons to be jQuery UI suitable
+ var buttons = $(dte.dom.buttons)
+ .children()
+ .addClass( 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only' )
+ .each( function () {
+ $(this).wrapInner( '<span class="ui-button-text" />' );
+ } );
+
+ // Move the buttons into the jQuery UI button set
+ dte.__dialouge.parent().find('div.ui-dialog-buttonset')
+ .empty()
+ .append( buttons.parent() );
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ close: function ( dte, callback ) {
+ if ( dte.__dialouge ) {
+ // Don't want to trigger a close() call from dialogclose!
+ doingClose = true;
+ dte.__dialouge.dialog( 'close' );
+ doingClose = false;
+ }
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ node: function ( dte ) {
+ return dte.__dialouge[0];
+ },
+
+ // jQuery UI dialogues perform their own focus capture
+ captureFocus: false
+} );
+
+
+Editor.display.jqueryui.modalOptions = {
+ width: 600,
+ modal: true
+};
+
+
+return DataTable.Editor;
+}));
b
diff -r bca68066a957 -r a64ece32a01a js/Editor-1.5.6/js/editor.jqueryui.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.jqueryui.min.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,8 @@
+/*!
+ jQuery UI integration for DataTables' Editor
+ Â©2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-editor"],function(c){return b(c,window,document)}):"object"===typeof exports?module.exports=function(c,a){c||(c=window);if(!a||!a.fn.dataTable)a=require("datatables.net-jqui")(c,a).$;a.fn.dataTable.Editor||require("datatables.net-editor")(c,a);return b(a,c,c.document)}:b(jQuery,window,document)})(function(b){var c=b.fn.dataTable,a=c.Editor,e=!1;a.defaults.display="jqueryui";b.extend(!0,b.fn.dataTable.Editor.classes,
+{form:{button:"btn ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"}});a.display.jqueryui=b.extend(!0,{},a.models.displayController,{init:function(d){d.__dialouge=b("<div/>").css("display","none").appendTo("body").dialog(b.extend(true,a.display.jqueryui.modalOptions,{autoOpen:false,buttons:{A:function(){}},closeOnEscape:false}));b(d.__dialouge).on("dialogclose",function(){e||d.close()});return a.display.jqueryui},open:function(d,a,c){d.__dialouge.append(a).dialog("open");b(d.dom.formError).appendTo(d.__dialouge.parent().find("div.ui-dialog-buttonpane"));
+d.__dialouge.parent().find(".ui-dialog-title").html(d.dom.header.innerHTML);d.__dialouge.parent().addClass("DTED");a=b(d.dom.buttons).children().addClass("ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only").each(function(){b(this).wrapInner('<span class="ui-button-text" />')});d.__dialouge.parent().find("div.ui-dialog-buttonset").empty().append(a.parent());c&&c()},close:function(a,b){if(a.__dialouge){e=true;a.__dialouge.dialog("close");e=false}b&&b()},node:function(a){return a.__dialouge[0]},
+captureFocus:!1});a.display.jqueryui.modalOptions={width:600,modal:!0};return c.Editor});
b
diff -r bca68066a957 -r a64ece32a01a js/boxplots.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/boxplots.js Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,608 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+\n+var displayMarkerTable = function(plotconfig){\n+  var nbm = plotconfig.mrkrNames.length + 1;\n+  $(plotconfig.mtable).empty();\n+  plotconfig.allMarkers.map(function(v) {\n+    $(plotconfig.mtable).append(\'<tr>\'\n+        + \'<td><span style="background-color:rgba(0,0,0,\' + (v + 1 )/ nbm + \')\'\n+        + \'">&nbsp;&nbsp;&nbsp;</span></td>\'\n+        + \'<td title="\' + plotconfig.mrkrNames[v] + \'">\'\n+        + plotconfig.mrkrNames[v] + \'</td>\'\n+        + \'<td align="center"><input type="checkbox" checked class=\'\n+        + plotconfig.mrkrSelect + \' value=\' + v + \'/></td></tr>\');\n+  });\n+  if (nbm > 5) {\n+    $(plotconfig.mrkrSelectAll).prop(\'checked\', false);\n+    $(plotconfig.mrkrSelectAll).prop(\'disabled\', true);\n+    $(\'#markerWarning\').show();\n+    $(plotconfig.mrkrSelectj).each(function() {\n+      var selectedMrkr = parseInt(this.value);\n+      if (selectedMrkr > 4){\n+        this.checked = false;\n+        this.disabled = true;\n+      } else {\n+        this.checked = true;\n+      }\n+    });\n+  }\n+\n+  $(plotconfig.mrkrSelectAll).click(function() {\n+    var checkAll = $(plotconfig.mrkrSelectAll).prop(\'checked\');\n+    if (checkAll) {\n+      $(plotconfig.mrkrSelectj).prop("checked", true);\n+    } else {\n+      $(plotconfig.mrkrSelectj).prop("checked", false);\n+    }\n+    updateCSplots(plotconfig);\n+  });\n+\n+  $(plotconfig.mrkrSelectj).click(function() {\n+    if (nbm < 6){\n+      if ($(plotconfig.mrkrSelectj).length == $(plotconfig.mrkrSelectCheck).length) {\n+        $(plotconfig.mrkrSelectAll).prop("checked",true);\n+      } else {\n+        $(plotconfig.mrkrSelectAll).prop("checked",false);\n+      }\n+    } else {\n+      var nbSelected = 0;\n+      $(plotconfig.mrkrSelectj).each(function() {\n+        if (this.checked) {nbSelected++}\n+      });\n+      if (nbSelected < 5) {\n+        $(plotconfig.mrkrSelectj).prop(\'disabled\', false);\n+      } else {\n+        $(plotconfig.mrkrSelectj).each(function() {\n+          if (!this.checked) {\n+            this.disabled = true;\n+          }\n+        });\n+      }\n+    }\n+    updateCSplots(plotconfig);\n+  });\n+};\n+\n+var updateBoxplot = function(plotconfig){\n+  var margin = {top: 30, right: 10, bottom: 50, left: 60},\n+      h = 0,\n+      w = 0,\n+      width = 0,\n+      height = 0,\n+      labels = false, // show the text labels beside individual boxplots?\n+      mfi_option = false,\n+      min = Infinity,\n+      max = -Infinity,\n+      checkLabels = $(plotconfig.displayvalues).prop("checked"),\n+      checkMFI = $(plotconfig.displayMFI).prop("checked"),\n+      dataToPlot = [],\n+      tmp = [],\n+      nbm = plotconfig.mrkrNames.length + 1,\n+      maxRange = 0,\n+      minRange = 0,\n+      domainx = [],\n+      domainx1 = [];\n+\n+  $(plotconfig.plotdivj).empty();\n+  h = $(window).height() - 200;\n+  $(plotconfig.plotdivj).height(h);\n+  w = $(plotconfig.plotdivj).width();\n+  width = w - margin.left - margin.right;\n+  height = h - margin.top - margin.bottom;\n+\n+  var svg = d3.select(plotconfig.plotdivj).append("svg")\n+      .attr("width", w)\n+      .attr("height", h)\n+      .attr("class", "box")\n+    .append("g")\n+      .attr("transform", "translate(" + margin.left + "," + margin.top + ")");\n+\n+  if (checkLabels) {\n+      labels = true;\n+  };\n+  if (checkMFI) {\n+      mfi_option = true;\n+  };\n+  /* Get the data in proper shape to feed to the boxplot function\n+  want [Object, Object, ..., Object] where Object:\n+    \'population\': pop\n+    \'Data\' : [Object, Object, ..., Object] where Object:\n+        \'Marker\' : marker name\n+        \'outliers\' : outliers\n+  */\n+\n+  if (plotconfig.view == \'p\') {\n+    plotconfig.selectedPopulations.forEach(function(p) {\n+      tmpPlot = [];\n+      plotconfig.selectedMarkers.forEach(function(m) {\n+        var markernm = plotconfig.mrkrNames[m],\n+            qtmp = [\n+                +plotconfig.csdata.q1[markernm][p],\n+                +plotconfig.csdata.q2[markernm][p],\n+                +plotconfig.csd'..b'("opacity", 1e-6)\n+            .style("fill", function(d) {\n+                    var nbm = data.config[2],\n+                        pop = data.config[1],\n+                        mrkr = data.config[0];\n+                    var color = color_palette[0][pop][1] + (mrkr + 1 )/ nbm + \')\';\n+                    return color; })\n+            .style("stroke", function(d) { return color_palette[0][data.config[1]][3]; })\n+          .transition()\n+            .duration(duration)\n+            .attr("cy", function(i) { return x1(d[i]); })\n+            .style("opacity", 1);\n+\n+        outlier.transition()\n+            .duration(duration)\n+            .attr("cy", function(i) { return x1(d[i]); })\n+            .style("opacity", 1);\n+\n+        outlier.exit().transition()\n+            .duration(duration)\n+            .attr("cy", function(i) { return x1(d[i]); })\n+            .style("opacity", 1e-6)\n+            .remove();\n+\n+        // Compute the tick format.\n+        var format = tickFormat || x1.tickFormat(8);\n+\n+        // Update box ticks.\n+        var boxTick = g.selectAll("text.box")\n+            .data(quartileData);\n+        if(showLabels == true) {\n+          boxTick.enter().append("text")\n+              .attr("class", "box")\n+              .attr("dy", ".3em")\n+              .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })\n+              .attr("x", function(d, i) { return i & 1 ?  + width : 0 })\n+              .attr("y", x0)\n+              .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })\n+              .text(format)\n+            .transition()\n+              .duration(duration)\n+              .attr("y", x1);\n+        }\n+\n+        boxTick.transition()\n+            .duration(duration)\n+            .text(format)\n+            .attr("y", x1);\n+\n+        // Update whisker ticks. These are handled separately from the box\n+        // ticks because they may or may not exist, and we want don\'t want\n+        // to join box ticks pre-transition with whisker ticks post-.\n+        var whiskerTick = g.selectAll("text.whisker")\n+            .data(whiskerData || []);\n+        if(showLabels == true) {\n+          whiskerTick.enter().append("text")\n+              .attr("class", "whisker")\n+              .attr("dy", ".3em")\n+              .attr("dx", 6)\n+              .attr("x", width)\n+              .attr("y", x0)\n+              .text(format)\n+              .style("opacity", 1e-6)\n+            .transition()\n+              .duration(duration)\n+              .attr("y", x1)\n+              .style("opacity", 1);\n+        }\n+        whiskerTick.transition()\n+            .duration(duration)\n+            .text(format)\n+            .attr("y", x1)\n+            .style("opacity", 1);\n+\n+        whiskerTick.exit().transition()\n+            .duration(duration)\n+            .attr("y", x1)\n+            .style("opacity", 1e-6)\n+            .remove();\n+      });\n+      d3.timer.flush();\n+    }\n+\n+    box.width = function(x) {\n+      if (!arguments.length) return width;\n+      width = x;\n+      return box;\n+    };\n+    box.height = function(x) {\n+      if (!arguments.length) return height;\n+      height = x;\n+      return box;\n+    };\n+    box.tickFormat = function(x) {\n+      if (!arguments.length) return tickFormat;\n+      tickFormat = x;\n+      return box;\n+    };\n+    box.duration = function(x) {\n+      if (!arguments.length) return duration;\n+      duration = x;\n+      return box;\n+    };\n+    box.domain = function(x) {\n+      if (!arguments.length) return domain;\n+      domain = x == null ? x : d3.functor(x);\n+      return box;\n+    };\n+    box.value = function(x) {\n+      if (!arguments.length) return value;\n+      value = x;\n+      return box;\n+    };\n+    box.showLabels = function(x) {\n+      if (!arguments.length) return showLabels;\n+      showLabels = x;\n+      return box;\n+    };\n+    box.showMFI = function(x) {\n+      if (!arguments.length) return showMFI;\n+      showMFI = x;\n+      return box;\n+    };\n+    return box;\n+  };\n+})();\n'
b
diff -r bca68066a957 -r a64ece32a01a js/color_palette.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/color_palette.js Tue Jul 28 08:32:36 2020 -0400
[
b"@@ -0,0 +1,226 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+\n+/* Palettes for graphics.\n+* 0 -> Liz's palette (original ImmPort color scheme for graphics)\n+* 1 -> Cris's palette (diverging)\n+* 2 -> Christmas (diverging)\n+* 3 -> not Christmas (sequential color blind friendly)\n+* 4 -> Rainbow (sequential)\n+* arrays are color HEX, color RGB (for transparency effect), contrasting color, darker shade for borders\n+*/\n+var color_palette = [[\n+  ['#000000','rgba(0,0,0,','rgba(52,17,81,1)','#111111'],\n+\t['#FF0000','rgba(255,0,0,','rgba(52,17,81,1)','#D21111'],\n+\t['#FFFF00','rgba(255,255,0,','rgba(52,17,81,1)','#FFC900'],\n+\t['#008000','rgba(0,128,0,','rgba(52,17,81,1)','#016D01'],\n+\t['#0000FF','rgba(0,0,255,','rgba(255,0,0,1)','#2121A0'],\n+\t['#FFA500','rgba(255,165,0,','rgba(52,17,81,1)','#DE991B'],\n+\t['#8A2BE2','rgba(138,43,226,','rgba(52,17,81,1)','#6A0EBF'],\n+\t['#808000','rgba(128,128,0,','rgba(52,17,81,1)','#66660A'],\n+\t['#00FFFF','rgba(0,255,255,','rgba(52,17,81,1)','#1DCBCB'],\n+\t['#FF00FF','rgba(255,0,255,','rgba(52,17,81,1)','#A009A0'],\n+\t['#00FF00','rgba(0,255,0,','rgba(52,17,81,1)','#20AB20'],\n+\t['#000080','rgba(0,0,128,','rgba(255,0,0,1)','#13135B'],\n+\t['#F08080','rgba(240,128,128,','rgba(52,17,81,1)','#922626'],\n+\t['#800080','rgba(128,0,128,','rgba(255,0,0,1)','#580B58'],\n+\t['#F0E68C','rgba(240,230,140,','rgba(52,17,81,1)','#F0C08C'],\n+\t['#8FBC8F','rgba(143,188,143,','rgba(52,17,81,1)','#668166'],\n+\t['#2F4F4F','rgba(47,79,79,','rgba(52,17,81,1)','#0E3636'],\n+\t['#008080','rgba(0,128,128,','rgba(52,17,81,1)','#095454'],\n+\t['#9932CC','rgba(153,50,204,','rgba(52,17,81,1)','#78289F'],\n+\t['#FF7F50','rgba(255,127,80,','rgba(52,17,81,1)','#B0431A'],\n+\t['#FFD700','rgba(255,215,0,','rgba(52,17,81,1)','#FFB900'],\n+\t['#008B8B','rgba(0,139,139,','rgba(52,17,81,1)','#097171'],\n+\t['#800000','rgba(128,0,0,','rgba(255,0,0,1)','#500303'],\n+\t['#5F9EA0','rgba(95,158,160,','rgba(52,17,81,1)','#366668'],\n+\t['#FFC0CB','rgba(255,192,203,','rgba(52,17,81,1)','#FC869B'],\n+\t['#545454','rgba(84,84,84,','rgba(255,0,0,1)','#342C2C'],\n+\t['#7FFFD4','rgba(127,255,212,','rgba(255,0,0,1)','#8CCAB5'],\n+\t['#ADD8E6','rgba(173,216,230,','rgba(52,17,81,1)','#77C6DF'],\n+\t['#DB7093','rgba(219,112,147,','rgba(52,17,81,1)','#B24B6D'],\n+\t['#CD853F','rgba(205,133,63,','rgba(52,17,81,1)','#BA6D22'],\n+\t['#4169E1','rgba(65,105,225,','rgba(52,17,81,1)','#1840B8'],\n+\t['#708090','rgba(112,128,144,','rgba(52,17,81,1)','#465A6D'],\n+\t['#4682B4','rgba(70,130,180,','rgba(52,17,81,1)','#1F5785'],\n+\t['#D8BFD8','rgba(216,191,216,','rgba(52,17,81,1)','#B679B6'],\n+\t['#F5DEB3','rgba(245,222,179,','rgba(52,17,81,1)','#E9AB3F'],\n+\t['#9ACD32','rgba(154,205,50,','rgba(52,17,81,1)','#6E971B'],\n+\t['#BDB76B','rgba(189,183,107,','rgba(52,17,81,1)','#938E49'],\n+\t['#8B008B','rgba(139,0,139,','rgba(255,0,0,1)','#590A59'],\n+\t['#556B2F','rgba(85,107,47,','rgba(52,17,81,1)','#3A4D19'],\n+\t['#00CED1','rgba(0,206,209,','rgba(52,17,81,1)','#1BA0A2'],\n+\t['#FF1493','rgba(255,20,147,','rgba(52,17,81,1)','#A40F5F']\n+],[\n+\t//cris\n+  ['#000000','rgba(0,0,0,','rgba(52,17,81,1)','#111111'],\n+\t['#5B1A48','rgba(91,26,72,','rgba(255,0,0,1)','#922B74'],\n+\t['#1ED992','rgba(30,217,146,','rgba(52,17,81,1)','#108A5B'],\n+\t['#FFE4FF','rgba(255,228,255,','rgba(52,17,81,1)','#FF9AFF'],\n+\t['#3B2000','rgba(59,32,0,','rgba(255,0,0,1)','#8C4D02'],\n+\t['#BDF765','rgba(189,247,101,','rgba(52,17,81,1)','#83b438'],\n+\t['#C6DCFD','rgba(198,220,253,','rgba(52,17,81,1)','#70A9FE'],\n+\t['#542788','rgba(84,39,136,','rgba(255,0,0,1)','#8055B2'],\n+\t['#FB8072','rgba(251,128,114,','rgba(52,17,81,1)','#D55446'],\n+\t['#F2E0B8','rgba(242,224,184,','rgba(52,17,81,1)','#F9C146'],\n+\t['#0A684C','rgba(10,104,76,','rgba(52,17,81,1)','#27B88D'],\n+\t['#FD8ADC','rgba(253,138,220,','rgba(52,17,81,1)','#CB3AA2'],\n+\t['#CDFAFF','rgba(205,250,255,','rgba(52,17,81,1)','#66EDFC'],\n+\t['#0C1657','rgba(12,22,87,','rgba(255,0,0,1)','#3243B6'],\n+\t['#FFDE69','rgba(255,222,105,','rgba(52,17,81,1)','#CFAD34'],\n+\t['#BEBADA','rgba(190,186,218,','rgb"..b",1)','#28785D'],\n+\t['#6DB388','rgba(109,179,136,','rgba(52,17,81,1)','#348252'],\n+\t['#76B67D','rgba(118,182,125,','rgba(52,17,81,1)','#388340'],\n+\t['#7FB972','rgba(127,185,114,','rgba(52,17,81,1)','#448635'],\n+\t['#88BB69','rgba(136,187,105,','rgba(52,17,81,1)','#518730'],\n+\t['#92BD60','rgba(146,189,96,','rgba(52,17,81,1)','#62902D'],\n+\t['#9CBE59','rgba(156,190,89,','rgba(52,17,81,1)','#6D9028'],\n+\t['#A7BE53','rgba(167,190,83,','rgba(52,17,81,1)','#70871D'],\n+\t['#B1BE49','rgba(177,190,78,','rgba(52,17,81,1)','#7C8919'],\n+\t['#BABC49','rgba(186,188,73,','rgba(52,17,81,1)','#87891B'],\n+\t['#C3BA45','rgba(195,186,69,','rgba(52,17,81,1)','#928917'],\n+\t['#CCB742','rgba(204,183,66,','rgba(52,17,81,1)','#AC9516'],\n+\t['#D3B33F','rgba(211,179,63,','rgba(52,17,81,1)','#A78713'],\n+\t['#DAAD3C','rgba(218,173,60,','rgba(52,17,81,1)','#AB7E0D'],\n+\t['#DFA539','rgba(223,165,57,','rgba(52,17,81,1)','#B17609'],\n+\t['#E39C37','rgba(227,156,55,','rgba(52,17,81,1)','#BB730D'],\n+\t['#E59134','rgba(229,145,52,','rgba(52,17,81,1)','#B16006'],\n+\t['#E78432','rgba(231,132,50,','rgba(52,17,81,1)','#B45404'],\n+\t['#E7752F','rgba(231,117,47,','rgba(52,17,81,1)','#763703'],\n+\t['#E6652D','rgba(230,101,45,','rgba(52,17,81,1)','#AD3906'],\n+\t['#E4542A','rgba(228,84,42,','rgba(52,17,81,1)','#AE2A04'],\n+\t['#E14326','rgba(225,67,38,','rgba(52,17,81,1)','#AD1E04'],\n+\t['#DD3123','rgba(221,49,35,','rgba(52,17,81,1)','#A11105'],\n+\t['#D92120','rgba(217,33,32,','rgba(52,17,81,1)','#8A0201']\n+],[\n+// Rainbow\n+  ['#000000','rgba(0,0,0,','rgba(52,17,81,1)','#111111'],\n+\t['#FF0000','rgba(255,0,0,','rgba(52,17,81,1)','#C30707'],\n+\t['#FF2600','rgba(255,38,0,','rgba(52,17,81,1)','#BA250B'],\n+\t['#FF4D00','rgba(255,77,0,','rgba(52,17,81,1)','#BD3A02'],\n+\t['#FF7300','rgba(255,115,0,','rgba(52,17,81,1)','#C15B06'],\n+\t['#FF9900','rgba(255,153,0,','rgba(52,17,81,1)','#BF7504'],\n+\t['#FFBF00','rgba(255,191,0,','rgba(52,17,81,1)','#C49405'],\n+\t['#FFE500','rgba(255,229,0,','rgba(52,17,81,1)','#BEAB01'],\n+\t['#F2FF00','rgba(242,255,0,','rgba(52,17,81,1)','#B3BD03'],\n+\t['#CCFF00','rgba(204,255,0,','rgba(52,17,81,1)','#93B607'],\n+\t['#A6FF00','rgba(166,255,0,','rgba(52,17,81,1)','#7BBB05'],\n+\t['#80FF00','rgba(128,255,0,','rgba(52,17,81,1)','#59AC05'],\n+\t['#59FF00','rgba(89,255,0,','rgba(52,17,81,1)','#3DAD01'],\n+\t['#33FF00','rgba(51,255,0,','rgba(52,17,81,1)','#24B001'],\n+\t['#0DFF00','rgba(13,255,0,','rgba(52,17,81,1)','#0CAA03'],\n+\t['#00FF1A','rgba(0,255,26,','rgba(52,17,81,1)','#03AC14'],\n+\t['#00FF40','rgba(0,255,64,','rgba(52,17,81,1)','#02AB2C'],\n+\t['#00FF66','rgba(0,255,102,','rgba(52,17,81,1)','#01AD46'],\n+\t['#00FF8C','rgba(0,255,140,','rgba(52,17,81,1)','#06B466'],\n+\t['#00FFB3','rgba(0,255,179,','rgba(52,17,81,1)','#01AB79'],\n+\t['#00FFD9','rgba(0,255,217,','rgba(52,17,81,1)','#02B399'],\n+\t['#00FFFF','rgba(0,255,255,','rgba(52,17,81,1)','#04AEAE'],\n+\t['#00D9FF','rgba(0,217,255,','rgba(52,17,81,1)','#0496B0'],\n+\t['#00B2FF','rgba(0,178,255,','rgba(52,17,81,1)','#0272A3'],\n+\t['#008CFF','rgba(0,140,255,','rgba(255,0,0,1)','#00569D'],\n+\t['#0068FF','rgba(0,102,255,','rgba(255,0,0,1)','#044AAE'],\n+\t['#0040FF','rgba(0,64,255,','rgba(255,0,0,1)','#032894'],\n+\t['#0019FF','rgba(0,25,255,','rgba(255,0,0,1)','#01109C'],\n+\t['#0D00FF','rgba(13,0,255,','rgba(255,0,0,1)','#0B03A7'],\n+\t['#3300FF','rgba(51,0,255,','rgba(255,0,0,1)','#2403A7'],\n+\t['#5900FF','rgba(89,0,255,','rgba(255,0,0,1)','#3E04AA'],\n+\t['#8000FF','rgba(128,0,255,','rgba(255,0,0,1)','#5302A4'],\n+\t['#A600FF','rgba(166,0,255,','rgba(255,0,0,1)','#6F03A9'],\n+\t['#CC00FF','rgba(204,0,255,','rgba(255,0,0,1)','#8A04AC'],\n+\t['#F200FF','rgba(242,0,255,','rgba(52,17,81,1)','#9D03A5'],\n+\t['#FF00E5','rgba(255,0,229,','rgba(52,17,81,1)','#B607A4'],\n+\t['#FF00BF','rgba(255,0,191,','rgba(52,17,81,1)','#B40588'],\n+\t['#FF0099','rgba(255,0,153,','rgba(52,17,81,1)','#B4016D'],\n+\t['#FF0073','rgba(255,0,115,','rgba(52,17,81,1)','#A9024D'],\n+\t['#FF004C','rgba(255,0,76,','rgba(52,17,81,1)','#A90335'],\n+\t['#FF0026','rgba(255,0,38,','rgba(52,17,81,1)','#A6051D']\n+]];\n"
b
diff -r bca68066a957 -r a64ece32a01a js/crossSamplePlots.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/crossSamplePlots.js Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,263 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+var updateCSplots = function(plotconfig){\n+  plotconfig.selectedPopulations = [];\n+  $(plotconfig.popSelectj).each(function() {\n+    if (this.checked) {\n+      plotconfig.selectedPopulations.push(parseInt(this.value));\n+    }\n+  });\n+  if (plotconfig.hasOwnProperty("mtable")) {\n+    // Update selected markers?\n+    plotconfig.selectedMarkers = [];\n+    $(plotconfig.mrkrSelectj).each(function() {\n+      if (this.checked) {\n+        plotconfig.selectedMarkers.push(parseInt(this.value));\n+      }\n+    });\n+    // update plot\n+    updateBoxplot(plotconfig);\n+  } else {\n+    updatePlot(plotconfig);\n+  }\n+};\n+\n+var displayPopulationLegend = function(plotconfig) {\n+  $(plotconfig.table).empty();\n+  plotconfig.allPopulations.map(function(value,index) {\n+    $(plotconfig.table).append(\'<tr><td align="center">\'\n+        + \'<input type="checkbox" checked class=\' + plotconfig.popSelect\n+        + \' value=\' + value + \'/></td><td title="\' + newPopNames[value] + \'">\'\n+        + newPopNames[value] + \'</td><td><span style="background-color:\'\n+        + color_palette[0][value][0] + \'">&nbsp;&nbsp;&nbsp;</span></td></tr>\');\n+  });\n+\n+  $(plotconfig.popSelectAll).click(function() {\n+    var checkAll = $(plotconfig.popSelectAll).prop(\'checked\');\n+    if (checkAll) {\n+      $(plotconfig.popSelectj).prop("checked", true);\n+    } else {\n+      $(plotconfig.popSelectj).prop("checked", false);\n+    }\n+    updateCSplots(plotconfig);\n+  });\n+\n+  $(plotconfig.popSelectj).click(function() {\n+    if ($(plotconfig.popSelectj).length == $(plotconfig.popSelectCheck).length) {\n+      $(plotconfig.popSelectAll).prop("checked",true);\n+    } else {\n+      $(plotconfig.popSelectAll).prop("checked",false);\n+    }\n+    updateCSplots(plotconfig);\n+  });\n+\n+  $(plotconfig.popSelectj).each(function() {\n+    var selectedpopn = parseInt(this.value);\n+    if ($.inArray(selectedpopn,plotconfig.selectedPopulations) > -1) {\n+      this.checked = true;\n+    } else {\n+      this.checked = false;\n+    }\n+  });\n+};\n+\n+var displayToolbar = function(plotconfig){\n+  $(plotconfig.displaybutton).on("click",function() {\n+    $(plotconfig.popSelectj).prop("checked", true);\n+    $(plotconfig.popSelectAll).prop("checked", true);\n+    if (plotconfig.hasOwnProperty("mtable")){\n+      $(plotconfig.displayMFI).prop("checked", false);\n+      $(plotconfig.displayvalues).prop("checked", false);\n+      $(plotconfig.mrkrSelectj).prop("checked", true);\n+      $(plotconfig.mrkrSelectAll).prop("checked",true);\n+    }\n+    updateCSplots(plotconfig);\n+  });\n+\n+  if (plotconfig.hasOwnProperty("mtable")){\n+    $(plotconfig.displayMFI).on("click", function(){\n+      updateCSplots(plotconfig);\n+    });\n+    $(plotconfig.displayvalues).on("click", function(){\n+      updateCSplots(plotconfig);\n+    });\n+  }\n+  $(plotconfig.toggledisplayj).on("click",function() {\n+    plotconfig.selectedPopulations = [];\n+    $(plotconfig.popSelectj).each(function() {\n+      if (this.checked) {\n+        plotconfig.selectedPopulations.push(parseInt(this.value));\n+      }\n+    })\n+    if (plotconfig.hasOwnProperty("mtable")){\n+      plotconfig.selectedMarkers = [];\n+      $(plotconfig.mrkrSelectj).each(function() {\n+        if (this.checked) {\n+          plotconfig.selectedMarkers.push(parseInt(this.value));\n+        }\n+      });\n+      var text = document.getElementById(plotconfig.toggledisplay).firstChild;\n+      text.data = text.data == "View per marker" ? "View per population" : "View per marker";\n+      plotconfig.view = plotconfig.view == "p" ? "m" : "p";\n+      updateBoxplot(plotconfig);\n+    } else {\n+      var imgSrc = document.getElementById(plotconfig.toggledisplay);\n+      imgSrc.src = imgSrc.src.endsWith("stackedsm.png") ? "/static/images/flowtools/barssm.png" : "/static/images/flowtools/stackedsm.png";\n+      plotconfig.type = plotconfig.type == "barplot" ? "areaplot" : "barplot";\n+      updatePlot(plotconfig);\n+    }\n+  });\n+  d'..b'rNames.length; i < nbMarkers; i++) {\n+      plotconfig.allMarkers.push(i);\n+      plotconfig.selectedMarkers.push(i);\n+    }\n+  } else {\n+    var nbPop = plotconfig.csdata[0].length;\n+  }\n+\n+  for (var i = 2; i < nbPop; i++) {\n+    plotconfig.allPopulations.push(i - 1);\n+    plotconfig.selectedPopulations.push(i - 1);\n+  }\n+\n+  $(window).on(\'resize\',function() {\n+    waitForFinalEvent(function() {\n+      if (plotconfig.hasOwnProperty("mtable")){\n+          updateBoxplot(plotconfig);\n+      } else {\n+          updatePlot(plotconfig);\n+      }\n+    }, 500, "resizePlot");\n+  });\n+\n+  displayPopulationLegend(plotconfig);\n+  if (plotconfig.hasOwnProperty("mtable")){\n+    displayMarkerTable(plotconfig);\n+    updateBoxplot(plotconfig);\n+  } else {\n+    updatePlot(plotconfig);\n+  }\n+};\n+\n+var updatePlot = function(plotconfig) {\n+  var h = $(window).height() - 200,\n+      traces = [],\n+      tmptraces = [],\n+      x_values = [],\n+      totals = [];\n+      layout = {};\n+\n+  $(plotconfig.plotdivj).empty();\n+  $(plotconfig.plotdivj).height(h);\n+  for (var i = 1, j = plotconfig.csdata.length; i < j; i++) {\n+    x_values.push(newSmpNames[plotconfig.csdata[i][1]]);\n+  }\n+\n+  for (var k = 1, i = plotconfig.csdata.length; k < i; k++){\n+    totals[k] = 0;\n+    for (var m = 2, o = plotconfig.csdata[0].length; m < o; m++){\n+      for (var n = 0, p = plotconfig.selectedPopulations.length; n < p; n++){\n+        if (plotconfig.csdata[0][m] === plotconfig.selectedPopulations[n]) {\n+          totals[k] += plotconfig.csdata[k][m];\n+        }\n+      }\n+    }\n+  }\n+\n+  for (var i = 0, ii = plotconfig.selectedPopulations.length; i < ii; i++) {\n+    pop = plotconfig.selectedPopulations[i];\n+    var popName = "Pop " + pop;\n+    var y_values = [];\n+    var obj;\n+\n+    for (var j = 1, jj = plotconfig.csdata.length; j < jj; j++) {\n+      var newvalue = (plotconfig.csdata[j][pop + 1] / totals[j]) * 100;\n+      y_values.push(newvalue);\n+    }\n+    if (plotconfig.type === "areaplot") {\n+      obj = {\n+          x: x_values,\n+          y: y_values,\n+          hoverinfo: "x",\n+          name: popName,\n+          type: \'area\',\n+          fill: \'tonexty\',\n+          marker: {color: color_palette[0][pop][0]}\n+      };\n+    }\n+    if (plotconfig.type === "barplot") {\n+      obj = {\n+          x: x_values,\n+          y: y_values,\n+          hoverinfo: "x",\n+          name: popName,\n+          type: \'bar\',\n+          marker: {color: color_palette[0][pop][0]}\n+      };\n+    }\n+    tmptraces.push(obj)\n+  }\n+\n+  if (plotconfig.type === "barplot") {\n+    layout = {\n+        hovermode:\'closest\',\n+        title: \'\',\n+        barmode: \'stack\',\n+        showlegend: false,\n+        yaxis: {\n+            mirror: \'all\',\n+            tickmode: \'array\',\n+            ticktext: ["","20%", "40%", "60%", "80%", "100%"],\n+            tickvals: [0,20,40,60,80,100],\n+            title: \'Populations proportions in selected set\',\n+            titlefont: {\n+                size: 16,\n+                color: \'grey\'\n+            }\n+        }\n+    };\n+    traces = tmptraces;\n+  }\n+  if (plotconfig.type === "areaplot") {\n+    function stacked(trcs) {\n+      for(var i=1; i<trcs.length; i++) {\n+        for(var j=0; j<(Math.min(trcs[i][\'y\'].length, trcs[i-1][\'y\'].length)); j++) {\n+          trcs[i][\'y\'][j] += trcs[i-1][\'y\'][j];\n+        }\n+      }\n+      return trcs;\n+    }\n+    layout = {\n+        title: \'\',\n+        showlegend: false,\n+        yaxis: {\n+            mirror: \'all\',\n+            tickmode: \'array\',\n+            ticktext: ["","20%", "40%", "60%", "80%", "100%"],\n+            tickvals: [0,20,40,60,80,100],\n+            title: \'Populations proportions in selected set\',\n+            titlefont: {\n+                size: 16,\n+                color: \'grey\'\n+            }\n+        },\n+        xaxis: {\n+            autorange: false,\n+            range: [-0.2, x_values.length - 0.8]\n+        }\n+    };\n+    traces = stacked(tmptraces);\n+  }\n+  Plotly.newPlot(plotconfig.plotdiv,traces,layout);\n+};\n'
b
diff -r bca68066a957 -r a64ece32a01a js/csOverview.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/csOverview.js Tue Jul 28 08:32:36 2020 -0400
[
@@ -0,0 +1,250 @@
+// Copyright (c) 2016 Northrop Grumman.
+// All rights reserved.
+
+var url = "./csOverview.tsv",
+    boxplotUrl = "./csBoxplotData.json",
+    pctablecontent,
+    newSmpNames= {},
+    newPopNames = {},
+    configBoxplot = {},
+    configAreaplot = {};
+
+var waitForFinalEvent = (function () {
+  var timers = {};
+  return function (callback, ms, uniqueId) {
+    if (!uniqueId) {
+      uniqueId = "Don't call this twice without a uniqueId";
+    }
+    if (timers[uniqueId]) {
+      clearTimeout (timers[uniqueId]);
+    }
+    timers[uniqueId] = setTimeout(callback, ms);
+  };
+})();
+
+var preprocess = function(text){
+  var crossSampleData = d3.tsv.parseRows(text).map(function(row) {
+    return row.map(function(value) {
+      if (isNaN(value)) {
+        return value;
+      }
+      return +value;
+    })
+  })
+  return crossSampleData;
+};
+
+var displayProp = function() {
+  d3.text(url, function(error, data) {
+    var fileID = [],
+        sampleNames = [],
+        popTableData = [],
+        propHeadings = [],
+        propTableData = [],
+        propTableHeadings = [],
+        propTargets = [],
+        popTableHeadings = [],
+        propEditorData = [],
+        popEditorData = [],
+        smpcol = 2,
+        propHTML = '<table id="proptable" class="dtable display compact nowrap" cellspacing="0" width="100%"/>',
+        popHTML = '<table id="popnamestable" class="popt dtable display nowrap compact" cellspacing="0" width="100%"/>';
+
+    if (error) {
+      alert("Problem retrieving data");
+      return;
+    }
+    propHeadings = data.split("\n")[0].split("\t");
+    propHeadings.unshift("Comment");
+    data = d3.tsv.parse(data);
+    function propHandle(method, url, d, successCallBack, errorCallBack) {
+      var output = {data : propTableData};
+      successCallBack(output);
+    }
+
+    function popHandle(method, url, d, successCallBack, errorCallBack) {
+      var output = {data : popTableData};
+      successCallBack(output);
+    }
+
+    propTableData = $.extend(true,[],data);
+    propTableData.forEach(function(d) {
+      d.Comment = d.SampleName;
+      newSmpNames[d.SampleName] = d.Comment;
+      fileID.push(d.FileID);
+      sampleNames.push(d.SampleName);
+    });
+
+    for (var i = 3, j = propHeadings.length; i < j; i++){
+      propTargets.push(i);
+    }
+    propHeadings.forEach(function(d) {
+      propTableHeadings.push({"data":d, "title":d});
+      propEditorData.push({"label":d,"name":d});
+      if (d != 'Comment' && d != 'SampleName' && d != "FileID") {
+        newPopNames[d] = d.toString();
+        popTableHeadings.push({"data":d, "title":d});
+        popEditorData.push({"label":d,"name":d});
+      }
+    });
+    popTableData.push(newPopNames);
+    pctablecontent = $.extend(true,[],propTableData);
+
+    $('#propDiv').empty();
+    $('#propDiv').html(propHTML);
+    var smpEditor = new $.fn.dataTable.Editor({
+        ajax: propHandle,
+        table: '#proptable',
+        fields: propEditorData,
+        idSrc: 'SampleName'
+    });
+
+    $('#proptable').on( 'click', 'tbody td:first-child', function (e) {
+      smpEditor.bubble( this );
+    });
+    var propTable = $('#proptable').DataTable({
+        columns: propTableHeadings,
+        data: propTableData,
+        order: [[ smpcol, "asc" ]],
+        pageLength: 10,
+        scrollX: true,
+        scrollCollapse: true,
+        dom: '<"top"Bi>t<"bottom"lp><"clear">',
+        columnDefs: [{
+            targets: propTargets,
+            className: "dt-body-right",
+            render: function(data, type, row){
+                    return parseFloat(data).toFixed(2) + '%';
+            }
+          }, {
+            targets: [smpcol - 1, smpcol, smpcol + 1],
+            className: "dt-body-left",
+        }],
+        buttons: [
+            'copy', 'pdfHtml5','csvHtml5', 'colvis'
+        ],
+        colReorder: {
+            fixedColumnsLeft:1
+        },
+        select: true
+    });
+
+    // Add titles to File ID and Sample Name
+    $('#proptable tr').each(function(i,d){
+      if (i > 0) {
+        $(this).find('td').each(function(j,e){
+          if (j == 1 ) {
+            $(this).prop('title', fileID[i - 1] );
+          }
+          if (j == 2) {
+            $(this).prop('title', sampleNames[i - 1]);
+          }
+        });
+      }
+    });
+
+    // Add a table below to rename pops
+    // Might want to change that some other time?
+    $('#popnamesDiv').html(popHTML);
+    var popEditor = new $.fn.dataTable.Editor({
+        ajax: popHandle,
+        table: '#popnamestable',
+        fields: popEditorData,
+        idSrc: '1'
+    });
+
+    $('#popnamestable').on( 'click', 'tbody td', function (e) {
+      popEditor.bubble(this);
+    });
+    var popTable = $('#popnamestable').DataTable({
+        columns: popTableHeadings,
+        dom: 't',
+        select: true,
+        data: popTableData
+    });
+
+    smpEditor.on( 'preSubmit', function(e, object, action){
+      var data = object.data;
+      var key = Object.keys(data)[0];
+      var count = object.data[key]['Comment'];
+
+      propTableData.forEach(function(d){
+        if (d.SampleName === key) {
+          d.Comment = count;
+          newSmpNames[key] = count;
+        }
+      });
+      pctablecontent = $.extend(true, [], propTableData);
+    });
+    popEditor.on( 'preSubmit', function(e, object, action){
+      var data = object.data;
+      var key = Object.keys(data['1'])[0];
+      var count = object.data['1'][key];
+      popTableData[0][key] = count;
+      newPopNames[key] = count;
+    });
+  });
+};
+
+var displayStackedAreaPlot = function() {
+  $.ajax({
+    url: url,
+    dataType: "text",
+    success: function(text) {
+      configAreaplot = {
+        displaybutton : '#updateDisplayA',
+        popSelectj : '.popSelectA',
+        plotdivj : '#plotDivA',
+        toggledisplayj : '#togglePlot',
+        toggledisplay : 'toggleButtonImg',
+        csdata : preprocess(text),
+        plotdiv : 'plotDivA',
+        type : 'areaplot',
+        table : '#popTableA tbody',
+        popSelect : 'popSelectA',
+        allPopulations : [],
+        selectedPopulations : [],
+        popSelectAll : '#popSelectAllA',
+        popSelectCheck : '.popSelectA:checked'
+      };
+      displayToolbar(configAreaplot);
+    }
+  });
+};
+
+var displayBoxplot = function() {
+  $.ajax({
+    url: boxplotUrl,
+    dataType: "json",
+    success: function(data) {
+      configBoxplot = {
+        displaybutton : '#updateDisplayC',
+        toggledisplayj : '#changeDisplayC',
+        toggledisplay : 'changeDisplayC',
+        popSelectj : '.popSelectC',
+        plotdivj : '#plotDivC',
+        csdata : data,
+        plotdiv : 'plotDivC',
+        type : 'boxplot',
+        table : '#popTableC tbody',
+        popSelect : 'popSelectC',
+        allMarkers : [],
+        selectedMarkers: [],
+        allPopulations : [],
+        selectedPopulations : [],
+        popSelectAll : '#popSelectAllC',
+        popSelectCheck: '.popSelectC:checked',
+        mrkrSelectAll : '#mrkrSelectAllC',
+        mrkrSelectCheck: '.mrkrSelectC:checked',
+        mrkrSelect : 'mrkrSelectC',
+        mtable : '#mrkrTableC tbody',
+        mrkrSelectj: '.mrkrSelectC',
+        displayvalues: '#displayLabelsC',
+        displayMFI: '#displayMFIC',
+        view: 'p',
+        mrkrNames :  Object.keys(data.mfi)
+      };
+      displayToolbar(configBoxplot);
+    }
+  });
+};
b
diff -r bca68066a957 -r a64ece32a01a js/pCoordCSstats.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/pCoordCSstats.js Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,418 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+\n+/*\n+ * Initialize variables for parallelCoordinates display\n+*/\n+var pcApp = pcApp || {};\n+\n+pcApp.allSamples = [];\n+pcApp.selectedSamples = [];\n+pcApp.origData;\n+pcApp.flowData;\n+pcApp.updatedData;\n+pcApp.headers = [];\n+pcApp.foreground;\n+pcApp.background;\n+\n+var displayAll = function() {\n+  displayParallelPlot();\n+}\n+/*\n+ * Display the Population Legend\n+*/\n+var displaySmpTable = function() {\n+  $(\'#popTablePC tbody\').empty();\n+  pcApp.origData.map(function(d) {\n+    $(\'#popTablePC tbody\').append(\'<tr><td align="center">\'\n+        + \'<input type="checkbox" id="\' + d.SampleName + \'" \'\n+        + \'checked class="popSelectPC" value=\'\n+        + d.SampleNumber + \'/></td><td title="\' + newSmpNames[d.SampleName]\n+        + \'">\' + newSmpNames[d.SampleName]\n+        + \'</td><td><span style="background-color:\'\n+        + color_palette[0][d.SampleNumber + 1][0]\n+        + \'">&nbsp;&nbsp;&nbsp;</span></td></tr>\');\n+  });\n+\n+  $(\'#popSelectAllPC\').click(function() {\n+    var checkAll = $("#popSelectAllPC").prop(\'checked\');\n+    if (checkAll) {\n+      $(".popSelectPC").prop("checked", true);\n+    } else {\n+      $(".popSelectPC").prop("checked", false);\n+    }\n+    pcApp.selectedSamples = [];\n+    $(\'.popSelectPC\').each(function() {\n+      if (this.checked) {\n+        pcApp.selectedSamples.push(parseInt(this.value));\n+      }\n+    })\n+    displayTableGrid();\n+    if (checkAll) {\n+      displayParallelPlot();\n+    } else {\n+      updateParallelForeground();\n+    }\n+  });\n+\n+  $(\'.popSelectPC\').click(function() {\n+    if ($(\'.popSelectPC\').length == $(".popSelectPC:checked").length) {\n+      $(\'#popSelectAllPC\').prop("checked",true);\n+    } else {\n+      $(\'#popSelectAllPC\').prop("checked",false);\n+    }\n+    pcApp.selectedSamples = [];\n+    $(\'.popSelectPC\').each(function() {\n+      if (this.checked) {\n+         pcApp.selectedSamples.push(parseInt(this.value));\n+      }\n+    })\n+    displayTableGrid();\n+    updateParallelForeground();\n+  });\n+  updateSmpTable();\n+};\n+\n+var updateSmpTable = function() {\n+  $(\'.popSelectPC\').each(function() {\n+    var smp = parseInt(this.value);\n+    if ($.inArray(smp,pcApp.selectedSamples) > -1) {\n+      this.checked = true;\n+    } else {\n+      this.checked = false;\n+    }\n+  })\n+}\n+\n+var displayTableGrid = function() {\n+  var colTable = [],\n+      colNames = [],\n+      pctargets = [],\n+      updatedHeaders = [],\n+      displayData = [],\n+      targetCol = 0,\n+      textCol = [],\n+      colOrder = [],\n+      tableHTML = [];\n+\n+  $("#tableDivPC").empty();\n+  pcApp.updatedData = $.extend(true,[],pctablecontent);\n+  pcApp.updatedData.forEach(function(d, idx){\n+    d.SampleName = idx + 1;\n+    delete(d.FileID);\n+  });\n+\n+  updatedHeaders = Object.keys(pcApp.updatedData[0]);\n+  displayData = pcApp.updatedData.filter(function(d,i) {\n+    if ($.inArray(i,pcApp.selectedSamples) > -1) {\n+      return d;\n+    }\n+  });\n+\n+  targetCol = updatedHeaders.length - 2;\n+  updatedHeaders.forEach(function(d,i){\n+    colTable.push("<th>" + d + "</th>");\n+    colNames.push({"data":d});\n+    if (i < targetCol){\n+      pctargets.push(i);\n+    }\n+  });\n+  textCol = [targetCol, targetCol + 1];\n+  colOrder = textCol.concat(pctargets);\n+  tableHTML = [\n+      \'<table id="pcTable" class="pctable display compact nowrap" cellspacing="0" width="100%">\',\n+      \'<thead>\',\n+      \'<tr>\',\n+      colTable.join("\\n"),\n+      \'</tr>\',\n+      \'</thead>\',\n+      \'</table>\',\n+  ];\n+\n+  $(\'#tableDivPC\').html(tableHTML.join("\\n"));\n+  var pcTable = $(\'#pcTable\').DataTable({\n+      columns: colNames,\n+      data: displayData,\n+      order: [[ targetCol, "asc" ]],\n+      pageLength: 10,\n+      //paging: false,\n+      scrollY: 250,\n+      scrollCollapse: true,\n+      scrollX: true,\n+      dom: \'<"top"B>t<"bottom"lip><"clear">\',\n+      columnDefs: [{\n+          targets: pctargets,\n+          className: "dt-body-right",\n+          render: function(data,type,row){\n+ '..b'ter().append("g")\n+      .attr("class", "dimension")\n+      .attr("transform", function(d) { return "translate(" + x(d) + ")"; })\n+      .call(d3.behavior.drag()\n+        .origin(function(d) { return {x: x(d)}; })\n+        .on("dragstart", function(d) {\n+          dragging[d] = x(d);\n+          pcApp.background.attr("visibility", "hidden");})\n+        .on("drag", function(d) {\n+          dragging[d] = Math.min(width, Math.max(0, d3.event.x));\n+          pcApp.foreground.attr("d", path);\n+          dimensions.sort(function(a, b) { return position(a) - position(b); });\n+          x.domain(dimensions);\n+          g.attr("transform", function(d) { return "translate(" + position(d) + ")"; }); })\n+        .on("dragend", function(d) {\n+          delete dragging[d];\n+          transition(d3.select(this)).attr("transform", "translate(" + x(d) + ")");\n+          transition(pcApp.foreground).attr("d", path);\n+          pcApp.background\n+              .attr("d", path)\n+            .transition()\n+              .delay(500)\n+              .duration(0)\n+              .attr("visibility", null);\n+        }));\n+\n+  // Add an axis and title.\n+  g.append("g")\n+      .attr("class", "axis")\n+      .each(function(d) { d3.select(this).call(axis.scale(y[d])); });\n+  g.append("g")\n+      .attr("class", "xlabel")\n+    .append("text")\n+      .style("text-anchor", "middle")\n+      .attr("y", -9)\n+      .text(function(d) { return d; });\n+\n+  // Add and store a brush for each axis.\n+  g.append("g")\n+      .attr("class", "brush")\n+      .each(function(d) { d3.select(this).call(y[d].brush = d3.svg.brush().y(y[d]).on("brush", brush)); })\n+    .selectAll("rect")\n+      .attr("x", -8)\n+      .attr("width", 16);\n+\n+  // Control line opacity.\n+  $(\'#PCline_opacity\').on(\'change\', (function() {\n+    var val = $(this).val();\n+    $(\'#plotDivPC .foreground path\').css(\'stroke-opacity\', val.toString());\n+    $(\'#pc_opacity\').html((Math.round(val*10000)/100) + "%");\n+  }));\n+};\n+\n+var updateParallelForeground = function() {\n+  pcApp.foreground[0].map(function(d) {\n+    var smp = parseInt(d[\'__data__\'][\'SampleNumber\'])\n+    if ($.inArray(smp,pcApp.selectedSamples) < 0) {\n+      d.style.display = "none";\n+    } else {\n+      d.style.display = null;\n+    }\n+  });\n+};\n+/*\n+ * Retrieve the data, then call display functions\n+*/\n+var displayParallelCoordinates = function() {\n+/*    var inputFile = "./csOverview.tsv";\n+    d3.tsv(inputFile, function(error, data) {\n+         if (error) {\n+            alert("Problem Retrieving Data");\n+            return;\n+        }\n+  */\n+  pcApp.origData = $.extend(true,[], pctablecontent);\n+  pcApp.headers = Object.keys(pcApp.origData[0]);\n+  pcApp.headers.splice(pcApp.headers.indexOf("FileID"), 1);\n+  pcApp.origData.forEach(function(d,idx){\n+      d.SampleNumber = idx;\n+//    delete d.FileID;\n+  })\n+  /*\n+   * For the plot use only the proportion of each\n+   * population per sample. Store in flowData\n+  */\n+  pcApp.flowData = $.extend(true,[],pctablecontent);\n+  pcApp.flowData.forEach(function(d,idx){\n+    delete d.SampleName;\n+    delete d.FileID;\n+    delete d.Comment;\n+  });\n+  for (var i = 0, j = pcApp.flowData.length; i < j ; i++) {\n+    pcApp.allSamples.push(i);\n+    pcApp.selectedSamples.push(i);\n+  }\n+  displaySmpTable();\n+  displayTableGrid();\n+  displayParallelPlot();\n+\n+  $("#resetPCDisplay").on("click",function() {\n+    var opcty = ".8";\n+    for (var i = 0, j = pcApp.flowData.length; i < j; i++) {\n+      pcApp.allSamples.push(i);\n+      pcApp.selectedSamples.push(i);\n+    }\n+    $("#smpSelectAllPC").prop(\'checked\',true);\n+    $(".smpSelectPC").prop("checked",true);\n+\n+    $(\'#plotDivPC .foreground path\').css(\'stroke-opacity\', opcty);\n+    $(\'#pc_opacity\').html("80%");\n+    $(\'#PCline_opacity\').val(0.8);\n+\n+    displaySmpTable();\n+    displayTableGrid();\n+    displayParallelPlot();\n+  });\n+\n+  $(window).on(\'resize\',function() {\n+    waitForFinalEvent(function() {\n+      displayAll();\n+    }, 500, "resizePC");\n+  });\n+//    });\n+};\n'
b
diff -r bca68066a957 -r a64ece32a01a js/pCoordMFIstats.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/pCoordMFIstats.js Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,559 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+/*\n+ * Initialize variables for parallelCoordinates display\n+*/\n+var pcAppMFI = pcAppMFI || {};\n+\n+pcAppMFI.origData;\n+pcAppMFI.flowData;\n+pcAppMFI.background;\n+pcAppMFI.foreground;\n+pcAppMFI.selectedLines = [];\n+pcAppMFI.selectedPopulations = [];\n+pcAppMFI.selectedSamples = [];\n+pcAppMFI.populations = [];\n+pcAppMFI.samples = [];\n+pcAppMFI.lines = [];\n+pcAppMFI.allLines;\n+pcAppMFI.headers = [];\n+\n+var displayAllm = function() {\n+  displayParallelPlotm();\n+};\n+/*\n+ * Display the Population Legend\n+*/\n+var displayPopTablem = function() {\n+  $(\'#popTablePCm tbody\').empty();\n+  pcAppMFI.populations.map(function(d, index) {\n+    $(\'#popTablePCm tbody\').append(\'<tr><td align="center">\'\n+        + \'<input type="checkbox" \'\n+        + \'id="\'+ d + \'" \'\n+        + \'checked class="popSelectPCm" value=\'\n+        + index + \'/></td><td title="\' + newPopNames[d]\n+        + \'">\' + newPopNames[d]\n+        + \'</td><td><span style="background-color:\'\n+        + color_palette[0][index + 1][0]\n+        + \'">&nbsp;&nbsp;&nbsp;</span></td></tr>\');\n+  });\n+\n+  $(\'#popSelectAllPCm\').click(function() {\n+    var checkAll = $("#popSelectAllPCm").prop(\'checked\');\n+    if (checkAll) {\n+      $(".popSelectPCm").prop("checked", true);\n+      for (var i = 0; i < pcAppMFI.allLines; i ++) {\n+        pcAppMFI.selectedLines.push(i);\n+        pcAppMFI.lines.push(i);\n+      }\n+    } else {\n+      $(".popSelectPCm").prop("checked", false);\n+      pcAppMFI.selectedLines = [];\n+      pcAppMFI.lines = [];\n+    }\n+\n+    pcAppMFI.selectedPopulations = [];\n+    $(\'.popSelectPCm\').each(function() {\n+      if (this.checked) {\n+        pcAppMFI.selectedPopulations.push(parseInt(this.value));\n+      }\n+    });\n+\n+    displayTableGridm();\n+    if (checkAll) {\n+      displayParallelPlotm();\n+    } else {\n+      updateParallelForegroundidx();\n+    }\n+  });\n+\n+  $(\'.popSelectPCm\').click(function() {\n+    if ($(\'.popSelectPCm\').length == $(".popSelectPCm:checked").length) {\n+      $(\'#popSelectAllPCm\').prop("checked",true);\n+    } else {\n+      $(\'#popSelectAllPCm\').prop("checked",false);\n+    }\n+    pcAppMFI.selectedPopulations = [];\n+    $(\'.popSelectPCm\').each(function() {\n+      if (this.checked) {\n+        pcAppMFI.selectedPopulations.push(parseInt(this.value));\n+      }\n+    });\n+    pcAppMFI.selectedLines = [];\n+    pcAppMFI.lines = [];\n+    pcAppMFI.origData.forEach(function(d,idx){\n+      if ($.inArray(pcAppMFI.populations.indexOf(d.Population), pcAppMFI.selectedPopulations) > -1) {\n+        if ($.inArray(pcAppMFI.samples.indexOf(d.SmpName), pcAppMFI.selectedSamples) > -1){\n+          pcAppMFI.selectedLines.push(idx);\n+          pcAppMFI.lines.push(idx);\n+        }\n+      }\n+    });\n+    displayTableGridm();\n+    updateParallelForegroundidx();\n+  });\n+  updatePopTableidx();\n+  updateSmpTableidx();\n+};\n+\n+var updatePopTableidx = function() {\n+  $(\'.popSelectPCm\').each(function() {\n+    var pop = parseInt(this.value);\n+    var selectedPops = pcAppMFI.origData.map(function(d){\n+      if ($.inArray(d.idx, pcAppMFI.selectedLines) > -1){\n+        return pcAppMFI.populations.indexOf(d.Population);\n+      }\n+    });\n+    if ($.inArray(pop,selectedPops) > -1) {\n+      this.checked = true;\n+    } else {\n+      this.checked = false;\n+    }\n+  });\n+};\n+/*\n+* Display Sample Legend\n+*/\n+var displaySmpTablem = function(){\n+  $(\'#smpTablePCm tbody\').empty();\n+  pcAppMFI.samples.map(function(d, index) {\n+    $(\'#smpTablePCm tbody\').append(\'<tr><td title="\'\n+        + newSmpNames[d] + \'">\' + newSmpNames[d]\n+        + \'</td><td align="center">\' + \'<input type="checkbox" \'\n+        + \'id="\' + d + \'" \' + \'checked class="smpSelectPCm" value=\'\n+        + index + \'></td></tr>\');\n+  });\n+\n+  $(\'#smpSelectAllPCm\').click(function() {\n+    var checkAll = $("#smpSelectAllPCm").prop(\'checked\');\n+    if (checkAll) {\n+      $(".smpSelectPCm").prop("checked", true);\n+      for (var i = 0; i < pcAppMFI.allLines; i ++) {\n'..b'ging[d];\n+          transition(d3.select(this)).attr("transform", "translate(" + x(d) + ")");\n+          transition(pcAppMFI.foreground).attr("d", path);\n+          pcAppMFI.background\n+              .attr("d", path)\n+            .transition()\n+              .delay(500)\n+              .duration(0)\n+              .attr("visibility", null);\n+      }));\n+\n+  // Add an axis and title.\n+  g.append("g")\n+      .attr("class", "axis")\n+      .each(function(d) { d3.select(this).call(axis.scale(y[d])); });\n+  g.append("g")\n+      .attr("class", "xlabel")\n+    .append("text")\n+      .style("text-anchor", "middle")\n+      .attr("y", -9)\n+      .text(function(d) { return d; });\n+\n+  // Add and store a brush for each axis.\n+  g.append("g")\n+      .attr("class", "brush")\n+      .each(function(d) { d3.select(this).call(y[d].brush = d3.svg.brush().y(y[d]).on("brush", brush)); })\n+    .selectAll("rect")\n+      .attr("x", -8)\n+      .attr("width", 16);\n+\n+  // Control line opacity.\n+  $(\'#PCmline_opacity\').on(\'change\', (function() {\n+    var val = $(this).val();\n+    $(\'#plotDivPCm .foreground path\').css(\'stroke-opacity\', val.toString());\n+    $(\'#pcm_opacity\').html((Math.round(val*10000)/100) + "%");\n+  }));\n+};\n+\n+/*\n+ * Retrieve the data, then call display functions\n+*/\n+var displayParallelCoordinatesMFI = function() {\n+  var inputFile = "./csAllMFIs.tsv";\n+  d3.tsv(inputFile, function(error, data) {\n+    var allPops = 0,\n+        allSamples = 0;\n+    if (error) {\n+      alert("Problem Retrieving Data");\n+      return;\n+    }\n+    pcAppMFI.origData = $.extend(true,[],data);\n+    pcAppMFI.headers = Object.keys(pcAppMFI.origData[0]);\n+    pcAppMFI.headers.push("EditedPopName");\n+    pcAppMFI.origData.forEach(function(d,idx) {\n+      d.idx = idx;\n+      d.EditedPopName = d.Population;\n+      d.SmpName = d.SampleName;\n+      pcAppMFI.selectedLines.push(idx);\n+      pcAppMFI.lines.push(idx);\n+      if (!pcAppMFI.populations.includes(d.Population)){\n+        pcAppMFI.populations.push(d.Population);\n+      }\n+      if (!pcAppMFI.samples.includes(d.SmpName)){\n+        pcAppMFI.samples.push(d.SmpName);\n+      }\n+    });\n+    pcAppMFI.populations = pcAppMFI.populations.sort(function(a, b){return a-b});\n+    pcAppMFI.allLines = pcAppMFI.origData.length;\n+\n+    allPops = pcAppMFI.populations.length;\n+    allSamples = pcAppMFI.samples.length;\n+    for (var i = 0; i < allPops; i++) {\n+      pcAppMFI.selectedPopulations.push(i);\n+    }\n+    for (var i = 0; i < allSamples; i++) {\n+      pcAppMFI.selectedSamples.push(i);\n+    }\n+    /*\n+     * For the plot use only the MFI information\n+     * for each populations. Store in flowData\n+    */\n+    pcAppMFI.flowData = $.extend(true,[],data);\n+    pcAppMFI.flowData.forEach(function(d) {\n+      delete d[\'Population\'];\n+      delete d[\'SampleName\'];\n+      delete d[\'Percentage\'];\n+    });\n+\n+    displayPopTablem();\n+    displaySmpTablem();\n+    displayTableGridm();\n+    displayParallelPlotm();\n+\n+    $("#resetDisplayMFIpop").on("click",function() {\n+      var opcty = ".8";\n+      for (var i = 0; i < allPops; i++) {\n+        pcAppMFI.selectedPopulations.push(i);\n+      }\n+      for (var i = 0; i < allSamples; i++) {\n+        pcAppMFI.selectedSamples.push(i);\n+      }\n+      for (var i = 0; i < pcAppMFI.allLines; i++) {\n+        pcAppMFI.selectedLines.push(i);\n+        pcAppMFI.lines.push(i);\n+      }\n+\n+      $("#popSelectAllPCm").prop(\'checked\',true);\n+      $(".popSelectPCm").prop("checked",true);\n+      $("#smpSelectAllPCm").prop(\'checked\',true);\n+      $(".smpSelectPCm").prop("checked",true);\n+\n+      $(\'#plotDivPCm .foreground path\').css(\'stroke-opacity\', opcty);\n+      $(\'#pcm_opacity\').html("80%");\n+      $(\'#PCmline_opacity\').val(0.8);\n+\n+      displayPopTablem();\n+      displaySmpTablem();\n+      displayTableGridm();\n+      displayParallelPlotm();\n+    });\n+\n+    $(window).on(\'resize\',function() {\n+      waitForFinalEvent(function() {\n+        displayAllm();\n+      }, 500, "resizePCm");\n+    });\n+  });\n+};\n'
b
diff -r bca68066a957 -r a64ece32a01a templates/csOverview.template
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/csOverview.template Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -0,0 +1,287 @@\n+<!DOCTYPE html>\n+<html>\n+<head lang="en">\n+<title>CrossSample Overview</title>\n+<meta charset="UTF-8">\n+<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">\n+<meta name="viewport" content="width=device-width, initial-scale=1.0">\n+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"/>\n+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css"/>\n+<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/pdfmake-0.1.18/dt-1.10.12/b-1.2.1/b-colvis-1.2.1/b-html5-1.2.1/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.0/rr-1.1.2/sc-1.4.2/se-1.2.0/datatables.min.css"/>\n+<link rel="stylesheet" type="text/css" href="js/Editor-1.5.6/css/editor.dataTables.css">\n+<link rel="stylesheet" href="css/parallelCoordinates.css"/>\n+\n+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>\n+<script type="text/javascript" src="https://cdn.datatables.net/v/dt/pdfmake-0.1.18/dt-1.10.12/b-1.2.1/b-colvis-1.2.1/b-html5-1.2.1/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.0/rr-1.1.2/sc-1.4.2/se-1.2.0/datatables.min.js"></script>\n+<script src="js/Editor-1.5.6/js/dataTables.editor.js" type="text/javascript"></script>\n+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" type="text/javascript"></script>\n+<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.full.min.js" type="text/javascript"></script>\n+<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" type="text/javascript"></script>\n+<script src="https://cdn.plot.ly/plotly-1.0.0.min.js" type="text/javascript"></script>\n+<script src="js/csOverview.js" type="text/javascript"></script>\n+<script src="js/crossSamplePlots.js" type="text/javascript"></script>\n+<script src="js/pCoordMFIstats.js" type="text/javascript"></script>\n+<script src="js/pCoordCSstats.js" type="text/javascript"></script>\n+<script src="js/color_palette.js" type="text/javascript"></script>\n+<script src="js/boxplots.js" type="text/javascript"></script>\n+\n+<style>\n+#input{font-family:Calibri,Arial}\n+table.dataTable tbody td.dt-body-right {\n+    text-align: right;\n+}\n+#div{padding:5px;width:150px;height:100px;text-align:center}\n+table{width:100%;border:0px solid;border-collapse:collapse;text-align:center;}\n+th{background-color:#3e6db0;color:#fff;padding:5px}\n+</style>\n+</head>\n+\n+<body>\n+<div class="container-fluid">\n+    <div class="row" style="padding-bottom:10px;min-height:500px;">\n+        <div  class="col-md-12">\n+            <ul class="nav nav-tabs tabs-main">\n+                <li class="homeTab active" data-value="prop"><a href="#prop" data-toggle="tab">Population Distribution</a></li>\n+                <li class="homeTab" data-value="stackedA"><a href="#stackedA" data-toggle="tab">Stacked Plot</a></li>\n+                <li class="homeTab" data-value="pcoord"><a href="#pcoord" data-toggle="tab">Parallel Coordinates Population Summary</a></li>\n+                <li class="homeTab" data-value="pcoordMFI"><a href="#pcoordMFI" data-toggle="tab">Parallel Coordinates MFI Summary</a></li>\n+                <li class="homeTab" data-value="csstats"><a href="#boxplot" data-toggle="tab">Summary Statistics Boxplots</a></li>\n+            </ul>\n+\n+            <div class="tab-content">\n+                <div class="tab-pane active" id="prop" style="min-height:500px;">\n+                    <div class="row">\n+                        <div id="propDiv">Population Distribution</div>\n+                    </div>\n+                    <div class="row">\n+                    &nbsp;&nbsp;&nbsp;&nbsp;Edit population names below:\n+                    <div id="popnamesDiv"></div>\n+                    </div>\n+                </div>\n+\n+                <div class="tab-pane" id="stackedA" style="min-height:500px;">\n+                    <div class="col-md-12 chartDiv">\n+                        <div id="plotDivA" class="col-md-10" style="height:100%;"></div>\n+\n+                   '..b' <input type="checkbox" unchecked id="displayMFIC"/>&nbsp;Display MFI<br><br>\n+                          <button id="changeDisplayC" class="igbtn">View per marker</button><br><br>\n+                          <div id="markerWarning" style="display:none;">\n+                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n+                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n+                                <span aria-hidden="true">&times;</span></button>\n+                                  Only 5 markers can be displayed at most.\n+                            </div>\n+                          </div>\n+\n+                          <div id="outlierWarning" style="display:none;">\n+                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n+                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n+                                <span aria-hidden="true">&times;</span></button>\n+                                  The number of outliers is too large to display. Representation shows randomly downsampled outliers.\n+                            </div>\n+                          </div>\n+                        </div>\n+\n+                        <div id="plotDivC" class="col-md-8" style="height:100%;"></div>\n+\n+                        <div id="popDivC" class="col-md-2" style="height:100%;">\n+                            <button id="updateDisplayC" class="igbtn">Reset Display</button>\n+                            <table id="popTableC" class="table table-condensed table-bordered igtable">\n+                                <thead>\n+                                    <tr>\n+                                        <th><input type="checkbox" checked id="popSelectAllC"/></th>\n+                                        <th>Pop. Names</th>\n+                                        <th>Color</th>\n+                                     </tr>\n+                                </thead>\n+                                <tbody>\n+                                </tbody>\n+                            </table>\n+                        </div>\n+                    </div>\n+                </div>\n+\n+            </div>\n+        </div>\n+    </div>\n+</div>\n+\n+\n+</div>\n+</div>\n+<script>\n+\n+var poppropLoaded = false;\n+var stackedALoaded = false;\n+var pCoordLoaded = false;\n+var pCoordMFILoaded = false;\n+var boxplotLoaded = false;\n+\n+$().ready(function() {\n+    $(document).on(\'shown.bs.tab\',\'a[data-toggle="tab"]\', function(e) {\n+      var tab = e.target.getAttribute("href");\n+      if (tab == \'#prop\') {\n+        if (poppropLoaded) {\n+            return true;\n+        }\n+        poppropLoaded = true;\n+        displayProp();\n+      }\n+      if (tab == \'#stackedA\') {\n+        if (stackedALoaded) {\n+            displayPopulationLegend(configAreaplot);\n+            updatePlot(configAreaplot);\n+            return true;\n+        }\n+        stackedALoaded = true;\n+        displayStackedAreaPlot();\n+      }\n+      if (tab == \'#pcoord\') {\n+        if (pCoordLoaded) {\n+            displaySmpTable();\n+            displayTableGrid();\n+            return true;\n+        }\n+        pCoordLoaded = true;\n+        displayParallelCoordinates();\n+      }\n+      if (tab == \'#pcoordMFI\') {\n+        if (pCoordMFILoaded) {\n+            displayPopTablem();\n+            displaySmpTablem();\n+            displayTableGridm();\n+            return true;\n+        }\n+        pCoordMFILoaded = true;\n+        displayParallelCoordinatesMFI();\n+      }\n+      if (tab == \'#boxplot\') {\n+        if (boxplotLoaded) {\n+            displayPopulationLegend(configBoxplot);\n+            displayMarkerTable(configBoxplot);\n+            updateBoxplot(configBoxplot);\n+            return true;\n+        }\n+        boxplotLoaded = true;\n+        displayBoxplot();\n+      }\n+    });\n+\n+    poppropLoaded = true;\n+    displayProp();\n+});\n+</script>\n+</body>\n+</html>\n'
b
diff -r bca68066a957 -r a64ece32a01a test-data/csBoxplotData.json
--- a/test-data/csBoxplotData.json Wed May 20 16:04:43 2020 -0400
+++ b/test-data/csBoxplotData.json Tue Jul 28 08:32:36 2020 -0400
[
b'@@ -1,1 +1,1 @@\n-{"lower": {"CCR3":{"1":-57.5,"2":56.0,"3":294.25,"4":288.5,"5":-76.5,"6":94.0,"7":116.0,"8":342.0,"9":434.875,"10":-57.5,"11":446.5,"12":-64.5,"13":125.5,"14":-74.0,"15":-86.0,"16":-88.375,"17":78.0,"18":58.5,"19":237.625,"20":96.0,"21":-21.0,"22":135.625,"23":251.5,"24":-39.5,"25":60.0,"26":114.0},"CCR7":{"1":37.5,"2":-112.5,"3":-183.75,"4":-114.75,"5":-196.5,"6":-160.625,"7":-20.0,"8":71.5,"9":64.5,"10":-94.5,"11":-126.875,"12":-23.0,"13":135.0,"14":351.5,"15":-202.25,"16":262.875,"17":397.0,"18":39.0,"19":192.625,"20":268.25,"21":94.5,"22":44.375,"23":373.0,"24":-4.75,"25":167.5,"26":200.0},"CD4":{"1":446.0,"2":441.0,"3":434.0,"4":-96.5,"5":-105.5,"6":-79.0,"7":-62.5,"8":449.5,"9":-77.0,"10":442.0,"11":-65.5,"12":-15.25,"13":415.0,"14":430.0,"15":191.0,"16":-57.5,"17":376.25,"18":450.5,"19":249.75,"20":-60.25,"21":25.5,"22":240.875,"23":271.5,"24":277.0,"25":77.5,"26":5.5},"CD8":{"1":-133.5,"2":-183.0,"3":550.5,"4":-141.25,"5":-144.5,"6":504.5,"7":515.0,"8":566.5,"9":-198.5,"10":-151.5,"11":510.0,"12":-57.75,"13":512.5,"14":-196.5,"15":-161.75,"16":-188.875,"17":-205.75,"18":-172.5,"19":117.375,"20":516.0,"21":111.0,"22":53.0,"23":281.0,"24":21.5,"25":161.0,"26":190.5},"FSC":{"1":271.5,"2":260.5,"3":265.0,"4":175.5,"5":207.0,"6":278.5,"7":295.0,"8":287.0,"9":187.875,"10":258.0,"11":286.5,"12":256.5,"13":263.5,"14":278.0,"15":232.25,"16":270.0,"17":261.75,"18":268.0,"19":708.0,"20":297.0,"21":486.5,"22":463.5,"23":326.0,"24":469.0,"25":548.0,"26":748.625},"SSC":{"1":42.0,"2":37.5,"3":42.0,"4":23.5,"5":49.0,"6":38.5,"7":43.5,"8":46.0,"9":21.75,"10":43.0,"11":36.5,"12":2.25,"13":15.5,"14":34.0,"15":1.5,"16":26.5,"17":-25.25,"18":41.0,"19":1023.0,"20":53.0,"21":798.0,"22":186.375,"23":1023.0,"24":178.75,"25":1023.0,"26":1023.0}}, "mfi": {"CCR3":{"1":72,"2":187,"3":483,"4":520,"5":109,"6":251,"7":304,"8":504,"9":641,"10":68,"11":565,"12":161,"13":306,"14":108,"15":110,"16":201,"17":289,"18":195,"19":541,"20":267,"21":173,"22":283,"23":448,"24":132,"25":232,"26":311},"CCR7":{"1":189,"2":37,"3":68,"4":141,"5":67,"6":90,"7":318,"8":257,"9":419,"10":32,"11":111,"12":213,"13":424,"14":566,"15":84,"16":509,"17":598,"18":198,"19":629,"20":534,"21":224,"22":204,"23":476,"24":204,"25":269,"26":343},"CD4":{"1":520,"2":523,"3":512,"4":84,"5":56,"6":75,"7":83,"8":517,"9":138,"10":521,"11":85,"12":119,"13":516,"14":526,"15":322,"16":104,"17":509,"18":524,"19":490,"20":82,"21":145,"22":389,"23":366,"24":392,"25":182,"26":325},"CD8":{"1":53,"2":67,"3":632,"4":114,"5":82,"6":608,"7":620,"8":641,"9":327,"10":59,"11":604,"12":183,"13":615,"14":76,"15":75,"16":138,"17":119,"18":60,"19":533,"20":621,"21":225,"22":215,"23":387,"24":187,"25":259,"26":318},"FSC":{"1":364,"2":370,"3":363,"4":360,"5":333,"6":372,"7":389,"8":371,"9":422,"10":357,"11":381,"12":410,"13":406,"14":401,"15":356,"16":413,"17":440,"18":384,"19":944,"20":393,"21":617,"22":667,"23":546,"24":681,"25":727,"26":960},"SSC":{"1":117,"2":121,"3":112,"4":175,"5":156,"6":154,"7":162,"8":113,"9":214,"10":114,"11":138,"12":276,"13":137,"14":139,"15":121,"16":239,"17":198,"18":128,"19":966,"20":154,"21":975,"22":437,"23":976,"24":440,"25":1013,"26":975}}, "outliers": {"CCR3":{"1":[],"2":[342,565,320,633,364,568,450,390,545,543,548,558,305,309,322,385,344,331,424,358,310,388,542,607,335,338,530,324,316,412,594,593,339,386,306,432,333,488,560,375,317,323,627,367,536,333,578,313,321,348,385,310,407,366,502,333,337,334,335,334,351,419,376,312,317,310,307,418,317,345,423,368,340,334,393,568,553,317,326,366,587,354,553,313,315,313,314,565,345,385,340,407,387,333,503,550,378,385,320,531],"3":[283,281,260,281,258,291,278,222,240,287,273,236,270,272,260,280,259,262,277,282,261,156,698,190,251,283,286,278,239,167,281,187,293,285,165,237,245,240,280,256,268,262,286,153,237,285,294,249,294,285,228,286,293,282,282,141,255,254,180,274,234,210,266,175,159,264,270,266,272,277,256,214,273,224,206,195,276,127,184,176,268,241,246,274,281,215,288,266,278,168,274,275,230,232,270,252,267,181,95'..b'":608.0,"12":196.0,"13":620.0,"14":50.0,"15":74.0,"16":130.0,"17":131.0,"18":50.0,"19":487.5,"20":631.0,"21":228.0,"22":220.0,"23":383.0,"24":197.0,"25":263.0,"26":315.0},"CCR3":{"1":77.0,"2":175.0,"3":501.0,"4":511.0,"5":109.0,"6":257.0,"7":290.0,"8":509.0,"9":634.0,"10":73.0,"11":582.0,"12":157.0,"13":301.0,"14":115.0,"15":119.0,"16":200.0,"17":274.0,"18":182.0,"19":502.5,"20":275.0,"21":190.0,"22":267.0,"23":437.0,"24":150.0,"25":232.0,"26":303.5}}, "q3": {"FSC":{"1":384.0,"2":398.0,"3":385.0,"4":398.0,"5":357.0,"6":391.0,"7":410.0,"8":392.0,"9":476.0,"10":378.0,"11":404.0,"12":459.0,"13":441.0,"14":428.0,"15":388.5,"16":435.0,"17":488.0,"18":413.0,"19":1023.0,"20":417.0,"21":644.0,"22":721.0,"23":601.0,"24":734.0,"25":768.0,"26":1023.0},"SSC":{"1":132.0,"2":140.0,"3":127.0,"4":206.0,"5":174.0,"6":176.0,"7":191.0,"8":126.0,"9":270.5,"10":128.0,"11":159.0,"12":313.5,"13":163.0,"14":159.0,"15":144.0,"16":259.0,"17":263.5,"18":146.0,"19":1023.0,"20":178.0,"21":1023.0,"22":522.0,"23":1023.0,"24":510.0,"25":1023.0,"26":1023.0},"CD4":{"1":541.0,"2":546.0,"3":534.0,"4":116.0,"5":87.0,"6":106.0,"7":120.0,"8":537.0,"9":199.25,"10":542.0,"11":122.0,"12":153.5,"13":545.0,"14":550.0,"15":356.0,"16":135.0,"17":560.0,"18":548.0,"19":554.75,"20":118.5,"21":173.0,"22":429.0,"23":389.0,"24":427.0,"25":210.0,"26":413.0},"CCR7":{"1":220.0,"2":75.0,"3":122.5,"4":214.0,"5":131.0,"6":135.0,"7":380.0,"8":294.0,"9":524.5,"10":63.0,"11":165.0,"12":247.0,"13":495.0,"14":629.0,"15":166.5,"16":559.75,"17":642.0,"18":234.0,"19":713.25,"20":609.5,"21":262.0,"22":270.0,"23":488.0,"24":259.0,"25":295.0,"26":375.0},"CD8":{"1":89.0,"2":122.0,"3":658.0,"4":162.5,"5":108.0,"6":642.0,"7":655.0,"8":664.0,"9":460.25,"10":101.0,"11":630.0,"12":273.5,"13":645.0,"14":131.0,"15":124.5,"16":201.75,"17":198.0,"18":115.0,"19":633.0,"20":656.0,"21":256.0,"22":258.0,"23":406.0,"24":234.0,"25":286.0,"26":348.0},"CCR3":{"1":105.0,"2":211.0,"3":543.0,"4":571.0,"5":156.0,"6":294.0,"7":341.0,"8":547.0,"9":683.0,"10":100.0,"11":609.0,"12":208.0,"13":348.0,"14":161.0,"15":164.0,"16":271.0,"17":338.0,"18":221.0,"19":583.25,"20":316.0,"21":234.0,"22":306.25,"23":499.0,"24":193.0,"25":270.0,"26":359.0}}, "upper": {"FSC":{"1":451.5,"2":480.5,"3":457.0,"4":531.5,"5":447.0,"6":458.5,"7":479.0,"8":455.0,"9":648.875,"10":450.0,"11":474.5,"12":580.5,"13":547.5,"14":518.0,"15":482.25,"16":534.0,"17":623.75,"18":500.0,"19":1212.0,"20":489.0,"21":738.5,"22":875.5,"23":766.0,"24":893.0,"25":900.0,"26":1187.625},"SSC":{"1":186.0,"2":201.5,"3":178.0,"4":315.5,"5":249.0,"6":258.5,"7":279.5,"8":174.0,"9":419.75,"10":179.0,"11":232.5,"12":500.25,"13":251.5,"14":234.0,"15":229.5,"16":398.5,"17":436.75,"18":209.0,"19":1023.0,"20":253.0,"21":1158.0,"22":723.375,"23":1023.0,"24":708.75,"25":1023.0,"26":1023.0},"CD4":{"1":598.0,"2":609.0,"3":594.0,"4":243.5,"5":202.5,"6":217.0,"7":229.5,"8":589.5,"9":365.0,"10":602.0,"11":234.5,"12":254.75,"13":623.0,"14":622.0,"15":455.0,"16":250.5,"17":670.25,"18":606.5,"19":737.75,"20":225.75,"21":261.5,"22":541.875,"23":459.5,"24":517.0,"25":289.5,"26":657.5},"CCR7":{"1":329.5,"2":187.5,"3":306.25,"4":411.25,"5":327.5,"6":312.375,"7":620.0,"8":427.5,"9":800.5,"10":157.5,"11":340.125,"12":409.0,"13":711.0,"14":795.5,"15":387.75,"16":737.875,"17":789.0,"18":351.0,"19":1025.625,"20":814.25,"21":362.5,"22":405.375,"23":557.0,"24":417.25,"25":371.5,"26":480.0},"CD8":{"1":222.5,"2":305.0,"3":722.5,"4":344.75,"5":259.5,"6":724.5,"7":739.0,"8":722.5,"9":855.5,"10":252.5,"11":702.0,"12":472.25,"13":724.5,"14":327.5,"15":296.25,"16":436.125,"17":440.25,"18":287.5,"19":942.375,"20":740.0,"21":343.0,"22":381.0,"23":481.0,"24":361.5,"25":361.0,"26":442.5},"CCR3":{"1":202.5,"2":304.0,"3":692.25,"4":740.5,"5":295.5,"6":414.0,"7":476.0,"8":670.0,"9":831.875,"10":194.5,"11":706.5,"12":371.5,"13":481.5,"14":302.0,"15":314.0,"16":486.625,"17":494.0,"18":318.5,"19":790.625,"20":448.0,"21":387.0,"22":408.625,"23":647.5,"24":332.5,"25":396.0,"26":506.0}}}\n\\ No newline at end of file\n'
b
diff -r bca68066a957 -r a64ece32a01a test-data/out.html
--- a/test-data/out.html Wed May 20 16:04:43 2020 -0400
+++ b/test-data/out.html Tue Jul 28 08:32:36 2020 -0400
b
@@ -8,20 +8,22 @@
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"/>
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css"/>
 <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/pdfmake-0.1.18/dt-1.10.12/b-1.2.1/b-colvis-1.2.1/b-html5-1.2.1/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.0/rr-1.1.2/sc-1.4.2/se-1.2.0/datatables.min.css"/>
-<link rel="stylesheet" href="/static/flowtools/css/parallelCoordinates.css"/>
+<link rel="stylesheet" type="text/css" href="js/Editor-1.5.6/css/editor.dataTables.css">
+<link rel="stylesheet" href="css/parallelCoordinates.css"/>
 
+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
 <script type="text/javascript" src="https://cdn.datatables.net/v/dt/pdfmake-0.1.18/dt-1.10.12/b-1.2.1/b-colvis-1.2.1/b-html5-1.2.1/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.0/rr-1.1.2/sc-1.4.2/se-1.2.0/datatables.min.js"></script>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
+<script src="js/Editor-1.5.6/js/dataTables.editor.js" type="text/javascript"></script>
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" type="text/javascript"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.full.min.js" type="text/javascript"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" type="text/javascript"></script>
 <script src="https://cdn.plot.ly/plotly-1.0.0.min.js" type="text/javascript"></script>
-<script src="/static/flowtools/js/csOverview.js" type="text/javascript"></script>
-<script src="/static/flowtools/js/crossSamplePlots.js" type="text/javascript"></script>
-<script src="/static/flowtools/js/pCoordMFIstats.js" type="text/javascript"></script>
-<script src="/static/flowtools/js/pCoordCSstats.js" type="text/javascript"></script>
-<script src="/static/flowtools/js/color_palette.js" type="text/javascript"></script>
-<script src="/static/flowtools/js/boxplots.js" type="text/javascript"></script>
+<script src="js/csOverview.js" type="text/javascript"></script>
+<script src="js/crossSamplePlots.js" type="text/javascript"></script>
+<script src="js/pCoordMFIstats.js" type="text/javascript"></script>
+<script src="js/pCoordCSstats.js" type="text/javascript"></script>
+<script src="js/color_palette.js" type="text/javascript"></script>
+<script src="js/boxplots.js" type="text/javascript"></script>
 
 <style>
 #input{font-family:Calibri,Arial}
@@ -67,7 +69,7 @@
                                 <button id="updateDisplayA" class="igbtn">Reset Display</button>
                               </div>
                               <div class="col-sm-6 optionButtons">
-                                <button id="togglePlot" class="igbtn"><img id="toggleButtonImg" src="/static/images/flowtools/barssm.png"></button>
+                                <button id="togglePlot" class="igbtn"><img id="toggleButtonImg" src="images/barssm.png"></button>
                               </div>
                             </div>
                             <table id="popTableA" class="table table-condensed table-bordered igtable">