172 changed files with 126943 additions and 0 deletions
@ -0,0 +1,175 @@ |
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
|||
"http://www.w3.org/TR/html4/loose.dtd"> |
|||
<html> |
|||
<head> |
|||
<title>完整demo</title> |
|||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> |
|||
<script type="text/javascript" charset="utf-8" src="ueditor.config.js"></script> |
|||
<script type="text/javascript" charset="utf-8" src="ueditor.all.min.js"> </script> |
|||
<!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败--> |
|||
<!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文--> |
|||
<script type="text/javascript" charset="utf-8" src="lang/zh-cn/zh-cn.js"></script> |
|||
|
|||
<style type="text/css"> |
|||
div{ |
|||
width:100%; |
|||
} |
|||
</style> |
|||
</head> |
|||
<body> |
|||
<div> |
|||
<h1>完整demo</h1> |
|||
<script id="editor" type="text/plain" style="width:1024px;height:500px;"></script> |
|||
</div> |
|||
<div id="btns"> |
|||
<div> |
|||
<button onclick="getAllHtml()">获得整个html的内容</button> |
|||
<button onclick="getContent()">获得内容</button> |
|||
<button onclick="setContent()">写入内容</button> |
|||
<button onclick="setContent(true)">追加内容</button> |
|||
<button onclick="getContentTxt()">获得纯文本</button> |
|||
<button onclick="getPlainTxt()">获得带格式的纯文本</button> |
|||
<button onclick="hasContent()">判断是否有内容</button> |
|||
<button onclick="setFocus()">使编辑器获得焦点</button> |
|||
<button onmousedown="isFocus(event)">编辑器是否获得焦点</button> |
|||
<button onmousedown="setblur(event)" >编辑器失去焦点</button> |
|||
|
|||
</div> |
|||
<div> |
|||
<button onclick="getText()">获得当前选中的文本</button> |
|||
<button onclick="insertHtml()">插入给定的内容</button> |
|||
<button id="enable" onclick="setEnabled()">可以编辑</button> |
|||
<button onclick="setDisabled()">不可编辑</button> |
|||
<button onclick=" UE.getEditor('editor').setHide()">隐藏编辑器</button> |
|||
<button onclick=" UE.getEditor('editor').setShow()">显示编辑器</button> |
|||
<button onclick=" UE.getEditor('editor').setHeight(300)">设置高度为300默认关闭了自动长高</button> |
|||
</div> |
|||
|
|||
<div> |
|||
<button onclick="getLocalData()" >获取草稿箱内容</button> |
|||
<button onclick="clearLocalData()" >清空草稿箱</button> |
|||
</div> |
|||
|
|||
</div> |
|||
<div> |
|||
<button onclick="createEditor()"> |
|||
创建编辑器</button> |
|||
<button onclick="deleteEditor()"> |
|||
删除编辑器</button> |
|||
</div> |
|||
|
|||
<script type="text/javascript"> |
|||
|
|||
//实例化编辑器 |
|||
//建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例 |
|||
var ue = UE.getEditor('editor'); |
|||
|
|||
|
|||
function isFocus(e){ |
|||
alert(UE.getEditor('editor').isFocus()); |
|||
UE.dom.domUtils.preventDefault(e) |
|||
} |
|||
function setblur(e){ |
|||
UE.getEditor('editor').blur(); |
|||
UE.dom.domUtils.preventDefault(e) |
|||
} |
|||
function insertHtml() { |
|||
var value = prompt('插入html代码', ''); |
|||
UE.getEditor('editor').execCommand('insertHtml', value) |
|||
} |
|||
function createEditor() { |
|||
enableBtn(); |
|||
UE.getEditor('editor'); |
|||
} |
|||
function getAllHtml() { |
|||
alert(UE.getEditor('editor').getAllHtml()) |
|||
} |
|||
function getContent() { |
|||
var arr = []; |
|||
arr.push("使用editor.getContent()方法可以获得编辑器的内容"); |
|||
arr.push("内容为:"); |
|||
arr.push(UE.getEditor('editor').getContent()); |
|||
alert(arr.join("\n")); |
|||
} |
|||
function getPlainTxt() { |
|||
var arr = []; |
|||
arr.push("使用editor.getPlainTxt()方法可以获得编辑器的带格式的纯文本内容"); |
|||
arr.push("内容为:"); |
|||
arr.push(UE.getEditor('editor').getPlainTxt()); |
|||
alert(arr.join('\n')) |
|||
} |
|||
function setContent(isAppendTo) { |
|||
var arr = []; |
|||
arr.push("使用editor.setContent('欢迎使用ueditor')方法可以设置编辑器的内容"); |
|||
UE.getEditor('editor').setContent('欢迎使用ueditor', isAppendTo); |
|||
alert(arr.join("\n")); |
|||
} |
|||
function setDisabled() { |
|||
UE.getEditor('editor').setDisabled('fullscreen'); |
|||
disableBtn("enable"); |
|||
} |
|||
|
|||
function setEnabled() { |
|||
UE.getEditor('editor').setEnabled(); |
|||
enableBtn(); |
|||
} |
|||
|
|||
function getText() { |
|||
//当你点击按钮时编辑区域已经失去了焦点,如果直接用getText将不会得到内容,所以要在选回来,然后取得内容 |
|||
var range = UE.getEditor('editor').selection.getRange(); |
|||
range.select(); |
|||
var txt = UE.getEditor('editor').selection.getText(); |
|||
alert(txt) |
|||
} |
|||
|
|||
function getContentTxt() { |
|||
var arr = []; |
|||
arr.push("使用editor.getContentTxt()方法可以获得编辑器的纯文本内容"); |
|||
arr.push("编辑器的纯文本内容为:"); |
|||
arr.push(UE.getEditor('editor').getContentTxt()); |
|||
alert(arr.join("\n")); |
|||
} |
|||
function hasContent() { |
|||
var arr = []; |
|||
arr.push("使用editor.hasContents()方法判断编辑器里是否有内容"); |
|||
arr.push("判断结果为:"); |
|||
arr.push(UE.getEditor('editor').hasContents()); |
|||
alert(arr.join("\n")); |
|||
} |
|||
function setFocus() { |
|||
UE.getEditor('editor').focus(); |
|||
} |
|||
function deleteEditor() { |
|||
disableBtn(); |
|||
UE.getEditor('editor').destroy(); |
|||
} |
|||
function disableBtn(str) { |
|||
var div = document.getElementById('btns'); |
|||
var btns = UE.dom.domUtils.getElementsByTagName(div, "button"); |
|||
for (var i = 0, btn; btn = btns[i++];) { |
|||
if (btn.id == str) { |
|||
UE.dom.domUtils.removeAttributes(btn, ["disabled"]); |
|||
} else { |
|||
btn.setAttribute("disabled", "true"); |
|||
} |
|||
} |
|||
} |
|||
function enableBtn() { |
|||
var div = document.getElementById('btns'); |
|||
var btns = UE.dom.domUtils.getElementsByTagName(div, "button"); |
|||
for (var i = 0, btn; btn = btns[i++];) { |
|||
UE.dom.domUtils.removeAttributes(btn, ["disabled"]); |
|||
} |
|||
} |
|||
|
|||
function getLocalData () { |
|||
alert(UE.getEditor('editor').execCommand( "getlocaldata" )); |
|||
} |
|||
|
|||
function clearLocalData () { |
|||
UE.getEditor('editor').execCommand( "clearlocaldata" ); |
|||
alert("已清空草稿箱") |
|||
} |
|||
</script> |
|||
</body> |
|||
</html> |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,104 @@ |
|||
.CodeMirror { |
|||
line-height: 1em; |
|||
font-family: monospace; |
|||
} |
|||
|
|||
.CodeMirror-scroll { |
|||
overflow: auto; |
|||
height: 300px; |
|||
/* This is needed to prevent an IE[67] bug where the scrolled content |
|||
is visible outside of the scrolling box. */ |
|||
position: relative; |
|||
} |
|||
|
|||
.CodeMirror-gutter { |
|||
position: absolute; left: 0; top: 0; |
|||
z-index: 10; |
|||
background-color: #f7f7f7; |
|||
border-right: 1px solid #eee; |
|||
min-width: 2em; |
|||
height: 100%; |
|||
} |
|||
.CodeMirror-gutter-text { |
|||
color: #aaa; |
|||
text-align: right; |
|||
padding: .4em .2em .4em .4em; |
|||
white-space: pre !important; |
|||
} |
|||
.CodeMirror-lines { |
|||
padding: .4em; |
|||
} |
|||
|
|||
.CodeMirror pre { |
|||
-moz-border-radius: 0; |
|||
-webkit-border-radius: 0; |
|||
-o-border-radius: 0; |
|||
border-radius: 0; |
|||
border-width: 0; margin: 0; padding: 0; background: transparent; |
|||
font-family: inherit; |
|||
font-size: inherit; |
|||
padding: 0; margin: 0; |
|||
white-space: pre; |
|||
word-wrap: normal; |
|||
} |
|||
|
|||
.CodeMirror-wrap pre { |
|||
word-wrap: break-word; |
|||
white-space: pre-wrap; |
|||
} |
|||
.CodeMirror-wrap .CodeMirror-scroll { |
|||
overflow-x: hidden; |
|||
} |
|||
|
|||
.CodeMirror textarea { |
|||
outline: none !important; |
|||
} |
|||
|
|||
.CodeMirror pre.CodeMirror-cursor { |
|||
z-index: 10; |
|||
position: absolute; |
|||
visibility: hidden; |
|||
border-left: 1px solid black; |
|||
} |
|||
.CodeMirror-focused pre.CodeMirror-cursor { |
|||
visibility: visible; |
|||
} |
|||
|
|||
span.CodeMirror-selected { background: #d9d9d9; } |
|||
.CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; } |
|||
|
|||
.CodeMirror-searching {background: #ffa;} |
|||
|
|||
/* Default theme */ |
|||
|
|||
.cm-s-default span.cm-keyword {color: #708;} |
|||
.cm-s-default span.cm-atom {color: #219;} |
|||
.cm-s-default span.cm-number {color: #164;} |
|||
.cm-s-default span.cm-def {color: #00f;} |
|||
.cm-s-default span.cm-variable {color: black;} |
|||
.cm-s-default span.cm-variable-2 {color: #05a;} |
|||
.cm-s-default span.cm-variable-3 {color: #085;} |
|||
.cm-s-default span.cm-property {color: black;} |
|||
.cm-s-default span.cm-operator {color: black;} |
|||
.cm-s-default span.cm-comment {color: #a50;} |
|||
.cm-s-default span.cm-string {color: #a11;} |
|||
.cm-s-default span.cm-string-2 {color: #f50;} |
|||
.cm-s-default span.cm-meta {color: #555;} |
|||
.cm-s-default span.cm-error {color: #f00;} |
|||
.cm-s-default span.cm-qualifier {color: #555;} |
|||
.cm-s-default span.cm-builtin {color: #30a;} |
|||
.cm-s-default span.cm-bracket {color: #cc7;} |
|||
.cm-s-default span.cm-tag {color: #170;} |
|||
.cm-s-default span.cm-attribute {color: #00c;} |
|||
.cm-s-default span.cm-header {color: #a0a;} |
|||
.cm-s-default span.cm-quote {color: #090;} |
|||
.cm-s-default span.cm-hr {color: #999;} |
|||
.cm-s-default span.cm-link {color: #00c;} |
|||
|
|||
span.cm-header, span.cm-strong {font-weight: bold;} |
|||
span.cm-em {font-style: italic;} |
|||
span.cm-emstrong {font-style: italic; font-weight: bold;} |
|||
span.cm-link {text-decoration: underline;} |
|||
|
|||
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} |
|||
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} |
|||
File diff suppressed because it is too large
@ -0,0 +1,13 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
MooTools adapter |
|||
|
|||
(c) 2010-2013 Torstein Hønsi |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f==="1.2"||f==="1.1",j=i||f==="1.3",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr("d",a.step(f[0],f[1],d,this.toD));else return e.apply(this, |
|||
arguments)}},adapterRun:function(a,b){if(b==="width"||b==="height")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName("head")[0],d=h.createElement("script");d.type="text/javascript";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a), |
|||
g({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent("complete",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):g(a,new Events))},addEvent:function(a,b,c){typeof b==="string"&&(b=== |
|||
"unload"&&(b="beforeunload"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!=="string"&&a.addEvent&&(b?(b==="unload"&&(b="beforeunload"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX= |
|||
a.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})(); |
|||
@ -0,0 +1,313 @@ |
|||
/** |
|||
* @license Highcharts JS v3.0.6 (2013-10-04) |
|||
* MooTools adapter |
|||
* |
|||
* (c) 2010-2013 Torstein Hønsi |
|||
* |
|||
* License: www.highcharts.com/license |
|||
*/ |
|||
|
|||
// JSLint options:
|
|||
/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */ |
|||
|
|||
(function () { |
|||
|
|||
var win = window, |
|||
doc = document, |
|||
mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number
|
|||
legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.
|
|||
legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.
|
|||
$extend = win.$extend || function () { |
|||
return Object.append.apply(Object, arguments); |
|||
}; |
|||
|
|||
win.HighchartsAdapter = { |
|||
/** |
|||
* Initialize the adapter. This is run once as Highcharts is first run. |
|||
* @param {Object} pathAnim The helper object to do animations across adapters. |
|||
*/ |
|||
init: function (pathAnim) { |
|||
var fxProto = Fx.prototype, |
|||
fxStart = fxProto.start, |
|||
morphProto = Fx.Morph.prototype, |
|||
morphCompute = morphProto.compute; |
|||
|
|||
// override Fx.start to allow animation of SVG element wrappers
|
|||
/*jslint unparam: true*//* allow unused parameters in fx functions */ |
|||
fxProto.start = function (from, to) { |
|||
var fx = this, |
|||
elem = fx.element; |
|||
|
|||
// special for animating paths
|
|||
if (from.d) { |
|||
//this.fromD = this.element.d.split(' ');
|
|||
fx.paths = pathAnim.init( |
|||
elem, |
|||
elem.d, |
|||
fx.toD |
|||
); |
|||
} |
|||
fxStart.apply(fx, arguments); |
|||
|
|||
return this; // chainable
|
|||
}; |
|||
|
|||
// override Fx.step to allow animation of SVG element wrappers
|
|||
morphProto.compute = function (from, to, delta) { |
|||
var fx = this, |
|||
paths = fx.paths; |
|||
|
|||
if (paths) { |
|||
fx.element.attr( |
|||
'd', |
|||
pathAnim.step(paths[0], paths[1], delta, fx.toD) |
|||
); |
|||
} else { |
|||
return morphCompute.apply(fx, arguments); |
|||
} |
|||
}; |
|||
/*jslint unparam: false*/ |
|||
}, |
|||
|
|||
/** |
|||
* Run a general method on the framework, following jQuery syntax |
|||
* @param {Object} el The HTML element |
|||
* @param {String} method Which method to run on the wrapped element |
|||
*/ |
|||
adapterRun: function (el, method) { |
|||
|
|||
// This currently works for getting inner width and height. If adding
|
|||
// more methods later, we need a conditional implementation for each.
|
|||
if (method === 'width' || method === 'height') { |
|||
return parseInt($(el).getStyle(method), 10); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Downloads a script and executes a callback when done. |
|||
* @param {String} scriptLocation |
|||
* @param {Function} callback |
|||
*/ |
|||
getScript: function (scriptLocation, callback) { |
|||
// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
|
|||
var head = doc.getElementsByTagName('head')[0]; |
|||
var script = doc.createElement('script'); |
|||
|
|||
script.type = 'text/javascript'; |
|||
script.src = scriptLocation; |
|||
script.onload = callback; |
|||
|
|||
head.appendChild(script); |
|||
}, |
|||
|
|||
/** |
|||
* Animate a HTML element or SVG element wrapper |
|||
* @param {Object} el |
|||
* @param {Object} params |
|||
* @param {Object} options jQuery-like animation options: duration, easing, callback |
|||
*/ |
|||
animate: function (el, params, options) { |
|||
var isSVGElement = el.attr, |
|||
effect, |
|||
complete = options && options.complete; |
|||
|
|||
if (isSVGElement && !el.setStyle) { |
|||
// add setStyle and getStyle methods for internal use in Moo
|
|||
el.getStyle = el.attr; |
|||
el.setStyle = function () { // property value is given as array in Moo - break it down
|
|||
var args = arguments; |
|||
this.attr.call(this, args[0], args[1][0]); |
|||
}; |
|||
// dirty hack to trick Moo into handling el as an element wrapper
|
|||
el.$family = function () { return true; }; |
|||
} |
|||
|
|||
// stop running animations
|
|||
win.HighchartsAdapter.stop(el); |
|||
|
|||
// define and run the effect
|
|||
effect = new Fx.Morph( |
|||
isSVGElement ? el : $(el), |
|||
$extend({ |
|||
transition: Fx.Transitions.Quad.easeInOut |
|||
}, options) |
|||
); |
|||
|
|||
// Make sure that the element reference is set when animating svg elements
|
|||
if (isSVGElement) { |
|||
effect.element = el; |
|||
} |
|||
|
|||
// special treatment for paths
|
|||
if (params.d) { |
|||
effect.toD = params.d; |
|||
} |
|||
|
|||
// jQuery-like events
|
|||
if (complete) { |
|||
effect.addEvent('complete', complete); |
|||
} |
|||
|
|||
// run
|
|||
effect.start(params); |
|||
|
|||
// record for use in stop method
|
|||
el.fx = effect; |
|||
}, |
|||
|
|||
/** |
|||
* MooTool's each function |
|||
* |
|||
*/ |
|||
each: function (arr, fn) { |
|||
return legacy ? |
|||
$each(arr, fn) : |
|||
Array.each(arr, fn); |
|||
}, |
|||
|
|||
/** |
|||
* Map an array |
|||
* @param {Array} arr |
|||
* @param {Function} fn |
|||
*/ |
|||
map: function (arr, fn) { |
|||
return arr.map(fn); |
|||
}, |
|||
|
|||
/** |
|||
* Grep or filter an array |
|||
* @param {Array} arr |
|||
* @param {Function} fn |
|||
*/ |
|||
grep: function (arr, fn) { |
|||
return arr.filter(fn); |
|||
}, |
|||
|
|||
/** |
|||
* Return the index of an item in an array, or -1 if not matched |
|||
*/ |
|||
inArray: function (item, arr, from) { |
|||
return arr ? arr.indexOf(item, from) : -1; |
|||
}, |
|||
|
|||
/** |
|||
* Get the offset of an element relative to the top left corner of the web page |
|||
*/ |
|||
offset: function (el) { |
|||
var offsets = el.getPosition(); // #1496
|
|||
return { |
|||
left: offsets.x, |
|||
top: offsets.y |
|||
}; |
|||
}, |
|||
|
|||
/** |
|||
* Extends an object with Events, if its not done |
|||
*/ |
|||
extendWithEvents: function (el) { |
|||
// if the addEvent method is not defined, el is a custom Highcharts object
|
|||
// like series or point
|
|||
if (!el.addEvent) { |
|||
if (el.nodeName) { |
|||
el = $(el); // a dynamically generated node
|
|||
} else { |
|||
$extend(el, new Events()); // a custom object
|
|||
} |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Add an event listener |
|||
* @param {Object} el HTML element or custom object |
|||
* @param {String} type Event type |
|||
* @param {Function} fn Event handler |
|||
*/ |
|||
addEvent: function (el, type, fn) { |
|||
if (typeof type === 'string') { // chart broke due to el being string, type function
|
|||
|
|||
if (type === 'unload') { // Moo self destructs before custom unload events
|
|||
type = 'beforeunload'; |
|||
} |
|||
|
|||
win.HighchartsAdapter.extendWithEvents(el); |
|||
|
|||
el.addEvent(type, fn); |
|||
} |
|||
}, |
|||
|
|||
removeEvent: function (el, type, fn) { |
|||
if (typeof el === 'string') { |
|||
// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.
|
|||
return; |
|||
} |
|||
|
|||
if (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove
|
|||
if (type) { |
|||
if (type === 'unload') { // Moo self destructs before custom unload events
|
|||
type = 'beforeunload'; |
|||
} |
|||
|
|||
if (fn) { |
|||
el.removeEvent(type, fn); |
|||
} else if (el.removeEvents) { // #958
|
|||
el.removeEvents(type); |
|||
} |
|||
} else { |
|||
el.removeEvents(); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
fireEvent: function (el, event, eventArguments, defaultFunction) { |
|||
var eventArgs = { |
|||
type: event, |
|||
target: el |
|||
}; |
|||
// create an event object that keeps all functions
|
|||
event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs); |
|||
event = $extend(event, eventArguments); |
|||
|
|||
// When running an event on the Chart.prototype, MooTools nests the target in event.event
|
|||
if (!event.target && event.event) { |
|||
event.target = event.event.target; |
|||
} |
|||
|
|||
// override the preventDefault function to be able to use
|
|||
// this for custom events
|
|||
event.preventDefault = function () { |
|||
defaultFunction = null; |
|||
}; |
|||
// if fireEvent is not available on the object, there hasn't been added
|
|||
// any events to it above
|
|||
if (el.fireEvent) { |
|||
el.fireEvent(event.type, event); |
|||
} |
|||
|
|||
// fire the default if it is passed and it is not prevented above
|
|||
if (defaultFunction) { |
|||
defaultFunction(event); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346. |
|||
*/ |
|||
washMouseEvent: function (e) { |
|||
if (e.page) { |
|||
e.pageX = e.page.x; |
|||
e.pageY = e.page.y; |
|||
} |
|||
return e; |
|||
}, |
|||
|
|||
/** |
|||
* Stop running animations on the object |
|||
*/ |
|||
stop: function (el) { |
|||
if (el.fx) { |
|||
el.fx.cancel(); |
|||
} |
|||
} |
|||
}; |
|||
|
|||
}()); |
|||
@ -0,0 +1,15 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
Prototype adapter |
|||
|
|||
@author Michael Nelson, Torstein Hønsi. |
|||
|
|||
Feel free to use and modify this script. |
|||
Highcharts license: www.highcharts.com/license. |
|||
*/ |
|||
var HighchartsAdapter=function(){var f=typeof Effect!=="undefined";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c==="d")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]= |
|||
this},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$("head")[0];c&&c.appendChild((new Element("script",{type:"text/javascript",src:a})).observe("load", |
|||
b))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:"h:"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a), |
|||
d,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b, |
|||
c));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0, |
|||
_highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}(); |
|||
@ -0,0 +1,316 @@ |
|||
/** |
|||
* @license Highcharts JS v3.0.6 (2013-10-04) |
|||
* Prototype adapter |
|||
* |
|||
* @author Michael Nelson, Torstein Hønsi. |
|||
* |
|||
* Feel free to use and modify this script. |
|||
* Highcharts license: www.highcharts.com/license. |
|||
*/ |
|||
|
|||
// JSLint options:
|
|||
/*global Effect, Class, Event, Element, $, $$, $A */ |
|||
|
|||
// Adapter interface between prototype and the Highcharts charting library
|
|||
var HighchartsAdapter = (function () { |
|||
|
|||
var hasEffect = typeof Effect !== 'undefined'; |
|||
|
|||
return { |
|||
|
|||
/** |
|||
* Initialize the adapter. This is run once as Highcharts is first run. |
|||
* @param {Object} pathAnim The helper object to do animations across adapters. |
|||
*/ |
|||
init: function (pathAnim) { |
|||
if (hasEffect) { |
|||
/** |
|||
* Animation for Highcharts SVG element wrappers only |
|||
* @param {Object} element |
|||
* @param {Object} attribute |
|||
* @param {Object} to |
|||
* @param {Object} options |
|||
*/ |
|||
Effect.HighchartsTransition = Class.create(Effect.Base, { |
|||
initialize: function (element, attr, to, options) { |
|||
var from, |
|||
opts; |
|||
|
|||
this.element = element; |
|||
this.key = attr; |
|||
from = element.attr ? element.attr(attr) : $(element).getStyle(attr); |
|||
|
|||
// special treatment for paths
|
|||
if (attr === 'd') { |
|||
this.paths = pathAnim.init( |
|||
element, |
|||
element.d, |
|||
to |
|||
); |
|||
this.toD = to; |
|||
|
|||
|
|||
// fake values in order to read relative position as a float in update
|
|||
from = 0; |
|||
to = 1; |
|||
} |
|||
|
|||
opts = Object.extend((options || {}), { |
|||
from: from, |
|||
to: to, |
|||
attribute: attr |
|||
}); |
|||
this.start(opts); |
|||
}, |
|||
setup: function () { |
|||
HighchartsAdapter._extend(this.element); |
|||
// If this is the first animation on this object, create the _highcharts_animation helper that
|
|||
// contain pointers to the animation objects.
|
|||
if (!this.element._highchart_animation) { |
|||
this.element._highchart_animation = {}; |
|||
} |
|||
|
|||
// Store a reference to this animation instance.
|
|||
this.element._highchart_animation[this.key] = this; |
|||
}, |
|||
update: function (position) { |
|||
var paths = this.paths, |
|||
element = this.element, |
|||
obj; |
|||
|
|||
if (paths) { |
|||
position = pathAnim.step(paths[0], paths[1], position, this.toD); |
|||
} |
|||
|
|||
if (element.attr) { // SVGElement
|
|||
|
|||
if (element.element) { // If not, it has been destroyed (#1405)
|
|||
element.attr(this.options.attribute, position); |
|||
} |
|||
|
|||
} else { // HTML, #409
|
|||
obj = {}; |
|||
obj[this.options.attribute] = position; |
|||
$(element).setStyle(obj); |
|||
} |
|||
|
|||
}, |
|||
finish: function () { |
|||
// Delete the property that holds this animation now that it is finished.
|
|||
// Both canceled animations and complete ones gets a 'finish' call.
|
|||
if (this.element && this.element._highchart_animation) { // #1405
|
|||
delete this.element._highchart_animation[this.key]; |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Run a general method on the framework, following jQuery syntax |
|||
* @param {Object} el The HTML element |
|||
* @param {String} method Which method to run on the wrapped element |
|||
*/ |
|||
adapterRun: function (el, method) { |
|||
|
|||
// This currently works for getting inner width and height. If adding
|
|||
// more methods later, we need a conditional implementation for each.
|
|||
return parseInt($(el).getStyle(method), 10); |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* Downloads a script and executes a callback when done. |
|||
* @param {String} scriptLocation |
|||
* @param {Function} callback |
|||
*/ |
|||
getScript: function (scriptLocation, callback) { |
|||
var head = $$('head')[0]; // Returns an array, so pick the first element.
|
|||
if (head) { |
|||
// Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback
|
|||
head.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback)); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of |
|||
* events that are not recognized as native. |
|||
*/ |
|||
addNS: function (eventName) { |
|||
var HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/, |
|||
MouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/; |
|||
return (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ? |
|||
eventName : |
|||
'h:' + eventName; |
|||
}, |
|||
|
|||
// el needs an event to be attached. el is not necessarily a dom element
|
|||
addEvent: function (el, event, fn) { |
|||
if (el.addEventListener || el.attachEvent) { |
|||
Event.observe($(el), HighchartsAdapter.addNS(event), fn); |
|||
|
|||
} else { |
|||
HighchartsAdapter._extend(el); |
|||
el._highcharts_observe(event, fn); |
|||
} |
|||
}, |
|||
|
|||
// motion makes things pretty. use it if effects is loaded, if not... still get to the end result.
|
|||
animate: function (el, params, options) { |
|||
var key, |
|||
fx; |
|||
|
|||
// default options
|
|||
options = options || {}; |
|||
options.delay = 0; |
|||
options.duration = (options.duration || 500) / 1000; |
|||
options.afterFinish = options.complete; |
|||
|
|||
// animate wrappers and DOM elements
|
|||
if (hasEffect) { |
|||
for (key in params) { |
|||
// The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object
|
|||
// on the element itself so its not really lost.
|
|||
fx = new Effect.HighchartsTransition($(el), key, params[key], options); |
|||
} |
|||
} else { |
|||
if (el.attr) { // #409 without effects
|
|||
for (key in params) { |
|||
el.attr(key, params[key]); |
|||
} |
|||
} |
|||
if (options.complete) { |
|||
options.complete(); |
|||
} |
|||
} |
|||
|
|||
if (!el.attr) { // HTML element, #409
|
|||
$(el).setStyle(params); |
|||
} |
|||
}, |
|||
|
|||
// this only occurs in higcharts 2.0+
|
|||
stop: function (el) { |
|||
var key; |
|||
if (el._highcharts_extended && el._highchart_animation) { |
|||
for (key in el._highchart_animation) { |
|||
// Cancel the animation
|
|||
// The 'finish' function in the Effect object will remove the reference
|
|||
el._highchart_animation[key].cancel(); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// um.. each
|
|||
each: function (arr, fn) { |
|||
$A(arr).each(fn); |
|||
}, |
|||
|
|||
inArray: function (item, arr, from) { |
|||
return arr ? arr.indexOf(item, from) : -1; |
|||
}, |
|||
|
|||
/** |
|||
* Get the cumulative offset relative to the top left of the page. This method, unlike its |
|||
* jQuery and MooTools counterpart, still suffers from issue #208 regarding the position |
|||
* of a chart within a fixed container. |
|||
*/ |
|||
offset: function (el) { |
|||
return $(el).cumulativeOffset(); |
|||
}, |
|||
|
|||
// fire an event based on an event name (event) and an object (el).
|
|||
// again, el may not be a dom element
|
|||
fireEvent: function (el, event, eventArguments, defaultFunction) { |
|||
if (el.fire) { |
|||
el.fire(HighchartsAdapter.addNS(event), eventArguments); |
|||
} else if (el._highcharts_extended) { |
|||
eventArguments = eventArguments || {}; |
|||
el._highcharts_fire(event, eventArguments); |
|||
} |
|||
|
|||
if (eventArguments && eventArguments.defaultPrevented) { |
|||
defaultFunction = null; |
|||
} |
|||
|
|||
if (defaultFunction) { |
|||
defaultFunction(eventArguments); |
|||
} |
|||
}, |
|||
|
|||
removeEvent: function (el, event, handler) { |
|||
if ($(el).stopObserving) { |
|||
if (event) { |
|||
event = HighchartsAdapter.addNS(event); |
|||
} |
|||
$(el).stopObserving(event, handler); |
|||
} if (window === el) { |
|||
Event.stopObserving(el, event, handler); |
|||
} else { |
|||
HighchartsAdapter._extend(el); |
|||
el._highcharts_stop_observing(event, handler); |
|||
} |
|||
}, |
|||
|
|||
washMouseEvent: function (e) { |
|||
return e; |
|||
}, |
|||
|
|||
// um, grep
|
|||
grep: function (arr, fn) { |
|||
return arr.findAll(fn); |
|||
}, |
|||
|
|||
// um, map
|
|||
map: function (arr, fn) { |
|||
return arr.map(fn); |
|||
}, |
|||
|
|||
// extend an object to handle highchart events (highchart objects, not svg elements).
|
|||
// this is a very simple way of handling events but whatever, it works (i think)
|
|||
_extend: function (object) { |
|||
if (!object._highcharts_extended) { |
|||
Object.extend(object, { |
|||
_highchart_events: {}, |
|||
_highchart_animation: null, |
|||
_highcharts_extended: true, |
|||
_highcharts_observe: function (name, fn) { |
|||
this._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten(); |
|||
}, |
|||
_highcharts_stop_observing: function (name, fn) { |
|||
if (name) { |
|||
if (fn) { |
|||
this._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn); |
|||
} else { |
|||
delete this._highchart_events[name]; |
|||
} |
|||
} else { |
|||
this._highchart_events = {}; |
|||
} |
|||
}, |
|||
_highcharts_fire: function (name, args) { |
|||
var target = this; |
|||
(this._highchart_events[name] || []).each(function (fn) { |
|||
// args is never null here
|
|||
if (args.stopped) { |
|||
return; // "throw $break" wasn't working. i think because of the scope of 'this'.
|
|||
} |
|||
|
|||
// Attach a simple preventDefault function to skip default handler if called
|
|||
args.preventDefault = function () { |
|||
args.defaultPrevented = true; |
|||
}; |
|||
args.target = target; |
|||
|
|||
// If the event handler return false, prevent the default handler from executing
|
|||
if (fn.bind(this)(args) === false) { |
|||
args.preventDefault(); |
|||
} |
|||
} |
|||
.bind(this)); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
}; |
|||
}()); |
|||
@ -0,0 +1,17 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
|
|||
Standalone Highcharts Framework |
|||
|
|||
License: MIT License |
|||
*/ |
|||
var HighchartsAdapter=function(){function o(c){function a(a,b,d){a.removeEventListener(b,d,!1)}function d(a,b,d){d=a.HCProxiedMethods[d.toString()];a.detachEvent("on"+b,d)}function b(b,c){var f=b.HCEvents,i,g,k,j;if(b.removeEventListener)i=a;else if(b.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(b,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b, |
|||
a,!1);else if(d.attachEvent){g=function(b){a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent("on"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?a(this,c,h):this.attachEvent&&d(this,c,h)):(b(this,c),this.HCEvents[c]=[])):(b(this),this.HCEvents={})},trigger:function(b,a){var d=this.HCEvents[b]|| |
|||
[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g<c;g++){j=d[g];if(a.stopped)break;a.preventDefault=k;a.target=this;a.type=b;j.call(this,a)===!1&&a.preventDefault()}}});return c}var r,l=document,p=[],m=[],q,n;Math.easeInOutSine=function(c,a,d,b){return-d/2*(Math.cos(Math.PI*c/b)-1)+a};return{init:function(c){if(!l.defaultView)this._getStyle=function(a,d){var b;return a.style[d]?a.style[d]:(d==="opacity"&&(d="filter"),b=a.currentStyle[d.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()})], |
|||
d==="filter"&&(b=b.replace(/alpha\(opacity=([0-9]+)\)/,function(b,a){return a/100})),b===""?1:b)},this.adapterRun=function(a,d){var b={width:"clientWidth",height:"clientHeight"}[d];if(b)return a.style.zoom=1,a[b]-2*parseInt(HighchartsAdapter._getStyle(a,"padding"),10)};if(!Array.prototype.forEach)this.each=function(a,d){for(var b=0,c=a.length;b<c;b++)if(d.call(a[b],a[b],b,a)===!1)return b};if(!Array.prototype.indexOf)this.inArray=function(a,d){var b,c=0;if(d)for(b=d.length;c<b;c++)if(d[c]===a)return c; |
|||
return-1};if(!Array.prototype.filter)this.grep=function(a,d){for(var b=[],c=0,h=a.length;c<h;c++)d(a[c],c)&&b.push(a[c]);return b};n=function(a,c,b){this.options=c;this.elem=a;this.prop=b};n.prototype={update:function(){var a;a=this.paths;var d=this.elem,b=d.element;a&&b?d.attr("d",c.step(a[0],a[1],this.now,this.toD)):d.attr?b&&d.attr(this.prop,this.now):(a={},a[d]=this.now+this.unit,Highcharts.css(d,a));this.options.step&&this.options.step.call(this.elem,this.now,this)},custom:function(a,c,b){var e= |
|||
this,h=function(a){return e.step(a)},f;this.startTime=+new Date;this.start=a;this.end=c;this.unit=b;this.now=this.start;this.pos=this.state=0;h.elem=this.elem;h()&&m.push(h)===1&&(q=setInterval(function(){for(f=0;f<m.length;f++)m[f]()||m.splice(f--,1);m.length||clearInterval(q)},13))},step:function(a){var c=+new Date,b;b=this.options;var e;if(this.elem.stopAnimation)b=!1;else if(a||c>=b.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();a=this.options.curAnim[this.prop]= |
|||
!0;for(e in b.curAnim)b.curAnim[e]!==!0&&(a=!1);a&&b.complete&&b.complete.call(this.elem);b=!1}else e=c-this.startTime,this.state=e/b.duration,this.pos=b.easing(e,0,1,b.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),b=!0;return b}};this.animate=function(a,d,b){var e,h="",f,i,g;a.stopAnimation=!1;if(typeof b!=="object"||b===null)e=arguments,b={duration:e[2],easing:e[3],complete:e[4]};if(typeof b.duration!=="number")b.duration=400;b.easing=Math[b.easing]||Math.easeInOutSine; |
|||
b.curAnim=Highcharts.extend({},d);for(g in d)i=new n(a,b,g),f=null,g==="d"?(i.paths=c.init(a,a.d,d.d),i.toD=d.d,e=0,f=1):a.attr?e=a.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(a,g))||0,g!=="opacity"&&(h="px")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,a){return window.getComputedStyle(c).getPropertyValue(a)},getScript:function(c,a){var d=l.getElementsByTagName("head")[0],b=l.createElement("script");b.type="text/javascript";b.src=c;b.onload=a;d.appendChild(b)},inArray:function(c, |
|||
a){return a.indexOf?a.indexOf(c):p.indexOf.call(a,c)},adapterRun:function(c,a){return parseInt(HighchartsAdapter._getStyle(c,a),10)},grep:function(c,a){return p.filter.call(c,a)},map:function(c,a){for(var d=[],b=0,e=c.length;b<e;b++)d[b]=a.call(c[b],c[b],b,c);return d},offset:function(c){for(var a=0,d=0;c;)a+=c.offsetLeft,d+=c.offsetTop,c=c.offsetParent;return{left:a,top:d}},addEvent:function(c,a,d){o(c).bind(a,d)},removeEvent:function(c,a,d){o(c).unbind(a,d)},fireEvent:function(c,a,d,b){var e;l.createEvent&& |
|||
(c.dispatchEvent||c.fireEvent)?(e=l.createEvent("Events"),e.initEvent(a,!0,!0),e.target=c,Highcharts.extend(e,d),c.dispatchEvent?c.dispatchEvent(e):c.fireEvent(a,e)):c.HCExtended===!0&&(d=d||{},c.trigger(a,d));d&&d.defaultPrevented&&(b=null);b&&b(d)},washMouseEvent:function(c){return c},stop:function(c){c.stopAnimation=!0},each:function(c,a){return Array.prototype.forEach.call(c,a)}}}(); |
|||
@ -0,0 +1,583 @@ |
|||
/** |
|||
* @license Highcharts JS v3.0.6 (2013-10-04) |
|||
* |
|||
* Standalone Highcharts Framework |
|||
* |
|||
* License: MIT License |
|||
*/ |
|||
|
|||
|
|||
/*global Highcharts */ |
|||
var HighchartsAdapter = (function () { |
|||
|
|||
var UNDEFINED, |
|||
doc = document, |
|||
emptyArray = [], |
|||
timers = [], |
|||
timerId, |
|||
Fx; |
|||
|
|||
Math.easeInOutSine = function (t, b, c, d) { |
|||
return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; |
|||
}; |
|||
|
|||
|
|||
|
|||
/** |
|||
* Extend given object with custom events |
|||
*/ |
|||
function augment(obj) { |
|||
function removeOneEvent(el, type, fn) { |
|||
el.removeEventListener(type, fn, false); |
|||
} |
|||
|
|||
function IERemoveOneEvent(el, type, fn) { |
|||
fn = el.HCProxiedMethods[fn.toString()]; |
|||
el.detachEvent('on' + type, fn); |
|||
} |
|||
|
|||
function removeAllEvents(el, type) { |
|||
var events = el.HCEvents, |
|||
remove, |
|||
types, |
|||
len, |
|||
n; |
|||
|
|||
if (el.removeEventListener) { |
|||
remove = removeOneEvent; |
|||
} else if (el.attachEvent) { |
|||
remove = IERemoveOneEvent; |
|||
} else { |
|||
return; // break on non-DOM events
|
|||
} |
|||
|
|||
|
|||
if (type) { |
|||
types = {}; |
|||
types[type] = true; |
|||
} else { |
|||
types = events; |
|||
} |
|||
|
|||
for (n in types) { |
|||
if (events[n]) { |
|||
len = events[n].length; |
|||
while (len--) { |
|||
remove(el, n, events[n][len]); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
if (!obj.HCExtended) { |
|||
Highcharts.extend(obj, { |
|||
HCExtended: true, |
|||
|
|||
HCEvents: {}, |
|||
|
|||
bind: function (name, fn) { |
|||
var el = this, |
|||
events = this.HCEvents, |
|||
wrappedFn; |
|||
|
|||
// handle DOM events in modern browsers
|
|||
if (el.addEventListener) { |
|||
el.addEventListener(name, fn, false); |
|||
|
|||
// handle old IE implementation
|
|||
} else if (el.attachEvent) { |
|||
|
|||
wrappedFn = function (e) { |
|||
fn.call(el, e); |
|||
}; |
|||
|
|||
if (!el.HCProxiedMethods) { |
|||
el.HCProxiedMethods = {}; |
|||
} |
|||
|
|||
// link wrapped fn with original fn, so we can get this in removeEvent
|
|||
el.HCProxiedMethods[fn.toString()] = wrappedFn; |
|||
|
|||
el.attachEvent('on' + name, wrappedFn); |
|||
} |
|||
|
|||
|
|||
if (events[name] === UNDEFINED) { |
|||
events[name] = []; |
|||
} |
|||
|
|||
events[name].push(fn); |
|||
}, |
|||
|
|||
unbind: function (name, fn) { |
|||
var events, |
|||
index; |
|||
|
|||
if (name) { |
|||
events = this.HCEvents[name] || []; |
|||
if (fn) { |
|||
index = HighchartsAdapter.inArray(fn, events); |
|||
if (index > -1) { |
|||
events.splice(index, 1); |
|||
this.HCEvents[name] = events; |
|||
} |
|||
if (this.removeEventListener) { |
|||
removeOneEvent(this, name, fn); |
|||
} else if (this.attachEvent) { |
|||
IERemoveOneEvent(this, name, fn); |
|||
} |
|||
} else { |
|||
removeAllEvents(this, name); |
|||
this.HCEvents[name] = []; |
|||
} |
|||
} else { |
|||
removeAllEvents(this); |
|||
this.HCEvents = {}; |
|||
} |
|||
}, |
|||
|
|||
trigger: function (name, args) { |
|||
var events = this.HCEvents[name] || [], |
|||
target = this, |
|||
len = events.length, |
|||
i, |
|||
preventDefault, |
|||
fn; |
|||
|
|||
// Attach a simple preventDefault function to skip default handler if called
|
|||
preventDefault = function () { |
|||
args.defaultPrevented = true; |
|||
}; |
|||
|
|||
for (i = 0; i < len; i++) { |
|||
fn = events[i]; |
|||
|
|||
// args is never null here
|
|||
if (args.stopped) { |
|||
return; |
|||
} |
|||
|
|||
args.preventDefault = preventDefault; |
|||
args.target = target; |
|||
args.type = name; // #2297
|
|||
|
|||
// If the event handler return false, prevent the default handler from executing
|
|||
if (fn.call(this, args) === false) { |
|||
args.preventDefault(); |
|||
} |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
|
|||
return obj; |
|||
} |
|||
|
|||
|
|||
return { |
|||
/** |
|||
* Initialize the adapter. This is run once as Highcharts is first run. |
|||
*/ |
|||
init: function (pathAnim) { |
|||
|
|||
/** |
|||
* Compatibility section to add support for legacy IE. This can be removed if old IE |
|||
* support is not needed. |
|||
*/ |
|||
if (!doc.defaultView) { |
|||
this._getStyle = function (el, prop) { |
|||
var val; |
|||
if (el.style[prop]) { |
|||
return el.style[prop]; |
|||
} else { |
|||
if (prop === 'opacity') { |
|||
prop = 'filter'; |
|||
} |
|||
/*jslint unparam: true*/ |
|||
val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { return b.toUpperCase(); })]; |
|||
if (prop === 'filter') { |
|||
val = val.replace( |
|||
/alpha\(opacity=([0-9]+)\)/, |
|||
function (a, b) { |
|||
return b / 100; |
|||
} |
|||
); |
|||
} |
|||
/*jslint unparam: false*/ |
|||
return val === '' ? 1 : val; |
|||
} |
|||
}; |
|||
this.adapterRun = function (elem, method) { |
|||
var alias = { width: 'clientWidth', height: 'clientHeight' }[method]; |
|||
|
|||
if (alias) { |
|||
elem.style.zoom = 1; |
|||
return elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10); |
|||
} |
|||
}; |
|||
} |
|||
|
|||
if (!Array.prototype.forEach) { |
|||
this.each = function (arr, fn) { // legacy
|
|||
var i = 0, |
|||
len = arr.length; |
|||
for (; i < len; i++) { |
|||
if (fn.call(arr[i], arr[i], i, arr) === false) { |
|||
return i; |
|||
} |
|||
} |
|||
}; |
|||
} |
|||
|
|||
if (!Array.prototype.indexOf) { |
|||
this.inArray = function (item, arr) { |
|||
var len, |
|||
i = 0; |
|||
|
|||
if (arr) { |
|||
len = arr.length; |
|||
|
|||
for (; i < len; i++) { |
|||
if (arr[i] === item) { |
|||
return i; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return -1; |
|||
}; |
|||
} |
|||
|
|||
if (!Array.prototype.filter) { |
|||
this.grep = function (elements, callback) { |
|||
var ret = [], |
|||
i = 0, |
|||
length = elements.length; |
|||
|
|||
for (; i < length; i++) { |
|||
if (!!callback(elements[i], i)) { |
|||
ret.push(elements[i]); |
|||
} |
|||
} |
|||
|
|||
return ret; |
|||
}; |
|||
} |
|||
|
|||
//--- End compatibility section ---
|
|||
|
|||
|
|||
/** |
|||
* Start of animation specific code |
|||
*/ |
|||
Fx = function (elem, options, prop) { |
|||
this.options = options; |
|||
this.elem = elem; |
|||
this.prop = prop; |
|||
}; |
|||
Fx.prototype = { |
|||
|
|||
update: function () { |
|||
var styles, |
|||
paths = this.paths, |
|||
elem = this.elem, |
|||
elemelem = elem.element; // if destroyed, it is null
|
|||
|
|||
// Animating a path definition on SVGElement
|
|||
if (paths && elemelem) { |
|||
elem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD)); |
|||
|
|||
// Other animations on SVGElement
|
|||
} else if (elem.attr) { |
|||
if (elemelem) { |
|||
elem.attr(this.prop, this.now); |
|||
} |
|||
|
|||
// HTML styles
|
|||
} else { |
|||
styles = {}; |
|||
styles[elem] = this.now + this.unit; |
|||
Highcharts.css(elem, styles); |
|||
} |
|||
|
|||
if (this.options.step) { |
|||
this.options.step.call(this.elem, this.now, this); |
|||
} |
|||
|
|||
}, |
|||
custom: function (from, to, unit) { |
|||
var self = this, |
|||
t = function (gotoEnd) { |
|||
return self.step(gotoEnd); |
|||
}, |
|||
i; |
|||
|
|||
this.startTime = +new Date(); |
|||
this.start = from; |
|||
this.end = to; |
|||
this.unit = unit; |
|||
this.now = this.start; |
|||
this.pos = this.state = 0; |
|||
|
|||
t.elem = this.elem; |
|||
|
|||
if (t() && timers.push(t) === 1) { |
|||
timerId = setInterval(function () { |
|||
|
|||
for (i = 0; i < timers.length; i++) { |
|||
if (!timers[i]()) { |
|||
timers.splice(i--, 1); |
|||
} |
|||
} |
|||
|
|||
if (!timers.length) { |
|||
clearInterval(timerId); |
|||
} |
|||
}, 13); |
|||
} |
|||
}, |
|||
|
|||
step: function (gotoEnd) { |
|||
var t = +new Date(), |
|||
ret, |
|||
done, |
|||
options = this.options, |
|||
i; |
|||
|
|||
if (this.elem.stopAnimation) { |
|||
ret = false; |
|||
|
|||
} else if (gotoEnd || t >= options.duration + this.startTime) { |
|||
this.now = this.end; |
|||
this.pos = this.state = 1; |
|||
this.update(); |
|||
|
|||
this.options.curAnim[this.prop] = true; |
|||
|
|||
done = true; |
|||
for (i in options.curAnim) { |
|||
if (options.curAnim[i] !== true) { |
|||
done = false; |
|||
} |
|||
} |
|||
|
|||
if (done) { |
|||
if (options.complete) { |
|||
options.complete.call(this.elem); |
|||
} |
|||
} |
|||
ret = false; |
|||
|
|||
} else { |
|||
var n = t - this.startTime; |
|||
this.state = n / options.duration; |
|||
this.pos = options.easing(n, 0, 1, options.duration); |
|||
this.now = this.start + ((this.end - this.start) * this.pos); |
|||
this.update(); |
|||
ret = true; |
|||
} |
|||
return ret; |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* The adapter animate method |
|||
*/ |
|||
this.animate = function (el, prop, opt) { |
|||
var start, |
|||
unit = '', |
|||
end, |
|||
fx, |
|||
args, |
|||
name; |
|||
|
|||
el.stopAnimation = false; // ready for new
|
|||
|
|||
if (typeof opt !== 'object' || opt === null) { |
|||
args = arguments; |
|||
opt = { |
|||
duration: args[2], |
|||
easing: args[3], |
|||
complete: args[4] |
|||
}; |
|||
} |
|||
if (typeof opt.duration !== 'number') { |
|||
opt.duration = 400; |
|||
} |
|||
opt.easing = Math[opt.easing] || Math.easeInOutSine; |
|||
opt.curAnim = Highcharts.extend({}, prop); |
|||
|
|||
for (name in prop) { |
|||
fx = new Fx(el, opt, name); |
|||
end = null; |
|||
|
|||
if (name === 'd') { |
|||
fx.paths = pathAnim.init( |
|||
el, |
|||
el.d, |
|||
prop.d |
|||
); |
|||
fx.toD = prop.d; |
|||
start = 0; |
|||
end = 1; |
|||
} else if (el.attr) { |
|||
start = el.attr(name); |
|||
} else { |
|||
start = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0; |
|||
if (name !== 'opacity') { |
|||
unit = 'px'; |
|||
} |
|||
} |
|||
|
|||
if (!end) { |
|||
end = parseFloat(prop[name]); |
|||
} |
|||
fx.custom(start, end, unit); |
|||
} |
|||
}; |
|||
}, |
|||
|
|||
/** |
|||
* Internal method to return CSS value for given element and property |
|||
*/ |
|||
_getStyle: function (el, prop) { |
|||
return window.getComputedStyle(el).getPropertyValue(prop); |
|||
}, |
|||
|
|||
/** |
|||
* Downloads a script and executes a callback when done. |
|||
* @param {String} scriptLocation |
|||
* @param {Function} callback |
|||
*/ |
|||
getScript: function (scriptLocation, callback) { |
|||
// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
|
|||
var head = doc.getElementsByTagName('head')[0], |
|||
script = doc.createElement('script'); |
|||
|
|||
script.type = 'text/javascript'; |
|||
script.src = scriptLocation; |
|||
script.onload = callback; |
|||
|
|||
head.appendChild(script); |
|||
}, |
|||
|
|||
/** |
|||
* Return the index of an item in an array, or -1 if not found |
|||
*/ |
|||
inArray: function (item, arr) { |
|||
return arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item); |
|||
}, |
|||
|
|||
|
|||
/** |
|||
* A direct link to adapter methods |
|||
*/ |
|||
adapterRun: function (elem, method) { |
|||
return parseInt(HighchartsAdapter._getStyle(elem, method), 10); |
|||
}, |
|||
|
|||
/** |
|||
* Filter an array |
|||
*/ |
|||
grep: function (elements, callback) { |
|||
return emptyArray.filter.call(elements, callback); |
|||
}, |
|||
|
|||
/** |
|||
* Map an array |
|||
*/ |
|||
map: function (arr, fn) { |
|||
var results = [], i = 0, len = arr.length; |
|||
|
|||
for (; i < len; i++) { |
|||
results[i] = fn.call(arr[i], arr[i], i, arr); |
|||
} |
|||
|
|||
return results; |
|||
}, |
|||
|
|||
offset: function (el) { |
|||
var left = 0, |
|||
top = 0; |
|||
|
|||
while (el) { |
|||
left += el.offsetLeft; |
|||
top += el.offsetTop; |
|||
el = el.offsetParent; |
|||
} |
|||
|
|||
return { |
|||
left: left, |
|||
top: top |
|||
}; |
|||
}, |
|||
|
|||
/** |
|||
* Add an event listener |
|||
*/ |
|||
addEvent: function (el, type, fn) { |
|||
augment(el).bind(type, fn); |
|||
}, |
|||
|
|||
/** |
|||
* Remove event added with addEvent |
|||
*/ |
|||
removeEvent: function (el, type, fn) { |
|||
augment(el).unbind(type, fn); |
|||
}, |
|||
|
|||
/** |
|||
* Fire an event on a custom object |
|||
*/ |
|||
fireEvent: function (el, type, eventArguments, defaultFunction) { |
|||
var e; |
|||
|
|||
if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) { |
|||
e = doc.createEvent('Events'); |
|||
e.initEvent(type, true, true); |
|||
e.target = el; |
|||
|
|||
Highcharts.extend(e, eventArguments); |
|||
|
|||
if (el.dispatchEvent) { |
|||
el.dispatchEvent(e); |
|||
} else { |
|||
el.fireEvent(type, e); |
|||
} |
|||
|
|||
} else if (el.HCExtended === true) { |
|||
eventArguments = eventArguments || {}; |
|||
el.trigger(type, eventArguments); |
|||
} |
|||
|
|||
if (eventArguments && eventArguments.defaultPrevented) { |
|||
defaultFunction = null; |
|||
} |
|||
|
|||
if (defaultFunction) { |
|||
defaultFunction(eventArguments); |
|||
} |
|||
}, |
|||
|
|||
washMouseEvent: function (e) { |
|||
return e; |
|||
}, |
|||
|
|||
|
|||
/** |
|||
* Stop running animation |
|||
*/ |
|||
stop: function (el) { |
|||
el.stopAnimation = true; |
|||
}, |
|||
|
|||
/** |
|||
* Utility for iterating over an array. Parameters are reversed compared to jQuery. |
|||
* @param {Array} arr |
|||
* @param {Function} fn |
|||
*/ |
|||
each: function (arr, fn) { // modern browsers
|
|||
return Array.prototype.forEach.call(arr, fn); |
|||
} |
|||
}; |
|||
}()); |
|||
@ -0,0 +1,50 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
|
|||
(c) 2009-2013 Torstein Hønsi |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(j,C){function J(a,b,c){this.init.call(this,a,b,c)}function K(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var c=this.xAxis.center;a.push("L",c[0],c[1])},this.closedStacks=!0}function L(a,b){var c=this.chart,d=this.options.animation,g=this.group,f=this.markerGroup,e=this.xAxis.center,i=c.plotLeft,n=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:e[0]+i,translateY:e[1]+n,scaleX:0.001,scaleY:0.001},g.attr(c),f)f.attrSetters=g.attrSetters, |
|||
f.attr(c)}else c={translateX:i,translateY:n,scaleX:1,scaleY:1},g.animate(c,d),f&&f.animate(c,d),this.animate=null}else a.call(this,b)}var P=j.arrayMin,Q=j.arrayMax,s=j.each,F=j.extend,p=j.merge,R=j.map,r=j.pick,v=j.pInt,m=j.getOptions().plotOptions,h=j.seriesTypes,x=j.extendClass,M=j.splat,o=j.wrap,N=j.Axis,u=j.Tick,z=j.Series,q=h.column.prototype,t=Math,D=t.round,A=t.floor,S=t.max,w=function(){};F(J.prototype,{init:function(a,b,c){var d=this,g=d.defaultOptions;d.chart=b;if(b.angular)g.background= |
|||
{};d.options=a=p(g,a);(a=a.background)&&s([].concat(M(a)).reverse(),function(a){var b=a.backgroundColor,a=p(d.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE, |
|||
outerRadius:"105%"}});var G=N.prototype,u=u.prototype,T={getOffset:w,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:w,setCategories:w,setTitle:w},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null, |
|||
distance:15,x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=p(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0},getLinePath:function(a,b){var c=this.center,b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+ |
|||
c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center&&(this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.isXAxis))this.minPixelPadding=this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0)},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&& |
|||
1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=h.pie.prototype.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a,b){var c=this.chart, |
|||
d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,g=this.startAngleRad,f=d[2]/2,e=[r(c.outerRadius,"100%"),c.innerRadius,r(c.thickness,10)],i=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(e[0]=this.translate(a),e[1]=this.translate(b)),e=R(e,function(a){i.test(a)&&(a=v(a,10)*f/100);return a}),c.shape=== |
|||
"circle"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=g+this.translate(a),b=g+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],e[0],e[0],{start:a,end:b,innerR:r(e[1],e[0]-e[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,g=this.getPosition(a),f,e,i;this.isCircular?i=["M",c[0]+d.plotLeft,c[1]+d.plotTop,"L",g.x,g.y]:this.options.gridLineInterpolation==="circle"?(a=this.translate(a))&&(i=this.getLinePath(0,a)):(f=d.xAxis[0],i=[],a=this.translate(a), |
|||
c=f.tickPositions,f.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),s(c,function(c,b){e=f.getPosition(c,a);i.push(b?"L":"M",e.x,e.y)}));return i},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};o(G,"init",function(a,b,c){var k;var d=b.angular,g=b.polar,f=c.isX,e=d&&f,i,n;n=b.options;var l=c.pane||0;if(d){if(F(this,e?T:O),i=!f)this.defaultRadialOptions= |
|||
this.defaultRadialGaugeOptions}else if(g)F(this,O),this.defaultRadialOptions=(i=f)?this.defaultRadialXOptions:p(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!e&&(d||g)){a=this.options;if(!b.panes)b.panes=[];this.pane=(k=b.panes[l]=b.panes[l]||new J(M(n.pane)[l],b,this),l=k);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular= |
|||
i)&&c.max===C&&n-b===2*Math.PI)this.autoConnect=!0}});o(u,"getPosition",function(a,b,c,d,g){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,g)});o(u,"getLabelPosition",function(a,b,c,d,g,f,e,i,n){var l=this.axis,k=f.y,h=f.align,j=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(f.distance,-25)),f.rotation==="auto"?d.attr({rotation:j}):k===null&&(k=v(d.styles.lineHeight)*0.9-d.getBBox().height/2),h===null&& |
|||
(h=l.isCircular?j>20&&j<160?"left":j>200&&j<340?"right":"center":"center",d.attr({align:h})),a.x+=f.x,a.y+=k):a=a.call(this,b,c,d,g,f,e,i,n);return a});o(u,"getMarkPath",function(a,b,c,d,g,f,e){var i=this.axis;i.isRadial?(a=i.getPosition(this.pos,i.center[2]/2+d),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,g,f,e);return b});m.arearange=p(m.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, |
|||
trackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=j.extendClass(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});z.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this); |
|||
s(this.points,function(b){var c=b.low,d=b.high,g=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=g,b.plotHigh=null):(b.plotLow=g,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,g=z.prototype.getSegmentPath,f,e;e=this.options;var i=e.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotX,plotY:f.plotHigh});a=g.call(this, |
|||
b);if(i)i===!0&&(i="left"),e.step={left:"right",center:"center",right:"left"}[i];c=g.call(this,c);e.step=i;e=[].concat(a,c);c[0]="L";this.areaPath=this.areaPath.concat(a,c);return e},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],g=z.prototype,f=this.options.dataLabels,e,i=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)e=a[c],e.y=e.high,e.plotY=e.plotHigh,d[c]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=!1,i?(f.align="left",f.x=f.xHigh):f.y=f.yHigh;g.drawDataLabels.apply(this, |
|||
arguments);for(c=b;c--;)e=a[c],e.dataLabelUpper=e.dataLabel,e.dataLabel=d[c],e.y=e.low,e.plotY=e.plotLow,e.below=!0,i?(f.align="right",f.x=f.xLow):f.y=f.yLow;g.drawDataLabels.apply(this,arguments)}},alignDataLabel:h.column.prototype.alignDataLabel,getSymbol:h.column.prototype.getSymbol,drawPoints:w});m.areasplinerange=p(m.arearange);h.areasplinerange=x(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline});m.columnrange=p(m.column,m.arearange,{lineWidth:1,pointRange:null}); |
|||
h.columnrange=x(h.arearange,{type:"columnrange",translate:function(){var a=this,b=a.yAxis,c;q.translate.apply(a);s(a.points,function(d){var g=d.shapeArgs,f=a.options.minPointLength,e;d.plotHigh=c=b.translate(d.high,0,1,0,1);d.plotLow=d.plotY;e=c;d=d.plotY-c;d<f&&(f-=d,d+=f,e-=f/2);g.height=d;g.y=e})},trackerGroups:["group","dataLabels"],drawGraph:w,pointAttrToOptions:q.pointAttrToOptions,drawPoints:q.drawPoints,drawTracker:q.drawTracker,animate:q.animate,getColumnMetrics:q.getColumnMetrics});m.gauge= |
|||
p(m.line,{dataLabels:{enabled:!0,y:15,borderWidth:1,borderColor:"silver",borderRadius:3,style:{fontWeight:"bold"},verticalAlign:"top",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:""},showInLegend:!1});u={type:"gauge",pointClass:j.extendClass(j.Point,{setState:function(a){this.state=a}}),angular:!0,drawGraph:w,fixedBox:!0,trackerGroups:["group","dataLabels"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();s(this.points,function(d){var g=p(b.dial,d.dial),f= |
|||
v(r(g.radius,80))*c[2]/200,e=v(r(g.baseLength,70))*f/100,i=v(r(g.rearLength,10))*f/100,n=g.baseWidth||3,l=g.topWidth||1,k=a.startAngleRad+a.translate(d.y,null,null,null,!0);b.wrap===!1&&(k=Math.max(a.startAngleRad,Math.min(a.endAngleRad,k)));k=k*180/Math.PI;d.shapeType="path";d.shapeArgs={d:g.path||["M",-i,-n/2,"L",e,-n/2,f,-l/2,f,l/2,e,n/2,-i,n/2,"z"],translateX:c[0],translateY:c[1],rotation:k};d.plotX=c[0];d.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,g= |
|||
d.pivot,f=a.chart.renderer;s(a.points,function(c){var b=c.graphic,g=c.shapeArgs,l=g.d,k=p(d.dial,c.dial);b?(b.animate(g),g.d=l):c.graphic=f[c.shapeType](g).attr({stroke:k.borderColor||"none","stroke-width":k.borderWidth||0,fill:k.backgroundColor||"black",rotation:g.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=f.circle(0,0,r(g.radius,5)).attr({"stroke-width":g.borderWidth||0,stroke:g.borderColor||"silver",fill:g.backgroundColor||"black"}).translate(b[0],b[1]).add(a.group)}, |
|||
animate:function(a){var b=this;if(!a)s(b.points,function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);h.pie.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:h.pie.prototype.setData,drawTracker:h.column.prototype.drawTracker};h.gauge= |
|||
j.extendClass(h.line,u);m.boxplot=p(m.column,{fillColor:"#FFFFFF",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style="color:{series.color};font-weight:bold">{series.name}</span><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:"50%",whiskerWidth:2});h.boxplot=x(h.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"], |
|||
toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:w,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.points,c=a.options,d=a.chart.renderer,g,f,e,i,n,l,k,h,j,m,o,H,p,E,I,q,w,t,v,u,z,y,x=a.doQuartiles!== |
|||
!1,B=parseInt(a.options.whiskerLength,10)/100;s(b,function(b){j=b.graphic;z=b.shapeArgs;o={};E={};q={};y=b.color||a.color;if(b.plotY!==C)if(g=b.pointAttr[b.selected?"selected":""],w=z.width,t=A(z.x),v=t+w,u=D(w/2),f=A(x?b.q1Plot:b.lowPlot),e=A(x?b.q3Plot:b.lowPlot),i=A(b.highPlot),n=A(b.lowPlot),o.stroke=b.stemColor||c.stemColor||y,o["stroke-width"]=r(b.stemWidth,c.stemWidth,c.lineWidth),o.dashstyle=b.stemDashStyle||c.stemDashStyle,E.stroke=b.whiskerColor||c.whiskerColor||y,E["stroke-width"]=r(b.whiskerWidth, |
|||
c.whiskerWidth,c.lineWidth),q.stroke=b.medianColor||c.medianColor||y,q["stroke-width"]=r(b.medianWidth,c.medianWidth,c.lineWidth),k=o["stroke-width"]%2/2,h=t+u+k,m=["M",h,e,"L",h,i,"M",h,f,"L",h,n,"z"],x&&(k=g["stroke-width"]%2/2,h=A(h)+k,f=A(f)+k,e=A(e)+k,t+=k,v+=k,H=["M",t,e,"L",t,f,"L",v,f,"L",v,e,"L",t,e,"z"]),B&&(k=E["stroke-width"]%2/2,i+=k,n+=k,p=["M",h-u*B,i,"L",h+u*B,i,"M",h-u*B,n,"L",h+u*B,n]),k=q["stroke-width"]%2/2,l=D(b.medianPlot)+k,I=["M",t,l,"L",v,l,"z"],j)b.stem.animate({d:m}),B&& |
|||
b.whiskers.animate({d:p}),x&&b.box.animate({d:H}),b.medianShape.animate({d:I});else{b.graphic=j=d.g().add(a.group);b.stem=d.path(m).attr(o).add(j);if(B)b.whiskers=d.path(p).attr(E).add(j);if(x)b.box=d.path(H).attr(g).add(j);b.medianShape=d.path(I).attr(q).add(j)}})}});m.errorbar=p(m.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:m.arearange.tooltip.pointFormat},whiskerWidth:null});h.errorbar=x(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low, |
|||
a.high]},pointValKey:"high",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});m.waterfall=p(m.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333"});h.waterfall=x(h.column,{type:"waterfall",upColorProp:"fill",pointArrayMap:["low","y"],pointValKey:"y",init:function(a,b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d, |
|||
g,f,e,i,n,l,k;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;g=this.points;for(d=0,c=g.length;d<c;d++){f=g[d];e=f.shapeArgs;i=this.getStack(d);k=i.points[this.index];if(isNaN(f.y))f.y=this.yData[d];n=S(l,l+f.y)+k[0];e.y=b.translate(n,0,1);f.isSum||f.isIntermediateSum?(e.y=b.translate(k[1],0,1),e.height=b.translate(k[0],0,1)-e.y):l+=i.total;e.height<0&&(e.y+=e.height,e.height*=-1);f.plotY=e.y=D(e.y)-a;e.height=D(e.height);f.yBottom=e.y+e.height}},processData:function(a){var b= |
|||
this.yData,c=this.points,d,g=b.length,f=this.options.threshold||0,e,i,h,l,k,j;i=e=h=l=f;for(j=0;j<g;j++)k=b[j],d=c&&c[j]?c[j]:{},k==="sum"||d.isSum?b[j]=i:k==="intermediateSum"||d.isIntermediateSum?(b[j]=e,e=f):(i+=k,e+=k),h=Math.min(i,h),l=Math.max(i,l);z.prototype.processData.call(this,a);this.dataMin=h;this.dataMax=l},toYData:function(a){if(a.isSum)return"sum";else if(a.isIntermediateSum)return"intermediateSum";return a.y},getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments); |
|||
var a=this.options,b=a.states,c=a.upColor||this.color,a=j.Color(c).brighten(0.1).get(),d=p(this.pointAttr),g=this.upColorProp;d[""][g]=c;d.hover[g]=b.hover.upColor||a;d.select[g]=b.select.upColor||c;s(this.points,function(a){if(a.y>0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=D(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],g,f,e;for(e=1;e<b;e++)f=a[e].shapeArgs,g=a[e-1].shapeArgs,f=["M",g.x+g.width,g.y+c,"L",f.x,g.y+c],a[e-1].y<0&&(f[2]+= |
|||
g.height,f[5]+=g.height),d=d.concat(f);return d},getExtremes:w,getStack:function(a){var b=this.yAxis.stacks,c=this.stackKey;this.processedYData[a]<this.options.threshold&&(c="-"+c);return b[c][a]},drawGraph:z.prototype.drawGraph});m.bubble=p(m.scatter,{dataLabels:{inside:!0,style:{color:"white",textShadow:"0px 0px 3px black"},verticalAlign:"middle"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:"20%",tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0}); |
|||
h.bubble=x(h.scatter,{type:"bubble",pointArrayMap:["y","z"],trackerGroups:["group","dataLabelsGroup"],pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor"},applyOpacity:function(a){var b=this.options.marker,c=r(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=j.Color(a).setOpacity(c).get("rgba"));return a},convertAttribs:function(){var a=z.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var g, |
|||
f,e,i=this.zData,h=[];for(f=0,g=i.length;f<g;f++)e=b-a,e=e>0?(i[f]-a)/(b-a):0.5,h.push(t.ceil(c+e*(d-c))/2);this.radii=h},animate:function(a){var b=this.options.animation;if(!a)s(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,g=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=g?g[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType= |
|||
"circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=C},drawLegendSymbol:function(a,b){var c=v(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel});N.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,g=b,f=this.isXAxis, |
|||
e=f?"xData":"yData",i=this.min,h={},j=t.min(c.plotWidth,c.plotHeight),k=Number.MAX_VALUE,m=-Number.MAX_VALUE,o=this.max-i,p=b/o,q=[];this.tickPositions&&(s(this.series,function(b){var c=b.options;if(b.type==="bubble"&&b.visible&&(a.allowZoomOutside=!0,q.push(b),f))s(["minSize","maxSize"],function(a){var b=c[a],d=/%$/.test(b),b=v(b);h[a]=d?j*b/100:b}),b.minPxSize=h.minSize,b=b.zData,b.length&&(k=t.min(k,t.max(P(b),c.displayNegative===!1?c.zThreshold:-Number.MAX_VALUE)),m=t.max(m,Q(b)))}),s(q,function(a){var b= |
|||
a[e],c=b.length,j;f&&a.getRadii(k,m,h.minSize,h.maxSize);if(o>0)for(;c--;)j=a.radii[c],d=Math.min((b[c]-i)*p-j,d),g=Math.max((b[c]-i)*p+j,g)}),q.length&&o>0&&r(this.options.min,this.userMin)===C&&r(this.options.max,this.userMax)===C&&(g-=b,p*=(b+d-g)/b,this.min+=d/p,this.max+=g/p))};var y=z.prototype,m=j.Pointer.prototype;y.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX, |
|||
this.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};y.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,c){return a.clientX-c.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};o(h.area.prototype,"init",K);o(h.areaspline.prototype,"init",K);o(h.spline.prototype,"getPointSpline",function(a,b,c,d){var g,f,e,i,h,j,k;if(this.chart.polar){g=c.plotX;f=c.plotY;a=b[d-1];e=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),e||(e=b[1])); |
|||
if(a&&e)i=a.plotX,h=a.plotY,b=e.plotX,j=e.plotY,i=(1.5*g+i)/2.5,h=(1.5*f+h)/2.5,e=(1.5*g+b)/2.5,k=(1.5*f+j)/2.5,b=Math.sqrt(Math.pow(i-g,2)+Math.pow(h-f,2)),j=Math.sqrt(Math.pow(e-g,2)+Math.pow(k-f,2)),i=Math.atan2(h-f,i-g),h=Math.atan2(k-f,e-g),k=Math.PI/2+(i+h)/2,Math.abs(i-k)>Math.PI/2&&(k-=Math.PI),i=g+Math.cos(k)*b,h=f+Math.sin(k)*b,e=g+Math.cos(Math.PI+k)*j,k=f+Math.sin(Math.PI+k)*j,c.rightContX=e,c.rightContY=k;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,i||g,h||f,g,f],a.rightContX= |
|||
a.rightContY=null):c=["M",g,f]}else c=a.call(this,b,c,d);return c});o(y,"translate",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});o(y,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});o(y,"animate",L);o(q,"animate",L);o(y,"setTooltipPoints",function(a,b){this.chart.polar&& |
|||
F(this.xAxis,{tooltipLen:360});return a.call(this,b)});o(q,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,g=b.startAngleRad,f=this.chart.renderer,e,h;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(h=b.length;h--;)e=b[h],a=e.barX+g,e.shapeType="path",e.shapeArgs={d:f.symbols.arc(d[0],d[1],c-e.plotY,null,{start:a,end:a+e.pointWidth,innerR:c-r(e.yBottom,c)})},this.toXY(e)}});o(q,"alignDataLabel",function(a,b,c,d,g,f){if(this.chart.polar){a=b.rectPlotX/ |
|||
Math.PI*180;if(d.align===null)d.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(d.verticalAlign===null)d.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";y.alignDataLabel.call(this,b,c,d,g,f)}else a.call(this,b,c,d,g,f)});o(m,"getIndex",function(a,b){var c,d=this.chart,g;d.polar?(g=d.xAxis[0].center,c=b.chartX-g[0]-d.plotLeft,d=b.chartY-g[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});o(m,"getCoordinates",function(a,b){var c=this.chart, |
|||
d={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var f=a.isXAxis,e=a.center,h=b.chartX-e[0]-c.plotLeft,e=b.chartY-e[1]-c.plotTop;d[f?"xAxis":"yAxis"].push({axis:a,value:a.translate(f?Math.PI-Math.atan2(h,e):Math.sqrt(Math.pow(h,2)+Math.pow(e,2)),!0)})}):d=a.call(this,b);return d})})(Highcharts); |
|||
File diff suppressed because it is too large
@ -0,0 +1,283 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
|
|||
(c) 2009-2013 Torstein Hønsi |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments.length,c={},d=function(a,b){var c,h;typeof a!=="object"&&(a={});for(h in b)b.hasOwnProperty(h)&&(c=b[h],a[h]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&typeof c.nodeType!=="number"?d(a[h]||{},c):b[h]);return a};for(a=0;a<b;a++)c=d(c,arguments[a]);return c}function C(a,b){return parseInt(a,b||10)}function ea(a){return typeof a==="string"}function T(a){return typeof a=== |
|||
"object"}function Ia(a){return Object.prototype.toString.call(a)==="[object Array]"}function sa(a){return typeof a==="number"}function na(a){return R.log(a)/R.LN10}function fa(a){return R.pow(10,a)}function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function u(a){return a!==w&&a!==null}function v(a,b,c){var d,e;if(ea(b))u(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(u(b)&&T(b))for(d in b)a.setAttribute(d,b[d]);return e}function ja(a){return Ia(a)? |
|||
a:[a]}function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function K(a,b){if(ta&&b&&b.opacity!==w)b.filter="alpha(opacity="+b.opacity*100+")";r(a.style,b)}function U(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&K(a,{padding:0,border:S,margin:0});c&&K(a,c);d&&d.appendChild(a);return a}function ha(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);return c}function Aa(a,b,c,d){var e=M.lang,a=+a||0,f=b===-1?(a.toString().split(".")[1]|| |
|||
"").length:isNaN(b=N(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(C(a=N(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+N(a-c).toFixed(f).slice(2):"")}function Ba(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function mb(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}}function Ca(a,b){for(var c="{",d=!1, |
|||
e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(":"),g=/\.([0-9])/,h=M.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Aa(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:"")):e=Xa(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function nb(a){return R.pow(10,P(R.log(a)/R.LN10))}function ob(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals=== |
|||
!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Cb(a,b){var c=b||[[Db,[1,2,5,10,20,25,50,100,200,500]],[pb,[1,2,5,10,15,30]],[Ya,[1,2,5,10,15,30]],[Qa,[1,2,3,4,6,8,12]],[ua,[1,2]],[Za,[1,2]],[Ra,[1,2,3,4,6]],[Da,null]],d=c[c.length-1],e=D[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=D[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+D[c[g+1][0]])/2)break;e===D[Da]&&a<5*e&&(f=[1,2,5]);c=ob(a/e,f,d[0]===Da?nb(a/e):1); |
|||
return{unitRange:e,count:c,unitName:d[0]}}function Eb(a,b,c,d){var e=[],f={},g=M.global.useUTC,h,i=new Date(b),j=a.unitRange,k=a.count;if(u(b)){j>=D[pb]&&(i.setMilliseconds(0),i.setSeconds(j>=D[Ya]?0:k*P(i.getSeconds()/k)));if(j>=D[Ya])i[Fb](j>=D[Qa]?0:k*P(i[qb]()/k));if(j>=D[Qa])i[Gb](j>=D[ua]?0:k*P(i[rb]()/k));if(j>=D[ua])i[sb](j>=D[Ra]?1:k*P(i[Sa]()/k));j>=D[Ra]&&(i[Hb](j>=D[Da]?0:k*P(i[$a]()/k)),h=i[ab]());j>=D[Da]&&(h-=h%k,i[Ib](h));if(j===D[Za])i[sb](i[Sa]()-i[tb]()+o(d,1));b=1;h=i[ab]();for(var d= |
|||
i.getTime(),l=i[$a](),m=i[Sa](),p=g?0:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===D[Da]?d=bb(h+b*k,0):j===D[Ra]?d=bb(h,l+b*k):!g&&(j===D[ua]||j===D[Za])?d=bb(h,l,m+b*k*(j===D[ua]?1:7)):d+=j*k,b++;e.push(d);n(ub(e,function(a){return j<=D[Qa]&&a%D[ua]===p}),function(a){f[a]=ua})}e.info=r(a,{higherRanks:f,totalRange:j*k});return e}function Jb(){this.symbol=this.color=0}function Kb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i: |
|||
d});for(e=0;e<c;e++)delete a[e].ss_i}function Ja(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function va(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ka(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ta(a){cb||(cb=U(Ea));a&&cb.appendChild(a);cb.innerHTML=""}function ka(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else O.console&&console.log(c)}function ia(a){return parseFloat(a.toPrecision(14))} |
|||
function La(a,b){Fa=o(a,b.animation)}function Lb(){var a=M.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";bb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};qb=b+"Minutes";rb=b+"Hours";tb=b+"Day";Sa=b+"Date";$a=b+"Month";ab=b+"FullYear";Fb=c+"Minutes";Gb=c+"Hours";sb=c+"Date";Hb=c+"Month";Ib=c+"FullYear"}function wa(){}function Ma(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function vb(a,b){this.axis=a;if(b)this.options= |
|||
b,this.id=b.id}function Mb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.percent=f==="percent";this.alignOptions={align:b.align||(g?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(g?"middle":c?"bottom":"top"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?"right":"left":"center")}function db(){this.init.apply(this,arguments)}function wb(){this.init.apply(this,arguments)} |
|||
function xb(a,b){this.init(a,b)}function eb(a,b){this.init(a,b)}function yb(){this.init.apply(this,arguments)}var w,y=document,O=window,R=Math,t=R.round,P=R.floor,xa=R.ceil,s=R.max,I=R.min,N=R.abs,V=R.cos,ca=R.sin,ya=R.PI,Ua=ya*2/360,oa=navigator.userAgent,Nb=O.opera,ta=/msie/i.test(oa)&&!Nb,fb=y.documentMode===8,gb=/AppleWebKit/.test(oa),hb=/Firefox/.test(oa),Ob=/(Mobile|Android|Windows Phone)/.test(oa),za="http://www.w3.org/2000/svg",Z=!!y.createElementNS&&!!y.createElementNS(za,"svg").createSVGRect, |
|||
Ub=hb&&parseInt(oa.split("Firefox/")[1],10)<4,$=!Z&&!ta&&!!y.createElement("canvas").getContext,Va,ib=y.documentElement.ontouchstart!==w,Pb={},zb=0,cb,M,Xa,Fa,Ab,D,pa=function(){},Ga=[],Ea="div",S="none",Qb="rgba(192,192,192,"+(Z?1.0E-4:0.002)+")",Db="millisecond",pb="second",Ya="minute",Qa="hour",ua="day",Za="week",Ra="month",Da="year",Rb="stroke-width",bb,qb,rb,tb,Sa,$a,ab,Fb,Gb,sb,Hb,Ib,W={};O.Highcharts=O.Highcharts?ka(16,!0):{};Xa=function(a,b,c){if(!u(b)||isNaN(b))return"Invalid date";var a= |
|||
o(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b),e,f=d[rb](),g=d[tb](),h=d[Sa](),i=d[$a](),j=d[ab](),k=M.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Ba(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ba(i+1),y:j.toString().substr(2,2),Y:j,H:Ba(f),I:Ba(f%12||12),l:f%12||12,M:Ba(d[qb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ba(d.getSeconds()),L:Ba(t(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+ |
|||
a.substr(1):a};Jb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};D=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(Db,1,pb,1E3,Ya,6E4,Qa,36E5,ua,864E5,Za,6048E5,Ra,26784E5,Da,31556952E3);Ab={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&& |
|||
(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}}; |
|||
(function(a){O.HighchartsAdapter=O.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each(["cur","_default","width","height","opacity"],function(a,b){var e=d,k,l;b==="cur"?e=c.prototype:b==="_default"&&f&&(e=g[b],b="set");(k=e[b])&&(e[b]=function(c){c=a?c:this;if(c.prop!=="align")return l=c.elem,l.attr?l.attr(c.prop,b==="cur"?w:c.now):k.apply(this,arguments)})}); |
|||
mb(e,"get",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr("d",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a="Chart",b=arguments,c,d;ea(b[0])&&(a=b[0],b=Array.prototype.slice.call(b, |
|||
1));c=b[0];if(c!==w)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===w&&(d=Ga[v(this[0],"data-highcharts-chart")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?"removeEventListener": |
|||
"detachEvent";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g="detached"+c,h;!ta&&d&&(delete d.layerX,delete d.layerY);r(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each(["preventDefault","stopPropagation"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b==="preventDefault"&&(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===w)c.pageX= |
|||
a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==w&&b.attr&&(c.opacity+="px");e.animate(c,d)},stop:function(b){a(b).stop()}}})(O.jQuery);var X=O.HighchartsAdapter,G=X||{};X&&X.init.call(X,Ab);var jb=G.adapterRun,Vb=G.getScript,qa=G.inArray,n=G.each,ub=G.grep,Wb=G.offset,Na=G.map,J=G.addEvent,aa=G.removeEvent,z=G.fireEvent,Xb=G.washMouseEvent,Bb=G.animate,Wa=G.stop,G={enabled:!0,x:0,y:15,style:{color:"#666",cursor:"default", |
|||
fontSize:"11px",lineHeight:"14px"}};M={colors:"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".", |
|||
numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/3.0.6/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:5,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', |
|||
fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",margin:15,style:{color:"#274b6d",fontSize:"16px"}},subtitle:{text:"",align:"center",style:{color:"#4d759e"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0},select:{fillColor:"#FFFFFF", |
|||
lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:x(G,{align:"center",enabled:!1,formatter:function(){return this.y===null?"":Aa(this.y,-1)},verticalAlign:"bottom",y:0}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:"absolute",color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,navigation:{activeColor:"#274b6d", |
|||
inactiveColor:"#CCC"},shadow:!1,itemStyle:{cursor:"pointer",color:"#274b6d",fontSize:"12px"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolWidth:16,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"1em"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,animation:Z, |
|||
backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Ob?25:10,style:{color:"#333333",cursor:"default", |
|||
fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var Y=M.plotOptions,X=Y.line;Lb();var ra=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Na(a.stops,function(a){return ra(a[1])}):(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?b=[C(c[1]),C(c[2]), |
|||
C(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?b=[C(c[1],16),C(c[2],16),C(c[3],16),1]:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a))&&(b=[C(c[1]),C(c[2]),C(c[3]),1])})(a);return{get:function(c){var f;d?(f=x(a),f.stops=[].concat(f.stops),n(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)n(d, |
|||
function(b){b.brighten(a)});else if(sa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=C(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};wa.prototype={init:function(a,b){this.element=b==="span"?U(b):y.createElementNS(za,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=o(b,Fa,!0);Wa(this);if(b){b=x(b);if(c)b.complete=c;Bb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(), |
|||
i=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),q=v(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&c!=="fill"&&(q=parseFloat(q));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==w&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],v(f,"x")=== |
|||
v(g,"x")&&v(f,"x",d);else if(this.rotation&&(c==="x"||c==="y"))p=!0;else if(c==="fill")d=i.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")v(g,{rx:d,ry:d}),j=!0;else if(c==="translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign"||c==="scaleX"||c==="scaleY")j=p=!0;else if(c==="stroke")d=i.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=S;else{if(d){d=d.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot", |
|||
"3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=d.length;e--;)d[e]=C(d[e])*o(a["stroke-width"],this["stroke-width"]);d=d.join(",")}}else if(c==="width")d=C(d);else if(c==="align")c="text-anchor",d={left:"start",center:"middle",right:"end"}[d];else if(c==="title")e=g.getElementsByTagName("title")[0],e||(e=y.createElementNS(za,"title"),g.appendChild(e)),e.textContent=d;c==="strokeWidth"&& |
|||
(c="stroke-width");if(c==="stroke-width"||c==="stroke"){this[c]=d;if(this.stroke&&this["stroke-width"])v(g,"stroke",this.stroke),v(g,"stroke-width",this["stroke-width"]),this.hasStroke=!0;else if(c==="stroke-width"&&d===0&&this.hasStroke)g.removeAttribute("stroke"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))for(e=l.length;e--;)v(l[e], |
|||
c,c==="height"?s(d-(l[e].cutHeight||0),0):d);if((c==="width"||c==="height")&&h==="rect"&&d<0)d=0;this[c]=d;c==="text"?(d!==this.textStr&&delete this.bBox,this.textStr=d,this.added&&i.buildText(this)):j||v(g,c,d)}p&&this.updateTransform()}return q},addClass:function(a){var b=this.element,c=v(b,"class")||"";c.indexOf(a)===-1&&v(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;n("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=o(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x, |
|||
b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":S)},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;i=t(a)%2/2;h.x=P(b||this.x||0)+i;h.y=P(c||this.y||0)+i;h.width=P((d||this.width||0)-2*i);h.height=P((e||this.height||0)-2*i);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,c=a&&a.width&&b.nodeName.toLowerCase()==="text", |
|||
d,e="",f=function(a,b){return"-"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=r(this.styles,a);$&&c&&delete a.width;if(ta&&!Z)c&&delete a.width,K(this.element,a);else{for(d in a)e+=d.replace(/([A-Z])/g,f)+":"+a[d]+";";v(b,"style",e)}c&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=this,d=c.element;ib&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(oa.indexOf("Android")===-1|| |
|||
Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=r(this.styles,a);K(this.element,a);return this},htmlGetBBox:function(){var a= |
|||
this.element,b=this.bBox;if(!b){if(a.nodeName==="text")a.style.position="absolute";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=g&&g!=="left",j=this.shadows;K(b,{marginLeft:c,marginTop:d});j&&n(j,function(a){K(a,{marginLeft:c+1,marginTop:d+1})}); |
|||
this.inverted&&n(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var k,l,j=this.rotation,m;k=0;var p=1,q=0,ba;m=C(this.textWidth);var A=this.xCorr||0,L=this.yCorr||0,Sb=[j,g,b.innerHTML,this.textWidth].join(",");if(Sb!==this.cTT){u(j)&&(k=j*Ua,p=V(k),q=ca(k),this.setSpanRotation(j,q,p));k=o(this.elemWidth,b.offsetWidth);l=o(this.elemHeight,b.offsetHeight);if(k>m&&/[ \-]/.test(b.textContent||b.innerText))K(b,{width:m+"px",display:"block",whiteSpace:"normal"}),k=m;m=a.fontMetrics(b.style.fontSize).b; |
|||
A=p<0&&-k;L=q<0&&-l;ba=p*q<0;A+=q*m*(ba?1-h:h);L-=p*m*(j?ba?h:1-h:1);i&&(A-=k*h*(p<0?-1:1),j&&(L-=l*h*(q<0?-1:1)),K(b,{textAlign:g}));this.xCorr=A;this.yCorr=L}K(b,{left:e+A+"px",top:f+L+"px"});if(gb)l=b.offsetHeight;this.cTT=Sb}}else this.alignOnAdd=!0},setSpanRotation:function(a){var b={};b[ta?"-ms-transform":gb?"-webkit-transform":hb?"MozTransform":Nb?"-o-transform":""]=b.transform="rotate("+a+"deg)";K(this.element,b)},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c= |
|||
this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(this.x||0)+" "+(this.y||0)+")");(u(c)||u(d))&&a.push("scale("+o(c,1)+" "+o(d,1)+")");a.length&&v(this.element,"transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions= |
|||
a,this.alignByTranslate=b,!c||ea(c))this.alignTo=d=c||"renderer",ga(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=t(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=t(g);this[this.placed?"animate":"attr"](h);this.placed= |
|||
!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d=this.rotation;c=this.element;var e=this.styles,f=d*Ua;if(!a){if(c.namespaceURI===za||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(g){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){b=a.width;c=a.height;if(ta&&e&&e.fontSize==="11px"&&c.toPrecision(3)==="22.7")a.height=c=14;if(d)a.width=N(c*ca(f))+N(b*V(f)),a.height=N(c*V(f))+N(b*ca(f))}this.bBox= |
|||
a}return a},show:function(){return this.attr({visibility:"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=v(f,"zIndex"),h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=C(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a= |
|||
e[c],b=v(a,"zIndex"),a!==f&&(C(b)>g||!u(g)&&u(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;z(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&b.parentNode,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Wa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy(); |
|||
a.stops=null}a.safeRemoveChild(b);for(c&&n(c,function(b){a.safeRemoveChild(b)});d&&d.childNodes.length===0;)b=d.parentNode,a.safeRemoveChild(d),d=b;a.alignTo&&ga(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=o(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?"(-1,-1)":"("+o(a.offsetX,1)+", "+o(a.offsetY,1)+")";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;v(f,{isShadow:"true",stroke:a.color||"black","stroke-opacity":j* |
|||
e,"stroke-width":h,transform:"translate"+k,fill:S});if(c)v(f,"height",s(v(f,"height")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this}};var Ha=function(){this.init.apply(this,arguments)};Ha.prototype={Element:wa,init:function(a,b,c,d){var e=location,f,g;f=this.createElement("svg").attr({version:"1.1"});g=f.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&v(g,"xmlns",za);this.isSVG=!0;this.box=g;this.boxWrapper=f;this.alignedObjects= |
|||
[];this.url=(hb||gb)&&y.getElementsByTagName("base").length?e.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(y.createTextNode("Created with Highcharts 3.0.6"));this.defs=this.createElement("defs").add();this.forExport=d;this.gradients={};this.setSize(b,c,!1);var h;if(hb&&a.getBoundingClientRect)this.subPixelFix=b=function(){K(a,{left:0,top:0});h=a.getBoundingClientRect();K(a,{left:xa(h.left)-h.left+"px",top:xa(h.top)- |
|||
h.top+"px"})},b(),J(O,"resize",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ka(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&aa(O,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=o(a.textStr, |
|||
"").toString().replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g),f=b.childNodes,g=/style="([^"]+)"/,h=/href="(http[^"]+)"/,i=v(b,"x"),j=a.styles,k=j&&j.width&&C(j.width),l=j&&j.lineHeight,m=f.length;m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===""&&e.pop();n(e,function(e,f){var m,o=0,e=e.replace(/<span/g,"|||<span").replace(/<\/span>/g, |
|||
"</span>|||");m=e.split("|||");n(m,function(e){if(e!==""||m.length===1){var p={},n=y.createElementNS(za,"tspan"),s;g.test(e)&&(s=e.match(g)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),v(n,"style",s));h.test(e)&&!d&&(v(n,"onclick",'location.href="'+e.match(h)[1]+'"'),K(n,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "&&(n.appendChild(y.createTextNode(e)),o?p.dx=0:p.x=i,v(n,p),!o&&f&&(!Z&&d&&K(n,{display:"block"}),v(n,"dy",l||c.fontMetrics(/px$/.test(n.style.fontSize)? |
|||
n.style.fontSize:j.fontSize).h,gb&&n.offsetHeight)),b.appendChild(n),o++,k))for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),u,t,p=a._clipHeight,E=[],w=C(l||16),B=1;e.length||E.length;)delete a.bBox,u=a.getBBox(),t=u.width,u=t>k,!u||e.length===1?(e=E,E=[],e.length&&(B++,p&&B*w>p?(e=["..."],a.attr("title",a.textStr)):(n=y.createElementNS(za,"tspan"),v(n,{dy:w,x:i}),s&&v(n,"style",s),b.appendChild(n),t>k&&(k=t)))):(n.removeChild(n.firstChild),E.unshift(e.pop())),e.length&&n.appendChild(y.createTextNode(e.join(" ").replace(/- /g, |
|||
"-")))}})})},button:function(a,b,c,d,e,f,g,h){var i=this.label(a,b,c,null,null,null,null,null,"button"),j=0,k,l,m,p,q,n,a={x1:0,y1:0,x2:0,y2:1},e=x({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);m=e.style;delete e.style;f=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);p=f.style;delete f.style;g=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);q=g.style; |
|||
delete g.style;h=x(e,{style:{color:"#CCC"}},h);n=h.style;delete h.style;J(i.element,ta?"mouseover":"mouseenter",function(){j!==3&&i.attr(f).css(p)});J(i.element,ta?"mouseout":"mouseleave",function(){j!==3&&(k=[e,f,g][j],l=[m,p,q][j],i.attr(k).css(l))});i.setState=function(a){(i.state=j=a)?a===2?i.attr(g).css(q):a===3&&i.attr(h).css(n):i.attr(e).css(m)};return i.on("click",function(){j!==3&&d.call(i)}).attr(e).css(r({cursor:"default"},m))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=t(a[1])-b% |
|||
2/2);a[2]===a[5]&&(a[2]=a[5]=t(a[2])+b%2/2);return a},path:function(a){var b={fill:S};Ia(a)?b.d=a:T(a)&&r(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=T(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if(T(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=T(a)?a.r:e;e=this.createElement("rect").attr({rx:e,ry:e, |
|||
fill:S});return e.attr(T(a)?a:e.crisp(f,a,b,s(c,0),s(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return u(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:S};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink", |
|||
"href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(t(b),t(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(t((d-b[0])/2),t((e-b[1])/2)))},j=a.match(i)[1],a=Pb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),U("img",{onload:function(){k(g, |
|||
Pb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d, |
|||
e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=V(f),j=ca(f),k=V(g),g=ca(g),e=e.end-f<ya?0:1;return["M",a+c*i,b+c*j,"A",c,c,0,e,1,a+c*k,b+c*g,h?"M":"L",a+d*k,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*j,h?"":"Z"]}},clipRect:function(a,b,c,d){var e="highcharts-"+zb++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g,h,i,j,k,l,m,p=[];a&&a.linearGradient?g="linearGradient":a&&a.radialGradient&& |
|||
(g="radialGradient");if(g){c=a[g];h=d.gradients;j=a.stops;b=b.radialReference;Ia(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:"userSpaceOnUse"});g==="radialGradient"&&b&&!u(c.gradientUnits)&&(c=x(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:"userSpaceOnUse"}));for(m in c)m!=="id"&&p.push(m,c[m]);for(m in j)p.push(j[m]);p=p.join(",");h[p]?a=h[p].id:(c.id=a="highcharts-"+zb++,h[p]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],n(j,function(a){f.test(a[1])? |
|||
(e=ra(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)}));return"url("+d.url+"#"+a+")"}else return f.test(a)?(e=ra(a),v(b,c+"-opacity",e.get("a")),e.get("rgb")):(b.removeAttribute(c+"-opacity"),a)},text:function(a,b,c,d){var e=M.chart.style,f=$||!Z&&this.forExport;if(d&&!this.forExport)return this.html(a,b,c);b=t(o(b,0));c=t(o(c,0));a=this.createElement("text").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily, |
|||
fontSize:e.fontSize});f&&a.css({position:"absolute"});a.x=b;a.y=c;return a},html:function(a,b,c){var d=M.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b==="align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:t(b),y:t(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss; |
|||
if(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;n(d.reverse(),function(a){var d;b=a.div=a.div||U(Ea,{className:v(a.element,"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+"px"},translateY:function(a){d.top=a+"px"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e}; |
|||
return e},fontMetrics:function(a){var a=C(a||11),a=a<24?a+4:t(a*1.2),b=t(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=o.element.style;L=(Oa===void 0||la===void 0||q.styles.textAlign)&&o.getBBox();q.width=(Oa||L.width||0)+2*da+kb;q.height=(la||L.height||0)+2*da;v=da+p.fontMetrics(a&&a.fontSize).b;if(C){if(!A)a=t(-s*da),b=h?-v:0,q.box=A=d?p.symbol(d,a,b,q.width,q.height):p.rect(a,b,q.width,q.height,0,lb[Rb]),A.add(q);A.isImg||A.attr(x({width:q.width,height:q.height}, |
|||
lb));lb=null}}function k(){var a=q.styles,a=a&&a.textAlign,b=kb+da*(1-s),c;c=h?0:v;if(u(Oa)&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(Oa-L.width);(b!==o.x||c!==o.y)&&o.attr({x:b,y:c});o.x=b;o.y=c}function l(a,b){A?A.attr(a,b):lb[a]=b}function m(){o.add(q);q.attr({text:a,x:b,y:c});A&&u(e)&&q.attr({anchorX:e,anchorY:f})}var p=this,q=p.g(i),o=p.text("",0,0,g).attr({zIndex:1}),A,L,s=0,da=3,kb=0,Oa,la,E,H,B=0,lb={},v,g=q.attrSetters,C;J(q,"add",m);g.width=function(a){Oa=a;return!1};g.height= |
|||
function(a){la=a;return!1};g.padding=function(a){u(a)&&a!==da&&(da=a,k());return!1};g.paddingLeft=function(a){u(a)&&a!==kb&&(kb=a,k());return!1};g.align=function(a){s={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){o.attr(b,a);j();k();return!1};g[Rb]=function(a,b){C=!0;B=a%2/2;l(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){b==="fill"&&(C=!0);l(b,a);return!1};g.anchorX=function(a,b){e=a;l(b,a+B-E);return!1};g.anchorY=function(a,b){f=a;l(b,a-H);return!1};g.x=function(a){q.x=a;a-=s* |
|||
((Oa||L.width)+da);E=t(a);q.attr("translateX",E);return!1};g.y=function(a){H=q.y=t(a);q.attr("translateY",H);return!1};var y=q.css;return r(q,{css:function(a){if(a){var b={},a=x(a);n("fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow".split(","),function(c){a[c]!==w&&(b[c]=a[c],delete a[c])});o.css(b)}return y.call(q,a)},getBBox:function(){return{width:L.width+2*da,height:L.height+2*da,x:L.x-da,y:L.y-da}},shadow:function(a){A&&A.shadow(a);return q},destroy:function(){aa(q, |
|||
"add",m);aa(q.element,"mouseenter");aa(q.element,"mouseleave");o&&(o=o.destroy());A&&(A=A.destroy());wa.prototype.destroy.call(q);q=p=j=k=l=m=null}})}};Va=Ha;var F;if(!Z&&!$){Highcharts.VMLElement=F={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ea;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element= |
|||
U(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();z(this,"add");return this},updateTransform:wa.prototype.htmlUpdateTransform,setSpanRotation:function(a,b,c){K(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",c,", M12=",-b,", M21=",b,", M22=",c,", sizingMethod='auto expand')"].join(""): |
|||
S})},pathToVML:function(a){for(var b=a.length,c=[],d;b--;)if(sa(a[b]))c[b]=t(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))d=a[b]==="wa"?1:-1,c[b+5]===c[b+7]&&(c[b+7]-=d),c[b+6]===c[b+8]&&(c[b+8]-=d);return c.join(" ")||"x"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,p=this.attrSetters,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,q=c==="strokeWidth"||c==="stroke-width"? |
|||
this.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=p[c]&&p[c].call(this,d,c),e!==!1&&d!==null){e!==w&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c==="visibility"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h==="DIV"&&(d=d==="hidden"?"-999em":0,fb||(g[c]=d?"visible": |
|||
"hidden"),c="top");g[c]=d;m=!0}else if(c==="zIndex")d&&(g[c]=d),m=!0;else if(qa(c,["x","y","width","height"])!==-1)this[c]=d,c==="x"||c==="y"?c={x:"left",y:"top"}[c]:d=s(0,d),this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c==="class"&&h==="DIV")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,sa(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]|| |
|||
U(i.prepVML(["<stroke/>"]),null,null,f))[c]=d||"solid",this.dashstyle=d,m=!0;else if(c==="fill")if(h==="SPAN")g.color=d;else{if(h!=="IMG")f.filled=d!==S?!0:!1,d=i.color(d,f,c,this),c="fillcolor"}else if(c==="opacity")m=!0;else if(h==="shape"&&c==="rotation")this[c]=f.style[c]=d,f.style.left=-t(ca(d*Ua)+1)+"px",f.style.top=t(V(d*Ua))+"px";else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;else if(c==="text")this.bBox=null,f.innerHTML=d,m=!0;m||(fb?f[c]= |
|||
d:v(f,c,d))}return q},clip:function(a){var b=this,c;a?(c=a.members,ga(c,b),c.push(b),b.destroyClip=function(){ga(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:fb?"inherit":"rect(auto)"});return b.css(a)},css:wa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ta(a)},destroy:function(){this.destroyClip&&this.destroyClip();return wa.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=O.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a, |
|||
b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=C(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,p,q;k&&typeof k.value!=="string"&&(k="x");m=k;if(a){p=o(a.width,3);q=(a.opacity||0.15)/p;for(e=1;e<=3;e++){l=p*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow="true" strokeweight="',l,'" filled="false" path="',m,'" coordsize="10 10" style="',f.style.cssText,'" />'];h=U(g.prepVML(j),null, |
|||
{left:C(i.left)+o(a.offsetX,1),top:C(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color="',a.color||"black",'" opacity="',q*e,'"/>'];U(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};F=ha(wa,F);var ma={Element:F,isIE8:oa.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ea);e=d.element;e.style.position="relative";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper= |
|||
d;this.setSize(b,c,!1);y.namespaces.hcv||(y.namespaces.add("hcv","urn:schemas-microsoft-com:vml"),(y.styleSheets.length?y.styleSheets[0]:y.createStyleSheet()).cssText+="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } ")},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=T(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b= |
|||
a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+t(a?e:d)+"px,"+t(a?f:b)+"px,"+t(a?b:f)+"px,"+t(a?d:e)+"px)"};!a&&fb&&c==="DIV"&&r(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=S;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,m=a.linearGradient||a.radialGradient, |
|||
p,q,o,A,L,s="",a=a.stops,u,t=[],w=function(){h=['<fill colors="'+t.join(",")+'" opacity="',o,'" o:opacity2="',q,'" type="',i,'" ',s,'focus="100%" method="any" />'];U(e.prepVML(h),null,null,b)};p=a[0];u=a[a.length-1];p[0]>0&&a.unshift([0,p[1]]);u[0]<1&&a.push([1,u[1]]);n(a,function(a,b){g.test(a[1])?(f=ra(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);t.push(a[0]*100+"% "+k);b?(o=l,A=k):(q=l,L=k)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,p=m.x2||m[2]||0,m=m.y2||m[3]||0,s='angle="'+ |
|||
(90-R.atan((m-a)/(p-c))*180/ya)+'"',w();else{var j=m.r,r=j*2,E=j*2,H=m.cx,B=m.cy,x=b.radialReference,v,j=function(){x&&(v=d.getBBox(),H+=(x[0]-v.x)/v.width-0.5,B+=(x[1]-v.y)/v.height-0.5,r*=x[2]/v.width,E*=x[2]/v.height);s='src="'+M.global.VMLRadialGradientURL+'" size="'+r+","+E+'" origin="0.5,0.5" position="'+H+","+B+'" color2="'+L+'" ';w()};d.added?j():J(d,"add",j);j=A}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ra(a),h=["<",c,' opacity="',f.get("a"),'"/>'],U(this.prepVML(h),null,null,b),j= |
|||
f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:Ha.prototype.html,path:function(a){var b={coordsize:"10 10"}; |
|||
Ia(a)?b.d=a:T(a)&&r(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){var d=this.symbol("circle");if(T(a))c=a.r,b=a.y,a=a.x;d.isCircle=!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(Ea).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol("rect");g.r= |
|||
T(a)?a.r:e;return g.attr(T(a)?a:g.crisp(f,a,b,s(c,0),s(d,0)))},invertChild:function(a,b){var c=b.style;K(a,{flip:"x",left:C(c.width)-1,top:C(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=V(f),i=ca(f),j=V(g),k=ca(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r); |
|||
e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!u(e)||!e.r?f=Ha.prototype.symbols.square.apply(0,arguments):(h=I(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2*h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+h,b,"x","e"]);return f}}};Highcharts.VMLRenderer=F=function(){this.init.apply(this,arguments)};F.prototype=x(Ha.prototype, |
|||
ma);Va=F}var Tb;if($)Highcharts.CanVGRenderer=F=function(){za="http://www.w3.org/1999/xhtml"},F.prototype.symbols={},Tb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Vb(d,a);b.push(c)}}}(),Va=F;Ma.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.series[0]&&a.series[0].names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length|| |
|||
!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?o(e[g],f&&f[g],g):g,e=this.label,m=i.info;a.isDatetimeAxis&&m&&(l=b.dateTimeLabelFormats[m.higherRanks[g]||m.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?ia(fa(f)):f});g=d&&{width:s(1,t(d-2*(h.padding||10)))+"px"};g=r(g,h.style);if(u(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(sa(h.rotation))l.rotation=h.rotation;if(d&& |
|||
h.ellipsis)l._clipHeight=a.len/i.length;this.label=u(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?(this.labelBBox=a.getBBox())[b.horiz?"height":"width"]:0},getLabelSides:function(){var a=this.axis,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.labelAlign]-a.options.labels.x;return[-a,b-a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=d.chart,f=this.isFirst,g=this.isLast,h=b.x,i= |
|||
d.reversed,j=d.tickPositions;if(f||g){var k=this.getLabelSides(),l=k[0],k=k[1],e=e.plotLeft,m=e+d.len,j=(d=d.ticks[j[a+(f?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[f?0:1];f&&!i||g&&i?h+l<e&&(h=e-l,d&&h+k>j&&(c=!1)):h+k>m&&(h=m-k,d&&h+l<j&&(c=!1));b.x=h}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a? |
|||
g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.chart.renderer.fontMetrics(e.style.fontSize).b,p=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);p&&i.side===2&&(b-=m-m*V(p*Ua));!u(e.y)&&!p&&(b+=m-c.getBBox().height/2);l&&(b+=g/(h||1)%l*(i.labelOffset/l));return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L", |
|||
a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+"Grid":"grid",p=h?h+"Tick":"tick",q=e[m+"LineWidth"],n=e[m+"LineColor"],A=e[m+"LineDashStyle"],s=e[p+"Length"],m=e[p+"Width"]||0,u=e[p+"Color"],t=e[p+"Position"],p=this.mark,r=k.step,v=!0,x=d.tickmarkOffset,E=this.getPosition(g,j,x,b),H=E.x,E=E.y,B=g&&H===d.pos+d.len||!g&&E===d.pos?-1:1,C=d.staggerLines;this.isActive=!0;if(q){j= |
|||
d.getPlotLinePath(j+x,q*B,b,!0);if(l===w){l={stroke:n,"stroke-width":q};if(A)l.dashstyle=A;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=q?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?"attr":"animate"]({d:j,opacity:c})}if(m&&s)t==="inside"&&(s=-s),d.opposite&&(s=-s),b=this.getMarkPath(H,E,s,m*B,g,f),p?p.animate({d:b,opacity:c}):this.mark=f.path(b).attr({stroke:u,"stroke-width":m,opacity:c}).add(d.axisGroup);if(i&&!isNaN(H))i.xy=E=this.getLabelPosition(H,E,i,g,k,x,a,r),this.isFirst&& |
|||
!this.isLast&&!o(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!o(e.showLastLabel,1)?v=!1:!C&&g&&k.overflow==="justify"&&!this.handleOverflow(a,E)&&(v=!1),r&&a%r&&(v=!1),v&&!isNaN(E.y)?(E.opacity=c,i[this.isNew?"attr":"animate"](E),this.isNew=!1):i.attr("y",-9999)},destroy:function(){Ka(this,this.axis)}};vb.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=u(j)&&u(i),l=e.value,m=e.dashStyle,p=a.svgElem,q= |
|||
[],n,A=e.color,L=e.zIndex,t=e.events,w=b.chart.renderer;b.isLog&&(j=na(j),i=na(i),l=na(l));if(h){if(q=b.getPlotLinePath(l,h),d={stroke:A,"stroke-width":h},m)d.dashstyle=m}else if(k){if(j=s(j,b.min-d),i=I(i,b.max+d),q=b.getPlotBandPath(j,i,e),d={fill:A},e.borderWidth)d.stroke=e.borderColor,d["stroke-width"]=e.borderWidth}else return;if(u(L))d.zIndex=L;if(p)q?p.animate({d:q},null,p.onGetPath):(p.hide(),p.onGetPath=function(){p.show()});else if(q&&q.length&&(a.svgElem=p=w.path(q).attr(d).add(),t))for(n in e= |
|||
function(b){p.on(b,function(c){t[b].apply(a,[c])})},t)e(n);if(f&&u(f.text)&&q&&q.length&&b.width>0&&b.height>0){f=x({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=w.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation,zIndex:L}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Ja(b);k=Ja(q);g.align(f,!1,{x:c,y:k,width:va(b)-c,height:va(q)-k});g.show()}else g&&g.hide();return a}, |
|||
destroy:function(){ga(this.axis.plotLinesAndBands,this);delete this.axis;Ka(this)}};Mb.prototype={destroy:function(){Ka(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ca(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative, |
|||
g=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=N(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e.attr({visibility:this.options.crop===!1||d.isInsidePlot(f.x,f.y)?Z?"inherit":"visible":"hidden"})}};db.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b", |
|||
month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:G,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#4d759e",fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0, |
|||
gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Aa(this.total,-1)},style:G.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5}, |
|||
title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.xOrY=(this.isXAxis=c)?"x":"y";this.opposite=b.opposite;this.side=this.horiz?this.opposite?0:2:this.opposite?1:3;this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.isLog=e==="logarithmic";this.isDatetimeAxis= |
|||
e==="datetime";this.isLinked=u(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement==="between"?0.5:0;this.ticks={};this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min=this.max=null;var f,d=this.options.events;qa(this,a.axes)===-1&&(a.axes.push(this),a[c?"xAxis":"yAxis"].push(this));this.series=this.series|| |
|||
[];if(a.inverted&&c&&this.reversed===w)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)J(this,f,d[f]);if(this.isLog)this.val2lin=na,this.lin2val=fa},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(M[this.isXAxis?"xAxis":"yAxis"],a))},update:function(a,b){var c=this.chart,a=c.options[this.xOrY+ |
|||
"Axis"][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=w;this.init(c,r(a,{events:w}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){var b=this.chart,c=this.xOrY+"Axis";n(this.series,function(a){a.remove(!1)});ga(b.axes,this);ga(b[c],this);b.options[c].splice(this.options.index,1);n(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},defaultLabelFormatter:function(){var a=this.axis,b=this.value, |
|||
c=a.categories,d=this.dateTimeLabelFormat,e=M.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ca(h,this);else if(c)g=b;else if(d)g=Xa(d,b);else if(f&&a>=1E3)for(;f--&&g===w;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Aa(b/c,-1)+e[f]);g===w&&(g=b>=1E3?Aa(b,0):Aa(b,-1));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();n(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d; |
|||
d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(o(a.dataMin,d[0]),Ja(d)),a.dataMax=s(o(a.dataMax,d[0]),va(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(u(c)&&u(e))a.dataMin=I(o(a.dataMin,c),c),a.dataMax=s(o(a.dataMax,e),e);if(u(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=this.len,h=1,i=0,j=d?this.oldTransA:this.transA, |
|||
d=d?this.oldMin:this.min,k=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!j)j=this.transA;c&&(h*=-1,i=g);this.reversed&&(h*=-1,i-=h*g);b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*j+i+h*k+(sa(f)?j*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a, |
|||
b,c,d){var e=this.chart,f=this.left,g=this.top,h,i,j,a=this.translate(a,null,null,c),k=c&&e.oldChartHeight||e.chartHeight,l=c&&e.oldChartWidth||e.chartWidth,m;h=this.transB;c=i=t(a+h);h=j=t(k-a-h);if(isNaN(a))m=!0;else if(this.horiz){if(h=g,j=k-this.bottom,c<f||c>f+this.width)m=!0}else if(c=f,i=l-this.right,h<g||h>g+this.height)m=!0;return m&&!d?null:e.renderer.crispLine(["M",c,h,"L",i,j],b||0)},getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4], |
|||
c[5],c[1],c[2]):d=null;return d},getLinearTickPositions:function(a,b,c){for(var d,b=ia(P(b/a)*a),c=ia(xa(c/a)*a),e=[];b<=c;){e.push(b);b=ia(b+a);if(b===d)break;d=b}return e},getLogTickPositions:function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=t(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=P(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=na(fa(f)*e[h]),j>b&&(!d|| |
|||
k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=fa(b),c=fa(c),a=e[d?"minorTickInterval":"tickInterval"],a=o(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=ob(a,null,nb(a)),g=Na(this.getLinearTickPositions(a,b,c),na),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c, |
|||
b[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval==="auto")d=d.concat(Eb(Cb(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&d.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===w&&!this.isLog)u(a.min)||u(a.max)?this.minRange=null:(n(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length- |
|||
1;g>0;g--)if(h=i[g]-i[g-1],f===w||h<f)f=h}),this.minRange=I(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,o(a.min,b-d)];if(e)d[2]=this.dataMin;b=va(d);c=[b+k,o(a.max,b+k)];if(e)c[2]=this.dataMax;c=Ja(c);c-b<k&&(d[0]=c-k,d[1]=o(a.min,c-k),b=va(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this.max-this.min,c=0,d,e=0,f=0,g=this.linkedParent,h=this.transA;if(this.isXAxis)g?(e=g.minPointOffset,f=g.pointRangePadding):n(this.series,function(a){var g= |
|||
a.pointRange,h=a.options.pointPlacement,l=a.closestPointRange;g>b&&(g=0);c=s(c,g);e=s(e,ea(h)?0:g/2);f=s(f,h==="on"?0:g);!a.noSharedTooltip&&u(l)&&(d=u(d)?I(d,l):l)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=h;this.translationSlope=this.transA=h=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=h*e},setTickPositions:function(a){var b=this,c= |
|||
b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.minTickInterval,p=d.tickPixelInterval,q,ba=b.categories;h?(b.linkedParent=c[g?"xAxis":"yAxis"][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ka(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,o(b.dataMin,b.min))<=0&& |
|||
ka(10,1),b.min=ia(na(b.min)),b.max=ia(na(b.max));if(b.range&&(b.userMin=b.min=s(b.min,b.max-b.range),b.userMax=b.max,a))b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!ba&&!b.usePercentage&&!h&&u(b.min)&&u(b.max)&&(c=b.max-b.min)){if(!u(d.min)&&!u(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!u(d.max)&&!u(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&p===b.linkedParent.options.tickPixelInterval? |
|||
b.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=o(l,ba?1:(b.max-b.min)*p/s(b.len,p)),!u(l)&&b.len<p&&!this.isRadial&&(q=!0,b.tickInterval/=4));g&&!a&&n(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=s(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<m)b.tickInterval= |
|||
m;if(!f&&!e&&!l)b.tickInterval=ob(b.tickInterval,null,nb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval==="auto"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>s(2*b.len,200)&&ka(19,!0),a=f?(b.getNonLinearTimeTicks||Eb)(Cb(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval, |
|||
b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),q&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(b.min-=0.001,b.max+=0.001)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.xOrY,this.pos,this.len].join("-");if(!this.isLinked&&!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!== |
|||
!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(ia(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(u(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax= |
|||
this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;n(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)delete a[b];this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!== |
|||
this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=o(c,!0),e=r(e,{min:a,max:b});z(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){this.allowZoomOutside||(u(this.dataMin)&&a<=this.dataMin&&(a=w),u(this.dataMax)&&b>=this.dataMax&&(b=w));this.displayBtn=a!==w||b!==w;this.setExtremes(a, |
|||
b,!1,w,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=o(b.left,a.plotLeft+c);this.top=f=o(b.top,a.plotTop);this.width=c=o(b.width,a.plotWidth-c+d);this.height=b=o(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=s(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog;return{min:a?ia(fa(this.min)):this.min,max:a?ia(fa(this.max)):this.max,dataMin:this.dataMin, |
|||
dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?fa(this.min):this.min,b=b?fa(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},addPlotBand:function(a){this.addPlotBandOrLine(a,"plotBands")},addPlotLine:function(a){this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(a,b){var c=(new vb(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c}, |
|||
autoLabelAlign:function(a){a=(o(a,0)-this.side*90+720)%360;return a>15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,p=d.title,q=d.labels,ba=0,A=b.axisOffset,L=b.clipOffset,t=[-1,1,1,-1][h],r,v=1,x=o(q.maxStaggerLines,5),la,E,H,B;a.hasData=j=a.hasVisibleSeries||u(a.min)&&u(a.max)&&!!e;a.showAxis=b=j||o(d.showEmpty,!0);a.staggerLines=a.horiz&&q.staggerLines; |
|||
if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:q.zIndex||7}).add();if(j||a.isLinked){a.labelAlign=o(q.align||a.autoLabelAlign(q.rotation));n(e,function(b){f[b]?f[b].addLabel():f[b]=new Ma(a,b)});if(a.horiz&&!a.staggerLines&&x&&!q.rotation){for(r=a.reversed?[].concat(e).reverse():e;v<x;){j=[];la=!1;for(q=0;q<r.length;q++)E=r[q],H=(H=f[E].label&&f[E].label.getBBox())?H.width: |
|||
0,B=q%v,H&&(E=a.translate(E),j[B]!==w&&E<j[B]&&(la=!0),j[B]=E+H);if(la)v++;else break}if(v>1)a.staggerLines=v}n(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)ba=s(f[b].getLabelSize(),ba)});if(a.staggerLines)ba*=a.staggerLines,a.labelOffset=ba}else for(r in f)f[r].destroy(),delete f[r];if(p&&p.text&&p.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(p.text,0,0,p.useHTML).attr({zIndex:7,rotation:p.rotation||0,align:p.textAlign||{low:"left",middle:"center",high:"right"}[p.align]}).css(p.style).add(a.axisGroup), |
|||
a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],m=o(p.margin,g?5:10),l=p.offset;a.axisTitle[b?"show":"hide"]()}a.offset=t*o(d.offset,A[h]);a.axisTitleMargin=o(l,ba+m+(h!==2&&ba&&t*d.labels[g?"y":"x"]));A[h]=s(A[h],a.axisTitleMargin+k+t*a.offset);L[i]=s(L[i],P(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M", |
|||
e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=C(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this, |
|||
b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.stacks,j=a.ticks,k=a.minorTicks,l=a.alternateBands,m=d.stackLabels,p=d.alternateGridColor,q=a.tickmarkOffset,o=d.lineWidth,A,s=b.hasRendered&&u(a.oldMin)&&!isNaN(a.oldMin);A=a.hasData;var t=a.showAxis,r,v;n([j,k,l],function(a){for(var b in a)a[b].isActive=!1});if(A||f)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Ma(a,b,"minor"));s&&k[b].isNew&&k[b].render(null, |
|||
!0);k[b].render(null,!1,1)}),g.length&&(n(g.slice(1).concat([g[0]]),function(b,c){c=c===g.length-1?0:c+1;if(!f||b>=a.min&&b<=a.max)j[b]||(j[b]=new Ma(a,b)),s&&j[b].isNew&&j[b].render(c,!0),j[b].render(c,!1,1)}),q&&a.min===0&&(j[-1]||(j[-1]=new Ma(a,-1,null,!0)),j[-1].render(-1))),p&&n(g,function(b,c){if(c%2===0&&b<a.max)l[b]||(l[b]=new vb(a)),r=b+q,v=g[c+1]!==w?g[c+1]+q:a.max,l[b].options={from:e?fa(r):r,to:e?fa(v):v,color:p},l[b].render(),l[b].isActive=!0}),!a._addedPlotLB)n((d.plotLines||[]).concat(d.plotBands|| |
|||
[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;n([j,k,l],function(a){var c,d,e=[],f=Fa?Fa.duration||500:0,g=function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])};for(c in a)if(!a[c].isActive)a[c].render(c,!1,0),a[c].isActive=!1,e.push(c);a===l||!b.hasRendered||!f?g():f&&setTimeout(g,f)});if(o)A=a.getLinePath(o),a.axisLine?a.axisLine.animate({d:A}):a.axisLine=c.path(A).attr({stroke:d.lineColor,"stroke-width":o,zIndex:7}).add(a.axisGroup),a.axisLine[t? |
|||
"show":"hide"]();if(h&&t)h[h.isNew?"attr":"animate"](a.getTitlePosition()),h.isNew=!1;if(m&&m.enabled){var x,la,d=a.stackTotalGroup;if(!d)a.stackTotalGroup=d=c.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();d.translate(b.plotLeft,b.plotTop);for(x in i)for(la in c=i[x],c)c[la].render(d)}a.isDirty=!1},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();n([c.plotLines||[],d.plotLines||[],c.plotBands|| |
|||
[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ga(b,b[e])})},setTitle:function(a,b){this.update({title:a},b)},redraw:function(){var a=this.chart.pointer;a.reset&&a.reset(!0);this.render();n(this.plotLinesAndBands,function(a){a.render()});n(this.series,function(a){a.isDirty=!0})},buildStacks:function(){var a=this.series,b=a.length;if(!this.isXAxis){for(;b--;)a[b].setStackedPoints();if(this.usePercentage)for(b=0;b<a.length;b++)a[b].setPercentStacks()}},setCategories:function(a,b){this.update({categories:a}, |
|||
b)},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||aa(b);for(d in c)Ka(c[d]),c[d]=null;n([b.ticks,b.minorTicks,b.alternateBands],function(a){Ka(a)});for(a=e.length;a--;)e[a].destroy();n("stackTotalGroup,axisLine,axisGroup,gridGroup,labelGroup,axisTitle".split(","),function(a){b[a]&&(b[a]=b[a].destroy())})}};wb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=C(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label= |
|||
a.renderer.label("",0,0,b.shape,null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-999});$||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){n(this.crosshairs,function(a){a&&a.destroy()});if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden; |
|||
r(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(N(a-f.x)>1||N(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},o(this.options.hideDelay,500)),b&&n(b,function(a){a.setState()}),this.chart.hoverPoints= |
|||
null},hideCrosshairs:function(){n(this.crosshairs,function(a){a&&a.hide()})},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=ja(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===w&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(n(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g: |
|||
h]);return Na(c,t)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=o(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+s(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=s(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ja(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];n(b,function(a){c=a.series;d.push(c.tooltipFormatter&& |
|||
c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=e.crosshairs,m=this.shared;clearTimeout(this.hideTimer);this.followPointer=ja(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];m&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&n(h, |
|||
function(a){a.setState()}),n(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Wa(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);if(l){l=ja(l);for(d=l.length;d--;)if(m=a.series,e=m[d?"yAxis":"xAxis"],l[d]&&e)if(h=d?o(a.stackY,a.y):a.x, |
|||
e.isLog&&(h=na(h)),d===1&&m.modifyValue&&(h=m.modifyValue(h)),e=e.getPlotLinePath(h,1),this.crosshairs[d])this.crosshairs[d].attr({d:e,visibility:"visible"});else{h={"stroke-width":l[d].width||1,stroke:l[d].color||"#C0C0C0",zIndex:l[d].zIndex||2};if(l[d].dashStyle)h.dashstyle=l[d].dashStyle;this.crosshairs[d]=c.renderer.path(e).attr(h).add()}}z(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner|| |
|||
this.getPosition).call(this,c.width,c.height,a);this.move(t(c.x),t(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}};xb.prototype={init:function(a,b){var c=b.chart,d=c.events,e=$?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new wb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c, |
|||
d,a=a||O.event;if(!a.target)a.target=a.srcElement;a=Xb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Wb(this.chart.container);d.pageX===w?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return r(a,{chartX:t(c),chartY:t(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};n(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted? |
|||
b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f=b.hoverPoint,g=b.hoverSeries,h,i,j=b.chartWidth,k=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!g||!g.noSharedTooltip)){e=[];h=c.length;for(i=0;i<h;i++)if(c[i].visible&&c[i].options.enableMouseTracking!==!1&&!c[i].noSharedTooltip&&c[i].tooltipPoints.length&&(b=c[i].tooltipPoints[k])&&b.series)b._dist=N(k-b.clientX),j=I(j,b._dist),e.push(b);for(h=e.length;h--;)e[h]._dist> |
|||
j&&e.splice(h,1);if(e.length&&e[0].clientX!==this.hoverX)d.refresh(e,a),this.hoverX=e[0].clientX}if(g&&g.tracker){if((b=g.tooltipPoints[k])&&b!==f)b.onMouseOver(a)}else d&&d.followPointer&&!d.isHidden&&(a=d.getAnchor([{}],a),d.updatePosition({plotX:a[0],plotY:a[1]}))},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,b=e&&e.shared?b.hoverPoints:d;(a=a&&e&&b)&&ja(b)[0].plotX===w&&(a=!1);if(a)e.refresh(b);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&(e.hide(),e.hideCrosshairs()); |
|||
this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;n(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslateDirection:function(a,b,c,d,e,f,g){var h=this.chart,i=a?"x":"y",j=a?"X":"Y",k="chart"+j,l=a?"width":"height",m=h["plot"+(a?"Left":"Top")],p,q,o=1,n=h.inverted,s=h.bounds[a?"h":"v"], |
|||
t=b.length===1,u=b[0][k],r=c[0][k],w=!t&&b[1][k],v=!t&&c[1][k],x,c=function(){!t&&N(u-w)>20&&(o=N(r-v)/N(u-w));q=(m-r)/o+u;p=h["plot"+(a?"Width":"Height")]/o};c();b=q;b<s.min?(b=s.min,x=!0):b+p>s.max&&(b=s.max-p,x=!0);x?(r-=0.8*(r-g[i][0]),t||(v-=0.8*(v-g[i][1])),c()):g[i]=[r,v];n||(f[i]=q-m,f[l]=p);f=n?1/o:o;e[l]=p;e[i]=b;d[n?a?"scaleY":"scaleX":"scale"+j]=o;d["translate"+j]=f*m+(r-f*u)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches, |
|||
g=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},p=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),q={};(k||e)&&!p&&a.preventDefault();Na(f,function(a){return b.normalize(a)});if(a.type==="touchstart")n(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],n(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"], |
|||
d=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=s(e,f);b.min=I(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:pa},c.plotBox);i&&b.pinchTranslateDirection(!0,d,f,m,l,q,h);j&&b.pinchTranslateDirection(!1,d,f,m,l,q,h);b.hasPinched=k;b.scaleGroups(m,q);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY= |
|||
this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,p=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(p-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,p-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g? |
|||
1:k,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:N(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-p,this.selectionMarker.attr({height:N(d),y:(d>0?0:d)+p}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged|| |
|||
c)n(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.xOrY+"Axis"].push({axis:a,min:I(c,b),max:s(c,b)}),h=!0)}}),h&&z(b,"selection",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)K(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a= |
|||
this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);a.returnValue= |
|||
!1;b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=v(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries;if(b&&!b.options.stickyTracking&&!this.inClass(a.toElement||a.relatedTarget,"highcharts-tooltip"))b.onMouseOut()}, |
|||
onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&&this.inClass(a.target,"highcharts-tracker")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f?b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),z(c.series,"click",r(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&z(b,"click",a))},onContainerTouchStart:function(a){var b= |
|||
this.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,"onmousedown","onContainerMouseDown"],[b,"onmousemove","onContainerMouseMove"],[b,"onclick", |
|||
"onContainerClick"],[b,"mouseleave","onContainerMouseLeave"],[y,"mousemove","onDocumentMouseMove"],[y,"mouseup","onDocumentMouseUp"]];ib&&c.push([b,"ontouchstart","onContainerTouchStart"],[b,"ontouchmove","onContainerTouchMove"],[y,"touchend","onDocumentTouchEnd"]);n(c,function(b){a["_"+b[2]]=function(c){a[b[2]](c)};b[1].indexOf("on")===0?b[0][b[1]]=a["_"+b[2]]:J(b[0],b[1],a["_"+b[2]])})},destroy:function(){var a=this;n(a._events,function(b){b[1].indexOf("on")===0?b[0][b[1]]=null:aa(b[0],b[1],a["_"+ |
|||
b[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};eb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=o(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=C(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=x(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.render(),J(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options, |
|||
d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.color:g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==w&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x= |
|||
e,f.y=d},destroyItem:function(a){var b=a.checkbox;n(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ta(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,n(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,K(f,{left:b.translateX+e.legendItemWidth+f.x- |
|||
20+"px",top:g+"px",display:g>c-6&&g<c+d-6?"":S}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var B;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout==="horizontal", |
|||
g=e.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle,k=b.padding,l=f?o(e.itemDistance,8):0,m=!e.rtl,p=e.width,q=e.itemMarginBottom||0,n=b.itemMarginTop,A=b.initialItemX,t=a.legendItem,u=a.series||a,r=u.options,w=r.showCheckbox,v=e.useHTML;if(!t&&(a.legendGroup=d.g("legend-item").attr({zIndex:1}).add(b.scrollGroup),u.drawLegendSymbol(b,a),a.legendItem=t=d.text(e.labelFormat?Ca(e.labelFormat,a):e.labelFormatter.call(a),m?g+h:-h,b.baseline,v).css(x(a.visible?i:j)).attr({align:m?"left": |
|||
"right",zIndex:2}).add(a.legendGroup),(v?t:a.legendGroup).on("mouseover",function(){a.setState("hover");t.css(b.options.itemHoverStyle)}).on("mouseout",function(){t.css(a.visible?i:j);a.setState()}).on("click",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):z(a,"legendItemClick",b,c)}),b.colorizeItem(a,a.visible),r&&w))a.checkbox=U("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container), |
|||
J(a.checkbox,"click",function(b){z(a,"checkboxClick",{checked:b.target.checked},function(){a.select()})});d=t.getBBox();B=a.legendItemWidth=e.itemWidth||g+h+d.width+l+(w?20:0),e=B;b.itemHeight=g=d.height;if(f&&b.itemX-A+e>(p||c.chartWidth-2*k-A))b.itemX=A,b.itemY+=n+b.lastLineHeight+q,b.lastLineHeight=0;b.maxItemWidth=s(b.maxItemWidth,e);b.lastItemY=n+b.itemY+q;b.lastLineHeight=s(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=n+g+q,b.lastLineHeight=g);b.offsetWidth= |
|||
p||s((f?b.itemX-A-l:e)+k,b.offsetWidth)},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=[];n(b.series,function(a){var b=a.options;b.showInLegend&&!u(b.linkedTo)&&(e=e.concat(a.legendItems|| |
|||
(b.legendType==="point"?a.data:a)))});Kb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp(null,null,null,g,h)),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor, |
|||
"stroke-width":l||0,fill:m||S}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h=this.clipRect,i=e.navigation,j=o(i.animation,!0),k=i.arrowSize||12,l=this.nav;e.layout=== |
|||
"horizontal"&&(f/=2);g&&(f=I(f,g));if(a>f&&!e.useHTML){this.clipHeight=c=f-20-this.titleHeight;this.pageCount=xa(a/c);this.currentPage=o(this.currentPage,1);this.fullHeight=a;if(!h)h=b.clipRect=d.clipRect(0,0,9999,0),b.contentGroup.clip(h);h.attr({height:c});if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,k,k).on("click",function(){b.scroll(-1,j)}).add(l),this.pager=d.text("",15,10).css(i.style).add(l),this.down=d.symbol("triangle-down",0,0,k,k).on("click", |
|||
function(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else if(l)h.attr({height:c.chartHeight}),l.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pageCount,d=this.currentPage+a,e=this.clipHeight,f=this.options.navigation,g=f.activeColor,h=f.inactiveColor,f=this.pager,i=this.padding;d>c&&(d=c);if(d>0)b!==w&&La(b,this.chart),this.nav.attr({translateX:i,translateY:e+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:d===1?h:g}).css({cursor:d=== |
|||
1?"default":"pointer"}),f.attr({text:d+"/"+this.pageCount}),this.down.attr({x:18+this.pager.getBBox().width,fill:d===c?h:g}).css({cursor:d===c?"default":"pointer"}),e=-I(e*(d-1),this.fullHeight-e+i)+1,this.scrollGroup.animate({translateY:e}),f.attr({text:d+"/"+c}),this.currentPage=d,this.positionCheckboxes(e)}};/Trident.*?11\.0/.test(oa)&&mb(eb.prototype,"positionItem",function(a,b){var c=this;setTimeout(function(){a.call(c,b)})});yb.prototype={init:function(a,b){var c,d=a.series;a.series=null;c= |
|||
x(M,a);c.series=a.series=d;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ga.length;Ga.push(f);d.reflow!==!1&&J(f,"load",function(){f.initReflow()});if(e)for(g in e)J(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=$?!1:o(d.animation,!0);f.pointCount=0;f.counters=new Jb;f.firstRender()}, |
|||
initSeries:function(a){var b=this.options.chart;(b=W[a.type||b.type||b.defaultSeriesType])||ka(17,!0);b=new b;b.init(this,a);return b},addSeries:function(a,b,c){var d,e=this;a&&(b=o(b,!0),z(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new db(this,x(a,{index:this[e].length,isX:b}));f[e]=ja(f[e]||{});f[e].push(a);o(c,!0)&&this.redraw(d)},isInsidePlot:function(a,b, |
|||
c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,m=l.isHidden(),p=[];La(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0; |
|||
break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();n(b,function(a){a.isDirty&&(i=!0)});n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,p.push(function(){z(a,"afterSetExtremes",r(a.eventArgs, |
|||
a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();z(this,"redraw");m&&this.cloneRenderTo(!0);n(p,function(a){a.call()})},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=U(Ea,{className:"highcharts-loading"},r(d.style,{zIndex:10,display:S}),this.container),this.loadingSpan=U("span",null,d.labelStyle,c);this.loadingSpan.innerHTML= |
|||
a||b.lang.loading;if(!this.loadingShown)K(c,{opacity:0,display:"",left:this.plotLeft+"px",top:this.plotTop+"px",width:this.plotWidth+"px",height:this.plotHeight+"px"}),Bb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Bb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){K(b,{display:S})}});this.loadingShown=!1},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id=== |
|||
a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ja(b.xAxis||{}),b=b.yAxis=ja(b.yAxis||{});n(c,function(a,b){a.index=b;a.isX=!0});n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new db(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(ub(b.points||[], |
|||
function(a){return a.selected}))});return a},getSelectedSeries:function(){return ub(this.series,function(a){return a.selected})},getStacks:function(){var a=this;n(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});n(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+o(b.options.stack,"")})},showResetZoom:function(){var a=this,b=M.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo=== |
|||
"chart"?null:"plotBox";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;z(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?n(this.axes,function(a){b=a.zoom()}):n(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?"zoomX":"zoomY"]||c[h?"pinchX":"pinchY"])b= |
|||
e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&T(e))this.resetZoomButton=e.destroy();b&&this.redraw(o(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&n(d,function(a){a.setState()});n(b==="xy"?[1,0]:[1],function(b){var d=a[b?"chartX":"chartY"],h=c[b?"xAxis":"yAxis"][0],i=c[b?"mouseDownX":"mouseDownY"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+ |
|||
c[b?"plotWidth":"plotHeight"]-d,!0)-j;h.series.length&&l>I(k.dataMin,k.min)&&i<s(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:"pan"}),e=!0);c[b?"mouseDownX":"mouseDownY"]=d});e&&c.redraw(!1);K(c.container,{cursor:"move"})},setTitle:function(a,b){var f;var c=this,d=c.options,e;e=d.title=x(d.title,a);f=d.subtitle=x(d.subtitle,b),d=f;n([["title",a,e],["subtitle",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(c[b]=d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align, |
|||
"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add())});c.layOutTitles()},layOutTitles:function(){var a=0,b=this.title,c=this.subtitle,d=this.options,e=d.title,d=d.subtitle,f=this.spacingBox.width-44;if(b&&(b.css({width:(e.width||f)+"px"}).align(r({y:15},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign))a=b.getBBox().height,a>=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+"px"}).align(r({y:a+e.margin},d),!1,"spacingBox"),!d.floating&&!d.verticalAlign&&(a=xa(a+c.getBBox().height)));this.titleOffset= |
|||
a},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=jb(b,"width");this.containerHeight=jb(b,"height");this.chartWidth=s(0,a.width||this.containerWidth||600);this.chartHeight=s(0,o(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ta(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone= |
|||
b=this.renderTo.cloneNode(0),K(b,{position:"absolute",top:"-9999px",display:"block"}),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+zb++;if(ea(a))this.renderTo=a=y.getElementById(a);a||ka(13,!0);c=C(v(a,"data-highcharts-chart"));!isNaN(c)&&Ga[c]&&Ga[c].destroy();v(a,"data-highcharts-chart",this.index);a.innerHTML="";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight; |
|||
this.container=a=U(Ea,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},r({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new Ha(a,c,d,!0):new Va(a,c,d);$&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend, |
|||
f=o(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!u(d[0]))this.plotTop=s(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!u(d[1]))this.marginRight=s(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!u(d[3]))this.plotLeft=s(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!u(d[0]))this.plotTop=s(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!u(d[2]))this.marginBottom= |
|||
s(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});u(d[3])||(this.plotLeft+=b[3]);u(d[0])||(this.plotTop+=b[0]);u(d[2])||(this.marginBottom+=b[2]);u(d[1])||(this.marginRight+=b[1]);this.setChartSize()},initReflow:function(){function a(a){var g=c.width||jb(d,"width"),h=c.height||jb(d,"height"),a=a?a.target:O;if(!b.hasUserSize&& |
|||
g&&h&&(a===O||a===y)){if(g!==b.containerWidth||h!==b.containerHeight)clearTimeout(e),b.reflowTimeout=e=setTimeout(function(){if(b.container)b.setSize(g,h,!1),b.hasUserSize=null},100);b.containerWidth=g;b.containerHeight=h}}var b=this,c=b.options.chart,d=b.renderTo,e;b.reflow=a;J(O,"resize",a);J(b,"destroy",function(){aa(O,"resize",a)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&z(d,"endResize",null,function(){d.isResizing-=1})};La(c,d);d.oldChartHeight=d.chartHeight; |
|||
d.oldChartWidth=d.chartWidth;if(u(a))d.chartWidth=e=s(0,t(a)),d.hasUserSize=!!e;if(u(b))d.chartHeight=f=s(0,t(b));K(d.container,{width:e+"px",height:f+"px"});d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;n(d.axes,function(a){a.isDirty=!0;a.setScale()});n(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c);d.oldChartHeight=null;z(d,"resize");Fa===!1?g():setTimeout(g,Fa&&Fa.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer, |
|||
d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=t(this.plotLeft);this.plotTop=j=t(this.plotTop);this.plotWidth=k=s(0,t(d-i-this.marginRight));this.plotHeight=l=s(0,t(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*P(this.plotBorderWidth/2); |
|||
b=xa(s(d,h[3])/2);c=xa(s(d,h[0])/2);this.clipBox={x:b,y:c,width:P(this.plotSizeX-s(d,h[1])/2-b),height:P(this.plotSizeY-s(d,h[2])/2-c)};a||n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=o(b[0],a[0]);this.marginRight=o(b[1],a[1]);this.marginBottom=o(b[2],a[2]);this.plotLeft=o(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth, |
|||
d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,p,q=this.plotLeft,o=this.plotTop,n=this.plotWidth,s=this.plotHeight,t=this.plotBox,u=this.clipRect,r=this.clipBox;p=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-p,d-p));else{e={fill:j||S};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(p/2,p/ |
|||
2,c-p,d-p,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(t):this.plotBackground=b.rect(q,o,n,s,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(t):this.plotBGImage=b.image(l,q,o,n,s).add();u?u.animate({width:r.width,height:r.height}):this.clipRect=b.clipRect(r);if(m)g?g.animate(g.crisp(null,q,o,n,s)):this.plotBorder=b.rect(q,o,n,s,0,-m).attr({stroke:a.plotBorderColor,"stroke-width":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart, |
|||
c,d=a.options.series,e,f;n(["inverted","angular","polar"],function(g){c=W[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=W[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;n(b,function(a){a.linkedSeries.length=0});n(b,function(b){var d=b.options.linkedTo;if(ea(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options, |
|||
e=d.labels,f=d.credits,g;a.setTitle();a.legend=new eb(a,d.legend);a.getStacks();n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&n(e.items,function(b){var d=r(e.style,b.style), |
|||
f=C(d.left)+a.plotLeft,g=C(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;z(a,"destroy");Ga[a.index]=w;a.renderTo.removeAttribute("data-highcharts-chart");aa(a);for(e= |
|||
b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",aa(d),f&&Ta(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!Z&&O==O.top&&y.readyState!=="complete"||$&&!O.canvg?($?Tb.push(function(){a.firstRender()}, |
|||
a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange",function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),z(a,"init"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),n(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),z(a,"beforeRender"),a.pointer=new xb(a,b),a.render(),a.renderer.draw(),c&&c.apply(a, |
|||
[a]),n(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),z(a,"load")},splashArray:function(a,b){var c=b[a],c=T(c)?c:[c,c,c,c];return[o(b[a+"Top"],c[0]),o(b[a+"Right"],c[1]),o(b[a+"Bottom"],c[2]),o(b[a+"Left"],c[3])]}};yb.prototype.callbacks=[];var Pa=function(){};Pa.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter= |
|||
0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Pa.prototype.optionsToObject.call(this,a);r(this,a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===w&&c)this.x=b===w?c.autoIncrement():b;return this},optionsToObject:function(a){var b,c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b={y:a};else if(Ia(a)){b={};if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c=== |
|||
"number")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a==="object"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ga(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)aa(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a= |
|||
"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series,e=d.chart,a=o(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[qa(c,d.data)]= |
|||
c.options;c.setState(a&&"select");b||n(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[qa(a,d.data)]=a.options,a.setState(""),a.firePointEvent("unselect")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(e&&e!==this)e.onMouseOut();this.firePointEvent("mouseOver");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState("hover");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints; |
|||
if(!b||qa(this,b)===-1)this.firePointEvent("mouseOut"),this.setState(),a.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=o(c.valueDecimals,""),e=c.valuePrefix||"",f=c.valueSuffix||"";n(b.pointArrayMap||["y"],function(b){b="{point."+b;if(e||f)a=a.replace(b+"}",e+b+"}"+f);a=a.replace(b+"}",b+":,."+d+"f}")});return Ca(a,{point:this,series:this.series})},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=o(b,!0);d.firePointEvent("update", |
|||
{options:a},function(){d.applyOptions(a);if(T(a)&&(e.getAttribs(),f))a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||""]);g=qa(d,h);e.xData[g]=d.x;e.yData[g]=e.toYData?e.toYData(d):d.y;e.zData[g]=d.z;j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType==="point"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;La(b,f);a=o(a,!0);c.firePointEvent("remove", |
|||
null,function(){g=qa(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.xData.splice(g,1);d.yData.splice(g,1);d.zData.splice(g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});z(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a= |
|||
x(this.series.options.point,this.options).events,b;this.events=a;for(b in a)J(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=Y[d.type].marker&&d.options.marker,g=f&&!f.enabled,h=f&&f.states[a],i=h&&h.enabled===!1,j=d.stateMarkerGraphic,k=this.marker||{},l=d.chart,m=this.pointAttr,a=a||"";if(!(a===this.state||this.selected&&a!=="select"||e[a]&&e[a].enabled===!1||a&&(i||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&& |
|||
m[a].r,this.graphic.attr(x(m[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a&&h)e=h.radius,k=k.symbol||d.symbol,j&&j.currentSymbol!==k&&(j=j.destroy()),j?j.attr({x:b-e,y:c-e}):(d.stateMarkerGraphic=j=l.renderer.symbol(k,b-e,c-e,2*e,2*e).attr(m[a]).add(d.markerGroup),j.currentSymbol=k);if(j)j[a&&l.isInsidePlot(b,c)?"show":"hide"]()}this.state=a}}};var Q=function(){};Q.prototype={isCartesian:!0,type:"line",pointClass:Pa,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth", |
|||
fill:"fillColor",r:"radius"},colorCounter:0,init:function(a,b){var c,d,e=a.series;this.chart=a;this.options=b=this.setOptions(b);this.linkedSeries=[];this.bindAxes();r(this,{name:b.name,state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if($)b.animation=!1;d=b.events;for(c in d)J(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor();this.getSymbol();this.setData(b.data,!1);if(this.isCartesian)a.hasCartesianSeries= |
|||
!0;e.push(this);this._i=e.length-1;Kb(e,function(a,b){return o(a.options.index,a._i)-o(b.options.index,a._i)});n(e,function(a,b){a.index=b;a.name=a.name||"Series "+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&n(["xAxis","yAxis"],function(e){n(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==w&&b[e]===d.id||b[e]===w&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});a[e]||ka(18,!0)})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=o(b,a.pointStart, |
|||
0);this.pointInterval=o(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else n(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=c[this.type];this.userOptions=a;a=x(d,c.series, |
|||
a);this.tooltipOptions=x(b.tooltip,a.tooltip);d.marker===null&&delete a.marker;return a},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)u(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)u(a._symbolIndex)? |
|||
a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:function(a){var b=this.options,c=b.marker,d=a.options,e;e=d.symbolWidth;var f=this.chart.renderer,g=this.legendGroup,a=a.baseline-t(f.fontMetrics(d.itemStyle.fontSize).b*0.3);if(b.lineWidth){d={"stroke-width":b.lineWidth};if(b.dashStyle)d.dashstyle=b.dashStyle;this.legendLine=f.path(["M",0,a,"L",e,a]).attr(d).add(g)}if(c&&c.enabled)b=c.radius,this.legendSymbol= |
|||
e=f.symbol(this.symbol,e/2-b,a-b,2*b,2*b).add(g),e.isMarker=!0},addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xData,k=this.yData,l=this.zData,m=this.names,p=g&&g.shift||0,q=e.data,s;La(d,i);c&&n([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=p+1});if(h)h.isArea=!0;b=o(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=j.length;if(this.requireSorting&&g<j[h-1])for(s=!0;h&&j[h-1]>g;)h--;j.splice(h,0,g); |
|||
k.splice(h,0,this.toYData?this.toYData(d):d.y);l.splice(h,0,d.z);if(m)m[g]=d.name;q.splice(h,0,a);s&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),j.shift(),k.shift(),l.shift(),q.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},setData:function(a,b){var c=this.points,d=this.options,e=this.chart,f=null,g=this.xAxis,h=g&&g.categories&&!g.categories.length?[]:null,i;this.xIncrement= |
|||
null;this.pointRange=g&&g.categories?1:d.pointRange;this.colorCounter=0;var j=[],k=[],l=[],m=a?a.length:[];i=o(d.turboThreshold,1E3);var p=this.pointArrayMap,p=p&&p.length,q=!!this.toYData;if(i&&m>i){for(i=0;f===null&&i<m;)f=a[i],i++;if(sa(f)){f=o(d.pointStart,0);d=o(d.pointInterval,1);for(i=0;i<m;i++)j[i]=f,k[i]=a[i],f+=d;this.xIncrement=f}else if(Ia(f))if(p)for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d.slice(1,p+1);else for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d[1];else ka(12)}else for(i=0;i<m;i++)if(a[i]!== |
|||
w&&(d={series:this},this.pointClass.prototype.applyOptions.apply(d,[a[i]]),j[i]=d.x,k[i]=q?this.toYData(d):d.y,l[i]=d.z,h&&d.name))h[d.x]=d.name;ea(k[0])&&ka(14,!0);this.data=[];this.options.data=a;this.xData=j;this.yData=k;this.zData=l;this.names=h;for(i=c&&c.length||0;i--;)c[i]&&c[i].destroy&&c[i].destroy();if(g)g.minRange=g.userMinRange;this.isDirty=this.isDirtyData=e.isDirtyBox=!0;o(b,!0)&&e.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,z(c,"remove", |
|||
null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=this.isCartesian;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(k&&this.sorted&&(!j||d>j||this.forceCrop))if(a=h.min,h=h.max,b[d-1]<a||b[0]>h)b=[],c=[];else if(b[0]<a||b[d-1]>h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start, |
|||
f=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===w||d<g)?g=d:d<0&&this.requireSorting&&ka(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=o(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=s(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data, |
|||
b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(ja(e[m]))):(b[i]?k=b[i]:a[i]!==w&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&&(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=w;this.data=b;this.points=l},setStackedPoints:function(){if(this.options.stacking&& |
|||
!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i="-"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,m=k.oldStacks,p,q,o,n,t;for(o=0;o<d;o++){n=a[o];t=b[o];q=(p=j&&t<f)?i:h;l[q]||(l[q]={});if(!l[q][n])m[q]&&m[q][n]?(l[q][n]=m[q][n],l[q][n].total=null):l[q][n]=new Mb(k,k.options.stackLabels,p,n,g,e);q=l[q][n];q.points[this.index]=[q.cum||0];e==="percent"? |
|||
(p=p?h:i,j&&l[p]&&l[p][n]?(p=l[p][n],q.total=p.total=s(p.total,q.total)+N(t)||0):q.total+=N(t)||0):q.total+=t||0;q.cum=(q.cum||0)+(t||0);q.points[this.index].push(q.cum);c[o]=q.cum}if(e==="percent")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}},setPercentStacks:function(){var a=this,b=a.stackKey,c=a.yAxis.stacks;n([b,"-"+b],function(b){var d;for(var e=a.xData.length,f,g;e--;)if(f=a.xData[e],d=(g=c[b]&&c[b][f])&&g.points[a.index],f=d)g=g.total?100/g.total:0,f[0]=ia(f[0]*g),f[1]=ia(f[1]*g), |
|||
a.stackedYData[e]=f[1]})},getExtremes:function(){var a=this.yAxis,b=this.processedXData,c=this.stackedYData||this.processedYData,d=c.length,e=[],f=0,g=this.xAxis.getExtremes(),h=g.min,g=g.max,i,j,k,l;for(l=0;l<d;l++)if(j=b[l],k=c[l],i=k!==null&&k!==w&&(!a.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(b[l+1]||j)>=h&&(b[l-1]||j)<=g,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=o(void 0,Ja(e));this.dataMax=o(void 0,va(e))},translate:function(){this.processedXData|| |
|||
this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||sa(i),k=a.threshold,a=0;a<g;a++){var l=f[a],m=l.x,p=l.y,q=l.low,n=e.stacks[(this.negStacks&&p<k?"-":"")+this.stackKey];if(e.isLog&&p<=0)l.y=p=null;l.plotX=c.translate(m,0,0,0,1,i,this.type==="flags");if(b&&this.visible&&n&&n[m])n=n[m],p=n.points[this.index],q=p[0],p=p[1],q===0&&(q=o(k,e.min)),e.isLog&& |
|||
q<=0&&(q=null),l.percentage=b==="percent"&&p,l.total=l.stackTotal=n.total,l.stackY=p,n.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=u(q)?e.translate(q,0,1,0,1):null;h&&(p=this.modifyValue(p,l));l.plotY=typeof p==="number"&&p!==Infinity?e.translate(p,0,1,0,1):w;l.clientX=j?c.translate(m,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==w?d[l.x]:l.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX, |
|||
h,i,j=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;n(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===w?0:d+1;for(d=b[i+1]?I(s(0,P((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat, |
|||
d=b.dateTimeLabelFormats,e=this.xAxis,f=e&&e.options.type==="datetime",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!c)if(e)for(g in D){if(D[g]>=e){c=d[g];break}}else c=d.day;f&&c&&sa(a.key)&&(b=b.replace("{point.key}","{point.key:"+c+"}"));return Ca(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&z(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options, |
|||
b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&z(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!T(e))e=Y[b.type].animation;h="_sharedClip"+e.duration+e.easing;if(a)a=c[h],e=c[h+"m"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+"m"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g? |
|||
c.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+"m"].animate({width:c.plotSizeX+99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()},e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+"m"]=a[b+"m"].destroy())},100)},drawPoints:function(){var a, |
|||
b=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m,p=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=P(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled===w||i.enabled,m=c.isInsidePlot(t(d),e,c.inverted),a&&e!==w&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""],h=a.r,i=o(i.symbol,this.symbol),j=i.indexOf("url")===0,k)k.attr({visibility:m?Z?"inherit":"visible":"hidden"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2* |
|||
h,height:2*h}:{}));else{if(m&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(p)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h={stroke:g,fill:g},i=a.points||[],j=[],k,l=a.pointAttrToOptions,m=b.negativeColor,p=c.lineColor,q; |
|||
b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||ra(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,h);n(["hover","select"],function(b){j[b]=a.convertAttribs(d[b],j[""])});a.pointAttr=j;for(g=i.length;g--;){h=i[g];if((c=h.options&&h.options.marker||h.options)&&c.enabled===!1)c.radius=0;if(h.negative&&m)h.color=h.fillColor=m;f=b.colorByPoint||h.color;if(h.options)for(q in l)u(c[l[q]])&&(f=!0);if(f){c=c||{};k=[];d=c.states||{};f=d.hover= |
|||
d.hover||{};if(!b.marker)f.color=ra(f.color||h.color).brighten(f.brightness||e.brightness).get();k[""]=a.convertAttribs(r({color:h.color,fillColor:h.color,lineColor:p===null?h.color:w},c),j[""]);k.hover=a.convertAttribs(d.hover,j.hover,k[""]);k.select=a.convertAttribs(d.select,j.select,k[""])}else k=j;h.pointAttr=k}},update:function(a,b){var c=this.chart,d=this.type,e=W[d].prototype,f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1); |
|||
for(f in e)e.hasOwnProperty(f)&&(this[f]=w);r(this,W[a.type||d].prototype);this.init(c,a);o(b,!0)&&c.redraw(!1)},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(oa),d,e,f=a.data||[],g,h,i;z(a,"destroy");aa(a);n(["xAxis","yAxis"],function(b){if(i=a[b])ga(i.series,a),i.isDirty=i.forceRedraw=!0,i.stacks={}});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);n("area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip".split(","), |
|||
function(b){a[b]&&(d=c&&b==="group"?"hide":"destroy",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ga(b.series,a);for(h in a)delete a[h]},drawDataLabels:function(){var a=this,b=a.options.dataLabels,c=a.points,d,e,f,g;if(b.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(b),g=a.plotGroup("dataLabelsGroup","data-labels",a.visible?"visible":"hidden",b.zIndex||6),e=b,n(c,function(c){var i,j=c.dataLabel,k,l,m=c.connector,p=!0;d=c.options&&c.options.dataLabels;i=o(d&&d.enabled,e.enabled); |
|||
if(j&&!i)c.dataLabel=j.destroy();else if(i){b=x(e,d);i=b.rotation;k=c.getLabelConfig();f=b.format?Ca(b.format,k):b.formatter.call(k,b);b.style.color=o(b.color,b.style.color,a.color,"black");if(j)if(u(f))j.attr({text:f}),p=!1;else{if(c.dataLabel=j=j.destroy(),m)c.connector=m.destroy()}else if(u(f)){j={fill:b.backgroundColor,stroke:b.borderColor,"stroke-width":b.borderWidth,r:b.borderRadius||0,rotation:i,padding:b.padding,zIndex:1};for(l in j)j[l]===w&&delete j[l];j=c.dataLabel=a.chart.renderer[i?"text": |
|||
"label"](f,0,-999,null,null,null,b.useHTML).attr(j).css(b.style).add(g).shadow(b.shadow)}j&&a.alignDataLabel(c,j,b,null,p)}})},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-999),i=o(a.plotY,-999),j=b.getBBox();if(a=this.visible&&f.isInsidePlot(a.plotX,a.plotY,g))d=r({x:g?f.plotWidth-i:h,y:t(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c, |
|||
null,d),g=b.alignAttr,o(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,j,d,e):o(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));a||b.attr({y:-999})},justifyDataLabel:function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i=== |
|||
"top"?b.verticalAlign="bottom":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;n(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?"L":"M"),d&&f&&(i=a[f-1],d==="right"?c.push(i.plotX,h):d==="center"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];n(a.segments,function(e){c= |
|||
a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=this.getGraphPath(),g=b.negativeColor;g&&c.push(["graphNeg",g]);n(c,function(c,g){var j=c[0],k=a[j];if(k)Wa(k),k.animate({d:f});else if(d&&f.length)k={stroke:c[1],"stroke-width":d,zIndex:1},e?k.dashstyle=e:k["stroke-linecap"]=k["stroke-linejoin"]="round",a[j]=a.chart.renderer.path(f).attr(k).add(a.group).shadow(!g&& |
|||
b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=s(e,j),l=this.yAxis;if(d&&(f||g)){d=t(l.toPixels(a.threshold||0,!0));a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed? |
|||
(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};n(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)J(c,"resize",a),J(b,"destroy",function(){aa(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a], |
|||
g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG,e=this.visible?"visible":"hidden",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup("group", |
|||
"series",e,f,h);this.markerGroup=this.plotGroup("markerGroup","markers",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&&!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a= |
|||
this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&z(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||"";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&& |
|||
(a={"stroke-width":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===w?!h:a)?"show":"hide";n(["group","dataLabelsGroup","markerGroup","tracker"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&n(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});n(c.linkedSeries,function(b){b.setVisible(a, |
|||
!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();z(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===w?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;z(this,a?"select":"unselect")},drawTracker:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,p=function(){if(f.hoverSeries!== |
|||
a)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push("M",e.plotX-i,e.plotY,"L",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:Qb,fill:c?Qb:S,"stroke-width":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),n([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover", |
|||
p).on("mouseout",function(a){g.onTrackerMouseOut(a)}).css(l);if(ib)a.on("touchstart",p)}))}};G=ha(Q);W.line=G;Y.area=x(X,{threshold:0});G=ha(Q,{type:"area",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,p;if(this.options.stacking&&!this.cropped){for(m=0;m<j.length;m++)g[j[m].x]=j[m];for(p in f)c.push(+p);c.sort(function(a,b){return a-b});n(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]): |
|||
(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:pa}))});b.length&&a.push(b)}else Q.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=Q.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push("L",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length- |
|||
1;d>=0;d--)g=o(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push("L",b[b.length-1].plotX,c,"L",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];Q.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[["area",this.color,c.fillColor]];(d||e)&&f.push(["areaNeg",d,e]);n(f,function(d){var e=d[0], |
|||
f=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:o(d[2],ra(d[1]).setOpacity(o(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:function(a,b){b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,a.options.symbolWidth,12,2).attr({zIndex:3}).add(b.legendGroup)}});W.area=G;Y.spline=x(X);F=ha(Q,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5* |
|||
e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=s(a,e),k=2*e-i):i<a&&i<e&&(i=I(a,e),k=2*e-i);k>g&&k>e?(k=s(g,e),i=2*e-k):k<g&&k<e&&(k=I(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});W.spline=F;Y.areaspline=x(Y.area);ma=G.prototype;F=ha(F,{type:"areaspline",closedStacks:!0,getSegmentPath:ma.getSegmentPath,closeSegment:ma.closeSegment,drawGraph:ma.drawGraph, |
|||
drawLegendSymbol:ma.drawLegendSymbol});W.areaspline=F;Y.column=x(X,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,threshold:0});F=ha(Q,{type:"column",pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color", |
|||
r:"borderRadius"},cropShoulder:0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){Q.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:n(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]=== |
|||
w&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=I(N(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=u(l)?(k-l)/2:k*b.pointPadding,l=o(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this.chart,b=this.options,c=b.borderWidth,d=this.yAxis,e=this.translatedThreshold=d.getThreshold(b.threshold),f=o(b.minPointLength, |
|||
5),b=this.getColumnMetrics(),g=b.width,h=this.barW=xa(s(g,1+2*c)),i=this.pointXOffset=b.offset,j=-(c%2?0.5:0),k=c%2?0.5:1;a.renderer.isVML&&a.inverted&&(k+=1);Q.prototype.translate.apply(this);n(this.points,function(a){var b=o(a.yBottom,e),c=I(s(-999-b,a.plotY),d.len+999+b),n=a.plotX+i,u=h,r=I(c,b),w,c=s(c,b)-r;N(c)<f&&f&&(c=f,r=t(N(r-e)>f?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=n;a.pointWidth=g;b=N(n)<0.5;u=t(n+u)+j;n=t(n)+j;u-=n;w=N(r)<0.5;c=t(r+c)+k;r=t(r)+k;c-=r;b&&(n+=1,u-=1);w&&(r-= |
|||
1,c+=1);a.shapeType="rect";a.shapeArgs={x:n,y:r,width:u,height:c}})},getSymbol:pa,drawLegendSymbol:G.prototype.drawLegendSymbol,drawGraph:pa,drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d;n(a.points,function(e){var f=e.plotY,g=e.graphic;if(f!==w&&!isNaN(f)&&e.y!==null)d=e.shapeArgs,g?(Wa(g),g.animate(x(d))):e.graphic=c[e.shapeType](d).attr(e.pointAttr[e.selected?"select":""]).add(a.group).shadow(b.shadow,null,b.stacking&&!b.borderRadius);else if(g)e.graphic=g.destroy()})},drawTracker:function(){var a= |
|||
this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==w&&e!==b.hoverPoint)e.onMouseOver(c)};n(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)n(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),ib))a[b].on("touchstart", |
|||
f)}),a._hasTracking=!0},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>o(this.translatedThreshold,f.plotSizeY),j=o(c.inside,!!this.options.stacking);if(h&&(d=x(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=o(c.align,!g||j?"center":i?"right":"left");c.verticalAlign=o(c.verticalAlign,g||j?"middle":i?"top":"bottom");Q.prototype.alignDataLabel.call(this, |
|||
a,b,c,d,e)},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(Z)a?(e.scaleY=0.001,a=I(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?"translateX":"translateY"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0});Q.prototype.remove.apply(a,arguments)}});W.column=F;Y.bar= |
|||
x(Y.column);ma=ha(F,{type:"bar",inverted:!0});W.bar=ma;Y.scatter=x(X,{lineWidth:0,tooltip:{headerFormat:'<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>",followPointer:!0},stickyTracking:!1});ma=ha(Q,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],drawTracker:F.prototype.drawTracker,setTooltipPoints:pa});W.scatter=ma;Y.pie=x(X,{borderColor:"#FFFFFF",borderWidth:1, |
|||
center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});X={type:"pie",isCartesian:!1,pointClass:ha(Pa,{init:function(){Pa.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:o(a.name,"Slice")});b=function(b){a.slice(b.type=== |
|||
"select")};J(a,"select",b);J(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===w?!b.visible:a;c.options.data[qa(b,c.data)]=b.options;e=a?"show":"hide";n(["graphic","dataLabel","connector","shadowGroup"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;La(c,d.chart);o(b,!0);this.sliced=this.options.sliced= |
|||
a=u(a)?a:!this.sliced;d.options.data[qa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},getColor:pa,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/ |
|||
2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){Q.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw()},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;Q.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},getCenter:function(){var a= |
|||
this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[o(b[0],"50%"),o(b[1],"50%"),a.size||"100%",a.innerSize||0],g=I(e,f),h;return Na(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*C(a)/100:a)+(d?c:0)})},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ya/180*(i-90),i=(this.endAngleRad=ya/180*((c.endAngle||i+360)-90))-j,k=this.points, |
|||
l=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=R.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*V(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType="arc";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:t(f*1E3)/1E3,end:t(g*1E3)/1E3};h=(g+f)/2;h>0.75*i&&(h-=2*ya);o.slicedTranslation={translateX:t(V(h)*d),translateY:t(ca(h)*d)};f=V(h)*a[2]/2;g=ca(h)*a[2]/2;o.tooltipPos= |
|||
[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-ya/2||h>ya/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+V(h)*l,a[1]+g+ca(h)*l,a[0]+f+V(h)*e,a[1]+g+ca(h)*e,a[0]+f,a[1]+g,l<0?"center":o.half?"right":"left",h]}},setTooltipPoints:pa,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);n(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced? |
|||
h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected?"select":""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible===!1&&h.setVisible(!1)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawDataLabels:function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding,10),g=o(e.connectorWidth,1), |
|||
h=d.plotWidth,d=d.plotHeight,i,j,k=o(e.softConnector,!0),l=e.distance,m=a.center,p=m[2]/2,q=m[1],u=l>0,r,w,v,x,C=[[],[]],y,z,E,H,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){Q.prototype.drawDataLabels.apply(a);n(b,function(a){a.dataLabel&&C[a.half].push(a)});for(H=0;!x&&b[H];)x=b[H]&&b[H].dataLabel&&(b[H].dataLabel.getBBox().height||21),H++;for(H=2;H--;){var b=[],K=[],G=C[H],J=G.length,F;a.sortByAngle(G,H-0.5);if(l>0){for(B=q-p-l;B<=q+p+l;B+=x)b.push(B); |
|||
w=b.length;if(J>w){c=[].concat(G);c.sort(I);for(B=J;B--;)c[B].rank=B;for(B=J;B--;)G[B].rank>=w&&G.splice(B,1);J=G.length}for(B=0;B<J;B++){c=G[B];v=c.labelPos;c=9999;var O,M;for(M=0;M<w;M++)O=N(b[M]-v[1]),O<c&&(c=O,F=M);if(F<B&&b[B]!==null)F=B;else for(w<J-B+F&&b[B]!==null&&(F=w-J+B);b[F]===null;)F++;K.push({i:F,y:b[F]});b[F]=null}K.sort(I)}for(B=0;B<J;B++){c=G[B];v=c.labelPos;r=c.dataLabel;E=c.visible===!1?"hidden":"visible";c=v[1];if(l>0){if(w=K.pop(),F=w.i,z=w.y,c>z&&b[F+1]!==null||c<z&&b[F-1]!== |
|||
null)z=c}else z=c;y=e.justify?m[0]+(H?-1:1)*(p+l):a.getX(F===0||F===b.length-1?c:z,H);r._attr={visibility:E,align:v[6]};r._pos={x:y+e.x+({left:f,right:-f}[v[6]]||0),y:z+e.y-10};r.connX=y;r.connY=z;if(this.options.size===null)w=r.width,y-w<f?D[3]=s(t(w-y+f),D[3]):y+w>h-f&&(D[1]=s(t(y+w-h+f),D[1])),z-x/2<0?D[0]=s(t(-z+x/2),D[0]):z+x/2>d&&(D[2]=s(t(z+x/2-d),D[2]))}}if(va(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),u&&g&&n(this.points,function(b){i=b.connector;v=b.labelPos;if((r=b.dataLabel)&& |
|||
r._pos)E=r._attr.visibility,y=r.connX,z=r.connY,j=k?["M",y+(v[6]==="left"?5:-5),z,"C",y,z,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],"L",v[4],v[5]]:["M",y+(v[6]==="left"?5:-5),z,"L",v[2],v[3],"L",v[4],v[5]],i?(i.animate({d:j}),i.attr("visibility",E)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},verifyDataLabelOverflow:function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize|| |
|||
80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),n(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels()):f=!0;return f},placeDataLabels:function(){n(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},alignDataLabel:pa, |
|||
drawTracker:F.prototype.drawTracker,drawLegendSymbol:G.prototype.drawLegendSymbol,getSymbol:pa};X=ha(Q,X);W.pie=X;r(Highcharts,{Axis:db,Chart:yb,Color:ra,Legend:eb,Pointer:xb,Point:Pa,Tick:Ma,Tooltip:wb,Renderer:Va,Series:Q,SVGElement:wa,SVGRenderer:Ha,arrayMin:Ja,arrayMax:va,charts:Ga,dateFormat:Xa,format:Ca,pathAnim:Ab,getOptions:function(){return M},hasBidiBug:Ub,isTouchDevice:Ob,numberFormat:Aa,seriesTypes:W,setOptions:function(a){M=x(M,a);Lb();return M},addEvent:J,removeEvent:aa,createElement:U, |
|||
discardElement:Ta,css:K,each:n,extend:r,map:Na,merge:x,pick:o,splat:ja,extendClass:ha,pInt:C,wrap:mb,svg:Z,canvas:$,vml:!Z&&!$,product:"Highcharts",version:"3.0.6"})})(); |
|||
File diff suppressed because it is too large
@ -0,0 +1,7 @@ |
|||
(function(i,C){function m(a){return typeof a==="number"}function n(a){return a!==D&&a!==null}var D,p,r,s=i.Chart,t=i.extend,z=i.each;r=["path","rect","circle"];p={top:0,left:0,center:0.5,middle:0.5,bottom:1,right:1};var u=C.inArray,A=i.merge,B=function(){this.init.apply(this,arguments)};B.prototype={init:function(a,d){var c=d.shape&&d.shape.type;this.chart=a;var b,f;f={xAxis:0,yAxis:0,title:{style:{},text:"",x:0,y:0},shape:{params:{stroke:"#000000",fill:"transparent",strokeWidth:2}}};b={circle:{params:{x:0, |
|||
y:0}}};if(b[c])f.shape=A(f.shape,b[c]);this.options=A({},f,d)},render:function(a){var d=this.chart,c=this.chart.renderer,b=this.group,f=this.title,e=this.shape,h=this.options,i=h.title,l=h.shape;if(!b)b=this.group=c.g();if(!e&&l&&u(l.type,r)!==-1)e=this.shape=c[h.shape.type](l.params),e.add(b);if(!f&&i)f=this.title=c.label(i),f.add(b);b.add(d.annotations.group);this.linkObjects();a!==!1&&this.redraw()},redraw:function(){var a=this.options,d=this.chart,c=this.group,b=this.title,f=this.shape,e=this.linkedObject, |
|||
h=d.xAxis[a.xAxis],v=d.yAxis[a.yAxis],l=a.width,w=a.height,x=p[a.anchorY],y=p[a.anchorX],j,o,g,q;if(e)j=e instanceof i.Point?"point":e instanceof i.Series?"series":null,j==="point"?(a.xValue=e.x,a.yValue=e.y,o=e.series):j==="series"&&(o=e),c.visibility!==o.group.visibility&&c.attr({visibility:o.group.visibility});e=n(a.xValue)?h.toPixels(a.xValue+h.minPointOffset)-h.minPixelPadding:a.x;j=n(a.yValue)?v.toPixels(a.yValue):a.y;if(!isNaN(e)&&!isNaN(j)&&m(e)&&m(j)){b&&(b.attr(a.title),b.css(a.title.style)); |
|||
if(f){b=t({},a.shape.params);if(a.units==="values"){for(g in b)u(g,["width","x"])>-1?b[g]=h.translate(b[g]):u(g,["height","y"])>-1&&(b[g]=v.translate(b[g]));b.width&&(b.width-=h.toPixels(0)-h.left);b.x&&(b.x+=h.minPixelPadding);if(a.shape.type==="path"){g=b.d;o=e;for(var r=j,s=g.length,k=0;k<s;)typeof g[k]==="number"&&typeof g[k+1]==="number"?(g[k]=h.toPixels(g[k])-o,g[k+1]=v.toPixels(g[k+1])-r,k+=2):k+=1}}a.shape.type==="circle"&&(b.x+=b.r,b.y+=b.r);f.attr(b)}c.bBox=null;if(!m(l))q=c.getBBox(),l= |
|||
q.width;if(!m(w))q||(q=c.getBBox()),w=q.height;if(!m(y))y=p.center;if(!m(x))x=p.center;e-=l*y;j-=w*x;d.animation&&n(c.translateX)&&n(c.translateY)?c.animate({translateX:e,translateY:j}):c.translate(e,j)}},destroy:function(){var a=this,d=this.chart.annotations.allItems,c=d.indexOf(a);c>-1&&d.splice(c,1);z(["title","shape","group"],function(b){a[b]&&(a[b].destroy(),a[b]=null)});a.group=a.title=a.shape=a.chart=a.options=null},update:function(a,d){t(this.options,a);this.linkObjects();this.render(d)}, |
|||
linkObjects:function(){var a=this.chart,d=this.linkedObject,c=d&&(d.id||d.options.id),b=this.options.linkedTo;if(n(b)){if(!n(d)||b!==c)this.linkedObject=a.get(b)}else this.linkedObject=null}};t(s.prototype,{annotations:{add:function(a,d){var c=this.allItems,b=this.chart,f,e;Object.prototype.toString.call(a)==="[object Array]"||(a=[a]);for(e=a.length;e--;)f=new B(b,a[e]),c.push(f),f.render(d)},redraw:function(){z(this.allItems,function(a){a.redraw()})}}});s.prototype.callbacks.push(function(a){var d= |
|||
a.options.annotations,c;c=a.renderer.g("annotations");c.attr({zIndex:7});c.add();a.annotations.allItems=[];a.annotations.chart=a;a.annotations.group=c;Object.prototype.toString.call(d)==="[object Array]"&&d.length>0&&a.annotations.add(a.options.annotations);i.addEvent(a,"redraw",function(){a.annotations.redraw()})})})(Highcharts,HighchartsAdapter); |
|||
@ -0,0 +1,401 @@ |
|||
(function (Highcharts, HighchartsAdapter) { |
|||
|
|||
var UNDEFINED, |
|||
ALIGN_FACTOR, |
|||
ALLOWED_SHAPES, |
|||
Chart = Highcharts.Chart, |
|||
extend = Highcharts.extend, |
|||
each = Highcharts.each; |
|||
|
|||
ALLOWED_SHAPES = ["path", "rect", "circle"]; |
|||
|
|||
ALIGN_FACTOR = { |
|||
top: 0, |
|||
left: 0, |
|||
center: 0.5, |
|||
middle: 0.5, |
|||
bottom: 1, |
|||
right: 1 |
|||
}; |
|||
|
|||
|
|||
// Highcharts helper methods
|
|||
var inArray = HighchartsAdapter.inArray, |
|||
merge = Highcharts.merge; |
|||
|
|||
function defaultOptions(shapeType) { |
|||
var shapeOptions, |
|||
options; |
|||
|
|||
options = { |
|||
xAxis: 0, |
|||
yAxis: 0, |
|||
title: { |
|||
style: {}, |
|||
text: "", |
|||
x: 0, |
|||
y: 0 |
|||
}, |
|||
shape: { |
|||
params: { |
|||
stroke: "#000000", |
|||
fill: "transparent", |
|||
strokeWidth: 2 |
|||
} |
|||
} |
|||
}; |
|||
|
|||
shapeOptions = { |
|||
circle: { |
|||
params: { |
|||
x: 0, |
|||
y: 0 |
|||
} |
|||
} |
|||
}; |
|||
|
|||
if (shapeOptions[shapeType]) { |
|||
options.shape = merge(options.shape, shapeOptions[shapeType]); |
|||
} |
|||
|
|||
return options; |
|||
} |
|||
|
|||
function isArray(obj) { |
|||
return Object.prototype.toString.call(obj) === '[object Array]'; |
|||
} |
|||
|
|||
function isNumber(n) { |
|||
return typeof n === 'number'; |
|||
} |
|||
|
|||
function defined(obj) { |
|||
return obj !== UNDEFINED && obj !== null; |
|||
} |
|||
|
|||
function translatePath(d, xAxis, yAxis, xOffset, yOffset) { |
|||
var len = d.length, |
|||
i = 0; |
|||
|
|||
while (i < len) { |
|||
if (typeof d[i] === 'number' && typeof d[i + 1] === 'number') { |
|||
d[i] = xAxis.toPixels(d[i]) - xOffset; |
|||
d[i + 1] = yAxis.toPixels(d[i + 1]) - yOffset; |
|||
i += 2; |
|||
} else { |
|||
i += 1; |
|||
} |
|||
} |
|||
|
|||
return d; |
|||
} |
|||
|
|||
|
|||
// Define annotation prototype
|
|||
var Annotation = function () { |
|||
this.init.apply(this, arguments); |
|||
}; |
|||
Annotation.prototype = { |
|||
/* |
|||
* Initialize the annotation |
|||
*/ |
|||
init: function (chart, options) { |
|||
var shapeType = options.shape && options.shape.type; |
|||
|
|||
this.chart = chart; |
|||
this.options = merge({}, defaultOptions(shapeType), options); |
|||
}, |
|||
|
|||
/* |
|||
* Render the annotation |
|||
*/ |
|||
render: function (redraw) { |
|||
var annotation = this, |
|||
chart = this.chart, |
|||
renderer = annotation.chart.renderer, |
|||
group = annotation.group, |
|||
title = annotation.title, |
|||
shape = annotation.shape, |
|||
options = annotation.options, |
|||
titleOptions = options.title, |
|||
shapeOptions = options.shape; |
|||
|
|||
if (!group) { |
|||
group = annotation.group = renderer.g(); |
|||
} |
|||
|
|||
|
|||
if (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) { |
|||
shape = annotation.shape = renderer[options.shape.type](shapeOptions.params); |
|||
shape.add(group); |
|||
} |
|||
|
|||
if (!title && titleOptions) { |
|||
title = annotation.title = renderer.label(titleOptions); |
|||
title.add(group); |
|||
} |
|||
|
|||
group.add(chart.annotations.group); |
|||
|
|||
// link annotations to point or series
|
|||
annotation.linkObjects(); |
|||
|
|||
if (redraw !== false) { |
|||
annotation.redraw(); |
|||
} |
|||
}, |
|||
|
|||
/* |
|||
* Redraw the annotation title or shape after options update |
|||
*/ |
|||
redraw: function () { |
|||
var options = this.options, |
|||
chart = this.chart, |
|||
group = this.group, |
|||
title = this.title, |
|||
shape = this.shape, |
|||
linkedTo = this.linkedObject, |
|||
xAxis = chart.xAxis[options.xAxis], |
|||
yAxis = chart.yAxis[options.yAxis], |
|||
width = options.width, |
|||
height = options.height, |
|||
anchorY = ALIGN_FACTOR[options.anchorY], |
|||
anchorX = ALIGN_FACTOR[options.anchorX], |
|||
resetBBox = false, |
|||
shapeParams, |
|||
linkType, |
|||
series, |
|||
param, |
|||
bbox, |
|||
x, |
|||
y; |
|||
|
|||
if (linkedTo) { |
|||
linkType = (linkedTo instanceof Highcharts.Point) ? 'point' : |
|||
(linkedTo instanceof Highcharts.Series) ? 'series' : null; |
|||
|
|||
if (linkType === 'point') { |
|||
options.xValue = linkedTo.x; |
|||
options.yValue = linkedTo.y; |
|||
series = linkedTo.series; |
|||
} else if (linkType === 'series') { |
|||
series = linkedTo; |
|||
} |
|||
|
|||
if (group.visibility !== series.group.visibility) { |
|||
group.attr({ |
|||
visibility: series.group.visibility |
|||
}); |
|||
} |
|||
} |
|||
|
|||
|
|||
// Based on given options find annotation pixel position
|
|||
x = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) - xAxis.minPixelPadding : options.x); |
|||
y = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y; |
|||
|
|||
if (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) { |
|||
return; |
|||
} |
|||
|
|||
|
|||
if (title) { |
|||
title.attr(options.title); |
|||
title.css(options.title.style); |
|||
resetBBox = true; |
|||
} |
|||
|
|||
if (shape) { |
|||
shapeParams = extend({}, options.shape.params); |
|||
|
|||
if (options.units === 'values') { |
|||
for (param in shapeParams) { |
|||
if (inArray(param, ['width', 'x']) > -1) { |
|||
shapeParams[param] = xAxis.translate(shapeParams[param]); |
|||
} else if (inArray(param, ['height', 'y']) > -1) { |
|||
shapeParams[param] = yAxis.translate(shapeParams[param]); |
|||
} |
|||
} |
|||
|
|||
if (shapeParams.width) { |
|||
shapeParams.width -= xAxis.toPixels(0) - xAxis.left; |
|||
} |
|||
|
|||
if (shapeParams.x) { |
|||
shapeParams.x += xAxis.minPixelPadding; |
|||
} |
|||
|
|||
if (options.shape.type === 'path') { |
|||
translatePath(shapeParams.d, xAxis, yAxis, x, y); |
|||
} |
|||
} |
|||
|
|||
// move the center of the circle to shape x/y
|
|||
if (options.shape.type === 'circle') { |
|||
shapeParams.x += shapeParams.r; |
|||
shapeParams.y += shapeParams.r; |
|||
} |
|||
|
|||
resetBBox = true; |
|||
shape.attr(shapeParams); |
|||
} |
|||
|
|||
group.bBox = null; |
|||
|
|||
// If annotation width or height is not defined in options use bounding box size
|
|||
if (!isNumber(width)) { |
|||
bbox = group.getBBox(); |
|||
width = bbox.width; |
|||
} |
|||
|
|||
if (!isNumber(height)) { |
|||
// get bbox only if it wasn't set before
|
|||
if (!bbox) { |
|||
bbox = group.getBBox(); |
|||
} |
|||
|
|||
height = bbox.height; |
|||
} |
|||
|
|||
// Calculate anchor point
|
|||
if (!isNumber(anchorX)) { |
|||
anchorX = ALIGN_FACTOR.center; |
|||
} |
|||
|
|||
if (!isNumber(anchorY)) { |
|||
anchorY = ALIGN_FACTOR.center; |
|||
} |
|||
|
|||
// Translate group according to its dimension and anchor point
|
|||
x = x - width * anchorX; |
|||
y = y - height * anchorY; |
|||
|
|||
if (chart.animation && defined(group.translateX) && defined(group.translateY)) { |
|||
group.animate({ |
|||
translateX: x, |
|||
translateY: y |
|||
}); |
|||
} else { |
|||
group.translate(x, y); |
|||
} |
|||
}, |
|||
|
|||
/* |
|||
* Destroy the annotation |
|||
*/ |
|||
destroy: function () { |
|||
var annotation = this, |
|||
chart = this.chart, |
|||
allItems = chart.annotations.allItems, |
|||
index = allItems.indexOf(annotation); |
|||
|
|||
if (index > -1) { |
|||
allItems.splice(index, 1); |
|||
} |
|||
|
|||
each(['title', 'shape', 'group'], function (element) { |
|||
if (annotation[element]) { |
|||
annotation[element].destroy(); |
|||
annotation[element] = null; |
|||
} |
|||
}); |
|||
|
|||
annotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null; |
|||
}, |
|||
|
|||
/* |
|||
* Update the annotation with a given options |
|||
*/ |
|||
update: function (options, redraw) { |
|||
extend(this.options, options); |
|||
|
|||
// update link to point or series
|
|||
this.linkObjects(); |
|||
|
|||
this.render(redraw); |
|||
}, |
|||
|
|||
linkObjects: function () { |
|||
var annotation = this, |
|||
chart = annotation.chart, |
|||
linkedTo = annotation.linkedObject, |
|||
linkedId = linkedTo && (linkedTo.id || linkedTo.options.id), |
|||
options = annotation.options, |
|||
id = options.linkedTo; |
|||
|
|||
if (!defined(id)) { |
|||
annotation.linkedObject = null; |
|||
} else if (!defined(linkedTo) || id !== linkedId) { |
|||
annotation.linkedObject = chart.get(id); |
|||
} |
|||
} |
|||
}; |
|||
|
|||
|
|||
// Add annotations methods to chart prototype
|
|||
extend(Chart.prototype, { |
|||
annotations: { |
|||
/* |
|||
* Unified method for adding annotations to the chart |
|||
*/ |
|||
add: function (options, redraw) { |
|||
var annotations = this.allItems, |
|||
chart = this.chart, |
|||
item, |
|||
len; |
|||
|
|||
if (!isArray(options)) { |
|||
options = [options]; |
|||
} |
|||
|
|||
len = options.length; |
|||
|
|||
while (len--) { |
|||
item = new Annotation(chart, options[len]); |
|||
annotations.push(item); |
|||
item.render(redraw); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Redraw all annotations, method used in chart events |
|||
*/ |
|||
redraw: function () { |
|||
each(this.allItems, function (annotation) { |
|||
annotation.redraw(); |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
|
|||
// Initialize on chart load
|
|||
Chart.prototype.callbacks.push(function (chart) { |
|||
var options = chart.options.annotations, |
|||
group; |
|||
|
|||
group = chart.renderer.g("annotations"); |
|||
group.attr({ |
|||
zIndex: 7 |
|||
}); |
|||
group.add(); |
|||
|
|||
// initialize empty array for annotations
|
|||
chart.annotations.allItems = []; |
|||
|
|||
// link chart object to annotations
|
|||
chart.annotations.chart = chart; |
|||
|
|||
// link annotations group element to the chart
|
|||
chart.annotations.group = group; |
|||
|
|||
if (isArray(options) && options.length > 0) { |
|||
chart.annotations.add(chart.options.annotations); |
|||
} |
|||
|
|||
// update annotations after chart redraw
|
|||
Highcharts.addEvent(chart, 'redraw', function () { |
|||
chart.annotations.redraw(); |
|||
}); |
|||
}); |
|||
}(Highcharts, HighchartsAdapter)); |
|||
@ -0,0 +1,133 @@ |
|||
/* |
|||
A class to parse color values |
|||
@author Stoyan Stefanov <sstoo@gmail.com> |
|||
@link http://www.phpied.com/rgb-color-parser-in-javascript/
|
|||
Use it if you like it |
|||
|
|||
canvg.js - Javascript SVG parser and renderer on Canvas |
|||
MIT Licensed |
|||
Gabe Lerner (gabelerner@gmail.com) |
|||
http://code.google.com/p/canvg/
|
|||
|
|||
Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/
|
|||
|
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
CanVGRenderer Extension module |
|||
|
|||
(c) 2011-2012 Torstein Hønsi, Erik Olsson |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
function RGBColor(m){this.ok=!1;m.charAt(0)=="#"&&(m=m.substr(1,6));var m=m.replace(/ /g,""),m=m.toLowerCase(),a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b", |
|||
darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff", |
|||
gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa", |
|||
lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080", |
|||
oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd", |
|||
slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/, |
|||
example:["#00ff00","336699"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0: |
|||
this.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b="0"+b);a.length==1&&(a="0"+a);d.length==1&&(d="0"+d);return"#"+b+a+d};this.getHelpXML=function(){for(var b=[],k=0;k<d.length;k++)for(var c=d[k].example,j=0;j<c.length;j++)b[b.length]=c[j];for(var h in a)b[b.length]=h;c=document.createElement("ul"); |
|||
c.setAttribute("id","rgbcolor-examples");for(k=0;k<b.length;k++)try{var l=document.createElement("li"),o=new RGBColor(b[k]),n=document.createElement("div");n.style.cssText="margin: 3px; border: 1px solid black; background:"+o.toHex()+"; color:"+o.toHex();n.appendChild(document.createTextNode("test"));var q=document.createTextNode(" "+b[k]+" -> "+o.toRGB()+" -> "+o.toHex());l.appendChild(n);l.appendChild(q);c.appendChild(l)}catch(p){}return c}} |
|||
if(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1}; |
|||
(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height}; |
|||
this.ComputeSize=function(a){return a!=null&&typeof a=="number"?a:a=="x"?this.width():a=="y"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\s+|\s+$/g,"")};a.compressSpaces=function(a){return a.replace(/[\s\r\t\n]+/gm," ")};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"))? |
|||
(d.open("GET",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,"text/xml");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,""),d=new ActiveXObject("Microsoft.XMLDOM");d.async="false";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==""};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+"").match(/%$/)&& |
|||
(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=""){var f=new RGBColor(b.value);f.ok&&(c="rgba("+f.r+", "+f.g+", "+f.b+", "+d+")")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\()?#([^\)]+)\)?$/,"$2");return a.Definitions[d]},isUrl:function(){return b.value.indexOf("url(")== |
|||
0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+"";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)? |
|||
b.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+"";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+ |
|||
"";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=["normal","italic","oblique","inherit"];this.Variants=["normal","small-caps","inherit"];this.Weights="normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit".split(",");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont("","","","","",a.ctx.font);return{fontFamily:f|| |
|||
g.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(" ")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||"")).split(" "),k=!1,e=!1,f=!1,g=!1,j="",h=0;h<d.length;h++)if(!e&&c.Styles.indexOf(d[h])!=-1){if(d[h]!="inherit")b.fontStyle=d[h];e=!0}else if(!g&&c.Variants.indexOf(d[h])!=-1){if(d[h]!="inherit")b.fontVariant= |
|||
d[h];e=g=!0}else if(!f&&c.Weights.indexOf(d[h])!=-1){if(d[h]!="inherit")b.fontWeight=d[h];e=g=f=!0}else if(k)d[h]!="inherit"&&(j+=d[h]);else{if(d[h]!="inherit")b.fontSize=d[h].split("/")[0];e=g=f=k=!0}if(j!="")b.fontFamily=j;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||"").replace(/,/g," "))).split(" "),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform= |
|||
function(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2- |
|||
this.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c- |
|||
a);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k= |
|||
(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1, |
|||
0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property("angle",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x|| |
|||
0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle= |
|||
new a.Property("angle",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)}; |
|||
this.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split("(")[0],e=c[b].split("(")[1].replace(")","");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,j,h,l){var d=a.compressSpaces(d),d=d.replace(/^defer\s/,""),o=d.split(" ")[0]||"xMidYMid",d=d.split(" ")[1]||"meet",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d=="meet"&&(k*= |
|||
p,f*=p);d=="slice"&&(k*=m,f*=m);h=new a.Property("refX",h);l=new a.Property("refY",l);h.hasValue()&&l.hasValue()?c.translate(-p*h.Length.toPixels("x"),-p*l.Length.toPixels("y")):(o.match(/^xMid/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e-f));o=="none"?c.scale(n, |
|||
q):d=="meet"?c.scale(p,p):d=="slice"&&c.scale(m,m);c.translate(g==null?0:-g,j==null?0:-j)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,"");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c; |
|||
c=new a.Property(b,"");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style("display").value!="none"&&this.attribute("visibility").value!="hidden"){b.save();this.setContext(b);if(this.attribute("mask").hasValue()){var a=this.attribute("mask").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style("filter").hasValue()?(a=this.style("filter").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext= |
|||
function(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName]; |
|||
if(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute("class").hasValue())for(var d=a.compressSpaces(this.attribute("class").value).split(" "),e=0;e<d.length;e++){b=a.Styles["."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+"."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute("style").hasValue()){b=this.attribute("style").value.split(";");for(d=0;d<b.length;d++)a.trim(b[d])!=""&&(c=b[d].split(":"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k, |
|||
c))}this.attribute("id").hasValue()&&a.Definitions[this.attribute("id").value]==null&&(a.Definitions[this.attribute("id").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style("fill").Definition.isUrl()){var b=this.style("fill").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style("fill").hasValue())b=this.style("fill"),this.style("fill-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("fill-opacity").value)), |
|||
d.fillStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke").Definition.isUrl()){if(b=this.style("stroke").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style("stroke").hasValue())b=this.style("stroke"),this.style("stroke-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("stroke-opacity").value)),d.strokeStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke-width").hasValue())d.lineWidth=this.style("stroke-width").Length.toPixels();if(this.style("stroke-linecap").hasValue())d.lineCap= |
|||
this.style("stroke-linecap").value;if(this.style("stroke-linejoin").hasValue())d.lineJoin=this.style("stroke-linejoin").value;if(this.style("stroke-miterlimit").hasValue())d.miterLimit=this.style("stroke-miterlimit").value;if(typeof d.font!="undefined")d.font=a.Font.CreateFont(this.style("font-style").value,this.style("font-variant").value,this.style("font-weight").value,this.style("font-size").hasValue()?this.style("font-size").Length.toPixels()+"px":"",this.style("font-family").value).toString(); |
|||
this.attribute("transform").hasValue()&&(new a.Transform(this.attribute("transform").value)).apply(d);this.attribute("clip-path").hasValue()&&(b=this.attribute("clip-path").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style("opacity").hasValue())d.globalAlpha=this.style("opacity").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath(); |
|||
return new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=""&&d.fill();d.strokeStyle!=""&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style("marker-start").Definition.isUrl()){var c=this.style("marker-start").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style("marker-mid").Definition.isUrl())for(var c=this.style("marker-mid").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style("marker-end").Definition.isUrl()&& |
|||
(c=this.style("marker-end").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext; |
|||
this.setContext=function(d){d.strokeStyle="rgba(0,0,0,0)";d.lineCap="butt";d.lineJoin="miter";d.miterLimit=4;this.baseSetContext(d);this.attribute("x").hasValue()&&this.attribute("y").hasValue()&&d.translate(this.attribute("x").Length.toPixels("x"),this.attribute("y").Length.toPixels("y"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root=="undefined"&&this.attribute("width").hasValue()&&this.attribute("height").hasValue()){var b=this.attribute("width").Length.toPixels("x"),c=this.attribute("height").Length.toPixels("y"), |
|||
e=0,f=0;this.attribute("refX").hasValue()&&this.attribute("refY").hasValue()&&(e=-this.attribute("refX").Length.toPixels("x"),f=-this.attribute("refY").Length.toPixels("y"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute("viewBox").hasValue()){var e=a.ToNumberArray(this.attribute("viewBox").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute("preserveAspectRatio").value,a.ViewPort.width(),b,a.ViewPort.height(), |
|||
c,f,g,this.attribute("refX").value,this.attribute("refY").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("x").Length.toPixels("x"),c=this.attribute("y").Length.toPixels("y"),e=this.attribute("width").Length.toPixels("x"),f=this.attribute("height").Length.toPixels("y"),g=this.attribute("rx").Length.toPixels("x"), |
|||
j=this.attribute("ry").Length.toPixels("y");this.attribute("rx").hasValue()&&!this.attribute("ry").hasValue()&&(j=g);this.attribute("ry").hasValue()&&!this.attribute("rx").hasValue()&&(g=j);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+j),d.lineTo(b+e,c+f-j),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-j),d.lineTo(b,c+j),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype= |
|||
new a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("cx").Length.toPixels("x"),c=this.attribute("cy").Length.toPixels("y"),e=this.attribute("r").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c); |
|||
this.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute("rx").Length.toPixels("x"),e=this.attribute("ry").Length.toPixels("y"),f=this.attribute("cx").Length.toPixels("x"),g=this.attribute("cy").Length.toPixels("y");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype= |
|||
new a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute("x1").Length.toPixels("x"),this.attribute("y1").Length.toPixels("y")),new a.Point(this.attribute("x2").Length.toPixels("x"),this.attribute("y2").Length.toPixels("y"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)}; |
|||
this.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute("points").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x, |
|||
this.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x, |
|||
this.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute("d").value;c=c.replace(/,/gm," ");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,"$1 $2");c=c.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([0-9])([+\-])/gm, |
|||
"$1 $2");c=c.replace(/(\.[0-9]*)(\.)/gm,"$1 $2");c=c.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,"$1 $3 $4 ");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(" ");this.reset=function(){this.i=-1;this.previousCommand=this.command="";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()? |
|||
!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint(); |
|||
return this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!="c"&&this.previousCommand.toLowerCase()!="s"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length- |
|||
1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b= |
|||
this.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case "M":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case "L":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&& |
|||
d.lineTo(e.x,e.y)}break;case "H":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "V":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "C":for(;!b.isCommandOrEnd();){var g= |
|||
b.current,f=b.getPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,j,f);c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y)}break;case "S":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,j,f),c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y);break;case "Q":for(;!b.isCommandOrEnd();)g=b.current,j=b.getAsControlPoint(), |
|||
e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case "T":for(;!b.isCommandOrEnd();)g=b.current,j=b.getReflectedControlPoint(),b.control=j,e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case "A":for(;!b.isCommandOrEnd();){var g=b.current,h=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),j=b.getScalar(), |
|||
e=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(h,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(h*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==j?-1:1)*Math.sqrt((Math.pow(h,2)*Math.pow(l,2)-Math.pow(h,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(h,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*h*n.y/l,o*-l*n.x/h),g=new a.Point((g.x+e.x)/2+Math.cos(f)* |
|||
p.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/h,(n.y-p.y)/l]),q=[(n.x-p.x)/h,(n.y-p.y)/l],p=[(-n.x-p.x)/h,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);j==0&&n>0&&(n-=2*Math.PI);j==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-h*Math.cos((o+n)/ |
|||
2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(j==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(j==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=h>l?h:l,e=h>l?1:h/l,h=h>l?l/h:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,h),d.arc(0,0,m,o,o+n,1-j),d.scale(1/e,1/h),d.rotate(-f),d.translate(-g.x,-g.y))}break;case "Z":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e], |
|||
b[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);b.attributes.x=new a.Property("x",this.attribute("x").value);b.attributes.y=new a.Property("y",this.attribute("y").value);b.attributes.width=new a.Property("width",this.attribute("width").value);b.attributes.height=new a.Property("height", |
|||
this.attribute("height").value);b.children=this.children;var c=document.createElement("canvas");c.width=this.attribute("width").Length.toPixels("x");c.height=this.attribute("height").Length.toPixels("y");b.render(c.getContext("2d"));return d.createPattern(c,"repeat")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute("orient").valueOrDefault("auto")== |
|||
"auto"&&d.rotate(c);this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);e.attributes.refX=new a.Property("refX",this.attribute("refX").value);e.attributes.refY=new a.Property("refY",this.attribute("refY").value);e.attributes.width=new a.Property("width",this.attribute("markerWidth").value);e.attributes.height=new a.Property("height", |
|||
this.attribute("markerHeight").value);e.attributes.fill=new a.Property("fill",this.attribute("fill").valueOrDefault("black"));e.attributes.stroke=new a.Property("stroke",this.attribute("stroke").valueOrDefault("none"));e.children=this.children;e.render(d);d.restore();this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute("orient").valueOrDefault("auto")=="auto"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype= |
|||
new a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute("gradientUnits").valueOrDefault("objectBoundingBox");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute("xlink:href").hasValue()&& |
|||
(c=this.attribute("xlink:href").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute("gradientTransform").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property("x",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property("y",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property("width",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property("height",a.MAX_VIRTUAL_PIXELS); |
|||
var g=new a.Element.g;g.attributes.transform=new a.Property("transform",this.attribute("gradientTransform").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property("x",0);f.attributes.y=new a.Property("y",0);f.attributes.width=new a.Property("width",c.width);f.attributes.height=new a.Property("height",c.height);f.children=[g];g=document.createElement("canvas");g.width=c.width;g.height=c.height;c=g.getContext("2d");c.fillStyle=e;f.render(c);return c.createPattern(g,"no-repeat")}return e}}; |
|||
a.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("x1").numValue():this.attribute("x1").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y1").numValue():this.attribute("y1").Length.toPixels("y"),g=this.gradientUnits=="objectBoundingBox"? |
|||
c.x()+c.width()*this.attribute("x2").numValue():this.attribute("x2").Length.toPixels("x"),c=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y2").numValue():this.attribute("y2").Length.toPixels("y");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"? |
|||
c.x()+c.width()*this.attribute("cx").numValue():this.attribute("cx").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("cy").numValue():this.attribute("cy").Length.toPixels("y"),g=e,j=f;this.attribute("fx").hasValue()&&(g=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("fx").numValue():this.attribute("fx").Length.toPixels("x"));this.attribute("fy").hasValue()&&(j=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("fy").numValue(): |
|||
this.attribute("fy").Length.toPixels("y"));c=this.gradientUnits=="objectBoundingBox"?(c.width()+c.height())/2*this.attribute("r").numValue():this.attribute("r").Length.toPixels();return a.createRadialGradient(g,j,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute("offset").numValue();c=this.style("stop-color");this.style("stop-opacity").hasValue()&&(c=c.Color.addOpacity(this.style("stop-opacity").value)); |
|||
this.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute("begin").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute("dur").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute("attributeType").value,b=this.attribute("attributeName").value;return a=="CSS"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue= |
|||
null;this.removed=!1;this.calcValue=function(){return""};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute("repeatCount").value=="indefinite")this.duration=0;else return this.attribute("fill").valueOrDefault("remove")=="remove"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute("type").hasValue()&& |
|||
(a=this.attribute("type").value+"("+a+")"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute("from").numValue(),b=this.attribute("to").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor= |
|||
function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute("from").value),b=new RGBColor(this.attribute("to").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return"rgb("+parseInt(c,10)+","+parseInt(e,10)+","+parseInt(a,10)+")"}return this.attribute("from").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base= |
|||
a.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type=="font-face")this.fontFace=d,d.style("font-family").hasValue()&&(a.Definitions[d.style("font-family").value]=this);else if(d.type=="missing-glyph")this.missingGlyph= |
|||
d;else if(d.type=="glyph")d.arabicForm!=""?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]=="undefined"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute("ascent").value;this.descent=this.attribute("descent").value;this.unitsPerEm=this.attribute("units-per-em").numValue()};a.Element.fontface.prototype= |
|||
new a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.unicode=this.attribute("unicode").value;this.arabicForm=this.attribute("arabic-form").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase; |
|||
this.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style("dominant-baseline").hasValue())b.textBaseline=this.style("dominant-baseline").value;if(this.style("alignment-baseline").hasValue())b.textBaseline=this.style("alignment-baseline").value};this.renderChildren= |
|||
function(b){for(var a=this.style("text-anchor").valueOrDefault("start"),c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),j=0;j<this.children.length;j++){var h=this.children[j];h.attribute("x").hasValue()?h.x=h.attribute("x").Length.toPixels("x"):(h.attribute("dx").hasValue()&&(c+=h.attribute("dx").Length.toPixels("x")),h.x=c);c=h.measureText(b);if(a!="start"&&(j==0||h.attribute("x").hasValue())){for(var l=c,o=j+1;o<this.children.length;o++){var n=this.children[o]; |
|||
if(n.attribute("x").hasValue())break;l+=n.measureText(b)}h.x-=a=="end"?l:l/2}c=h.x+c;h.attribute("y").hasValue()?h.y=h.attribute("y").Length.toPixels("y"):(h.attribute("dy").hasValue()&&(d+=h.attribute("dy").Length.toPixels("y")),h.y=d);d=h.y;h.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g="isolated";if((c==0||b[c- |
|||
1]==" ")&&c<b.length-2&&b[c+1]!=" ")g="terminal";c>0&&b[c-1]!=" "&&c<b.length-2&&b[c+1]!=" "&&(g="medial");if(c>0&&b[c-1]!=" "&&(c==b.length-1||b[c+1]==" "))g="initial";typeof a.glyphs[e]!="undefined"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type=="glyph"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var k=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), |
|||
e=this.parent.style("font-style").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split("").reverse().join(""));for(var g=a.ToNumberArray(this.parent.attribute("dx").value),j=0;j<f.length;j++){var h=this.getGlyph(b,f,j),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e=="italic"&&c.transform(1,0,0.4,1,0,0);h.render(c);e=="italic"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/ |
|||
l,-1/l);c.translate(-this.x,-this.y);this.x+=k*(h.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[j]!="undefined"&&!isNaN(g[j])&&(this.x+=g[j])}}else c.strokeStyle!=""&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=""&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var c=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), |
|||
k=0,e=this.getText();b.isRTL&&(e=e.split("").reverse().join(""));for(var f=a.ToNumberArray(this.parent.attribute("dx").value),g=0;g<e.length;g++){var j=this.getGlyph(b,e,g);k+=(j.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!="undefined"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase; |
|||
a.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase; |
|||
a.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:"";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x, |
|||
this.y-c.Length.toPixels("y"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute("xlink:href").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor="pointer"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement("img");this.loaded=!1;var d=this;this.img.onload= |
|||
function(){d.loaded=!0};this.img.src=this.attribute("xlink:href").value;this.renderChildren=function(b){var c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute("preserveAspectRatio").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase; |
|||
a.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute("viewBox").hasValue()){var b= |
|||
a.ToNumberArray(this.attribute("viewBox").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute("preserveAspectRatio").value,this.attribute("width").Length.toPixels("x"),width,this.attribute("height").Length.toPixels("y"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue: |
|||
""),c=c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,""),c=a.compressSpaces(c),c=c.split("}"),d=0;d<c.length;d++)if(a.trim(c[d])!="")for(var b=c[d].split("{"),k=b[0].split(","),b=b[1].split(";"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=""){for(var g={},j=0;j<b.length;j++){var h=b[j].indexOf(":"),l=b[j].substr(0,h),h=b[j].substr(h+1,b[j].length-h);l!=null&&h!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(h)))}a.Styles[f]=g;if(f=="@font-face"){f=g["font-family"].value.replace(/"/g, |
|||
"");g=g.src.value.split(",");for(j=0;j<g.length;j++)if(g[j].indexOf('format("svg")')>0){l=g[j].indexOf("url");h=g[j].indexOf(")",l);l=g[j].substr(l+5,h-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName("font");for(h=0;h<l.length;h++){var o=a.CreateElement(l[h]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a); |
|||
this.attribute("x").hasValue()&&a.translate(this.attribute("x").Length.toPixels("x"),0);this.attribute("y").hasValue()&&a.translate(0,this.attribute("y").Length.toPixels("y"))};this.getDefinition=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(this.attribute("width").hasValue())a.attribute("width",!0).value=this.attribute("width").value;if(this.attribute("height").hasValue())a.attribute("height",!0).value=this.attribute("height").value;return a};this.path=function(a){var b= |
|||
this.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute("x").Length.toPixels("x"),e=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y"),j=b.attribute("mask").value;b.attribute("mask").value= |
|||
"";var h=document.createElement("canvas");h.width=c+f;h.height=e+g;var l=h.getContext("2d");this.renderChildren(l);var o=document.createElement("canvas");o.width=c+f;o.height=e+g;var n=o.getContext("2d");b.render(n);n.globalCompositeOperation="destination-in";n.fillStyle=l.createPattern(h,"no-repeat");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,"no-repeat");a.fillRect(0,0,c+f,e+g);b.attribute("mask").value=j};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath= |
|||
function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute("x").Length.toPixels("x"),f=this.attribute("y").Length.toPixels("y");if(e==0||f==0)e=c.x1,f=c.y1;var g= |
|||
this.attribute("width").Length.toPixels("x"),j=this.attribute("height").Length.toPixels("y");if(g==0||j==0)g=c.width(),j=c.height();c=b.style("filter").value;b.style("filter").value="";var h=0.2*g,l=0.2*j,o=document.createElement("canvas");o.width=g+2*h;o.height=j+2*l;var n=o.getContext("2d");n.translate(-e+h,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*h,j+2*l);a.drawImage(o,0,0,g+2*h,j+2*l,e-h,f-l,g+2*h,j+2*l);b.style("filter",!0).value=c};this.render= |
|||
function(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var j=0;j<g;j++)for(var h=0;h<f;h++)for(var l=a[j*f*4+h*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[j*f*4+h*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(h-q,0),m=a[j*f*4+p*4+3]/255,p=Math.min(h+q,f-1),p=a[j*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(h-q,0),r=a[j*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(h+q,f-1),r=a[j*f*4+r*4+o]);n+= |
|||
s*(m+r*(p==0||o==3?1:p))}c[h*g*4+j*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute("stdDeviation").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),j=Math.ceil(e*4)+1;mask=[];for(var h=0;h<j;h++)mask[h]=Math.exp(-0.5*(h/e)*(h/e));e=mask;j=0;for(h=1;h<e.length;h++)j+=Math.abs(e[h]);j=2*j+Math.abs(e[0]);for(h=0;h<e.length;h++)e[h]/=j;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype= |
|||
new a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log("ERROR: Element '"+a.nodeName+"' not yet implemented.")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,""),d=d.replace(/\-/g,""),b=null,b=typeof a.Element[d]!="undefined"?new a.Element[d](c):new a.Element.MISSING(c); |
|||
b.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)}, |
|||
c.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style("width").hasValue())c.canvas.width=k.style("width").Length.toPixels("x"),c.canvas.style.width=c.canvas.width+"px";if(k.style("height").hasValue())c.canvas.height= |
|||
k.style("height").Length.toPixels("y"),c.canvas.style.height=c.canvas.height+"px"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute("x",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute("y",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute("width").hasValue()&&(f=k.attribute("width").Length.toPixels("x")/ |
|||
a.opts.scaleWidth);k.attribute("height").hasValue()&&(g=k.attribute("height").Length.toPixels("y")/a.opts.scaleHeight);k.attribute("width",!0).value=a.opts.scaleWidth;k.attribute("height",!0).value=a.opts.scaleHeight;k.attribute("viewBox",!0).value="0 0 "+b*f+" "+d*g;k.attribute("preserveAspectRatio",!0).value="none"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback=="function"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f()); |
|||
a.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw=="function"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!= |
|||
0};this.onclick=function(a,d){this.events.push({type:"onclick",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:"onmousemove",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k= |
|||
this.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor="";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName("svg"),b=0;b<c.length;b++){a=c[b];d=document.createElement("canvas");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d, |
|||
a);a.parentNode.removeChild(a);var k=document.createElement("div");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a=="string"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext("2d"),typeof c.documentElement!="undefined"?b.loadXmlDoc(a,c):c.substr(0,1)=="<"?b.loadXml(a,c):b.load(a,c)}})(); |
|||
if(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})}; |
|||
(function(m){var a=m.css,c=m.CanVGRenderer,d=m.SVGRenderer,b=m.extend,k=m.merge,e=m.addEvent,f=m.createElement,g=m.discardElement;b(c.prototype,d.prototype);b(c.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,g=d.left,d=d.top,k=a.offsetWidth,m=a.offsetHeight,s={visibility:"hidden",position:"absolute"};this.init.apply(this,[a,b,c]);this.canvas=f("canvas",{width:k,height:m},{position:"relative",left:g,top:d},a); |
|||
this.ttLine=f("div",null,s,e);this.ttDiv=f("div",null,s,e);this.ttTimer=void 0;this.hiddenSvg=a=f("div",{width:k,height:m},{visibility:"hidden",left:g,top:d},e);a.appendChild(this.box)},configure:function(b){var c=this,d=b.options.tooltip,f=d.borderWidth,g=c.ttDiv,m=d.style,p=c.ttLine,t=parseInt(m.padding,10),m=k(m,{padding:t+"px","background-color":d.backgroundColor,"border-style":"solid","border-width":f+"px","border-radius":d.borderRadius+"px"});d.shadow&&(m=k(m,{"box-shadow":"1px 1px 3px gray", |
|||
"-webkit-box-shadow":"1px 1px 3px gray"}));a(g,m);a(p,{"border-left":"1px solid darkgray"});e(b,"tooltipRefresh",function(d){var e=b.container,f=e.offsetLeft,e=e.offsetTop,k;g.innerHTML=d.text;k=b.tooltip.getPosition(g.offsetWidth,g.offsetHeight,{plotX:d.x,plotY:d.y});a(g,{visibility:"visible",left:k.x+"px",top:k.y+"px","border-color":d.borderColor});a(p,{visibility:"visible",left:f+d.x+"px",top:e+b.plotTop+"px",height:b.plotHeight+"px"});c.ttTimer!==void 0&&clearTimeout(c.ttTimer);c.ttTimer=setTimeout(function(){a(g, |
|||
{visibility:"hidden"});a(p,{visibility:"hidden"})},3E3)})},destroy:function(){g(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);g(this.ttLine);g(this.ttDiv);g(this.hiddenSvg);return d.prototype.destroy.apply(this)},color:function(a,b,c){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return d.prototype.color.call(this,a,b,c)},draw:function(){window.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts); |
|||
File diff suppressed because it is too large
@ -0,0 +1,17 @@ |
|||
/* |
|||
Data plugin for Highcharts |
|||
|
|||
(c) 2012-2013 Torstein Hønsi |
|||
Last revision 2013-06-07 |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(h){var k=h.each,m=function(b,a){this.init(b,a)};h.extend(m.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];k(b&&b.series||[],function(b){c.push((h.seriesTypes[b.type||a||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount= |
|||
{global:(h.seriesTypes[a||"line"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g=0;c&&(c=c.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter||"\n"),k(c,function(c,h){var n=b.trim(c),p=n.indexOf("#")===0;h>=f&&h<=i&&!p&&n!==""&& |
|||
(n=c.split(a.itemDelimiter||","),k(n,function(b,a){a>=j&&a<=e&&(d[a-j]||(d[a-j]=[]),d[a-j][g]=b)}),g+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,i=b.startColumn||0,j=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a==="string"&&(a=document.getElementById(a)),k(a.getElementsByTagName("tr"),function(a,b){e=0;b>=d&&b<=f&&k(a.childNodes,function(a){if((a.tagName==="TD"||a.tagName==="TH")&&e>=i&&e<=j)c[e]||(c[e]=[]), |
|||
c[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,h;c&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+c+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",function(a){var a=a.feed.entry,c,k=a.length,m=0,o=0,l;for(l=0;l<k;l++)c=a[l],m=Math.max(m,c.gs$cell.col), |
|||
o=Math.max(o,c.gs$cell.row);for(l=0;l<m;l++)if(l>=j&&l<=e)d[l-j]=[],d[l-j].length=Math.min(o,i-f);for(l=0;l<k;l++)if(c=a[l],g=c.gs$cell.row-1,h=c.gs$cell.col-1,h>=j&&h<=e&&g>=f&&g<=i)d[h-j][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){k(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b==="string"?b.replace(/^\s+|\s+$/g,""):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,i;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),i=this.trim(d), |
|||
i==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d==="number"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=i===""?null:i)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b==="string")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a, |
|||
c,d,f,i;if(b){i=[];c=b.length;for(a=0;a<c;a++){f=b[a].length;for(d=0;d<f;d++)i[d]||(i[d]=[]),i[d][a]=b[a][d]}}return i},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var b=this.columns,a,c,d=this.options,f,i,j,e,g,k;if(d.complete){this.getColumnDistribution();b.length>1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c="datetime":a.isNumeric||(c="category"));for(e=0;e<b.length;e++)if(this.headerRow===0)b[e].name=b[e].shift();i=[]; |
|||
for(e=0,k=0;e<b.length;k++){f=h.pick(this.valueCount.individual[k],this.valueCount.global);j=[];for(g=0;g<b[e].length;g++)j[g]=[a[g],b[e][g]!==void 0?b[e][g]:null],f>1&&j[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&j[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&j[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&j[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);i[k]={name:b[e].name,data:j};e+=f}d.complete({xAxis:{type:c},series:i})}}});h.Data=m;h.data=function(b,a){return new m(b,a)};h.wrap(h.Chart.prototype, |
|||
"init",function(b,a,c){var d=this;a&&a.data?h.data(h.extend(a.data,{complete:function(f){a.series&&k(a.series,function(b,c){a.series[c]=h.merge(b,f.series[c])});a=h.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts); |
|||
@ -0,0 +1,582 @@ |
|||
/** |
|||
* @license Data plugin for Highcharts |
|||
* |
|||
* (c) 2012-2013 Torstein Hønsi |
|||
* Last revision 2013-06-07 |
|||
* |
|||
* License: www.highcharts.com/license |
|||
*/ |
|||
|
|||
/* |
|||
* The Highcharts Data plugin is a utility to ease parsing of input sources like |
|||
* CSV, HTML tables or grid views into basic configuration options for use |
|||
* directly in the Highcharts constructor. |
|||
* |
|||
* Demo: http://jsfiddle.net/highcharts/SnLFj/
|
|||
* |
|||
* --- OPTIONS --- |
|||
* |
|||
* - columns : Array<Array<Mixed>> |
|||
* A two-dimensional array representing the input data on tabular form. This input can |
|||
* be used when the data is already parsed, for example from a grid view component. |
|||
* Each cell can be a string or number. If not switchRowsAndColumns is set, the columns |
|||
* are interpreted as series. See also the rows option. |
|||
* |
|||
* - complete : Function(chartOptions) |
|||
* The callback that is evaluated when the data is finished loading, optionally from an |
|||
* external source, and parsed. The first argument passed is a finished chart options |
|||
* object, containing series and an xAxis with categories if applicable. Thise options |
|||
* can be extended with additional options and passed directly to the chart constructor. |
|||
* |
|||
* - csv : String |
|||
* A comma delimited string to be parsed. Related options are startRow, endRow, startColumn |
|||
* and endColumn to delimit what part of the table is used. The lineDelimiter and |
|||
* itemDelimiter options define the CSV delimiter formats. |
|||
* |
|||
* - endColumn : Integer |
|||
* In tabular input data, the first row (indexed by 0) to use. Defaults to the last |
|||
* column containing data. |
|||
* |
|||
* - endRow : Integer |
|||
* In tabular input data, the last row (indexed by 0) to use. Defaults to the last row |
|||
* containing data. |
|||
* |
|||
* - googleSpreadsheetKey : String |
|||
* A Google Spreadsheet key. See https://developers.google.com/gdata/samples/spreadsheet_sample
|
|||
* for general information on GS. |
|||
* |
|||
* - googleSpreadsheetWorksheet : String |
|||
* The Google Spreadsheet worksheet. The available id's can be read from |
|||
* https://spreadsheets.google.com/feeds/worksheets/{key}/public/basic
|
|||
* |
|||
* - itemDelimiter : String |
|||
* Item or cell delimiter for parsing CSV. Defaults to ",". |
|||
* |
|||
* - lineDelimiter : String |
|||
* Line delimiter for parsing CSV. Defaults to "\n". |
|||
* |
|||
* - parsed : Function |
|||
* A callback function to access the parsed columns, the two-dimentional input data |
|||
* array directly, before they are interpreted into series data and categories. |
|||
* |
|||
* - parseDate : Function |
|||
* A callback function to parse string representations of dates into JavaScript timestamps. |
|||
* Return an integer on success. |
|||
* |
|||
* - rows : Array<Array<Mixed>> |
|||
* The same as the columns input option, but defining rows intead of columns. |
|||
* |
|||
* - startColumn : Integer |
|||
* In tabular input data, the first column (indexed by 0) to use. |
|||
* |
|||
* - startRow : Integer |
|||
* In tabular input data, the first row (indexed by 0) to use. |
|||
* |
|||
* - table : String|HTMLElement |
|||
* A HTML table or the id of such to be parsed as input data. Related options ara startRow, |
|||
* endRow, startColumn and endColumn to delimit what part of the table is used. |
|||
*/ |
|||
|
|||
// JSLint options:
|
|||
/*global jQuery */ |
|||
|
|||
(function (Highcharts) { |
|||
|
|||
// Utilities
|
|||
var each = Highcharts.each; |
|||
|
|||
|
|||
// The Data constructor
|
|||
var Data = function (dataOptions, chartOptions) { |
|||
this.init(dataOptions, chartOptions); |
|||
}; |
|||
|
|||
// Set the prototype properties
|
|||
Highcharts.extend(Data.prototype, { |
|||
|
|||
/** |
|||
* Initialize the Data object with the given options |
|||
*/ |
|||
init: function (options, chartOptions) { |
|||
this.options = options; |
|||
this.chartOptions = chartOptions; |
|||
this.columns = options.columns || this.rowsToColumns(options.rows) || []; |
|||
|
|||
// No need to parse or interpret anything
|
|||
if (this.columns.length) { |
|||
this.dataFound(); |
|||
|
|||
// Parse and interpret
|
|||
} else { |
|||
|
|||
// Parse a CSV string if options.csv is given
|
|||
this.parseCSV(); |
|||
|
|||
// Parse a HTML table if options.table is given
|
|||
this.parseTable(); |
|||
|
|||
// Parse a Google Spreadsheet
|
|||
this.parseGoogleSpreadsheet(); |
|||
} |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* Get the column distribution. For example, a line series takes a single column for |
|||
* Y values. A range series takes two columns for low and high values respectively, |
|||
* and an OHLC series takes four columns. |
|||
*/ |
|||
getColumnDistribution: function () { |
|||
var chartOptions = this.chartOptions, |
|||
getValueCount = function (type) { |
|||
return (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length; |
|||
}, |
|||
globalType = chartOptions && chartOptions.chart && chartOptions.chart.type, |
|||
individualCounts = []; |
|||
|
|||
each((chartOptions && chartOptions.series) || [], function (series) { |
|||
individualCounts.push(getValueCount(series.type || globalType)); |
|||
}); |
|||
|
|||
this.valueCount = { |
|||
global: getValueCount(globalType), |
|||
individual: individualCounts |
|||
}; |
|||
}, |
|||
|
|||
|
|||
dataFound: function () { |
|||
// Interpret the values into right types
|
|||
this.parseTypes(); |
|||
|
|||
// Use first row for series names?
|
|||
this.findHeaderRow(); |
|||
|
|||
// Handle columns if a handleColumns callback is given
|
|||
this.parsed(); |
|||
|
|||
// Complete if a complete callback is given
|
|||
this.complete(); |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* Parse a CSV input string |
|||
*/ |
|||
parseCSV: function () { |
|||
var self = this, |
|||
options = this.options, |
|||
csv = options.csv, |
|||
columns = this.columns, |
|||
startRow = options.startRow || 0, |
|||
endRow = options.endRow || Number.MAX_VALUE, |
|||
startColumn = options.startColumn || 0, |
|||
endColumn = options.endColumn || Number.MAX_VALUE, |
|||
lines, |
|||
activeRowNo = 0; |
|||
|
|||
if (csv) { |
|||
|
|||
lines = csv |
|||
.replace(/\r\n/g, "\n") // Unix
|
|||
.replace(/\r/g, "\n") // Mac
|
|||
.split(options.lineDelimiter || "\n"); |
|||
|
|||
each(lines, function (line, rowNo) { |
|||
var trimmed = self.trim(line), |
|||
isComment = trimmed.indexOf('#') === 0, |
|||
isBlank = trimmed === '', |
|||
items; |
|||
|
|||
if (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) { |
|||
items = line.split(options.itemDelimiter || ','); |
|||
each(items, function (item, colNo) { |
|||
if (colNo >= startColumn && colNo <= endColumn) { |
|||
if (!columns[colNo - startColumn]) { |
|||
columns[colNo - startColumn] = []; |
|||
} |
|||
|
|||
columns[colNo - startColumn][activeRowNo] = item; |
|||
} |
|||
}); |
|||
activeRowNo += 1; |
|||
} |
|||
}); |
|||
|
|||
this.dataFound(); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Parse a HTML table |
|||
*/ |
|||
parseTable: function () { |
|||
var options = this.options, |
|||
table = options.table, |
|||
columns = this.columns, |
|||
startRow = options.startRow || 0, |
|||
endRow = options.endRow || Number.MAX_VALUE, |
|||
startColumn = options.startColumn || 0, |
|||
endColumn = options.endColumn || Number.MAX_VALUE, |
|||
colNo; |
|||
|
|||
if (table) { |
|||
|
|||
if (typeof table === 'string') { |
|||
table = document.getElementById(table); |
|||
} |
|||
|
|||
each(table.getElementsByTagName('tr'), function (tr, rowNo) { |
|||
colNo = 0; |
|||
if (rowNo >= startRow && rowNo <= endRow) { |
|||
each(tr.childNodes, function (item) { |
|||
if ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) { |
|||
if (!columns[colNo]) { |
|||
columns[colNo] = []; |
|||
} |
|||
columns[colNo][rowNo - startRow] = item.innerHTML; |
|||
|
|||
colNo += 1; |
|||
} |
|||
}); |
|||
} |
|||
}); |
|||
|
|||
this.dataFound(); // continue
|
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* TODO: |
|||
* - switchRowsAndColumns |
|||
*/ |
|||
parseGoogleSpreadsheet: function () { |
|||
var self = this, |
|||
options = this.options, |
|||
googleSpreadsheetKey = options.googleSpreadsheetKey, |
|||
columns = this.columns, |
|||
startRow = options.startRow || 0, |
|||
endRow = options.endRow || Number.MAX_VALUE, |
|||
startColumn = options.startColumn || 0, |
|||
endColumn = options.endColumn || Number.MAX_VALUE, |
|||
gr, // google row
|
|||
gc; // google column
|
|||
|
|||
if (googleSpreadsheetKey) { |
|||
jQuery.getJSON('https://spreadsheets.google.com/feeds/cells/' + |
|||
googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') + |
|||
'/public/values?alt=json-in-script&callback=?', |
|||
function (json) { |
|||
|
|||
// Prepare the data from the spreadsheat
|
|||
var cells = json.feed.entry, |
|||
cell, |
|||
cellCount = cells.length, |
|||
colCount = 0, |
|||
rowCount = 0, |
|||
i; |
|||
|
|||
// First, find the total number of columns and rows that
|
|||
// are actually filled with data
|
|||
for (i = 0; i < cellCount; i++) { |
|||
cell = cells[i]; |
|||
colCount = Math.max(colCount, cell.gs$cell.col); |
|||
rowCount = Math.max(rowCount, cell.gs$cell.row); |
|||
} |
|||
|
|||
// Set up arrays containing the column data
|
|||
for (i = 0; i < colCount; i++) { |
|||
if (i >= startColumn && i <= endColumn) { |
|||
// Create new columns with the length of either end-start or rowCount
|
|||
columns[i - startColumn] = []; |
|||
|
|||
// Setting the length to avoid jslint warning
|
|||
columns[i - startColumn].length = Math.min(rowCount, endRow - startRow); |
|||
} |
|||
} |
|||
|
|||
// Loop over the cells and assign the value to the right
|
|||
// place in the column arrays
|
|||
for (i = 0; i < cellCount; i++) { |
|||
cell = cells[i]; |
|||
gr = cell.gs$cell.row - 1; // rows start at 1
|
|||
gc = cell.gs$cell.col - 1; // columns start at 1
|
|||
|
|||
// If both row and col falls inside start and end
|
|||
// set the transposed cell value in the newly created columns
|
|||
if (gc >= startColumn && gc <= endColumn && |
|||
gr >= startRow && gr <= endRow) { |
|||
columns[gc - startColumn][gr - startRow] = cell.content.$t; |
|||
} |
|||
} |
|||
self.dataFound(); |
|||
}); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Find the header row. For now, we just check whether the first row contains |
|||
* numbers or strings. Later we could loop down and find the first row with |
|||
* numbers. |
|||
*/ |
|||
findHeaderRow: function () { |
|||
var headerRow = 0; |
|||
each(this.columns, function (column) { |
|||
if (typeof column[0] !== 'string') { |
|||
headerRow = null; |
|||
} |
|||
}); |
|||
this.headerRow = 0; |
|||
}, |
|||
|
|||
/** |
|||
* Trim a string from whitespace |
|||
*/ |
|||
trim: function (str) { |
|||
return typeof str === 'string' ? str.replace(/^\s+|\s+$/g, '') : str; |
|||
}, |
|||
|
|||
/** |
|||
* Parse numeric cells in to number types and date types in to true dates. |
|||
* @param {Object} columns |
|||
*/ |
|||
parseTypes: function () { |
|||
var columns = this.columns, |
|||
col = columns.length, |
|||
row, |
|||
val, |
|||
floatVal, |
|||
trimVal, |
|||
dateVal; |
|||
|
|||
while (col--) { |
|||
row = columns[col].length; |
|||
while (row--) { |
|||
val = columns[col][row]; |
|||
floatVal = parseFloat(val); |
|||
trimVal = this.trim(val); |
|||
|
|||
/*jslint eqeq: true*/ |
|||
if (trimVal == floatVal) { // is numeric
|
|||
/*jslint eqeq: false*/ |
|||
columns[col][row] = floatVal; |
|||
|
|||
// If the number is greater than milliseconds in a year, assume datetime
|
|||
if (floatVal > 365 * 24 * 3600 * 1000) { |
|||
columns[col].isDatetime = true; |
|||
} else { |
|||
columns[col].isNumeric = true; |
|||
} |
|||
|
|||
} else { // string, continue to determine if it is a date string or really a string
|
|||
dateVal = this.parseDate(val); |
|||
|
|||
if (col === 0 && typeof dateVal === 'number' && !isNaN(dateVal)) { // is date
|
|||
columns[col][row] = dateVal; |
|||
columns[col].isDatetime = true; |
|||
|
|||
} else { // string
|
|||
columns[col][row] = trimVal === '' ? null : trimVal; |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
}, |
|||
//*
|
|||
dateFormats: { |
|||
'YYYY-mm-dd': { |
|||
regex: '^([0-9]{4})-([0-9]{2})-([0-9]{2})$', |
|||
parser: function (match) { |
|||
return Date.UTC(+match[1], match[2] - 1, +match[3]); |
|||
} |
|||
} |
|||
}, |
|||
// */
|
|||
/** |
|||
* Parse a date and return it as a number. Overridable through options.parseDate. |
|||
*/ |
|||
parseDate: function (val) { |
|||
var parseDate = this.options.parseDate, |
|||
ret, |
|||
key, |
|||
format, |
|||
match; |
|||
|
|||
if (parseDate) { |
|||
ret = parseDate(val); |
|||
} |
|||
|
|||
if (typeof val === 'string') { |
|||
for (key in this.dateFormats) { |
|||
format = this.dateFormats[key]; |
|||
match = val.match(format.regex); |
|||
if (match) { |
|||
ret = format.parser(match); |
|||
} |
|||
} |
|||
} |
|||
return ret; |
|||
}, |
|||
|
|||
/** |
|||
* Reorganize rows into columns |
|||
*/ |
|||
rowsToColumns: function (rows) { |
|||
var row, |
|||
rowsLength, |
|||
col, |
|||
colsLength, |
|||
columns; |
|||
|
|||
if (rows) { |
|||
columns = []; |
|||
rowsLength = rows.length; |
|||
for (row = 0; row < rowsLength; row++) { |
|||
colsLength = rows[row].length; |
|||
for (col = 0; col < colsLength; col++) { |
|||
if (!columns[col]) { |
|||
columns[col] = []; |
|||
} |
|||
columns[col][row] = rows[row][col]; |
|||
} |
|||
} |
|||
} |
|||
return columns; |
|||
}, |
|||
|
|||
/** |
|||
* A hook for working directly on the parsed columns |
|||
*/ |
|||
parsed: function () { |
|||
if (this.options.parsed) { |
|||
this.options.parsed.call(this, this.columns); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* If a complete callback function is provided in the options, interpret the |
|||
* columns into a Highcharts options object. |
|||
*/ |
|||
complete: function () { |
|||
|
|||
var columns = this.columns, |
|||
firstCol, |
|||
type, |
|||
options = this.options, |
|||
valueCount, |
|||
series, |
|||
data, |
|||
i, |
|||
j, |
|||
seriesIndex; |
|||
|
|||
|
|||
if (options.complete) { |
|||
|
|||
this.getColumnDistribution(); |
|||
|
|||
// Use first column for X data or categories?
|
|||
if (columns.length > 1) { |
|||
firstCol = columns.shift(); |
|||
if (this.headerRow === 0) { |
|||
firstCol.shift(); // remove the first cell
|
|||
} |
|||
|
|||
|
|||
if (firstCol.isDatetime) { |
|||
type = 'datetime'; |
|||
} else if (!firstCol.isNumeric) { |
|||
type = 'category'; |
|||
} |
|||
} |
|||
|
|||
// Get the names and shift the top row
|
|||
for (i = 0; i < columns.length; i++) { |
|||
if (this.headerRow === 0) { |
|||
columns[i].name = columns[i].shift(); |
|||
} |
|||
} |
|||
|
|||
// Use the next columns for series
|
|||
series = []; |
|||
for (i = 0, seriesIndex = 0; i < columns.length; seriesIndex++) { |
|||
|
|||
// This series' value count
|
|||
valueCount = Highcharts.pick(this.valueCount.individual[seriesIndex], this.valueCount.global); |
|||
|
|||
// Iterate down the cells of each column and add data to the series
|
|||
data = []; |
|||
for (j = 0; j < columns[i].length; j++) { |
|||
data[j] = [ |
|||
firstCol[j], |
|||
columns[i][j] !== undefined ? columns[i][j] : null |
|||
]; |
|||
if (valueCount > 1) { |
|||
data[j].push(columns[i + 1][j] !== undefined ? columns[i + 1][j] : null); |
|||
} |
|||
if (valueCount > 2) { |
|||
data[j].push(columns[i + 2][j] !== undefined ? columns[i + 2][j] : null); |
|||
} |
|||
if (valueCount > 3) { |
|||
data[j].push(columns[i + 3][j] !== undefined ? columns[i + 3][j] : null); |
|||
} |
|||
if (valueCount > 4) { |
|||
data[j].push(columns[i + 4][j] !== undefined ? columns[i + 4][j] : null); |
|||
} |
|||
} |
|||
|
|||
// Add the series
|
|||
series[seriesIndex] = { |
|||
name: columns[i].name, |
|||
data: data |
|||
}; |
|||
|
|||
i += valueCount; |
|||
} |
|||
|
|||
// Do the callback
|
|||
options.complete({ |
|||
xAxis: { |
|||
type: type |
|||
}, |
|||
series: series |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
// Register the Data prototype and data function on Highcharts
|
|||
Highcharts.Data = Data; |
|||
Highcharts.data = function (options, chartOptions) { |
|||
return new Data(options, chartOptions); |
|||
}; |
|||
|
|||
// Extend Chart.init so that the Chart constructor accepts a new configuration
|
|||
// option group, data.
|
|||
Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) { |
|||
var chart = this; |
|||
|
|||
if (userOptions && userOptions.data) { |
|||
Highcharts.data(Highcharts.extend(userOptions.data, { |
|||
complete: function (dataOptions) { |
|||
|
|||
// Merge series configs
|
|||
if (userOptions.series) { |
|||
each(userOptions.series, function (series, i) { |
|||
userOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]); |
|||
}); |
|||
} |
|||
|
|||
// Do the merge
|
|||
userOptions = Highcharts.merge(dataOptions, userOptions); |
|||
|
|||
proceed.call(chart, userOptions, callback); |
|||
} |
|||
}), userOptions); |
|||
} else { |
|||
proceed.call(chart, userOptions, callback); |
|||
} |
|||
}); |
|||
|
|||
}(Highcharts)); |
|||
@ -0,0 +1,11 @@ |
|||
(function(e){function q(b,a,c){return"rgba("+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(",")+")"}var m=function(){},j=e.getOptions(),g=e.each,n=e.extend,o=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent;n(j.lang,{drillUpText:"◁ Back to {series.name}"});j.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#039",fontWeight:"bold",textDecoration:"underline"},activeDataLabelStyle:{cursor:"pointer", |
|||
color:"#039",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500},drillUpButton:{position:{align:"right",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(){this.attr({opacity:0.1,visibility:"visible"}).animate({opacity:1},{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=n({color:e},a);g=HighchartsAdapter.inArray(this,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions, |
|||
shapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace("{series.name}", |
|||
this.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton;this.drillUpButton?this.drillUpButton.attr({text:a}).align():this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()}).attr(n({align:c.position.align,zIndex:9},c.theme)).add().align(c.position,!1,c.relativeTo||"plotBox")};h.prototype.drillUp=function(){var b=this.drilldownLevels.pop(),a=this.series[0], |
|||
c=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,"drillup",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()}; |
|||
k.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop==="start"&&this.attr({fill:q(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo= |
|||
function(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?"show":"fadeIn";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length- |
|||
1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop==="start"&&this.attr({fill:q(g,e.Color(b.color).rgba, |
|||
c.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=a.series.length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,"drilldown",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};o(e.Point.prototype,"init",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f,"click",function(){f.doDrilldown()}), |
|||
a){if(!a._basicStyle)a._basicStyle=a.element.getAttribute("style");a.addClass("highcharts-drilldown-axis-label").css(b.options.drilldown.activeAxisLabelStyle).on("click",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute("style",a._basicStyle);return f});o(e.Series.prototype,"drawDataLabels",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({"class":"highcharts-drilldown-data-label"}).css(a).on("click", |
|||
function(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var p,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({"class":"highcharts-drilldown-point"}).css({cursor:"pointer"})})};for(p in i)i[p].prototype.supportsDrilldown&&o(i[p].prototype,"drawTracker",j)})(Highcharts); |
|||
@ -0,0 +1,447 @@ |
|||
/** |
|||
* Highcharts Drilldown plugin |
|||
* |
|||
* Author: Torstein Honsi |
|||
* Last revision: 2013-02-18 |
|||
* License: MIT License |
|||
* |
|||
* Demo: http://jsfiddle.net/highcharts/Vf3yT/
|
|||
*/ |
|||
|
|||
/*global HighchartsAdapter*/ |
|||
(function (H) { |
|||
|
|||
"use strict"; |
|||
|
|||
var noop = function () {}, |
|||
defaultOptions = H.getOptions(), |
|||
each = H.each, |
|||
extend = H.extend, |
|||
wrap = H.wrap, |
|||
Chart = H.Chart, |
|||
seriesTypes = H.seriesTypes, |
|||
PieSeries = seriesTypes.pie, |
|||
ColumnSeries = seriesTypes.column, |
|||
fireEvent = HighchartsAdapter.fireEvent; |
|||
|
|||
// Utilities
|
|||
function tweenColors(startColor, endColor, pos) { |
|||
var rgba = [ |
|||
Math.round(startColor[0] + (endColor[0] - startColor[0]) * pos), |
|||
Math.round(startColor[1] + (endColor[1] - startColor[1]) * pos), |
|||
Math.round(startColor[2] + (endColor[2] - startColor[2]) * pos), |
|||
startColor[3] + (endColor[3] - startColor[3]) * pos |
|||
]; |
|||
return 'rgba(' + rgba.join(',') + ')'; |
|||
} |
|||
|
|||
// Add language
|
|||
extend(defaultOptions.lang, { |
|||
drillUpText: '◁ Back to {series.name}' |
|||
}); |
|||
defaultOptions.drilldown = { |
|||
activeAxisLabelStyle: { |
|||
cursor: 'pointer', |
|||
color: '#039', |
|||
fontWeight: 'bold', |
|||
textDecoration: 'underline' |
|||
}, |
|||
activeDataLabelStyle: { |
|||
cursor: 'pointer', |
|||
color: '#039', |
|||
fontWeight: 'bold', |
|||
textDecoration: 'underline' |
|||
}, |
|||
animation: { |
|||
duration: 500 |
|||
}, |
|||
drillUpButton: { |
|||
position: { |
|||
align: 'right', |
|||
x: -10, |
|||
y: 10 |
|||
} |
|||
// relativeTo: 'plotBox'
|
|||
// theme
|
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* A general fadeIn method |
|||
*/ |
|||
H.SVGRenderer.prototype.Element.prototype.fadeIn = function () { |
|||
this |
|||
.attr({ |
|||
opacity: 0.1, |
|||
visibility: 'visible' |
|||
}) |
|||
.animate({ |
|||
opacity: 1 |
|||
}, { |
|||
duration: 250 |
|||
}); |
|||
}; |
|||
|
|||
// Extend the Chart prototype
|
|||
Chart.prototype.drilldownLevels = []; |
|||
|
|||
Chart.prototype.addSeriesAsDrilldown = function (point, ddOptions) { |
|||
var oldSeries = point.series, |
|||
xAxis = oldSeries.xAxis, |
|||
yAxis = oldSeries.yAxis, |
|||
newSeries, |
|||
color = point.color || oldSeries.color, |
|||
pointIndex, |
|||
level; |
|||
|
|||
ddOptions = extend({ |
|||
color: color |
|||
}, ddOptions); |
|||
pointIndex = HighchartsAdapter.inArray(this, oldSeries.points); |
|||
level = { |
|||
seriesOptions: oldSeries.userOptions, |
|||
shapeArgs: point.shapeArgs, |
|||
bBox: point.graphic.getBBox(), |
|||
color: color, |
|||
newSeries: ddOptions, |
|||
pointOptions: oldSeries.options.data[pointIndex], |
|||
pointIndex: pointIndex, |
|||
oldExtremes: { |
|||
xMin: xAxis && xAxis.userMin, |
|||
xMax: xAxis && xAxis.userMax, |
|||
yMin: yAxis && yAxis.userMin, |
|||
yMax: yAxis && yAxis.userMax |
|||
} |
|||
}; |
|||
|
|||
this.drilldownLevels.push(level); |
|||
|
|||
newSeries = this.addSeries(ddOptions, false); |
|||
if (xAxis) { |
|||
xAxis.oldPos = xAxis.pos; |
|||
xAxis.userMin = xAxis.userMax = null; |
|||
yAxis.userMin = yAxis.userMax = null; |
|||
} |
|||
|
|||
// Run fancy cross-animation on supported and equal types
|
|||
if (oldSeries.type === newSeries.type) { |
|||
newSeries.animate = newSeries.animateDrilldown || noop; |
|||
newSeries.options.animation = true; |
|||
} |
|||
|
|||
oldSeries.remove(false); |
|||
|
|||
this.redraw(); |
|||
this.showDrillUpButton(); |
|||
}; |
|||
|
|||
Chart.prototype.getDrilldownBackText = function () { |
|||
var lastLevel = this.drilldownLevels[this.drilldownLevels.length - 1]; |
|||
|
|||
return this.options.lang.drillUpText.replace('{series.name}', lastLevel.seriesOptions.name); |
|||
|
|||
}; |
|||
|
|||
Chart.prototype.showDrillUpButton = function () { |
|||
var chart = this, |
|||
backText = this.getDrilldownBackText(), |
|||
buttonOptions = chart.options.drilldown.drillUpButton; |
|||
|
|||
|
|||
if (!this.drillUpButton) { |
|||
this.drillUpButton = this.renderer.button( |
|||
backText, |
|||
null, |
|||
null, |
|||
function () { |
|||
chart.drillUp(); |
|||
} |
|||
) |
|||
.attr(extend({ |
|||
align: buttonOptions.position.align, |
|||
zIndex: 9 |
|||
}, buttonOptions.theme)) |
|||
.add() |
|||
.align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox'); |
|||
} else { |
|||
this.drillUpButton.attr({ |
|||
text: backText |
|||
}) |
|||
.align(); |
|||
} |
|||
}; |
|||
|
|||
Chart.prototype.drillUp = function () { |
|||
var chart = this, |
|||
level = chart.drilldownLevels.pop(), |
|||
oldSeries = chart.series[0], |
|||
oldExtremes = level.oldExtremes, |
|||
newSeries = chart.addSeries(level.seriesOptions, false); |
|||
|
|||
fireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions }); |
|||
|
|||
if (newSeries.type === oldSeries.type) { |
|||
newSeries.drilldownLevel = level; |
|||
newSeries.animate = newSeries.animateDrillupTo || noop; |
|||
newSeries.options.animation = true; |
|||
|
|||
if (oldSeries.animateDrillupFrom) { |
|||
oldSeries.animateDrillupFrom(level); |
|||
} |
|||
} |
|||
|
|||
oldSeries.remove(false); |
|||
|
|||
// Reset the zoom level of the upper series
|
|||
if (newSeries.xAxis) { |
|||
newSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false); |
|||
newSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false); |
|||
} |
|||
|
|||
|
|||
this.redraw(); |
|||
|
|||
if (this.drilldownLevels.length === 0) { |
|||
this.drillUpButton = this.drillUpButton.destroy(); |
|||
} else { |
|||
this.drillUpButton.attr({ |
|||
text: this.getDrilldownBackText() |
|||
}) |
|||
.align(); |
|||
} |
|||
}; |
|||
|
|||
PieSeries.prototype.animateDrilldown = function (init) { |
|||
var level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1], |
|||
animationOptions = this.chart.options.drilldown.animation, |
|||
animateFrom = level.shapeArgs, |
|||
start = animateFrom.start, |
|||
angle = animateFrom.end - start, |
|||
startAngle = angle / this.points.length, |
|||
startColor = H.Color(level.color).rgba; |
|||
|
|||
if (!init) { |
|||
each(this.points, function (point, i) { |
|||
var endColor = H.Color(point.color).rgba; |
|||
|
|||
/*jslint unparam: true*/ |
|||
point.graphic |
|||
.attr(H.merge(animateFrom, { |
|||
start: start + i * startAngle, |
|||
end: start + (i + 1) * startAngle |
|||
})) |
|||
.animate(point.shapeArgs, H.merge(animationOptions, { |
|||
step: function (val, fx) { |
|||
if (fx.prop === 'start') { |
|||
this.attr({ |
|||
fill: tweenColors(startColor, endColor, fx.pos) |
|||
}); |
|||
} |
|||
} |
|||
})); |
|||
/*jslint unparam: false*/ |
|||
}); |
|||
} |
|||
}; |
|||
|
|||
|
|||
/** |
|||
* When drilling up, keep the upper series invisible until the lower series has |
|||
* moved into place |
|||
*/ |
|||
PieSeries.prototype.animateDrillupTo = |
|||
ColumnSeries.prototype.animateDrillupTo = function (init) { |
|||
if (!init) { |
|||
var newSeries = this, |
|||
level = newSeries.drilldownLevel; |
|||
|
|||
each(this.points, function (point) { |
|||
point.graphic.hide(); |
|||
if (point.dataLabel) { |
|||
point.dataLabel.hide(); |
|||
} |
|||
if (point.connector) { |
|||
point.connector.hide(); |
|||
} |
|||
}); |
|||
|
|||
|
|||
// Do dummy animation on first point to get to complete
|
|||
setTimeout(function () { |
|||
each(newSeries.points, function (point, i) { |
|||
// Fade in other points
|
|||
var verb = i === level.pointIndex ? 'show' : 'fadeIn'; |
|||
point.graphic[verb](); |
|||
if (point.dataLabel) { |
|||
point.dataLabel[verb](); |
|||
} |
|||
if (point.connector) { |
|||
point.connector[verb](); |
|||
} |
|||
}); |
|||
}, Math.max(this.chart.options.drilldown.animation.duration - 50, 0)); |
|||
|
|||
// Reset
|
|||
this.animate = noop; |
|||
} |
|||
|
|||
}; |
|||
|
|||
ColumnSeries.prototype.animateDrilldown = function (init) { |
|||
var animateFrom = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1].shapeArgs, |
|||
animationOptions = this.chart.options.drilldown.animation; |
|||
|
|||
if (!init) { |
|||
|
|||
animateFrom.x += (this.xAxis.oldPos - this.xAxis.pos); |
|||
|
|||
each(this.points, function (point) { |
|||
point.graphic |
|||
.attr(animateFrom) |
|||
.animate(point.shapeArgs, animationOptions); |
|||
}); |
|||
} |
|||
|
|||
}; |
|||
|
|||
/** |
|||
* When drilling up, pull out the individual point graphics from the lower series |
|||
* and animate them into the origin point in the upper series. |
|||
*/ |
|||
ColumnSeries.prototype.animateDrillupFrom = |
|||
PieSeries.prototype.animateDrillupFrom = |
|||
function (level) { |
|||
var animationOptions = this.chart.options.drilldown.animation, |
|||
group = this.group; |
|||
|
|||
delete this.group; |
|||
each(this.points, function (point) { |
|||
var graphic = point.graphic, |
|||
startColor = H.Color(point.color).rgba; |
|||
|
|||
delete point.graphic; |
|||
|
|||
/*jslint unparam: true*/ |
|||
graphic.animate(level.shapeArgs, H.merge(animationOptions, { |
|||
|
|||
step: function (val, fx) { |
|||
if (fx.prop === 'start') { |
|||
this.attr({ |
|||
fill: tweenColors(startColor, H.Color(level.color).rgba, fx.pos) |
|||
}); |
|||
} |
|||
}, |
|||
complete: function () { |
|||
graphic.destroy(); |
|||
if (group) { |
|||
group = group.destroy(); |
|||
} |
|||
} |
|||
})); |
|||
/*jslint unparam: false*/ |
|||
}); |
|||
}; |
|||
|
|||
H.Point.prototype.doDrilldown = function () { |
|||
var series = this.series, |
|||
chart = series.chart, |
|||
drilldown = chart.options.drilldown, |
|||
i = drilldown.series.length, |
|||
seriesOptions; |
|||
|
|||
while (i-- && !seriesOptions) { |
|||
if (drilldown.series[i].id === this.drilldown) { |
|||
seriesOptions = drilldown.series[i]; |
|||
} |
|||
} |
|||
|
|||
// Fire the event. If seriesOptions is undefined, the implementer can check for
|
|||
// seriesOptions, and call addSeriesAsDrilldown async if necessary.
|
|||
fireEvent(chart, 'drilldown', { |
|||
point: this, |
|||
seriesOptions: seriesOptions |
|||
}); |
|||
|
|||
if (seriesOptions) { |
|||
chart.addSeriesAsDrilldown(this, seriesOptions); |
|||
} |
|||
|
|||
}; |
|||
|
|||
wrap(H.Point.prototype, 'init', function (proceed, series, options, x) { |
|||
var point = proceed.call(this, series, options, x), |
|||
chart = series.chart, |
|||
tick = series.xAxis && series.xAxis.ticks[x], |
|||
tickLabel = tick && tick.label; |
|||
|
|||
if (point.drilldown) { |
|||
|
|||
// Add the click event to the point label
|
|||
H.addEvent(point, 'click', function () { |
|||
point.doDrilldown(); |
|||
}); |
|||
|
|||
// Make axis labels clickable
|
|||
if (tickLabel) { |
|||
if (!tickLabel._basicStyle) { |
|||
tickLabel._basicStyle = tickLabel.element.getAttribute('style'); |
|||
} |
|||
tickLabel |
|||
.addClass('highcharts-drilldown-axis-label') |
|||
.css(chart.options.drilldown.activeAxisLabelStyle) |
|||
.on('click', function () { |
|||
if (point.doDrilldown) { |
|||
point.doDrilldown(); |
|||
} |
|||
}); |
|||
|
|||
} |
|||
} else if (tickLabel && tickLabel._basicStyle) { |
|||
tickLabel.element.setAttribute('style', tickLabel._basicStyle); |
|||
} |
|||
|
|||
return point; |
|||
}); |
|||
|
|||
wrap(H.Series.prototype, 'drawDataLabels', function (proceed) { |
|||
var css = this.chart.options.drilldown.activeDataLabelStyle; |
|||
|
|||
proceed.call(this); |
|||
|
|||
each(this.points, function (point) { |
|||
if (point.drilldown && point.dataLabel) { |
|||
point.dataLabel |
|||
.attr({ |
|||
'class': 'highcharts-drilldown-data-label' |
|||
}) |
|||
.css(css) |
|||
.on('click', function () { |
|||
point.doDrilldown(); |
|||
}); |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
// Mark the trackers with a pointer
|
|||
ColumnSeries.prototype.supportsDrilldown = true; |
|||
PieSeries.prototype.supportsDrilldown = true; |
|||
var type, |
|||
drawTrackerWrapper = function (proceed) { |
|||
proceed.call(this); |
|||
each(this.points, function (point) { |
|||
if (point.drilldown && point.graphic) { |
|||
point.graphic |
|||
.attr({ |
|||
'class': 'highcharts-drilldown-point' |
|||
}) |
|||
.css({ cursor: 'pointer' }); |
|||
} |
|||
}); |
|||
}; |
|||
for (type in seriesTypes) { |
|||
if (seriesTypes[type].prototype.supportsDrilldown) { |
|||
wrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper); |
|||
} |
|||
} |
|||
|
|||
}(Highcharts)); |
|||
@ -0,0 +1,22 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
Exporting module |
|||
|
|||
(c) 2010-2013 Torstein Hønsi |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(f){var A=f.Chart,t=f.addEvent,C=f.removeEvent,k=f.createElement,n=f.discardElement,u=f.css,o=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,B=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,x=f.getOptions(),y;p(x.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});x.navigation={menuStyle:{border:"1px solid #A0A0A0", |
|||
background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};x.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu", |
|||
symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(c,a){var d,b;b=k("form",{method:"post", |
|||
action:c,enctype:"multipart/form-data"},{display:"none"},j.body);for(d in a)k("input",{type:"hidden",name:d,value:a[d]},null,b);b.submit();n(b)};p(A.prototype,{getSVG:function(c){var a=this,d,b,z,h,g=o(a.options,c);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};c=k("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);b=a.renderTo.style.width;h=a.renderTo.style.height;b=g.exporting.sourceWidth||g.chart.width||/px$/.test(b)&& |
|||
parseInt(b,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:c,forExport:!0,width:b,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=o(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&&g.setExtremes(h, |
|||
f,!0,!1)})});b=d.container.innerHTML;g=null;d.destroy();n(c);b=b.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ href=/g," xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/ /g," ").replace(/­/g,"").replace(/<IMG /g,"<image ").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g, |
|||
'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return b=b.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(c,a){var c=c||{},d=this.options.exporting,d=this.getSVG(o({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:c.sourceWidth|| |
|||
d.sourceWidth,sourceHeight:c.sourceHeight||d.sourceHeight}})),c=o(this.options.exporting,c);f.post(c.url,{filename:c.filename||"chart",type:c.type,width:c.width||0,scale:c.scale||2,svg:d})},print:function(){var c=this,a=c.container,d=[],b=a.parentNode,f=j.body,h=f.childNodes;if(!c.isPrinting)c.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),B.focus(),B.print(),setTimeout(function(){b.appendChild(a);r(h,function(a,b){if(a.nodeType=== |
|||
1)a.style.display=d[b]});c.isPrinting=!1},1E3)},contextMenu:function(c,a,d,b,f,h,g){var e=this,j=e.options.navigation,q=j.menuItemStyle,l=e.chartWidth,m=e.chartHeight,o="cache-"+c,i=e[o],s=D(f,h),v,w,n;if(!i)e[o]=i=k("div",{className:c},{position:"absolute",zIndex:1E3,padding:s+"px"},e.container),v=k("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},j.menuStyle),i),w=function(){u(i,{display:"none"});g&&g.setState(0);e.openMenu=!1},t(i, |
|||
"mouseleave",function(){n=setTimeout(w,500)}),t(i,"mouseenter",function(){clearTimeout(n)}),t(document,"mousedown",function(a){e.pointer.inClass(a.target,c)||w()}),r(a,function(a){if(a){var b=a.separator?k("hr",null,null,v):k("div",{onmouseover:function(){u(this,j.menuItemHoverStyle)},onmouseout:function(){u(this,q)},onclick:function(){w();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),v);e.exportDivElements.push(b)}}),e.exportDivElements.push(v, |
|||
i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>l?a.right=l-d-f-s+"px":a.left=d-s+"px";b+h+e.exportMenuHeight>m&&g.alignOptions.verticalAlign!=="top"?a.bottom=m-b-s+"px":a.top=b+h-s+"px";u(i,a);e.openMenu=!0},addButton:function(c){var a=this,d=a.renderer,b=o(a.options.navigation.buttonOptions,c),j=b.onclick,h=b.menuItems,g,e,k={stroke:b.symbolStroke,fill:b.symbolFill},q=b.symbolSize||12;if(!a.btnCount)a.btnCount=0;if(!a.exportDivElements)a.exportDivElements= |
|||
[],a.exportSVGElements=[];if(b.enabled!==!1){var l=b.theme,m=l.states,n=m&&m.hover,m=m&&m.select,i;delete l.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});b.text&&b.symbol?l.paddingLeft=f.pick(l.paddingLeft,25):b.text||p(l,{width:b.width,height:b.height,padding:0});e=d.button(b.text,0,0,i,l,n,m).attr({title:a.options.lang[b._titleKey],"stroke-linecap":"round"});e.menuClassName=c.menuClassName|| |
|||
"highcharts-menu-"+a.btnCount++;b.symbol&&(g=d.symbol(b.symbol,b.symbolX-q/2,b.symbolY-q/2,q,q).attr(p(k,{"stroke-width":b.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(b,{width:e.width,x:f.pick(b.x,y)}),!0,"spacingBox");y+=(e.width+b.buttonSpacing)*(b.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(c){var c=c.target,a,d;for(a=0;a<c.exportSVGElements.length;a++)if(d=c.exportSVGElements[a])d.onclick=d.ontouchstart=null,c.exportSVGElements[a]=d.destroy();for(a= |
|||
0;a<c.exportDivElements.length;a++)d=c.exportDivElements[a],C(d,"mouseleave"),c.exportDivElements[a]=d.onmouseout=d.onmouseover=d.ontouchstart=d.onclick=null,n(d)}});F.menu=function(c,a,d,b){return["M",c,a+2.5,"L",c+d,a+2.5,"M",c,a+b/2+0.5,"L",c+d,a+b/2+0.5,"M",c,a+b-1.5,"L",c+d,a+b-1.5]};A.prototype.callbacks.push(function(c){var a,d=c.options.exporting,b=d.buttons;y=0;if(d.enabled!==!1){for(a in b)c.addButton(b[a]);t(c,"destroy",c.destroyExport)}})})(Highcharts); |
|||
@ -0,0 +1,709 @@ |
|||
/** |
|||
* @license Highcharts JS v3.0.6 (2013-10-04) |
|||
* Exporting module |
|||
* |
|||
* (c) 2010-2013 Torstein Hønsi |
|||
* |
|||
* License: www.highcharts.com/license |
|||
*/ |
|||
|
|||
// JSLint options:
|
|||
/*global Highcharts, document, window, Math, setTimeout */ |
|||
|
|||
(function (Highcharts) { // encapsulate
|
|||
|
|||
// create shortcuts
|
|||
var Chart = Highcharts.Chart, |
|||
addEvent = Highcharts.addEvent, |
|||
removeEvent = Highcharts.removeEvent, |
|||
createElement = Highcharts.createElement, |
|||
discardElement = Highcharts.discardElement, |
|||
css = Highcharts.css, |
|||
merge = Highcharts.merge, |
|||
each = Highcharts.each, |
|||
extend = Highcharts.extend, |
|||
math = Math, |
|||
mathMax = math.max, |
|||
doc = document, |
|||
win = window, |
|||
isTouchDevice = Highcharts.isTouchDevice, |
|||
M = 'M', |
|||
L = 'L', |
|||
DIV = 'div', |
|||
HIDDEN = 'hidden', |
|||
NONE = 'none', |
|||
PREFIX = 'highcharts-', |
|||
ABSOLUTE = 'absolute', |
|||
PX = 'px', |
|||
UNDEFINED, |
|||
symbols = Highcharts.Renderer.prototype.symbols, |
|||
defaultOptions = Highcharts.getOptions(), |
|||
buttonOffset; |
|||
|
|||
// Add language
|
|||
extend(defaultOptions.lang, { |
|||
printChart: 'Print chart', |
|||
downloadPNG: 'Download PNG image', |
|||
downloadJPEG: 'Download JPEG image', |
|||
downloadPDF: 'Download PDF document', |
|||
downloadSVG: 'Download SVG vector image', |
|||
contextButtonTitle: 'Chart context menu' |
|||
}); |
|||
|
|||
// Buttons and menus are collected in a separate config option set called 'navigation'.
|
|||
// This can be extended later to add control buttons like zoom and pan right click menus.
|
|||
defaultOptions.navigation = { |
|||
menuStyle: { |
|||
border: '1px solid #A0A0A0', |
|||
background: '#FFFFFF', |
|||
padding: '5px 0' |
|||
}, |
|||
menuItemStyle: { |
|||
padding: '0 10px', |
|||
background: NONE, |
|||
color: '#303030', |
|||
fontSize: isTouchDevice ? '14px' : '11px' |
|||
}, |
|||
menuItemHoverStyle: { |
|||
background: '#4572A5', |
|||
color: '#FFFFFF' |
|||
}, |
|||
|
|||
buttonOptions: { |
|||
symbolFill: '#E0E0E0', |
|||
symbolSize: 14, |
|||
symbolStroke: '#666', |
|||
symbolStrokeWidth: 3, |
|||
symbolX: 12.5, |
|||
symbolY: 10.5, |
|||
align: 'right', |
|||
buttonSpacing: 3, |
|||
height: 22, |
|||
// text: null,
|
|||
theme: { |
|||
fill: 'white', // capture hover
|
|||
stroke: 'none' |
|||
}, |
|||
verticalAlign: 'top', |
|||
width: 24 |
|||
} |
|||
}; |
|||
|
|||
|
|||
|
|||
// Add the export related options
|
|||
defaultOptions.exporting = { |
|||
//enabled: true,
|
|||
//filename: 'chart',
|
|||
type: 'image/png', |
|||
url: 'http://export.highcharts.com/', |
|||
//width: undefined,
|
|||
//scale: 2
|
|||
buttons: { |
|||
contextButton: { |
|||
menuClassName: PREFIX + 'contextmenu', |
|||
//x: -10,
|
|||
symbol: 'menu', |
|||
_titleKey: 'contextButtonTitle', |
|||
menuItems: [{ |
|||
textKey: 'printChart', |
|||
onclick: function () { |
|||
this.print(); |
|||
} |
|||
}, { |
|||
separator: true |
|||
}, { |
|||
textKey: 'downloadPNG', |
|||
onclick: function () { |
|||
this.exportChart(); |
|||
} |
|||
}, { |
|||
textKey: 'downloadJPEG', |
|||
onclick: function () { |
|||
this.exportChart({ |
|||
type: 'image/jpeg' |
|||
}); |
|||
} |
|||
}, { |
|||
textKey: 'downloadPDF', |
|||
onclick: function () { |
|||
this.exportChart({ |
|||
type: 'application/pdf' |
|||
}); |
|||
} |
|||
}, { |
|||
textKey: 'downloadSVG', |
|||
onclick: function () { |
|||
this.exportChart({ |
|||
type: 'image/svg+xml' |
|||
}); |
|||
} |
|||
} |
|||
// Enable this block to add "View SVG" to the dropdown menu
|
|||
/* |
|||
,{ |
|||
|
|||
text: 'View SVG', |
|||
onclick: function () { |
|||
var svg = this.getSVG() |
|||
.replace(/</g, '\n<') |
|||
.replace(/>/g, '>'); |
|||
|
|||
doc.body.innerHTML = '<pre>' + svg + '</pre>'; |
|||
} |
|||
} // */
|
|||
] |
|||
} |
|||
} |
|||
}; |
|||
|
|||
// Add the Highcharts.post utility
|
|||
Highcharts.post = function (url, data) { |
|||
var name, |
|||
form; |
|||
|
|||
// create the form
|
|||
form = createElement('form', { |
|||
method: 'post', |
|||
action: url, |
|||
enctype: 'multipart/form-data' |
|||
}, { |
|||
display: NONE |
|||
}, doc.body); |
|||
|
|||
// add the data
|
|||
for (name in data) { |
|||
createElement('input', { |
|||
type: HIDDEN, |
|||
name: name, |
|||
value: data[name] |
|||
}, null, form); |
|||
} |
|||
|
|||
// submit
|
|||
form.submit(); |
|||
|
|||
// clean up
|
|||
discardElement(form); |
|||
}; |
|||
|
|||
extend(Chart.prototype, { |
|||
|
|||
/** |
|||
* Return an SVG representation of the chart |
|||
* |
|||
* @param additionalOptions {Object} Additional chart options for the generated SVG representation |
|||
*/ |
|||
getSVG: function (additionalOptions) { |
|||
var chart = this, |
|||
chartCopy, |
|||
sandbox, |
|||
svg, |
|||
seriesOptions, |
|||
sourceWidth, |
|||
sourceHeight, |
|||
cssWidth, |
|||
cssHeight, |
|||
options = merge(chart.options, additionalOptions); // copy the options and add extra options
|
|||
|
|||
// IE compatibility hack for generating SVG content that it doesn't really understand
|
|||
if (!doc.createElementNS) { |
|||
/*jslint unparam: true*//* allow unused parameter ns in function below */ |
|||
doc.createElementNS = function (ns, tagName) { |
|||
return doc.createElement(tagName); |
|||
}; |
|||
/*jslint unparam: false*/ |
|||
} |
|||
|
|||
// create a sandbox where a new chart will be generated
|
|||
sandbox = createElement(DIV, null, { |
|||
position: ABSOLUTE, |
|||
top: '-9999em', |
|||
width: chart.chartWidth + PX, |
|||
height: chart.chartHeight + PX |
|||
}, doc.body); |
|||
|
|||
// get the source size
|
|||
cssWidth = chart.renderTo.style.width; |
|||
cssHeight = chart.renderTo.style.height; |
|||
sourceWidth = options.exporting.sourceWidth || |
|||
options.chart.width || |
|||
(/px$/.test(cssWidth) && parseInt(cssWidth, 10)) || |
|||
600; |
|||
sourceHeight = options.exporting.sourceHeight || |
|||
options.chart.height || |
|||
(/px$/.test(cssHeight) && parseInt(cssHeight, 10)) || |
|||
400; |
|||
|
|||
// override some options
|
|||
extend(options.chart, { |
|||
animation: false, |
|||
renderTo: sandbox, |
|||
forExport: true, |
|||
width: sourceWidth, |
|||
height: sourceHeight |
|||
}); |
|||
options.exporting.enabled = false; // hide buttons in print
|
|||
|
|||
// prepare for replicating the chart
|
|||
options.series = []; |
|||
each(chart.series, function (serie) { |
|||
seriesOptions = merge(serie.options, { |
|||
animation: false, // turn off animation
|
|||
showCheckbox: false, |
|||
visible: serie.visible |
|||
}); |
|||
|
|||
if (!seriesOptions.isInternal) { // used for the navigator series that has its own option set
|
|||
options.series.push(seriesOptions); |
|||
} |
|||
}); |
|||
|
|||
// generate the chart copy
|
|||
chartCopy = new Highcharts.Chart(options, chart.callback); |
|||
|
|||
// reflect axis extremes in the export
|
|||
each(['xAxis', 'yAxis'], function (axisType) { |
|||
each(chart[axisType], function (axis, i) { |
|||
var axisCopy = chartCopy[axisType][i], |
|||
extremes = axis.getExtremes(), |
|||
userMin = extremes.userMin, |
|||
userMax = extremes.userMax; |
|||
|
|||
if (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) { |
|||
axisCopy.setExtremes(userMin, userMax, true, false); |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
// get the SVG from the container's innerHTML
|
|||
svg = chartCopy.container.innerHTML; |
|||
|
|||
// free up memory
|
|||
options = null; |
|||
chartCopy.destroy(); |
|||
discardElement(sandbox); |
|||
|
|||
// sanitize
|
|||
svg = svg |
|||
.replace(/zIndex="[^"]+"/g, '') |
|||
.replace(/isShadow="[^"]+"/g, '') |
|||
.replace(/symbolName="[^"]+"/g, '') |
|||
.replace(/jQuery[0-9]+="[^"]+"/g, '') |
|||
.replace(/url\([^#]+#/g, 'url(#') |
|||
.replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ') |
|||
.replace(/ href=/g, ' xlink:href=') |
|||
.replace(/\n/, ' ') |
|||
.replace(/<\/svg>.*?$/, '</svg>') // any HTML added to the container after the SVG (#894)
|
|||
/* This fails in IE < 8 |
|||
.replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight
|
|||
return s2 +'.'+ s3[0]; |
|||
})*/ |
|||
|
|||
// Replace HTML entities, issue #347
|
|||
.replace(/ /g, '\u00A0') // no-break space
|
|||
.replace(/­/g, '\u00AD') // soft hyphen
|
|||
|
|||
// IE specific
|
|||
.replace(/<IMG /g, '<image ') |
|||
.replace(/height=([^" ]+)/g, 'height="$1"') |
|||
.replace(/width=([^" ]+)/g, 'width="$1"') |
|||
.replace(/hc-svg-href="([^"]+)">/g, 'xlink:href="$1"/>') |
|||
.replace(/id=([^" >]+)/g, 'id="$1"') |
|||
.replace(/class=([^" >]+)/g, 'class="$1"') |
|||
.replace(/ transform /g, ' ') |
|||
.replace(/:(path|rect)/g, '$1') |
|||
.replace(/style="([^"]+)"/g, function (s) { |
|||
return s.toLowerCase(); |
|||
}); |
|||
|
|||
// IE9 beta bugs with innerHTML. Test again with final IE9.
|
|||
svg = svg.replace(/(url\(#highcharts-[0-9]+)"/g, '$1') |
|||
.replace(/"/g, "'"); |
|||
|
|||
return svg; |
|||
}, |
|||
|
|||
/** |
|||
* Submit the SVG representation of the chart to the server |
|||
* @param {Object} options Exporting options. Possible members are url, type and width. |
|||
* @param {Object} chartOptions Additional chart options for the SVG representation of the chart |
|||
*/ |
|||
exportChart: function (options, chartOptions) { |
|||
options = options || {}; |
|||
|
|||
var chart = this, |
|||
chartExportingOptions = chart.options.exporting, |
|||
svg = chart.getSVG(merge( |
|||
{ chart: { borderRadius: 0 } }, |
|||
chartExportingOptions.chartOptions, |
|||
chartOptions, |
|||
{ |
|||
exporting: { |
|||
sourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth, |
|||
sourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight |
|||
} |
|||
} |
|||
)); |
|||
|
|||
// merge the options
|
|||
options = merge(chart.options.exporting, options); |
|||
|
|||
// do the post
|
|||
Highcharts.post(options.url, { |
|||
filename: options.filename || 'chart', |
|||
type: options.type, |
|||
width: options.width || 0, // IE8 fails to post undefined correctly, so use 0
|
|||
scale: options.scale || 2, |
|||
svg: svg |
|||
}); |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* Print the chart |
|||
*/ |
|||
print: function () { |
|||
|
|||
var chart = this, |
|||
container = chart.container, |
|||
origDisplay = [], |
|||
origParent = container.parentNode, |
|||
body = doc.body, |
|||
childNodes = body.childNodes; |
|||
|
|||
if (chart.isPrinting) { // block the button while in printing mode
|
|||
return; |
|||
} |
|||
|
|||
chart.isPrinting = true; |
|||
|
|||
// hide all body content
|
|||
each(childNodes, function (node, i) { |
|||
if (node.nodeType === 1) { |
|||
origDisplay[i] = node.style.display; |
|||
node.style.display = NONE; |
|||
} |
|||
}); |
|||
|
|||
// pull out the chart
|
|||
body.appendChild(container); |
|||
|
|||
// print
|
|||
win.focus(); // #1510
|
|||
win.print(); |
|||
|
|||
// allow the browser to prepare before reverting
|
|||
setTimeout(function () { |
|||
|
|||
// put the chart back in
|
|||
origParent.appendChild(container); |
|||
|
|||
// restore all body content
|
|||
each(childNodes, function (node, i) { |
|||
if (node.nodeType === 1) { |
|||
node.style.display = origDisplay[i]; |
|||
} |
|||
}); |
|||
|
|||
chart.isPrinting = false; |
|||
|
|||
}, 1000); |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* Display a popup menu for choosing the export type |
|||
* |
|||
* @param {String} className An identifier for the menu |
|||
* @param {Array} items A collection with text and onclicks for the items |
|||
* @param {Number} x The x position of the opener button |
|||
* @param {Number} y The y position of the opener button |
|||
* @param {Number} width The width of the opener button |
|||
* @param {Number} height The height of the opener button |
|||
*/ |
|||
contextMenu: function (className, items, x, y, width, height, button) { |
|||
var chart = this, |
|||
navOptions = chart.options.navigation, |
|||
menuItemStyle = navOptions.menuItemStyle, |
|||
chartWidth = chart.chartWidth, |
|||
chartHeight = chart.chartHeight, |
|||
cacheName = 'cache-' + className, |
|||
menu = chart[cacheName], |
|||
menuPadding = mathMax(width, height), // for mouse leave detection
|
|||
boxShadow = '3px 3px 10px #888', |
|||
innerMenu, |
|||
hide, |
|||
hideTimer, |
|||
menuStyle; |
|||
|
|||
// create the menu only the first time
|
|||
if (!menu) { |
|||
|
|||
// create a HTML element above the SVG
|
|||
chart[cacheName] = menu = createElement(DIV, { |
|||
className: className |
|||
}, { |
|||
position: ABSOLUTE, |
|||
zIndex: 1000, |
|||
padding: menuPadding + PX |
|||
}, chart.container); |
|||
|
|||
innerMenu = createElement(DIV, null, |
|||
extend({ |
|||
MozBoxShadow: boxShadow, |
|||
WebkitBoxShadow: boxShadow, |
|||
boxShadow: boxShadow |
|||
}, navOptions.menuStyle), menu); |
|||
|
|||
// hide on mouse out
|
|||
hide = function () { |
|||
css(menu, { display: NONE }); |
|||
if (button) { |
|||
button.setState(0); |
|||
} |
|||
chart.openMenu = false; |
|||
}; |
|||
|
|||
// Hide the menu some time after mouse leave (#1357)
|
|||
addEvent(menu, 'mouseleave', function () { |
|||
hideTimer = setTimeout(hide, 500); |
|||
}); |
|||
addEvent(menu, 'mouseenter', function () { |
|||
clearTimeout(hideTimer); |
|||
}); |
|||
// Hide it on clicking or touching outside the menu (#2258)
|
|||
addEvent(document, 'mousedown', function (e) { |
|||
if (!chart.pointer.inClass(e.target, className)) { |
|||
hide(); |
|||
} |
|||
}); |
|||
|
|||
|
|||
// create the items
|
|||
each(items, function (item) { |
|||
if (item) { |
|||
var element = item.separator ? |
|||
createElement('hr', null, null, innerMenu) : |
|||
createElement(DIV, { |
|||
onmouseover: function () { |
|||
css(this, navOptions.menuItemHoverStyle); |
|||
}, |
|||
onmouseout: function () { |
|||
css(this, menuItemStyle); |
|||
}, |
|||
onclick: function () { |
|||
hide(); |
|||
item.onclick.apply(chart, arguments); |
|||
}, |
|||
innerHTML: item.text || chart.options.lang[item.textKey] |
|||
}, extend({ |
|||
cursor: 'pointer' |
|||
}, menuItemStyle), innerMenu); |
|||
|
|||
|
|||
// Keep references to menu divs to be able to destroy them
|
|||
chart.exportDivElements.push(element); |
|||
} |
|||
}); |
|||
|
|||
// Keep references to menu and innerMenu div to be able to destroy them
|
|||
chart.exportDivElements.push(innerMenu, menu); |
|||
|
|||
chart.exportMenuWidth = menu.offsetWidth; |
|||
chart.exportMenuHeight = menu.offsetHeight; |
|||
} |
|||
|
|||
menuStyle = { display: 'block' }; |
|||
|
|||
// if outside right, right align it
|
|||
if (x + chart.exportMenuWidth > chartWidth) { |
|||
menuStyle.right = (chartWidth - x - width - menuPadding) + PX; |
|||
} else { |
|||
menuStyle.left = (x - menuPadding) + PX; |
|||
} |
|||
// if outside bottom, bottom align it
|
|||
if (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') { |
|||
menuStyle.bottom = (chartHeight - y - menuPadding) + PX; |
|||
} else { |
|||
menuStyle.top = (y + height - menuPadding) + PX; |
|||
} |
|||
|
|||
css(menu, menuStyle); |
|||
chart.openMenu = true; |
|||
}, |
|||
|
|||
/** |
|||
* Add the export button to the chart |
|||
*/ |
|||
addButton: function (options) { |
|||
var chart = this, |
|||
renderer = chart.renderer, |
|||
btnOptions = merge(chart.options.navigation.buttonOptions, options), |
|||
onclick = btnOptions.onclick, |
|||
menuItems = btnOptions.menuItems, |
|||
symbol, |
|||
button, |
|||
symbolAttr = { |
|||
stroke: btnOptions.symbolStroke, |
|||
fill: btnOptions.symbolFill |
|||
}, |
|||
symbolSize = btnOptions.symbolSize || 12; |
|||
if (!chart.btnCount) { |
|||
chart.btnCount = 0; |
|||
} |
|||
|
|||
// Keeps references to the button elements
|
|||
if (!chart.exportDivElements) { |
|||
chart.exportDivElements = []; |
|||
chart.exportSVGElements = []; |
|||
} |
|||
|
|||
if (btnOptions.enabled === false) { |
|||
return; |
|||
} |
|||
|
|||
|
|||
var attr = btnOptions.theme, |
|||
states = attr.states, |
|||
hover = states && states.hover, |
|||
select = states && states.select, |
|||
callback; |
|||
|
|||
delete attr.states; |
|||
|
|||
if (onclick) { |
|||
callback = function () { |
|||
onclick.apply(chart, arguments); |
|||
}; |
|||
|
|||
} else if (menuItems) { |
|||
callback = function () { |
|||
chart.contextMenu( |
|||
button.menuClassName, |
|||
menuItems, |
|||
button.translateX, |
|||
button.translateY, |
|||
button.width, |
|||
button.height, |
|||
button |
|||
); |
|||
button.setState(2); |
|||
}; |
|||
} |
|||
|
|||
|
|||
if (btnOptions.text && btnOptions.symbol) { |
|||
attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25); |
|||
|
|||
} else if (!btnOptions.text) { |
|||
extend(attr, { |
|||
width: btnOptions.width, |
|||
height: btnOptions.height, |
|||
padding: 0 |
|||
}); |
|||
} |
|||
|
|||
button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select) |
|||
.attr({ |
|||
title: chart.options.lang[btnOptions._titleKey], |
|||
'stroke-linecap': 'round' |
|||
}); |
|||
button.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++; |
|||
|
|||
if (btnOptions.symbol) { |
|||
symbol = renderer.symbol( |
|||
btnOptions.symbol, |
|||
btnOptions.symbolX - (symbolSize / 2), |
|||
btnOptions.symbolY - (symbolSize / 2), |
|||
symbolSize, |
|||
symbolSize |
|||
) |
|||
.attr(extend(symbolAttr, { |
|||
'stroke-width': btnOptions.symbolStrokeWidth || 1, |
|||
zIndex: 1 |
|||
})).add(button); |
|||
} |
|||
|
|||
button.add() |
|||
.align(extend(btnOptions, { |
|||
width: button.width, |
|||
x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654
|
|||
}), true, 'spacingBox'); |
|||
|
|||
buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1); |
|||
|
|||
chart.exportSVGElements.push(button, symbol); |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* Destroy the buttons. |
|||
*/ |
|||
destroyExport: function (e) { |
|||
var chart = e.target, |
|||
i, |
|||
elem; |
|||
|
|||
// Destroy the extra buttons added
|
|||
for (i = 0; i < chart.exportSVGElements.length; i++) { |
|||
elem = chart.exportSVGElements[i]; |
|||
|
|||
// Destroy and null the svg/vml elements
|
|||
if (elem) { // #1822
|
|||
elem.onclick = elem.ontouchstart = null; |
|||
chart.exportSVGElements[i] = elem.destroy(); |
|||
} |
|||
} |
|||
|
|||
// Destroy the divs for the menu
|
|||
for (i = 0; i < chart.exportDivElements.length; i++) { |
|||
elem = chart.exportDivElements[i]; |
|||
|
|||
// Remove the event handler
|
|||
removeEvent(elem, 'mouseleave'); |
|||
|
|||
// Remove inline events
|
|||
chart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null; |
|||
|
|||
// Destroy the div by moving to garbage bin
|
|||
discardElement(elem); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
|
|||
symbols.menu = function (x, y, width, height) { |
|||
var arr = [ |
|||
M, x, y + 2.5, |
|||
L, x + width, y + 2.5, |
|||
M, x, y + height / 2 + 0.5, |
|||
L, x + width, y + height / 2 + 0.5, |
|||
M, x, y + height - 1.5, |
|||
L, x + width, y + height - 1.5 |
|||
]; |
|||
return arr; |
|||
}; |
|||
|
|||
// Add the buttons on chart load
|
|||
Chart.prototype.callbacks.push(function (chart) { |
|||
var n, |
|||
exportingOptions = chart.options.exporting, |
|||
buttons = exportingOptions.buttons; |
|||
|
|||
buttonOffset = 0; |
|||
|
|||
if (exportingOptions.enabled !== false) { |
|||
|
|||
for (n in buttons) { |
|||
chart.addButton(buttons[n]); |
|||
} |
|||
|
|||
// Destroy the export elements at chart destroy
|
|||
addEvent(chart, 'destroy', chart.destroyExport); |
|||
} |
|||
|
|||
}); |
|||
|
|||
|
|||
}(Highcharts)); |
|||
@ -0,0 +1,12 @@ |
|||
/* |
|||
|
|||
Highcharts funnel module, Beta |
|||
|
|||
(c) 2010-2012 Torstein Hønsi |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(d){var u=d.getOptions().plotOptions,p=d.seriesTypes,D=d.merge,z=function(){},A=d.each;u.funnel=D(u.pie,{center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",dataLabels:{connectorWidth:1,connectorColor:"#606060"},size:!0,states:{select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}}});p.funnel=d.extendClass(p.pie,{type:"funnel",animate:z,translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},g=0,e=this.chart,f=e.plotWidth, |
|||
e=e.plotHeight,h=0,c=this.options,C=c.center,b=a(C[0],f),d=a(C[0],e),p=a(c.width,f),i,q,j=a(c.height,e),r=a(c.neckWidth,f),s=a(c.neckHeight,e),v=j-s,a=this.data,w,x,u=c.dataLabels.position==="left"?1:0,y,m,B,n,l,t,o;this.getWidthAt=q=function(k){return k>j-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+ |
|||
i;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=["M",y,m,"L",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,"Z");a.shapeType="path";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,"stroke-width":g.borderWidth}).add(a.group)})}, |
|||
sortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?"right":"left",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts); |
|||
@ -0,0 +1,289 @@ |
|||
/** |
|||
* @license |
|||
* Highcharts funnel module, Beta |
|||
* |
|||
* (c) 2010-2012 Torstein Hønsi |
|||
* |
|||
* License: www.highcharts.com/license |
|||
*/ |
|||
|
|||
/*global Highcharts */ |
|||
(function (Highcharts) { |
|||
|
|||
'use strict'; |
|||
|
|||
// create shortcuts
|
|||
var defaultOptions = Highcharts.getOptions(), |
|||
defaultPlotOptions = defaultOptions.plotOptions, |
|||
seriesTypes = Highcharts.seriesTypes, |
|||
merge = Highcharts.merge, |
|||
noop = function () {}, |
|||
each = Highcharts.each; |
|||
|
|||
// set default options
|
|||
defaultPlotOptions.funnel = merge(defaultPlotOptions.pie, { |
|||
center: ['50%', '50%'], |
|||
width: '90%', |
|||
neckWidth: '30%', |
|||
height: '100%', |
|||
neckHeight: '25%', |
|||
|
|||
dataLabels: { |
|||
//position: 'right',
|
|||
connectorWidth: 1, |
|||
connectorColor: '#606060' |
|||
}, |
|||
size: true, // to avoid adapting to data label size in Pie.drawDataLabels
|
|||
states: { |
|||
select: { |
|||
color: '#C0C0C0', |
|||
borderColor: '#000000', |
|||
shadow: false |
|||
} |
|||
} |
|||
}); |
|||
|
|||
|
|||
seriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, { |
|||
|
|||
type: 'funnel', |
|||
animate: noop, |
|||
|
|||
/** |
|||
* Overrides the pie translate method |
|||
*/ |
|||
translate: function () { |
|||
|
|||
var |
|||
// Get positions - either an integer or a percentage string must be given
|
|||
getLength = function (length, relativeTo) { |
|||
return (/%$/).test(length) ? |
|||
relativeTo * parseInt(length, 10) / 100 : |
|||
parseInt(length, 10); |
|||
}, |
|||
|
|||
sum = 0, |
|||
series = this, |
|||
chart = series.chart, |
|||
plotWidth = chart.plotWidth, |
|||
plotHeight = chart.plotHeight, |
|||
cumulative = 0, // start at top
|
|||
options = series.options, |
|||
center = options.center, |
|||
centerX = getLength(center[0], plotWidth), |
|||
centerY = getLength(center[0], plotHeight), |
|||
width = getLength(options.width, plotWidth), |
|||
tempWidth, |
|||
getWidthAt, |
|||
height = getLength(options.height, plotHeight), |
|||
neckWidth = getLength(options.neckWidth, plotWidth), |
|||
neckHeight = getLength(options.neckHeight, plotHeight), |
|||
neckY = height - neckHeight, |
|||
data = series.data, |
|||
path, |
|||
fraction, |
|||
half = options.dataLabels.position === 'left' ? 1 : 0, |
|||
|
|||
x1, |
|||
y1, |
|||
x2, |
|||
x3, |
|||
y3, |
|||
x4, |
|||
y5; |
|||
|
|||
// Return the width at a specific y coordinate
|
|||
series.getWidthAt = getWidthAt = function (y) { |
|||
return y > height - neckHeight || height === neckHeight ? |
|||
neckWidth : |
|||
neckWidth + (width - neckWidth) * ((height - neckHeight - y) / (height - neckHeight)); |
|||
}; |
|||
series.getX = function (y, half) { |
|||
return centerX + (half ? -1 : 1) * ((getWidthAt(y) / 2) + options.dataLabels.distance); |
|||
}; |
|||
|
|||
// Expose
|
|||
series.center = [centerX, centerY, height]; |
|||
series.centerX = centerX; |
|||
|
|||
/* |
|||
* Individual point coordinate naming: |
|||
* |
|||
* x1,y1 _________________ x2,y1 |
|||
* \ / |
|||
* \ / |
|||
* \ / |
|||
* \ / |
|||
* \ / |
|||
* x3,y3 _________ x4,y3 |
|||
* |
|||
* Additional for the base of the neck: |
|||
* |
|||
* | | |
|||
* | | |
|||
* | | |
|||
* x3,y5 _________ x4,y5 |
|||
*/ |
|||
|
|||
|
|||
|
|||
|
|||
// get the total sum
|
|||
each(data, function (point) { |
|||
sum += point.y; |
|||
}); |
|||
|
|||
each(data, function (point) { |
|||
// set start and end positions
|
|||
y5 = null; |
|||
fraction = sum ? point.y / sum : 0; |
|||
y1 = centerY - height / 2 + cumulative * height; |
|||
y3 = y1 + fraction * height; |
|||
//tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight));
|
|||
tempWidth = getWidthAt(y1); |
|||
x1 = centerX - tempWidth / 2; |
|||
x2 = x1 + tempWidth; |
|||
tempWidth = getWidthAt(y3); |
|||
x3 = centerX - tempWidth / 2; |
|||
x4 = x3 + tempWidth; |
|||
|
|||
// the entire point is within the neck
|
|||
if (y1 > neckY) { |
|||
x1 = x3 = centerX - neckWidth / 2; |
|||
x2 = x4 = centerX + neckWidth / 2; |
|||
|
|||
// the base of the neck
|
|||
} else if (y3 > neckY) { |
|||
y5 = y3; |
|||
|
|||
tempWidth = getWidthAt(neckY); |
|||
x3 = centerX - tempWidth / 2; |
|||
x4 = x3 + tempWidth; |
|||
|
|||
y3 = neckY; |
|||
} |
|||
|
|||
// save the path
|
|||
path = [ |
|||
'M', |
|||
x1, y1, |
|||
'L', |
|||
x2, y1, |
|||
x4, y3 |
|||
]; |
|||
if (y5) { |
|||
path.push(x4, y5, x3, y5); |
|||
} |
|||
path.push(x3, y3, 'Z'); |
|||
|
|||
// prepare for using shared dr
|
|||
point.shapeType = 'path'; |
|||
point.shapeArgs = { d: path }; |
|||
|
|||
|
|||
// for tooltips and data labels
|
|||
point.percentage = fraction * 100; |
|||
point.plotX = centerX; |
|||
point.plotY = (y1 + (y5 || y3)) / 2; |
|||
|
|||
// Placement of tooltips and data labels
|
|||
point.tooltipPos = [ |
|||
centerX, |
|||
point.plotY |
|||
]; |
|||
|
|||
// Slice is a noop on funnel points
|
|||
point.slice = noop; |
|||
|
|||
// Mimicking pie data label placement logic
|
|||
point.half = half; |
|||
|
|||
cumulative += fraction; |
|||
}); |
|||
|
|||
|
|||
series.setTooltipPoints(); |
|||
}, |
|||
/** |
|||
* Draw a single point (wedge) |
|||
* @param {Object} point The point object |
|||
* @param {Object} color The color of the point |
|||
* @param {Number} brightness The brightness relative to the color |
|||
*/ |
|||
drawPoints: function () { |
|||
var series = this, |
|||
options = series.options, |
|||
chart = series.chart, |
|||
renderer = chart.renderer; |
|||
|
|||
each(series.data, function (point) { |
|||
|
|||
var graphic = point.graphic, |
|||
shapeArgs = point.shapeArgs; |
|||
|
|||
if (!graphic) { // Create the shapes
|
|||
point.graphic = renderer.path(shapeArgs). |
|||
attr({ |
|||
fill: point.color, |
|||
stroke: options.borderColor, |
|||
'stroke-width': options.borderWidth |
|||
}). |
|||
add(series.group); |
|||
|
|||
} else { // Update the shapes
|
|||
graphic.animate(shapeArgs); |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
/** |
|||
* Funnel items don't have angles (#2289) |
|||
*/ |
|||
sortByAngle: noop, |
|||
|
|||
/** |
|||
* Extend the pie data label method |
|||
*/ |
|||
drawDataLabels: function () { |
|||
var data = this.data, |
|||
labelDistance = this.options.dataLabels.distance, |
|||
leftSide, |
|||
sign, |
|||
point, |
|||
i = data.length, |
|||
x, |
|||
y; |
|||
|
|||
// In the original pie label anticollision logic, the slots are distributed
|
|||
// from one labelDistance above to one labelDistance below the pie. In funnels
|
|||
// we don't want this.
|
|||
this.center[2] -= 2 * labelDistance; |
|||
|
|||
// Set the label position array for each point.
|
|||
while (i--) { |
|||
point = data[i]; |
|||
leftSide = point.half; |
|||
sign = leftSide ? 1 : -1; |
|||
y = point.plotY; |
|||
x = this.getX(y, leftSide); |
|||
|
|||
// set the anchor point for data labels
|
|||
point.labelPos = [ |
|||
0, // first break of connector
|
|||
y, // a/a
|
|||
x + (labelDistance - 5) * sign, // second break, right outside point shape
|
|||
y, // a/a
|
|||
x + labelDistance * sign, // landing point for connector
|
|||
y, // a/a
|
|||
leftSide ? 'right' : 'left', // alignment
|
|||
0 // center angle
|
|||
]; |
|||
} |
|||
|
|||
seriesTypes.pie.prototype.drawDataLabels.call(this); |
|||
} |
|||
|
|||
}); |
|||
|
|||
|
|||
}(Highcharts)); |
|||
@ -0,0 +1 @@ |
|||
(function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:"z",useMapGeometry:!1,pointArrayMap:["y","z"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=["M",e-g,f-h,"L",e+g,f-h,"L",e+g,f+h,"L",e-g,f+h,"Z"];a.shapeType="path";a.shapeArgs={d:c.translatePath(a.path)};typeof d==="number"&&(d>j?j=d:d<i&&(i=d))});c.translateColors(i,j)},getBox:function(){}})})(Highcharts); |
|||
@ -0,0 +1,53 @@ |
|||
(function (Highcharts) { |
|||
var seriesTypes = Highcharts.seriesTypes, |
|||
each = Highcharts.each; |
|||
|
|||
seriesTypes.heatmap = Highcharts.extendClass(seriesTypes.map, { |
|||
colorKey: 'z', |
|||
useMapGeometry: false, |
|||
pointArrayMap: ['y', 'z'], |
|||
translate: function () { |
|||
var series = this, |
|||
options = series.options, |
|||
dataMin = Number.MAX_VALUE, |
|||
dataMax = Number.MIN_VALUE; |
|||
|
|||
series.generatePoints(); |
|||
|
|||
each(series.data, function (point) { |
|||
var x = point.x, |
|||
y = point.y, |
|||
value = point.z, |
|||
xPad = (options.colsize || 1) / 2, |
|||
yPad = (options.rowsize || 1) / 2; |
|||
|
|||
point.path = [ |
|||
'M', x - xPad, y - yPad, |
|||
'L', x + xPad, y - yPad, |
|||
'L', x + xPad, y + yPad, |
|||
'L', x - xPad, y + yPad, |
|||
'Z' |
|||
]; |
|||
|
|||
point.shapeType = 'path'; |
|||
point.shapeArgs = { |
|||
d: series.translatePath(point.path) |
|||
}; |
|||
|
|||
if (typeof value === 'number') { |
|||
if (value > dataMax) { |
|||
dataMax = value; |
|||
} else if (value < dataMin) { |
|||
dataMin = value; |
|||
} |
|||
} |
|||
}); |
|||
|
|||
series.translateColors(dataMin, dataMax); |
|||
}, |
|||
|
|||
getBox: function () {} |
|||
|
|||
}); |
|||
|
|||
}(Highcharts)); |
|||
@ -0,0 +1,27 @@ |
|||
/* |
|||
Map plugin v0.1 for Highcharts |
|||
|
|||
(c) 2011-2013 Torstein Hønsi |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(g){function x(a,b,c){for(var d=4,e=[];d--;)e[d]=Math.round(b.rgba[d]+(a.rgba[d]-b.rgba[d])*(1-c));return"rgba("+e.join(",")+")"}var r=g.Axis,y=g.Chart,s=g.Point,z=g.Pointer,l=g.each,v=g.extend,p=g.merge,n=g.pick,A=g.numberFormat,B=g.getOptions(),k=g.seriesTypes,q=B.plotOptions,t=g.wrap,u=g.Color,w=function(){};B.mapNavigation={buttonOptions:{align:"right",verticalAlign:"bottom",x:0,width:18,height:18,style:{fontSize:"15px",fontWeight:"bold",textAlign:"center"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(0.5)}, |
|||
text:"+",y:-32},zoomOut:{onclick:function(){this.mapZoom(2)},text:"-",y:0}}};g.splitPath=function(a){var b,a=a.replace(/([A-Za-z])/g," $1 "),a=a.replace(/^\s*/,"").replace(/\s*$/,""),a=a.split(/[ ,]+/);for(b=0;b<a.length;b++)/[a-zA-Z]/.test(a[b])||(a[b]=parseFloat(a[b]));return a};g.maps={};t(r.prototype,"getSeriesExtremes",function(a){var b=this.isXAxis,c,d,e=[];l(this.series,function(a,b){if(a.useMapGeometry)e[b]=a.xData,a.xData=[]});a.call(this);c=n(this.dataMin,Number.MAX_VALUE);d=n(this.dataMax, |
|||
Number.MIN_VALUE);l(this.series,function(a,i){if(a.useMapGeometry)c=Math.min(c,a[b?"minX":"minY"]),d=Math.max(d,a[b?"maxX":"maxY"]),a.xData=e[i]});this.dataMin=c;this.dataMax=d});t(r.prototype,"setAxisTranslation",function(a){var b=this.chart,c=b.plotWidth/b.plotHeight,d=this.isXAxis,e=b.xAxis[0];a.call(this);if(b.options.chart.type==="map"&&!d&&e.transA!==void 0)this.transA=e.transA=Math.min(this.transA,e.transA),a=(e.max-e.min)/(this.max-this.min),e=a>c?this:e,c=(e.max-e.min)*e.transA,e.minPixelPadding= |
|||
(e.len-c)/2});t(y.prototype,"render",function(a){var b=this,c=b.options.mapNavigation;a.call(b);b.renderMapNavigation();c.zoomOnDoubleClick&&g.addEvent(b.container,"dblclick",function(a){b.pointer.onContainerDblClick(a)});c.zoomOnMouseWheel&&g.addEvent(b.container,document.onmousewheel===void 0?"DOMMouseScroll":"mousewheel",function(a){b.pointer.onContainerMouseWheel(a)})});v(z.prototype,{onContainerDblClick:function(a){var b=this.chart,a=this.normalize(a);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY- |
|||
b.plotTop)&&b.mapZoom(0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))},onContainerMouseWheel:function(a){var b=this.chart,c,a=this.normalize(a);c=a.detail||-(a.wheelDelta/120);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(c>0?2:0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))}});t(z.prototype,"init",function(a,b,c){a.call(this,b,c);if(c.mapNavigation.enableTouchZoom)this.pinchX=this.pinchHor=this.pinchY=this.pinchVert=!0});v(y.prototype,{renderMapNavigation:function(){var a= |
|||
this,b=this.options.mapNavigation,c=b.buttons,d,e,f,i=function(){this.handler.call(a)};if(b.enableButtons)for(d in c)if(c.hasOwnProperty(d))f=p(b.buttonOptions,c[d]),e=a.renderer.button(f.text,0,0,i).attr({width:f.width,height:f.height}).css(f.style).add(),e.handler=f.onclick,e.align(v(f,{width:e.width,height:e.height}),null,"spacingBox")},fitToBox:function(a,b){l([["x","width"],["y","height"]],function(c){var d=c[0],c=c[1];a[d]+a[c]>b[d]+b[c]&&(a[c]>b[c]?(a[c]=b[c],a[d]=b[d]):a[d]=b[d]+b[c]-a[c]); |
|||
a[c]>b[c]&&(a[c]=b[c]);a[d]<b[d]&&(a[d]=b[d])});return a},mapZoom:function(a,b,c){if(!this.isMapZooming){var d=this,e=d.xAxis[0],f=e.max-e.min,i=n(b,e.min+f/2),b=f*a,f=d.yAxis[0],h=f.max-f.min,c=n(c,f.min+h/2);a*=h;i-=b/2;h=c-a/2;c=n(d.options.chart.animation,!0);b=d.fitToBox({x:i,y:h,width:b,height:a},{x:e.dataMin,y:f.dataMin,width:e.dataMax-e.dataMin,height:f.dataMax-f.dataMin});e.setExtremes(b.x,b.x+b.width,!1);f.setExtremes(b.y,b.y+b.height,!1);if(e=c?c.duration||500:0)d.isMapZooming=!0,setTimeout(function(){d.isMapZooming= |
|||
!1},e);d.redraw()}}});q.map=p(q.scatter,{animation:!1,nullColor:"#F8F8F8",borderColor:"silver",borderWidth:1,marker:null,stickyTracking:!1,dataLabels:{verticalAlign:"middle"},turboThreshold:0,tooltip:{followPointer:!0,pointFormat:"{point.name}: {point.y}<br/>"},states:{normal:{animation:!0}}});r=g.extendClass(s,{applyOptions:function(a,b){var c=s.prototype.applyOptions.call(this,a,b);if(c.path&&typeof c.path==="string")c.path=c.options.path=g.splitPath(c.path);return c},onMouseOver:function(){clearTimeout(this.colorInterval); |
|||
s.prototype.onMouseOver.call(this)},onMouseOut:function(){var a=this,b=+new Date,c=u(a.options.color),d=u(a.pointAttr.hover.fill),e=a.series.options.states.normal.animation,f=e&&(e.duration||500);if(f&&c.rgba.length===4&&d.rgba.length===4)delete a.pointAttr[""].fill,clearTimeout(a.colorInterval),a.colorInterval=setInterval(function(){var e=(new Date-b)/f,h=a.graphic;e>1&&(e=1);h&&h.attr("fill",x(d,c,e));e>=1&&clearTimeout(a.colorInterval)},13);s.prototype.onMouseOut.call(a)}});k.map=g.extendClass(k.scatter, |
|||
{type:"map",pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},colorKey:"y",pointClass:r,trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:w,supportsDrilldown:!0,getExtremesFromAll:!0,useMapGeometry:!0,init:function(a){var b=this,c=a.options.legend.valueDecimals,d=[],e,f,i,h,j,o,m;o=a.options.legend.layout==="horizontal";g.Series.prototype.init.apply(this,arguments);j=b.options.colorRange;if(h=b.options.valueRanges)l(h,function(a){f=a.from;i=a.to;e= |
|||
"";f===void 0?e="< ":i===void 0&&(e="> ");f!==void 0&&(e+=A(f,c));f!==void 0&&i!==void 0&&(e+=" - ");i!==void 0&&(e+=A(i,c));d.push(g.extend({chart:b.chart,name:e,options:{},drawLegendSymbol:k.area.prototype.drawLegendSymbol,visible:!0,setState:function(){},setVisible:function(){}},a))}),b.legendItems=d;else if(j)f=j.from,i=j.to,h=j.fromLabel,j=j.toLabel,m=o?[0,0,1,0]:[0,1,0,0],o||(o=h,h=j,j=o),o={linearGradient:{x1:m[0],y1:m[1],x2:m[2],y2:m[3]},stops:[[0,f],[1,i]]},d=[{chart:b.chart,options:{},fromLabel:h, |
|||
toLabel:j,color:o,drawLegendSymbol:this.drawLegendSymbolGradient,visible:!0,setState:function(){},setVisible:function(){}}],b.legendItems=d},drawLegendSymbol:k.area.prototype.drawLegendSymbol,drawLegendSymbolGradient:function(a,b){var c=a.options.symbolPadding,d=n(a.options.padding,8),e,f,i=this.chart.renderer.fontMetrics(a.options.itemStyle.fontSize).h,h=a.options.layout==="horizontal",j;j=n(a.options.rectangleLength,200);h?(e=-(c/2),f=0):(e=-j+a.baseline-c/2,f=d+i);b.fromText=this.chart.renderer.text(b.fromLabel, |
|||
f,e).attr({zIndex:2}).add(b.legendGroup);f=b.fromText.getBBox();b.legendSymbol=this.chart.renderer.rect(h?f.x+f.width+c:f.x-i-c,f.y,h?j:i,h?i:j,2).attr({zIndex:1}).add(b.legendGroup);j=b.legendSymbol.getBBox();b.toText=this.chart.renderer.text(b.toLabel,j.x+j.width+c,h?e:j.y+j.height-c).attr({zIndex:2}).add(b.legendGroup);e=b.toText.getBBox();h?(a.offsetWidth=f.width+j.width+e.width+c*2+d,a.itemY=i+d):(a.offsetWidth=Math.max(f.width,e.width)+c+j.width+d,a.itemY=j.height+d,a.itemX=c)},getBox:function(a){var b= |
|||
Number.MIN_VALUE,c=Number.MAX_VALUE,d=Number.MIN_VALUE,e=Number.MAX_VALUE;l(a||this.options.data,function(a){for(var i=a.path,h=i.length,j=!1,g=Number.MIN_VALUE,m=Number.MAX_VALUE,k=Number.MIN_VALUE,l=Number.MAX_VALUE;h--;)typeof i[h]==="number"&&!isNaN(i[h])&&(j?(g=Math.max(g,i[h]),m=Math.min(m,i[h])):(k=Math.max(k,i[h]),l=Math.min(l,i[h])),j=!j);a._maxX=g;a._minX=m;a._maxY=k;a._minY=l;b=Math.max(b,g);c=Math.min(c,m);d=Math.max(d,k);e=Math.min(e,l)});this.minY=e;this.maxY=d;this.minX=c;this.maxX= |
|||
b},translatePath:function(a){var b=!1,c=this.xAxis,d=this.yAxis,e,a=[].concat(a);for(e=a.length;e--;)typeof a[e]==="number"&&(a[e]=b?Math.round(c.translate(a[e])):Math.round(d.len-d.translate(a[e])),b=!b);return a},setData:function(){g.Series.prototype.setData.apply(this,arguments);this.getBox()},translate:function(){var a=this,b=Number.MAX_VALUE,c=Number.MIN_VALUE;a.generatePoints();l(a.data,function(d){d.shapeType="path";d.shapeArgs={d:a.translatePath(d.path)};if(typeof d.y==="number")if(d.y>c)c= |
|||
d.y;else if(d.y<b)b=d.y});a.translateColors(b,c)},translateColors:function(a,b){var c=this.options,d=c.valueRanges,e=c.colorRange,f=this.colorKey,i,h;e&&(i=u(e.from),h=u(e.to));l(this.data,function(g){var k=g[f],m,l,n;if(d)for(n=d.length;n--;){if(m=d[n],i=m.from,h=m.to,(i===void 0||k>=i)&&(h===void 0||k<=h)){l=m.color;break}}else e&&k!==void 0&&(m=1-(b-k)/(b-a),l=k===null?c.nullColor:x(i,h,m));if(l)g.color=null,g.options.color=l})},drawGraph:w,drawDataLabels:w,drawPoints:function(){var a=this.xAxis, |
|||
b=this.yAxis,c=this.colorKey;l(this.data,function(a){a.plotY=1;if(a[c]===null)a[c]=0,a.isNull=!0});k.column.prototype.drawPoints.apply(this);l(this.data,function(d){var e=d.dataLabels,f=a.toPixels(d._minX,!0),g=a.toPixels(d._maxX,!0),h=b.toPixels(d._minY,!0),j=b.toPixels(d._maxY,!0);d.plotX=Math.round(f+(g-f)*n(e&&e.anchorX,0.5));d.plotY=Math.round(h+(j-h)*n(e&&e.anchorY,0.5));d.isNull&&(d[c]=null)});g.Series.prototype.drawDataLabels.call(this)},animateDrilldown:function(a){var b=this.chart.plotBox, |
|||
c=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],d=c.bBox,e=this.chart.options.drilldown.animation;if(!a)a=Math.min(d.width/b.width,d.height/b.height),c.shapeArgs={scaleX:a,scaleY:a,translateX:d.x,translateY:d.y},l(this.points,function(a){a.graphic.attr(c.shapeArgs).animate({scaleX:1,scaleY:1,translateX:0,translateY:0},e)}),delete this.animate},animateDrillupFrom:function(a){k.column.prototype.animateDrillupFrom.call(this,a)},animateDrillupTo:function(a){k.column.prototype.animateDrillupTo.call(this, |
|||
a)}});q.mapline=p(q.map,{lineWidth:1,backgroundColor:"none"});k.mapline=g.extendClass(k.map,{type:"mapline",pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth",fill:"backgroundColor"},drawLegendSymbol:k.line.prototype.drawLegendSymbol});q.mappoint=p(q.scatter,{dataLabels:{enabled:!0,format:"{point.name}",color:"black",style:{textShadow:"0 0 5px white"}}});k.mappoint=g.extendClass(k.scatter,{type:"mappoint"});g.Map=function(a,b){var c={endOnTick:!1,gridLineWidth:0,labels:{enabled:!1},lineWidth:0, |
|||
minPadding:0,maxPadding:0,startOnTick:!1,tickWidth:0,title:null},d;d=a.series;a.series=null;a=p({chart:{type:"map",panning:"xy"},xAxis:c,yAxis:p(c,{reversed:!0})},a,{chart:{inverted:!1}});a.series=d;return new g.Chart(a,b)}})(Highcharts); |
|||
File diff suppressed because it is too large
@ -0,0 +1,12 @@ |
|||
/* |
|||
Highcharts JS v3.0.6 (2013-10-04) |
|||
Plugin for displaying a message when there is no data visible in chart. |
|||
|
|||
(c) 2010-2013 Highsoft AS |
|||
Author: Øystein Moseng |
|||
|
|||
License: www.highcharts.com/license |
|||
*/ |
|||
(function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:"No data to display"});h.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!== |
|||
void 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,"no-data").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,"plotBox")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0; |
|||
return!1};e.callbacks.push(function(a){c.addEvent(a,"load",g);c.addEvent(a,"redraw",g)})})(Highcharts); |
|||
@ -0,0 +1,128 @@ |
|||
/** |
|||
* @license Highcharts JS v3.0.6 (2013-10-04) |
|||
* Plugin for displaying a message when there is no data visible in chart. |
|||
* |
|||
* (c) 2010-2013 Highsoft AS |
|||
* Author: Øystein Moseng |
|||
* |
|||
* License: www.highcharts.com/license |
|||
*/ |
|||
|
|||
(function (H) { // docs
|
|||
|
|||
var seriesTypes = H.seriesTypes, |
|||
chartPrototype = H.Chart.prototype, |
|||
defaultOptions = H.getOptions(), |
|||
extend = H.extend; |
|||
|
|||
// Add language option
|
|||
extend(defaultOptions.lang, { |
|||
noData: 'No data to display' |
|||
}); |
|||
|
|||
// Add default display options for message
|
|||
defaultOptions.noData = { |
|||
position: { |
|||
x: 0, |
|||
y: 0, |
|||
align: 'center', |
|||
verticalAlign: 'middle' |
|||
}, |
|||
attr: { |
|||
}, |
|||
style: { |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
color: '#60606a' |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* Define hasData functions for series. These return true if there are data points on this series within the plot area |
|||
*/ |
|||
function hasDataPie() { |
|||
return !!this.points.length; /* != 0 */ |
|||
} |
|||
|
|||
seriesTypes.pie.prototype.hasData = hasDataPie; |
|||
|
|||
if (seriesTypes.gauge) { |
|||
seriesTypes.gauge.prototype.hasData = hasDataPie; |
|||
} |
|||
|
|||
if (seriesTypes.waterfall) { |
|||
seriesTypes.waterfall.prototype.hasData = hasDataPie; |
|||
} |
|||
|
|||
H.Series.prototype.hasData = function () { |
|||
return this.dataMax !== undefined && this.dataMin !== undefined; |
|||
}; |
|||
|
|||
/** |
|||
* Display a no-data message. |
|||
* |
|||
* @param {String} str An optional message to show in place of the default one |
|||
*/ |
|||
chartPrototype.showNoData = function (str) { |
|||
var chart = this, |
|||
options = chart.options, |
|||
text = str || options.lang.noData, |
|||
noDataOptions = options.noData; |
|||
|
|||
if (!chart.noDataLabel) { |
|||
chart.noDataLabel = chart.renderer.label(text, 0, 0, null, null, null, null, null, 'no-data') |
|||
.attr(noDataOptions.attr) |
|||
.css(noDataOptions.style) |
|||
.add(); |
|||
chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox'); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* Hide no-data message |
|||
*/ |
|||
chartPrototype.hideNoData = function () { |
|||
var chart = this; |
|||
if (chart.noDataLabel) { |
|||
chart.noDataLabel = chart.noDataLabel.destroy(); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* Returns true if there are data points within the plot area now |
|||
*/ |
|||
chartPrototype.hasData = function () { |
|||
var chart = this, |
|||
series = chart.series, |
|||
i = series.length; |
|||
|
|||
while (i--) { |
|||
if (series[i].hasData() && !series[i].options.isInternal) { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
}; |
|||
|
|||
/** |
|||
* Show no-data message if there is no data in sight. Otherwise, hide it. |
|||
*/ |
|||
function handleNoData() { |
|||
var chart = this; |
|||
if (chart.hasData()) { |
|||
chart.hideNoData(); |
|||
} else { |
|||
chart.showNoData(); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Add event listener to handle automatic display of no-data message |
|||
*/ |
|||
chartPrototype.callbacks.push(function (chart) { |
|||
H.addEvent(chart, 'load', handleNoData); |
|||
H.addEvent(chart, 'redraw', handleNoData); |
|||
}); |
|||
|
|||
}(Highcharts)); |
|||
@ -0,0 +1,254 @@ |
|||
/** |
|||
* Dark blue theme for Highcharts JS |
|||
* @author Torstein Hønsi |
|||
*/ |
|||
|
|||
Highcharts.theme = { |
|||
colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", |
|||
"#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], |
|||
chart: { |
|||
backgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, |
|||
stops: [ |
|||
[0, 'rgb(48, 48, 96)'], |
|||
[1, 'rgb(0, 0, 0)'] |
|||
] |
|||
}, |
|||
borderColor: '#000000', |
|||
borderWidth: 2, |
|||
className: 'dark-container', |
|||
plotBackgroundColor: 'rgba(255, 255, 255, .1)', |
|||
plotBorderColor: '#CCCCCC', |
|||
plotBorderWidth: 1 |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#C0C0C0', |
|||
font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' |
|||
} |
|||
}, |
|||
subtitle: { |
|||
style: { |
|||
color: '#666666', |
|||
font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' |
|||
} |
|||
}, |
|||
xAxis: { |
|||
gridLineColor: '#333333', |
|||
gridLineWidth: 1, |
|||
labels: { |
|||
style: { |
|||
color: '#A0A0A0' |
|||
} |
|||
}, |
|||
lineColor: '#A0A0A0', |
|||
tickColor: '#A0A0A0', |
|||
title: { |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
fontFamily: 'Trebuchet MS, Verdana, sans-serif' |
|||
|
|||
} |
|||
} |
|||
}, |
|||
yAxis: { |
|||
gridLineColor: '#333333', |
|||
labels: { |
|||
style: { |
|||
color: '#A0A0A0' |
|||
} |
|||
}, |
|||
lineColor: '#A0A0A0', |
|||
minorTickInterval: null, |
|||
tickColor: '#A0A0A0', |
|||
tickWidth: 1, |
|||
title: { |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
fontFamily: 'Trebuchet MS, Verdana, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
tooltip: { |
|||
backgroundColor: 'rgba(0, 0, 0, 0.75)', |
|||
style: { |
|||
color: '#F0F0F0' |
|||
} |
|||
}, |
|||
toolbar: { |
|||
itemStyle: { |
|||
color: 'silver' |
|||
} |
|||
}, |
|||
plotOptions: { |
|||
line: { |
|||
dataLabels: { |
|||
color: '#CCC' |
|||
}, |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
spline: { |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
scatter: { |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
candlestick: { |
|||
lineColor: 'white' |
|||
} |
|||
}, |
|||
legend: { |
|||
itemStyle: { |
|||
font: '9pt Trebuchet MS, Verdana, sans-serif', |
|||
color: '#A0A0A0' |
|||
}, |
|||
itemHoverStyle: { |
|||
color: '#FFF' |
|||
}, |
|||
itemHiddenStyle: { |
|||
color: '#444' |
|||
} |
|||
}, |
|||
credits: { |
|||
style: { |
|||
color: '#666' |
|||
} |
|||
}, |
|||
labels: { |
|||
style: { |
|||
color: '#CCC' |
|||
} |
|||
}, |
|||
|
|||
navigation: { |
|||
buttonOptions: { |
|||
symbolStroke: '#DDDDDD', |
|||
hoverSymbolStroke: '#FFFFFF', |
|||
theme: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#606060'], |
|||
[0.6, '#333333'] |
|||
] |
|||
}, |
|||
stroke: '#000000' |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// scroll charts
|
|||
rangeSelector: { |
|||
buttonTheme: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold' |
|||
}, |
|||
states: { |
|||
hover: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#BBB'], |
|||
[0.6, '#888'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: 'white' |
|||
} |
|||
}, |
|||
select: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.1, '#000'], |
|||
[0.3, '#333'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: 'yellow' |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
inputStyle: { |
|||
backgroundColor: '#333', |
|||
color: 'silver' |
|||
}, |
|||
labelStyle: { |
|||
color: 'silver' |
|||
} |
|||
}, |
|||
|
|||
navigator: { |
|||
handles: { |
|||
backgroundColor: '#666', |
|||
borderColor: '#AAA' |
|||
}, |
|||
outlineColor: '#CCC', |
|||
maskFill: 'rgba(16, 16, 16, 0.5)', |
|||
series: { |
|||
color: '#7798BF', |
|||
lineColor: '#A6C7ED' |
|||
} |
|||
}, |
|||
|
|||
scrollbar: { |
|||
barBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
barBorderColor: '#CCC', |
|||
buttonArrowColor: '#CCC', |
|||
buttonBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
buttonBorderColor: '#CCC', |
|||
rifleColor: '#FFF', |
|||
trackBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0, '#000'], |
|||
[1, '#333'] |
|||
] |
|||
}, |
|||
trackBorderColor: '#666' |
|||
}, |
|||
|
|||
// special colors for some of the
|
|||
legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', |
|||
legendBackgroundColorSolid: 'rgb(35, 35, 70)', |
|||
dataLabelsColor: '#444', |
|||
textColor: '#C0C0C0', |
|||
maskColor: 'rgba(255,255,255,0.3)' |
|||
}; |
|||
|
|||
// Apply the theme
|
|||
var highchartsOptions = Highcharts.setOptions(Highcharts.theme); |
|||
@ -0,0 +1,255 @@ |
|||
/** |
|||
* Dark blue theme for Highcharts JS |
|||
* @author Torstein Hønsi |
|||
*/ |
|||
|
|||
Highcharts.theme = { |
|||
colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", |
|||
"#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], |
|||
chart: { |
|||
backgroundColor: { |
|||
linearGradient: [0, 0, 250, 500], |
|||
stops: [ |
|||
[0, 'rgb(48, 96, 48)'], |
|||
[1, 'rgb(0, 0, 0)'] |
|||
] |
|||
}, |
|||
borderColor: '#000000', |
|||
borderWidth: 2, |
|||
className: 'dark-container', |
|||
plotBackgroundColor: 'rgba(255, 255, 255, .1)', |
|||
plotBorderColor: '#CCCCCC', |
|||
plotBorderWidth: 1 |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#C0C0C0', |
|||
font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' |
|||
} |
|||
}, |
|||
subtitle: { |
|||
style: { |
|||
color: '#666666', |
|||
font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' |
|||
} |
|||
}, |
|||
xAxis: { |
|||
gridLineColor: '#333333', |
|||
gridLineWidth: 1, |
|||
labels: { |
|||
style: { |
|||
color: '#A0A0A0' |
|||
} |
|||
}, |
|||
lineColor: '#A0A0A0', |
|||
tickColor: '#A0A0A0', |
|||
title: { |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
fontFamily: 'Trebuchet MS, Verdana, sans-serif' |
|||
|
|||
} |
|||
} |
|||
}, |
|||
yAxis: { |
|||
gridLineColor: '#333333', |
|||
labels: { |
|||
style: { |
|||
color: '#A0A0A0' |
|||
} |
|||
}, |
|||
lineColor: '#A0A0A0', |
|||
minorTickInterval: null, |
|||
tickColor: '#A0A0A0', |
|||
tickWidth: 1, |
|||
title: { |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
fontFamily: 'Trebuchet MS, Verdana, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
tooltip: { |
|||
backgroundColor: 'rgba(0, 0, 0, 0.75)', |
|||
style: { |
|||
color: '#F0F0F0' |
|||
} |
|||
}, |
|||
toolbar: { |
|||
itemStyle: { |
|||
color: 'silver' |
|||
} |
|||
}, |
|||
plotOptions: { |
|||
line: { |
|||
dataLabels: { |
|||
color: '#CCC' |
|||
}, |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
spline: { |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
scatter: { |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
candlestick: { |
|||
lineColor: 'white' |
|||
} |
|||
}, |
|||
legend: { |
|||
itemStyle: { |
|||
font: '9pt Trebuchet MS, Verdana, sans-serif', |
|||
color: '#A0A0A0' |
|||
}, |
|||
itemHoverStyle: { |
|||
color: '#FFF' |
|||
}, |
|||
itemHiddenStyle: { |
|||
color: '#444' |
|||
} |
|||
}, |
|||
credits: { |
|||
style: { |
|||
color: '#666' |
|||
} |
|||
}, |
|||
labels: { |
|||
style: { |
|||
color: '#CCC' |
|||
} |
|||
}, |
|||
|
|||
|
|||
navigation: { |
|||
buttonOptions: { |
|||
symbolStroke: '#DDDDDD', |
|||
hoverSymbolStroke: '#FFFFFF', |
|||
theme: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#606060'], |
|||
[0.6, '#333333'] |
|||
] |
|||
}, |
|||
stroke: '#000000' |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// scroll charts
|
|||
rangeSelector: { |
|||
buttonTheme: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold' |
|||
}, |
|||
states: { |
|||
hover: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#BBB'], |
|||
[0.6, '#888'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: 'white' |
|||
} |
|||
}, |
|||
select: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.1, '#000'], |
|||
[0.3, '#333'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: 'yellow' |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
inputStyle: { |
|||
backgroundColor: '#333', |
|||
color: 'silver' |
|||
}, |
|||
labelStyle: { |
|||
color: 'silver' |
|||
} |
|||
}, |
|||
|
|||
navigator: { |
|||
handles: { |
|||
backgroundColor: '#666', |
|||
borderColor: '#AAA' |
|||
}, |
|||
outlineColor: '#CCC', |
|||
maskFill: 'rgba(16, 16, 16, 0.5)', |
|||
series: { |
|||
color: '#7798BF', |
|||
lineColor: '#A6C7ED' |
|||
} |
|||
}, |
|||
|
|||
scrollbar: { |
|||
barBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
barBorderColor: '#CCC', |
|||
buttonArrowColor: '#CCC', |
|||
buttonBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
buttonBorderColor: '#CCC', |
|||
rifleColor: '#FFF', |
|||
trackBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0, '#000'], |
|||
[1, '#333'] |
|||
] |
|||
}, |
|||
trackBorderColor: '#666' |
|||
}, |
|||
|
|||
// special colors for some of the
|
|||
legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', |
|||
legendBackgroundColorSolid: 'rgb(35, 35, 70)', |
|||
dataLabelsColor: '#444', |
|||
textColor: '#C0C0C0', |
|||
maskColor: 'rgba(255,255,255,0.3)' |
|||
}; |
|||
|
|||
// Apply the theme
|
|||
var highchartsOptions = Highcharts.setOptions(Highcharts.theme); |
|||
@ -0,0 +1,257 @@ |
|||
/** |
|||
* Gray theme for Highcharts JS |
|||
* @author Torstein Hønsi |
|||
*/ |
|||
|
|||
Highcharts.theme = { |
|||
colors: ["#DDDF0D", "#7798BF", "#55BF3B", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee", |
|||
"#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], |
|||
chart: { |
|||
backgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0, 'rgb(96, 96, 96)'], |
|||
[1, 'rgb(16, 16, 16)'] |
|||
] |
|||
}, |
|||
borderWidth: 0, |
|||
borderRadius: 15, |
|||
plotBackgroundColor: null, |
|||
plotShadow: false, |
|||
plotBorderWidth: 0 |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#FFF', |
|||
font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
}, |
|||
subtitle: { |
|||
style: { |
|||
color: '#DDD', |
|||
font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
}, |
|||
xAxis: { |
|||
gridLineWidth: 0, |
|||
lineColor: '#999', |
|||
tickColor: '#999', |
|||
labels: { |
|||
style: { |
|||
color: '#999', |
|||
fontWeight: 'bold' |
|||
} |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#AAA', |
|||
font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
yAxis: { |
|||
alternateGridColor: null, |
|||
minorTickInterval: null, |
|||
gridLineColor: 'rgba(255, 255, 255, .1)', |
|||
minorGridLineColor: 'rgba(255,255,255,0.07)', |
|||
lineWidth: 0, |
|||
tickWidth: 0, |
|||
labels: { |
|||
style: { |
|||
color: '#999', |
|||
fontWeight: 'bold' |
|||
} |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#AAA', |
|||
font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
legend: { |
|||
itemStyle: { |
|||
color: '#CCC' |
|||
}, |
|||
itemHoverStyle: { |
|||
color: '#FFF' |
|||
}, |
|||
itemHiddenStyle: { |
|||
color: '#333' |
|||
} |
|||
}, |
|||
labels: { |
|||
style: { |
|||
color: '#CCC' |
|||
} |
|||
}, |
|||
tooltip: { |
|||
backgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0, 'rgba(96, 96, 96, .8)'], |
|||
[1, 'rgba(16, 16, 16, .8)'] |
|||
] |
|||
}, |
|||
borderWidth: 0, |
|||
style: { |
|||
color: '#FFF' |
|||
} |
|||
}, |
|||
|
|||
|
|||
plotOptions: { |
|||
series: { |
|||
shadow: true |
|||
}, |
|||
line: { |
|||
dataLabels: { |
|||
color: '#CCC' |
|||
}, |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
spline: { |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
scatter: { |
|||
marker: { |
|||
lineColor: '#333' |
|||
} |
|||
}, |
|||
candlestick: { |
|||
lineColor: 'white' |
|||
} |
|||
}, |
|||
|
|||
toolbar: { |
|||
itemStyle: { |
|||
color: '#CCC' |
|||
} |
|||
}, |
|||
|
|||
navigation: { |
|||
buttonOptions: { |
|||
symbolStroke: '#DDDDDD', |
|||
hoverSymbolStroke: '#FFFFFF', |
|||
theme: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#606060'], |
|||
[0.6, '#333333'] |
|||
] |
|||
}, |
|||
stroke: '#000000' |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// scroll charts
|
|||
rangeSelector: { |
|||
buttonTheme: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: '#CCC', |
|||
fontWeight: 'bold' |
|||
}, |
|||
states: { |
|||
hover: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#BBB'], |
|||
[0.6, '#888'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: 'white' |
|||
} |
|||
}, |
|||
select: { |
|||
fill: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.1, '#000'], |
|||
[0.3, '#333'] |
|||
] |
|||
}, |
|||
stroke: '#000000', |
|||
style: { |
|||
color: 'yellow' |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
inputStyle: { |
|||
backgroundColor: '#333', |
|||
color: 'silver' |
|||
}, |
|||
labelStyle: { |
|||
color: 'silver' |
|||
} |
|||
}, |
|||
|
|||
navigator: { |
|||
handles: { |
|||
backgroundColor: '#666', |
|||
borderColor: '#AAA' |
|||
}, |
|||
outlineColor: '#CCC', |
|||
maskFill: 'rgba(16, 16, 16, 0.5)', |
|||
series: { |
|||
color: '#7798BF', |
|||
lineColor: '#A6C7ED' |
|||
} |
|||
}, |
|||
|
|||
scrollbar: { |
|||
barBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
barBorderColor: '#CCC', |
|||
buttonArrowColor: '#CCC', |
|||
buttonBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0.4, '#888'], |
|||
[0.6, '#555'] |
|||
] |
|||
}, |
|||
buttonBorderColor: '#CCC', |
|||
rifleColor: '#FFF', |
|||
trackBackgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, |
|||
stops: [ |
|||
[0, '#000'], |
|||
[1, '#333'] |
|||
] |
|||
}, |
|||
trackBorderColor: '#666' |
|||
}, |
|||
|
|||
// special colors for some of the demo examples
|
|||
legendBackgroundColor: 'rgba(48, 48, 48, 0.8)', |
|||
legendBackgroundColorSolid: 'rgb(70, 70, 70)', |
|||
dataLabelsColor: '#444', |
|||
textColor: '#E0E0E0', |
|||
maskColor: 'rgba(255,255,255,0.3)' |
|||
}; |
|||
|
|||
// Apply the theme
|
|||
var highchartsOptions = Highcharts.setOptions(Highcharts.theme); |
|||
@ -0,0 +1,103 @@ |
|||
/** |
|||
* Grid theme for Highcharts JS |
|||
* @author Torstein Hønsi |
|||
*/ |
|||
|
|||
Highcharts.theme = { |
|||
colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'], |
|||
chart: { |
|||
backgroundColor: { |
|||
linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, |
|||
stops: [ |
|||
[0, 'rgb(255, 255, 255)'], |
|||
[1, 'rgb(240, 240, 255)'] |
|||
] |
|||
}, |
|||
borderWidth: 2, |
|||
plotBackgroundColor: 'rgba(255, 255, 255, .9)', |
|||
plotShadow: true, |
|||
plotBorderWidth: 1 |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#000', |
|||
font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' |
|||
} |
|||
}, |
|||
subtitle: { |
|||
style: { |
|||
color: '#666666', |
|||
font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' |
|||
} |
|||
}, |
|||
xAxis: { |
|||
gridLineWidth: 1, |
|||
lineColor: '#000', |
|||
tickColor: '#000', |
|||
labels: { |
|||
style: { |
|||
color: '#000', |
|||
font: '11px Trebuchet MS, Verdana, sans-serif' |
|||
} |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#333', |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
fontFamily: 'Trebuchet MS, Verdana, sans-serif' |
|||
|
|||
} |
|||
} |
|||
}, |
|||
yAxis: { |
|||
minorTickInterval: 'auto', |
|||
lineColor: '#000', |
|||
lineWidth: 1, |
|||
tickWidth: 1, |
|||
tickColor: '#000', |
|||
labels: { |
|||
style: { |
|||
color: '#000', |
|||
font: '11px Trebuchet MS, Verdana, sans-serif' |
|||
} |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#333', |
|||
fontWeight: 'bold', |
|||
fontSize: '12px', |
|||
fontFamily: 'Trebuchet MS, Verdana, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
legend: { |
|||
itemStyle: { |
|||
font: '9pt Trebuchet MS, Verdana, sans-serif', |
|||
color: 'black' |
|||
|
|||
}, |
|||
itemHoverStyle: { |
|||
color: '#039' |
|||
}, |
|||
itemHiddenStyle: { |
|||
color: 'gray' |
|||
} |
|||
}, |
|||
labels: { |
|||
style: { |
|||
color: '#99b' |
|||
} |
|||
}, |
|||
|
|||
navigation: { |
|||
buttonOptions: { |
|||
theme: { |
|||
stroke: '#CCCCCC' |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
|
|||
// Apply the theme
|
|||
var highchartsOptions = Highcharts.setOptions(Highcharts.theme); |
|||
@ -0,0 +1,89 @@ |
|||
/** |
|||
* Skies theme for Highcharts JS |
|||
* @author Torstein Hønsi |
|||
*/ |
|||
|
|||
Highcharts.theme = { |
|||
colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"], |
|||
chart: { |
|||
className: 'skies', |
|||
borderWidth: 0, |
|||
plotShadow: true, |
|||
plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg', |
|||
plotBackgroundColor: { |
|||
linearGradient: [0, 0, 250, 500], |
|||
stops: [ |
|||
[0, 'rgba(255, 255, 255, 1)'], |
|||
[1, 'rgba(255, 255, 255, 0)'] |
|||
] |
|||
}, |
|||
plotBorderWidth: 1 |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#3E576F', |
|||
font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
}, |
|||
subtitle: { |
|||
style: { |
|||
color: '#6D869F', |
|||
font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
}, |
|||
xAxis: { |
|||
gridLineWidth: 0, |
|||
lineColor: '#C0D0E0', |
|||
tickColor: '#C0D0E0', |
|||
labels: { |
|||
style: { |
|||
color: '#666', |
|||
fontWeight: 'bold' |
|||
} |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#666', |
|||
font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
yAxis: { |
|||
alternateGridColor: 'rgba(255, 255, 255, .5)', |
|||
lineColor: '#C0D0E0', |
|||
tickColor: '#C0D0E0', |
|||
tickWidth: 1, |
|||
labels: { |
|||
style: { |
|||
color: '#666', |
|||
fontWeight: 'bold' |
|||
} |
|||
}, |
|||
title: { |
|||
style: { |
|||
color: '#666', |
|||
font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' |
|||
} |
|||
} |
|||
}, |
|||
legend: { |
|||
itemStyle: { |
|||
font: '9pt Trebuchet MS, Verdana, sans-serif', |
|||
color: '#3E576F' |
|||
}, |
|||
itemHoverStyle: { |
|||
color: 'black' |
|||
}, |
|||
itemHiddenStyle: { |
|||
color: 'silver' |
|||
} |
|||
}, |
|||
labels: { |
|||
style: { |
|||
color: '#3E576F' |
|||
} |
|||
} |
|||
}; |
|||
|
|||
// Apply the theme
|
|||
var highchartsOptions = Highcharts.setOptions(Highcharts.theme); |
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 9.6 KiB |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,766 @@ |
|||
/*! |
|||
Video.js Default Styles (http://videojs.com) |
|||
Version 4.3.0 |
|||
Create your own skin at http://designer.videojs.com |
|||
*/ |
|||
/* SKIN |
|||
================================================================================ |
|||
The main class name for all skin-specific styles. To make your own skin, |
|||
replace all occurances of 'vjs-default-skin' with a new name. Then add your new |
|||
skin name to your video tag instead of the default skin. |
|||
e.g. <video class="video-js my-skin-name"> |
|||
*/ |
|||
.vjs-default-skin { |
|||
color: #cccccc; |
|||
} |
|||
/* Custom Icon Font |
|||
-------------------------------------------------------------------------------- |
|||
The control icons are from a custom font. Each icon corresponds to a character |
|||
(e.g. "\e001"). Font icons allow for easy scaling and coloring of icons. |
|||
*/ |
|||
@font-face { |
|||
font-family: 'VideoJS'; |
|||
src: url('font/vjs.eot'); |
|||
src: url('font/vjs.eot?#iefix') format('embedded-opentype'), url('font/vjs.woff') format('woff'), url('font/vjs.ttf') format('truetype'); |
|||
font-weight: normal; |
|||
font-style: normal; |
|||
} |
|||
/* Base UI Component Classes |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
/* Slider - used for Volume bar and Seek bar */ |
|||
.vjs-default-skin .vjs-slider { |
|||
/* Replace browser focus hightlight with handle highlight */ |
|||
outline: 0; |
|||
position: relative; |
|||
cursor: pointer; |
|||
padding: 0; |
|||
/* background-color-with-alpha */ |
|||
background-color: #333333; |
|||
background-color: rgba(51, 51, 51, 0.9); |
|||
} |
|||
.vjs-default-skin .vjs-slider:focus { |
|||
/* box-shadow */ |
|||
-webkit-box-shadow: 0 0 2em #ffffff; |
|||
-moz-box-shadow: 0 0 2em #ffffff; |
|||
box-shadow: 0 0 2em #ffffff; |
|||
} |
|||
.vjs-default-skin .vjs-slider-handle { |
|||
position: absolute; |
|||
/* Needed for IE6 */ |
|||
left: 0; |
|||
top: 0; |
|||
} |
|||
.vjs-default-skin .vjs-slider-handle:before { |
|||
content: "\e009"; |
|||
font-family: VideoJS; |
|||
font-size: 1em; |
|||
line-height: 1; |
|||
text-align: center; |
|||
text-shadow: 0em 0em 1em #fff; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
/* Rotate the square icon to make a diamond */ |
|||
/* transform */ |
|||
-webkit-transform: rotate(-45deg); |
|||
-moz-transform: rotate(-45deg); |
|||
-ms-transform: rotate(-45deg); |
|||
-o-transform: rotate(-45deg); |
|||
transform: rotate(-45deg); |
|||
} |
|||
/* Control Bar |
|||
-------------------------------------------------------------------------------- |
|||
The default control bar that is a container for most of the controls. |
|||
*/ |
|||
.vjs-default-skin .vjs-control-bar { |
|||
/* Start hidden */ |
|||
display: none; |
|||
position: absolute; |
|||
/* Place control bar at the bottom of the player box/video. |
|||
If you want more margin below the control bar, add more height. */ |
|||
bottom: 0; |
|||
/* Use left/right to stretch to 100% width of player div */ |
|||
left: 0; |
|||
right: 0; |
|||
/* Height includes any margin you want above or below control items */ |
|||
height: 3.0em; |
|||
/* background-color-with-alpha */ |
|||
background-color: #07141e; |
|||
background-color: rgba(7, 20, 30, 0.7); |
|||
} |
|||
/* Show the control bar only once the video has started playing */ |
|||
.vjs-default-skin.vjs-has-started .vjs-control-bar { |
|||
display: block; |
|||
/* Visibility needed to make sure things hide in older browsers too. */ |
|||
|
|||
visibility: visible; |
|||
opacity: 1; |
|||
/* transition */ |
|||
-webkit-transition: visibility 0.1s, opacity 0.1s; |
|||
-moz-transition: visibility 0.1s, opacity 0.1s; |
|||
-o-transition: visibility 0.1s, opacity 0.1s; |
|||
transition: visibility 0.1s, opacity 0.1s; |
|||
} |
|||
/* Hide the control bar when the video is playing and the user is inactive */ |
|||
.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { |
|||
display: block; |
|||
visibility: hidden; |
|||
opacity: 0; |
|||
/* transition */ |
|||
-webkit-transition: visibility 1s, opacity 1s; |
|||
-moz-transition: visibility 1s, opacity 1s; |
|||
-o-transition: visibility 1s, opacity 1s; |
|||
transition: visibility 1s, opacity 1s; |
|||
} |
|||
.vjs-default-skin.vjs-controls-disabled .vjs-control-bar { |
|||
display: none; |
|||
} |
|||
.vjs-default-skin.vjs-using-native-controls .vjs-control-bar { |
|||
display: none; |
|||
} |
|||
/* IE8 is flakey with fonts, and you have to change the actual content to force |
|||
fonts to show/hide properly. |
|||
- "\9" IE8 hack didn't work for this |
|||
- Found in XP IE8 from http://modern.ie. Does not show up in "IE8 mode" in IE9 |
|||
*/ |
|||
@media \0screen { |
|||
.vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before { |
|||
content: ""; |
|||
} |
|||
} |
|||
/* General styles for individual controls. */ |
|||
.vjs-default-skin .vjs-control { |
|||
outline: none; |
|||
position: relative; |
|||
float: left; |
|||
text-align: center; |
|||
margin: 0; |
|||
padding: 0; |
|||
height: 3.0em; |
|||
width: 4em; |
|||
} |
|||
/* FontAwsome button icons */ |
|||
.vjs-default-skin .vjs-control:before { |
|||
font-family: VideoJS; |
|||
font-size: 1.5em; |
|||
line-height: 2; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
text-align: center; |
|||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); |
|||
} |
|||
/* Replacement for focus outline */ |
|||
.vjs-default-skin .vjs-control:focus:before, |
|||
.vjs-default-skin .vjs-control:hover:before { |
|||
text-shadow: 0em 0em 1em #ffffff; |
|||
} |
|||
.vjs-default-skin .vjs-control:focus { |
|||
/* outline: 0; */ |
|||
/* keyboard-only users cannot see the focus on several of the UI elements when |
|||
this is set to 0 */ |
|||
|
|||
} |
|||
/* Hide control text visually, but have it available for screenreaders */ |
|||
.vjs-default-skin .vjs-control-text { |
|||
/* hide-visually */ |
|||
border: 0; |
|||
clip: rect(0 0 0 0); |
|||
height: 1px; |
|||
margin: -1px; |
|||
overflow: hidden; |
|||
padding: 0; |
|||
position: absolute; |
|||
width: 1px; |
|||
} |
|||
/* Play/Pause |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
.vjs-default-skin .vjs-play-control { |
|||
width: 5em; |
|||
cursor: pointer; |
|||
} |
|||
.vjs-default-skin .vjs-play-control:before { |
|||
content: "\e001"; |
|||
} |
|||
.vjs-default-skin.vjs-playing .vjs-play-control:before { |
|||
content: "\e002"; |
|||
} |
|||
/* Volume/Mute |
|||
-------------------------------------------------------------------------------- */ |
|||
.vjs-default-skin .vjs-mute-control, |
|||
.vjs-default-skin .vjs-volume-menu-button { |
|||
cursor: pointer; |
|||
float: right; |
|||
} |
|||
.vjs-default-skin .vjs-mute-control:before, |
|||
.vjs-default-skin .vjs-volume-menu-button:before { |
|||
content: "\e006"; |
|||
} |
|||
.vjs-default-skin .vjs-mute-control.vjs-vol-0:before, |
|||
.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before { |
|||
content: "\e003"; |
|||
} |
|||
.vjs-default-skin .vjs-mute-control.vjs-vol-1:before, |
|||
.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before { |
|||
content: "\e004"; |
|||
} |
|||
.vjs-default-skin .vjs-mute-control.vjs-vol-2:before, |
|||
.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before { |
|||
content: "\e005"; |
|||
} |
|||
.vjs-default-skin .vjs-volume-control { |
|||
width: 5em; |
|||
float: right; |
|||
} |
|||
.vjs-default-skin .vjs-volume-bar { |
|||
width: 5em; |
|||
height: 0.6em; |
|||
margin: 1.1em auto 0; |
|||
} |
|||
.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content { |
|||
height: 2.9em; |
|||
} |
|||
.vjs-default-skin .vjs-volume-level { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
height: 0.5em; |
|||
background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat; |
|||
} |
|||
.vjs-default-skin .vjs-volume-bar .vjs-volume-handle { |
|||
width: 0.5em; |
|||
height: 0.5em; |
|||
} |
|||
.vjs-default-skin .vjs-volume-handle:before { |
|||
font-size: 0.9em; |
|||
top: -0.2em; |
|||
left: -0.2em; |
|||
width: 1em; |
|||
height: 1em; |
|||
} |
|||
.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content { |
|||
width: 6em; |
|||
left: -4em; |
|||
} |
|||
/* Progress |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
.vjs-default-skin .vjs-progress-control { |
|||
position: absolute; |
|||
left: 0; |
|||
right: 0; |
|||
width: auto; |
|||
font-size: 0.3em; |
|||
height: 1em; |
|||
/* Set above the rest of the controls. */ |
|||
top: -1em; |
|||
/* Shrink the bar slower than it grows. */ |
|||
/* transition */ |
|||
-webkit-transition: all 0.4s; |
|||
-moz-transition: all 0.4s; |
|||
-o-transition: all 0.4s; |
|||
transition: all 0.4s; |
|||
} |
|||
/* On hover, make the progress bar grow to something that's more clickable. |
|||
This simply changes the overall font for the progress bar, and this |
|||
updates both the em-based widths and heights, as wells as the icon font */ |
|||
.vjs-default-skin:hover .vjs-progress-control { |
|||
font-size: .9em; |
|||
/* Even though we're not changing the top/height, we need to include them in |
|||
the transition so they're handled correctly. */ |
|||
|
|||
/* transition */ |
|||
-webkit-transition: all 0.2s; |
|||
-moz-transition: all 0.2s; |
|||
-o-transition: all 0.2s; |
|||
transition: all 0.2s; |
|||
} |
|||
/* Box containing play and load progresses. Also acts as seek scrubber. */ |
|||
.vjs-default-skin .vjs-progress-holder { |
|||
height: 100%; |
|||
} |
|||
/* Progress Bars */ |
|||
.vjs-default-skin .vjs-progress-holder .vjs-play-progress, |
|||
.vjs-default-skin .vjs-progress-holder .vjs-load-progress { |
|||
position: absolute; |
|||
display: block; |
|||
height: 100%; |
|||
margin: 0; |
|||
padding: 0; |
|||
/* Needed for IE6 */ |
|||
left: 0; |
|||
top: 0; |
|||
} |
|||
.vjs-default-skin .vjs-play-progress { |
|||
/* |
|||
Using a data URI to create the white diagonal lines with a transparent |
|||
background. Surprisingly works in IE8. |
|||
Created using http://www.patternify.com |
|||
Changing the first color value will change the bar color. |
|||
Also using a paralax effect to make the lines move backwards. |
|||
The -50% left position makes that happen. |
|||
*/ |
|||
|
|||
background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat; |
|||
} |
|||
.vjs-default-skin .vjs-load-progress { |
|||
background: #646464 /* IE8- Fallback */; |
|||
background: rgba(255, 255, 255, 0.4); |
|||
} |
|||
.vjs-default-skin .vjs-seek-handle { |
|||
width: 1.5em; |
|||
height: 100%; |
|||
} |
|||
.vjs-default-skin .vjs-seek-handle:before { |
|||
padding-top: 0.1em /* Minor adjustment */; |
|||
} |
|||
/* Time Display |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
.vjs-default-skin .vjs-time-controls { |
|||
font-size: 1em; |
|||
/* Align vertically by making the line height the same as the control bar */ |
|||
line-height: 3em; |
|||
} |
|||
.vjs-default-skin .vjs-current-time { |
|||
float: left; |
|||
} |
|||
.vjs-default-skin .vjs-duration { |
|||
float: left; |
|||
} |
|||
/* Remaining time is in the HTML, but not included in default design */ |
|||
.vjs-default-skin .vjs-remaining-time { |
|||
display: none; |
|||
float: left; |
|||
} |
|||
.vjs-time-divider { |
|||
float: left; |
|||
line-height: 3em; |
|||
} |
|||
/* Fullscreen |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
.vjs-default-skin .vjs-fullscreen-control { |
|||
width: 3.8em; |
|||
cursor: pointer; |
|||
float: right; |
|||
} |
|||
.vjs-default-skin .vjs-fullscreen-control:before { |
|||
content: "\e000"; |
|||
} |
|||
/* Switch to the exit icon when the player is in fullscreen */ |
|||
.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before { |
|||
content: "\e00b"; |
|||
} |
|||
/* Big Play Button (play button at start) |
|||
-------------------------------------------------------------------------------- |
|||
Positioning of the play button in the center or other corners can be done more |
|||
easily in the skin designer. http://designer.videojs.com/ |
|||
*/ |
|||
.vjs-default-skin .vjs-big-play-button { |
|||
left: 0.5em; |
|||
top: 0.5em; |
|||
font-size: 3em; |
|||
display: block; |
|||
z-index: 2; |
|||
position: absolute; |
|||
width: 4em; |
|||
height: 2.6em; |
|||
text-align: center; |
|||
vertical-align: middle; |
|||
cursor: pointer; |
|||
opacity: 1; |
|||
/* Need a slightly gray bg so it can be seen on black backgrounds */ |
|||
/* background-color-with-alpha */ |
|||
background-color: #07141e; |
|||
background-color: rgba(7, 20, 30, 0.7); |
|||
border: 0.1em solid #3b4249; |
|||
/* border-radius */ |
|||
-webkit-border-radius: 0.8em; |
|||
-moz-border-radius: 0.8em; |
|||
border-radius: 0.8em; |
|||
/* box-shadow */ |
|||
-webkit-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25); |
|||
-moz-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25); |
|||
box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25); |
|||
/* transition */ |
|||
-webkit-transition: all 0.4s; |
|||
-moz-transition: all 0.4s; |
|||
-o-transition: all 0.4s; |
|||
transition: all 0.4s; |
|||
} |
|||
/* Optionally center */ |
|||
.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button { |
|||
/* Center it horizontally */ |
|||
left: 50%; |
|||
margin-left: -2.1em; |
|||
/* Center it vertically */ |
|||
top: 50%; |
|||
margin-top: -1.4000000000000001em; |
|||
} |
|||
/* Hide if controls are disabled */ |
|||
.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button { |
|||
display: none; |
|||
} |
|||
/* Hide when video starts playing */ |
|||
.vjs-default-skin.vjs-has-started .vjs-big-play-button { |
|||
display: none; |
|||
} |
|||
/* Hide on mobile devices. Remove when we stop using native controls |
|||
by default on mobile */ |
|||
.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button { |
|||
display: none; |
|||
} |
|||
.vjs-default-skin:hover .vjs-big-play-button, |
|||
.vjs-default-skin .vjs-big-play-button:focus { |
|||
outline: 0; |
|||
border-color: #fff; |
|||
/* IE8 needs a non-glow hover state */ |
|||
background-color: #505050; |
|||
background-color: rgba(50, 50, 50, 0.75); |
|||
/* box-shadow */ |
|||
-webkit-box-shadow: 0 0 3em #ffffff; |
|||
-moz-box-shadow: 0 0 3em #ffffff; |
|||
box-shadow: 0 0 3em #ffffff; |
|||
/* transition */ |
|||
-webkit-transition: all 0s; |
|||
-moz-transition: all 0s; |
|||
-o-transition: all 0s; |
|||
transition: all 0s; |
|||
} |
|||
.vjs-default-skin .vjs-big-play-button:before { |
|||
content: "\e001"; |
|||
font-family: VideoJS; |
|||
/* In order to center the play icon vertically we need to set the line height |
|||
to the same as the button height */ |
|||
|
|||
line-height: 2.6em; |
|||
text-shadow: 0.05em 0.05em 0.1em #000; |
|||
text-align: center /* Needed for IE8 */; |
|||
position: absolute; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
/* Loading Spinner |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
.vjs-loading-spinner { |
|||
display: none; |
|||
position: absolute; |
|||
top: 50%; |
|||
left: 50%; |
|||
font-size: 4em; |
|||
line-height: 1; |
|||
width: 1em; |
|||
height: 1em; |
|||
margin-left: -0.5em; |
|||
margin-top: -0.5em; |
|||
opacity: 0.75; |
|||
/* animation */ |
|||
-webkit-animation: spin 1.5s infinite linear; |
|||
-moz-animation: spin 1.5s infinite linear; |
|||
-o-animation: spin 1.5s infinite linear; |
|||
animation: spin 1.5s infinite linear; |
|||
} |
|||
.vjs-default-skin .vjs-loading-spinner:before { |
|||
content: "\e01e"; |
|||
font-family: VideoJS; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 1em; |
|||
height: 1em; |
|||
text-align: center; |
|||
text-shadow: 0em 0em 0.1em #000; |
|||
} |
|||
@-moz-keyframes spin { |
|||
0% { |
|||
-moz-transform: rotate(0deg); |
|||
} |
|||
100% { |
|||
-moz-transform: rotate(359deg); |
|||
} |
|||
} |
|||
@-webkit-keyframes spin { |
|||
0% { |
|||
-webkit-transform: rotate(0deg); |
|||
} |
|||
100% { |
|||
-webkit-transform: rotate(359deg); |
|||
} |
|||
} |
|||
@-o-keyframes spin { |
|||
0% { |
|||
-o-transform: rotate(0deg); |
|||
} |
|||
100% { |
|||
-o-transform: rotate(359deg); |
|||
} |
|||
} |
|||
@keyframes spin { |
|||
0% { |
|||
transform: rotate(0deg); |
|||
} |
|||
100% { |
|||
transform: rotate(359deg); |
|||
} |
|||
} |
|||
/* Menu Buttons (Captions/Subtitles/etc.) |
|||
-------------------------------------------------------------------------------- |
|||
*/ |
|||
.vjs-default-skin .vjs-menu-button { |
|||
float: right; |
|||
cursor: pointer; |
|||
} |
|||
.vjs-default-skin .vjs-menu { |
|||
display: none; |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 0em; |
|||
/* (Width of vjs-menu - width of button) / 2 */ |
|||
|
|||
width: 0em; |
|||
height: 0em; |
|||
margin-bottom: 3em; |
|||
border-left: 2em solid transparent; |
|||
border-right: 2em solid transparent; |
|||
border-top: 1.55em solid #000000; |
|||
/* Same width top as ul bottom */ |
|||
|
|||
border-top-color: rgba(7, 40, 50, 0.5); |
|||
/* Same as ul background */ |
|||
|
|||
} |
|||
/* Button Pop-up Menu */ |
|||
.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content { |
|||
display: block; |
|||
padding: 0; |
|||
margin: 0; |
|||
position: absolute; |
|||
width: 10em; |
|||
bottom: 1.5em; |
|||
/* Same bottom as vjs-menu border-top */ |
|||
|
|||
max-height: 15em; |
|||
overflow: auto; |
|||
left: -5em; |
|||
/* Width of menu - width of button / 2 */ |
|||
|
|||
/* background-color-with-alpha */ |
|||
background-color: #07141e; |
|||
background-color: rgba(7, 20, 30, 0.7); |
|||
/* box-shadow */ |
|||
-webkit-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2); |
|||
-moz-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2); |
|||
box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2); |
|||
} |
|||
.vjs-default-skin .vjs-menu-button:hover .vjs-menu { |
|||
display: block; |
|||
} |
|||
.vjs-default-skin .vjs-menu-button ul li { |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0.3em 0 0.3em 0; |
|||
line-height: 1.4em; |
|||
font-size: 1.2em; |
|||
text-align: center; |
|||
text-transform: lowercase; |
|||
} |
|||
.vjs-default-skin .vjs-menu-button ul li.vjs-selected { |
|||
background-color: #000; |
|||
} |
|||
.vjs-default-skin .vjs-menu-button ul li:focus, |
|||
.vjs-default-skin .vjs-menu-button ul li:hover, |
|||
.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus, |
|||
.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover { |
|||
outline: 0; |
|||
color: #111; |
|||
/* background-color-with-alpha */ |
|||
background-color: #ffffff; |
|||
background-color: rgba(255, 255, 255, 0.75); |
|||
/* box-shadow */ |
|||
-webkit-box-shadow: 0 0 1em #ffffff; |
|||
-moz-box-shadow: 0 0 1em #ffffff; |
|||
box-shadow: 0 0 1em #ffffff; |
|||
} |
|||
.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title { |
|||
text-align: center; |
|||
text-transform: uppercase; |
|||
font-size: 1em; |
|||
line-height: 2em; |
|||
padding: 0; |
|||
margin: 0 0 0.3em 0; |
|||
font-weight: bold; |
|||
cursor: default; |
|||
} |
|||
/* Subtitles Button */ |
|||
.vjs-default-skin .vjs-subtitles-button:before { |
|||
content: "\e00c"; |
|||
} |
|||
/* Captions Button */ |
|||
.vjs-default-skin .vjs-captions-button:before { |
|||
content: "\e008"; |
|||
} |
|||
/* Replacement for focus outline */ |
|||
.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before, |
|||
.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before { |
|||
/* box-shadow */ |
|||
-webkit-box-shadow: 0 0 1em #ffffff; |
|||
-moz-box-shadow: 0 0 1em #ffffff; |
|||
box-shadow: 0 0 1em #ffffff; |
|||
} |
|||
/* |
|||
REQUIRED STYLES (be careful overriding) |
|||
================================================================================ |
|||
When loading the player, the video tag is replaced with a DIV, |
|||
that will hold the video tag or object tag for other playback methods. |
|||
The div contains the video playback element (Flash or HTML5) and controls, |
|||
and sets the width and height of the video. |
|||
|
|||
** If you want to add some kind of border/padding (e.g. a frame), or special |
|||
positioning, use another containing element. Otherwise you risk messing up |
|||
control positioning and full window mode. ** |
|||
*/ |
|||
.video-js { |
|||
background-color: #000; |
|||
position: relative; |
|||
padding: 0; |
|||
/* Start with 10px for base font size so other dimensions can be em based and |
|||
easily calculable. */ |
|||
|
|||
font-size: 10px; |
|||
/* Allow poster to be vertially aligned. */ |
|||
|
|||
vertical-align: middle; |
|||
/* display: table-cell; */ |
|||
/*This works in Safari but not Firefox.*/ |
|||
|
|||
/* Provide some basic defaults for fonts */ |
|||
|
|||
font-weight: normal; |
|||
font-style: normal; |
|||
/* Avoiding helvetica: issue #376 */ |
|||
|
|||
font-family: Arial, sans-serif; |
|||
/* Turn off user selection (text highlighting) by default. |
|||
The majority of player components will not be text blocks. |
|||
Text areas will need to turn user selection back on. */ |
|||
|
|||
/* user-select */ |
|||
-webkit-user-select: none; |
|||
-moz-user-select: none; |
|||
-ms-user-select: none; |
|||
user-select: none; |
|||
} |
|||
/* Playback technology elements expand to the width/height of the containing div |
|||
<video> or <object> */ |
|||
.video-js .vjs-tech { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
/* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when |
|||
checking fullScreenEnabled. */ |
|||
.video-js:-moz-full-screen { |
|||
position: absolute; |
|||
} |
|||
/* Fullscreen Styles */ |
|||
body.vjs-full-window { |
|||
padding: 0; |
|||
margin: 0; |
|||
height: 100%; |
|||
/* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */ |
|||
overflow-y: auto; |
|||
} |
|||
.video-js.vjs-fullscreen { |
|||
position: fixed; |
|||
overflow: hidden; |
|||
z-index: 1000; |
|||
left: 0; |
|||
top: 0; |
|||
bottom: 0; |
|||
right: 0; |
|||
width: 100% !important; |
|||
height: 100% !important; |
|||
/* IE6 full-window (underscore hack) */ |
|||
_position: absolute; |
|||
} |
|||
.video-js:-webkit-full-screen { |
|||
width: 100% !important; |
|||
height: 100% !important; |
|||
} |
|||
.video-js.vjs-fullscreen.vjs-user-inactive { |
|||
cursor: none; |
|||
} |
|||
/* Poster Styles */ |
|||
.vjs-poster { |
|||
background-repeat: no-repeat; |
|||
background-position: 50% 50%; |
|||
background-size: contain; |
|||
cursor: pointer; |
|||
height: 100%; |
|||
margin: 0; |
|||
padding: 0; |
|||
position: relative; |
|||
width: 100%; |
|||
} |
|||
.vjs-poster img { |
|||
display: block; |
|||
margin: 0 auto; |
|||
max-height: 100%; |
|||
padding: 0; |
|||
width: 100%; |
|||
} |
|||
/* Hide the poster when native controls are used otherwise it covers them */ |
|||
.video-js.vjs-using-native-controls .vjs-poster { |
|||
display: none; |
|||
} |
|||
/* Text Track Styles */ |
|||
/* Overall track holder for both captions and subtitles */ |
|||
.video-js .vjs-text-track-display { |
|||
text-align: center; |
|||
position: absolute; |
|||
bottom: 4em; |
|||
/* Leave padding on left and right */ |
|||
left: 1em; |
|||
right: 1em; |
|||
} |
|||
/* Individual tracks */ |
|||
.video-js .vjs-text-track { |
|||
display: none; |
|||
font-size: 1.4em; |
|||
text-align: center; |
|||
margin-bottom: 0.1em; |
|||
/* Transparent black background, or fallback to all black (oldIE) */ |
|||
/* background-color-with-alpha */ |
|||
background-color: #000000; |
|||
background-color: rgba(0, 0, 0, 0.5); |
|||
} |
|||
.video-js .vjs-subtitles { |
|||
color: #ffffff /* Subtitles are white */; |
|||
} |
|||
.video-js .vjs-captions { |
|||
color: #ffcc66 /* Captions are yellow */; |
|||
} |
|||
.vjs-tt-cue { |
|||
display: block; |
|||
} |
|||
/* Hide disabled or unsupported controls */ |
|||
.vjs-default-skin .vjs-hidden { |
|||
display: none; |
|||
} |
|||
.vjs-lock-showing { |
|||
display: block !important; |
|||
opacity: 1; |
|||
visibility: visible; |
|||
} |
|||
/* ----------------------------------------------------------------------------- |
|||
The original source of this file lives at |
|||
https://github.com/videojs/video.js/blob/master/src/css/video-js.less */ |
|||
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,129 @@ |
|||
/*! Video.js v4.3.0 Copyright 2013 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */ (function() {var b=void 0,f=!0,h=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function s(a){return function(){return a}}var t;document.createElement("video");document.createElement("audio");document.createElement("track");function u(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(u.xa[a])return u.xa[a];a=u.w(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new u.s(a,c,d)}var v=u; |
|||
window.Td=window.Ud=u;u.Tb="4.3";u.Fc="https:"==document.location.protocol?"https://":"http://";u.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{}},notSupportedMessage:'Sorry, no compatible source and playback technology were found for this video. Try using another browser like <a href="http://bit.ly/ccMUEC">Chrome</a> or download the latest <a href="http://adobe.ly/mwfN1">Adobe Flash Player</a>.'}; |
|||
"GENERATED_CDN_VSN"!==u.Tb&&(v.options.flash.swf=u.Fc+"vjs.zencdn.net/"+u.Tb+"/video-js.swf");u.xa={};u.la=u.CoreObject=m();u.la.extend=function(a){var c,d;a=a||{};c=a.init||a.i||this.prototype.init||this.prototype.i||m();d=function(){c.apply(this,arguments)};d.prototype=u.k.create(this.prototype);d.prototype.constructor=d;d.extend=u.la.extend;d.create=u.la.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d}; |
|||
u.la.create=function(){var a=u.k.create(this.prototype);this.apply(a,arguments);return a};u.d=function(a,c,d){var e=u.getData(a);e.z||(e.z={});e.z[c]||(e.z[c]=[]);d.t||(d.t=u.t++);e.z[c].push(d);e.W||(e.disabled=l,e.W=function(c){if(!e.disabled){c=u.kc(c);var d=e.z[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.pc();k++)d[k].call(a,c)}});1==e.z[c].length&&(document.addEventListener?a.addEventListener(c,e.W,l):document.attachEvent&&a.attachEvent("on"+c,e.W))}; |
|||
u.o=function(a,c,d){if(u.oc(a)){var e=u.getData(a);if(e.z)if(c){var g=e.z[c];if(g){if(d){if(d.t)for(e=0;e<g.length;e++)g[e].t===d.t&&g.splice(e--,1)}else e.z[c]=[];u.gc(a,c)}}else for(g in e.z)c=g,e.z[c]=[],u.gc(a,c)}};u.gc=function(a,c){var d=u.getData(a);0===d.z[c].length&&(delete d.z[c],document.removeEventListener?a.removeEventListener(c,d.W,l):document.detachEvent&&a.detachEvent("on"+c,d.W));u.Bb(d.z)&&(delete d.z,delete d.W,delete d.disabled);u.Bb(d)&&u.vc(a)}; |
|||
u.kc=function(a){function c(){return f}function d(){return l}if(!a||!a.Cb){var e=a||window.event;a={};for(var g in e)"layerX"!==g&&"layerY"!==g&&(a[g]=e[g]);a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.Ab=c};a.Ab=d;a.stopPropagation=function(){e.stopPropagation&&e.stopPropagation();a.cancelBubble=f;a.Cb=c};a.Cb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&& |
|||
e.stopImmediatePropagation();a.pc=c;a.stopPropagation()};a.pc=d;if(a.clientX!=h){g=document.documentElement;var j=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||j&&j.scrollLeft||0)-(g&&g.clientLeft||j&&j.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||j&&j.scrollTop||0)-(g&&g.clientTop||j&&j.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=h&&(a.button=a.button&1?0:a.button&4?1:a.button&2?2:0)}return a}; |
|||
u.j=function(a,c){var d=u.oc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;"string"===typeof c&&(c={type:c,target:a});c=u.kc(c);d.W&&d.W.call(a,c);if(e&&!c.Cb()&&c.bubbles!==l)u.j(e,c);else if(!e&&!c.Ab()&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if("function"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.Ab()};u.U=function(a,c,d){function e(){u.o(a,c,e);d.apply(this,arguments)}e.t=d.t=d.t||u.t++;u.d(a,c,e)};var w=Object.prototype.hasOwnProperty; |
|||
u.e=function(a,c){var d,e;d=document.createElement(a||"div");for(e in c)w.call(c,e)&&(-1!==e.indexOf("aria-")||"role"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.$=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.k={};u.k.create=Object.create||function(a){function c(){}c.prototype=a;return new c};u.k.ua=function(a,c,d){for(var e in a)w.call(a,e)&&c.call(d||this,e,a[e])};u.k.B=function(a,c){if(!c)return a;for(var d in c)w.call(c,d)&&(a[d]=c[d]);return a}; |
|||
u.k.ic=function(a,c){var d,e,g;a=u.k.copy(a);for(d in c)w.call(c,d)&&(e=a[d],g=c[d],a[d]=u.k.qc(e)&&u.k.qc(g)?u.k.ic(e,g):c[d]);return a};u.k.copy=function(a){return u.k.B({},a)};u.k.qc=function(a){return!!a&&"object"===typeof a&&"[object Object]"===a.toString()&&a.constructor===Object};u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.t||(c.t=u.t++);e.t=d?d+"_"+c.t:c.t;return e};u.ra={};u.t=1;u.expando="vdata"+(new Date).getTime(); |
|||
u.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.t++,u.ra[c]={});return u.ra[c]};u.oc=function(a){a=a[u.expando];return!(!a||u.Bb(u.ra[a]))};u.vc=function(a){var c=a[u.expando];if(c){delete u.ra[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=h}}};u.Bb=function(a){for(var c in a)if(a[c]!==h)return l;return f};u.n=function(a,c){-1==(" "+a.className+" ").indexOf(" "+c+" ")&&(a.className=""===a.className?c:a.className+" "+c)}; |
|||
u.u=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(" ");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(" ")}};u.na=u.e("video");u.F=navigator.userAgent;u.Mc=/iPhone/i.test(u.F);u.Lc=/iPad/i.test(u.F);u.Nc=/iPod/i.test(u.F);u.Kc=u.Mc||u.Lc||u.Nc;var aa=u,x;var y=u.F.match(/OS (\d+)_/i);x=y&&y[1]?y[1]:b;aa.Fd=x;u.Ic=/Android/i.test(u.F);var ba=u,z;var A=u.F.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),B,C; |
|||
A?(B=A[1]&&parseFloat(A[1]),C=A[2]&&parseFloat(A[2]),z=B&&C?parseFloat(A[1]+"."+A[2]):B?B:h):z=h;ba.Gc=z;u.Oc=u.Ic&&/webkit/i.test(u.F)&&2.3>u.Gc;u.Jc=/Firefox/i.test(u.F);u.Gd=/Chrome/i.test(u.F);u.ac=!!("ontouchstart"in window||window.Hc&&document instanceof window.Hc); |
|||
u.xb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var j=d.length-1;0<=j;j--){e=d[j].name;g=d[j].value;if("boolean"===typeof a[e]||-1!==",autoplay,controls,loop,muted,default,".indexOf(","+e+","))g=g!==h?f:l;c[e]=g}}return c}; |
|||
u.Kd=function(a,c){var d="";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,"").getPropertyValue(c):a.currentStyle&&(d=a["client"+c.substr(0,1).toUpperCase()+c.substr(1)]+"px");return d};u.zb=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Pb={};u.w=function(a){0===a.indexOf("#")&&(a=a.slice(1));return document.getElementById(a)}; |
|||
u.La=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),j=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d="-";g=0<g||0<k?g+":":"";return g+(((g||10<=j)&&10>e?"0"+e:e)+":")+(10>d?"0"+d:d)};u.Tc=function(){document.body.focus();document.onselectstart=s(l)};u.Bd=function(){document.onselectstart=s(f)};u.trim=function(a){return(a+"").replace(/^\s+|\s+$/g,"")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)}; |
|||
u.tb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}}; |
|||
u.get=function(a,c,d){var e,g;"undefined"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");});g=new XMLHttpRequest;try{g.open("GET",a)}catch(j){d(j)}e=0===a.indexOf("file:")||0===window.location.href.indexOf("file:")&&-1===a.indexOf("http"); |
|||
g.onreadystatechange=function(){4===g.readyState&&(200===g.status||e&&0===g.status?c(g.responseText):d&&d())};try{g.send()}catch(k){d&&d(k)}};u.td=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log("LocalStorage Full (VideoJS)",d):18==d.code?u.log("LocalStorage not allowed (VideoJS)",d):u.log("LocalStorage Error (VideoJS)",d)}};u.mc=function(a){a.match(/^https?:\/\//)||(a=u.e("div",{innerHTML:'<a href="'+a+'">x</a>'}).firstChild.href);return a}; |
|||
u.log=function(){u.log.history=u.log.history||[];u.log.history.push(arguments);window.console&&window.console.log(Array.prototype.slice.call(arguments))};u.ad=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0),top:c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0)}}; |
|||
u.c=u.la.extend({i:function(a,c,d){this.b=a;this.g=u.k.copy(this.g);c=this.options(c);this.Q=c.id||(c.el&&c.el.id?c.el.id:a.id()+"_component_"+u.t++);this.gd=c.name||h;this.a=c.el||this.e();this.G=[];this.qb={};this.V={};if((a=this.g)&&a.children){var e=this;u.k.ua(a.children,function(a,c){c!==l&&!c.loadEvent&&(e[a]=e.Z(a,c))})}this.L(d)}});t=u.c.prototype; |
|||
t.D=function(){this.j("dispose");if(this.G)for(var a=this.G.length-1;0<=a;a--)this.G[a].D&&this.G[a].D();this.V=this.qb=this.G=h;this.o();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.vc(this.a);this.a=h};t.b=f;t.K=p("b");t.options=function(a){return a===b?this.g:this.g=u.k.ic(this.g,a)};t.e=function(a,c){return u.e(a,c)};t.w=p("a");t.id=p("Q");t.name=p("gd");t.children=p("G"); |
|||
t.Z=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||u.$(e),c.name=e,d=new window.videojs[d](this.b||this,c)):d=a;this.G.push(d);"function"===typeof d.id&&(this.qb[d.id()]=d);(e=e||d.name&&d.name())&&(this.V[e]=d);"function"===typeof d.el&&d.el()&&(this.sa||this.a).appendChild(d.el());return d}; |
|||
t.removeChild=function(a){"string"===typeof a&&(a=this.V[a]);if(a&&this.G){for(var c=l,d=this.G.length-1;0<=d;d--)if(this.G[d]===a){c=f;this.G.splice(d,1);break}c&&(this.qb[a.id]=h,this.V[a.name]=h,(c=a.w())&&c.parentNode===(this.sa||this.a)&&(this.sa||this.a).removeChild(a.w()))}};t.T=s("");t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};t.o=function(a,c){u.o(this.a,a,c);return this};t.U=function(a,c){u.U(this.a,a,u.bind(this,c));return this};t.j=function(a,c){u.j(this.a,a,c);return this}; |
|||
t.L=function(a){a&&(this.aa?a.call(this):(this.Sa===b&&(this.Sa=[]),this.Sa.push(a)));return this};t.Ua=function(){this.aa=f;var a=this.Sa;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Sa=[];this.j("ready")}};t.n=function(a){u.n(this.a,a);return this};t.u=function(a){u.u(this.a,a);return this};t.show=function(){this.a.style.display="block";return this};t.C=function(){this.a.style.display="none";return this};function D(a){a.u("vjs-lock-showing")} |
|||
t.disable=function(){this.C();this.show=m()};t.width=function(a,c){return E(this,"width",a,c)};t.height=function(a,c){return E(this,"height",a,c)};t.Xc=function(a,c){return this.width(a,f).height(c)};function E(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(""+d).indexOf("%")||-1!==(""+d).indexOf("px")?d:"auto"===d?"":d+"px",e||a.j("resize"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a["offset"+u.$(c)],10)} |
|||
u.q=u.c.extend({i:function(a,c){u.c.call(this,a,c);var d=l;this.d("touchstart",function(a){a.preventDefault();d=f});this.d("touchmove",function(){d=l});var e=this;this.d("touchend",function(a){d&&e.p(a);a.preventDefault()});this.d("click",this.p);this.d("focus",this.Oa);this.d("blur",this.Na)}});t=u.q.prototype; |
|||
t.e=function(a,c){c=u.k.B({className:this.T(),innerHTML:'<div class="vjs-control-content"><span class="vjs-control-text">'+(this.qa||"Need Text")+"</span></div>",qd:"button","aria-live":"polite",tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.T=function(){return"vjs-control "+u.c.prototype.T.call(this)};t.p=m();t.Oa=function(){u.d(document,"keyup",u.bind(this,this.ba))};t.ba=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.p()}; |
|||
t.Na=function(){u.o(document,"keyup",u.bind(this,this.ba))};u.O=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Sc=this.V[this.g.barName];this.handle=this.V[this.g.handleName];a.d(this.tc,u.bind(this,this.update));this.d("mousedown",this.Pa);this.d("touchstart",this.Pa);this.d("focus",this.Oa);this.d("blur",this.Na);this.d("click",this.p);this.b.d("controlsvisible",u.bind(this,this.update));a.L(u.bind(this,this.update));this.P={}}});t=u.O.prototype; |
|||
t.e=function(a,c){c=c||{};c.className+=" vjs-slider";c=u.k.B({qd:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.Pa=function(a){a.preventDefault();u.Tc();this.P.move=u.bind(this,this.Hb);this.P.end=u.bind(this,this.Ib);u.d(document,"mousemove",this.P.move);u.d(document,"mouseup",this.P.end);u.d(document,"touchmove",this.P.move);u.d(document,"touchend",this.P.end);this.Hb(a)}; |
|||
t.Ib=function(){u.Bd();u.o(document,"mousemove",this.P.move,l);u.o(document,"mouseup",this.P.end,l);u.o(document,"touchmove",this.P.move,l);u.o(document,"touchend",this.P.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.yb(),d=this.handle,e=this.Sc;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.w().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.w().style.left=u.round(100*c,2)+"%"}e.w().style.width=u.round(100*a,2)+"%"}}; |
|||
function F(a,c){var d,e,g,j;d=a.a;e=u.ad(d);j=g=d.offsetWidth;d=a.handle;if(a.g.Cd)return j=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.w().offsetHeight,j+=d/2,g-=d),Math.max(0,Math.min(1,(j-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.w().offsetWidth,g+=d/2,j-=d);return Math.max(0,Math.min(1,(e-g)/j))}t.Oa=function(){u.d(document,"keyup",u.bind(this,this.ba))}; |
|||
t.ba=function(a){37==a.which?(a.preventDefault(),this.yc()):39==a.which&&(a.preventDefault(),this.zc())};t.Na=function(){u.o(document,"keyup",u.bind(this,this.ba))};t.p=function(a){a.stopImmediatePropagation();a.preventDefault()};u.ea=u.c.extend();u.ea.prototype.defaultValue=0;u.ea.prototype.e=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=u.k.B({innerHTML:'<span class="vjs-control-text">'+this.defaultValue+"</span>"},c);return u.c.prototype.e.call(this,"div",c)};u.ma=u.c.extend(); |
|||
function ca(a,c){a.Z(c);c.d("click",u.bind(a,function(){D(this)}))}u.ma.prototype.e=function(){var a=this.options().Vc||"ul";this.sa=u.e(a,{className:"vjs-menu-content"});a=u.c.prototype.e.call(this,"div",{append:this.sa,className:"vjs-menu"});a.appendChild(this.sa);u.d(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.N=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.selected(c.selected)}}); |
|||
u.N.prototype.e=function(a,c){return u.q.prototype.e.call(this,"li",u.k.B({className:"vjs-menu-item",innerHTML:this.g.label},c))};u.N.prototype.p=function(){this.selected(f)};u.N.prototype.selected=function(a){a?(this.n("vjs-selected"),this.a.setAttribute("aria-selected",f)):(this.u("vjs-selected"),this.a.setAttribute("aria-selected",l))}; |
|||
u.R=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.wa=this.Ka();this.Z(this.wa);this.I&&0===this.I.length&&this.C();this.d("keyup",this.ba);this.a.setAttribute("aria-haspopup",f);this.a.setAttribute("role","button")}});t=u.R.prototype;t.pa=l;t.Ka=function(){var a=new u.ma(this.b);this.options().title&&a.w().appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.$(this.A),zd:-1}));if(this.I=this.createItems())for(var c=0;c<this.I.length;c++)ca(a,this.I[c]);return a};t.ta=m(); |
|||
t.T=function(){return this.className+" vjs-menu-button "+u.q.prototype.T.call(this)};t.Oa=m();t.Na=m();t.p=function(){this.U("mouseout",u.bind(this,function(){D(this.wa);this.a.blur()}));this.pa?G(this):H(this)};t.ba=function(a){a.preventDefault();32==a.which||13==a.which?this.pa?G(this):H(this):27==a.which&&this.pa&&G(this)};function H(a){a.pa=f;a.wa.n("vjs-lock-showing");a.a.setAttribute("aria-pressed",f);a.I&&0<a.I.length&&a.I[0].w().focus()} |
|||
function G(a){a.pa=l;D(a.wa);a.a.setAttribute("aria-pressed",l)} |
|||
u.s=u.c.extend({i:function(a,c,d){this.M=a;c=u.k.B(da(a),c);this.v={};this.uc=c.poster;this.sb=c.controls;a.controls=l;u.c.call(this,this,c,d);this.controls()?this.n("vjs-controls-enabled"):this.n("vjs-controls-disabled");this.U("play",function(a){u.j(this.a,{type:"firstplay",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())});this.d("ended",this.hd);this.d("play",this.Kb);this.d("firstplay",this.jd);this.d("pause",this.Jb);this.d("progress",this.ld);this.d("durationchange", |
|||
this.sc);this.d("error",this.Gb);this.d("fullscreenchange",this.kd);u.xa[this.Q]=this;c.plugins&&u.k.ua(c.plugins,function(a,c){this[a](c)},this);var e,g,j,k;e=this.Mb;a=function(){e();clearInterval(g);g=setInterval(u.bind(this,e),250)};c=function(){e();clearInterval(g)};this.d("mousedown",a);this.d("mousemove",e);this.d("mouseup",c);this.d("keydown",e);this.d("keyup",e);this.d("touchstart",a);this.d("touchmove",e);this.d("touchend",c);this.d("touchcancel",c);j=setInterval(u.bind(this,function(){this.ka&& |
|||
(this.ka=l,this.ja(f),clearTimeout(k),k=setTimeout(u.bind(this,function(){this.ka||this.ja(l)}),2E3))}),250);this.d("dispose",function(){clearInterval(j);clearTimeout(k)})}});t=u.s.prototype;t.g=u.options;t.D=function(){this.j("dispose");this.o("dispose");u.xa[this.Q]=h;this.M&&this.M.player&&(this.M.player=h);this.a&&this.a.player&&(this.a.player=h);clearInterval(this.Ra);this.za();this.h&&this.h.D();u.c.prototype.D.call(this)}; |
|||
function da(a){var c={sources:[],tracks:[]};u.k.B(c,u.xb(a));if(a.hasChildNodes()){var d,e,g,j;a=a.childNodes;g=0;for(j=a.length;g<j;g++)d=a[g],e=d.nodeName.toLowerCase(),"source"===e?c.sources.push(u.xb(d)):"track"===e&&c.tracks.push(u.xb(d))}return c} |
|||
t.e=function(){var a=this.a=u.c.prototype.e.call(this,"div"),c=this.M;c.removeAttribute("width");c.removeAttribute("height");if(c.hasChildNodes()){var d,e,g,j,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],j=g.nodeName.toLowerCase(),"track"===j&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}c.id=c.id||"vjs_video_"+u.t++;a.id=c.id;a.className=c.className;c.id+="_html5_api";c.className="vjs-tech";c.player=a.player=this;this.n("vjs-paused");this.width(this.g.width,f);this.height(this.g.height, |
|||
f);c.parentNode&&c.parentNode.insertBefore(a,c);u.zb(c,a);return a}; |
|||
function I(a,c,d){a.h?(a.aa=l,a.h.D(),a.Eb&&(a.Eb=l,clearInterval(a.Ra)),a.Fb&&J(a),a.h=l):"Html5"!==c&&a.M&&(u.l.jc(a.M),a.M=h);a.ia=c;a.aa=l;var e=u.k.B({source:d,parentEl:a.a},a.g[c.toLowerCase()]);d&&(d.src==a.v.src&&0<a.v.currentTime&&(e.startTime=a.v.currentTime),a.v.src=d.src);a.h=new window.videojs[c](a,e);a.h.L(function(){this.b.Ua();if(!this.m.progressEvents){var a=this.b;a.Eb=f;a.Ra=setInterval(u.bind(a,function(){this.v.lb<this.buffered().end(0)?this.j("progress"):1==this.Ja()&&(clearInterval(this.Ra), |
|||
this.j("progress"))}),500);a.h.U("progress",function(){this.m.progressEvents=f;var a=this.b;a.Eb=l;clearInterval(a.Ra)})}this.m.timeupdateEvents||(a=this.b,a.Fb=f,a.d("play",a.Cc),a.d("pause",a.za),a.h.U("timeupdate",function(){this.m.timeupdateEvents=f;J(this.b)}))})}function J(a){a.Fb=l;a.za();a.o("play",a.Cc);a.o("pause",a.za)}t.Cc=function(){this.hc&&this.za();this.hc=setInterval(u.bind(this,function(){this.j("timeupdate")}),250)};t.za=function(){clearInterval(this.hc)}; |
|||
t.Kb=function(){u.u(this.a,"vjs-paused");u.n(this.a,"vjs-playing")};t.jd=function(){this.g.starttime&&this.currentTime(this.g.starttime);this.n("vjs-has-started")};t.Jb=function(){u.u(this.a,"vjs-playing");u.n(this.a,"vjs-paused")};t.ld=function(){1==this.Ja()&&this.j("loadedalldata")};t.hd=function(){this.g.loop&&(this.currentTime(0),this.play())};t.sc=function(){this.duration(K(this,"duration"))};t.kd=function(){this.H?this.n("vjs-fullscreen"):this.u("vjs-fullscreen")}; |
|||
t.Gb=function(a){u.log("Video Error",a)};function L(a,c,d){if(a.h&&!a.h.aa)a.h.L(function(){this[c](d)});else try{a.h[c](d)}catch(e){throw u.log(e),e;}}function K(a,c){if(a.h&&a.h.aa)try{return a.h[c]()}catch(d){throw a.h[c]===b?u.log("Video.js: "+c+" method not defined for "+a.ia+" playback technology.",d):"TypeError"==d.name?(u.log("Video.js: "+c+" unavailable on "+a.ia+" playback technology element.",d),a.h.aa=l):u.log(d),d;}}t.play=function(){L(this,"play");return this}; |
|||
t.pause=function(){L(this,"pause");return this};t.paused=function(){return K(this,"paused")===l?l:f};t.currentTime=function(a){return a!==b?(this.v.rc=a,L(this,"setCurrentTime",a),this.Fb&&this.j("timeupdate"),this):this.v.currentTime=K(this,"currentTime")||0};t.duration=function(a){if(a!==b)return this.v.duration=parseFloat(a),this;this.v.duration===b&&this.sc();return this.v.duration}; |
|||
t.buffered=function(){var a=K(this,"buffered"),c=a.length-1,d=this.v.lb=this.v.lb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.v.lb=d);return u.tb(0,d)};t.Ja=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.v.volume=a,L(this,"setVolume",a),u.td(a),this;a=parseFloat(K(this,"volume"));return isNaN(a)?1:a};t.muted=function(a){return a!==b?(L(this,"setMuted",a),this):K(this,"muted")||l}; |
|||
t.Ta=function(){return K(this,"supportsFullScreen")||l}; |
|||
t.ya=function(){var a=u.Pb.ya;this.H=f;a?(u.d(document,a.vb,u.bind(this,function(c){this.H=document[a.H];this.H===l&&u.o(document,a.vb,arguments.callee);this.j("fullscreenchange")})),this.a[a.wc]()):this.h.Ta()?L(this,"enterFullScreen"):(this.cd=f,this.Yc=document.documentElement.style.overflow,u.d(document,"keydown",u.bind(this,this.lc)),document.documentElement.style.overflow="hidden",u.n(document.body,"vjs-full-window"),this.j("enterFullWindow"),this.j("fullscreenchange"));return this}; |
|||
t.ob=function(){var a=u.Pb.ya;this.H=l;if(a)document[a.nb]();else this.h.Ta()?L(this,"exitFullScreen"):(M(this),this.j("fullscreenchange"));return this};t.lc=function(a){27===a.keyCode&&(this.H===f?this.ob():M(this))};function M(a){a.cd=l;u.o(document,"keydown",a.lc);document.documentElement.style.overflow=a.Yc;u.u(document.body,"vjs-full-window");a.j("exitFullWindow")} |
|||
t.src=function(a){if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.g.techOrder;d<e.length;d++){var g=u.$(e[d]),j=window.videojs[g];if(j.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(j.canPlaySource(n)){c={source:n,h:g};break a}}}c=l}c?(a=c.source,c=c.h,c==this.ia?this.src(a):I(this,c,a)):this.a.appendChild(u.e("p",{innerHTML:this.options().notSupportedMessage}))}else a instanceof Object?window.videojs[this.ia].canPlaySource(a)?this.src(a.src):this.src([a]):(this.v.src=a,this.aa? |
|||
(L(this,"src",a),"auto"==this.g.preload&&this.load(),this.g.autoplay&&this.play()):this.L(function(){this.src(a)}));return this};t.load=function(){L(this,"load");return this};t.currentSrc=function(){return K(this,"currentSrc")||this.v.src||""};t.Qa=function(a){return a!==b?(L(this,"setPreload",a),this.g.preload=a,this):K(this,"preload")};t.autoplay=function(a){return a!==b?(L(this,"setAutoplay",a),this.g.autoplay=a,this):K(this,"autoplay")}; |
|||
t.loop=function(a){return a!==b?(L(this,"setLoop",a),this.g.loop=a,this):K(this,"loop")};t.poster=function(a){return a!==b?(this.uc=a,this):this.uc};t.controls=function(a){return a!==b?(a=!!a,this.sb!==a&&((this.sb=a)?(this.u("vjs-controls-disabled"),this.n("vjs-controls-enabled"),this.j("controlsenabled")):(this.u("vjs-controls-enabled"),this.n("vjs-controls-disabled"),this.j("controlsdisabled"))),this):this.sb};u.s.prototype.Sb;t=u.s.prototype; |
|||
t.Rb=function(a){return a!==b?(a=!!a,this.Sb!==a&&((this.Sb=a)?(this.n("vjs-using-native-controls"),this.j("usingnativecontrols")):(this.u("vjs-using-native-controls"),this.j("usingcustomcontrols"))),this):this.Sb};t.error=function(){return K(this,"error")};t.seeking=function(){return K(this,"seeking")};t.ka=f;t.Mb=function(){this.ka=f};t.Qb=f; |
|||
t.ja=function(a){return a!==b?(a=!!a,a!==this.Qb&&((this.Qb=a)?(this.ka=f,this.u("vjs-user-inactive"),this.n("vjs-user-active"),this.j("useractive")):(this.ka=l,this.h.U("mousemove",function(a){a.stopPropagation();a.preventDefault()}),this.u("vjs-user-active"),this.n("vjs-user-inactive"),this.j("userinactive"))),this):this.Qb};var N,O,P;P=document.createElement("div");O={}; |
|||
P.Hd!==b?(O.wc="requestFullscreen",O.nb="exitFullscreen",O.vb="fullscreenchange",O.H="fullScreen"):(document.mozCancelFullScreen?(N="moz",O.H=N+"FullScreen"):(N="webkit",O.H=N+"IsFullScreen"),P[N+"RequestFullScreen"]&&(O.wc=N+"RequestFullScreen",O.nb=N+"CancelFullScreen"),O.vb=N+"fullscreenchange");document[O.nb]&&(u.Pb.ya=O);u.Fa=u.c.extend(); |
|||
u.Fa.prototype.g={Md:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{}}};u.Fa.prototype.e=function(){return u.e("div",{className:"vjs-control-bar"})};u.Yb=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d("play",u.bind(this,this.Kb));a.d("pause",u.bind(this,this.Jb))}});t=u.Yb.prototype;t.qa="Play";t.T=function(){return"vjs-play-control "+u.q.prototype.T.call(this)}; |
|||
t.p=function(){this.b.paused()?this.b.play():this.b.pause()};t.Kb=function(){u.u(this.a,"vjs-paused");u.n(this.a,"vjs-playing");this.a.children[0].children[0].innerHTML="Pause"};t.Jb=function(){u.u(this.a,"vjs-playing");u.n(this.a,"vjs-paused");this.a.children[0].children[0].innerHTML="Play"};u.Ya=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d("timeupdate",u.bind(this,this.Ca))}}); |
|||
u.Ya.prototype.e=function(){var a=u.c.prototype.e.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.content=u.e("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00',"aria-live":"off"});a.appendChild(u.e("div").appendChild(this.content));return a}; |
|||
u.Ya.prototype.Ca=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.content.innerHTML='<span class="vjs-control-text">Current Time </span>'+u.La(a,this.b.duration())};u.Za=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d("timeupdate",u.bind(this,this.Ca))}}); |
|||
u.Za.prototype.e=function(){var a=u.c.prototype.e.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.content=u.e("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">Duration Time </span>0:00',"aria-live":"off"});a.appendChild(u.e("div").appendChild(this.content));return a};u.Za.prototype.Ca=function(){var a=this.b.duration();a&&(this.content.innerHTML='<span class="vjs-control-text">Duration Time </span>'+u.La(a))}; |
|||
u.cc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.cc.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-time-divider",innerHTML:"<div><span>/</span></div>"})};u.fb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d("timeupdate",u.bind(this,this.Ca))}}); |
|||
u.fb.prototype.e=function(){var a=u.c.prototype.e.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.content=u.e("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">Remaining Time </span>-0:00',"aria-live":"off"});a.appendChild(u.e("div").appendChild(this.content));return a};u.fb.prototype.Ca=function(){this.b.duration()&&(this.content.innerHTML='<span class="vjs-control-text">Remaining Time </span>-'+u.La(this.b.duration()-this.b.currentTime()))}; |
|||
u.Ga=u.q.extend({i:function(a,c){u.q.call(this,a,c)}});u.Ga.prototype.qa="Fullscreen";u.Ga.prototype.T=function(){return"vjs-fullscreen-control "+u.q.prototype.T.call(this)};u.Ga.prototype.p=function(){this.b.H?(this.b.ob(),this.a.children[0].children[0].innerHTML="Fullscreen"):(this.b.ya(),this.a.children[0].children[0].innerHTML="Non-Fullscreen")};u.eb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.eb.prototype.g={children:{seekBar:{}}}; |
|||
u.eb.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-progress-control vjs-control"})};u.Zb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d("timeupdate",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba))}});t=u.Zb.prototype;t.g={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};t.tc="timeupdate";t.e=function(){return u.O.prototype.e.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})}; |
|||
t.Ba=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.a.setAttribute("aria-valuenow",u.round(100*this.yb(),2));this.a.setAttribute("aria-valuetext",u.La(a,this.b.duration()))};t.yb=function(){var a;"Flash"===this.b.ia&&this.b.seeking()?(a=this.b.v,a=a.rc?a.rc:this.b.currentTime()):a=this.b.currentTime();return a/this.b.duration()};t.Pa=function(a){u.O.prototype.Pa.call(this,a);this.b.Nb=f;this.Dd=!this.b.paused();this.b.pause()}; |
|||
t.Hb=function(a){a=F(this,a)*this.b.duration();a==this.b.duration()&&(a-=0.1);this.b.currentTime(a)};t.Ib=function(a){u.O.prototype.Ib.call(this,a);this.b.Nb=l;this.Dd&&this.b.play()};t.zc=function(){this.b.currentTime(this.b.currentTime()+5)};t.yc=function(){this.b.currentTime(this.b.currentTime()-5)};u.ab=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d("progress",u.bind(this,this.update))}});u.ab.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text">Loaded: 0%</span>'})}; |
|||
u.ab.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.b.Ja(),2)+"%")};u.Xb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.Xb.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-play-progress",innerHTML:'<span class="vjs-control-text">Progress: 0%</span>'})};u.gb=u.ea.extend();u.gb.prototype.defaultValue="00:00";u.gb.prototype.e=function(){return u.ea.prototype.e.call(this,"div",{className:"vjs-seek-handle"})}; |
|||
u.ib=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n("vjs-hidden"):this.u("vjs-hidden")}))}});u.ib.prototype.g={children:{volumeBar:{}}};u.ib.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-volume-control vjs-control"})}; |
|||
u.hb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d("volumechange",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba));setTimeout(u.bind(this,this.update),0)}});t=u.hb.prototype;t.Ba=function(){this.a.setAttribute("aria-valuenow",u.round(100*this.b.volume(),2));this.a.setAttribute("aria-valuetext",u.round(100*this.b.volume(),2)+"%")};t.g={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};t.tc="volumechange"; |
|||
t.e=function(){return u.O.prototype.e.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};t.Hb=function(a){this.b.muted()&&this.b.muted(l);this.b.volume(F(this,a))};t.yb=function(){return this.b.muted()?0:this.b.volume()};t.zc=function(){this.b.volume(this.b.volume()+0.1)};t.yc=function(){this.b.volume(this.b.volume()-0.1)};u.dc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}}); |
|||
u.dc.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})};u.jb=u.ea.extend();u.jb.prototype.defaultValue="00:00";u.jb.prototype.e=function(){return u.ea.prototype.e.call(this,"div",{className:"vjs-volume-handle"})}; |
|||
u.da=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n("vjs-hidden"):this.u("vjs-hidden")}))}});u.da.prototype.e=function(){return u.q.prototype.e.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})}; |
|||
u.da.prototype.p=function(){this.b.muted(this.b.muted()?l:f)};u.da.prototype.update=function(){var a=this.b.volume(),c=3;0===a||this.b.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.b.muted()?"Unmute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Unmute"):"Mute"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML="Mute");for(a=0;4>a;a++)u.u(this.a,"vjs-vol-"+a);u.n(this.a,"vjs-vol-"+c)}; |
|||
u.oa=u.R.extend({i:function(a,c){u.R.call(this,a,c);a.d("volumechange",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.Dc===l)&&this.n("vjs-hidden");a.d("loadstart",u.bind(this,function(){a.h.m&&a.h.m.Dc===l?this.n("vjs-hidden"):this.u("vjs-hidden")}));this.n("vjs-menu-button")}});u.oa.prototype.Ka=function(){var a=new u.ma(this.b,{Vc:"div"}),c=new u.hb(this.b,u.k.B({Cd:f},this.g.Vd));a.Z(c);return a};u.oa.prototype.p=function(){u.da.prototype.p.call(this);u.R.prototype.p.call(this)}; |
|||
u.oa.prototype.e=function(){return u.q.prototype.e.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'<div><span class="vjs-control-text">Mute</span></div>'})};u.oa.prototype.update=u.da.prototype.update;u.cb=u.q.extend({i:function(a,c){u.q.call(this,a,c);(!a.poster()||!a.controls())&&this.C();a.d("play",u.bind(this,this.C))}}); |
|||
u.cb.prototype.e=function(){var a=u.e("div",{className:"vjs-poster",tabIndex:-1}),c=this.b.poster();c&&("backgroundSize"in a.style?a.style.backgroundImage='url("'+c+'")':a.appendChild(u.e("img",{src:c})));return a};u.cb.prototype.p=function(){this.K().controls()&&this.b.play()}; |
|||
u.Wb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d("canplay",u.bind(this,this.C));a.d("canplaythrough",u.bind(this,this.C));a.d("playing",u.bind(this,this.C));a.d("seeked",u.bind(this,this.C));a.d("seeking",u.bind(this,this.show));a.d("seeked",u.bind(this,this.C));a.d("error",u.bind(this,this.show));a.d("waiting",u.bind(this,this.show))}});u.Wb.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-loading-spinner"})};u.Wa=u.q.extend(); |
|||
u.Wa.prototype.e=function(){return u.q.prototype.e.call(this,"div",{className:"vjs-big-play-button",innerHTML:'<span aria-hidden="true"></span>',"aria-label":"play video"})};u.Wa.prototype.p=function(){this.b.play()}; |
|||
u.r=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);var e,g;g=this;e=this.K();a=function(){if(e.controls()&&!e.Rb()){var a,c;g.d("mousedown",g.p);g.d("touchstart",function(a){a.preventDefault();a.stopPropagation();c=this.b.ja()});a=function(a){a.stopPropagation();c&&this.b.Mb()};g.d("touchmove",a);g.d("touchleave",a);g.d("touchcancel",a);g.d("touchend",a);var d,n,r;d=0;g.d("touchstart",function(){d=(new Date).getTime();r=f});a=function(){r=l};g.d("touchmove",a);g.d("touchleave",a);g.d("touchcancel", |
|||
a);g.d("touchend",function(){r===f&&(n=(new Date).getTime()-d,250>n&&this.j("tap"))});g.d("tap",g.md)}};c=u.bind(g,g.pd);this.L(a);e.d("controlsenabled",a);e.d("controlsdisabled",c)}});u.r.prototype.pd=function(){this.o("tap");this.o("touchstart");this.o("touchmove");this.o("touchleave");this.o("touchcancel");this.o("touchend");this.o("click");this.o("mousedown")};u.r.prototype.p=function(a){0===a.button&&this.K().controls()&&(this.K().paused()?this.K().play():this.K().pause())}; |
|||
u.r.prototype.md=function(){this.K().ja(!this.K().ja())};u.r.prototype.m={volumeControl:f,fullscreenResize:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.Va="play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted".split(" "); |
|||
function ea(){var a=u.media.Va[i];return function(){throw Error('The "'+a+"\" method is not available on the playback technology's API");}}for(var i=u.media.Va.length-1;0<=i;i--)u.r.prototype[u.media.Va[i]]=ea(); |
|||
u.l=u.r.extend({i:function(a,c,d){this.m.volumeControl=u.l.Uc();this.m.movingMediaElementInDOM=!u.Kc;this.m.fullscreenResize=f;u.r.call(this,a,c,d);(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.j("loadstart"):c&&(this.a.src=c.src);if(u.ac&&a.options().nativeControlsForTouch!==l){var e,g,j,k;e=this;g=this.K();c=g.controls();e.a.controls=!!c;j=function(){e.a.controls=f};k=function(){e.a.controls=l};g.d("controlsenabled",j);g.d("controlsdisabled",k);c=function(){g.o("controlsenabled", |
|||
j);g.o("controlsdisabled",k)};e.d("dispose",c);g.d("usingcustomcontrols",c);g.Rb(f)}a.L(function(){this.M&&(this.g.autoplay&&this.paused())&&(delete this.M.poster,this.play())});for(a=u.l.$a.length-1;0<=a;a--)u.d(this.a,u.l.$a[a],u.bind(this.b,this.$c));this.Ua()}});t=u.l.prototype;t.D=function(){u.r.prototype.D.call(this)}; |
|||
t.e=function(){var a=this.b,c=a.M,d;if(!c||this.m.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.l.jc(c),c=d,a.M=h):c=u.e("video",{id:a.id()+"_html5_api",className:"vjs-tech"}),c.player=a,u.zb(c,a.w());d=["autoplay","preload","loop","muted"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.g[g]!==h&&(c[g]=a.g[g])}return c};t.$c=function(a){this.j(a);a.stopPropagation()};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};t.currentTime=function(){return this.a.currentTime}; |
|||
t.sd=function(a){try{this.a.currentTime=a}catch(c){u.log(c,"Video is not ready. (Video.js)")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.xd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.vd=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight}; |
|||
t.Ta=function(){return"function"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.F)||!/Chrome|Mac OS X 10.5/.test(u.F))?f:l};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.Qa=function(){return this.a.Qa};t.wd=function(a){this.a.Qa=a};t.autoplay=function(){return this.a.autoplay};t.rd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop}; |
|||
t.ud=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};u.l.isSupported=function(){return!!u.na.canPlayType};u.l.mb=function(a){try{return!!u.na.canPlayType(a.type)}catch(c){return""}};u.l.Uc=function(){var a=u.na.volume;u.na.volume=a/2+0.1;return a!==u.na.volume};u.l.$a="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" "); |
|||
u.l.jc=function(a){if(a){a.player=h;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src");"function"===typeof a.load&&a.load()}};u.Oc&&(document.createElement("video").constructor.prototype.canPlayType=function(a){return a&&-1!=a.toLowerCase().indexOf("video/mp4")?"maybe":""}); |
|||
u.f=u.r.extend({i:function(a,c,d){u.r.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e("div",{id:a.id()+"_temp_flash"}),j=a.id()+"_flash_api";a=a.g;var k=u.k.B({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.Qa,loop:a.loop,muted:a.muted},c.flashVars),q=u.k.B({wmode:"opaque",bgcolor:"#000000"},c.params),n=u.k.B({id:j,name:j,"class":"vjs-tech"},c.attributes);e&&(e.type&&u.f.ed(e.type)? |
|||
(a=u.f.Ac(e.src),k.rtmpConnection=encodeURIComponent(a.rb),k.rtmpStream=encodeURIComponent(a.Ob)):k.src=encodeURIComponent(u.mc(e.src)));u.zb(g,d);c.startTime&&this.L(function(){this.load();this.play();this.currentTime(c.startTime)});if(c.iFrameMode===f&&!u.Jc){var r=u.e("iframe",{id:j+"_iframe",name:j+"_iframe",className:"vjs-tech",scrolling:"no",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction="ready";k.eventProxyFunction="events";k.errorEventProxyFunction="errors";u.d(r,"load",u.bind(this, |
|||
function(){var a,d=r.contentWindow;a=r.contentDocument?r.contentDocument:r.contentWindow.document;a.write(u.f.nc(c.swf,k,q,n));d.player=this.b;d.ready=u.bind(this.b,function(c){var d=this.h;d.a=a.getElementById(c);u.f.pb(d)});d.events=u.bind(this.b,function(a,c){this&&"flash"===this.ia&&this.j(c)});d.errors=u.bind(this.b,function(a,c){u.log("Flash Error",c)})}));g.parentNode.replaceChild(r,g)}else u.f.Zc(c.swf,g,k,q,n)}});t=u.f.prototype;t.D=function(){u.r.prototype.D.call(this)};t.play=function(){this.a.vjs_play()}; |
|||
t.pause=function(){this.a.vjs_pause()};t.src=function(a){u.f.dd(a)?(a=u.f.Ac(a),this.Qd(a.rb),this.Rd(a.Ob)):(a=u.mc(a),this.a.vjs_src(a));if(this.b.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty("currentSrc");if(a==h){var c=this.Od(),d=this.Pd();c&&d&&(a=u.f.yd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty("poster")};t.buffered=function(){return u.tb(0,this.a.vjs_getProperty("buffered"))}; |
|||
t.Ta=s(l);var Q=u.f.prototype,R="rtmpConnection rtmpStream preload currentTime defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),S="error currentSrc networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks".split(" "); |
|||
function fa(){var a=R[T],c=a.charAt(0).toUpperCase()+a.slice(1);Q["set"+c]=function(c){return this.a.vjs_setProperty(a,c)}}function U(a){Q[a]=function(){return this.a.vjs_getProperty(a)}}var T;for(T=0;T<R.length;T++)U(R[T]),fa();for(T=0;T<S.length;T++)U(S[T]);u.f.isSupported=function(){return 10<=u.f.version()[0]};u.f.mb=function(a){if(!a.type)return"";a=a.type.replace(/;.*/,"").toLowerCase();if(a in u.f.bd||a in u.f.Bc)return"maybe"}; |
|||
u.f.bd={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"};u.f.Bc={"rtmp/mp4":"MP4","rtmp/flv":"FLV"};u.f.onReady=function(a){a=u.w(a);var c=a.player||a.parentNode.player,d=c.h;a.player=c;d.a=a;u.f.pb(d)};u.f.pb=function(a){a.w().vjs_getProperty?a.Ua():setTimeout(function(){u.f.pb(a)},50)};u.f.onEvent=function(a,c){u.w(a).player.j(c)};u.f.onError=function(a,c){u.w(a).player.j("error");u.log("Flash Error",c,a)}; |
|||
u.f.version=function(){var a="0,0,0";try{a=(new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(",")}; |
|||
u.f.Zc=function(a,c,d,e,g){a=u.f.nc(a,d,e,g);a=u.e("div",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var j=d.childNodes[0];setTimeout(function(){j.style.display="block"},1E3)}; |
|||
u.f.nc=function(a,c,d,e){var g="",j="",k="";c&&u.k.ua(c,function(a,c){g+=a+"="+c+"&"});d=u.k.B({movie:a,flashvars:g,allowScriptAccess:"always",allowNetworking:"all"},d);u.k.ua(d,function(a,c){j+='<param name="'+a+'" value="'+c+'" />'});e=u.k.B({data:a,width:"100%",height:"100%"},e);u.k.ua(e,function(a,c){k+=a+'="'+c+'" '});return'<object type="application/x-shockwave-flash"'+k+">"+j+"</object>"};u.f.yd=function(a,c){return a+"&"+c}; |
|||
u.f.Ac=function(a){var c={rb:"",Ob:""};if(!a)return c;var d=a.indexOf("&"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf("/")+1,0===d&&(d=e=a.length));c.rb=a.substring(0,d);c.Ob=a.substring(e,a.length);return c};u.f.ed=function(a){return a in u.f.Bc};u.f.Qc=/^rtmp[set]?:\/\//i;u.f.dd=function(a){return u.f.Qc.test(a)}; |
|||
u.Pc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(!a.g.sources||0===a.g.sources.length){c=0;for(d=a.g.techOrder;c<d.length;c++){var e=u.$(d[c]),g=window.videojs[e];if(g&&g.isSupported()){I(a,e);break}}}else a.src(a.g.sources)}});function V(a){a.Aa=a.Aa||[];return a.Aa}function W(a,c,d){for(var e=a.Aa,g=0,j=e.length,k,q;g<j;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.J()==d&&0<k.mode())&&k.disable();(c=q?q.J():d?d:l)&&a.j(c+"trackchange")} |
|||
u.X=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Q=c.id||"vjs_"+c.kind+"_"+c.language+"_"+u.t++;this.xc=c.src;this.Wc=c["default"]||c.dflt;this.Ad=c.title;this.Ld=c.srclang;this.fd=c.label;this.fa=[];this.ec=[];this.ga=this.ha=0;this.b.d("fullscreenchange",u.bind(this,this.Rc))}});t=u.X.prototype;t.J=p("A");t.src=p("xc");t.ub=p("Wc");t.title=p("Ad");t.label=p("fd");t.readyState=p("ha");t.mode=p("ga");t.Rc=function(){this.a.style.fontSize=this.b.H?140*(screen.width/this.b.width())+"%":""}; |
|||
t.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-"+this.A+" vjs-text-track"})};t.show=function(){X(this);this.ga=2;u.c.prototype.show.call(this)};t.C=function(){X(this);this.ga=1;u.c.prototype.C.call(this)};t.disable=function(){2==this.ga&&this.C();this.b.o("timeupdate",u.bind(this,this.update,this.Q));this.b.o("ended",u.bind(this,this.reset,this.Q));this.reset();this.b.V.textTrackDisplay.removeChild(this);this.ga=0}; |
|||
function X(a){0===a.ha&&a.load();0===a.ga&&(a.b.d("timeupdate",u.bind(a,a.update,a.Q)),a.b.d("ended",u.bind(a,a.reset,a.Q)),("captions"===a.A||"subtitles"===a.A)&&a.b.V.textTrackDisplay.Z(a))}t.load=function(){0===this.ha&&(this.ha=1,u.get(this.xc,u.bind(this,this.nd),u.bind(this,this.Gb)))};t.Gb=function(a){this.error=a;this.ha=3;this.j("error")}; |
|||
t.nd=function(a){var c,d;a=a.split("\n");for(var e="",g=1,j=a.length;g<j;g++)if(e=u.trim(a[g])){-1==e.indexOf("--\x3e")?(c=e,e=u.trim(a[++g])):c=this.fa.length;c={id:c,index:this.fa.length};d=e.split(" --\x3e ");c.startTime=Y(d[0]);c.va=Y(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join("<br/>");this.fa.push(c)}this.ha=2;this.j("loaded")}; |
|||
function Y(a){var c=a.split(":");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\s+/);c=c.splice(0,1)[0];c=c.split(/\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a} |
|||
t.update=function(){if(0<this.fa.length){var a=this.b.currentTime();if(this.Lb===b||a<this.Lb||this.Ma<=a){var c=this.fa,d=this.b.duration(),e=0,g=l,j=[],k,q,n,r;a>=this.Ma||this.Ma===b?r=this.wb!==b?this.wb:0:(g=f,r=this.Db!==b?this.Db:c.length-1);for(;;){n=c[r];if(n.va<=a)e=Math.max(e,n.va),n.Ia&&(n.Ia=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ia&&(n.Ia=l),!g)break}else g?(j.splice(0,0,n),q===b&&(q=r),k=r):(j.push(n),k===b&&(k=r),q=r),d=Math.min(d,n.va),e=Math.max(e,n.startTime), |
|||
n.Ia=f;if(g)if(0===r)break;else r--;else if(r===c.length-1)break;else r++}this.ec=j;this.Ma=d;this.Lb=e;this.wb=k;this.Db=q;a=this.ec;c="";d=0;for(e=a.length;d<e;d++)c+='<span class="vjs-tt-cue">'+a[d].text+"</span>";this.a.innerHTML=c;this.j("cuechange")}}};t.reset=function(){this.Ma=0;this.Lb=this.b.duration();this.Db=this.wb=0};u.Ub=u.X.extend();u.Ub.prototype.A="captions";u.$b=u.X.extend();u.$b.prototype.A="subtitles";u.Vb=u.X.extend();u.Vb.prototype.A="chapters"; |
|||
u.bc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(a.g.tracks&&0<a.g.tracks.length){c=this.b;a=a.g.tracks;var e;for(d=0;d<a.length;d++){e=a[d];var g=c,j=e.kind,k=e.label,q=e.language,n=e;e=g.Aa=g.Aa||[];n=n||{};n.kind=j;n.label=k;n.language=q;j=u.$(j||"subtitles");g=new window.videojs[j+"Track"](g,n);e.push(g)}}}});u.bc.prototype.e=function(){return u.c.prototype.e.call(this,"div",{className:"vjs-text-track-display"})}; |
|||
u.Y=u.N.extend({i:function(a,c){var d=this.ca=c.track;c.label=d.label();c.selected=d.ub();u.N.call(this,a,c);this.b.d(d.J()+"trackchange",u.bind(this,this.update))}});u.Y.prototype.p=function(){u.N.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.Y.prototype.update=function(){this.selected(2==this.ca.mode())};u.bb=u.Y.extend({i:function(a,c){c.track={J:function(){return c.kind},K:a,label:function(){return c.kind+" off"},ub:s(l),mode:s(l)};u.Y.call(this,a,c);this.selected(f)}}); |
|||
u.bb.prototype.p=function(){u.Y.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.bb.prototype.update=function(){for(var a=V(this.b),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.J()==this.ca.J()&&2==e.mode()&&(g=l);this.selected(g)};u.S=u.R.extend({i:function(a,c){u.R.call(this,a,c);1>=this.I.length&&this.C()}});u.S.prototype.ta=function(){var a=[],c;a.push(new u.bb(this.b,{kind:this.A}));for(var d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a}; |
|||
u.Da=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute("aria-label","Captions Menu")}});u.Da.prototype.A="captions";u.Da.prototype.qa="Captions";u.Da.prototype.className="vjs-captions-button";u.Ha=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute("aria-label","Subtitles Menu")}});u.Ha.prototype.A="subtitles";u.Ha.prototype.qa="Subtitles";u.Ha.prototype.className="vjs-subtitles-button"; |
|||
u.Ea=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute("aria-label","Chapters Menu")}});t=u.Ea.prototype;t.A="chapters";t.qa="Chapters";t.className="vjs-chapters-button";t.ta=function(){for(var a=[],c,d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a}; |
|||
t.Ka=function(){for(var a=V(this.b),c=0,d=a.length,e,g,j=this.I=[];c<d;c++)if(e=a[c],e.J()==this.A&&e.ub()){if(2>e.readyState()){this.Id=e;e.d("loaded",u.bind(this,this.Ka));return}g=e;break}a=this.wa=new u.ma(this.b);a.a.appendChild(u.e("li",{className:"vjs-menu-title",innerHTML:u.$(this.A),zd:-1}));if(g){e=g.fa;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.Xa(this.b,{track:g,cue:k}),j.push(k),a.Z(k)}0<this.I.length&&this.show();return a}; |
|||
u.Xa=u.N.extend({i:function(a,c){var d=this.ca=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.va;u.N.call(this,a,c);d.d("cuechange",u.bind(this,this.update))}});u.Xa.prototype.p=function(){u.N.prototype.p.call(this);this.b.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.Xa.prototype.update=function(){var a=this.cue,c=this.b.currentTime();this.selected(a.startTime<=c&&c<a.va)}; |
|||
u.k.B(u.Fa.prototype.g.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}}); |
|||
if("undefined"!==typeof window.JSON&&"function"===window.JSON.parse)u.JSON=window.JSON;else{u.JSON={};var Z=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;u.JSON.parse=function(a,c){function d(a,e){var k,q,n=a[e];if(n&&"object"===typeof n)for(k in n)Object.prototype.hasOwnProperty.call(n,k)&&(q=d(n,k),q!==b?n[k]=q:delete n[k]);return c.call(a,e,n)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})); |
|||
if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof c?d({"":e},""):e;throw new SyntaxError("JSON.parse(): invalid or malformed JSON data");}} |
|||
u.fc=function(){var a,c,d=document.getElementsByTagName("video");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute("data-setup"),a!==h&&(a=u.JSON.parse(a||"{}"),v(c,a)));else{u.kb();break}else u.Ec||u.kb()};u.kb=function(){setTimeout(u.fc,1)};"complete"===document.readyState?u.Ec=f:u.U(window,"load",function(){u.Ec=f});u.kb();u.od=function(a,c){u.s.prototype[a]=c};var ga=this;ga.Ed=f;function $(a,c){var d=a.split("."),e=ga;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$("videojs",u);$("_V_",u);$("videojs.options",u.options);$("videojs.players",u.xa);$("videojs.TOUCH_ENABLED",u.ac);$("videojs.cache",u.ra);$("videojs.Component",u.c);u.c.prototype.player=u.c.prototype.K;u.c.prototype.dispose=u.c.prototype.D;u.c.prototype.createEl=u.c.prototype.e;u.c.prototype.el=u.c.prototype.w;u.c.prototype.addChild=u.c.prototype.Z;u.c.prototype.children=u.c.prototype.children;u.c.prototype.on=u.c.prototype.d;u.c.prototype.off=u.c.prototype.o;u.c.prototype.one=u.c.prototype.U; |
|||
u.c.prototype.trigger=u.c.prototype.j;u.c.prototype.triggerReady=u.c.prototype.Ua;u.c.prototype.show=u.c.prototype.show;u.c.prototype.hide=u.c.prototype.C;u.c.prototype.width=u.c.prototype.width;u.c.prototype.height=u.c.prototype.height;u.c.prototype.dimensions=u.c.prototype.Xc;u.c.prototype.ready=u.c.prototype.L;u.c.prototype.addClass=u.c.prototype.n;u.c.prototype.removeClass=u.c.prototype.u;$("videojs.Player",u.s);u.s.prototype.dispose=u.s.prototype.D;u.s.prototype.requestFullScreen=u.s.prototype.ya; |
|||
u.s.prototype.cancelFullScreen=u.s.prototype.ob;u.s.prototype.bufferedPercent=u.s.prototype.Ja;u.s.prototype.usingNativeControls=u.s.prototype.Rb;u.s.prototype.reportUserActivity=u.s.prototype.Mb;u.s.prototype.userActive=u.s.prototype.ja;$("videojs.MediaLoader",u.Pc);$("videojs.TextTrackDisplay",u.bc);$("videojs.ControlBar",u.Fa);$("videojs.Button",u.q);$("videojs.PlayToggle",u.Yb);$("videojs.FullscreenToggle",u.Ga);$("videojs.BigPlayButton",u.Wa);$("videojs.LoadingSpinner",u.Wb); |
|||
$("videojs.CurrentTimeDisplay",u.Ya);$("videojs.DurationDisplay",u.Za);$("videojs.TimeDivider",u.cc);$("videojs.RemainingTimeDisplay",u.fb);$("videojs.Slider",u.O);$("videojs.ProgressControl",u.eb);$("videojs.SeekBar",u.Zb);$("videojs.LoadProgressBar",u.ab);$("videojs.PlayProgressBar",u.Xb);$("videojs.SeekHandle",u.gb);$("videojs.VolumeControl",u.ib);$("videojs.VolumeBar",u.hb);$("videojs.VolumeLevel",u.dc);$("videojs.VolumeMenuButton",u.oa);$("videojs.VolumeHandle",u.jb);$("videojs.MuteToggle",u.da); |
|||
$("videojs.PosterImage",u.cb);$("videojs.Menu",u.ma);$("videojs.MenuItem",u.N);$("videojs.MenuButton",u.R);u.R.prototype.createItems=u.R.prototype.ta;u.S.prototype.createItems=u.S.prototype.ta;u.Ea.prototype.createItems=u.Ea.prototype.ta;$("videojs.SubtitlesButton",u.Ha);$("videojs.CaptionsButton",u.Da);$("videojs.ChaptersButton",u.Ea);$("videojs.MediaTechController",u.r);u.r.prototype.features=u.r.prototype.m;u.r.prototype.m.volumeControl=u.r.prototype.m.Dc;u.r.prototype.m.fullscreenResize=u.r.prototype.m.Jd; |
|||
u.r.prototype.m.progressEvents=u.r.prototype.m.Nd;u.r.prototype.m.timeupdateEvents=u.r.prototype.m.Sd;$("videojs.Html5",u.l);u.l.Events=u.l.$a;u.l.isSupported=u.l.isSupported;u.l.canPlaySource=u.l.mb;u.l.prototype.setCurrentTime=u.l.prototype.sd;u.l.prototype.setVolume=u.l.prototype.xd;u.l.prototype.setMuted=u.l.prototype.vd;u.l.prototype.setPreload=u.l.prototype.wd;u.l.prototype.setAutoplay=u.l.prototype.rd;u.l.prototype.setLoop=u.l.prototype.ud;$("videojs.Flash",u.f);u.f.isSupported=u.f.isSupported; |
|||
u.f.canPlaySource=u.f.mb;u.f.onReady=u.f.onReady;$("videojs.TextTrack",u.X);u.X.prototype.label=u.X.prototype.label;$("videojs.CaptionsTrack",u.Ub);$("videojs.SubtitlesTrack",u.$b);$("videojs.ChaptersTrack",u.Vb);$("videojs.autoSetup",u.fc);$("videojs.plugin",u.od);$("videojs.createTimeRange",u.tb);})(); |
|||
Binary file not shown.
@ -0,0 +1,28 @@ |
|||
.webuploader-container { |
|||
position: relative; |
|||
} |
|||
.webuploader-element-invisible { |
|||
position: absolute !important; |
|||
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ |
|||
clip: rect(1px,1px,1px,1px); |
|||
} |
|||
.webuploader-pick { |
|||
position: relative; |
|||
display: inline-block; |
|||
cursor: pointer; |
|||
background: #00b7ee; |
|||
padding: 10px 15px; |
|||
color: #fff; |
|||
text-align: center; |
|||
border-radius: 3px; |
|||
overflow: hidden; |
|||
} |
|||
.webuploader-pick-hover { |
|||
background: #00a2d4; |
|||
} |
|||
|
|||
.webuploader-pick-disable { |
|||
opacity: 0.6; |
|||
pointer-events:none; |
|||
} |
|||
|
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -0,0 +1,497 @@ |
|||
/** |
|||
* ueditor完整配置项 |
|||
* 可以在这里配置整个编辑器的特性 |
|||
*/ |
|||
/**************************提示******************************** |
|||
* 所有被注释的配置项均为UEditor默认值。 |
|||
* 修改默认配置请首先确保已经完全明确该参数的真实用途。 |
|||
* 主要有两种修改方案,一种是取消此处注释,然后修改成对应参数;另一种是在实例化编辑器时传入对应参数。 |
|||
* 当升级编辑器时,可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。 |
|||
**************************提示********************************/ |
|||
|
|||
(function () { |
|||
|
|||
/** |
|||
* 编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。 |
|||
* 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。 |
|||
* "相对于网站根目录的相对路径"也就是以斜杠开头的形如"/myProject/ueditor/"这样的路径。 |
|||
* 如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,此处的URL可能不适用于每个页面的编辑器。 |
|||
* 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。 |
|||
* window.UEDITOR_HOME_URL = "/xxxx/xxxx/"; |
|||
*/ |
|||
var URL = window.UEDITOR_HOME_URL || getUEBasePath(); |
|||
|
|||
/** |
|||
* 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。 |
|||
*/ |
|||
window.UEDITOR_CONFIG = { |
|||
|
|||
//为编辑器实例添加一个路径,这个不能被注释
|
|||
UEDITOR_HOME_URL: URL |
|||
|
|||
// 服务器统一请求接口路径
|
|||
// , serverUrl: URL + "php/controller.php"
|
|||
|
|||
//工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
|
|||
, toolbars: [[ |
|||
'fullscreen', 'source', '|', 'undo', 'redo', '|', |
|||
'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', |
|||
'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', |
|||
'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', |
|||
'directionalityltr', 'directionalityrtl', 'indent', '|', |
|||
'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|', |
|||
'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', |
|||
'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|', |
|||
'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|', |
|||
'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|', |
|||
'print', 'preview', 'searchreplace', 'drafts', 'help' |
|||
]] |
|||
//当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准
|
|||
//,labelMap:{
|
|||
// 'anchor':'', 'undo':''
|
|||
//}
|
|||
|
|||
//语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换,当然,前提条件是lang文件夹下存在对应的语言文件:
|
|||
//lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()
|
|||
//,lang:"zh-cn"
|
|||
//,langPath:URL +"lang/"
|
|||
|
|||
//主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换,当然,前提条件是themes文件夹下存在对应的主题文件:
|
|||
//现有如下皮肤:default
|
|||
//,theme:'default'
|
|||
//,themePath:URL +"themes/"
|
|||
|
|||
//,zIndex : 900 //编辑器层级的基数,默认是900
|
|||
|
|||
//针对getAllHtml方法,会在对应的head标签中增加该编码设置。
|
|||
//,charset:"utf-8"
|
|||
|
|||
//若实例化编辑器的页面手动修改的domain,此处需要设置为true
|
|||
//,customDomain:false
|
|||
|
|||
//常用配置项目
|
|||
//,isShow : true //默认显示编辑器
|
|||
|
|||
//,textarea:'editorValue' // 提交表单时,服务器获取编辑器提交内容的所用的参数,多实例时可以给容器name属性,会将name给定的值最为每个实例的键值,不用每次实例化的时候都设置这个值
|
|||
|
|||
//,initialContent:'欢迎使用ueditor!' //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子
|
|||
|
|||
//,autoClearinitialContent:true //是否自动清除编辑器初始内容,注意:如果focus属性设置为true,这个也为真,那么编辑器一上来就会触发导致初始化的内容看不到了
|
|||
|
|||
//,focus:false //初始化时,是否让编辑器获得焦点true或false
|
|||
|
|||
//如果自定义,最好给p标签如下的行高,要不输入中文时,会有跳动感
|
|||
//,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等
|
|||
|
|||
//,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件
|
|||
|
|||
//indentValue
|
|||
//首行缩进距离,默认是2em
|
|||
//,indentValue:'2em'
|
|||
|
|||
//,initialFrameWidth:1000 //初始化编辑器宽度,默认1000
|
|||
//,initialFrameHeight:320 //初始化编辑器高度,默认320
|
|||
|
|||
//,readonly : false //编辑器初始化结束后,编辑区域是否是只读的,默认是false
|
|||
|
|||
//,autoClearEmptyNode : true //getContent时,是否删除空的inlineElement节点(包括嵌套的情况)
|
|||
|
|||
//启用自动保存
|
|||
,enableAutoSave: false |
|||
//自动保存间隔时间, 单位ms
|
|||
//,saveInterval: 500
|
|||
|
|||
//,fullscreen : false //是否开启初始化时即全屏,默认关闭
|
|||
|
|||
//,imagePopup:true //图片操作的浮层开关,默认打开
|
|||
|
|||
//,autoSyncData:true //自动同步编辑器要提交的数据
|
|||
//,emotionLocalization:false //是否开启表情本地化,默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹
|
|||
|
|||
//粘贴只保留标签,去除标签所有属性
|
|||
//,retainOnlyLabelPasted: false
|
|||
|
|||
//,pasteplain:false //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴
|
|||
//纯文本粘贴模式下的过滤规则
|
|||
//'filterTxtRules' : function(){
|
|||
// function transP(node){
|
|||
// node.tagName = 'p';
|
|||
// node.setStyle();
|
|||
// }
|
|||
// return {
|
|||
// //直接删除及其字节点内容
|
|||
// '-' : 'script style object iframe embed input select',
|
|||
// 'p': {$:{}},
|
|||
// 'br':{$:{}},
|
|||
// 'div':{'$':{}},
|
|||
// 'li':{'$':{}},
|
|||
// 'caption':transP,
|
|||
// 'th':transP,
|
|||
// 'tr':transP,
|
|||
// 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,
|
|||
// 'td':function(node){
|
|||
// //没有内容的td直接删掉
|
|||
// var txt = !!node.innerText();
|
|||
// if(txt){
|
|||
// node.parentNode.insertAfter(UE.uNode.createText(' '),node);
|
|||
// }
|
|||
// node.parentNode.removeChild(node,node.innerText())
|
|||
// }
|
|||
// }
|
|||
//}()
|
|||
|
|||
//,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串
|
|||
|
|||
//insertorderedlist
|
|||
//有序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准
|
|||
//,'insertorderedlist':{
|
|||
// //自定的样式
|
|||
// 'num':'1,2,3...',
|
|||
// 'num1':'1),2),3)...',
|
|||
// 'num2':'(1),(2),(3)...',
|
|||
// 'cn':'一,二,三....',
|
|||
// 'cn1':'一),二),三)....',
|
|||
// 'cn2':'(一),(二),(三)....',
|
|||
// //系统自带
|
|||
// 'decimal' : '' , //'1,2,3...'
|
|||
// 'lower-alpha' : '' , // 'a,b,c...'
|
|||
// 'lower-roman' : '' , //'i,ii,iii...'
|
|||
// 'upper-alpha' : '' , lang //'A,B,C'
|
|||
// 'upper-roman' : '' //'I,II,III...'
|
|||
//}
|
|||
|
|||
//insertunorderedlist
|
|||
//无序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准
|
|||
//,insertunorderedlist : { //自定的样式
|
|||
// 'dash' :'— 破折号', //-破折号
|
|||
// 'dot':' 。 小圆圈', //系统自带
|
|||
// 'circle' : '', // '○ 小圆圈'
|
|||
// 'disc' : '', // '● 小圆点'
|
|||
// 'square' : '' //'■ 小方块'
|
|||
//}
|
|||
//,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍
|
|||
//,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径
|
|||
//,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制
|
|||
|
|||
//,autoTransWordToList:false //禁止word中粘贴进来的列表自动变成列表标签
|
|||
|
|||
//fontfamily
|
|||
//字体设置 label留空支持多语言自动切换,若配置,则以配置值为准
|
|||
//,'fontfamily':[
|
|||
// { label:'',name:'songti',val:'宋体,SimSun'},
|
|||
// { label:'',name:'kaiti',val:'楷体,楷体_GB2312, SimKai'},
|
|||
// { label:'',name:'yahei',val:'微软雅黑,Microsoft YaHei'},
|
|||
// { label:'',name:'heiti',val:'黑体, SimHei'},
|
|||
// { label:'',name:'lishu',val:'隶书, SimLi'},
|
|||
// { label:'',name:'andaleMono',val:'andale mono'},
|
|||
// { label:'',name:'arial',val:'arial, helvetica,sans-serif'},
|
|||
// { label:'',name:'arialBlack',val:'arial black,avant garde'},
|
|||
// { label:'',name:'comicSansMs',val:'comic sans ms'},
|
|||
// { label:'',name:'impact',val:'impact,chicago'},
|
|||
// { label:'',name:'timesNewRoman',val:'times new roman'}
|
|||
//]
|
|||
|
|||
//fontsize
|
|||
//字号
|
|||
//,'fontsize':[10, 11, 12, 14, 16, 18, 20, 24, 36]
|
|||
|
|||
//paragraph
|
|||
//段落格式 值留空时支持多语言自动识别,若配置,则以配置值为准
|
|||
//,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}
|
|||
|
|||
//rowspacingtop
|
|||
//段间距 值和显示的名字相同
|
|||
//,'rowspacingtop':['5', '10', '15', '20', '25']
|
|||
|
|||
//rowspacingBottom
|
|||
//段间距 值和显示的名字相同
|
|||
//,'rowspacingbottom':['5', '10', '15', '20', '25']
|
|||
|
|||
//lineheight
|
|||
//行内间距 值和显示的名字相同
|
|||
//,'lineheight':['1', '1.5','1.75','2', '3', '4', '5']
|
|||
|
|||
//customstyle
|
|||
//自定义样式,不支持国际化,此处配置值即可最后显示值
|
|||
//block的元素是依据设置段落的逻辑设置的,inline的元素依据BIU的逻辑设置
|
|||
//尽量使用一些常用的标签
|
|||
//参数说明
|
|||
//tag 使用的标签名字
|
|||
//label 显示的名字也是用来标识不同类型的标识符,注意这个值每个要不同,
|
|||
//style 添加的样式
|
|||
//每一个对象就是一个自定义的样式
|
|||
//,'customstyle':[
|
|||
// {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},
|
|||
// {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'},
|
|||
// {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'},
|
|||
// {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'}
|
|||
//]
|
|||
|
|||
//打开右键菜单功能
|
|||
//,enableContextMenu: true
|
|||
//右键菜单的内容,可以参考plugins/contextmenu.js里边的默认菜单的例子,label留空支持国际化,否则以此配置为准
|
|||
//,contextMenu:[
|
|||
// {
|
|||
// label:'', //显示的名称
|
|||
// cmdName:'selectall',//执行的command命令,当点击这个右键菜单时
|
|||
// //exec可选,有了exec就会在点击时执行这个function,优先级高于cmdName
|
|||
// exec:function () {
|
|||
// //this是当前编辑器的实例
|
|||
// //this.ui._dialogs['inserttableDialog'].open();
|
|||
// }
|
|||
// }
|
|||
//]
|
|||
|
|||
//快捷菜单
|
|||
//,shortcutMenu:["fontfamily", "fontsize", "bold", "italic", "underline", "forecolor", "backcolor", "insertorderedlist", "insertunorderedlist"]
|
|||
|
|||
//elementPathEnabled
|
|||
//是否启用元素路径,默认是显示
|
|||
//,elementPathEnabled : true
|
|||
|
|||
//wordCount
|
|||
//,wordCount:true //是否开启字数统计
|
|||
//,maximumWords:10000 //允许的最大字符数
|
|||
//字数统计提示,{#count}代表当前字数,{#leave}代表还可以输入多少字符数,留空支持多语言自动切换,否则按此配置显示
|
|||
//,wordCountMsg:'' //当前已输入 {#count} 个字符,您还可以输入{#leave} 个字符
|
|||
//超出字数限制提示 留空支持多语言自动切换,否则按此配置显示
|
|||
//,wordOverFlowMsg:'' //<span style="color:red;">你输入的字符个数已经超出最大允许值,服务器可能会拒绝保存!</span>
|
|||
|
|||
//tab
|
|||
//点击tab键时移动的距离,tabSize倍数,tabNode什么字符做为单位
|
|||
//,tabSize:4
|
|||
//,tabNode:' '
|
|||
|
|||
//removeFormat
|
|||
//清除格式时可以删除的标签和属性
|
|||
//removeForamtTags标签
|
|||
//,removeFormatTags:'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'
|
|||
//removeFormatAttributes属性
|
|||
//,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign'
|
|||
|
|||
//undo
|
|||
//可以最多回退的次数,默认20
|
|||
//,maxUndoCount:20
|
|||
//当输入的字符数超过该值时,保存一次现场
|
|||
//,maxInputCount:1
|
|||
|
|||
//autoHeightEnabled
|
|||
// 是否自动长高,默认true
|
|||
//,autoHeightEnabled:true
|
|||
|
|||
//scaleEnabled
|
|||
//是否可以拉伸长高,默认true(当开启时,自动长高失效)
|
|||
//,scaleEnabled:false
|
|||
//,minFrameWidth:800 //编辑器拖动时最小宽度,默认800
|
|||
//,minFrameHeight:220 //编辑器拖动时最小高度,默认220
|
|||
|
|||
//autoFloatEnabled
|
|||
//是否保持toolbar的位置不动,默认true
|
|||
//,autoFloatEnabled:true
|
|||
//浮动时工具栏距离浏览器顶部的高度,用于某些具有固定头部的页面
|
|||
//,topOffset:30
|
|||
//编辑器底部距离工具栏高度(如果参数大于等于编辑器高度,则设置无效)
|
|||
//,toolbarTopOffset:400
|
|||
|
|||
//设置远程图片是否抓取到本地保存
|
|||
//,catchRemoteImageEnable: true //设置是否抓取远程图片
|
|||
|
|||
//pageBreakTag
|
|||
//分页标识符,默认是_ueditor_page_break_tag_
|
|||
//,pageBreakTag:'_ueditor_page_break_tag_'
|
|||
|
|||
//autotypeset
|
|||
//自动排版参数
|
|||
//,autotypeset: {
|
|||
// mergeEmptyline: true, //合并空行
|
|||
// removeClass: true, //去掉冗余的class
|
|||
// removeEmptyline: false, //去掉空行
|
|||
// textAlign:"left", //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版
|
|||
// imageBlockLine: 'center', //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版
|
|||
// pasteFilter: false, //根据规则过滤没事粘贴进来的内容
|
|||
// clearFontSize: false, //去掉所有的内嵌字号,使用编辑器默认的字号
|
|||
// clearFontFamily: false, //去掉所有的内嵌字体,使用编辑器默认的字体
|
|||
// removeEmptyNode: false, // 去掉空节点
|
|||
// //可以去掉的标签
|
|||
// removeTagNames: {标签名字:1},
|
|||
// indent: false, // 行首缩进
|
|||
// indentValue : '2em', //行首缩进的大小
|
|||
// bdc2sb: false,
|
|||
// tobdc: false
|
|||
//}
|
|||
|
|||
//tableDragable
|
|||
//表格是否可以拖拽
|
|||
//,tableDragable: true
|
|||
|
|||
|
|||
|
|||
//sourceEditor
|
|||
//源码的查看方式,codemirror 是代码高亮,textarea是文本框,默认是codemirror
|
|||
//注意默认codemirror只能在ie8+和非ie中使用
|
|||
//,sourceEditor:"codemirror"
|
|||
//如果sourceEditor是codemirror,还用配置一下两个参数
|
|||
//codeMirrorJsUrl js加载的路径,默认是 URL + "third-party/codemirror/codemirror.js"
|
|||
//,codeMirrorJsUrl:URL + "third-party/codemirror/codemirror.js"
|
|||
//codeMirrorCssUrl css加载的路径,默认是 URL + "third-party/codemirror/codemirror.css"
|
|||
//,codeMirrorCssUrl:URL + "third-party/codemirror/codemirror.css"
|
|||
//编辑器初始化完成后是否进入源码模式,默认为否。
|
|||
//,sourceEditorFirst:false
|
|||
|
|||
//iframeUrlMap
|
|||
//dialog内容的路径 ~会被替换成URL,垓属性一旦打开,将覆盖所有的dialog的默认路径
|
|||
//,iframeUrlMap:{
|
|||
// 'anchor':'~/dialogs/anchor/anchor.html',
|
|||
//}
|
|||
|
|||
//allowLinkProtocol 允许的链接地址,有这些前缀的链接地址不会自动添加http
|
|||
//, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:']
|
|||
|
|||
//webAppKey 百度应用的APIkey,每个站长必须首先去百度官网注册一个key后方能正常使用app功能,注册介绍,http://app.baidu.com/static/cms/getapikey.html
|
|||
//, webAppKey: ""
|
|||
|
|||
//默认过滤规则相关配置项目
|
|||
//,disabledTableInTable:true //禁止表格嵌套
|
|||
//,allowDivTransToP:true //允许进入编辑器的div标签自动变成p标签
|
|||
//,rgb2Hex:true //默认产出的数据中的color自动从rgb格式变成16进制格式
|
|||
|
|||
// xss 过滤是否开启,inserthtml等操作
|
|||
,xssFilterRules: true |
|||
//input xss过滤
|
|||
,inputXssFilter: true |
|||
//output xss过滤
|
|||
,outputXssFilter: true |
|||
// xss过滤白名单 名单来源: https://raw.githubusercontent.com/leizongmin/js-xss/master/lib/default.js
|
|||
,whiteList: { |
|||
a: ['target', 'href', 'title', 'class', 'style'], |
|||
abbr: ['title', 'class', 'style'], |
|||
address: ['class', 'style'], |
|||
area: ['shape', 'coords', 'href', 'alt'], |
|||
article: [], |
|||
aside: [], |
|||
audio: ['autoplay', 'controls', 'loop', 'preload', 'src', 'class', 'style'], |
|||
b: ['class', 'style'], |
|||
bdi: ['dir'], |
|||
bdo: ['dir'], |
|||
big: [], |
|||
blockquote: ['cite', 'class', 'style'], |
|||
br: [], |
|||
caption: ['class', 'style'], |
|||
center: [], |
|||
cite: [], |
|||
code: ['class', 'style'], |
|||
col: ['align', 'valign', 'span', 'width', 'class', 'style'], |
|||
colgroup: ['align', 'valign', 'span', 'width', 'class', 'style'], |
|||
dd: ['class', 'style'], |
|||
del: ['datetime'], |
|||
details: ['open'], |
|||
div: ['class', 'style'], |
|||
dl: ['class', 'style'], |
|||
dt: ['class', 'style'], |
|||
em: ['class', 'style'], |
|||
font: ['color', 'size', 'face'], |
|||
footer: [], |
|||
h1: ['class', 'style'], |
|||
h2: ['class', 'style'], |
|||
h3: ['class', 'style'], |
|||
h4: ['class', 'style'], |
|||
h5: ['class', 'style'], |
|||
h6: ['class', 'style'], |
|||
header: [], |
|||
hr: [], |
|||
i: ['class', 'style'], |
|||
img: ['src', 'alt', 'title', 'width', 'height', 'id', '_src', 'loadingclass', 'class', 'data-latex'], |
|||
ins: ['datetime'], |
|||
li: ['class', 'style'], |
|||
mark: [], |
|||
nav: [], |
|||
ol: ['class', 'style'], |
|||
p: ['class', 'style'], |
|||
pre: ['class', 'style'], |
|||
s: [], |
|||
section:[], |
|||
small: [], |
|||
span: ['class', 'style'], |
|||
sub: ['class', 'style'], |
|||
sup: ['class', 'style'], |
|||
strong: ['class', 'style'], |
|||
table: ['width', 'border', 'align', 'valign', 'class', 'style'], |
|||
tbody: ['align', 'valign', 'class', 'style'], |
|||
td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'], |
|||
tfoot: ['align', 'valign', 'class', 'style'], |
|||
th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'], |
|||
thead: ['align', 'valign', 'class', 'style'], |
|||
tr: ['rowspan', 'align', 'valign', 'class', 'style'], |
|||
tt: [], |
|||
u: [], |
|||
ul: ['class', 'style'], |
|||
video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width', 'class', 'style'] |
|||
} |
|||
}; |
|||
|
|||
function getUEBasePath(docUrl, confUrl) { |
|||
|
|||
return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath()); |
|||
|
|||
} |
|||
|
|||
function getConfigFilePath() { |
|||
|
|||
var configPath = document.getElementsByTagName('script'); |
|||
|
|||
return configPath[ configPath.length - 1 ].src; |
|||
|
|||
} |
|||
|
|||
function getBasePath(docUrl, confUrl) { |
|||
|
|||
var basePath = confUrl; |
|||
|
|||
|
|||
if (/^(\/|\\\\)/.test(confUrl)) { |
|||
|
|||
basePath = /^.+?\w(\/|\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\/|\\\\)/, ''); |
|||
|
|||
} else if (!/^[a-z]+:/i.test(confUrl)) { |
|||
|
|||
docUrl = docUrl.split("#")[0].split("?")[0].replace(/[^\\\/]+$/, ''); |
|||
|
|||
basePath = docUrl + "" + confUrl; |
|||
|
|||
} |
|||
|
|||
return optimizationPath(basePath); |
|||
|
|||
} |
|||
|
|||
function optimizationPath(path) { |
|||
|
|||
var protocol = /^[a-z]+:\/\//.exec(path)[ 0 ], |
|||
tmp = null, |
|||
res = []; |
|||
|
|||
path = path.replace(protocol, "").split("?")[0].split("#")[0]; |
|||
|
|||
path = path.replace(/\\/g, '/').split(/\//); |
|||
|
|||
path[ path.length - 1 ] = ""; |
|||
|
|||
while (path.length) { |
|||
|
|||
if (( tmp = path.shift() ) === "..") { |
|||
res.pop(); |
|||
} else if (tmp !== ".") { |
|||
res.push(tmp); |
|||
} |
|||
|
|||
} |
|||
|
|||
return protocol + res.join("/"); |
|||
|
|||
} |
|||
|
|||
window.UE = { |
|||
getUEBasePath: getUEBasePath |
|||
}; |
|||
|
|||
})(); |
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -0,0 +1,3 @@ |
|||
vendor/ |
|||
composer.lock |
|||
phpunit.xml |
|||
@ -0,0 +1,5 @@ |
|||
CHANGELOG |
|||
========= |
|||
|
|||
The changelog is maintained for all Symfony contracts at the following URL: |
|||
https://github.com/symfony/contracts/blob/main/CHANGELOG.md |
|||
@ -0,0 +1,19 @@ |
|||
Copyright (c) 2020-2022 Fabien Potencier |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is furnished |
|||
to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
@ -0,0 +1,26 @@ |
|||
Symfony Deprecation Contracts |
|||
============================= |
|||
|
|||
A generic function and convention to trigger deprecation notices. |
|||
|
|||
This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices. |
|||
|
|||
By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component, |
|||
the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments. |
|||
|
|||
The function requires at least 3 arguments: |
|||
- the name of the Composer package that is triggering the deprecation |
|||
- the version of the package that introduced the deprecation |
|||
- the message of the deprecation |
|||
- more arguments can be provided: they will be inserted in the message using `printf()` formatting |
|||
|
|||
Example: |
|||
```php |
|||
trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin'); |
|||
``` |
|||
|
|||
This will generate the following message: |
|||
`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.` |
|||
|
|||
While not necessarily recommended, the deprecation notices can be completely ignored by declaring an empty |
|||
`function trigger_deprecation() {}` in your application. |
|||
@ -0,0 +1,35 @@ |
|||
{ |
|||
"name": "symfony/deprecation-contracts", |
|||
"type": "library", |
|||
"description": "A generic function and convention to trigger deprecation notices", |
|||
"homepage": "https://symfony.com", |
|||
"license": "MIT", |
|||
"authors": [ |
|||
{ |
|||
"name": "Nicolas Grekas", |
|||
"email": "p@tchwork.com" |
|||
}, |
|||
{ |
|||
"name": "Symfony Community", |
|||
"homepage": "https://symfony.com/contributors" |
|||
} |
|||
], |
|||
"require": { |
|||
"php": ">=8.0.2" |
|||
}, |
|||
"autoload": { |
|||
"files": [ |
|||
"function.php" |
|||
] |
|||
}, |
|||
"minimum-stability": "dev", |
|||
"extra": { |
|||
"branch-alias": { |
|||
"dev-main": "3.0-dev" |
|||
}, |
|||
"thanks": { |
|||
"name": "symfony/contracts", |
|||
"url": "https://github.com/symfony/contracts" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
if (!function_exists('trigger_deprecation')) { |
|||
/** |
|||
* Triggers a silenced deprecation notice. |
|||
* |
|||
* @param string $package The name of the Composer package that is triggering the deprecation |
|||
* @param string $version The version of the package that introduced the deprecation |
|||
* @param string $message The message of the deprecation |
|||
* @param mixed ...$args Values to insert in the message using printf() formatting |
|||
* |
|||
* @author Nicolas Grekas <p@tchwork.com> |
|||
*/ |
|||
function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void |
|||
{ |
|||
@trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
Copyright (c) 2015-2019 Fabien Potencier |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is furnished |
|||
to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
@ -0,0 +1,873 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
namespace Symfony\Polyfill\Mbstring; |
|||
|
|||
/** |
|||
* Partial mbstring implementation in PHP, iconv based, UTF-8 centric. |
|||
* |
|||
* Implemented: |
|||
* - mb_chr - Returns a specific character from its Unicode code point |
|||
* - mb_convert_encoding - Convert character encoding |
|||
* - mb_convert_variables - Convert character code in variable(s) |
|||
* - mb_decode_mimeheader - Decode string in MIME header field |
|||
* - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED |
|||
* - mb_decode_numericentity - Decode HTML numeric string reference to character |
|||
* - mb_encode_numericentity - Encode character to HTML numeric string reference |
|||
* - mb_convert_case - Perform case folding on a string |
|||
* - mb_detect_encoding - Detect character encoding |
|||
* - mb_get_info - Get internal settings of mbstring |
|||
* - mb_http_input - Detect HTTP input character encoding |
|||
* - mb_http_output - Set/Get HTTP output character encoding |
|||
* - mb_internal_encoding - Set/Get internal character encoding |
|||
* - mb_list_encodings - Returns an array of all supported encodings |
|||
* - mb_ord - Returns the Unicode code point of a character |
|||
* - mb_output_handler - Callback function converts character encoding in output buffer |
|||
* - mb_scrub - Replaces ill-formed byte sequences with substitute characters |
|||
* - mb_strlen - Get string length |
|||
* - mb_strpos - Find position of first occurrence of string in a string |
|||
* - mb_strrpos - Find position of last occurrence of a string in a string |
|||
* - mb_str_split - Convert a string to an array |
|||
* - mb_strtolower - Make a string lowercase |
|||
* - mb_strtoupper - Make a string uppercase |
|||
* - mb_substitute_character - Set/Get substitution character |
|||
* - mb_substr - Get part of string |
|||
* - mb_stripos - Finds position of first occurrence of a string within another, case insensitive |
|||
* - mb_stristr - Finds first occurrence of a string within another, case insensitive |
|||
* - mb_strrchr - Finds the last occurrence of a character in a string within another |
|||
* - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive |
|||
* - mb_strripos - Finds position of last occurrence of a string within another, case insensitive |
|||
* - mb_strstr - Finds first occurrence of a string within another |
|||
* - mb_strwidth - Return width of string |
|||
* - mb_substr_count - Count the number of substring occurrences |
|||
* |
|||
* Not implemented: |
|||
* - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) |
|||
* - mb_ereg_* - Regular expression with multibyte support |
|||
* - mb_parse_str - Parse GET/POST/COOKIE data and set global variable |
|||
* - mb_preferred_mime_name - Get MIME charset string |
|||
* - mb_regex_encoding - Returns current encoding for multibyte regex as string |
|||
* - mb_regex_set_options - Set/Get the default options for mbregex functions |
|||
* - mb_send_mail - Send encoded mail |
|||
* - mb_split - Split multibyte string using regular expression |
|||
* - mb_strcut - Get part of string |
|||
* - mb_strimwidth - Get truncated string with specified width |
|||
* |
|||
* @author Nicolas Grekas <p@tchwork.com> |
|||
* |
|||
* @internal |
|||
*/ |
|||
final class Mbstring |
|||
{ |
|||
public const MB_CASE_FOLD = \PHP_INT_MAX; |
|||
|
|||
private const CASE_FOLD = [ |
|||
['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], |
|||
['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], |
|||
]; |
|||
|
|||
private static $encodingList = ['ASCII', 'UTF-8']; |
|||
private static $language = 'neutral'; |
|||
private static $internalEncoding = 'UTF-8'; |
|||
|
|||
public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) |
|||
{ |
|||
if (\is_array($fromEncoding) || ($fromEncoding !== null && false !== strpos($fromEncoding, ','))) { |
|||
$fromEncoding = self::mb_detect_encoding($s, $fromEncoding); |
|||
} else { |
|||
$fromEncoding = self::getEncoding($fromEncoding); |
|||
} |
|||
|
|||
$toEncoding = self::getEncoding($toEncoding); |
|||
|
|||
if ('BASE64' === $fromEncoding) { |
|||
$s = base64_decode($s); |
|||
$fromEncoding = $toEncoding; |
|||
} |
|||
|
|||
if ('BASE64' === $toEncoding) { |
|||
return base64_encode($s); |
|||
} |
|||
|
|||
if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { |
|||
if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { |
|||
$fromEncoding = 'Windows-1252'; |
|||
} |
|||
if ('UTF-8' !== $fromEncoding) { |
|||
$s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s); |
|||
} |
|||
|
|||
return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); |
|||
} |
|||
|
|||
if ('HTML-ENTITIES' === $fromEncoding) { |
|||
$s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8'); |
|||
$fromEncoding = 'UTF-8'; |
|||
} |
|||
|
|||
return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s); |
|||
} |
|||
|
|||
public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) |
|||
{ |
|||
$ok = true; |
|||
array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { |
|||
if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { |
|||
$ok = false; |
|||
} |
|||
}); |
|||
|
|||
return $ok ? $fromEncoding : false; |
|||
} |
|||
|
|||
public static function mb_decode_mimeheader($s) |
|||
{ |
|||
return \iconv_mime_decode($s, 2, self::$internalEncoding); |
|||
} |
|||
|
|||
public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) |
|||
{ |
|||
trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING); |
|||
} |
|||
|
|||
public static function mb_decode_numericentity($s, $convmap, $encoding = null) |
|||
{ |
|||
if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { |
|||
trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); |
|||
|
|||
return null; |
|||
} |
|||
|
|||
if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { |
|||
return false; |
|||
} |
|||
|
|||
if (null !== $encoding && !is_scalar($encoding)) { |
|||
trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); |
|||
|
|||
return ''; // Instead of null (cf. mb_encode_numericentity). |
|||
} |
|||
|
|||
$s = (string) $s; |
|||
if ('' === $s) { |
|||
return ''; |
|||
} |
|||
|
|||
$encoding = self::getEncoding($encoding); |
|||
|
|||
if ('UTF-8' === $encoding) { |
|||
$encoding = null; |
|||
if (!preg_match('//u', $s)) { |
|||
$s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); |
|||
} |
|||
} else { |
|||
$s = \iconv($encoding, 'UTF-8//IGNORE', $s); |
|||
} |
|||
|
|||
$cnt = floor(\count($convmap) / 4) * 4; |
|||
|
|||
for ($i = 0; $i < $cnt; $i += 4) { |
|||
// collector_decode_htmlnumericentity ignores $convmap[$i + 3] |
|||
$convmap[$i] += $convmap[$i + 2]; |
|||
$convmap[$i + 1] += $convmap[$i + 2]; |
|||
} |
|||
|
|||
$s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { |
|||
$c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; |
|||
for ($i = 0; $i < $cnt; $i += 4) { |
|||
if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { |
|||
return self::mb_chr($c - $convmap[$i + 2]); |
|||
} |
|||
} |
|||
|
|||
return $m[0]; |
|||
}, $s); |
|||
|
|||
if (null === $encoding) { |
|||
return $s; |
|||
} |
|||
|
|||
return \iconv('UTF-8', $encoding.'//IGNORE', $s); |
|||
} |
|||
|
|||
public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) |
|||
{ |
|||
if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { |
|||
trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); |
|||
|
|||
return null; |
|||
} |
|||
|
|||
if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { |
|||
return false; |
|||
} |
|||
|
|||
if (null !== $encoding && !is_scalar($encoding)) { |
|||
trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); |
|||
|
|||
return null; // Instead of '' (cf. mb_decode_numericentity). |
|||
} |
|||
|
|||
if (null !== $is_hex && !is_scalar($is_hex)) { |
|||
trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); |
|||
|
|||
return null; |
|||
} |
|||
|
|||
$s = (string) $s; |
|||
if ('' === $s) { |
|||
return ''; |
|||
} |
|||
|
|||
$encoding = self::getEncoding($encoding); |
|||
|
|||
if ('UTF-8' === $encoding) { |
|||
$encoding = null; |
|||
if (!preg_match('//u', $s)) { |
|||
$s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); |
|||
} |
|||
} else { |
|||
$s = \iconv($encoding, 'UTF-8//IGNORE', $s); |
|||
} |
|||
|
|||
static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; |
|||
|
|||
$cnt = floor(\count($convmap) / 4) * 4; |
|||
$i = 0; |
|||
$len = \strlen($s); |
|||
$result = ''; |
|||
|
|||
while ($i < $len) { |
|||
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; |
|||
$uchr = substr($s, $i, $ulen); |
|||
$i += $ulen; |
|||
$c = self::mb_ord($uchr); |
|||
|
|||
for ($j = 0; $j < $cnt; $j += 4) { |
|||
if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { |
|||
$cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; |
|||
$result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; |
|||
continue 2; |
|||
} |
|||
} |
|||
$result .= $uchr; |
|||
} |
|||
|
|||
if (null === $encoding) { |
|||
return $result; |
|||
} |
|||
|
|||
return \iconv('UTF-8', $encoding.'//IGNORE', $result); |
|||
} |
|||
|
|||
public static function mb_convert_case($s, $mode, $encoding = null) |
|||
{ |
|||
$s = (string) $s; |
|||
if ('' === $s) { |
|||
return ''; |
|||
} |
|||
|
|||
$encoding = self::getEncoding($encoding); |
|||
|
|||
if ('UTF-8' === $encoding) { |
|||
$encoding = null; |
|||
if (!preg_match('//u', $s)) { |
|||
$s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); |
|||
} |
|||
} else { |
|||
$s = \iconv($encoding, 'UTF-8//IGNORE', $s); |
|||
} |
|||
|
|||
if (\MB_CASE_TITLE == $mode) { |
|||
static $titleRegexp = null; |
|||
if (null === $titleRegexp) { |
|||
$titleRegexp = self::getData('titleCaseRegexp'); |
|||
} |
|||
$s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s); |
|||
} else { |
|||
if (\MB_CASE_UPPER == $mode) { |
|||
static $upper = null; |
|||
if (null === $upper) { |
|||
$upper = self::getData('upperCase'); |
|||
} |
|||
$map = $upper; |
|||
} else { |
|||
if (self::MB_CASE_FOLD === $mode) { |
|||
$s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s); |
|||
} |
|||
|
|||
static $lower = null; |
|||
if (null === $lower) { |
|||
$lower = self::getData('lowerCase'); |
|||
} |
|||
$map = $lower; |
|||
} |
|||
|
|||
static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; |
|||
|
|||
$i = 0; |
|||
$len = \strlen($s); |
|||
|
|||
while ($i < $len) { |
|||
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; |
|||
$uchr = substr($s, $i, $ulen); |
|||
$i += $ulen; |
|||
|
|||
if (isset($map[$uchr])) { |
|||
$uchr = $map[$uchr]; |
|||
$nlen = \strlen($uchr); |
|||
|
|||
if ($nlen == $ulen) { |
|||
$nlen = $i; |
|||
do { |
|||
$s[--$nlen] = $uchr[--$ulen]; |
|||
} while ($ulen); |
|||
} else { |
|||
$s = substr_replace($s, $uchr, $i - $ulen, $ulen); |
|||
$len += $nlen - $ulen; |
|||
$i += $nlen - $ulen; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
if (null === $encoding) { |
|||
return $s; |
|||
} |
|||
|
|||
return \iconv('UTF-8', $encoding.'//IGNORE', $s); |
|||
} |
|||
|
|||
public static function mb_internal_encoding($encoding = null) |
|||
{ |
|||
if (null === $encoding) { |
|||
return self::$internalEncoding; |
|||
} |
|||
|
|||
$normalizedEncoding = self::getEncoding($encoding); |
|||
|
|||
if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) { |
|||
self::$internalEncoding = $normalizedEncoding; |
|||
|
|||
return true; |
|||
} |
|||
|
|||
if (80000 > \PHP_VERSION_ID) { |
|||
return false; |
|||
} |
|||
|
|||
throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding)); |
|||
} |
|||
|
|||
public static function mb_language($lang = null) |
|||
{ |
|||
if (null === $lang) { |
|||
return self::$language; |
|||
} |
|||
|
|||
switch ($normalizedLang = strtolower($lang)) { |
|||
case 'uni': |
|||
case 'neutral': |
|||
self::$language = $normalizedLang; |
|||
|
|||
return true; |
|||
} |
|||
|
|||
if (80000 > \PHP_VERSION_ID) { |
|||
return false; |
|||
} |
|||
|
|||
throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang)); |
|||
} |
|||
|
|||
public static function mb_list_encodings() |
|||
{ |
|||
return ['UTF-8']; |
|||
} |
|||
|
|||
public static function mb_encoding_aliases($encoding) |
|||
{ |
|||
switch (strtoupper($encoding)) { |
|||
case 'UTF8': |
|||
case 'UTF-8': |
|||
return ['utf8']; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public static function mb_check_encoding($var = null, $encoding = null) |
|||
{ |
|||
if (null === $encoding) { |
|||
if (null === $var) { |
|||
return false; |
|||
} |
|||
$encoding = self::$internalEncoding; |
|||
} |
|||
|
|||
return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var); |
|||
} |
|||
|
|||
public static function mb_detect_encoding($str, $encodingList = null, $strict = false) |
|||
{ |
|||
if (null === $encodingList) { |
|||
$encodingList = self::$encodingList; |
|||
} else { |
|||
if (!\is_array($encodingList)) { |
|||
$encodingList = array_map('trim', explode(',', $encodingList)); |
|||
} |
|||
$encodingList = array_map('strtoupper', $encodingList); |
|||
} |
|||
|
|||
foreach ($encodingList as $enc) { |
|||
switch ($enc) { |
|||
case 'ASCII': |
|||
if (!preg_match('/[\x80-\xFF]/', $str)) { |
|||
return $enc; |
|||
} |
|||
break; |
|||
|
|||
case 'UTF8': |
|||
case 'UTF-8': |
|||
if (preg_match('//u', $str)) { |
|||
return 'UTF-8'; |
|||
} |
|||
break; |
|||
|
|||
default: |
|||
if (0 === strncmp($enc, 'ISO-8859-', 9)) { |
|||
return $enc; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public static function mb_detect_order($encodingList = null) |
|||
{ |
|||
if (null === $encodingList) { |
|||
return self::$encodingList; |
|||
} |
|||
|
|||
if (!\is_array($encodingList)) { |
|||
$encodingList = array_map('trim', explode(',', $encodingList)); |
|||
} |
|||
$encodingList = array_map('strtoupper', $encodingList); |
|||
|
|||
foreach ($encodingList as $enc) { |
|||
switch ($enc) { |
|||
default: |
|||
if (strncmp($enc, 'ISO-8859-', 9)) { |
|||
return false; |
|||
} |
|||
// no break |
|||
case 'ASCII': |
|||
case 'UTF8': |
|||
case 'UTF-8': |
|||
} |
|||
} |
|||
|
|||
self::$encodingList = $encodingList; |
|||
|
|||
return true; |
|||
} |
|||
|
|||
public static function mb_strlen($s, $encoding = null) |
|||
{ |
|||
$encoding = self::getEncoding($encoding); |
|||
if ('CP850' === $encoding || 'ASCII' === $encoding) { |
|||
return \strlen($s); |
|||
} |
|||
|
|||
return @\iconv_strlen($s, $encoding); |
|||
} |
|||
|
|||
public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) |
|||
{ |
|||
$encoding = self::getEncoding($encoding); |
|||
if ('CP850' === $encoding || 'ASCII' === $encoding) { |
|||
return strpos($haystack, $needle, $offset); |
|||
} |
|||
|
|||
$needle = (string) $needle; |
|||
if ('' === $needle) { |
|||
if (80000 > \PHP_VERSION_ID) { |
|||
trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING); |
|||
|
|||
return false; |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
return \iconv_strpos($haystack, $needle, $offset, $encoding); |
|||
} |
|||
|
|||
public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) |
|||
{ |
|||
$encoding = self::getEncoding($encoding); |
|||
if ('CP850' === $encoding || 'ASCII' === $encoding) { |
|||
return strrpos($haystack, $needle, $offset); |
|||
} |
|||
|
|||
if ($offset != (int) $offset) { |
|||
$offset = 0; |
|||
} elseif ($offset = (int) $offset) { |
|||
if ($offset < 0) { |
|||
if (0 > $offset += self::mb_strlen($needle)) { |
|||
$haystack = self::mb_substr($haystack, 0, $offset, $encoding); |
|||
} |
|||
$offset = 0; |
|||
} else { |
|||
$haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); |
|||
} |
|||
} |
|||
|
|||
$pos = '' !== $needle || 80000 > \PHP_VERSION_ID |
|||
? \iconv_strrpos($haystack, $needle, $encoding) |
|||
: self::mb_strlen($haystack, $encoding); |
|||
|
|||
return false !== $pos ? $offset + $pos : false; |
|||
} |
|||
|
|||
public static function mb_str_split($string, $split_length = 1, $encoding = null) |
|||
{ |
|||
if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { |
|||
trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); |
|||
|
|||
return null; |
|||
} |
|||
|
|||
if (1 > $split_length = (int) $split_length) { |
|||
if (80000 > \PHP_VERSION_ID) { |
|||
trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); |
|||
return false; |
|||
} |
|||
|
|||
throw new \ValueError('Argument #2 ($length) must be greater than 0'); |
|||
} |
|||
|
|||
if (null === $encoding) { |
|||
$encoding = mb_internal_encoding(); |
|||
} |
|||
|
|||
if ('UTF-8' === $encoding = self::getEncoding($encoding)) { |
|||
$rx = '/('; |
|||
while (65535 < $split_length) { |
|||
$rx .= '.{65535}'; |
|||
$split_length -= 65535; |
|||
} |
|||
$rx .= '.{'.$split_length.'})/us'; |
|||
|
|||
return preg_split($rx, $string, null, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); |
|||
} |
|||
|
|||
$result = []; |
|||
$length = mb_strlen($string, $encoding); |
|||
|
|||
for ($i = 0; $i < $length; $i += $split_length) { |
|||
$result[] = mb_substr($string, $i, $split_length, $encoding); |
|||
} |
|||
|
|||
return $result; |
|||
} |
|||
|
|||
public static function mb_strtolower($s, $encoding = null) |
|||
{ |
|||
return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding); |
|||
} |
|||
|
|||
public static function mb_strtoupper($s, $encoding = null) |
|||
{ |
|||
return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding); |
|||
} |
|||
|
|||
public static function mb_substitute_character($c = null) |
|||
{ |
|||
if (null === $c) { |
|||
return 'none'; |
|||
} |
|||
if (0 === strcasecmp($c, 'none')) { |
|||
return true; |
|||
} |
|||
if (80000 > \PHP_VERSION_ID) { |
|||
return false; |
|||
} |
|||
if (\is_int($c) || 'long' === $c || 'entity' === $c) { |
|||
return false; |
|||
} |
|||
|
|||
throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint'); |
|||
} |
|||
|
|||
public static function mb_substr($s, $start, $length = null, $encoding = null) |
|||
{ |
|||
$encoding = self::getEncoding($encoding); |
|||
if ('CP850' === $encoding || 'ASCII' === $encoding) { |
|||
return (string) substr($s, $start, null === $length ? 2147483647 : $length); |
|||
} |
|||
|
|||
if ($start < 0) { |
|||
$start = \iconv_strlen($s, $encoding) + $start; |
|||
if ($start < 0) { |
|||
$start = 0; |
|||
} |
|||
} |
|||
|
|||
if (null === $length) { |
|||
$length = 2147483647; |
|||
} elseif ($length < 0) { |
|||
$length = \iconv_strlen($s, $encoding) + $length - $start; |
|||
if ($length < 0) { |
|||
return ''; |
|||
} |
|||
} |
|||
|
|||
return (string) \iconv_substr($s, $start, $length, $encoding); |
|||
} |
|||
|
|||
public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) |
|||
{ |
|||
$haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); |
|||
$needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); |
|||
|
|||
return self::mb_strpos($haystack, $needle, $offset, $encoding); |
|||
} |
|||
|
|||
public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) |
|||
{ |
|||
$pos = self::mb_stripos($haystack, $needle, 0, $encoding); |
|||
|
|||
return self::getSubpart($pos, $part, $haystack, $encoding); |
|||
} |
|||
|
|||
public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) |
|||
{ |
|||
$encoding = self::getEncoding($encoding); |
|||
if ('CP850' === $encoding || 'ASCII' === $encoding) { |
|||
$pos = strrpos($haystack, $needle); |
|||
} else { |
|||
$needle = self::mb_substr($needle, 0, 1, $encoding); |
|||
$pos = \iconv_strrpos($haystack, $needle, $encoding); |
|||
} |
|||
|
|||
return self::getSubpart($pos, $part, $haystack, $encoding); |
|||
} |
|||
|
|||
public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) |
|||
{ |
|||
$needle = self::mb_substr($needle, 0, 1, $encoding); |
|||
$pos = self::mb_strripos($haystack, $needle, $encoding); |
|||
|
|||
return self::getSubpart($pos, $part, $haystack, $encoding); |
|||
} |
|||
|
|||
public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) |
|||
{ |
|||
$haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); |
|||
$needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); |
|||
|
|||
return self::mb_strrpos($haystack, $needle, $offset, $encoding); |
|||
} |
|||
|
|||
public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) |
|||
{ |
|||
$pos = strpos($haystack, $needle); |
|||
if (false === $pos) { |
|||
return false; |
|||
} |
|||
if ($part) { |
|||
return substr($haystack, 0, $pos); |
|||
} |
|||
|
|||
return substr($haystack, $pos); |
|||
} |
|||
|
|||
public static function mb_get_info($type = 'all') |
|||
{ |
|||
$info = [ |
|||
'internal_encoding' => self::$internalEncoding, |
|||
'http_output' => 'pass', |
|||
'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', |
|||
'func_overload' => 0, |
|||
'func_overload_list' => 'no overload', |
|||
'mail_charset' => 'UTF-8', |
|||
'mail_header_encoding' => 'BASE64', |
|||
'mail_body_encoding' => 'BASE64', |
|||
'illegal_chars' => 0, |
|||
'encoding_translation' => 'Off', |
|||
'language' => self::$language, |
|||
'detect_order' => self::$encodingList, |
|||
'substitute_character' => 'none', |
|||
'strict_detection' => 'Off', |
|||
]; |
|||
|
|||
if ('all' === $type) { |
|||
return $info; |
|||
} |
|||
if (isset($info[$type])) { |
|||
return $info[$type]; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public static function mb_http_input($type = '') |
|||
{ |
|||
return false; |
|||
} |
|||
|
|||
public static function mb_http_output($encoding = null) |
|||
{ |
|||
return null !== $encoding ? 'pass' === $encoding : 'pass'; |
|||
} |
|||
|
|||
public static function mb_strwidth($s, $encoding = null) |
|||
{ |
|||
$encoding = self::getEncoding($encoding); |
|||
|
|||
if ('UTF-8' !== $encoding) { |
|||
$s = \iconv($encoding, 'UTF-8//IGNORE', $s); |
|||
} |
|||
|
|||
$s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); |
|||
|
|||
return ($wide << 1) + \iconv_strlen($s, 'UTF-8'); |
|||
} |
|||
|
|||
public static function mb_substr_count($haystack, $needle, $encoding = null) |
|||
{ |
|||
return substr_count($haystack, $needle); |
|||
} |
|||
|
|||
public static function mb_output_handler($contents, $status) |
|||
{ |
|||
return $contents; |
|||
} |
|||
|
|||
public static function mb_chr($code, $encoding = null) |
|||
{ |
|||
if (0x80 > $code %= 0x200000) { |
|||
$s = \chr($code); |
|||
} elseif (0x800 > $code) { |
|||
$s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); |
|||
} elseif (0x10000 > $code) { |
|||
$s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); |
|||
} else { |
|||
$s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); |
|||
} |
|||
|
|||
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { |
|||
$s = mb_convert_encoding($s, $encoding, 'UTF-8'); |
|||
} |
|||
|
|||
return $s; |
|||
} |
|||
|
|||
public static function mb_ord($s, $encoding = null) |
|||
{ |
|||
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { |
|||
$s = mb_convert_encoding($s, 'UTF-8', $encoding); |
|||
} |
|||
|
|||
if (1 === \strlen($s)) { |
|||
return \ord($s); |
|||
} |
|||
|
|||
$code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; |
|||
if (0xF0 <= $code) { |
|||
return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; |
|||
} |
|||
if (0xE0 <= $code) { |
|||
return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; |
|||
} |
|||
if (0xC0 <= $code) { |
|||
return (($code - 0xC0) << 6) + $s[2] - 0x80; |
|||
} |
|||
|
|||
return $code; |
|||
} |
|||
|
|||
private static function getSubpart($pos, $part, $haystack, $encoding) |
|||
{ |
|||
if (false === $pos) { |
|||
return false; |
|||
} |
|||
if ($part) { |
|||
return self::mb_substr($haystack, 0, $pos, $encoding); |
|||
} |
|||
|
|||
return self::mb_substr($haystack, $pos, null, $encoding); |
|||
} |
|||
|
|||
private static function html_encoding_callback(array $m) |
|||
{ |
|||
$i = 1; |
|||
$entities = ''; |
|||
$m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8')); |
|||
|
|||
while (isset($m[$i])) { |
|||
if (0x80 > $m[$i]) { |
|||
$entities .= \chr($m[$i++]); |
|||
continue; |
|||
} |
|||
if (0xF0 <= $m[$i]) { |
|||
$c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; |
|||
} elseif (0xE0 <= $m[$i]) { |
|||
$c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; |
|||
} else { |
|||
$c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; |
|||
} |
|||
|
|||
$entities .= '&#'.$c.';'; |
|||
} |
|||
|
|||
return $entities; |
|||
} |
|||
|
|||
private static function title_case(array $s) |
|||
{ |
|||
return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8'); |
|||
} |
|||
|
|||
private static function getData($file) |
|||
{ |
|||
if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { |
|||
return require $file; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
private static function getEncoding($encoding) |
|||
{ |
|||
if (null === $encoding) { |
|||
return self::$internalEncoding; |
|||
} |
|||
|
|||
if ('UTF-8' === $encoding) { |
|||
return 'UTF-8'; |
|||
} |
|||
|
|||
$encoding = strtoupper($encoding); |
|||
|
|||
if ('8BIT' === $encoding || 'BINARY' === $encoding) { |
|||
return 'CP850'; |
|||
} |
|||
|
|||
if ('UTF8' === $encoding) { |
|||
return 'UTF-8'; |
|||
} |
|||
|
|||
return $encoding; |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
Symfony Polyfill / Mbstring |
|||
=========================== |
|||
|
|||
This component provides a partial, native PHP implementation for the |
|||
[Mbstring](https://php.net/mbstring) extension. |
|||
|
|||
More information can be found in the |
|||
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). |
|||
|
|||
License |
|||
======= |
|||
|
|||
This library is released under the [MIT license](LICENSE). |
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
@ -0,0 +1,147 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
use Symfony\Polyfill\Mbstring as p; |
|||
|
|||
if (\PHP_VERSION_ID >= 80000) { |
|||
return require __DIR__.'/bootstrap80.php'; |
|||
} |
|||
|
|||
if (!function_exists('mb_convert_encoding')) { |
|||
function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); } |
|||
} |
|||
if (!function_exists('mb_decode_mimeheader')) { |
|||
function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); } |
|||
} |
|||
if (!function_exists('mb_encode_mimeheader')) { |
|||
function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); } |
|||
} |
|||
if (!function_exists('mb_decode_numericentity')) { |
|||
function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); } |
|||
} |
|||
if (!function_exists('mb_encode_numericentity')) { |
|||
function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); } |
|||
} |
|||
if (!function_exists('mb_convert_case')) { |
|||
function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); } |
|||
} |
|||
if (!function_exists('mb_internal_encoding')) { |
|||
function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); } |
|||
} |
|||
if (!function_exists('mb_language')) { |
|||
function mb_language($language = null) { return p\Mbstring::mb_language($language); } |
|||
} |
|||
if (!function_exists('mb_list_encodings')) { |
|||
function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } |
|||
} |
|||
if (!function_exists('mb_encoding_aliases')) { |
|||
function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } |
|||
} |
|||
if (!function_exists('mb_check_encoding')) { |
|||
function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); } |
|||
} |
|||
if (!function_exists('mb_detect_encoding')) { |
|||
function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); } |
|||
} |
|||
if (!function_exists('mb_detect_order')) { |
|||
function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); } |
|||
} |
|||
if (!function_exists('mb_parse_str')) { |
|||
function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; } |
|||
} |
|||
if (!function_exists('mb_strlen')) { |
|||
function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strpos')) { |
|||
function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strtolower')) { |
|||
function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strtoupper')) { |
|||
function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_substitute_character')) { |
|||
function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); } |
|||
} |
|||
if (!function_exists('mb_substr')) { |
|||
function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); } |
|||
} |
|||
if (!function_exists('mb_stripos')) { |
|||
function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_stristr')) { |
|||
function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strrchr')) { |
|||
function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strrichr')) { |
|||
function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strripos')) { |
|||
function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strrpos')) { |
|||
function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strstr')) { |
|||
function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_get_info')) { |
|||
function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } |
|||
} |
|||
if (!function_exists('mb_http_output')) { |
|||
function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); } |
|||
} |
|||
if (!function_exists('mb_strwidth')) { |
|||
function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_substr_count')) { |
|||
function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_output_handler')) { |
|||
function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); } |
|||
} |
|||
if (!function_exists('mb_http_input')) { |
|||
function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); } |
|||
} |
|||
|
|||
if (!function_exists('mb_convert_variables')) { |
|||
function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); } |
|||
} |
|||
|
|||
if (!function_exists('mb_ord')) { |
|||
function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_chr')) { |
|||
function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); } |
|||
} |
|||
if (!function_exists('mb_scrub')) { |
|||
function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); } |
|||
} |
|||
if (!function_exists('mb_str_split')) { |
|||
function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); } |
|||
} |
|||
|
|||
if (extension_loaded('mbstring')) { |
|||
return; |
|||
} |
|||
|
|||
if (!defined('MB_CASE_UPPER')) { |
|||
define('MB_CASE_UPPER', 0); |
|||
} |
|||
if (!defined('MB_CASE_LOWER')) { |
|||
define('MB_CASE_LOWER', 1); |
|||
} |
|||
if (!defined('MB_CASE_TITLE')) { |
|||
define('MB_CASE_TITLE', 2); |
|||
} |
|||
@ -0,0 +1,143 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
use Symfony\Polyfill\Mbstring as p; |
|||
|
|||
if (!function_exists('mb_convert_encoding')) { |
|||
function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); } |
|||
} |
|||
if (!function_exists('mb_decode_mimeheader')) { |
|||
function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); } |
|||
} |
|||
if (!function_exists('mb_encode_mimeheader')) { |
|||
function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); } |
|||
} |
|||
if (!function_exists('mb_decode_numericentity')) { |
|||
function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); } |
|||
} |
|||
if (!function_exists('mb_encode_numericentity')) { |
|||
function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); } |
|||
} |
|||
if (!function_exists('mb_convert_case')) { |
|||
function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); } |
|||
} |
|||
if (!function_exists('mb_internal_encoding')) { |
|||
function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); } |
|||
} |
|||
if (!function_exists('mb_language')) { |
|||
function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); } |
|||
} |
|||
if (!function_exists('mb_list_encodings')) { |
|||
function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); } |
|||
} |
|||
if (!function_exists('mb_encoding_aliases')) { |
|||
function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); } |
|||
} |
|||
if (!function_exists('mb_check_encoding')) { |
|||
function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); } |
|||
} |
|||
if (!function_exists('mb_detect_encoding')) { |
|||
function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); } |
|||
} |
|||
if (!function_exists('mb_detect_order')) { |
|||
function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); } |
|||
} |
|||
if (!function_exists('mb_parse_str')) { |
|||
function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; } |
|||
} |
|||
if (!function_exists('mb_strlen')) { |
|||
function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strpos')) { |
|||
function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strtolower')) { |
|||
function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strtoupper')) { |
|||
function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_substitute_character')) { |
|||
function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); } |
|||
} |
|||
if (!function_exists('mb_substr')) { |
|||
function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); } |
|||
} |
|||
if (!function_exists('mb_stripos')) { |
|||
function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_stristr')) { |
|||
function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strrchr')) { |
|||
function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strrichr')) { |
|||
function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strripos')) { |
|||
function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strrpos')) { |
|||
function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } |
|||
} |
|||
if (!function_exists('mb_strstr')) { |
|||
function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_get_info')) { |
|||
function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); } |
|||
} |
|||
if (!function_exists('mb_http_output')) { |
|||
function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } |
|||
} |
|||
if (!function_exists('mb_strwidth')) { |
|||
function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_substr_count')) { |
|||
function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); } |
|||
} |
|||
if (!function_exists('mb_output_handler')) { |
|||
function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); } |
|||
} |
|||
if (!function_exists('mb_http_input')) { |
|||
function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); } |
|||
} |
|||
|
|||
if (!function_exists('mb_convert_variables')) { |
|||
function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); } |
|||
} |
|||
|
|||
if (!function_exists('mb_ord')) { |
|||
function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_chr')) { |
|||
function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); } |
|||
} |
|||
if (!function_exists('mb_scrub')) { |
|||
function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); } |
|||
} |
|||
if (!function_exists('mb_str_split')) { |
|||
function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); } |
|||
} |
|||
|
|||
if (extension_loaded('mbstring')) { |
|||
return; |
|||
} |
|||
|
|||
if (!defined('MB_CASE_UPPER')) { |
|||
define('MB_CASE_UPPER', 0); |
|||
} |
|||
if (!defined('MB_CASE_LOWER')) { |
|||
define('MB_CASE_LOWER', 1); |
|||
} |
|||
if (!defined('MB_CASE_TITLE')) { |
|||
define('MB_CASE_TITLE', 2); |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
{ |
|||
"name": "symfony/polyfill-mbstring", |
|||
"type": "library", |
|||
"description": "Symfony polyfill for the Mbstring extension", |
|||
"keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], |
|||
"homepage": "https://symfony.com", |
|||
"license": "MIT", |
|||
"authors": [ |
|||
{ |
|||
"name": "Nicolas Grekas", |
|||
"email": "p@tchwork.com" |
|||
}, |
|||
{ |
|||
"name": "Symfony Community", |
|||
"homepage": "https://symfony.com/contributors" |
|||
} |
|||
], |
|||
"require": { |
|||
"php": ">=7.1" |
|||
}, |
|||
"provide": { |
|||
"ext-mbstring": "*" |
|||
}, |
|||
"autoload": { |
|||
"psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, |
|||
"files": [ "bootstrap.php" ] |
|||
}, |
|||
"suggest": { |
|||
"ext-mbstring": "For best performance" |
|||
}, |
|||
"minimum-stability": "dev", |
|||
"extra": { |
|||
"branch-alias": { |
|||
"dev-main": "1.23-dev" |
|||
}, |
|||
"thanks": { |
|||
"name": "symfony/polyfill", |
|||
"url": "https://github.com/symfony/polyfill" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
Copyright (c) 2015-2019 Fabien Potencier |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is furnished |
|||
to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
@ -0,0 +1,217 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
namespace Symfony\Polyfill\Php72; |
|||
|
|||
/** |
|||
* @author Nicolas Grekas <p@tchwork.com> |
|||
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> |
|||
* |
|||
* @internal |
|||
*/ |
|||
final class Php72 |
|||
{ |
|||
private static $hashMask; |
|||
|
|||
public static function utf8_encode($s) |
|||
{ |
|||
$s .= $s; |
|||
$len = \strlen($s); |
|||
|
|||
for ($i = $len >> 1, $j = 0; $i < $len; ++$i, ++$j) { |
|||
switch (true) { |
|||
case $s[$i] < "\x80": $s[$j] = $s[$i]; break; |
|||
case $s[$i] < "\xC0": $s[$j] = "\xC2"; $s[++$j] = $s[$i]; break; |
|||
default: $s[$j] = "\xC3"; $s[++$j] = \chr(\ord($s[$i]) - 64); break; |
|||
} |
|||
} |
|||
|
|||
return substr($s, 0, $j); |
|||
} |
|||
|
|||
public static function utf8_decode($s) |
|||
{ |
|||
$s = (string) $s; |
|||
$len = \strlen($s); |
|||
|
|||
for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) { |
|||
switch ($s[$i] & "\xF0") { |
|||
case "\xC0": |
|||
case "\xD0": |
|||
$c = (\ord($s[$i] & "\x1F") << 6) | \ord($s[++$i] & "\x3F"); |
|||
$s[$j] = $c < 256 ? \chr($c) : '?'; |
|||
break; |
|||
|
|||
case "\xF0": |
|||
++$i; |
|||
// no break |
|||
|
|||
case "\xE0": |
|||
$s[$j] = '?'; |
|||
$i += 2; |
|||
break; |
|||
|
|||
default: |
|||
$s[$j] = $s[$i]; |
|||
} |
|||
} |
|||
|
|||
return substr($s, 0, $j); |
|||
} |
|||
|
|||
public static function php_os_family() |
|||
{ |
|||
if ('\\' === \DIRECTORY_SEPARATOR) { |
|||
return 'Windows'; |
|||
} |
|||
|
|||
$map = [ |
|||
'Darwin' => 'Darwin', |
|||
'DragonFly' => 'BSD', |
|||
'FreeBSD' => 'BSD', |
|||
'NetBSD' => 'BSD', |
|||
'OpenBSD' => 'BSD', |
|||
'Linux' => 'Linux', |
|||
'SunOS' => 'Solaris', |
|||
]; |
|||
|
|||
return isset($map[\PHP_OS]) ? $map[\PHP_OS] : 'Unknown'; |
|||
} |
|||
|
|||
public static function spl_object_id($object) |
|||
{ |
|||
if (null === self::$hashMask) { |
|||
self::initHashMask(); |
|||
} |
|||
if (null === $hash = spl_object_hash($object)) { |
|||
return; |
|||
} |
|||
|
|||
// On 32-bit systems, PHP_INT_SIZE is 4, |
|||
return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); |
|||
} |
|||
|
|||
public static function sapi_windows_vt100_support($stream, $enable = null) |
|||
{ |
|||
if (!\is_resource($stream)) { |
|||
trigger_error('sapi_windows_vt100_support() expects parameter 1 to be resource, '.\gettype($stream).' given', \E_USER_WARNING); |
|||
|
|||
return false; |
|||
} |
|||
|
|||
$meta = stream_get_meta_data($stream); |
|||
|
|||
if ('STDIO' !== $meta['stream_type']) { |
|||
trigger_error('sapi_windows_vt100_support() was not able to analyze the specified stream', \E_USER_WARNING); |
|||
|
|||
return false; |
|||
} |
|||
|
|||
// We cannot actually disable vt100 support if it is set |
|||
if (false === $enable || !self::stream_isatty($stream)) { |
|||
return false; |
|||
} |
|||
|
|||
// The native function does not apply to stdin |
|||
$meta = array_map('strtolower', $meta); |
|||
$stdin = 'php://stdin' === $meta['uri'] || 'php://fd/0' === $meta['uri']; |
|||
|
|||
return !$stdin |
|||
&& (false !== getenv('ANSICON') |
|||
|| 'ON' === getenv('ConEmuANSI') |
|||
|| 'xterm' === getenv('TERM') |
|||
|| 'Hyper' === getenv('TERM_PROGRAM')); |
|||
} |
|||
|
|||
public static function stream_isatty($stream) |
|||
{ |
|||
if (!\is_resource($stream)) { |
|||
trigger_error('stream_isatty() expects parameter 1 to be resource, '.\gettype($stream).' given', \E_USER_WARNING); |
|||
|
|||
return false; |
|||
} |
|||
|
|||
if ('\\' === \DIRECTORY_SEPARATOR) { |
|||
$stat = @fstat($stream); |
|||
// Check if formatted mode is S_IFCHR |
|||
return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; |
|||
} |
|||
|
|||
return \function_exists('posix_isatty') && @posix_isatty($stream); |
|||
} |
|||
|
|||
private static function initHashMask() |
|||
{ |
|||
$obj = (object) []; |
|||
self::$hashMask = -1; |
|||
|
|||
// check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below |
|||
$obFuncs = ['ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush']; |
|||
foreach (debug_backtrace(\PHP_VERSION_ID >= 50400 ? \DEBUG_BACKTRACE_IGNORE_ARGS : false) as $frame) { |
|||
if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) { |
|||
$frame['line'] = 0; |
|||
break; |
|||
} |
|||
} |
|||
if (!empty($frame['line'])) { |
|||
ob_start(); |
|||
debug_zval_dump($obj); |
|||
self::$hashMask = (int) substr(ob_get_clean(), 17); |
|||
} |
|||
|
|||
self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); |
|||
} |
|||
|
|||
public static function mb_chr($code, $encoding = null) |
|||
{ |
|||
if (0x80 > $code %= 0x200000) { |
|||
$s = \chr($code); |
|||
} elseif (0x800 > $code) { |
|||
$s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); |
|||
} elseif (0x10000 > $code) { |
|||
$s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); |
|||
} else { |
|||
$s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); |
|||
} |
|||
|
|||
if ('UTF-8' !== $encoding = $encoding ?? mb_internal_encoding()) { |
|||
$s = mb_convert_encoding($s, $encoding, 'UTF-8'); |
|||
} |
|||
|
|||
return $s; |
|||
} |
|||
|
|||
public static function mb_ord($s, $encoding = null) |
|||
{ |
|||
if (null === $encoding) { |
|||
$s = mb_convert_encoding($s, 'UTF-8'); |
|||
} elseif ('UTF-8' !== $encoding) { |
|||
$s = mb_convert_encoding($s, 'UTF-8', $encoding); |
|||
} |
|||
|
|||
if (1 === \strlen($s)) { |
|||
return \ord($s); |
|||
} |
|||
|
|||
$code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; |
|||
if (0xF0 <= $code) { |
|||
return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; |
|||
} |
|||
if (0xE0 <= $code) { |
|||
return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; |
|||
} |
|||
if (0xC0 <= $code) { |
|||
return (($code - 0xC0) << 6) + $s[2] - 0x80; |
|||
} |
|||
|
|||
return $code; |
|||
} |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
Symfony Polyfill / Php72 |
|||
======================== |
|||
|
|||
This component provides functions added to PHP 7.2 core: |
|||
|
|||
- [`spl_object_id`](https://php.net/spl_object_id) |
|||
- [`stream_isatty`](https://php.net/stream_isatty) |
|||
|
|||
On Windows only: |
|||
|
|||
- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support) |
|||
|
|||
Moved to core since 7.2 (was in the optional XML extension earlier): |
|||
|
|||
- [`utf8_encode`](https://php.net/utf8_encode) |
|||
- [`utf8_decode`](https://php.net/utf8_decode) |
|||
|
|||
Also, it provides constants added to PHP 7.2: |
|||
- [`PHP_FLOAT_*`](https://php.net/reserved.constants#constant.php-float-dig) |
|||
- [`PHP_OS_FAMILY`](https://php.net/reserved.constants#constant.php-os-family) |
|||
|
|||
More information can be found in the |
|||
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). |
|||
|
|||
License |
|||
======= |
|||
|
|||
This library is released under the [MIT license](LICENSE). |
|||
@ -0,0 +1,57 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
use Symfony\Polyfill\Php72 as p; |
|||
|
|||
if (\PHP_VERSION_ID >= 70200) { |
|||
return; |
|||
} |
|||
|
|||
if (!defined('PHP_FLOAT_DIG')) { |
|||
define('PHP_FLOAT_DIG', 15); |
|||
} |
|||
if (!defined('PHP_FLOAT_EPSILON')) { |
|||
define('PHP_FLOAT_EPSILON', 2.2204460492503E-16); |
|||
} |
|||
if (!defined('PHP_FLOAT_MIN')) { |
|||
define('PHP_FLOAT_MIN', 2.2250738585072E-308); |
|||
} |
|||
if (!defined('PHP_FLOAT_MAX')) { |
|||
define('PHP_FLOAT_MAX', 1.7976931348623157E+308); |
|||
} |
|||
if (!defined('PHP_OS_FAMILY')) { |
|||
define('PHP_OS_FAMILY', p\Php72::php_os_family()); |
|||
} |
|||
|
|||
if ('\\' === \DIRECTORY_SEPARATOR && !function_exists('sapi_windows_vt100_support')) { |
|||
function sapi_windows_vt100_support($stream, $enable = null) { return p\Php72::sapi_windows_vt100_support($stream, $enable); } |
|||
} |
|||
if (!function_exists('stream_isatty')) { |
|||
function stream_isatty($stream) { return p\Php72::stream_isatty($stream); } |
|||
} |
|||
if (!function_exists('utf8_encode')) { |
|||
function utf8_encode($string) { return p\Php72::utf8_encode($string); } |
|||
} |
|||
if (!function_exists('utf8_decode')) { |
|||
function utf8_decode($string) { return p\Php72::utf8_decode($string); } |
|||
} |
|||
if (!function_exists('spl_object_id')) { |
|||
function spl_object_id($object) { return p\Php72::spl_object_id($object); } |
|||
} |
|||
if (!function_exists('mb_ord')) { |
|||
function mb_ord($string, $encoding = null) { return p\Php72::mb_ord($string, $encoding); } |
|||
} |
|||
if (!function_exists('mb_chr')) { |
|||
function mb_chr($codepoint, $encoding = null) { return p\Php72::mb_chr($codepoint, $encoding); } |
|||
} |
|||
if (!function_exists('mb_scrub')) { |
|||
function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); } |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
{ |
|||
"name": "symfony/polyfill-php72", |
|||
"type": "library", |
|||
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", |
|||
"keywords": ["polyfill", "shim", "compatibility", "portable"], |
|||
"homepage": "https://symfony.com", |
|||
"license": "MIT", |
|||
"authors": [ |
|||
{ |
|||
"name": "Nicolas Grekas", |
|||
"email": "p@tchwork.com" |
|||
}, |
|||
{ |
|||
"name": "Symfony Community", |
|||
"homepage": "https://symfony.com/contributors" |
|||
} |
|||
], |
|||
"require": { |
|||
"php": ">=7.1" |
|||
}, |
|||
"autoload": { |
|||
"psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, |
|||
"files": [ "bootstrap.php" ] |
|||
}, |
|||
"minimum-stability": "dev", |
|||
"extra": { |
|||
"branch-alias": { |
|||
"dev-main": "1.23-dev" |
|||
}, |
|||
"thanks": { |
|||
"name": "symfony/polyfill", |
|||
"url": "https://github.com/symfony/polyfill" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
Copyright (c) 2020 Fabien Potencier |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is furnished |
|||
to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
@ -0,0 +1,115 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
namespace Symfony\Polyfill\Php80; |
|||
|
|||
/** |
|||
* @author Ion Bazan <ion.bazan@gmail.com> |
|||
* @author Nico Oelgart <nicoswd@gmail.com> |
|||
* @author Nicolas Grekas <p@tchwork.com> |
|||
* |
|||
* @internal |
|||
*/ |
|||
final class Php80 |
|||
{ |
|||
public static function fdiv(float $dividend, float $divisor): float |
|||
{ |
|||
return @($dividend / $divisor); |
|||
} |
|||
|
|||
public static function get_debug_type($value): string |
|||
{ |
|||
switch (true) { |
|||
case null === $value: return 'null'; |
|||
case \is_bool($value): return 'bool'; |
|||
case \is_string($value): return 'string'; |
|||
case \is_array($value): return 'array'; |
|||
case \is_int($value): return 'int'; |
|||
case \is_float($value): return 'float'; |
|||
case \is_object($value): break; |
|||
case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class'; |
|||
default: |
|||
if (null === $type = @get_resource_type($value)) { |
|||
return 'unknown'; |
|||
} |
|||
|
|||
if ('Unknown' === $type) { |
|||
$type = 'closed'; |
|||
} |
|||
|
|||
return "resource ($type)"; |
|||
} |
|||
|
|||
$class = \get_class($value); |
|||
|
|||
if (false === strpos($class, '@')) { |
|||
return $class; |
|||
} |
|||
|
|||
return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous'; |
|||
} |
|||
|
|||
public static function get_resource_id($res): int |
|||
{ |
|||
if (!\is_resource($res) && null === @get_resource_type($res)) { |
|||
throw new \TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res))); |
|||
} |
|||
|
|||
return (int) $res; |
|||
} |
|||
|
|||
public static function preg_last_error_msg(): string |
|||
{ |
|||
switch (preg_last_error()) { |
|||
case \PREG_INTERNAL_ERROR: |
|||
return 'Internal error'; |
|||
case \PREG_BAD_UTF8_ERROR: |
|||
return 'Malformed UTF-8 characters, possibly incorrectly encoded'; |
|||
case \PREG_BAD_UTF8_OFFSET_ERROR: |
|||
return 'The offset did not correspond to the beginning of a valid UTF-8 code point'; |
|||
case \PREG_BACKTRACK_LIMIT_ERROR: |
|||
return 'Backtrack limit exhausted'; |
|||
case \PREG_RECURSION_LIMIT_ERROR: |
|||
return 'Recursion limit exhausted'; |
|||
case \PREG_JIT_STACKLIMIT_ERROR: |
|||
return 'JIT stack limit exhausted'; |
|||
case \PREG_NO_ERROR: |
|||
return 'No error'; |
|||
default: |
|||
return 'Unknown error'; |
|||
} |
|||
} |
|||
|
|||
public static function str_contains(string $haystack, string $needle): bool |
|||
{ |
|||
return '' === $needle || false !== strpos($haystack, $needle); |
|||
} |
|||
|
|||
public static function str_starts_with(string $haystack, string $needle): bool |
|||
{ |
|||
return 0 === strncmp($haystack, $needle, \strlen($needle)); |
|||
} |
|||
|
|||
public static function str_ends_with(string $haystack, string $needle): bool |
|||
{ |
|||
if ('' === $needle || $needle === $haystack) { |
|||
return true; |
|||
} |
|||
|
|||
if ('' === $haystack) { |
|||
return false; |
|||
} |
|||
|
|||
$needleLength = \strlen($needle); |
|||
|
|||
return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); |
|||
} |
|||
} |
|||
@ -0,0 +1,103 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This file is part of the Symfony package. |
|||
* |
|||
* (c) Fabien Potencier <fabien@symfony.com> |
|||
* |
|||
* For the full copyright and license information, please view the LICENSE |
|||
* file that was distributed with this source code. |
|||
*/ |
|||
|
|||
namespace Symfony\Polyfill\Php80; |
|||
|
|||
/** |
|||
* @author Fedonyuk Anton <info@ensostudio.ru> |
|||
* |
|||
* @internal |
|||
*/ |
|||
class PhpToken implements \Stringable |
|||
{ |
|||
/** |
|||
* @var int |
|||
*/ |
|||
public $id; |
|||
|
|||
/** |
|||
* @var string |
|||
*/ |
|||
public $text; |
|||
|
|||
/** |
|||
* @var int |
|||
*/ |
|||
public $line; |
|||
|
|||
/** |
|||
* @var int |
|||
*/ |
|||
public $pos; |
|||
|
|||
public function __construct(int $id, string $text, int $line = -1, int $position = -1) |
|||
{ |
|||
$this->id = $id; |
|||
$this->text = $text; |
|||
$this->line = $line; |
|||
$this->pos = $position; |
|||
} |
|||
|
|||
public function getTokenName(): ?string |
|||
{ |
|||
if ('UNKNOWN' === $name = token_name($this->id)) { |
|||
$name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; |
|||
} |
|||
|
|||
return $name; |
|||
} |
|||
|
|||
/** |
|||
* @param int|string|array $kind |
|||
*/ |
|||
public function is($kind): bool |
|||
{ |
|||
foreach ((array) $kind as $value) { |
|||
if (\in_array($value, [$this->id, $this->text], true)) { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public function isIgnorable(): bool |
|||
{ |
|||
return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); |
|||
} |
|||
|
|||
public function __toString(): string |
|||
{ |
|||
return (string) $this->text; |
|||
} |
|||
|
|||
/** |
|||
* @return static[] |
|||
*/ |
|||
public static function tokenize(string $code, int $flags = 0): array |
|||
{ |
|||
$line = 1; |
|||
$position = 0; |
|||
$tokens = token_get_all($code, $flags); |
|||
foreach ($tokens as $index => $token) { |
|||
if (\is_string($token)) { |
|||
$id = \ord($token); |
|||
$text = $token; |
|||
} else { |
|||
[$id, $text, $line] = $token; |
|||
} |
|||
$tokens[$index] = new static($id, $text, $line, $position); |
|||
$position += \strlen($text); |
|||
} |
|||
|
|||
return $tokens; |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
Symfony Polyfill / Php80 |
|||
======================== |
|||
|
|||
This component provides features added to PHP 8.0 core: |
|||
|
|||
- `Stringable` interface |
|||
- [`fdiv`](https://php.net/fdiv) |
|||
- `ValueError` class |
|||
- `UnhandledMatchError` class |
|||
- `FILTER_VALIDATE_BOOL` constant |
|||
- [`get_debug_type`](https://php.net/get_debug_type) |
|||
- [`preg_last_error_msg`](https://php.net/preg_last_error_msg) |
|||
- [`str_contains`](https://php.net/str_contains) |
|||
- [`str_starts_with`](https://php.net/str_starts_with) |
|||
- [`str_ends_with`](https://php.net/str_ends_with) |
|||
- [`get_resource_id`](https://php.net/get_resource_id) |
|||
|
|||
More information can be found in the |
|||
[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). |
|||
|
|||
License |
|||
======= |
|||
|
|||
This library is released under the [MIT license](LICENSE). |
|||
@ -0,0 +1,22 @@ |
|||
<?php |
|||
|
|||
#[Attribute(Attribute::TARGET_CLASS)] |
|||
final class Attribute |
|||
{ |
|||
public const TARGET_CLASS = 1; |
|||
public const TARGET_FUNCTION = 2; |
|||
public const TARGET_METHOD = 4; |
|||
public const TARGET_PROPERTY = 8; |
|||
public const TARGET_CLASS_CONSTANT = 16; |
|||
public const TARGET_PARAMETER = 32; |
|||
public const TARGET_ALL = 63; |
|||
public const IS_REPEATABLE = 64; |
|||
|
|||
/** @var int */ |
|||
public $flags; |
|||
|
|||
public function __construct(int $flags = self::TARGET_ALL) |
|||
{ |
|||
$this->flags = $flags; |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
<?php |
|||
|
|||
if (\PHP_VERSION_ID < 80000 && \extension_loaded('tokenizer')) { |
|||
class PhpToken extends Symfony\Polyfill\Php80\PhpToken |
|||
{ |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
<?php |
|||
|
|||
if (\PHP_VERSION_ID < 80000) { |
|||
interface Stringable |
|||
{ |
|||
/** |
|||
* @return string |
|||
*/ |
|||
public function __toString(); |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
<?php |
|||
|
|||
if (\PHP_VERSION_ID < 80000) { |
|||
class UnhandledMatchError extends Error |
|||
{ |
|||
} |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue