Commit 247469b3 authored by Jérome Perrin's avatar Jérome Perrin

erp5_sql_browser: Simple tool to run SQL queries in the browser

parent e2f8c897
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_sql_browser</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>import datetime\n
import json\n
from DateTime import DateTime\n
\n
response = container.REQUEST.RESPONSE\n
\n
try:\n
results = context.manage_test(query)\n
data = [ results.names() ]\n
data.extend(results.tuples())\n
except Exception, e:\n
response.setStatus(500)\n
try:\n
response.write(str(e[1]))\n
except Exception, _:\n
response.write(str(e))\n
return\n
\n
# handle non JSON serializable data\n
new_data = [data[0]]\n
for line in data[1:]:\n
new_line = []\n
for v in line:\n
if isinstance(v, DateTime):\n
v = v.ISO()\n
if isinstance(v, datetime.datetime):\n
v = v.isoformat()\n
new_line.append(v)\n
new_data.append(new_line)\n
\n
response.setHeader(\'Content-Type\', \'application/json\')\n
return json.dumps(new_data, indent=2)\n
\n
\n
\n
\n
\n
\n
import datetime\n
import json\n
from DateTime import DateTime\n
\n
response = container.REQUEST.RESPONSE\n
\n
try:\n
results = context.manage_test(query)\n
data = [ results.names() ]\n
data.extend(results.dictionaries())\n
except Exception, e:\n
response.setStatus(500)\n
try:\n
response.write(str(e[1]))\n
except Exception, _:\n
response.write(str(e))\n
return\n
\n
# handle non JSON serializable data\n
new_data = [data[0]]\n
for line in data[1:]:\n
new_line = {}\n
for k, v in line.items():\n
if isinstance(v, DateTime):\n
v = v.ISO()\n
if isinstance(v, datetime.datetime):\n
v = v.isoformat()\n
line[k] = v#new_line.append(v)\n
new_data.append(line)\n
\n
response.setHeader(\'Content-Type\', \'application/json\')\n
return json.dumps(new_data, indent=2)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>query=""</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ZMySQLDAConnection_getQueryResultAsJSON</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>from json import dumps\n
table_dict = {}\n
\n
connection = context\n
\n
# make sure connection is open\n
connection()\n
\n
for table in connection.manage_test("SHOW TABLES"):\n
table_dict[table[0]] = []\n
for column in connection.manage_test("SHOW COLUMNS FROM `%s`" % table[0]):\n
table_dict[table[0]].append(column[0])\n
table_dict[table[0]].append("`%s`" % column[0])\n
\n
container.REQUEST.RESPONSE.setHeader(\'content-type\', \'application/json\')\n
return dumps(table_dict)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ZMySQLDAConnection_getSchemaAsJSON</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts34503950.54</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>ZMySQLDAConnection_viewQueryBrowser</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
<!DOCTYPE html>\n
<html>\n
<head>\n
<title>SQL Browser</title>\n
\n
<script type="text/javascript" src="jquery/core/jquery-1.9.min.js"></script>\n
<script type="text/javascript" src="jquery/ui/js/jquery-ui.min.js"></script>\n
\n
<!-- "local" handsontable TODO make a bt ? -->\n
<script src="sql_browser/handsontable.full.js"></script>\n
<link rel="stylesheet" media="screen" href="sql_browser/handsontable.full.css">\n
\n
<!-- "local" jquery noty -->\n
<script type="text/javascript" src="sql_browser/jquery.noty.packaged.js"></script>\n
\n
<!-- "local" c3.js (0.4.10) and d3.js (3.5.5) -->\n
<link rel="stylesheet" type="text/css" href="sql_browser/c3.min.css">\n
<script type="text/javascript" src="sql_browser/d3.min.js"></script>\n
<script type="text/javascript" src="sql_browser/c3.min.js"></script>\n
\n
<!-- PivotTable.js libs from erp5_pivot_table -->\n
<link rel="stylesheet" type="text/css" href="pivottable/pivot.css">\n
<script type="text/javascript" src="pivottable/pivot.js"></script>\n
<script type="text/javascript" src="pivottable/gchart_renderers.js"></script>\n
<script type="text/javascript" src="pivottable/c3_renderers.js"></script>\n
\n
\n
<!-- code mirror from erp5_code_mirror bt5 -->\n
<script type="text/javascript" src="codemirror/lib/codemirror.js"></script>\n
<link rel="stylesheet" href="codemirror/lib/codemirror.css">\n
<script type="text/javascript" src="codemirror/mode/sql/sql.js"></script>\n
<script type="text/javascript" src="codemirror/addon/cm_edit/matchbrackets.js"></script>\n
<link rel="stylesheet" href="codemirror/addon/dialog/dialog.css">\n
<script type="text/javascript" src="codemirror/addon/dialog/dialog.js"></script>\n
<script type="text/javascript" src="codemirror/addon/search/searchcursor.js"></script>\n
<script type="text/javascript" src="codemirror/addon/search/search.js"></script>\n
<link rel="stylesheet" href="codemirror/addon/hint/show-hint.css">\n
<script src="codemirror/addon/hint/show-hint.js"></script>\n
<script src="codemirror/addon/hint/anyword-hint.js"></script>\n
<script src="codemirror/addon/hint/sql-hint.js"></script>\n
\n
\n
<style>\n
.CodeMirror {height: 80px;}\n
body {font-family: Verdana;}\n
.c3-line {stroke-width: 3px;}\n
.c3 circle {stroke: white;}\n
.c3 text { font-size: 12px;}\n
.c3 text { font-size: 12px;}\n
.tick line {stroke: white;}\n
</style>\n
</head>\n
\n
<body>\n
<script type="text/javascript">\n
$(function() {\n
var editor,\n
ht = new Handsontable(document.getElementById(\'table_container\'), { data: [[0]], rowHeaders: true, colHeaders: true}),\n
redraw = function(){\n
\n
var derivers = $.pivotUtilities.derivers;\n
var renderers = $.extend($.pivotUtilities.renderers,\n
$.pivotUtilities.c3_renderers);\n
var dateFormat = $.pivotUtilities.derivers.dateFormat;\n
var sortAs = $.pivotUtilities.sortAs;\n
var tpl = $.pivotUtilities.aggregatorTemplates;\n
var sum = $.pivotUtilities.aggregatorTemplates.sum;\n
var numberFormat = $.pivotUtilities.numberFormat;\n
var intFormat = numberFormat({digitsAfterDecimal: 0});\n
var notification = noty({type: "info", text: "Refreshing data", layout: "bottom"});\n
\n
$.getJSON("ZMySQLDAConnection_getQueryResultAsJSON", {query: editor.getValue()}, function(mps) {\n
\n
ht.clear();\n
if (mps.length > 1) {\n
ht.updateSettings({\n
data: mps.slice(1),\n
colHeaders: mps[0]\n
});\n
} else {\n
ht.updateSettings({ data: [[0]], colHeaders: true})\n
}\n
\n
\n
$("#output").pivotUI(mps, {\n
renderers: renderers,\n
\n
hiddenAttributes: [],\n
\n
onRefresh: function(config) {\n
// TODO save properties\n
var config_copy = JSON.parse(JSON.stringify(config));\n
//delete some values which are functions\n
delete config_copy["aggregators"];\n
delete config_copy["renderers"];\n
delete config_copy["derivedAttributes"];\n
//delete some bulky default values\n
delete config_copy["rendererOptions"];\n
delete config_copy["localeStrings"];\n
$("#config_json").text(JSON.stringify(config_copy, undefined, 2));\n
}\n
});\n
notification.close();\n
}\n
).fail(function(jqXHR, textStatus, errorThrown) {\n
notification.close();\n
noty({type: "error", text: jqXHR.responseText, timeout: 5000, layout: "bottom" });\n
});\n
};\n
\n
$(function() {\n
editor = CodeMirror.fromTextArea(document.getElementById("query"), {\n
lineNumbers: true,\n
viewportMargin: Infinity,\n
extraKeys: {"Ctrl-Space": "autocomplete", "Ctrl-Enter": redraw, "Alt-Space": redraw},\n
mode: "text/x-mariadb"\n
});\n
$.getJSON("ZMySQLDAConnection_getSchemaAsJSON").then(\n
function(schema) {\n
CodeMirror.commands.autocomplete = function(cm) {\n
CodeMirror.showHint(cm, CodeMirror.hint.sql, {\n
tables: schema\n
} );\n
}\n
});\n
\n
$(\'button[name="Query"]\').click(redraw);\n
\n
// TODO: save presets in JIO\n
// ( also include pivot table config in preset )\n
$(\'button[name="Save"]\').click(function(){alert("TODO");});\n
\n
$(\'#presets\')\n
.append($(\'<option>\', {\n
value: "select * from message_queue where processing_node = -2",\n
text: \'Select failed message_queue activities\'\n
}))\n
.append($(\'<option>\', {\n
value: "update message_queue set processing_node=-1\\n where processing_node=-2\\ and method_id=\'XXX\'",\n
text: \'Restart message_queue\'\n
})).change(function(){editor.setValue($("#presets").val()); redraw();});\n
\n
redraw();\n
});\n
});\n
</script>\n
\n
Presets: <select id="presets"><option selected="selected" value=""></option></select>\n
<button name="Save">Save Preset</button>\n
<br/>\n
<textarea name="query" id="query"></textarea>\n
<button name="Query">Run Query</button>\n
\n
\n
<div id="table_container" style="margin: 10px; height: 300px; overflow: hidden"></div>\n
<div id="output" style="margin: 10px;"></div>\n
\n
<!-- TODO: debug saved configuration -->\n
<div style="display: none">\n
<pre id="config_json"></pre>\n
</div>\n
\n
</body>\n
\n
</html>\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>6813</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>sql_browser</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts34437759.35</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>c3.min.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
.c3 svg{font:10px sans-serif}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:gray;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #CCC}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#FFF}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:none}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max,.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1972</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts32886564.94</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>handsontable.full.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*!\n
* Handsontable 0.15.0-beta3\n
* Handsontable is a JavaScript library for editable tables with basic copy-paste compatibility with Excel and Google Docs\n
*\n
* Copyright 2015 Handsoncode sp. z o.o. <hello@handsontable.com>\n
* Licensed under the MIT license.\n
* http://handsontable.com/\n
*\n
* Date: Thu May 21 2015 12:12:59 GMT+0200 (CEST)\n
*/\n
\n
.handsontable {\n
position: relative;\n
}\n
\n
.handsontable .hide{\n
display: none;\n
}\n
.handsontable .relative {\n
position: relative;\n
}\n
\n
.handsontable.htAutoColumnSize {\n
visibility: hidden;\n
left: 0;\n
position: absolute;\n
top: 0;\n
}\n
\n
.handsontable .wtHider {\n
width: 0;\n
}\n
\n
.handsontable .wtSpreader {\n
position: relative;\n
width: 0; /*must be 0, otherwise blank space appears in scroll demo after scrolling max to the right */\n
height: auto;\n
}\n
\n
.handsontable table,\n
.handsontable tbody,\n
.handsontable thead,\n
.handsontable td,\n
.handsontable th,\n
.handsontable input,\n
.handsontable textarea,\n
.handsontable div {\n
box-sizing: content-box;\n
-webkit-box-sizing: content-box;\n
-moz-box-sizing: content-box;\n
}\n
\n
.handsontable input,\n
.handsontable textarea {\n
min-height: initial;\n
}\n
\n
.handsontable table.htCore {\n
border-collapse: separate;\n
/*it must be separate, otherwise there are offset miscalculations in WebKit: http://stackoverflow.com/questions/2655987/border-collapse-differences-in-ff-and-webkit*/\n
/*this actually only changes appearance of user selection - does not make text unselectable\n
-webkit-user-select: none;\n
-khtml-user-select: none;\n
-moz-user-select: none;\n
-o-user-select: none;\n
-ms-user-select: none;\n
/*user-select: none; /*no browser supports unprefixed version*/\n
border-spacing: 0;\n
margin: 0;\n
border-width: 0;\n
table-layout: fixed;\n
width: 0;\n
outline-width: 0;\n
/* reset bootstrap table style. for more info see: https://github.com/handsontable/handsontable/issues/224 */\n
max-width: none;\n
max-height: none;\n
}\n
\n
.handsontable col {\n
width: 50px;\n
}\n
\n
.handsontable col.rowHeader {\n
width: 50px;\n
}\n
\n
.handsontable th,\n
.handsontable td {\n
border-right: 1px solid #CCC;\n
border-bottom: 1px solid #CCC;\n
height: 22px;\n
empty-cells: show;\n
line-height: 21px;\n
padding: 0 4px 0 4px;\n
/* top, bottom padding different than 0 is handled poorly by FF with HTML5 doctype */\n
background-color: #FFF;\n
vertical-align: top;\n
overflow: hidden;\n
outline-width: 0;\n
white-space: pre-line;\n
/* preserve new line character in cell */\n
}\n
\n
.handsontable td.htInvalid {\n
background-color: #ff4c42 !important; /*gives priority over td.area selection background*/\n
}\n
\n
.handsontable td.htNoWrap {\n
white-space: nowrap;\n
}\n
\n
.handsontable th:last-child {\n
/*Foundation framework fix*/\n
border-right: 1px solid #CCC;\n
border-bottom: 1px solid #CCC;\n
}\n
\n
.handsontable tr:first-child th.htNoFrame,\n
.handsontable th:first-child.htNoFrame,\n
.handsontable th.htNoFrame {\n
border-left-width: 0;\n
background-color: white;\n
border-color: #FFF;\n
}\n
\n
.handsontable th:first-child,\n
.handsontable td:first-of-type,\n
.handsontable thead tr th:nth-child(2),\n
.handsontable .htNoFrame + th,\n
.handsontable .htNoFrame + td {\n
border-left: 1px solid #CCC;\n
}\n
\n
.handsontable tr:first-child th,\n
.handsontable tr:first-child td {\n
border-top: 1px solid #CCC;\n
}\n
\n
.ht_master:not(.innerBorderLeft) ~ .handsontable tbody tr th,\n
.ht_master:not(.innerBorderLeft) ~ .handsontable:not(.ht_clone_top) thead tr th:first-child\n
{\n
border-right-width: 0;\n
}\n
\n
.ht_master:not(.innerBorderTop) thead tr:last-child th,\n
.ht_master:not(.innerBorderTop) ~ .handsontable thead tr:last-child th,\n
.ht_master:not(.innerBorderTop) thead tr.lastChild th,\n
.ht_master:not(.innerBorderTop) ~ .handsontable thead tr.lastChild th {\n
border-bottom-width: 0;\n
}\n
\n
.handsontable th {\n
background-color: #EEE;\n
color: #222;\n
text-align: center;\n
font-weight: normal;\n
white-space: nowrap;\n
}\n
\n
.handsontable thead th {\n
padding: 0;\n
}\n
\n
.handsontable th.active {\n
background-color: #CCC;\n
}\n
\n
.handsontable thead th .relative {\n
padding: 2px 4px;\n
}\n
\n
/* plugins */\n
\n
.handsontable .manualColumnMover {\n
position: fixed;\n
left: 0;\n
top: 0;\n
background-color: transparent;\n
width: 5px;\n
height: 25px;\n
z-index: 999;\n
cursor: move;\n
}\n
\n
.handsontable .manualRowMover {\n
position: fixed;\n
left: -4px;\n
top: 0;\n
background-color: transparent;\n
height: 5px;\n
width: 50px;\n
z-index: 999;\n
cursor: move;\n
}\n
\n
.handsontable .manualColumnMoverGuide,\n
.handsontable .manualRowMoverGuide {\n
position: fixed;\n
left: 0;\n
top: 0;\n
background-color: #CCC;\n
width: 25px;\n
height: 25px;\n
opacity: 0.7;\n
display: none;\n
}\n
\n
.handsontable .manualColumnMoverGuide.active,\n
.handsontable .manualRowMoverGuide.active {\n
display: block;\n
}\n
\n
.handsontable .manualColumnMover:hover,\n
.handsontable .manualColumnMover.active,\n
.handsontable .manualRowMover:hover,\n
.handsontable .manualRowMover.active{\n
background-color: #88F;\n
}\n
\n
/* row + column resizer*/\n
\n
.handsontable .manualColumnResizer {\n
position: fixed;\n
top: 0;\n
cursor: col-resize;\n
z-index: 110;\n
width: 5px;\n
height: 25px;\n
}\n
\n
.handsontable .manualRowResizer {\n
position: fixed;\n
left: 0;\n
cursor: row-resize;\n
z-index: 110;\n
height: 5px;\n
width: 50px;\n
}\n
\n
.handsontable .manualColumnResizer:hover,\n
.handsontable .manualColumnResizer.active,\n
.handsontable .manualRowResizer:hover,\n
.handsontable .manualRowResizer.active {\n
background-color: #AAB;\n
}\n
\n
.handsontable .manualColumnResizerGuide {\n
position: fixed;\n
right: 0;\n
top: 0;\n
background-color: #AAB;\n
display: none;\n
width: 0;\n
border-right: 1px dashed #777;\n
margin-left: 5px;\n
}\n
\n
.handsontable .manualRowResizerGuide {\n
position: fixed;\n
left: 0;\n
bottom: 0;\n
background-color: #AAB;\n
display: none;\n
height: 0;\n
border-bottom: 1px dashed #777;\n
margin-top: 5px;\n
}\n
\n
.handsontable .manualColumnResizerGuide.active,\n
.handsontable .manualRowResizerGuide.active {\n
display: block;\n
}\n
\n
.handsontable .columnSorting {\n
position: relative;\n
}\n
\n
.handsontable .columnSorting:hover {\n
text-decoration: underline;\n
cursor: pointer;\n
}\n
\n
.handsontable .columnSorting.ascending::after {\n
content: \'\\25B2\';\n
color: #5f5f5f;\n
position: absolute;\n
left: 10px;\n
}\n
\n
.handsontable .columnSorting.descending::after {\n
content: \'\\25BC\';\n
color: #5f5f5f;\n
position: absolute;\n
left: 10px;\n
}\n
\n
/* border line */\n
\n
.handsontable .wtBorder {\n
position: absolute;\n
font-size: 0;\n
}\n
.handsontable .wtBorder.hidden{\n
display:none !important;\n
}\n
\n
.handsontable td.area {\n
background: -moz-linear-gradient(top, rgba(181,209,255,0.34) 0%, rgba(181,209,255,0.34) 100%); /* FF3.6+ */\n
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(181,209,255,0.34)), color-stop(100%,rgba(181,209,255,0.34))); /* Chrome,Safari4+ */\n
background: -webkit-linear-gradient(top, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* Chrome10+,Safari5.1+ */\n
background: -o-linear-gradient(top, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* Opera 11.10+ */\n
background: -ms-linear-gradient(top, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* IE10+ */\n
background: linear-gradient(to bottom, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* W3C */\n
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'#57b5d1ff\', endColorstr=\'#57b5d1ff\',GradientType=0 ); /* IE6-9 */\n
background-color: #fff;\n
}\n
\n
/* fill handle */\n
\n
.handsontable .wtBorder.corner {\n
font-size: 0;\n
cursor: crosshair;\n
}\n
\n
.handsontable .htBorder.htFillBorder {\n
background: red;\n
width: 1px;\n
height: 1px;\n
}\n
\n
.handsontableInput {\n
border:none;\n
outline-width: 0;\n
margin: 0 ;\n
padding: 1px 5px 0 5px;\n
font-family: inherit;\n
line-height: 21px;\n
font-size: inherit;\n
box-shadow: 0 0 0 2px #5292F7 inset;\n
resize: none;\n
/*below are needed to overwrite stuff added by jQuery UI Bootstrap theme*/\n
display: inline-block;\n
color: #000;\n
border-radius: 0;\n
background-color: #FFF;\n
/*overwrite styles potentionally made by a framework*/\n
}\n
\n
.handsontableInputHolder {\n
position: absolute;\n
top: 0;\n
left: 0;\n
z-index: 100;\n
}\n
\n
.htSelectEditor {\n
-webkit-appearance: menulist-button !important;\n
position: absolute;\n
width: auto;\n
}\n
\n
/*\n
TextRenderer readOnly cell\n
*/\n
\n
.handsontable .htDimmed {\n
color: #777;\n
}\n
\n
.handsontable .htSubmenu {\n
position: relative;\n
}\n
\n
.handsontable .htSubmenu :after{\n
content: \'â–¶\';\n
color: #777;\n
position: absolute;\n
right: 5px;\n
}\n
\n
\n
/*\n
TextRenderer horizontal alignment\n
*/\n
.handsontable .htLeft{\n
text-align: left;\n
}\n
.handsontable .htCenter{\n
text-align: center;\n
}\n
.handsontable .htRight{\n
text-align: right;\n
}\n
.handsontable .htJustify{\n
text-align: justify;\n
}\n
/*\n
TextRenderer vertical alignment\n
*/\n
.handsontable .htTop{\n
vertical-align: top;\n
}\n
.handsontable .htMiddle{\n
vertical-align: middle;\n
}\n
.handsontable .htBottom{\n
vertical-align: bottom;\n
}\n
\n
/*\n
TextRenderer placeholder value\n
*/\n
\n
.handsontable .htPlaceholder {\n
color: #999;\n
}\n
\n
/*\n
AutocompleteRenderer down arrow\n
*/\n
\n
.handsontable .htAutocompleteArrow {\n
float: right;\n
font-size: 10px;\n
color: #EEE;\n
cursor: default;\n
width: 16px;\n
text-align: center;\n
}\n
\n
.handsontable td .htAutocompleteArrow:hover {\n
color: #777;\n
}\n
\n
.handsontable td.area .htAutocompleteArrow {\n
color: #d3d3d3;\n
}\n
\n
/*\n
CheckboxRenderer\n
*/\n
\n
.handsontable .htCheckboxRendererInput.noValue {\n
opacity: 0.5;\n
}\n
\n
/*\n
NumericRenderer\n
*/\n
\n
.handsontable .htNumeric {\n
text-align: right;\n
}\n
\n
/*\n
Comment For Cell\n
*/\n
.htCommentCell{\n
position: relative;\n
}\n
.htCommentCell:after{\n
content: \'\';\n
position: absolute;\n
top: 0;\n
right: 0;\n
border-left: 6px solid transparent;\n
border-top: 6px solid red;\n
}\n
\n
@-webkit-keyframes opacity-hide {\n
from {\n
opacity: 1;\n
}\n
to {\n
opacity: 0;\n
/*display: none;*/\n
}\n
}\n
@keyframes opacity-hide {\n
from {\n
/*display: block;*/\n
opacity: 1;\n
}\n
to {\n
opacity: 0;\n
/*display: none;*/\n
}\n
}\n
\n
@-webkit-keyframes opacity-show {\n
from {\n
opacity: 0;\n
/*display: none;*/\n
}\n
to {\n
opacity: 1;\n
/*display: block;*/\n
}\n
}\n
@keyframes opacity-show {\n
from {\n
opacity: 0;\n
/*display: none;*/\n
}\n
to {\n
opacity: 1;\n
/*display: block;*/\n
}\n
}\n
\n
/**\n
* Handsontable in Handsontable\n
*/\n
\n
.handsontable .handsontable.ht_clone_top .wtHider {\n
padding: 0 0 5px 0;\n
}\n
\n
/* removing shadows, TODO: remove the commented code and this comment */\n
/*.handsontable .handsontable:not(.ht_master) table {*/\n
/*-webkit-box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.4);*/\n
/*box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.4);*/\n
/*}*/\n
\n
/**\n
* Autocomplete Editor\n
*/\n
.handsontable .autocompleteEditor.handsontable {\n
padding-right: 17px;\n
}\n
.handsontable .autocompleteEditor.handsontable.htMacScroll {\n
padding-right: 15px;\n
}\n
\n
\n
/**\n
* Handsontable listbox theme\n
*/\n
\n
.handsontable.listbox {\n
margin: 0;\n
}\n
\n
.handsontable.listbox .ht_master table {\n
border: 1px solid #ccc;\n
border-collapse: separate;\n
background: white;\n
}\n
\n
.handsontable.listbox th,\n
.handsontable.listbox tr:first-child th,\n
.handsontable.listbox tr:last-child th,\n
.handsontable.listbox tr:first-child td,\n
.handsontable.listbox td {\n
border-width: 0;\n
}\n
\n
.handsontable.listbox th,\n
.handsontable.listbox td {\n
white-space: nowrap;\n
text-overflow: ellipsis;\n
}\n
\n
.handsontable.listbox td.htDimmed {\n
cursor: default;\n
color: inherit;\n
font-style: inherit;\n
}\n
\n
.handsontable.listbox .wtBorder {\n
visibility: hidden;\n
}\n
\n
.handsontable.listbox tr td.current,\n
.handsontable.listbox tr:hover td {\n
background: #eee;\n
}\n
\n
.htContextMenu {\n
display: none;\n
position: absolute;\n
z-index: 1060; /*needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569)*/\n
overflow: hidden;\n
}\n
\n
.htContextMenu .ht_clone_top,\n
.htContextMenu .ht_clone_left,\n
.htContextMenu .ht_clone_corner,\n
.htContextMenu .ht_clone_debug {\n
display: none;\n
}\n
\n
.ht_clone_top {\n
z-index: 101;\n
}\n
\n
.ht_clone_left {\n
z-index: 102;\n
}\n
\n
.ht_clone_corner {\n
z-index: 103;\n
}\n
\n
.ht_clone_debug {\n
z-index: 103;\n
}\n
\n
.htContextMenu table.htCore {\n
border: 1px solid #bbb;\n
}\n
\n
.htContextMenu .wtBorder {\n
visibility: hidden;\n
}\n
\n
.htContextMenu table tbody tr td {\n
background: white;\n
border-width: 0;\n
padding: 4px 6px 0px 6px;\n
cursor: pointer;\n
overflow: hidden;\n
white-space: nowrap;\n
text-overflow: ellipsis;\n
}\n
\n
.htContextMenu table tbody tr td:first-child {\n
border: 0;\n
}\n
\n
.htContextMenu table tbody tr td.htDimmed{\n
font-style: normal;\n
color: #323232;\n
}\n
\n
.htContextMenu table tbody tr td.current,\n
.htContextMenu table tbody tr td.zeroclipboard-is-hover {\n
background: rgb(233, 233, 233);\n
}\n
\n
.htContextMenu table tbody tr td.htSeparator {\n
border-top: 1px solid #bbb;\n
height: 0;\n
padding: 0;\n
}\n
\n
.htContextMenu table tbody tr td.htDisabled {\n
color: #999;\n
}\n
\n
.htContextMenu table tbody tr td.htDisabled:hover {\n
background: white;\n
color: #999;\n
cursor: default;\n
}\n
.htContextMenu table tbody tr td div{\n
padding-left: 10px;\n
}\n
.htContextMenu table tbody tr td div span.selected{\n
margin-top: -2px;\n
position: absolute;\n
left: 4px;\n
}\n
\n
.htContextMenu .ht_master .wtHolder {\n
overflow: hidden;\n
}\n
\n
.handsontable td.htSearchResult {\n
background: #fcedd9;\n
color: #583707;\n
}\n
\n
/*\n
Cell borders\n
*/\n
.htBordered{\n
/*box-sizing: border-box !important;*/\n
border-width: 1px;\n
}\n
.htBordered.htTopBorderSolid{\n
border-top-style: solid;\n
border-top-color: #000;\n
}\n
.htBordered.htRightBorderSolid{\n
border-right-style: solid;\n
border-right-color: #000;\n
}\n
.htBordered.htBottomBorderSolid{\n
border-bottom-style: solid;\n
border-bottom-color: #000;\n
}\n
.htBordered.htLeftBorderSolid{\n
border-left-style: solid;\n
border-left-color: #000;\n
}\n
\n
.htCommentTextArea{\n
background-color: #FFFACD;\n
box-shadow: 1px 1px 2px #bbb;\n
font-family: \'Arial\';\n
-webkit-box-shadow: 1px 1px 2px #bbb;\n
-moz-box-shadow: 1px 1px 2px #bbb;\n
}\n
\n
\n
/* Grouping indicators */\n
.handsontable colgroup col.rowHeader.htGroupCol {\n
width: 25px !important;\n
}\n
.handsontable colgroup col.rowHeader.htGroupColClosest {\n
width: 30px !important;\n
}\n
\n
.handsontable .htGroupIndicatorContainer {\n
background: #fff;\n
border: 0px;\n
padding-bottom: 0px;\n
vertical-align: bottom;\n
position: relative;\n
}\n
\n
.handsontable thead .htGroupIndicatorContainer {\n
vertical-align: top;\n
border-bottom: 0px;\n
}\n
\n
.handsontable tbody tr th:nth-last-child(2) {\n
border-right: 1px solid #CCC;\n
}\n
\n
.handsontable thead tr:nth-last-child(2) th {\n
border-bottom: 1px solid #CCC;\n
padding-bottom: 5px;\n
}\n
\n
\n
.ht_clone_corner thead tr th:nth-last-child(2) {\n
border-right: 1px solid #CCC;\n
}\n
\n
.htVerticalGroup {\n
height: 100%;\n
}\n
\n
.htHorizontalGroup {\n
width: 100%;\n
height: 100%;\n
}\n
\n
.htVerticalGroup:not(.htCollapseButton):after {\n
content: "";\n
height: 100%;\n
width: 1px;\n
display: block;\n
background: #ccc;\n
margin-left: 5px;\n
}\n
\n
.htHorizontalGroup:not(.htCollapseButton):after {\n
content: "";\n
width: 100%;\n
height: 1px;\n
display: block;\n
background: #ccc;\n
margin-top: 20%;\n
}\n
\n
.htCollapseButton {\n
width: 10px;\n
height: 10px;\n
line-height: 10px;\n
text-align: center;\n
border-radius: 5px;\n
border: 1px solid #f3f3f3;\n
-webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n
cursor: pointer;\n
margin-bottom: 3px;\n
position: relative;\n
}\n
\n
.htCollapseButton:after {\n
content: "";\n
height: 300%;\n
width: 1px;\n
display: block;\n
background: #ccc;\n
margin-left: 4px;\n
position: absolute;\n
/*top: -300%;*/\n
bottom: 10px;\n
}\n
\n
\n
thead .htCollapseButton {\n
right: 5px;\n
position: absolute;\n
top: 5px;\n
background: #fff;\n
}\n
\n
thead .htCollapseButton:after {\n
height: 1px;\n
width: 700%;\n
right: 10px;\n
top: 4px;\n
}\n
\n
.handsontable tr th .htGroupStart:after {\n
background: transparent;\n
border-left: 1px solid #ccc;\n
border-top: 1px solid #ccc;\n
width: 5px;\n
position: relative;\n
top: 50%;\n
}\n
\n
.handsontable thead tr th .htGroupStart:after {\n
background: transparent;\n
border-left: 1px solid #ccc;\n
border-top: 1px solid #ccc;\n
height: 5px;\n
width: 50%;\n
position: relative;\n
top: 0px;\n
left: 50%;\n
}\n
\n
.handsontable .htGroupLevelTrigger {\n
-webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n
width: 15px;\n
height: 15px;\n
margin: 4px auto;\n
padding: 0px;\n
line-height: 15px;\n
cursor: pointer;\n
}\n
\n
.handsontable tr th .htExpandButton {\n
position: absolute;\n
width: 10px;\n
height: 10px;\n
line-height: 10px;\n
text-align: center;\n
border-radius: 5px;\n
border: 1px solid #f3f3f3;\n
-webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n
cursor: pointer;\n
top: 0px;\n
display: none;\n
}\n
\n
.handsontable thead tr th .htExpandButton {\n
/*left: 5px;*/\n
top: 5px;\n
}\n
\n
.handsontable tr th .htExpandButton.clickable {\n
display: block;\n
}\n
\n
.handsontable col.hidden {\n
width: 0px !important;\n
}\n
\n
.handsontable tr.hidden,\n
.handsontable tr.hidden td,\n
.handsontable tr.hidden th {\n
display: none;\n
}\n
\n
.ht_master,\n
.ht_clone_left,\n
.ht_clone_top {\n
overflow: hidden;\n
}\n
\n
.ht_master .wtHolder {\n
overflow: auto;\n
}\n
\n
.ht_clone_left .wtHolder {\n
overflow-x: hidden;\n
overflow-y: auto;\n
}\n
\n
.ht_clone_top .wtHolder {\n
overflow-x: auto;\n
overflow-y: hidden;\n
}\n
\n
\n
/*WalkontableDebugOverlay*/\n
\n
.wtDebugHidden {\n
display: none;\n
}\n
\n
.wtDebugVisible {\n
display: block;\n
-webkit-animation-duration: 0.5s;\n
-webkit-animation-name: wtFadeInFromNone;\n
animation-duration: 0.5s;\n
animation-name: wtFadeInFromNone;\n
}\n
\n
@keyframes wtFadeInFromNone {\n
0% {\n
display: none;\n
opacity: 0;\n
}\n
\n
1% {\n
display: block;\n
opacity: 0;\n
}\n
\n
100% {\n
display: block;\n
opacity: 1;\n
}\n
}\n
\n
@-webkit-keyframes wtFadeInFromNone {\n
0% {\n
display: none;\n
opacity: 0;\n
}\n
\n
1% {\n
display: block;\n
opacity: 0;\n
}\n
\n
100% {\n
display: block;\n
opacity: 1;\n
}\n
}\n
/*\n
\n
Handsontable Mobile Text Editor stylesheet\n
\n
*/\n
\n
.handsontable.mobile,\n
.handsontable.mobile .wtHolder {\n
-webkit-touch-callout:none;\n
-webkit-user-select:none;\n
-khtml-user-select:none;\n
-moz-user-select:none;\n
-ms-user-select:none;\n
user-select:none;\n
-webkit-tap-highlight-color:rgba(0,0,0,0);\n
-webkit-overflow-scrolling: touch;\n
}\n
\n
.htMobileEditorContainer {\n
display: none;\n
position: absolute;\n
top: 0;\n
width: 70%;\n
height: 54pt;\n
background: #f8f8f8;\n
border-radius: 20px;\n
border: 1px solid #ebebeb;\n
z-index: 999;\n
box-sizing: border-box;\n
-webkit-box-sizing: border-box;\n
-webkit-text-size-adjust: none;\n
}\n
\n
.topLeftSelectionHandle:not(.ht_master .topLeftSelectionHandle),\n
.topLeftSelectionHandle-HitArea:not(.ht_master .topLeftSelectionHandle-HitArea) {\n
z-index: 9999;\n
}\n
\n
/* Initial left/top coordinates - overwritten when actual position is set */\n
.topLeftSelectionHandle,\n
.topLeftSelectionHandle-HitArea,\n
.bottomRightSelectionHandle,\n
.bottomRightSelectionHandle-HitArea {\n
left: -10000px;\n
top: -10000px;\n
}\n
\n
.htMobileEditorContainer.active {\n
display: block;\n
}\n
\n
.htMobileEditorContainer .inputs {\n
position: absolute;\n
right: 210pt;\n
bottom: 10pt;\n
top: 10pt;\n
left: 14px;\n
height: 34pt;\n
}\n
\n
.htMobileEditorContainer .inputs textarea {\n
font-size: 13pt;\n
border: 1px solid #a1a1a1;\n
-webkit-appearance: none;\n
-webkit-box-shadow: none;\n
-moz-box-shadow: none;\n
box-shadow: none;\n
position: absolute;\n
left: 14px;\n
right: 14px;\n
top: 0;\n
bottom: 0;\n
padding: 7pt;\n
}\n
\n
.htMobileEditorContainer .cellPointer {\n
position: absolute;\n
top: -13pt;\n
height: 0;\n
width: 0;\n
left: 30px;\n
\n
border-left: 13pt solid transparent;\n
border-right: 13pt solid transparent;\n
border-bottom: 13pt solid #ebebeb;\n
}\n
\n
.htMobileEditorContainer .cellPointer.hidden {\n
display: none;\n
}\n
\n
.htMobileEditorContainer .cellPointer:before {\n
content: \'\';\n
display: block;\n
position: absolute;\n
top: 2px;\n
height: 0;\n
width: 0;\n
left: -13pt;\n
\n
border-left: 13pt solid transparent;\n
border-right: 13pt solid transparent;\n
border-bottom: 13pt solid #f8f8f8;\n
}\n
\n
.htMobileEditorContainer .moveHandle {\n
position: absolute;\n
top: 10pt;\n
left: 5px;\n
width: 30px;\n
bottom: 0px;\n
cursor: move;\n
z-index: 9999;\n
}\n
\n
.htMobileEditorContainer .moveHandle:after {\n
content: "..\\a..\\a..\\a..";\n
white-space: pre;\n
line-height: 10px;\n
font-size: 20pt;\n
display: inline-block;\n
margin-top: -8px;\n
color: #ebebeb;\n
}\n
\n
.htMobileEditorContainer .positionControls {\n
width: 205pt;\n
position: absolute;\n
right: 5pt;\n
top: 0;\n
bottom: 0;\n
}\n
\n
.htMobileEditorContainer .positionControls > div {\n
width: 50pt;\n
height: 100%;\n
float: left;\n
}\n
\n
.htMobileEditorContainer .positionControls > div:after {\n
content: " ";\n
display: block;\n
width: 15pt;\n
height: 15pt;\n
text-align: center;\n
line-height: 50pt;\n
}\n
\n
.htMobileEditorContainer .leftButton:after,\n
.htMobileEditorContainer .rightButton:after,\n
.htMobileEditorContainer .upButton:after,\n
.htMobileEditorContainer .downButton:after {\n
transform-origin: 5pt 5pt;\n
-webkit-transform-origin: 5pt 5pt;\n
margin: 21pt 0 0 21pt;\n
}\n
\n
.htMobileEditorContainer .leftButton:after {\n
border-top: 2px solid #288ffe;\n
border-left: 2px solid #288ffe;\n
-webkit-transform: rotate(-45deg);\n
/*margin-top: 17pt;*/\n
/*margin-left: 20pt;*/\n
}\n
.htMobileEditorContainer .leftButton:active:after {\n
border-color: #cfcfcf;\n
}\n
\n
.htMobileEditorContainer .rightButton:after {\n
border-top: 2px solid #288ffe;\n
border-left: 2px solid #288ffe;\n
-webkit-transform: rotate(135deg);\n
/*margin-top: 17pt;*/\n
/*margin-left: 10pt;*/\n
}\n
.htMobileEditorContainer .rightButton:active:after {\n
border-color: #cfcfcf;\n
}\n
\n
.htMobileEditorContainer .upButton:after {\n
/*border-top: 2px solid #cfcfcf;*/\n
border-top: 2px solid #288ffe;\n
border-left: 2px solid #288ffe;\n
-webkit-transform: rotate(45deg);\n
/*margin-top: 22pt;*/\n
/*margin-left: 15pt;*/\n
}\n
.htMobileEditorContainer .upButton:active:after {\n
border-color: #cfcfcf;\n
}\n
\n
.htMobileEditorContainer .downButton:after {\n
border-top: 2px solid #288ffe;\n
border-left: 2px solid #288ffe;\n
-webkit-transform: rotate(225deg);\n
/*margin-top: 15pt;*/\n
/*margin-left: 15pt;*/\n
}\n
.htMobileEditorContainer .downButton:active:after {\n
border-color: #cfcfcf;\n
}\n
\n
.handsontable.hide-tween {\n
-webkit-animation: opacity-hide 0.3s;\n
animation: opacity-hide 0.3s;\n
animation-fill-mode: forwards;\n
-webkit-animation-fill-mode: forwards;\n
}\n
\n
.handsontable.show-tween {\n
-webkit-animation: opacity-show 0.3s;\n
animation: opacity-show 0.3s;\n
animation-fill-mode: forwards;\n
-webkit-animation-fill-mode: forwards;\n
}\n
/*!\n
* Handsontable ContextMenu\n
*/\n
\n
.htContextMenu {\n
display: none;\n
position: absolute;\n
z-index: 1060; /*needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569)*/\n
}\n
\n
.htContextMenu .ht_clone_top,\n
.htContextMenu .ht_clone_left,\n
.htContextMenu .ht_clone_corner,\n
.htContextMenu .ht_clone_debug {\n
display: none;\n
}\n
\n
.htContextMenu table.htCore {\n
outline: 1px solid #bbb;\n
}\n
\n
.htContextMenu .wtBorder {\n
visibility: hidden;\n
}\n
\n
.htContextMenu table tbody tr td {\n
background: white;\n
border-width: 0;\n
padding: 4px 6px 0px 6px;\n
cursor: pointer;\n
overflow: hidden;\n
white-space: nowrap;\n
text-overflow: ellipsis;\n
}\n
\n
.htContextMenu table tbody tr td:first-child {\n
border: 0;\n
}\n
\n
.htContextMenu table tbody tr td.htDimmed{\n
font-style: normal;\n
color: #323232;\n
}\n
\n
.htContextMenu table tbody tr td.current,\n
.htContextMenu table tbody tr td.zeroclipboard-is-hover {\n
background: rgb(233, 233, 233);\n
}\n
\n
.htContextMenu table tbody tr td.htSeparator {\n
border-top: 1px solid #bbb;\n
height: 0;\n
padding: 0;\n
}\n
\n
.htContextMenu table tbody tr td.htDisabled {\n
color: #999;\n
}\n
\n
.htContextMenu table tbody tr td.htDisabled:hover {\n
background: white;\n
color: #999;\n
cursor: default;\n
}\n
.htContextMenu table tbody tr td div{\n
padding-left: 10px;\n
}\n
.htContextMenu table tbody tr td div span.selected{\n
margin-top: -2px;\n
position: absolute;\n
left: 4px;\n
}\n
@charset "UTF-8";\n
\n
/*!\n
* Pikaday\n
* Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/\n
*/\n
\n
.pika-single {\n
z-index: 9999;\n
display: block;\n
position: relative;\n
color: #333;\n
background: #fff;\n
border: 1px solid #ccc;\n
border-bottom-color: #bbb;\n
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n
}\n
\n
/*\n
clear child float (pika-lendar), using the famous micro clearfix hack\n
http://nicolasgallagher.com/micro-clearfix-hack/\n
*/\n
.pika-single:before,\n
.pika-single:after {\n
content: " ";\n
display: table;\n
}\n
.pika-single:after { clear: both }\n
.pika-single { *zoom: 1 }\n
\n
.pika-single.is-hidden {\n
display: none;\n
}\n
\n
.pika-single.is-bound {\n
position: absolute;\n
box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);\n
}\n
\n
.pika-lendar {\n
float: left;\n
width: 240px;\n
margin: 8px;\n
}\n
\n
.pika-title {\n
position: relative;\n
text-align: center;\n
}\n
\n
.pika-label {\n
display: inline-block;\n
*display: inline;\n
position: relative;\n
z-index: 9999;\n
overflow: hidden;\n
margin: 0;\n
padding: 5px 3px;\n
font-size: 14px;\n
line-height: 20px;\n
font-weight: bold;\n
background-color: #fff;\n
}\n
.pika-title select {\n
cursor: pointer;\n
position: absolute;\n
z-index: 9998;\n
margin: 0;\n
left: 0;\n
top: 5px;\n
filter: alpha(opacity=0);\n
opacity: 0;\n
}\n
\n
.pika-prev,\n
.pika-next {\n
display: block;\n
cursor: pointer;\n
position: relative;\n
outline: none;\n
border: 0;\n
padding: 0;\n
width: 20px;\n
height: 30px;\n
/* hide text using text-indent trick, using width value (it\'s enough) */\n
text-indent: 20px;\n
white-space: nowrap;\n
overflow: hidden;\n
background-color: transparent;\n
background-position: center center;\n
background-repeat: no-repeat;\n
background-size: 75% 75%;\n
opacity: .5;\n
*position: absolute;\n
*top: 0;\n
}\n
\n
.pika-prev:hover,\n
.pika-next:hover {\n
opacity: 1;\n
}\n
\n
.pika-prev,\n
.is-rtl .pika-next {\n
float: left;\n
background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==\');\n
*left: 0;\n
}\n
\n
.pika-next,\n
.is-rtl .pika-prev {\n
float: right;\n
background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=\');\n
*right: 0;\n
}\n
\n
.pika-prev.is-disabled,\n
.pika-next.is-disabled {\n
cursor: default;\n
opacity: .2;\n
}\n
\n
.pika-select {\n
display: inline-block;\n
*display: inline;\n
}\n
\n
.pika-table {\n
width: 100%;\n
border-collapse: collapse;\n
border-spacing: 0;\n
border: 0;\n
}\n
\n
.pika-table th,\n
.pika-table td {\n
width: 14.285714285714286%;\n
padding: 0;\n
}\n
\n
.pika-table th {\n
color: #999;\n
font-size: 12px;\n
line-height: 25px;\n
font-weight: bold;\n
text-align: center;\n
}\n
\n
.pika-button {\n
cursor: pointer;\n
display: block;\n
box-sizing: border-box;\n
-moz-box-sizing: border-box;\n
outline: none;\n
border: 0;\n
margin: 0;\n
width: 100%;\n
padding: 5px;\n
color: #666;\n
font-size: 12px;\n
line-height: 15px;\n
text-align: right;\n
background: #f5f5f5;\n
}\n
\n
.pika-week {\n
font-size: 11px;\n
color: #999;\n
}\n
\n
.is-today .pika-button {\n
color: #33aaff;\n
font-weight: bold;\n
}\n
\n
.is-selected .pika-button {\n
color: #fff;\n
font-weight: bold;\n
background: #33aaff;\n
box-shadow: inset 0 1px 3px #178fe5;\n
border-radius: 3px;\n
}\n
\n
.is-disabled .pika-button {\n
pointer-events: none;\n
cursor: default;\n
color: #999;\n
opacity: .3;\n
}\n
\n
.pika-button:hover {\n
color: #fff !important;\n
background: #ff8000 !important;\n
box-shadow: none !important;\n
border-radius: 3px !important;\n
}\n
\n
/* styling for abbr */\n
.pika-table abbr {\n
border-bottom: none;\n
cursor: help;\n
}\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>27608</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts32635766.77</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jquery.noty.packaged.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
!function(root, factory) {\n
\t if (typeof define === \'function\' && define.amd) {\n
\t\t define([\'jquery\'], factory);\n
\t } else if (typeof exports === \'object\') {\n
\t\t module.exports = factory(require(\'jquery\'));\n
\t } else {\n
\t\t factory(root.jQuery);\n
\t }\n
}(this, function($) {\n
\n
/*!\n
@package noty - jQuery Notification Plugin\n
@version version: 2.3.5\n
@contributors https://github.com/needim/noty/graphs/contributors\n
\n
@documentation Examples and Documentation - http://needim.github.com/noty/\n
\n
@license Licensed under the MIT licenses: http://www.opensource.org/licenses/mit-license.php\n
*/\n
\n
if(typeof Object.create !== \'function\') {\n
Object.create = function(o) {\n
function F() {\n
}\n
\n
F.prototype = o;\n
return new F();\n
};\n
}\n
\n
var NotyObject = {\n
\n
init: function(options) {\n
\n
// Mix in the passed in options with the default options\n
this.options = $.extend({}, $.noty.defaults, options);\n
\n
this.options.layout = (this.options.custom) ? $.noty.layouts[\'inline\'] : $.noty.layouts[this.options.layout];\n
\n
if($.noty.themes[this.options.theme])\n
this.options.theme = $.noty.themes[this.options.theme];\n
else\n
options.themeClassName = this.options.theme;\n
\n
delete options.layout;\n
delete options.theme;\n
\n
this.options = $.extend({}, this.options, this.options.layout.options);\n
this.options.id = \'noty_\' + (new Date().getTime() * Math.floor(Math.random() * 1000000));\n
\n
this.options = $.extend({}, this.options, options);\n
\n
// Build the noty dom initial structure\n
this._build();\n
\n
// return this so we can chain/use the bridge with less code.\n
return this;\n
}, // end init\n
\n
_build: function() {\n
\n
// Generating noty bar\n
var $bar = $(\'<div class="noty_bar noty_type_\' + this.options.type + \'"></div>\').attr(\'id\', this.options.id);\n
$bar.append(this.options.template).find(\'.noty_text\').html(this.options.text);\n
\n
this.$bar = (this.options.layout.parent.object !== null) ? $(this.options.layout.parent.object).css(this.options.layout.parent.css).append($bar) : $bar;\n
\n
if(this.options.themeClassName)\n
this.$bar.addClass(this.options.themeClassName).addClass(\'noty_container_type_\' + this.options.type);\n
\n
// Set buttons if available\n
if(this.options.buttons) {\n
\n
// If we have button disable closeWith & timeout options\n
this.options.closeWith = [];\n
this.options.timeout = false;\n
\n
var $buttons = $(\'<div/>\').addClass(\'noty_buttons\');\n
\n
(this.options.layout.parent.object !== null) ? this.$bar.find(\'.noty_bar\').append($buttons) : this.$bar.append($buttons);\n
\n
var self = this;\n
\n
$.each(this.options.buttons, function(i, button) {\n
var $button = $(\'<button/>\').addClass((button.addClass) ? button.addClass : \'gray\').html(button.text).attr(\'id\', button.id ? button.id : \'button-\' + i)\n
.appendTo(self.$bar.find(\'.noty_buttons\'))\n
.on(\'click\', function(event) {\n
if($.isFunction(button.onClick)) {\n
button.onClick.call($button, self, event);\n
}\n
});\n
});\n
}\n
\n
// For easy access\n
this.$message = this.$bar.find(\'.noty_message\');\n
this.$closeButton = this.$bar.find(\'.noty_close\');\n
this.$buttons = this.$bar.find(\'.noty_buttons\');\n
\n
$.noty.store[this.options.id] = this; // store noty for api\n
\n
}, // end _build\n
\n
show: function() {\n
\n
var self = this;\n
\n
(self.options.custom) ? self.options.custom.find(self.options.layout.container.selector).append(self.$bar) : $(self.options.layout.container.selector).append(self.$bar);\n
\n
if(self.options.theme && self.options.theme.style)\n
self.options.theme.style.apply(self);\n
\n
($.type(self.options.layout.css) === \'function\') ? this.options.layout.css.apply(self.$bar) : self.$bar.css(this.options.layout.css || {});\n
\n
self.$bar.addClass(self.options.layout.addClass);\n
\n
self.options.layout.container.style.apply($(self.options.layout.container.selector));\n
\n
self.showing = true;\n
\n
if(self.options.theme && self.options.theme.style)\n
self.options.theme.callback.onShow.apply(this);\n
\n
if($.inArray(\'click\', self.options.closeWith) > -1)\n
self.$bar.css(\'cursor\', \'pointer\').one(\'click\', function(evt) {\n
self.stopPropagation(evt);\n
if(self.options.callback.onCloseClick) {\n
self.options.callback.onCloseClick.apply(self);\n
}\n
self.close();\n
});\n
\n
if($.inArray(\'hover\', self.options.closeWith) > -1)\n
self.$bar.one(\'mouseenter\', function() {\n
self.close();\n
});\n
\n
if($.inArray(\'button\', self.options.closeWith) > -1)\n
self.$closeButton.one(\'click\', function(evt) {\n
self.stopPropagation(evt);\n
self.close();\n
});\n
\n
if($.inArray(\'button\', self.options.closeWith) == -1)\n
self.$closeButton.remove();\n
\n
if(self.options.callback.onShow)\n
self.options.callback.onShow.apply(self);\n
\n
if (typeof self.options.animation.open == \'string\') {\n
self.$bar.css(\'height\', self.$bar.innerHeight());\n
self.$bar.show().addClass(self.options.animation.open).one(\'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend\', function() {\n
if(self.options.callback.afterShow) self.options.callback.afterShow.apply(self);\n
self.showing = false;\n
self.shown = true;\n
});\n
\n
} else {\n
self.$bar.animate(\n
self.options.animation.open,\n
self.options.animation.speed,\n
self.options.animation.easing,\n
function() {\n
if(self.options.callback.afterShow) self.options.callback.afterShow.apply(self);\n
self.showing = false;\n
self.shown = true;\n
});\n
}\n
\n
// If noty is have a timeout option\n
if(self.options.timeout)\n
self.$bar.delay(self.options.timeout).promise().done(function() {\n
self.close();\n
});\n
\n
return this;\n
\n
}, // end show\n
\n
close: function() {\n
\n
if(this.closed) return;\n
if(this.$bar && this.$bar.hasClass(\'i-am-closing-now\')) return;\n
\n
var self = this;\n
\n
if(this.showing) {\n
self.$bar.queue(\n
function() {\n
self.close.apply(self);\n
}\n
);\n
return;\n
}\n
\n
if(!this.shown && !this.showing) { // If we are still waiting in the queue just delete from queue\n
var queue = [];\n
$.each($.noty.queue, function(i, n) {\n
if(n.options.id != self.options.id) {\n
queue.push(n);\n
}\n
});\n
$.noty.queue = queue;\n
return;\n
}\n
\n
self.$bar.addClass(\'i-am-closing-now\');\n
\n
if(self.options.callback.onClose) {\n
self.options.callback.onClose.apply(self);\n
}\n
\n
if (typeof self.options.animation.close == \'string\') {\n
self.$bar.addClass(self.options.animation.close).one(\'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend\', function() {\n
if(self.options.callback.afterClose) self.options.callback.afterClose.apply(self);\n
self.closeCleanUp();\n
});\n
} else {\n
self.$bar.clearQueue().stop().animate(\n
self.options.animation.close,\n
self.options.animation.speed,\n
self.options.animation.easing,\n
function() {\n
if(self.options.callback.afterClose) self.options.callback.afterClose.apply(self);\n
})\n
.promise().done(function() {\n
self.closeCleanUp();\n
});\n
}\n
\n
}, // end close\n
\n
closeCleanUp: function() {\n
\n
var self = this;\n
\n
// Modal Cleaning\n
if(self.options.modal) {\n
$.notyRenderer.setModalCount(-1);\n
if($.notyRenderer.getModalCount() == 0) $(\'.noty_modal\').fadeOut(\'fast\', function() {\n
$(this).remove();\n
});\n
}\n
\n
// Layout Cleaning\n
$.notyRenderer.setLayoutCountFor(self, -1);\n
if($.notyRenderer.getLayoutCountFor(self) == 0) $(self.options.layout.container.selector).remove();\n
\n
// Make sure self.$bar has not been removed before attempting to remove it\n
if(typeof self.$bar !== \'undefined\' && self.$bar !== null) {\n
\n
if (typeof self.options.animation.close == \'string\') {\n
self.$bar.css(\'transition\', \'all 100ms ease\').css(\'border\', 0).css(\'margin\', 0).height(0);\n
self.$bar.one(\'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd\', function() {\n
self.$bar.remove();\n
self.$bar = null;\n
self.closed = true;\n
\n
if(self.options.theme.callback && self.options.theme.callback.onClose) {\n
self.options.theme.callback.onClose.apply(self);\n
}\n
});\n
} else {\n
self.$bar.remove();\n
self.$bar = null;\n
self.closed = true;\n
}\n
}\n
\n
delete $.noty.store[self.options.id]; // deleting noty from store\n
\n
if(self.options.theme.callback && self.options.theme.callback.onClose) {\n
self.options.theme.callback.onClose.apply(self);\n
}\n
\n
if(!self.options.dismissQueue) {\n
// Queue render\n
$.noty.ontap = true;\n
\n
$.notyRenderer.render();\n
}\n
\n
if(self.options.maxVisible > 0 && self.options.dismissQueue) {\n
$.notyRenderer.render();\n
}\n
\n
}, // end close clean up\n
\n
setText: function(text) {\n
if(!this.closed) {\n
this.options.text = text;\n
this.$bar.find(\'.noty_text\').html(text);\n
}\n
return this;\n
},\n
\n
setType: function(type) {\n
if(!this.closed) {\n
this.options.type = type;\n
this.options.theme.style.apply(this);\n
this.options.theme.callback.onShow.apply(this);\n
}\n
return this;\n
},\n
\n
setTimeout: function(time) {\n
if(!this.closed) {\n
var self = this;\n
this.options.timeout = time;\n
self.$bar.delay(self.options.timeout).promise().done(function() {\n
self.close();\n
});\n
}\n
return this;\n
},\n
\n
stopPropagation: function(evt) {\n
evt = evt || window.event;\n
if(typeof evt.stopPropagation !== "undefined") {\n
evt.stopPropagation();\n
}\n
else {\n
evt.cancelBubble = true;\n
}\n
},\n
\n
closed : false,\n
showing: false,\n
shown : false\n
\n
}; // end NotyObject\n
\n
$.notyRenderer = {};\n
\n
$.notyRenderer.init = function(options) {\n
\n
// Renderer creates a new noty\n
var notification = Object.create(NotyObject).init(options);\n
\n
if(notification.options.killer)\n
$.noty.closeAll();\n
\n
(notification.options.force) ? $.noty.queue.unshift(notification) : $.noty.queue.push(notification);\n
\n
$.notyRenderer.render();\n
\n
return ($.noty.returns == \'object\') ? notification : notification.options.id;\n
};\n
\n
$.notyRenderer.render = function() {\n
\n
var instance = $.noty.queue[0];\n
\n
if($.type(instance) === \'object\') {\n
if(instance.options.dismissQueue) {\n
if(instance.options.maxVisible > 0) {\n
if($(instance.options.layout.container.selector + \' li\').length < instance.options.maxVisible) {\n
$.notyRenderer.show($.noty.queue.shift());\n
}\n
else {\n
\n
}\n
}\n
else {\n
$.notyRenderer.show($.noty.queue.shift());\n
}\n
}\n
else {\n
if($.noty.ontap) {\n
$.notyRenderer.show($.noty.queue.shift());\n
$.noty.ontap = false;\n
}\n
}\n
}\n
else {\n
$.noty.ontap = true; // Queue is over\n
}\n
\n
};\n
\n
$.notyRenderer.show = function(notification) {\n
\n
if(notification.options.modal) {\n
$.notyRenderer.createModalFor(notification);\n
$.notyRenderer.setModalCount(+1);\n
}\n
\n
// Where is the container?\n
if(notification.options.custom) {\n
if(notification.options.custom.find(notification.options.layout.container.selector).length == 0) {\n
notification.options.custom.append($(notification.options.layout.container.object).addClass(\'i-am-new\'));\n
}\n
else {\n
notification.options.custom.find(notification.options.layout.container.selector).removeClass(\'i-am-new\');\n
}\n
}\n
else {\n
if($(notification.options.layout.container.selector).length == 0) {\n
$(\'body\').append($(notification.options.layout.container.object).addClass(\'i-am-new\'));\n
}\n
else {\n
$(notification.options.layout.container.selector).removeClass(\'i-am-new\');\n
}\n
}\n
\n
$.notyRenderer.setLayoutCountFor(notification, +1);\n
\n
notification.show();\n
};\n
\n
$.notyRenderer.createModalFor = function(notification) {\n
if($(\'.noty_modal\').length == 0) {\n
var modal = $(\'<div/>\').addClass(\'noty_modal\').addClass(notification.options.theme).data(\'noty_modal_count\', 0);\n
\n
if(notification.options.theme.modal && notification.options.theme.modal.css)\n
modal.css(notification.options.theme.modal.css);\n
\n
modal.prependTo($(\'body\')).fadeIn(\'fast\');\n
\n
if($.inArray(\'backdrop\', notification.options.closeWith) > -1)\n
modal.on(\'click\', function(e) {\n
$.noty.closeAll();\n
});\n
}\n
};\n
\n
$.notyRenderer.getLayoutCountFor = function(notification) {\n
return $(notification.options.layout.container.selector).data(\'noty_layout_count\') || 0;\n
};\n
\n
$.notyRenderer.setLayoutCountFor = function(notification, arg) {\n
return $(notification.options.layout.container.selector).data(\'noty_layout_count\', $.notyRenderer.getLayoutCountFor(notification) + arg);\n
};\n
\n
$.notyRenderer.getModalCount = function() {\n
return $(\'.noty_modal\').data(\'noty_modal_count\') || 0;\n
};\n
\n
$.notyRenderer.setModalCount = function(arg) {\n
return $(\'.noty_modal\').data(\'noty_modal_count\', $.notyRenderer.getModalCount() + arg);\n
};\n
\n
// This is for custom container\n
$.fn.noty = function(options) {\n
options.custom = $(this);\n
return $.notyRenderer.init(options);\n
};\n
\n
$.noty = {};\n
$.noty.queue = [];\n
$.noty.ontap = true;\n
$.noty.layouts = {};\n
$.noty.themes = {};\n
$.noty.returns = \'object\';\n
$.noty.store = {};\n
\n
$.noty.get = function(id) {\n
return $.noty.store.hasOwnProperty(id) ? $.noty.store[id] : false;\n
};\n
\n
$.noty.close = function(id) {\n
return $.noty.get(id) ? $.noty.get(id).close() : false;\n
};\n
\n
$.noty.setText = function(id, text) {\n
return $.noty.get(id) ? $.noty.get(id).setText(text) : false;\n
};\n
\n
$.noty.setType = function(id, type) {\n
return $.noty.get(id) ? $.noty.get(id).setType(type) : false;\n
};\n
\n
$.noty.clearQueue = function() {\n
$.noty.queue = [];\n
};\n
\n
$.noty.closeAll = function() {\n
$.noty.clearQueue();\n
$.each($.noty.store, function(id, noty) {\n
noty.close();\n
});\n
};\n
\n
var windowAlert = window.alert;\n
\n
$.noty.consumeAlert = function(options) {\n
window.alert = function(text) {\n
if(options)\n
options.text = text;\n
else\n
options = {text: text};\n
\n
$.notyRenderer.init(options);\n
};\n
};\n
\n
$.noty.stopConsumeAlert = function() {\n
window.alert = windowAlert;\n
};\n
\n
$.noty.defaults = {\n
layout : \'top\',\n
theme : \'defaultTheme\',\n
type : \'alert\',\n
text : \'\',\n
dismissQueue: true,\n
template : \'<div class="noty_message"><span class="noty_text"></span><div class="noty_close"></div></div>\',\n
animation : {\n
open : {height: \'toggle\'},\n
close : {height: \'toggle\'},\n
easing: \'swing\',\n
speed : 500\n
},\n
timeout : false,\n
force : false,\n
modal : false,\n
maxVisible : 5,\n
killer : false,\n
closeWith : [\'click\'],\n
callback : {\n
onShow : function() {\n
},\n
afterShow : function() {\n
},\n
onClose : function() {\n
},\n
afterClose : function() {\n
},\n
onCloseClick: function() {\n
}\n
},\n
buttons : false\n
};\n
\n
$(window).on(\'resize\', function() {\n
$.each($.noty.layouts, function(index, layout) {\n
layout.container.style.apply($(layout.container.selector));\n
});\n
});\n
\n
// Helpers\n
window.noty = function noty(options) {\n
return $.notyRenderer.init(options);\n
};\n
\n
$.noty.layouts.bottom = {\n
name : \'bottom\',\n
options : {},\n
container: {\n
object : \'<ul id="noty_bottom_layout_container" />\',\n
selector: \'ul#noty_bottom_layout_container\',\n
style : function() {\n
$(this).css({\n
bottom : 0,\n
left : \'5%\',\n
position : \'fixed\',\n
width : \'90%\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 9999999\n
});\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\'\n
},\n
addClass : \'\'\n
};\n
\n
$.noty.layouts.bottomCenter = {\n
name : \'bottomCenter\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_bottomCenter_layout_container" />\',\n
selector: \'ul#noty_bottomCenter_layout_container\',\n
style : function() {\n
$(this).css({\n
bottom : 20,\n
left : 0,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
$(this).css({\n
left: ($(window).width() - $(this).outerWidth(false)) / 2 + \'px\'\n
});\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
\n
\n
$.noty.layouts.bottomLeft = {\n
name : \'bottomLeft\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_bottomLeft_layout_container" />\',\n
selector: \'ul#noty_bottomLeft_layout_container\',\n
style : function() {\n
$(this).css({\n
bottom : 20,\n
left : 20,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
if(window.innerWidth < 600) {\n
$(this).css({\n
left: 5\n
});\n
}\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.bottomRight = {\n
name : \'bottomRight\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_bottomRight_layout_container" />\',\n
selector: \'ul#noty_bottomRight_layout_container\',\n
style : function() {\n
$(this).css({\n
bottom : 20,\n
right : 20,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
if(window.innerWidth < 600) {\n
$(this).css({\n
right: 5\n
});\n
}\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.center = {\n
name : \'center\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_center_layout_container" />\',\n
selector: \'ul#noty_center_layout_container\',\n
style : function() {\n
$(this).css({\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
// getting hidden height\n
var dupe = $(this).clone().css({visibility: "hidden", display: "block", position: "absolute", top: 0, left: 0}).attr(\'id\', \'dupe\');\n
$("body").append(dupe);\n
dupe.find(\'.i-am-closing-now\').remove();\n
dupe.find(\'li\').css(\'display\', \'block\');\n
var actual_height = dupe.height();\n
dupe.remove();\n
\n
if($(this).hasClass(\'i-am-new\')) {\n
$(this).css({\n
left: ($(window).width() - $(this).outerWidth(false)) / 2 + \'px\',\n
top : ($(window).height() - actual_height) / 2 + \'px\'\n
});\n
}\n
else {\n
$(this).animate({\n
left: ($(window).width() - $(this).outerWidth(false)) / 2 + \'px\',\n
top : ($(window).height() - actual_height) / 2 + \'px\'\n
}, 500);\n
}\n
\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.centerLeft = {\n
name : \'centerLeft\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_centerLeft_layout_container" />\',\n
selector: \'ul#noty_centerLeft_layout_container\',\n
style : function() {\n
$(this).css({\n
left : 20,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
// getting hidden height\n
var dupe = $(this).clone().css({visibility: "hidden", display: "block", position: "absolute", top: 0, left: 0}).attr(\'id\', \'dupe\');\n
$("body").append(dupe);\n
dupe.find(\'.i-am-closing-now\').remove();\n
dupe.find(\'li\').css(\'display\', \'block\');\n
var actual_height = dupe.height();\n
dupe.remove();\n
\n
if($(this).hasClass(\'i-am-new\')) {\n
$(this).css({\n
top: ($(window).height() - actual_height) / 2 + \'px\'\n
});\n
}\n
else {\n
$(this).animate({\n
top: ($(window).height() - actual_height) / 2 + \'px\'\n
}, 500);\n
}\n
\n
if(window.innerWidth < 600) {\n
$(this).css({\n
left: 5\n
});\n
}\n
\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
\n
$.noty.layouts.centerRight = {\n
name : \'centerRight\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_centerRight_layout_container" />\',\n
selector: \'ul#noty_centerRight_layout_container\',\n
style : function() {\n
$(this).css({\n
right : 20,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
// getting hidden height\n
var dupe = $(this).clone().css({visibility: "hidden", display: "block", position: "absolute", top: 0, left: 0}).attr(\'id\', \'dupe\');\n
$("body").append(dupe);\n
dupe.find(\'.i-am-closing-now\').remove();\n
dupe.find(\'li\').css(\'display\', \'block\');\n
var actual_height = dupe.height();\n
dupe.remove();\n
\n
if($(this).hasClass(\'i-am-new\')) {\n
$(this).css({\n
top: ($(window).height() - actual_height) / 2 + \'px\'\n
});\n
}\n
else {\n
$(this).animate({\n
top: ($(window).height() - actual_height) / 2 + \'px\'\n
}, 500);\n
}\n
\n
if(window.innerWidth < 600) {\n
$(this).css({\n
right: 5\n
});\n
}\n
\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.inline = {\n
name : \'inline\',\n
options : {},\n
container: {\n
object : \'<ul class="noty_inline_layout_container" />\',\n
selector: \'ul.noty_inline_layout_container\',\n
style : function() {\n
$(this).css({\n
width : \'100%\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 9999999\n
});\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.top = {\n
name : \'top\',\n
options : {},\n
container: {\n
object : \'<ul id="noty_top_layout_container" />\',\n
selector: \'ul#noty_top_layout_container\',\n
style : function() {\n
$(this).css({\n
top : 0,\n
left : \'5%\',\n
position : \'fixed\',\n
width : \'90%\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 9999999\n
});\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.topCenter = {\n
name : \'topCenter\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_topCenter_layout_container" />\',\n
selector: \'ul#noty_topCenter_layout_container\',\n
style : function() {\n
$(this).css({\n
top : 20,\n
left : 0,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
$(this).css({\n
left: ($(window).width() - $(this).outerWidth(false)) / 2 + \'px\'\n
});\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
\n
$.noty.layouts.topLeft = {\n
name : \'topLeft\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_topLeft_layout_container" />\',\n
selector: \'ul#noty_topLeft_layout_container\',\n
style : function() {\n
$(this).css({\n
top : 20,\n
left : 20,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
if(window.innerWidth < 600) {\n
$(this).css({\n
left: 5\n
});\n
}\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
$.noty.layouts.topRight = {\n
name : \'topRight\',\n
options : { // overrides options\n
\n
},\n
container: {\n
object : \'<ul id="noty_topRight_layout_container" />\',\n
selector: \'ul#noty_topRight_layout_container\',\n
style : function() {\n
$(this).css({\n
top : 20,\n
right : 20,\n
position : \'fixed\',\n
width : \'310px\',\n
height : \'auto\',\n
margin : 0,\n
padding : 0,\n
listStyleType: \'none\',\n
zIndex : 10000000\n
});\n
\n
if(window.innerWidth < 600) {\n
$(this).css({\n
right: 5\n
});\n
}\n
}\n
},\n
parent : {\n
object : \'<li />\',\n
selector: \'li\',\n
css : {}\n
},\n
css : {\n
display: \'none\',\n
width : \'310px\'\n
},\n
addClass : \'\'\n
};\n
$.noty.themes.bootstrapTheme = {\n
name: \'bootstrapTheme\',\n
modal: {\n
css: {\n
position: \'fixed\',\n
width: \'100%\',\n
height: \'100%\',\n
backgroundColor: \'#000\',\n
zIndex: 10000,\n
opacity: 0.6,\n
display: \'none\',\n
left: 0,\n
top: 0\n
}\n
},\n
style: function() {\n
\n
var containerSelector = this.options.layout.container.selector;\n
$(containerSelector).addClass(\'list-group\');\n
\n
this.$closeButton.append(\'<span aria-hidden="true">&times;</span><span class="sr-only">Close</span>\');\n
this.$closeButton.addClass(\'close\');\n
\n
this.$bar.addClass( "list-group-item" ).css(\'padding\', \'0px\');\n
\n
switch (this.options.type) {\n
case \'alert\': case \'notification\':\n
this.$bar.addClass( "list-group-item-info" );\n
break;\n
case \'warning\':\n
this.$bar.addClass( "list-group-item-warning" );\n
break;\n
case \'error\':\n
this.$bar.addClass( "list-group-item-danger" );\n
break;\n
case \'information\':\n
this.$bar.addClass("list-group-item-info");\n
break;\n
case \'success\':\n
this.$bar.addClass( "list-group-item-success" );\n
break;\n
}\n
\n
this.$message.css({\n
fontSize: \'13px\',\n
lineHeight: \'16px\',\n
textAlign: \'center\',\n
padding: \'8px 10px 9px\',\n
width: \'auto\',\n
position: \'relative\'\n
});\n
},\n
callback: {\n
onShow: function() { },\n
onClose: function() { }\n
}\n
};\n
\n
\n
$.noty.themes.defaultTheme = {\n
name : \'defaultTheme\',\n
helpers : {\n
borderFix: function() {\n
if(this.options.dismissQueue) {\n
var selector = this.options.layout.container.selector + \' \' + this.options.layout.parent.selector;\n
switch(this.options.layout.name) {\n
case \'top\':\n
$(selector).css({borderRadius: \'0px 0px 0px 0px\'});\n
$(selector).last().css({borderRadius: \'0px 0px 5px 5px\'});\n
break;\n
case \'topCenter\':\n
case \'topLeft\':\n
case \'topRight\':\n
case \'bottomCenter\':\n
case \'bottomLeft\':\n
case \'bottomRight\':\n
case \'center\':\n
case \'centerLeft\':\n
case \'centerRight\':\n
case \'inline\':\n
$(selector).css({borderRadius: \'0px 0px 0px 0px\'});\n
$(selector).first().css({\'border-top-left-radius\': \'5px\', \'border-top-right-radius\': \'5px\'});\n
$(selector).last().css({\'border-bottom-left-radius\': \'5px\', \'border-bottom-right-radius\': \'5px\'});\n
break;\n
case \'bottom\':\n
$(selector).css({borderRadius: \'0px 0px 0px 0px\'});\n
$(selector).first().css({borderRadius: \'5px 5px 0px 0px\'});\n
break;\n
default:\n
break;\n
}\n
}\n
}\n
},\n
modal : {\n
css: {\n
position : \'fixed\',\n
width : \'100%\',\n
height : \'100%\',\n
backgroundColor: \'#000\',\n
zIndex : 10000,\n
opacity : 0.6,\n
display : \'none\',\n
left : 0,\n
top : 0\n
}\n
},\n
style : function() {\n
\n
this.$bar.css({\n
overflow : \'hidden\',\n
background: "url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAoCAQAAAClM0ndAAAAhklEQVR4AdXO0QrCMBBE0bttkk38/w8WRERpdyjzVOc+HxhIHqJGMQcFFkpYRQotLLSw0IJ5aBdovruMYDA/kT8plF9ZKLFQcgF18hDj1SbQOMlCA4kao0iiXmah7qBWPdxpohsgVZyj7e5I9KcID+EhiDI5gxBYKLBQYKHAQoGFAoEks/YEGHYKB7hFxf0AAAAASUVORK5CYII=\') repeat-x scroll left top #fff"\n
});\n
\n
this.$message.css({\n
fontSize : \'13px\',\n
lineHeight: \'16px\',\n
textAlign : \'center\',\n
padding : \'8px 10px 9px\',\n
width : \'auto\',\n
position : \'relative\'\n
});\n
\n
this.$closeButton.css({\n
position : \'absolute\',\n
top : 4, right: 4,\n
width : 10, height: 10,\n
background: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAxUlEQVR4AR3MPUoDURSA0e++uSkkOxC3IAOWNtaCIDaChfgXBMEZbQRByxCwk+BasgQRZLSYoLgDQbARxry8nyumPcVRKDfd0Aa8AsgDv1zp6pYd5jWOwhvebRTbzNNEw5BSsIpsj/kurQBnmk7sIFcCF5yyZPDRG6trQhujXYosaFoc+2f1MJ89uc76IND6F9BvlXUdpb6xwD2+4q3me3bysiHvtLYrUJto7PD/ve7LNHxSg/woN2kSz4txasBdhyiz3ugPGetTjm3XRokAAAAASUVORK5CYII=)",\n
display : \'none\',\n
cursor : \'pointer\'\n
});\n
\n
this.$buttons.css({\n
padding : 5,\n
textAlign : \'right\',\n
borderTop : \'1px solid #ccc\',\n
backgroundColor: \'#fff\'\n
});\n
\n
this.$buttons.find(\'button\').css({\n
marginLeft: 5\n
});\n
\n
this.$buttons.find(\'button:first\').css({\n
marginLeft: 0\n
});\n
\n
this.$bar.on({\n
mouseenter: function() {\n
$(this).find(\'.noty_close\').stop().fadeTo(\'normal\', 1);\n
},\n
mouseleave: function() {\n
$(this).find(\'.noty_close\').stop().fadeTo(\'normal\', 0);\n
}\n
});\n
\n
switch(this.options.layout.name) {\n
case \'top\':\n
this.$bar.css({\n
borderRadius: \'0px 0px 5px 5px\',\n
borderBottom: \'2px solid #eee\',\n
borderLeft : \'2px solid #eee\',\n
borderRight : \'2px solid #eee\',\n
boxShadow : "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
break;\n
case \'topCenter\':\n
case \'center\':\n
case \'bottomCenter\':\n
case \'inline\':\n
this.$bar.css({\n
borderRadius: \'5px\',\n
border : \'1px solid #eee\',\n
boxShadow : "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
this.$message.css({fontSize: \'13px\', textAlign: \'center\'});\n
break;\n
case \'topLeft\':\n
case \'topRight\':\n
case \'bottomLeft\':\n
case \'bottomRight\':\n
case \'centerLeft\':\n
case \'centerRight\':\n
this.$bar.css({\n
borderRadius: \'5px\',\n
border : \'1px solid #eee\',\n
boxShadow : "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
this.$message.css({fontSize: \'13px\', textAlign: \'left\'});\n
break;\n
case \'bottom\':\n
this.$bar.css({\n
borderRadius: \'5px 5px 0px 0px\',\n
borderTop : \'2px solid #eee\',\n
borderLeft : \'2px solid #eee\',\n
borderRight : \'2px solid #eee\',\n
boxShadow : "0 -2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
break;\n
default:\n
this.$bar.css({\n
border : \'2px solid #eee\',\n
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
break;\n
}\n
\n
switch(this.options.type) {\n
case \'alert\':\n
case \'notification\':\n
this.$bar.css({backgroundColor: \'#FFF\', borderColor: \'#CCC\', color: \'#444\'});\n
break;\n
case \'warning\':\n
this.$bar.css({backgroundColor: \'#FFEAA8\', borderColor: \'#FFC237\', color: \'#826200\'});\n
this.$buttons.css({borderTop: \'1px solid #FFC237\'});\n
break;\n
case \'error\':\n
this.$bar.css({backgroundColor: \'red\', borderColor: \'darkred\', color: \'#FFF\'});\n
this.$message.css({fontWeight: \'bold\'});\n
this.$buttons.css({borderTop: \'1px solid darkred\'});\n
break;\n
case \'information\':\n
this.$bar.css({backgroundColor: \'#57B7E2\', borderColor: \'#0B90C4\', color: \'#FFF\'});\n
this.$buttons.css({borderTop: \'1px solid #0B90C4\'});\n
break;\n
case \'success\':\n
this.$bar.css({backgroundColor: \'lightgreen\', borderColor: \'#50C24E\', color: \'darkgreen\'});\n
this.$buttons.css({borderTop: \'1px solid #50C24E\'});\n
break;\n
default:\n
this.$bar.css({backgroundColor: \'#FFF\', borderColor: \'#CCC\', color: \'#444\'});\n
break;\n
}\n
},\n
callback: {\n
onShow : function() {\n
$.noty.themes.defaultTheme.helpers.borderFix.apply(this);\n
},\n
onClose: function() {\n
$.noty.themes.defaultTheme.helpers.borderFix.apply(this);\n
}\n
}\n
};\n
\n
$.noty.themes.relax = {\n
name : \'relax\',\n
helpers : {},\n
modal : {\n
css: {\n
position : \'fixed\',\n
width : \'100%\',\n
height : \'100%\',\n
backgroundColor: \'#000\',\n
zIndex : 10000,\n
opacity : 0.6,\n
display : \'none\',\n
left : 0,\n
top : 0\n
}\n
},\n
style : function() {\n
\n
this.$bar.css({\n
overflow : \'hidden\',\n
margin : \'4px 0\',\n
borderRadius: \'2px\'\n
});\n
\n
this.$message.css({\n
fontSize : \'14px\',\n
lineHeight: \'16px\',\n
textAlign : \'center\',\n
padding : \'10px\',\n
width : \'auto\',\n
position : \'relative\'\n
});\n
\n
this.$closeButton.css({\n
position : \'absolute\',\n
top : 4, right: 4,\n
width : 10, height: 10,\n
background: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAxUlEQVR4AR3MPUoDURSA0e++uSkkOxC3IAOWNtaCIDaChfgXBMEZbQRByxCwk+BasgQRZLSYoLgDQbARxry8nyumPcVRKDfd0Aa8AsgDv1zp6pYd5jWOwhvebRTbzNNEw5BSsIpsj/kurQBnmk7sIFcCF5yyZPDRG6trQhujXYosaFoc+2f1MJ89uc76IND6F9BvlXUdpb6xwD2+4q3me3bysiHvtLYrUJto7PD/ve7LNHxSg/woN2kSz4txasBdhyiz3ugPGetTjm3XRokAAAAASUVORK5CYII=)",\n
display : \'none\',\n
cursor : \'pointer\'\n
});\n
\n
this.$buttons.css({\n
padding : 5,\n
textAlign : \'right\',\n
borderTop : \'1px solid #ccc\',\n
backgroundColor: \'#fff\'\n
});\n
\n
this.$buttons.find(\'button\').css({\n
marginLeft: 5\n
});\n
\n
this.$buttons.find(\'button:first\').css({\n
marginLeft: 0\n
});\n
\n
this.$bar.on({\n
mouseenter: function() {\n
$(this).find(\'.noty_close\').stop().fadeTo(\'normal\', 1);\n
},\n
mouseleave: function() {\n
$(this).find(\'.noty_close\').stop().fadeTo(\'normal\', 0);\n
}\n
});\n
\n
switch(this.options.layout.name) {\n
case \'top\':\n
this.$bar.css({\n
borderBottom: \'2px solid #eee\',\n
borderLeft : \'2px solid #eee\',\n
borderRight : \'2px solid #eee\',\n
borderTop : \'2px solid #eee\',\n
boxShadow : "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
break;\n
case \'topCenter\':\n
case \'center\':\n
case \'bottomCenter\':\n
case \'inline\':\n
this.$bar.css({\n
border : \'1px solid #eee\',\n
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
this.$message.css({fontSize: \'13px\', textAlign: \'center\'});\n
break;\n
case \'topLeft\':\n
case \'topRight\':\n
case \'bottomLeft\':\n
case \'bottomRight\':\n
case \'centerLeft\':\n
case \'centerRight\':\n
this.$bar.css({\n
border : \'1px solid #eee\',\n
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
this.$message.css({fontSize: \'13px\', textAlign: \'left\'});\n
break;\n
case \'bottom\':\n
this.$bar.css({\n
borderTop : \'2px solid #eee\',\n
borderLeft : \'2px solid #eee\',\n
borderRight : \'2px solid #eee\',\n
borderBottom: \'2px solid #eee\',\n
boxShadow : "0 -2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
break;\n
default:\n
this.$bar.css({\n
border : \'2px solid #eee\',\n
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"\n
});\n
break;\n
}\n
\n
switch(this.options.type) {\n
case \'alert\':\n
case \'notification\':\n
this.$bar.css({backgroundColor: \'#FFF\', borderColor: \'#dedede\', color: \'#444\'});\n
break;\n
case \'warning\':\n
this.$bar.css({backgroundColor: \'#FFEAA8\', borderColor: \'#FFC237\', color: \'#826200\'});\n
this.$buttons.css({borderTop: \'1px solid #FFC237\'});\n
break;\n
case \'error\':\n
this.$bar.css({backgroundColor: \'#FF8181\', borderColor: \'#e25353\', color: \'#FFF\'});\n
this.$message.css({fontWeight: \'bold\'});\n
this.$buttons.css({borderTop: \'1px solid darkred\'});\n
break;\n
case \'information\':\n
this.$bar.css({backgroundColor: \'#78C5E7\', borderColor: \'#3badd6\', color: \'#FFF\'});\n
this.$buttons.css({borderTop: \'1px solid #0B90C4\'});\n
break;\n
case \'success\':\n
this.$bar.css({backgroundColor: \'#BCF5BC\', borderColor: \'#7cdd77\', color: \'darkgreen\'});\n
this.$buttons.css({borderTop: \'1px solid #50C24E\'});\n
break;\n
default:\n
this.$bar.css({backgroundColor: \'#FFF\', borderColor: \'#CCC\', color: \'#444\'});\n
break;\n
}\n
},\n
callback: {\n
onShow : function() {\n
\n
},\n
onClose: function() {\n
\n
}\n
}\n
};\n
\n
\n
return window.noty;\n
\n
});
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>46571</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
erp5_jquery
erp5_pivot_table
erp5_code_mirror
\ No newline at end of file
"Quick and dirty" web interface to run queries on a ZMySQLDA Connection.
Control + Enter to run query and Control + Space to complete.
\ No newline at end of file
erp5_sql_browser
\ No newline at end of file
erp5_sql_browser
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment