removed old stuff, moved libraries, corrected paths
This commit is contained in:
parent
71d4efd0eb
commit
5b515c750b
2
api.php
2
api.php
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
require_once 'system/autoload.inc.php'; //SYSTEM Classes
|
||||
require_once 'lib/system/autoload.inc.php'; //SYSTEM Classes
|
||||
require_once 'slingit/autoload.inc'; //Project Classes
|
||||
|
||||
require_once 'config.php';
|
||||
|
||||
@ -12,7 +12,7 @@ $slingit_config=array(array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_ERRORREPORTING
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_BASEURL, 'http://www.slingit.org/sai.php?'),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE, 'Slingit - Admin Bereich'),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_COPYRIGHT, '<a href="http://www.slingit.org/" target="_blank"></a> © WebCraft Media 2013'),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL, 'system/'),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL, 'lib/system/'),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_LANGS, array('deDE')),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_LANG, 'deDE'),
|
||||
array(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH, '/home/web/webdir/slingit/slingit/files/log/'));
|
||||
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
require_once 'system/autoload.inc.php'; //SYSTEM Classes
|
||||
require_once 'lib/system/autoload.inc.php'; //SYSTEM Classes
|
||||
require_once 'slingit/autoload.inc'; //Project Classes
|
||||
|
||||
require_once 'config.php';
|
||||
|
||||
2
sai.php
2
sai.php
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
require_once 'system/autoload.inc.php'; //SYSTEM Classes
|
||||
require_once 'lib/system/autoload.inc.php'; //SYSTEM Classes
|
||||
require_once 'slingit/autoload.inc'; //Project Classes
|
||||
|
||||
require_once 'config.php'; //Server config
|
||||
|
||||
@ -1,51 +0,0 @@
|
||||
/*custom_button------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
.btn-green {
|
||||
background-color: hsl(97, 69%, 25%) !important;
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#68d326", endColorstr="#356b13");
|
||||
background-image: -khtml-gradient(linear, left top, left bottom, from(#68d326), to(#356b13));
|
||||
background-image: -moz-linear-gradient(top, #68d326, #356b13);
|
||||
background-image: -ms-linear-gradient(top, #68d326, #356b13);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #68d326), color-stop(100%, #356b13));
|
||||
background-image: -webkit-linear-gradient(top, #68d326, #356b13);
|
||||
background-image: -o-linear-gradient(top, #68d326, #356b13);
|
||||
background-image: linear-gradient(#68d326, #356b13);
|
||||
border-color: #356b13 #356b13 hsl(97, 69%, 19%);
|
||||
color: #fff !important;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.39);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.btn-red {
|
||||
background-color: hsl(0, 100%, 35%) !important;
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#fe2d2d", endColorstr="#b20000");
|
||||
background-image: -khtml-gradient(linear, left top, left bottom, from(#fe2d2d), to(#b20000));
|
||||
background-image: -moz-linear-gradient(top, #fe2d2d, #b20000);
|
||||
background-image: -ms-linear-gradient(top, #fe2d2d, #b20000);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fe2d2d), color-stop(100%, #b20000));
|
||||
background-image: -webkit-linear-gradient(top, #fe2d2d, #b20000);
|
||||
background-image: -o-linear-gradient(top, #fe2d2d, #b20000);
|
||||
background-image: linear-gradient(#fe2d2d, #b20000);
|
||||
border-color: #b20000 #b20000 hsl(0, 100%, 29%);
|
||||
color: #fff !important;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.39);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.btn-grey {
|
||||
background-color: hsl(70, 0%, 32%) !important;
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#999999", endColorstr="#515151");
|
||||
background-image: -khtml-gradient(linear, left top, left bottom, from(#999999), to(#515151));
|
||||
background-image: -moz-linear-gradient(top, #999999, #515151);
|
||||
background-image: -ms-linear-gradient(top, #999999, #515151);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #999999), color-stop(100%, #515151));
|
||||
background-image: -webkit-linear-gradient(top, #999999, #515151);
|
||||
background-image: -o-linear-gradient(top, #999999, #515151);
|
||||
background-image: linear-gradient(#999999, #515151);
|
||||
border-color: #515151 #515151 hsl(70, 0%, 25%);
|
||||
color: #fff !important;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.46);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
@ -1,61 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<title>HashMask - Demo</title>
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.js"></script>
|
||||
<script type="text/javascript" src="jquery.sha1.js"></script>
|
||||
<script type="text/javascript" src="jquery.sparkline.js"></script>
|
||||
<script type="text/javascript" src="jquery.hashmask.js"></script>
|
||||
|
||||
<style type="text/css">
|
||||
/* <![CDATA[ */
|
||||
body {
|
||||
text-align: center;
|
||||
font-family: "Myriad Pro", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
color: #666;
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
#username, #password
|
||||
{
|
||||
font-size: 2em;
|
||||
width: 350px;
|
||||
}
|
||||
/* ]]> */
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Login to HashMask Demo</h1>
|
||||
|
||||
<form id="loginForm" action="login" method="post">
|
||||
<p>
|
||||
<label for="username">Username</label>
|
||||
<input type="text" name="username" id="username" value="" size="20" />
|
||||
</p>
|
||||
<p>
|
||||
<label for="password">Password</label>
|
||||
<input type="password" name="password" id="password" value="" size="20" />
|
||||
</p>
|
||||
<p class="submit">
|
||||
<input type="submit" name="submit" id="submit" value="Login" />
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<div id="hello"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
$(function() {
|
||||
$("#password").hashmask();
|
||||
});
|
||||
// ]]>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,105 +0,0 @@
|
||||
/**
|
||||
* HashMask - a new approach to password masking security
|
||||
*
|
||||
* REQUIRES:
|
||||
* jquery.sparkline.js
|
||||
* a one way hashing method, currently sha1, provided by jquery.sha1.js
|
||||
*
|
||||
* @author Chris Dary <umbrae@gmail.com>
|
||||
* @copyright Copyright (c) 2009 {@link http://arc90.com Arc90 Inc.}
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php
|
||||
**/
|
||||
|
||||
(function($) {
|
||||
$.hashmask = {
|
||||
settings: {
|
||||
hashFunction: $.sha1,
|
||||
useColorAsHint: true,
|
||||
sparkInterval: 500,
|
||||
sparklineOptions: {
|
||||
width: '100px',
|
||||
height: 'auto',
|
||||
lineColor: '#69C',
|
||||
spotColor: false,
|
||||
minSpotColor: false,
|
||||
maxSpotColor: false
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.hashmask = function(settings) {
|
||||
/**
|
||||
* @var object Contains an associative array of all settings for hashmask.
|
||||
**/
|
||||
settings = $.extend({}, $.hashmask.settings, settings);
|
||||
|
||||
/**
|
||||
* Add hashmask hint to an input. The input must be of type password.
|
||||
*
|
||||
* @param selector string A jquery capable selector, as defined here: http://docs.jquery.com/Selectors
|
||||
* @return void
|
||||
**/
|
||||
return this.each(function() {
|
||||
var $sparkline, sparkTimeout, i;
|
||||
var $this = $(this);
|
||||
|
||||
if(!$this.is('input[type="password"]'))
|
||||
{
|
||||
throw new Error('HashMask may only be used on inputs of type password.');
|
||||
}
|
||||
|
||||
$sparkline = $('<div id="' + this.id + '-jquery-hashmask-sparkline"></div>');
|
||||
$sparkline.css({
|
||||
position: 'absolute',
|
||||
top: $this.offset().top + parseInt($this.css('borderTopWidth'), 10),
|
||||
left: $this.offset().left + $this.outerWidth() - parseInt($this.css('borderRightWidth'), 10) - parseInt(settings.sparklineOptions.width, 10),
|
||||
width: settings.sparklineOptions.width,
|
||||
height: $this.outerHeight()
|
||||
});
|
||||
$sparkline.click(function() { $this.focus(); });
|
||||
|
||||
$this.parents('form').append($sparkline);
|
||||
|
||||
$this.keyup(function(e) {
|
||||
window.clearTimeout(sparkTimeout);
|
||||
|
||||
var inputVal = $this.val();
|
||||
if(inputVal === "")
|
||||
{
|
||||
$sparkline.html("");
|
||||
return;
|
||||
}
|
||||
|
||||
var inputHash = settings.hashFunction($this.val()).substr(0,20);
|
||||
var inputHexArr = inputHash.split('');
|
||||
var inputDecArr = [];
|
||||
|
||||
/* Convert our hex string array into decimal numbers for sparkline consumption */
|
||||
for(i=0; i < inputHexArr.length; i++)
|
||||
{
|
||||
inputDecArr.push(parseInt(inputHexArr[i], 16));
|
||||
}
|
||||
|
||||
var fillColor;
|
||||
if(settings.useColorAsHint)
|
||||
{
|
||||
fillColor = '#' + inputHash.substr(0,6);
|
||||
}
|
||||
else
|
||||
{
|
||||
fillColor = settings.sparklineOptions.fillColor
|
||||
}
|
||||
|
||||
sparkTimeout = window.setTimeout(function() {
|
||||
$sparkline.sparkline(inputDecArr, $.extend( settings.sparklineOptions, {
|
||||
height: (settings.sparklineOptions.height == 'auto' ? $this.outerHeight() - parseInt($this.css('borderBottomWidth'), 10) - parseInt($this.css('borderTopWidth'), 10): settings.sparklineOptions.height),
|
||||
fillColor: fillColor
|
||||
}));
|
||||
}, settings.sparkInterval);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
@ -1,269 +0,0 @@
|
||||
/*
|
||||
* jQuery MD5 Plugin 1.2.1
|
||||
* https://github.com/blueimp/jQuery-MD5
|
||||
*
|
||||
* Copyright 2010, Sebastian Tschan
|
||||
* https://blueimp.net
|
||||
*
|
||||
* Licensed under the MIT license:
|
||||
* http://creativecommons.org/licenses/MIT/
|
||||
*
|
||||
* Based on
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
||||
* Distributed under the BSD License
|
||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
||||
*/
|
||||
|
||||
/*jslint bitwise: true */
|
||||
/*global unescape, jQuery */
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||
* to work around bugs in some JS interpreters.
|
||||
*/
|
||||
function safe_add(x, y) {
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
|
||||
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitwise rotate a 32-bit number to the left.
|
||||
*/
|
||||
function bit_rol(num, cnt) {
|
||||
return (num << cnt) | (num >>> (32 - cnt));
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions implement the four basic operations the algorithm uses.
|
||||
*/
|
||||
function md5_cmn(q, a, b, x, s, t) {
|
||||
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
||||
}
|
||||
function md5_ff(a, b, c, d, x, s, t) {
|
||||
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||
}
|
||||
function md5_gg(a, b, c, d, x, s, t) {
|
||||
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||
}
|
||||
function md5_hh(a, b, c, d, x, s, t) {
|
||||
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
||||
}
|
||||
function md5_ii(a, b, c, d, x, s, t) {
|
||||
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
||||
*/
|
||||
function binl_md5(x, len) {
|
||||
/* append padding */
|
||||
x[len >> 5] |= 0x80 << ((len) % 32);
|
||||
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
||||
|
||||
var i, olda, oldb, oldc, oldd,
|
||||
a = 1732584193,
|
||||
b = -271733879,
|
||||
c = -1732584194,
|
||||
d = 271733878;
|
||||
|
||||
for (i = 0; i < x.length; i += 16) {
|
||||
olda = a;
|
||||
oldb = b;
|
||||
oldc = c;
|
||||
oldd = d;
|
||||
|
||||
a = md5_ff(a, b, c, d, x[i], 7, -680876936);
|
||||
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
||||
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
||||
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
||||
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
||||
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
||||
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
||||
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
||||
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
||||
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
||||
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
||||
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
||||
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
||||
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
||||
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
||||
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
||||
|
||||
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
||||
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
||||
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
||||
b = md5_gg(b, c, d, a, x[i], 20, -373897302);
|
||||
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
||||
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
||||
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
||||
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
||||
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
||||
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
||||
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
||||
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
||||
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
||||
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
||||
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
||||
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
||||
|
||||
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
||||
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
||||
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
||||
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
||||
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
||||
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
||||
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
||||
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
||||
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
||||
d = md5_hh(d, a, b, c, x[i], 11, -358537222);
|
||||
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
||||
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
||||
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
||||
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
||||
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
||||
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
||||
|
||||
a = md5_ii(a, b, c, d, x[i], 6, -198630844);
|
||||
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
||||
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
||||
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
||||
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
||||
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
||||
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
||||
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
||||
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
||||
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
||||
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
||||
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
||||
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
||||
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
||||
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
||||
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
||||
|
||||
a = safe_add(a, olda);
|
||||
b = safe_add(b, oldb);
|
||||
c = safe_add(c, oldc);
|
||||
d = safe_add(d, oldd);
|
||||
}
|
||||
return [a, b, c, d];
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a string
|
||||
*/
|
||||
function binl2rstr(input) {
|
||||
var i,
|
||||
output = '';
|
||||
for (i = 0; i < input.length * 32; i += 8) {
|
||||
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a raw string to an array of little-endian words
|
||||
* Characters >255 have their high-byte silently ignored.
|
||||
*/
|
||||
function rstr2binl(input) {
|
||||
var i,
|
||||
output = [];
|
||||
output[(input.length >> 2) - 1] = undefined;
|
||||
for (i = 0; i < output.length; i += 1) {
|
||||
output[i] = 0;
|
||||
}
|
||||
for (i = 0; i < input.length * 8; i += 8) {
|
||||
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of a raw string
|
||||
*/
|
||||
function rstr_md5(s) {
|
||||
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the HMAC-MD5, of a key and some data (raw strings)
|
||||
*/
|
||||
function rstr_hmac_md5(key, data) {
|
||||
var i,
|
||||
bkey = rstr2binl(key),
|
||||
ipad = [],
|
||||
opad = [],
|
||||
hash;
|
||||
ipad[15] = opad[15] = undefined;
|
||||
if (bkey.length > 16) {
|
||||
bkey = binl_md5(bkey, key.length * 8);
|
||||
}
|
||||
for (i = 0; i < 16; i += 1) {
|
||||
ipad[i] = bkey[i] ^ 0x36363636;
|
||||
opad[i] = bkey[i] ^ 0x5C5C5C5C;
|
||||
}
|
||||
hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
|
||||
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a raw string to a hex string
|
||||
*/
|
||||
function rstr2hex(input) {
|
||||
var hex_tab = '0123456789abcdef',
|
||||
output = '',
|
||||
x,
|
||||
i;
|
||||
for (i = 0; i < input.length; i += 1) {
|
||||
x = input.charCodeAt(i);
|
||||
output += hex_tab.charAt((x >>> 4) & 0x0F) +
|
||||
hex_tab.charAt(x & 0x0F);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Encode a string as utf-8
|
||||
*/
|
||||
function str2rstr_utf8(input) {
|
||||
return unescape(encodeURIComponent(input));
|
||||
}
|
||||
|
||||
/*
|
||||
* Take string arguments and return either raw or hex encoded strings
|
||||
*/
|
||||
function raw_md5(s) {
|
||||
return rstr_md5(str2rstr_utf8(s));
|
||||
}
|
||||
function hex_md5(s) {
|
||||
return rstr2hex(raw_md5(s));
|
||||
}
|
||||
function raw_hmac_md5(k, d) {
|
||||
return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
|
||||
}
|
||||
function hex_hmac_md5(k, d) {
|
||||
return rstr2hex(raw_hmac_md5(k, d));
|
||||
}
|
||||
|
||||
$.md5 = function (string, key, raw) {
|
||||
if (!key) {
|
||||
if (!raw) {
|
||||
return hex_md5(string);
|
||||
} else {
|
||||
return raw_md5(string);
|
||||
}
|
||||
}
|
||||
if (!raw) {
|
||||
return hex_hmac_md5(key, string);
|
||||
} else {
|
||||
return raw_hmac_md5(key, string);
|
||||
}
|
||||
};
|
||||
|
||||
}(typeof jQuery === 'function' ? jQuery : this));
|
||||
@ -1,170 +0,0 @@
|
||||
|
||||
/**
|
||||
* jQuery SHA1 hash algorithm function
|
||||
*
|
||||
* <code>
|
||||
* Calculate the sha1 hash of a String
|
||||
* String $.sha1 ( String str )
|
||||
* </code>
|
||||
*
|
||||
* Calculates the sha1 hash of str using the US Secure Hash Algorithm 1.
|
||||
* SHA-1 the Secure Hash Algorithm (SHA) was developed by NIST and is specified in the Secure Hash Standard (SHS, FIPS 180).
|
||||
* This script is used to process variable length message into a fixed-length output using the SHA-1 algorithm. It is fully compatible with UTF-8 encoding.
|
||||
* If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag).
|
||||
* This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
|
||||
*
|
||||
* Example
|
||||
* Code
|
||||
* <code>
|
||||
* $.sha1("I'm Persian.");
|
||||
* </code>
|
||||
* Result
|
||||
* <code>
|
||||
* "1d302f9dc925d62fc859055999d2052e274513ed"
|
||||
* </code>
|
||||
*
|
||||
* @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >
|
||||
* @link http://www.semnanweb.com/jquery-plugin/sha1.html
|
||||
* @see http://www.webtoolkit.info/
|
||||
* @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
|
||||
* @param {jQuery} {sha1:function(string))
|
||||
* @return string
|
||||
*/
|
||||
|
||||
(function($){
|
||||
|
||||
var rotateLeft = function(lValue, iShiftBits) {
|
||||
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
|
||||
}
|
||||
|
||||
var lsbHex = function(value) {
|
||||
var string = "";
|
||||
var i;
|
||||
var vh;
|
||||
var vl;
|
||||
for(i = 0;i <= 6;i += 2) {
|
||||
vh = (value>>>(i * 4 + 4))&0x0f;
|
||||
vl = (value>>>(i*4))&0x0f;
|
||||
string += vh.toString(16) + vl.toString(16);
|
||||
}
|
||||
return string;
|
||||
};
|
||||
|
||||
var cvtHex = function(value) {
|
||||
var string = "";
|
||||
var i;
|
||||
var v;
|
||||
for(i = 7;i >= 0;i--) {
|
||||
v = (value>>>(i * 4))&0x0f;
|
||||
string += v.toString(16);
|
||||
}
|
||||
return string;
|
||||
};
|
||||
|
||||
var uTF8Encode = function(string) {
|
||||
string = string.replace(/\x0d\x0a/g, "\x0a");
|
||||
var output = "";
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
var c = string.charCodeAt(n);
|
||||
if (c < 128) {
|
||||
output += String.fromCharCode(c);
|
||||
} else if ((c > 127) && (c < 2048)) {
|
||||
output += String.fromCharCode((c >> 6) | 192);
|
||||
output += String.fromCharCode((c & 63) | 128);
|
||||
} else {
|
||||
output += String.fromCharCode((c >> 12) | 224);
|
||||
output += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
output += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
};
|
||||
|
||||
$.extend({
|
||||
sha1: function(string) {
|
||||
var blockstart;
|
||||
var i, j;
|
||||
var W = new Array(80);
|
||||
var H0 = 0x67452301;
|
||||
var H1 = 0xEFCDAB89;
|
||||
var H2 = 0x98BADCFE;
|
||||
var H3 = 0x10325476;
|
||||
var H4 = 0xC3D2E1F0;
|
||||
var A, B, C, D, E;
|
||||
var tempValue;
|
||||
string = uTF8Encode(string);
|
||||
var stringLength = string.length;
|
||||
var wordArray = new Array();
|
||||
for(i = 0;i < stringLength - 3;i += 4) {
|
||||
j = string.charCodeAt(i)<<24 | string.charCodeAt(i + 1)<<16 | string.charCodeAt(i + 2)<<8 | string.charCodeAt(i + 3);
|
||||
wordArray.push(j);
|
||||
}
|
||||
switch(stringLength % 4) {
|
||||
case 0:
|
||||
i = 0x080000000;
|
||||
break;
|
||||
case 1:
|
||||
i = string.charCodeAt(stringLength - 1)<<24 | 0x0800000;
|
||||
break;
|
||||
case 2:
|
||||
i = string.charCodeAt(stringLength - 2)<<24 | string.charCodeAt(stringLength - 1)<<16 | 0x08000;
|
||||
break;
|
||||
case 3:
|
||||
i = string.charCodeAt(stringLength - 3)<<24 | string.charCodeAt(stringLength - 2)<<16 | string.charCodeAt(stringLength - 1)<<8 | 0x80;
|
||||
break;
|
||||
}
|
||||
wordArray.push(i);
|
||||
while((wordArray.length % 16) != 14 ) wordArray.push(0);
|
||||
wordArray.push(stringLength>>>29);
|
||||
wordArray.push((stringLength<<3)&0x0ffffffff);
|
||||
for(blockstart = 0;blockstart < wordArray.length;blockstart += 16) {
|
||||
for(i = 0;i < 16;i++) W[i] = wordArray[blockstart+i];
|
||||
for(i = 16;i <= 79;i++) W[i] = rotateLeft(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
|
||||
A = H0;
|
||||
B = H1;
|
||||
C = H2;
|
||||
D = H3;
|
||||
E = H4;
|
||||
for(i = 0;i <= 19;i++) {
|
||||
tempValue = (rotateLeft(A, 5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
|
||||
E = D;
|
||||
D = C;
|
||||
C = rotateLeft(B, 30);
|
||||
B = A;
|
||||
A = tempValue;
|
||||
}
|
||||
for(i = 20;i <= 39;i++) {
|
||||
tempValue = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
|
||||
E = D;
|
||||
D = C;
|
||||
C = rotateLeft(B, 30);
|
||||
B = A;
|
||||
A = tempValue;
|
||||
}
|
||||
for(i = 40;i <= 59;i++) {
|
||||
tempValue = (rotateLeft(A, 5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
|
||||
E = D;
|
||||
D = C;
|
||||
C = rotateLeft(B, 30);
|
||||
B = A;
|
||||
A = tempValue;
|
||||
}
|
||||
for(i = 60;i <= 79;i++) {
|
||||
tempValue = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
|
||||
E = D;
|
||||
D = C;
|
||||
C = rotateLeft(B, 30);
|
||||
B = A;
|
||||
A = tempValue;
|
||||
}
|
||||
H0 = (H0 + A) & 0x0ffffffff;
|
||||
H1 = (H1 + B) & 0x0ffffffff;
|
||||
H2 = (H2 + C) & 0x0ffffffff;
|
||||
H3 = (H3 + D) & 0x0ffffffff;
|
||||
H4 = (H4 + E) & 0x0ffffffff;
|
||||
}
|
||||
var tempValue = cvtHex(H0) + cvtHex(H1) + cvtHex(H2) + cvtHex(H3) + cvtHex(H4);
|
||||
return tempValue.toLowerCase();
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
@ -1,936 +0,0 @@
|
||||
/**
|
||||
*
|
||||
* jquery.sparkline.js
|
||||
*
|
||||
* v1.4.2
|
||||
* (c) Splunk, Inc
|
||||
* Contact: Gareth Watts (gareth@splunk.com)
|
||||
* http://omnipotent.net/jquery.sparkline/
|
||||
*
|
||||
* Generates inline sparkline charts from data supplied either to the method
|
||||
* or inline in HTML
|
||||
*
|
||||
* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag
|
||||
* (Firefox 2.0+, Safari, Opera, etc)
|
||||
*
|
||||
* License: New BSD License
|
||||
*
|
||||
* Copyright (c) 2009, Splunk Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* * Neither the name of Splunk Inc nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* Usage:
|
||||
* $(selector).sparkline(values, options)
|
||||
*
|
||||
* If values is undefined or set to 'html' then the data values are read from the specified tag:
|
||||
* <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p>
|
||||
* $('.sparkline').sparkline();
|
||||
* There must be no spaces in the enclosed data set
|
||||
*
|
||||
* Otherwise values must be an array of numbers
|
||||
* <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p>
|
||||
* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
|
||||
*
|
||||
* For line charts, x values can also be specified:
|
||||
* <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>
|
||||
* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
|
||||
*
|
||||
* Supported options:
|
||||
* lineColor - Color of the line used for the chart
|
||||
* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
|
||||
* width - Width of the chart - Defaults to 3 times the number of values in pixels
|
||||
* height - Height of the chart - Defaults to the height of the containing element
|
||||
* chartRangeMin - Specify the minimum value to use for the range of the chart - Defaults to the minimum value supplied
|
||||
* chartRangeMax - Specify the maximum value to use for the range of the chart - Defaults to the maximum value supplied
|
||||
* composite - If true then don't erase any existing chart attached to the tag, but draw
|
||||
* another chart over the top - Note that width and height are ignored if an
|
||||
* existing chart is detected.
|
||||
*
|
||||
* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
|
||||
* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
|
||||
* line - Line chart. Options:
|
||||
* spotColor - Set to '' to not end each line in a circular spot
|
||||
* minSpotColor - If set, color of spot at minimum value
|
||||
* maxSpotColor - If set, color of spot at maximum value
|
||||
* spotRadius - Radius in pixels
|
||||
* normalRangeMin
|
||||
* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
|
||||
* or expected range of values
|
||||
* normalRangeColor - Color to use for the above bar
|
||||
* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
|
||||
*
|
||||
* bar - Bar chart. Options:
|
||||
* barColor - Color of bars for postive values
|
||||
* negBarColor - Color of bars for negative values
|
||||
* barWidth - Width of bars in pixels
|
||||
* barSpacing - Gap between bars in pixels
|
||||
* zeroAxis - Centers the y-axis around zero if true
|
||||
*
|
||||
* tristate - Charts values of win (>0), lose (<0) or draw (=0)
|
||||
* posBarColor - Color of win values
|
||||
* negBarColor - Color of lose values
|
||||
* zeroBarColor - Color of draw values
|
||||
* barWidth - Width of bars in pixels
|
||||
* barSpacing - Gap between bars in pixels
|
||||
* colorMap - Optional mappnig of values to colors to override the *BarColor values above
|
||||
*
|
||||
* discrete - Options:
|
||||
* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
|
||||
* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
|
||||
* thresholdColor
|
||||
*
|
||||
* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
|
||||
* options:
|
||||
* targetColor - The color of the vertical target marker
|
||||
* targetWidth - The width of the target marker in pixels
|
||||
* performanceColor - The color of the performance measure horizontal bar
|
||||
* rangeColors - Colors to use for each qualitative range background color
|
||||
*
|
||||
* pie - Pie chart. Options:
|
||||
* sliceColors - An array of colors to use for pie slices
|
||||
* offset - Angle in degrees to offset the first slice - Try -90 or +90
|
||||
*
|
||||
* box - Box plot. Options:
|
||||
* raw - Set to true to supply pre-computed plot points as values
|
||||
* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
|
||||
* When set to false you can supply any number of values and the box plot will
|
||||
* be computed for you. Default is false.
|
||||
* showOutliers - Set to true (default) to display outliers as circles
|
||||
* outlierIRQ - Interquartile range used to determine outliers. Default 1.5
|
||||
* boxLineColor - Outline color of the box
|
||||
* boxFillColor - Fill color for the box
|
||||
* whiskerColor - Line color used for whiskers
|
||||
* outlierLineColor - Outline color of outlier circles
|
||||
* outlierFillColor - Fill color of the outlier circles
|
||||
* spotRadius - Radius of outlier circles
|
||||
* medianColor - Line color of the median line
|
||||
* target - Draw a target cross hair at the supplied value (default undefined)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Examples:
|
||||
* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
|
||||
* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
|
||||
* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
|
||||
* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
|
||||
* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
|
||||
* $('#pie').sparkline([1,1,2], { type:'pie' });
|
||||
*/
|
||||
|
||||
|
||||
(function($) {
|
||||
|
||||
// Provide a cross-browser interface to a few simple drawing primitives
|
||||
$.fn.simpledraw = function(width, height, use_existing) {
|
||||
if (use_existing && this[0].vcanvas) return this[0].vcanvas;
|
||||
if (width==undefined) width=$(this).innerWidth();
|
||||
if (height==undefined) height=$(this).innerHeight();
|
||||
if ($.browser.hasCanvas) {
|
||||
return new vcanvas_canvas(width, height, this);
|
||||
} else if ($.browser.msie) {
|
||||
return new vcanvas_vml(width, height, this);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
var pending = [];
|
||||
|
||||
$.fn.sparkline = function(uservalues, options) {
|
||||
var options = $.extend({
|
||||
type : 'line',
|
||||
lineColor : '#00f',
|
||||
fillColor : '#cdf',
|
||||
defaultPixelsPerValue : 3,
|
||||
width : 'auto',
|
||||
height : 'auto',
|
||||
composite : false
|
||||
}, options ? options : {});
|
||||
|
||||
return this.each(function() {
|
||||
var render = function() {
|
||||
var values = (uservalues=='html' || uservalues==undefined) ? $(this).text().split(',') : uservalues;
|
||||
|
||||
var width = options.width=='auto' ? values.length*options.defaultPixelsPerValue : options.width;
|
||||
if (options.height == 'auto') {
|
||||
if (!options.composite || !this.vcanvas) {
|
||||
// must be a better way to get the line height
|
||||
var tmp = document.createElement('span');
|
||||
tmp.innerHTML = 'a';
|
||||
$(this).html(tmp);
|
||||
height = $(tmp).innerHeight();
|
||||
$(tmp).remove();
|
||||
}
|
||||
} else {
|
||||
height = options.height;
|
||||
}
|
||||
|
||||
$.fn.sparkline[options.type].call(this, values, options, width, height);
|
||||
}
|
||||
// jQuery 1.3.0 completely changed the meaning of :hidden :-/
|
||||
if (($(this).html() && $(this).is(':hidden')) || ($.fn.jquery < "1.3.0" && $(this).parents().is(':hidden'))) {
|
||||
pending.push([this, render]);
|
||||
} else {
|
||||
render.call(this);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
$.sparkline_display_visible = function() {
|
||||
for (var i=pending.length-1; i>=0; i--) {
|
||||
var el = pending[i][0];
|
||||
if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {
|
||||
pending[i][1].call(el);
|
||||
pending.splice(i, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.sparkline.line = function(values, options, width, height) {
|
||||
var options = $.extend({
|
||||
spotColor : '#f80',
|
||||
spotRadius : 1.5,
|
||||
minSpotColor : '#f80',
|
||||
maxSpotColor : '#f80',
|
||||
normalRangeMin : undefined,
|
||||
normalRangeMax : undefined,
|
||||
normalRangeColor : '#ccc',
|
||||
chartRangeMin : undefined,
|
||||
chartRangeMax : undefined
|
||||
}, options ? options : {});
|
||||
|
||||
var xvalues = [], yvalues = [];
|
||||
for (i=0; i<values.length; i++) {
|
||||
var isstr = typeof(values[i])=='string';
|
||||
var isarray = typeof(values[i])=='object' && values[i] instanceof Array;
|
||||
var sp = isstr && values[i].split(':');
|
||||
if (isstr && sp.length == 2) { // x:y
|
||||
xvalues.push(Number(sp[0]));
|
||||
yvalues.push(Number(sp[1]));
|
||||
} else if (isarray) {
|
||||
xvalues.push(values[i][0]);
|
||||
yvalues.push(values[i][1]);
|
||||
} else {
|
||||
xvalues.push(i);
|
||||
yvalues.push(Number(values[i]));
|
||||
}
|
||||
}
|
||||
if (options.xvalues) {
|
||||
xvalues = options.xvalues;
|
||||
}
|
||||
|
||||
var maxy = Math.max.apply(Math, yvalues);
|
||||
var maxyval = maxy;
|
||||
var miny = Math.min.apply(Math, yvalues);
|
||||
var minyval = miny;
|
||||
|
||||
var maxx = Math.max.apply(Math, xvalues);
|
||||
var maxxval = maxx;
|
||||
var minx = Math.min.apply(Math, xvalues);
|
||||
var minxval = minx;
|
||||
|
||||
if (options.normalRangeMin!=undefined) {
|
||||
if (options.normalRangeMin<miny)
|
||||
miny = options.normalRangeMin;
|
||||
if (options.normalRangeMax>maxy)
|
||||
maxy = options.normalRangeMax;
|
||||
}
|
||||
if (options.chartRangeMin!=undefined && options.chartRangeMin<miny) {
|
||||
miny = options.chartRangeMin;
|
||||
}
|
||||
if (options.chartRangeMax!=undefined && options.chartRangeMax>maxy) {
|
||||
maxy = options.chartRangeMax;
|
||||
}
|
||||
var rangex = maxx-minx == 0 ? 1 : maxx-minx;
|
||||
var rangey = maxy-miny == 0 ? 1 : maxy-miny;
|
||||
var vl = yvalues.length-1;
|
||||
|
||||
if (vl<1) {
|
||||
this.innerHTML = '';
|
||||
return;
|
||||
}
|
||||
|
||||
var target = $(this).simpledraw(width, height, options.composite);
|
||||
if (target) {
|
||||
var canvas_width = target.pixel_width;
|
||||
var canvas_height = target.pixel_height;
|
||||
var canvas_top = 0;
|
||||
var canvas_left = 0;
|
||||
|
||||
if (options.spotRadius && (canvas_width < (options.spotRadius*4) || canvas_height < (options.spotRadius*4))) {
|
||||
options.spotRadius = 0;
|
||||
}
|
||||
if (options.spotRadius) {
|
||||
// adjust the canvas size as required so that spots will fit
|
||||
if (options.minSpotColor || (options.spotColor && yvalues[vl]==miny))
|
||||
canvas_height -= Math.ceil(options.spotRadius);
|
||||
if (options.maxSpotColor || (options.spotColor && yvalues[vl]==maxy)) {
|
||||
canvas_height -= Math.ceil(options.spotRadius);
|
||||
canvas_top += Math.ceil(options.spotRadius);
|
||||
}
|
||||
if (options.minSpotColor || options.maxSpotColor && (yvalues[0]==miny || yvalues[0]==maxy)) {
|
||||
canvas_left += Math.ceil(options.spotRadius);
|
||||
canvas_width -= Math.ceil(options.spotRadius);
|
||||
}
|
||||
if (options.spotColor || (options.minSpotColor || options.maxSpotColor && (yvalues[vl]==miny||yvalues[vl]==maxy)))
|
||||
canvas_width -= Math.ceil(options.spotRadius);
|
||||
}
|
||||
|
||||
|
||||
canvas_height--;
|
||||
if (options.normalRangeMin!=undefined) {
|
||||
var ytop = canvas_top+Math.round(canvas_height-(canvas_height*((options.normalRangeMax-miny)/rangey)));
|
||||
var height = Math.round((canvas_height*(options.normalRangeMax-options.normalRangeMin))/rangey);
|
||||
target.drawRect(canvas_left, ytop, canvas_width, height, undefined, options.normalRangeColor);
|
||||
}
|
||||
|
||||
var path = [ [canvas_left, canvas_top+canvas_height] ];
|
||||
for(var i=0; i<yvalues.length; i++) {
|
||||
var x=xvalues[i], y=yvalues[i];
|
||||
path.push([canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((y-miny)/rangey)))]);
|
||||
}
|
||||
if (options.fillColor) {
|
||||
path.push([canvas_left+canvas_width, canvas_top+canvas_height-1]);
|
||||
target.drawShape(path, undefined, options.fillColor);
|
||||
path.pop();
|
||||
}
|
||||
path[0] = [ canvas_left, canvas_top+Math.round(canvas_height-(canvas_height*((yvalues[0]-miny)/rangey))) ];
|
||||
target.drawShape(path, options.lineColor);
|
||||
if (options.spotRadius && options.spotColor) {
|
||||
target.drawCircle(canvas_left+canvas_width, canvas_top+Math.round(canvas_height-(canvas_height*((yvalues[vl]-miny)/rangey))), options.spotRadius, undefined, options.spotColor);
|
||||
}
|
||||
if (maxy!=minyval) {
|
||||
if (options.spotRadius && options.minSpotColor) {
|
||||
var x = xvalues[yvalues.indexOf(minyval)];
|
||||
target.drawCircle(canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((minyval-miny)/rangey))), options.spotRadius, undefined, options.minSpotColor);
|
||||
}
|
||||
if (options.spotRadius && options.maxSpotColor) {
|
||||
var x = xvalues[yvalues.indexOf(maxyval)];
|
||||
target.drawCircle(canvas_left+Math.round((x-minx)*(canvas_width/rangex)), canvas_top+Math.round(canvas_height-(canvas_height*((maxyval-miny)/rangey))), options.spotRadius, undefined, options.maxSpotColor);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Remove the tag contents if sparklines aren't supported
|
||||
this.innerHTML = '';
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.sparkline.bar = function(values, options, width, height) {
|
||||
values = $.map(values, Number);
|
||||
var options = $.extend({
|
||||
type : 'bar',
|
||||
barColor : '#00f',
|
||||
negBarColor : '#f44',
|
||||
zeroColor: undefined,
|
||||
zeroAxis : undefined,
|
||||
barWidth : 4,
|
||||
barSpacing : 1,
|
||||
chartRangeMax: undefined,
|
||||
chartRangeMin: undefined
|
||||
}, options ? options : {});
|
||||
|
||||
var width = (values.length * options.barWidth) + ((values.length-1) * options.barSpacing);
|
||||
var max = Math.max.apply(Math, values);
|
||||
var min = Math.min.apply(Math, values);
|
||||
if (options.chartRangeMin!=undefined && options.chartRangeMin<min) {
|
||||
min = options.chartRangeMin;
|
||||
}
|
||||
if (options.chartRangeMax!=undefined && options.chartRangeMax>max) {
|
||||
max = options.chartRangeMax;
|
||||
}
|
||||
if (options.zeroAxis == undefined) options.zeroAxis = min<0;
|
||||
var range = max-min == 0 ? 1 : max-min;
|
||||
|
||||
var target = $(this).simpledraw(width, height);
|
||||
if (target) {
|
||||
var canvas_width = target.pixel_width;
|
||||
var canvas_height = target.pixel_height;
|
||||
var yzero = min<0 && options.zeroAxis ? canvas_height-Math.round(canvas_height * (Math.abs(min)/range))-1 : canvas_height-1;
|
||||
|
||||
for(var i=0; i<values.length; i++) {
|
||||
var x = i*(options.barWidth+options.barSpacing);
|
||||
var val = values[i];
|
||||
var color = (val < 0) ? options.negBarColor : options.barColor;
|
||||
if (options.zeroAxis && min<0) {
|
||||
var height = Math.round(canvas_height*((Math.abs(val)/range)))+1;
|
||||
var y = (val < 0) ? yzero : yzero-height;
|
||||
} else {
|
||||
var height = Math.round(canvas_height*((val-min)/range))+1;
|
||||
var y = canvas_height-height;
|
||||
}
|
||||
if (val==0 && options.zeroColor!=undefined) {
|
||||
color = options.zeroColor;
|
||||
}
|
||||
target.drawRect(x, y, options.barWidth-1, height-1, color, color);
|
||||
}
|
||||
} else {
|
||||
// Remove the tag contents if sparklines aren't supported
|
||||
this.innerHTML = '';
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.sparkline.tristate = function(values, options, width, height) {
|
||||
values = $.map(values, Number);
|
||||
var options = $.extend({
|
||||
barWidth : 4,
|
||||
barSpacing : 1,
|
||||
posBarColor: '#6f6',
|
||||
negBarColor : '#f44',
|
||||
zeroBarColor : '#999',
|
||||
colorMap : {}
|
||||
}, options);
|
||||
|
||||
var width = (values.length * options.barWidth) + ((values.length-1) * options.barSpacing);
|
||||
|
||||
var target = $(this).simpledraw(width, height);
|
||||
if (target) {
|
||||
var canvas_width = target.pixel_width;
|
||||
var canvas_height = target.pixel_height;
|
||||
var half_height = Math.round(canvas_height/2);
|
||||
|
||||
for(var i=0; i<values.length; i++) {
|
||||
var x = i*(options.barWidth+options.barSpacing);
|
||||
if (values[i] < 0) {
|
||||
var y = half_height;
|
||||
var height = half_height-1;
|
||||
var color = options.negBarColor;
|
||||
} else if (values[i] > 0) {
|
||||
var y = 0;
|
||||
var height = half_height-1;
|
||||
var color = options.posBarColor;
|
||||
} else {
|
||||
var y = half_height-1;
|
||||
var height = 2;
|
||||
var color = options.zeroBarColor;
|
||||
}
|
||||
if (options.colorMap[values[i]]) {
|
||||
color = options.colorMap[values[i]];
|
||||
}
|
||||
target.drawRect(x, y, options.barWidth-1, height-1, color, color);
|
||||
}
|
||||
} else {
|
||||
// Remove the tag contents if sparklines aren't supported
|
||||
this.innerHTML = '';
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.sparkline.discrete = function(values, options, width, height) {
|
||||
values = $.map(values, Number);
|
||||
var options = $.extend({
|
||||
lineHeight: 'auto',
|
||||
thresholdColor: undefined,
|
||||
thresholdValue : 0,
|
||||
chartRangeMax: undefined,
|
||||
chartRangeMin: undefined
|
||||
}, options);
|
||||
|
||||
width = options.width=='auto' ? values.length*2 : width;
|
||||
var interval = Math.floor(width / values.length);
|
||||
|
||||
var target = $(this).simpledraw(width, height);
|
||||
if (target) {
|
||||
var canvas_width = target.pixel_width;
|
||||
var canvas_height = target.pixel_height;
|
||||
var line_height = options.lineHeight == 'auto' ? Math.round(canvas_height * 0.3) : options.lineHeight;
|
||||
var pheight = canvas_height - line_height;
|
||||
var min = Math.min.apply(Math, values);
|
||||
var max = Math.max.apply(Math, values);
|
||||
if (options.chartRangeMin!=undefined && options.chartRangeMin<min) {
|
||||
min = options.chartRangeMin;
|
||||
}
|
||||
if (options.chartRangeMax!=undefined && options.chartRangeMax>max) {
|
||||
max = options.chartRangeMax;
|
||||
}
|
||||
var range = max-min;
|
||||
|
||||
for(var i=0; i<values.length; i++) {
|
||||
var val = values[i];
|
||||
var x = (i*interval);
|
||||
var ytop = Math.round(pheight-pheight*((val-min)/range));
|
||||
target.drawLine(x, ytop, x, ytop+line_height, (options.thresholdColor && val < options.thresholdValue) ? options.thresholdColor : options.lineColor);
|
||||
}
|
||||
} else {
|
||||
// Remove the tag contents if sparklines aren't supported
|
||||
this.innerHTML = '';
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$.fn.sparkline.bullet = function(values, options, width, height) {
|
||||
values = $.map(values, Number);
|
||||
// target, performance, range1, range2, range3
|
||||
var options = $.extend({
|
||||
targetColor : 'red',
|
||||
targetWidth : 3, // width of the target bar in pixels
|
||||
performanceColor : 'blue',
|
||||
rangeColors : ['#D3DAFE', '#A8B6FF', '#7F94FF' ],
|
||||
base : undefined // set this to a number to change the base start number
|
||||
}, options);
|
||||
|
||||
|
||||
width = options.width=='auto' ? '4.0em' : width;
|
||||
|
||||
var target = $(this).simpledraw(width, height);
|
||||
if (target && values.length>1) {
|
||||
var canvas_width = target.pixel_width-Math.ceil(options.targetWidth/2);
|
||||
var canvas_height = target.pixel_height;
|
||||
|
||||
var min = Math.min.apply(Math, values);
|
||||
var max = Math.max.apply(Math, values);
|
||||
if (options.base == undefined) {
|
||||
var min = min < 0 ? min : 0;
|
||||
} else {
|
||||
min = options.base;
|
||||
}
|
||||
var range = max-min;
|
||||
|
||||
// draw range values
|
||||
for(i=2; i<values.length; i++) {
|
||||
var rangeval = parseInt(values[i]);
|
||||
var rangewidth = Math.round(canvas_width*((rangeval-min)/range));
|
||||
target.drawRect(0, 0, rangewidth-1, canvas_height-1, options.rangeColors[i-2], options.rangeColors[i-2]);
|
||||
}
|
||||
|
||||
// draw the performance bar
|
||||
var perfval = parseInt(values[1]);
|
||||
var perfwidth = Math.round(canvas_width*((perfval-min)/range));
|
||||
target.drawRect(0, Math.round(canvas_height*0.3), perfwidth-1, Math.round(canvas_height*0.4)-1, options.performanceColor, options.performanceColor);
|
||||
|
||||
// draw the target linej
|
||||
var targetval = parseInt(values[0]);
|
||||
var x = Math.round(canvas_width*((targetval-min)/range)-(options.targetWidth/2));
|
||||
var targettop = Math.round(canvas_height*0.10);
|
||||
var targetheight = canvas_height-(targettop*2);
|
||||
target.drawRect(x, targettop, options.targetWidth-1, targetheight-1, options.targetColor, options.targetColor);
|
||||
} else {
|
||||
// Remove the tag contents if sparklines aren't supported
|
||||
this.innerHTML = '';
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.sparkline.pie = function(values, options, width, height) {
|
||||
values = $.map(values, Number);
|
||||
var options = $.extend({
|
||||
sliceColors : ['#f00', '#0f0', '#00f']
|
||||
}, options);
|
||||
|
||||
width = options.width=='auto' ? height : width;
|
||||
|
||||
var target = $(this).simpledraw(width, height);
|
||||
if (target && values.length>1) {
|
||||
var canvas_width = target.pixel_width;
|
||||
var canvas_height = target.pixel_height;
|
||||
|
||||
var radius = Math.floor(Math.min(canvas_width, canvas_height)/2);
|
||||
var total = 0;
|
||||
for(var i=0; i<values.length; i++)
|
||||
total += values[i];
|
||||
var next = 0;
|
||||
if (options.offset) {
|
||||
next += (2*Math.PI)*(options.offset/360);
|
||||
}
|
||||
var circle = 2*Math.PI;
|
||||
for(var i=0; i<values.length; i++) {
|
||||
var start = next;
|
||||
var end = next;
|
||||
if (total > 0) { // avoid divide by zero
|
||||
end = next + (circle*(values[i]/total));
|
||||
}
|
||||
target.drawPieSlice(radius, radius, radius, start, end, undefined, options.sliceColors[i % options.sliceColors.length]);
|
||||
next = end;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function quartile(values, q) {
|
||||
if (q==2) {
|
||||
var vl2 = Math.floor(values.length/2);
|
||||
return values.length % 2 ? values[vl2] : (values[vl2]+values[vl2+1])/2;
|
||||
} else {
|
||||
var vl4 = Math.floor(values.length/4);
|
||||
return values.length % 2 ? (values[vl4*q]+values[vl4*q+1])/2 : values[vl4*q];
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.sparkline.box = function(values, options, width, height) {
|
||||
values = $.map(values, Number);
|
||||
var options = $.extend({
|
||||
raw: false,
|
||||
boxLineColor: 'black',
|
||||
boxFillColor: '#cdf',
|
||||
whiskerColor: 'black',
|
||||
outlierLineColor: '#333',
|
||||
outlierFillColor: 'white',
|
||||
medianColor: 'red',
|
||||
showOutliers: true,
|
||||
outlierIQR: 1.5,
|
||||
spotRadius: 1.5,
|
||||
target: undefined,
|
||||
targetColor: '#4a2',
|
||||
chartRangeMax: undefined,
|
||||
chartRangeMin: undefined
|
||||
}, options);
|
||||
|
||||
width = options.width=='auto' ? '4.0em' : width;
|
||||
|
||||
minvalue = options.chartRangeMin==undefined ? Math.min.apply(Math, values) : options.chartRangeMin;
|
||||
maxvalue = options.chartRangeMax==undefined ? Math.max.apply(Math, values) : options.chartRangeMax;
|
||||
var target = $(this).simpledraw(width, height);
|
||||
if (target && values.length>1) {
|
||||
var canvas_width = target.pixel_width;
|
||||
var canvas_height = target.pixel_height;
|
||||
if (options.raw) {
|
||||
if (options.showOutliers && values.length>5) {
|
||||
var loutlier=values[0], lwhisker=values[1], q1=values[2], q2=values[3], q3=values[4], rwhisker=values[5], routlier=values[6];
|
||||
} else {
|
||||
var lwhisker=values[0], q1=values[1], q2=values[2], q3=values[3], rwhisker=values[4];
|
||||
}
|
||||
} else {
|
||||
values.sort(function(a, b) { return a-b; });
|
||||
var q1 = quartile(values, 1);
|
||||
var q2 = quartile(values, 2);
|
||||
var q3 = quartile(values, 3);
|
||||
var iqr = q3-q1;
|
||||
if (options.showOutliers) {
|
||||
var lwhisker=undefined, rwhisker=undefined;
|
||||
for(var i=0; i<values.length; i++) {
|
||||
if (lwhisker==undefined && values[i] > q1-(iqr*options.outlierIQR))
|
||||
lwhisker = values[i];
|
||||
if (values[i] < q3+(iqr*options.outlierIQR))
|
||||
rwhisker = values[i];
|
||||
}
|
||||
var loutlier = values[0];
|
||||
var routlier = values[values.length-1];
|
||||
} else {
|
||||
var lwhisker = values[0];
|
||||
var rwhisker = values[values.length-1];
|
||||
}
|
||||
}
|
||||
|
||||
var unitsize = canvas_width / (maxvalue-minvalue+1);
|
||||
var canvas_left = 0;
|
||||
if (options.showOutliers) {
|
||||
canvas_left = Math.ceil(options.spotRadius);
|
||||
canvas_width -= 2*Math.ceil(options.spotRadius);
|
||||
var unitsize = canvas_width / (maxvalue-minvalue+1);
|
||||
if (loutlier < lwhisker)
|
||||
target.drawCircle((loutlier-minvalue)*unitsize+canvas_left, canvas_height/2, options.spotRadius, options.outlierLineColor, options.outlierFillColor);
|
||||
if (routlier > rwhisker)
|
||||
target.drawCircle((routlier-minvalue)*unitsize+canvas_left, canvas_height/2, options.spotRadius, options.outlierLineColor, options.outlierFillColor);
|
||||
}
|
||||
|
||||
// box
|
||||
target.drawRect(
|
||||
Math.round((q1-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height*0.1),
|
||||
Math.round((q3-q1)*unitsize),
|
||||
Math.round(canvas_height*0.8),
|
||||
options.boxLineColor,
|
||||
options.boxFillColor);
|
||||
// left whisker
|
||||
target.drawLine(
|
||||
Math.round((lwhisker-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height/2),
|
||||
Math.round((q1-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height/2),
|
||||
options.lineColor);
|
||||
target.drawLine(
|
||||
Math.round((lwhisker-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height/4),
|
||||
Math.round((lwhisker-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height-canvas_height/4),
|
||||
options.whiskerColor);
|
||||
// right whisker
|
||||
target.drawLine(Math.round((rwhisker-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height/2),
|
||||
Math.round((q3-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height/2),
|
||||
options.lineColor);
|
||||
target.drawLine(
|
||||
Math.round((rwhisker-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height/4),
|
||||
Math.round((rwhisker-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height-canvas_height/4),
|
||||
options.whiskerColor);
|
||||
// median line
|
||||
target.drawLine(
|
||||
Math.round((q2-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height*0.1),
|
||||
Math.round((q2-minvalue)*unitsize+canvas_left),
|
||||
Math.round(canvas_height*0.9),
|
||||
options.medianColor);
|
||||
if (options.target) {
|
||||
var size = Math.ceil(options.spotRadius);
|
||||
target.drawLine(
|
||||
Math.round((options.target-minvalue)*unitsize+canvas_left),
|
||||
Math.round((canvas_height/2)-size),
|
||||
Math.round((options.target-minvalue)*unitsize+canvas_left),
|
||||
Math.round((canvas_height/2)+size),
|
||||
options.targetColor);
|
||||
target.drawLine(
|
||||
Math.round((options.target-minvalue)*unitsize+canvas_left-size),
|
||||
Math.round(canvas_height/2),
|
||||
Math.round((options.target-minvalue)*unitsize+canvas_left+size),
|
||||
Math.round(canvas_height/2),
|
||||
options.targetColor);
|
||||
}
|
||||
} else {
|
||||
// Remove the tag contents if sparklines aren't supported
|
||||
this.innerHTML = '';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// IE doesn't provide an indexOf method for arrays :-(
|
||||
if (!Array.prototype.indexOf) {
|
||||
Array.prototype.indexOf = function(entry) {
|
||||
for(var i=0; i<this.length; i++) {
|
||||
if (this[i] == entry)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// Setup a very simple "virtual canvas" to make drawing the few shapes we need easier
|
||||
// This is accessible as $(foo).simpledraw()
|
||||
|
||||
if ($.browser.msie && !document.namespaces['v']) {
|
||||
document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');
|
||||
}
|
||||
|
||||
if ($.browser.hasCanvas == undefined) {
|
||||
var t = document.createElement('canvas');
|
||||
$.browser.hasCanvas = t.getContext!=undefined;
|
||||
}
|
||||
|
||||
var vcanvas_base = function(width, height, target) {
|
||||
};
|
||||
|
||||
vcanvas_base.prototype = {
|
||||
init : function(width, height, target) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.target = target;
|
||||
if (target[0]) target=target[0];
|
||||
target.vcanvas = this;
|
||||
},
|
||||
|
||||
drawShape : function(path, lineColor, fillColor) {
|
||||
alert('drawShape not implemented');
|
||||
},
|
||||
|
||||
drawLine : function(x1, y1, x2, y2, lineColor) {
|
||||
return this.drawShape([ [x1,y1], [x2,y2] ], lineColor);
|
||||
},
|
||||
|
||||
drawCircle : function(x, y, radius, lineColor, fillColor) {
|
||||
alert('drawCircle not implemented');
|
||||
},
|
||||
|
||||
drawPieSlice : function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
|
||||
alert('drawPieSlice not implemented');
|
||||
},
|
||||
|
||||
drawRect : function(x, y, width, height, lineColor, fillColor) {
|
||||
alert('drawRect not implemented');
|
||||
},
|
||||
|
||||
getElement : function() {
|
||||
return this.canvas;
|
||||
},
|
||||
|
||||
_insert : function(el, target) {
|
||||
$(target).html(el);
|
||||
}
|
||||
};
|
||||
|
||||
var vcanvas_canvas = function(width, height, target) {
|
||||
return this.init(width, height, target);
|
||||
};
|
||||
|
||||
vcanvas_canvas.prototype = $.extend(new vcanvas_base, {
|
||||
_super : vcanvas_base.prototype,
|
||||
|
||||
init : function(width, height, target) {
|
||||
this._super.init(width, height, target);
|
||||
this.canvas = document.createElement('canvas');
|
||||
if (target[0]) target=target[0];
|
||||
target.vcanvas = this;
|
||||
$(this.canvas).css({ display:'inline-block', width:width, height:height, verticalAlign:'top' });
|
||||
this._insert(this.canvas, target);
|
||||
this.pixel_height = $(this.canvas).height();
|
||||
this.pixel_width = $(this.canvas).width();
|
||||
this.canvas.width = this.pixel_width;
|
||||
this.canvas.height = this.pixel_height;
|
||||
$(this.canvas).css({width: this.pixel_width, height: this.pixel_height});
|
||||
},
|
||||
|
||||
_getContext : function(lineColor, fillColor) {
|
||||
var context = this.canvas.getContext('2d');
|
||||
if (lineColor != undefined)
|
||||
context.strokeStyle = lineColor;
|
||||
context.lineWidth = 1;
|
||||
if (fillColor != undefined)
|
||||
context.fillStyle = fillColor;
|
||||
return context;
|
||||
},
|
||||
|
||||
drawShape : function(path, lineColor, fillColor) {
|
||||
var context = this._getContext(lineColor, fillColor);
|
||||
context.beginPath();
|
||||
context.moveTo(path[0][0]+0.5, path[0][1]+0.5);
|
||||
for(var i=1; i<path.length; i++) {
|
||||
context.lineTo(path[i][0]+0.5, path[i][1]+0.5); // the 0.5 offset gives us crisp pixel-width lines
|
||||
}
|
||||
if (lineColor != undefined) {
|
||||
context.stroke();
|
||||
}
|
||||
if (fillColor != undefined) {
|
||||
context.fill();
|
||||
}
|
||||
},
|
||||
|
||||
drawCircle : function(x, y, radius, lineColor, fillColor) {
|
||||
var context = this._getContext(lineColor, fillColor);
|
||||
context.beginPath();
|
||||
context.arc(x, y, radius, 0, 2*Math.PI, false);
|
||||
if (lineColor != undefined) {
|
||||
context.stroke();
|
||||
}
|
||||
if (fillColor != undefined) {
|
||||
context.fill();
|
||||
}
|
||||
},
|
||||
|
||||
drawPieSlice : function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
|
||||
var context = this._getContext(lineColor, fillColor);
|
||||
context.beginPath();
|
||||
context.moveTo(x, y);
|
||||
context.arc(x, y, radius, startAngle, endAngle, false);
|
||||
context.lineTo(x, y);
|
||||
context.closePath();
|
||||
if (lineColor != undefined) {
|
||||
context.stroke();
|
||||
}
|
||||
if (fillColor) {
|
||||
context.fill();
|
||||
}
|
||||
},
|
||||
|
||||
drawRect : function(x, y, width, height, lineColor, fillColor) {
|
||||
return this.drawShape([ [x,y], [x+width, y], [x+width, y+height], [x, y+height], [x, y] ], lineColor, fillColor);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
var vcanvas_vml = function(width, height, target) {
|
||||
return this.init(width, height, target);
|
||||
};
|
||||
|
||||
vcanvas_vml.prototype = $.extend(new vcanvas_base, {
|
||||
_super : vcanvas_base.prototype,
|
||||
|
||||
init : function(width, height, target) {
|
||||
this._super.init(width, height, target);
|
||||
if (target[0]) target=target[0];
|
||||
target.vcanvas = this;
|
||||
this.canvas = document.createElement('span');
|
||||
$(this.canvas).css({ display:'inline-block', position: 'relative', overflow:'hidden', width:width, height:height, margin:'0px', padding:'0px', verticalAlign: 'top'});
|
||||
this._insert(this.canvas, target);
|
||||
this.pixel_height = $(this.canvas).height();
|
||||
this.pixel_width = $(this.canvas).width();
|
||||
this.canvas.width = this.pixel_width;
|
||||
this.canvas.height = this.pixel_height;;
|
||||
var groupel = '<v:group coordorigin="0 0" coordsize="'+this.pixel_width+' '+this.pixel_height+'"'
|
||||
+' style="position:absolute;top:0;left:0;width:'+this.pixel_width+'px;height='+this.pixel_height+'px;"></v:group>';
|
||||
this.canvas.insertAdjacentHTML('beforeEnd', groupel);
|
||||
this.group = $(this.canvas).children()[0];
|
||||
},
|
||||
|
||||
drawShape : function(path, lineColor, fillColor) {
|
||||
var vpath = [];
|
||||
for(var i=0; i<path.length; i++) {
|
||||
vpath[i] = ''+(path[i][0])+','+(path[i][1]);
|
||||
}
|
||||
var initial = vpath.splice(0,1);
|
||||
var stroke = lineColor == undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="'+lineColor+'" ';
|
||||
var fill = fillColor == undefined ? ' filled="false"' : ' fillColor="'+fillColor+'" filled="true" ';
|
||||
var closed = vpath[0] == vpath[vpath.length-1] ? 'x ' : '';
|
||||
var vel = '<v:shape coordorigin="0 0" coordsize="'+this.pixel_width+' '+this.pixel_height+'" '
|
||||
+ stroke
|
||||
+ fill
|
||||
+' style="position:absolute;left:0px;top:0px;height:'+this.pixel_height+'px;width:'+this.pixel_width+'px;padding:0px;margin:0px;" '
|
||||
+' path="m '+initial+' l '+vpath.join(', ')+' '+closed+'e">'
|
||||
+' </v:shape>';
|
||||
this.group.insertAdjacentHTML('beforeEnd', vel);
|
||||
},
|
||||
|
||||
drawCircle : function(x, y, radius, lineColor, fillColor) {
|
||||
x -= radius+1;
|
||||
y -= radius+1;
|
||||
var stroke = lineColor == undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="'+lineColor+'" ';
|
||||
var fill = fillColor == undefined ? ' filled="false"' : ' fillColor="'+fillColor+'" filled="true" ';
|
||||
var vel = '<v:oval '
|
||||
+ stroke
|
||||
+ fill
|
||||
+' style="position:absolute;top:'+y+'px; left:'+x+'px; width:'+(radius*2)+'px; height:'+(radius*2)+'px"></v:oval>';
|
||||
this.group.insertAdjacentHTML('beforeEnd', vel);
|
||||
|
||||
},
|
||||
|
||||
drawPieSlice : function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
|
||||
if (startAngle == endAngle) {
|
||||
return; // VML seems to have problem when start angle equals end angle.
|
||||
}
|
||||
if ((endAngle - startAngle) == (2*Math.PI)) {
|
||||
startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0
|
||||
endAngle = (2*Math.PI);
|
||||
}
|
||||
|
||||
var startx = x + Math.round(Math.cos(startAngle) * radius);
|
||||
var starty = y + Math.round(Math.sin(startAngle) * radius);
|
||||
var endx = x + Math.round(Math.cos(endAngle) * radius);
|
||||
var endy = y + Math.round(Math.sin(endAngle) * radius);
|
||||
|
||||
var vpath = [ x-radius, y-radius, x+radius, y+radius, startx, starty, endx, endy ];
|
||||
var stroke = lineColor == undefined ? ' stroked="false" ' : ' strokeWeight="1" strokeColor="'+lineColor+'" ';
|
||||
var fill = fillColor == undefined ? ' filled="false"' : ' fillColor="'+fillColor+'" filled="true" ';
|
||||
var vel = '<v:shape coordorigin="0 0" coordsize="'+this.pixel_width+' '+this.pixel_height+'" '
|
||||
+ stroke
|
||||
+ fill
|
||||
+' style="position:absolute;left:0px;top:0px;height:'+this.pixel_height+'px;width:'+this.pixel_width+'px;padding:0px;margin:0px;" '
|
||||
+' path="m '+x+','+y+' wa '+vpath.join(', ')+' x e">'
|
||||
+' </v:shape>';
|
||||
this.group.insertAdjacentHTML('beforeEnd', vel);
|
||||
},
|
||||
|
||||
drawRect : function(x, y, width, height, lineColor, fillColor) {
|
||||
return this.drawShape( [ [x, y], [x, y+height], [x+width, y+height], [x+width, y], [x, y] ], lineColor, fillColor);
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
@ -2,8 +2,8 @@
|
||||
class default_page extends \SYSTEM\PAGE\Page {
|
||||
private function js(){
|
||||
return '<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'jquery/jquery-1.9.1.min.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/js/bootstrap.min.js').'"></script>'.
|
||||
'<script src="'.SYSTEM\WEBPATH(new PTOR(),'webtorrent.min.js').'"></script>'.
|
||||
//'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/js/bootstrap.min.js').'"></script>'.
|
||||
'<script src="'.SYSTEM\WEBPATH(new PLIB(),'webtorrent/webtorrent.min.js').'"></script>'.
|
||||
//'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'jqbootstrapvalidation/jqBootstrapValidation.js').'"></script>'.
|
||||
//'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'hashmask/jquery.md5.js').'"></script>'.
|
||||
//'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'hashmask/jquery.sha1.js').'"></script>'.
|
||||
@ -13,10 +13,10 @@ class default_page extends \SYSTEM\PAGE\Page {
|
||||
}
|
||||
|
||||
private function css(){
|
||||
return '<link href="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/css/default_page.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap.min.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap-theme.min.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap-responsive.min.css').'" rel="stylesheet">';
|
||||
return '<link href="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/css/default_page.css').'" rel="stylesheet">';
|
||||
//'<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap.min.css').'" rel="stylesheet">'.
|
||||
//'<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap-theme.min.css').'" rel="stylesheet">'.
|
||||
//'<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap-responsive.min.css').'" rel="stylesheet">';
|
||||
}
|
||||
|
||||
public function html(){
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
class PLIB extends \SYSTEM\PATH {
|
||||
public static function getPath(){
|
||||
return \SYSTEM\C_ROOT.'slingit/lib/'.\SYSTEM\C_SUBPATH;}
|
||||
return \SYSTEM\C_ROOT.'lib/'.\SYSTEM\C_SUBPATH;}
|
||||
}
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
<?php
|
||||
class PTOR extends \SYSTEM\PATH {
|
||||
public static function getPath(){
|
||||
return \SYSTEM\C_ROOT.'webtorrent/'.\SYSTEM\C_SUBPATH;}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user