first commit
4
libraries/framework/vendor/jquery/jquery-1.11.1.min.js
vendored
Normal file
BIN
libraries/framework/vendor/jquery/jquery_ui/images/animated-overlay.gif
vendored
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
vendored
Normal file
|
After Width: | Height: | Size: 457 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
vendored
Normal file
|
After Width: | Height: | Size: 351 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_flat_10_000000_40x100.png
vendored
Normal file
|
After Width: | Height: | Size: 244 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_glass_100_f6f6f6_1x400.png
vendored
Normal file
|
After Width: | Height: | Size: 301 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_glass_100_fdf5ce_1x400.png
vendored
Normal file
|
After Width: | Height: | Size: 387 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_glass_65_ffffff_1x400.png
vendored
Normal file
|
After Width: | Height: | Size: 246 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png
vendored
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
vendored
Normal file
|
After Width: | Height: | Size: 317 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
vendored
Normal file
|
After Width: | Height: | Size: 367 B |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-icons_222222_256x240.png
vendored
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-icons_228ef1_256x240.png
vendored
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-icons_ef8c08_256x240.png
vendored
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-icons_ffd27a_256x240.png
vendored
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
libraries/framework/vendor/jquery/jquery_ui/images/ui-icons_ffffff_256x240.png
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
7
libraries/framework/vendor/jquery/jquery_ui/jquery-ui.min.css
vendored
Normal file
13
libraries/framework/vendor/jquery/jquery_ui/jquery-ui.min.js
vendored
Normal file
5
libraries/framework/vendor/jquery/jquery_ui/jquery-ui.structure.min.css
vendored
Normal file
5
libraries/framework/vendor/jquery/jquery_ui/jquery-ui.theme.min.css
vendored
Normal file
3181
libraries/framework/vendor/plugins/animate/animate.css
vendored
Normal file
6
libraries/framework/vendor/plugins/animate/animate.min.css
vendored
Normal file
206
libraries/framework/vendor/plugins/bstimeout/bs-timeout.js
vendored
Normal file
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
* bootstrap-session-timeout
|
||||
* www.orangehilldev.com
|
||||
*
|
||||
* Copyright (c) 2014 Vedran Opacic
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
/*jshint multistr: true */
|
||||
'use strict';
|
||||
|
||||
(function($) {
|
||||
jQuery.sessionTimeout = function(options) {
|
||||
var defaults = {
|
||||
title: 'Your Session is About to Expire!',
|
||||
message: 'Your session is about to expire.',
|
||||
logoutButton: 'Logout',
|
||||
keepAliveButton: 'Stay Connected',
|
||||
keepAliveUrl: '/keep-alive',
|
||||
ajaxType: 'POST',
|
||||
ajaxData: '',
|
||||
redirUrl: '/timed-out',
|
||||
logoutUrl: '/log-out',
|
||||
warnAfter: 900000, // 15 minutes
|
||||
redirAfter: 1200000, // 20 minutes
|
||||
keepAliveInterval: 5000,
|
||||
keepAlive: true,
|
||||
ignoreUserActivity: false,
|
||||
onStart: false,
|
||||
onWarn: false,
|
||||
onRedir: false,
|
||||
countdownMessage: false,
|
||||
countdownBar: false
|
||||
};
|
||||
|
||||
var opt = defaults,
|
||||
timer,
|
||||
countdown = {};
|
||||
|
||||
// Extend user-set options over defaults
|
||||
if (options) {
|
||||
opt = $.extend(defaults, options);
|
||||
}
|
||||
|
||||
// Some error handling if options are miss-configured
|
||||
if (opt.warnAfter >= opt.redirAfter) {
|
||||
console.error('Bootstrap-session-timeout plugin is miss-configured. Option "redirAfter" must be equal or greater than "warnAfter".');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Unless user set his own callback function, prepare bootstrap modal elements and events
|
||||
if (typeof opt.onWarn !== 'function') {
|
||||
// If opt.countdownMessage is defined add a coundown timer message to the modal dialog
|
||||
var countdownMessage = opt.countdownMessage ?
|
||||
'<p>' + opt.countdownMessage.replace(/{timer}/g, '<span class="countdown-holder"></span>') + '</p>' : '';
|
||||
var coundownBarHtml = opt.countdownBar ?
|
||||
'<div class="progress"> \
|
||||
<div class="progress-bar progress-bar-striped countdown-bar active" role="progressbar" style="min-width: 15px; width: 100%;"> \
|
||||
<span class="countdown-holder"></span><span>s</span> \
|
||||
</div> \
|
||||
</div>' : '';
|
||||
|
||||
// Create timeout warning dialog
|
||||
$('body').append('<div class="modal fade" id="session-timeout-dialog"> \
|
||||
<div class="modal-dialog"> \
|
||||
<div class="modal-content"> \
|
||||
<div class="modal-header"> \
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> \
|
||||
<h4 class="modal-title">' + opt.title + '</h4> \
|
||||
</div> \
|
||||
<div class="modal-body"> \
|
||||
<p>' + opt.message + '</p> \
|
||||
' + countdownMessage + ' \
|
||||
' + coundownBarHtml + ' \
|
||||
</div> \
|
||||
<div class="modal-footer"> \
|
||||
<button id="session-timeout-dialog-logout" type="button" class="btn btn-default">' + opt.logoutButton + '</button> \
|
||||
<button id="session-timeout-dialog-keepalive" type="button" class="btn btn-primary" data-dismiss="modal">' + opt.keepAliveButton + '</button> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div>');
|
||||
|
||||
// "Logout" button click
|
||||
$('#session-timeout-dialog-logout').on('click', function() {
|
||||
window.location = opt.logoutUrl;
|
||||
});
|
||||
// "Stay Connected" button click
|
||||
$('#session-timeout-dialog').on('hide.bs.modal', function() {
|
||||
// Restart session timer
|
||||
startSessionTimer();
|
||||
});
|
||||
}
|
||||
|
||||
// Reset timer on any of these events
|
||||
if (!opt.ignoreUserActivity) {
|
||||
$(document).on('keyup mouseup mousemove touchend touchmove', function() {
|
||||
startSessionTimer();
|
||||
});
|
||||
}
|
||||
|
||||
// Keeps the server side connection live, by pingin url set in keepAliveUrl option.
|
||||
// KeepAlivePinged is a helper var to ensure the functionality of the keepAliveInterval option
|
||||
var keepAlivePinged = false;
|
||||
|
||||
function keepAlive() {
|
||||
if (!keepAlivePinged) {
|
||||
// Ping keepalive URL using (if provided) data and type from options
|
||||
$.ajax({
|
||||
type: opt.ajaxType,
|
||||
url: opt.keepAliveUrl,
|
||||
data: opt.ajaxData
|
||||
});
|
||||
keepAlivePinged = true;
|
||||
setTimeout(function() {
|
||||
keepAlivePinged = false;
|
||||
}, opt.keepAliveInterval);
|
||||
}
|
||||
}
|
||||
|
||||
function startSessionTimer() {
|
||||
// Clear session timer
|
||||
clearTimeout(timer);
|
||||
if (opt.countdownMessage || opt.countdownBar) {
|
||||
startCountdownTimer('session', true);
|
||||
}
|
||||
|
||||
if (typeof opt.onStart === 'function') {
|
||||
opt.onStart(opt);
|
||||
}
|
||||
|
||||
// If keepAlive option is set to "true", ping the "keepAliveUrl" url
|
||||
if (opt.keepAlive) {
|
||||
keepAlive();
|
||||
}
|
||||
|
||||
// Set session timer
|
||||
timer = setTimeout(function() {
|
||||
// Check for onWarn callback function and if there is none, launch dialog
|
||||
if (typeof opt.onWarn !== 'function') {
|
||||
$('#session-timeout-dialog').modal('show');
|
||||
} else {
|
||||
opt.onWarn(opt);
|
||||
}
|
||||
// Start dialog timer
|
||||
startDialogTimer();
|
||||
}, opt.warnAfter);
|
||||
}
|
||||
|
||||
function startDialogTimer() {
|
||||
// Clear session timer
|
||||
clearTimeout(timer);
|
||||
if (!$('#session-timeout-dialog').hasClass('in') && (opt.countdownMessage || opt.countdownBar)) {
|
||||
// If warning dialog is not already open and either opt.countdownMessage
|
||||
// or opt.countdownBar are set start countdown
|
||||
startCountdownTimer('dialog', true);
|
||||
}
|
||||
// Set dialog timer
|
||||
timer = setTimeout(function() {
|
||||
// Check for onRedir callback function and if there is none, launch redirect
|
||||
if (typeof opt.onRedir !== 'function') {
|
||||
window.location = opt.redirUrl;
|
||||
} else {
|
||||
opt.onRedir(opt);
|
||||
}
|
||||
}, (opt.redirAfter - opt.warnAfter));
|
||||
}
|
||||
|
||||
function startCountdownTimer(type, reset) {
|
||||
// Clear countdown timer
|
||||
clearTimeout(countdown.timer);
|
||||
|
||||
if (type === 'dialog' && reset) {
|
||||
// If triggered by startDialogTimer start warning countdown
|
||||
countdown.timeLeft = Math.floor((opt.redirAfter - opt.warnAfter) / 1000);
|
||||
} else if (type === 'session' && reset) {
|
||||
// If triggered by startSessionTimer start full countdown
|
||||
// (this is needed if user doesn't close the warning dialog)
|
||||
countdown.timeLeft = Math.floor(opt.redirAfter / 1000);
|
||||
}
|
||||
// If opt.countdownBar is true, calculate remaining time percentage
|
||||
if (opt.countdownBar && type === 'dialog') {
|
||||
countdown.percentLeft = Math.floor(countdown.timeLeft / ((opt.redirAfter - opt.warnAfter) / 1000) * 100);
|
||||
} else if (opt.countdownBar && type === 'session') {
|
||||
countdown.percentLeft = Math.floor(countdown.timeLeft / (opt.redirAfter / 1000) * 100);
|
||||
}
|
||||
// Set countdown message time value
|
||||
$('.countdown-holder').text(countdown.timeLeft);
|
||||
|
||||
// Set countdown message time value
|
||||
if (opt.countdownBar) {
|
||||
$('.countdown-bar').css('width', countdown.percentLeft + '%');
|
||||
}
|
||||
|
||||
// Countdown by one second
|
||||
countdown.timeLeft = countdown.timeLeft - 1;
|
||||
countdown.timer = setTimeout(function() {
|
||||
// Call self after one second
|
||||
startCountdownTimer(type);
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
// Start session timer
|
||||
startSessionTimer();
|
||||
|
||||
};
|
||||
})(jQuery);
|
||||
1
libraries/framework/vendor/plugins/bstimeout/bs-timeout.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";!function(a){jQuery.sessionTimeout=function(b){function c(){m||(a.ajax({type:i.ajaxType,url:i.keepAliveUrl,data:i.ajaxData}),m=!0,setTimeout(function(){m=!1},i.keepAliveInterval))}function d(){clearTimeout(g),(i.countdownMessage||i.countdownBar)&&f("session",!0),"function"==typeof i.onStart&&i.onStart(i),i.keepAlive&&c(),g=setTimeout(function(){"function"!=typeof i.onWarn?a("#session-timeout-dialog").modal("show"):i.onWarn(i),e()},i.warnAfter)}function e(){clearTimeout(g),a("#session-timeout-dialog").hasClass("in")||!i.countdownMessage&&!i.countdownBar||f("dialog",!0),g=setTimeout(function(){"function"!=typeof i.onRedir?window.location=i.redirUrl:i.onRedir(i)},i.redirAfter-i.warnAfter)}function f(b,c){clearTimeout(j.timer),"dialog"===b&&c?j.timeLeft=Math.floor((i.redirAfter-i.warnAfter)/1e3):"session"===b&&c&&(j.timeLeft=Math.floor(i.redirAfter/1e3)),i.countdownBar&&"dialog"===b?j.percentLeft=Math.floor(j.timeLeft/((i.redirAfter-i.warnAfter)/1e3)*100):i.countdownBar&&"session"===b&&(j.percentLeft=Math.floor(j.timeLeft/(i.redirAfter/1e3)*100)),a(".countdown-holder").text(j.timeLeft),i.countdownBar&&a(".countdown-bar").css("width",j.percentLeft+"%"),j.timeLeft=j.timeLeft-1,j.timer=setTimeout(function(){f(b)},1e3)}var g,h={title:"Your Session is About to Expire!",message:"Your session is about to expire.",logoutButton:"Logout",keepAliveButton:"Stay Connected",keepAliveUrl:"/keep-alive",ajaxType:"POST",ajaxData:"",redirUrl:"/timed-out",logoutUrl:"/log-out",warnAfter:9e5,redirAfter:12e5,keepAliveInterval:5e3,keepAlive:!0,ignoreUserActivity:!1,onStart:!1,onWarn:!1,onRedir:!1,countdownMessage:!1,countdownBar:!1},i=h,j={};if(b&&(i=a.extend(h,b)),i.warnAfter>=i.redirAfter)return console.error('Bootstrap-session-timeout plugin is miss-configured. Option "redirAfter" must be equal or greater than "warnAfter".'),!1;if("function"!=typeof i.onWarn){var k=i.countdownMessage?"<p>"+i.countdownMessage.replace(/{timer}/g,'<span class="countdown-holder"></span>')+"</p>":"",l=i.countdownBar?'<div class="progress"> <div class="progress-bar progress-bar-striped countdown-bar active" role="progressbar" style="min-width: 15px; width: 100%;"> <span class="countdown-holder"></span><span>s</span> </div> </div>':"";a("body").append('<div class="modal fade" id="session-timeout-dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4 class="modal-title">'+i.title+'</h4> </div> <div class="modal-body"> <p>'+i.message+"</p> "+k+" "+l+' </div> <div class="modal-footer"> <button id="session-timeout-dialog-logout" type="button" class="btn btn-default">'+i.logoutButton+'</button> <button id="session-timeout-dialog-keepalive" type="button" class="btn btn-primary" data-dismiss="modal">'+i.keepAliveButton+"</button> </div> </div> </div> </div>"),a("#session-timeout-dialog-logout").on("click",function(){window.location=i.logoutUrl}),a("#session-timeout-dialog").on("hide.bs.modal",function(){d()})}i.ignoreUserActivity||a(document).on("keyup mouseup mousemove touchend touchmove",function(){d()});var m=!1;d()}}(jQuery);
|
||||
73
libraries/framework/vendor/plugins/bstour/bootstrap-tour.css
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
/* ========================================================================
|
||||
* bootstrap-tour - v0.10.1
|
||||
* http://bootstraptour.com
|
||||
* ========================================================================
|
||||
* Copyright 2012-2013 Ulrich Sossou
|
||||
*
|
||||
* ========================================================================
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================================
|
||||
*/
|
||||
|
||||
.tour-backdrop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 1100 !important;;
|
||||
background-color: #000;
|
||||
opacity: 0.8;
|
||||
filter: alpha(opacity=80);
|
||||
}
|
||||
.tour-step-backdrop {
|
||||
position: relative;
|
||||
z-index: 1101 !important;
|
||||
background: inherit;
|
||||
}
|
||||
.tour-step-backdrop > td {
|
||||
position: relative;
|
||||
z-index: 1101 !important;;
|
||||
}
|
||||
.tour-step-background {
|
||||
position: absolute !important;
|
||||
z-index: 1100 !important;;
|
||||
background: inherit;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.popover[class*="tour-"] {
|
||||
z-index: 1100;
|
||||
}
|
||||
.popover[class*="tour-"] .popover-navigation {
|
||||
padding: 9px 14px;
|
||||
}
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="end"] {
|
||||
float: right;
|
||||
}
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="prev"],
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="next"],
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="end"] {
|
||||
cursor: pointer;
|
||||
}
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled,
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled,
|
||||
.popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled {
|
||||
cursor: default;
|
||||
}
|
||||
.popover[class*="tour-"].orphan {
|
||||
position: fixed;
|
||||
margin-top: 0;
|
||||
}
|
||||
.popover[class*="tour-"].orphan .arrow {
|
||||
display: none;
|
||||
}
|
||||
801
libraries/framework/vendor/plugins/bstour/bootstrap-tour.js
vendored
Normal file
@@ -0,0 +1,801 @@
|
||||
/* ========================================================================
|
||||
* bootstrap-tour - v0.10.1
|
||||
* http://bootstraptour.com
|
||||
* ========================================================================
|
||||
* Copyright 2012-2013 Ulrich Sossou
|
||||
*
|
||||
* ========================================================================
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================================
|
||||
*/
|
||||
|
||||
(function($, window) {
|
||||
var Tour, document;
|
||||
document = window.document;
|
||||
Tour = (function() {
|
||||
function Tour(options) {
|
||||
var storage;
|
||||
try {
|
||||
storage = window.localStorage;
|
||||
} catch (_error) {
|
||||
storage = false;
|
||||
}
|
||||
this._options = $.extend({
|
||||
name: 'tour',
|
||||
steps: [],
|
||||
container: 'body',
|
||||
autoscroll: true,
|
||||
keyboard: true,
|
||||
storage: storage,
|
||||
debug: false,
|
||||
backdrop: false,
|
||||
backdropPadding: 0,
|
||||
redirect: true,
|
||||
orphan: false,
|
||||
duration: false,
|
||||
delay: false,
|
||||
basePath: '',
|
||||
template: '<div class="popover" role="tooltip"> <div class="arrow"></div> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation"> <div class="btn-group"> <button class="btn btn-sm btn-default" data-role="prev">« Prev</button> <button class="btn btn-sm btn-default" data-role="next">Next »</button> <button class="btn btn-sm btn-default" data-role="pause-resume" data-pause-text="Pause" data-resume-text="Resume">Pause</button> </div> <button class="btn btn-sm btn-default" data-role="end">End tour</button> </div> </div>',
|
||||
afterSetState: function(key, value) {},
|
||||
afterGetState: function(key, value) {},
|
||||
afterRemoveState: function(key) {},
|
||||
onStart: function(tour) {},
|
||||
onEnd: function(tour) {},
|
||||
onShow: function(tour) {},
|
||||
onShown: function(tour) {},
|
||||
onHide: function(tour) {},
|
||||
onHidden: function(tour) {},
|
||||
onNext: function(tour) {},
|
||||
onPrev: function(tour) {},
|
||||
onPause: function(tour, duration) {},
|
||||
onResume: function(tour, duration) {}
|
||||
}, options);
|
||||
this._force = false;
|
||||
this._inited = false;
|
||||
this.backdrop = {
|
||||
overlay: null,
|
||||
$element: null,
|
||||
$background: null,
|
||||
backgroundShown: false,
|
||||
overlayElementShown: false
|
||||
};
|
||||
this;
|
||||
}
|
||||
|
||||
Tour.prototype.addSteps = function(steps) {
|
||||
var step, _i, _len;
|
||||
for (_i = 0, _len = steps.length; _i < _len; _i++) {
|
||||
step = steps[_i];
|
||||
this.addStep(step);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Tour.prototype.addStep = function(step) {
|
||||
this._options.steps.push(step);
|
||||
return this;
|
||||
};
|
||||
|
||||
Tour.prototype.getStep = function(i) {
|
||||
if (this._options.steps[i] != null) {
|
||||
return $.extend({
|
||||
id: "step-" + i,
|
||||
path: '',
|
||||
placement: 'right',
|
||||
title: '',
|
||||
content: '<p></p>',
|
||||
next: i === this._options.steps.length - 1 ? -1 : i + 1,
|
||||
prev: i - 1,
|
||||
animation: true,
|
||||
container: this._options.container,
|
||||
autoscroll: this._options.autoscroll,
|
||||
backdrop: this._options.backdrop,
|
||||
backdropPadding: this._options.backdropPadding,
|
||||
redirect: this._options.redirect,
|
||||
orphan: this._options.orphan,
|
||||
duration: this._options.duration,
|
||||
delay: this._options.delay,
|
||||
template: this._options.template,
|
||||
onShow: this._options.onShow,
|
||||
onShown: this._options.onShown,
|
||||
onHide: this._options.onHide,
|
||||
onHidden: this._options.onHidden,
|
||||
onNext: this._options.onNext,
|
||||
onPrev: this._options.onPrev,
|
||||
onPause: this._options.onPause,
|
||||
onResume: this._options.onResume
|
||||
}, this._options.steps[i]);
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype.init = function(force) {
|
||||
this._force = force;
|
||||
if (this.ended()) {
|
||||
this._debug('Tour ended, init prevented.');
|
||||
return this;
|
||||
}
|
||||
this.setCurrentStep();
|
||||
this._initMouseNavigation();
|
||||
this._initKeyboardNavigation();
|
||||
this._onResize((function(_this) {
|
||||
return function() {
|
||||
return _this.showStep(_this._current);
|
||||
};
|
||||
})(this));
|
||||
if (this._current !== null) {
|
||||
this.showStep(this._current);
|
||||
}
|
||||
this._inited = true;
|
||||
return this;
|
||||
};
|
||||
|
||||
Tour.prototype.start = function(force) {
|
||||
var promise;
|
||||
if (force == null) {
|
||||
force = false;
|
||||
}
|
||||
if (!this._inited) {
|
||||
this.init(force);
|
||||
}
|
||||
if (this._current === null) {
|
||||
promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0);
|
||||
this._callOnPromiseDone(promise, this.showStep, 0);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Tour.prototype.next = function() {
|
||||
var promise;
|
||||
promise = this.hideStep(this._current);
|
||||
return this._callOnPromiseDone(promise, this._showNextStep);
|
||||
};
|
||||
|
||||
Tour.prototype.prev = function() {
|
||||
var promise;
|
||||
promise = this.hideStep(this._current);
|
||||
return this._callOnPromiseDone(promise, this._showPrevStep);
|
||||
};
|
||||
|
||||
Tour.prototype.goTo = function(i) {
|
||||
var promise;
|
||||
promise = this.hideStep(this._current);
|
||||
return this._callOnPromiseDone(promise, this.showStep, i);
|
||||
};
|
||||
|
||||
Tour.prototype.end = function() {
|
||||
var endHelper, promise;
|
||||
endHelper = (function(_this) {
|
||||
return function(e) {
|
||||
$(document).off("click.tour-" + _this._options.name);
|
||||
$(document).off("keyup.tour-" + _this._options.name);
|
||||
$(window).off("resize.tour-" + _this._options.name);
|
||||
_this._setState('end', 'yes');
|
||||
_this._inited = false;
|
||||
_this._force = false;
|
||||
_this._clearTimer();
|
||||
if (_this._options.onEnd != null) {
|
||||
return _this._options.onEnd(_this);
|
||||
}
|
||||
};
|
||||
})(this);
|
||||
promise = this.hideStep(this._current);
|
||||
return this._callOnPromiseDone(promise, endHelper);
|
||||
};
|
||||
|
||||
Tour.prototype.ended = function() {
|
||||
return !this._force && !!this._getState('end');
|
||||
};
|
||||
|
||||
Tour.prototype.restart = function() {
|
||||
this._removeState('current_step');
|
||||
this._removeState('end');
|
||||
return this.start();
|
||||
};
|
||||
|
||||
Tour.prototype.pause = function() {
|
||||
var step;
|
||||
step = this.getStep(this._current);
|
||||
if (!(step && step.duration)) {
|
||||
return this;
|
||||
}
|
||||
this._paused = true;
|
||||
this._duration -= new Date().getTime() - this._start;
|
||||
window.clearTimeout(this._timer);
|
||||
this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining).");
|
||||
if (step.onPause != null) {
|
||||
return step.onPause(this, this._duration);
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype.resume = function() {
|
||||
var step;
|
||||
step = this.getStep(this._current);
|
||||
if (!(step && step.duration)) {
|
||||
return this;
|
||||
}
|
||||
this._paused = false;
|
||||
this._start = new Date().getTime();
|
||||
this._duration = this._duration || step.duration;
|
||||
this._timer = window.setTimeout((function(_this) {
|
||||
return function() {
|
||||
if (_this._isLast()) {
|
||||
return _this.next();
|
||||
} else {
|
||||
return _this.end();
|
||||
}
|
||||
};
|
||||
})(this), this._duration);
|
||||
this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration);
|
||||
if ((step.onResume != null) && this._duration !== step.duration) {
|
||||
return step.onResume(this, this._duration);
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype.hideStep = function(i) {
|
||||
var hideStepHelper, promise, step;
|
||||
step = this.getStep(i);
|
||||
if (!step) {
|
||||
return;
|
||||
}
|
||||
this._clearTimer();
|
||||
promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0);
|
||||
hideStepHelper = (function(_this) {
|
||||
return function(e) {
|
||||
var $element;
|
||||
$element = $(step.element);
|
||||
if (!($element.data('bs.popover') || $element.data('popover'))) {
|
||||
$element = $('body');
|
||||
}
|
||||
$element.popover('destroy').removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element");
|
||||
if (step.reflex) {
|
||||
$element.removeClass('tour-step-element-reflex').off("" + (_this._reflexEvent(step.reflex)) + ".tour-" + _this._options.name);
|
||||
}
|
||||
if (step.backdrop) {
|
||||
_this._hideBackdrop();
|
||||
}
|
||||
if (step.onHidden != null) {
|
||||
return step.onHidden(_this);
|
||||
}
|
||||
};
|
||||
})(this);
|
||||
this._callOnPromiseDone(promise, hideStepHelper);
|
||||
return promise;
|
||||
};
|
||||
|
||||
Tour.prototype.showStep = function(i) {
|
||||
var promise, showStepHelper, skipToPrevious, step;
|
||||
if (this.ended()) {
|
||||
this._debug('Tour ended, showStep prevented.');
|
||||
return this;
|
||||
}
|
||||
step = this.getStep(i);
|
||||
if (!step) {
|
||||
return;
|
||||
}
|
||||
skipToPrevious = i < this._current;
|
||||
promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0);
|
||||
showStepHelper = (function(_this) {
|
||||
return function(e) {
|
||||
var current_path, path, showPopoverAndOverlay;
|
||||
_this.setCurrentStep(i);
|
||||
path = (function() {
|
||||
switch ({}.toString.call(step.path)) {
|
||||
case '[object Function]':
|
||||
return step.path();
|
||||
case '[object String]':
|
||||
return this._options.basePath + step.path;
|
||||
default:
|
||||
return step.path;
|
||||
}
|
||||
}).call(_this);
|
||||
current_path = [document.location.pathname, document.location.hash].join('');
|
||||
if (_this._isRedirect(path, current_path)) {
|
||||
_this._redirect(step, path);
|
||||
return;
|
||||
}
|
||||
if (_this._isOrphan(step)) {
|
||||
if (!step.orphan) {
|
||||
_this._debug("Skip the orphan step " + (_this._current + 1) + ".\nOrphan option is false and the element does not exist or is hidden.");
|
||||
if (skipToPrevious) {
|
||||
_this._showPrevStep();
|
||||
} else {
|
||||
_this._showNextStep();
|
||||
}
|
||||
return;
|
||||
}
|
||||
_this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");
|
||||
}
|
||||
if (step.backdrop) {
|
||||
_this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);
|
||||
}
|
||||
showPopoverAndOverlay = function() {
|
||||
if (_this.getCurrentStep() !== i) {
|
||||
return;
|
||||
}
|
||||
if ((step.element != null) && step.backdrop) {
|
||||
_this._showOverlayElement(step);
|
||||
}
|
||||
_this._showPopover(step, i);
|
||||
if (step.onShown != null) {
|
||||
step.onShown(_this);
|
||||
}
|
||||
return _this._debug("Step " + (_this._current + 1) + " of " + _this._options.steps.length);
|
||||
};
|
||||
if (step.autoscroll) {
|
||||
_this._scrollIntoView(step.element, showPopoverAndOverlay);
|
||||
} else {
|
||||
showPopoverAndOverlay();
|
||||
}
|
||||
if (step.duration) {
|
||||
return _this.resume();
|
||||
}
|
||||
};
|
||||
})(this);
|
||||
if (step.delay) {
|
||||
this._debug("Wait " + step.delay + " milliseconds to show the step " + (this._current + 1));
|
||||
window.setTimeout((function(_this) {
|
||||
return function() {
|
||||
return _this._callOnPromiseDone(promise, showStepHelper);
|
||||
};
|
||||
})(this), step.delay);
|
||||
} else {
|
||||
this._callOnPromiseDone(promise, showStepHelper);
|
||||
}
|
||||
return promise;
|
||||
};
|
||||
|
||||
Tour.prototype.getCurrentStep = function() {
|
||||
return this._current;
|
||||
};
|
||||
|
||||
Tour.prototype.setCurrentStep = function(value) {
|
||||
if (value != null) {
|
||||
this._current = value;
|
||||
this._setState('current_step', value);
|
||||
} else {
|
||||
this._current = this._getState('current_step');
|
||||
this._current = this._current === null ? null : parseInt(this._current, 10);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Tour.prototype._setState = function(key, value) {
|
||||
var e, keyName;
|
||||
if (this._options.storage) {
|
||||
keyName = "" + this._options.name + "_" + key;
|
||||
try {
|
||||
this._options.storage.setItem(keyName, value);
|
||||
} catch (_error) {
|
||||
e = _error;
|
||||
if (e.code === DOMException.QUOTA_EXCEEDED_ERR) {
|
||||
this.debug('LocalStorage quota exceeded. State storage failed.');
|
||||
}
|
||||
}
|
||||
return this._options.afterSetState(keyName, value);
|
||||
} else {
|
||||
if (this._state == null) {
|
||||
this._state = {};
|
||||
}
|
||||
return this._state[key] = value;
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._removeState = function(key) {
|
||||
var keyName;
|
||||
if (this._options.storage) {
|
||||
keyName = "" + this._options.name + "_" + key;
|
||||
this._options.storage.removeItem(keyName);
|
||||
return this._options.afterRemoveState(keyName);
|
||||
} else {
|
||||
if (this._state != null) {
|
||||
return delete this._state[key];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._getState = function(key) {
|
||||
var keyName, value;
|
||||
if (this._options.storage) {
|
||||
keyName = "" + this._options.name + "_" + key;
|
||||
value = this._options.storage.getItem(keyName);
|
||||
} else {
|
||||
if (this._state != null) {
|
||||
value = this._state[key];
|
||||
}
|
||||
}
|
||||
if (value === void 0 || value === 'null') {
|
||||
value = null;
|
||||
}
|
||||
this._options.afterGetState(key, value);
|
||||
return value;
|
||||
};
|
||||
|
||||
Tour.prototype._showNextStep = function() {
|
||||
var promise, showNextStepHelper, step;
|
||||
step = this.getStep(this._current);
|
||||
showNextStepHelper = (function(_this) {
|
||||
return function(e) {
|
||||
return _this.showStep(step.next);
|
||||
};
|
||||
})(this);
|
||||
promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0);
|
||||
return this._callOnPromiseDone(promise, showNextStepHelper);
|
||||
};
|
||||
|
||||
Tour.prototype._showPrevStep = function() {
|
||||
var promise, showPrevStepHelper, step;
|
||||
step = this.getStep(this._current);
|
||||
showPrevStepHelper = (function(_this) {
|
||||
return function(e) {
|
||||
return _this.showStep(step.prev);
|
||||
};
|
||||
})(this);
|
||||
promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0);
|
||||
return this._callOnPromiseDone(promise, showPrevStepHelper);
|
||||
};
|
||||
|
||||
Tour.prototype._debug = function(text) {
|
||||
if (this._options.debug) {
|
||||
return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text);
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._isRedirect = function(path, currentPath) {
|
||||
return (path != null) && path !== '' && (({}.toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}.toString.call(path) === '[object String]' && path.replace(/\?.*$/, '').replace(/\/?$/, '') !== currentPath.replace(/\/?$/, '')));
|
||||
};
|
||||
|
||||
Tour.prototype._redirect = function(step, path) {
|
||||
if ($.isFunction(step.redirect)) {
|
||||
return step.redirect.call(this, path);
|
||||
} else if (step.redirect === true) {
|
||||
this._debug("Redirect to " + path);
|
||||
return document.location.href = path;
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._isOrphan = function(step) {
|
||||
return (step.element == null) || !$(step.element).length || $(step.element).is(':hidden') && ($(step.element)[0].namespaceURI !== 'http://www.w3.org/2000/svg');
|
||||
};
|
||||
|
||||
Tour.prototype._isLast = function() {
|
||||
return this._current < this._options.steps.length - 1;
|
||||
};
|
||||
|
||||
Tour.prototype._showPopover = function(step, i) {
|
||||
var $element, $tip, isOrphan, options;
|
||||
$(".tour-" + this._options.name).remove();
|
||||
options = $.extend({}, this._options);
|
||||
isOrphan = this._isOrphan(step);
|
||||
step.template = this._template(step, i);
|
||||
if (isOrphan) {
|
||||
step.element = 'body';
|
||||
step.placement = 'top';
|
||||
}
|
||||
$element = $(step.element);
|
||||
$element.addClass("tour-" + this._options.name + "-element tour-" + this._options.name + "-" + i + "-element");
|
||||
if (step.options) {
|
||||
$.extend(options, step.options);
|
||||
}
|
||||
if (step.reflex && !isOrphan) {
|
||||
$element.addClass('tour-step-element-reflex');
|
||||
$element.off("" + (this._reflexEvent(step.reflex)) + ".tour-" + this._options.name);
|
||||
$element.on("" + (this._reflexEvent(step.reflex)) + ".tour-" + this._options.name, (function(_this) {
|
||||
return function() {
|
||||
if (_this._isLast()) {
|
||||
return _this.next();
|
||||
} else {
|
||||
return _this.end();
|
||||
}
|
||||
};
|
||||
})(this));
|
||||
}
|
||||
$element.popover({
|
||||
placement: step.placement,
|
||||
trigger: 'manual',
|
||||
title: step.title,
|
||||
content: step.content,
|
||||
html: true,
|
||||
animation: step.animation,
|
||||
container: step.container,
|
||||
template: step.template,
|
||||
// selector: step.element
|
||||
}).popover('show');
|
||||
$tip = $element.data('bs.popover') ? $element.data('bs.popover').tip() : $element.data('popover').tip();
|
||||
$tip.attr('id', step.id);
|
||||
this._reposition($tip, step);
|
||||
if (isOrphan) {
|
||||
return this._center($tip);
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._template = function(step, i) {
|
||||
var $navigation, $next, $prev, $template;
|
||||
$template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template);
|
||||
$navigation = $template.find('.popover-navigation');
|
||||
$prev = $navigation.find('[data-role="prev"]');
|
||||
$next = $navigation.find('[data-role="next"]');
|
||||
if (this._isOrphan(step)) {
|
||||
$template.addClass('orphan');
|
||||
}
|
||||
$template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i);
|
||||
if (step.prev < 0) {
|
||||
$navigation.find('[data-role="prev"]').addClass('disabled');
|
||||
}
|
||||
if (step.next < 0) {
|
||||
$navigation.find('[data-role="next"]').addClass('disabled');
|
||||
}
|
||||
if (!step.duration) {
|
||||
$navigation.find('[data-role="pause-resume"]').remove();
|
||||
}
|
||||
return $template.clone().wrap('<div>').parent().html();
|
||||
};
|
||||
|
||||
Tour.prototype._reflexEvent = function(reflex) {
|
||||
if ({}.toString.call(reflex) === '[object Boolean]') {
|
||||
return 'click';
|
||||
} else {
|
||||
return reflex;
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._reposition = function($tip, step) {
|
||||
var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
|
||||
offsetWidth = $tip[0].offsetWidth;
|
||||
offsetHeight = $tip[0].offsetHeight;
|
||||
tipOffset = $tip.offset();
|
||||
originalLeft = tipOffset.left;
|
||||
originalTop = tipOffset.top;
|
||||
offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight();
|
||||
if (offsetBottom < 0) {
|
||||
tipOffset.top = tipOffset.top + offsetBottom;
|
||||
}
|
||||
offsetRight = $('html').outerWidth() - tipOffset.left - $tip.outerWidth();
|
||||
if (offsetRight < 0) {
|
||||
tipOffset.left = tipOffset.left + offsetRight;
|
||||
}
|
||||
if (tipOffset.top < 0) {
|
||||
tipOffset.top = 0;
|
||||
}
|
||||
if (tipOffset.left < 0) {
|
||||
tipOffset.left = 0;
|
||||
}
|
||||
$tip.offset(tipOffset);
|
||||
if (step.placement === 'bottom' || step.placement === 'top') {
|
||||
if (originalLeft !== tipOffset.left) {
|
||||
return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, 'left');
|
||||
}
|
||||
} else {
|
||||
if (originalTop !== tipOffset.top) {
|
||||
return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, 'top');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._center = function($tip) {
|
||||
return $tip.css('top', $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
|
||||
};
|
||||
|
||||
Tour.prototype._replaceArrow = function($tip, delta, dimension, position) {
|
||||
return $tip.find('.arrow').css(position, delta ? 50 * (1 - delta / dimension) + '%' : '');
|
||||
};
|
||||
|
||||
Tour.prototype._scrollIntoView = function(element, callback) {
|
||||
var $element, $window, counter, offsetTop, scrollTop, windowHeight;
|
||||
$element = $(element);
|
||||
if (!$element.length) {
|
||||
return callback();
|
||||
}
|
||||
$window = $(window);
|
||||
offsetTop = $element.offset().top;
|
||||
windowHeight = $window.height();
|
||||
scrollTop = Math.max(0, offsetTop - (windowHeight / 2));
|
||||
this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + ".");
|
||||
counter = 0;
|
||||
return $('body, html').stop(true, true).animate({
|
||||
scrollTop: Math.ceil(scrollTop)
|
||||
}, (function(_this) {
|
||||
return function() {
|
||||
if (++counter === 2) {
|
||||
callback();
|
||||
return _this._debug("Scroll into view.\nAnimation end element offset: " + ($element.offset().top) + ".\nWindow height: " + ($window.height()) + ".");
|
||||
}
|
||||
};
|
||||
})(this));
|
||||
};
|
||||
|
||||
Tour.prototype._onResize = function(callback, timeout) {
|
||||
return $(window).on("resize.tour-" + this._options.name, function() {
|
||||
clearTimeout(timeout);
|
||||
return timeout = setTimeout(callback, 100);
|
||||
});
|
||||
};
|
||||
|
||||
Tour.prototype._initMouseNavigation = function() {
|
||||
var _this;
|
||||
_this = this;
|
||||
return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']", (function(_this) {
|
||||
return function(e) {
|
||||
e.preventDefault();
|
||||
return _this.next();
|
||||
};
|
||||
})(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']", (function(_this) {
|
||||
return function(e) {
|
||||
e.preventDefault();
|
||||
return _this.prev();
|
||||
};
|
||||
})(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", (function(_this) {
|
||||
return function(e) {
|
||||
e.preventDefault();
|
||||
return _this.end();
|
||||
};
|
||||
})(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) {
|
||||
var $this;
|
||||
e.preventDefault();
|
||||
$this = $(this);
|
||||
$this.text(_this._paused ? $this.data('pause-text') : $this.data('resume-text'));
|
||||
if (_this._paused) {
|
||||
return _this.resume();
|
||||
} else {
|
||||
return _this.pause();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Tour.prototype._initKeyboardNavigation = function() {
|
||||
if (!this._options.keyboard) {
|
||||
return;
|
||||
}
|
||||
return $(document).on("keyup.tour-" + this._options.name, (function(_this) {
|
||||
return function(e) {
|
||||
if (!e.which) {
|
||||
return;
|
||||
}
|
||||
switch (e.which) {
|
||||
case 39:
|
||||
e.preventDefault();
|
||||
if (_this._isLast()) {
|
||||
return _this.next();
|
||||
} else {
|
||||
return _this.end();
|
||||
}
|
||||
break;
|
||||
case 37:
|
||||
e.preventDefault();
|
||||
if (_this._current > 0) {
|
||||
return _this.prev();
|
||||
}
|
||||
break;
|
||||
case 27:
|
||||
e.preventDefault();
|
||||
return _this.end();
|
||||
}
|
||||
};
|
||||
})(this));
|
||||
};
|
||||
|
||||
Tour.prototype._makePromise = function(result) {
|
||||
if (result && $.isFunction(result.then)) {
|
||||
return result;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._callOnPromiseDone = function(promise, cb, arg) {
|
||||
if (promise) {
|
||||
return promise.then((function(_this) {
|
||||
return function(e) {
|
||||
return cb.call(_this, arg);
|
||||
};
|
||||
})(this));
|
||||
} else {
|
||||
return cb.call(this, arg);
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._showBackdrop = function(element) {
|
||||
if (this.backdrop.backgroundShown) {
|
||||
return;
|
||||
}
|
||||
this.backdrop = $('<div>', {
|
||||
"class": 'tour-backdrop'
|
||||
});
|
||||
this.backdrop.backgroundShown = true;
|
||||
return $('body').append(this.backdrop);
|
||||
};
|
||||
|
||||
Tour.prototype._hideBackdrop = function() {
|
||||
this._hideOverlayElement();
|
||||
return this._hideBackground();
|
||||
};
|
||||
|
||||
Tour.prototype._hideBackground = function() {
|
||||
if (this.backdrop) {
|
||||
this.backdrop.remove();
|
||||
this.backdrop.overlay = null;
|
||||
return this.backdrop.backgroundShown = false;
|
||||
}
|
||||
};
|
||||
|
||||
Tour.prototype._showOverlayElement = function(step) {
|
||||
var $element, elementData;
|
||||
$element = $(step.element);
|
||||
if (!$element || $element.length === 0 || this.backdrop.overlayElementShown) {
|
||||
return;
|
||||
}
|
||||
this.backdrop.overlayElementShown = true;
|
||||
this.backdrop.$element = $element.addClass('tour-step-backdrop');
|
||||
this.backdrop.$background = $('<div>', {
|
||||
"class": 'tour-step-background'
|
||||
});
|
||||
elementData = {
|
||||
width: $element.innerWidth(),
|
||||
height: $element.innerHeight(),
|
||||
offset: $element.offset()
|
||||
};
|
||||
this.backdrop.$background.appendTo('body');
|
||||
if (step.backdropPadding) {
|
||||
elementData = this._applyBackdropPadding(step.backdropPadding, elementData);
|
||||
}
|
||||
return this.backdrop.$background.width(elementData.width).height(elementData.height).offset(elementData.offset);
|
||||
};
|
||||
|
||||
Tour.prototype._hideOverlayElement = function() {
|
||||
if (!this.backdrop.overlayElementShown) {
|
||||
return;
|
||||
}
|
||||
this.backdrop.$element.removeClass('tour-step-backdrop');
|
||||
this.backdrop.$background.remove();
|
||||
this.backdrop.$element = null;
|
||||
this.backdrop.$background = null;
|
||||
return this.backdrop.overlayElementShown = false;
|
||||
};
|
||||
|
||||
Tour.prototype._applyBackdropPadding = function(padding, data) {
|
||||
if (typeof padding === 'object') {
|
||||
if (padding.top == null) {
|
||||
padding.top = 0;
|
||||
}
|
||||
if (padding.right == null) {
|
||||
padding.right = 0;
|
||||
}
|
||||
if (padding.bottom == null) {
|
||||
padding.bottom = 0;
|
||||
}
|
||||
if (padding.left == null) {
|
||||
padding.left = 0;
|
||||
}
|
||||
data.offset.top = data.offset.top - padding.top;
|
||||
data.offset.left = data.offset.left - padding.left;
|
||||
data.width = data.width + padding.left + padding.right;
|
||||
data.height = data.height + padding.top + padding.bottom;
|
||||
} else {
|
||||
data.offset.top = data.offset.top - padding;
|
||||
data.offset.left = data.offset.left - padding;
|
||||
data.width = data.width + (padding * 2);
|
||||
data.height = data.height + (padding * 2);
|
||||
}
|
||||
return data;
|
||||
};
|
||||
|
||||
Tour.prototype._clearTimer = function() {
|
||||
window.clearTimeout(this._timer);
|
||||
this._timer = null;
|
||||
return this._duration = null;
|
||||
};
|
||||
|
||||
return Tour;
|
||||
|
||||
})();
|
||||
return window.Tour = Tour;
|
||||
})(jQuery, window);
|
||||
1
libraries/framework/vendor/plugins/c3charts/c3.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.c3 svg{font:10px sans-serif}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:gray;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:.75}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #CCC}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#FFF}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:none}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max,.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}
|
||||
5
libraries/framework/vendor/plugins/c3charts/c3.min.js
vendored
Normal file
5
libraries/framework/vendor/plugins/c3charts/d3.min.js
vendored
Normal file
11
libraries/framework/vendor/plugins/c3charts/extensions/exporter/config.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"js": [
|
||||
"../../bower_components/d3/d3.min.js",
|
||||
"../../c3.min.js"
|
||||
],
|
||||
"css": [
|
||||
"../../c3.css"
|
||||
],
|
||||
|
||||
"template": "<html><head><meta charset=\"utf-8\"><style>{0}</style></head><body><div id=\"chart\"></div></body></html>"
|
||||
}
|
||||
140
libraries/framework/vendor/plugins/c3charts/extensions/exporter/phantom-exporter.js
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
/**
|
||||
* PNG\JPEG exporter for C3.js, version 0.2
|
||||
* (c) 2014 Yuval Bar-On
|
||||
*
|
||||
* usage: path/to/phantomjs output options [WxH]
|
||||
*
|
||||
*/
|
||||
|
||||
// useful python-styled string formatting, "hello {0}! Javascript is {1}".format("world", "awesome");
|
||||
if (!String.prototype.format) {
|
||||
String.prototype.format = function() {
|
||||
var args = arguments;
|
||||
return this.replace(/{(\d+)}/g, function(match, number) {
|
||||
return typeof args[number] != 'undefined'
|
||||
? args[number]
|
||||
: match
|
||||
;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
// defaults
|
||||
var page = require('webpage').create(),
|
||||
fs = require('fs'),
|
||||
system = require('system'),
|
||||
config = JSON.parse( fs.read('config.json') ),
|
||||
output, size;
|
||||
|
||||
if (system.args.length < 3 ) {
|
||||
console.log('Usage: phantasm.js filename html [WxH]');
|
||||
phantom.exit(1);
|
||||
} else {
|
||||
out = system.args[1];
|
||||
opts = JSON.parse( system.args[2] );
|
||||
|
||||
if (system.args[3]) {
|
||||
var dimensions = system.args[3].split('x'),
|
||||
width = dimensions[0],
|
||||
height = dimensions[1];
|
||||
|
||||
function checkNum(check) {
|
||||
check = parseInt(check);
|
||||
if (!isNaN(check))
|
||||
return check;
|
||||
return false;
|
||||
}
|
||||
|
||||
width = checkNum(width);
|
||||
height = checkNum(height);
|
||||
|
||||
if (width && height) {
|
||||
page.viewportSize = {
|
||||
height: height,
|
||||
width: width
|
||||
}
|
||||
}
|
||||
|
||||
// fit chart size to img size, if undefined
|
||||
if (!opts.size) {
|
||||
opts.size = {
|
||||
"height": height,
|
||||
"width": width
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// check if size is defined in chart,
|
||||
// else apply defaults
|
||||
page.viewportSize = {
|
||||
height: (opts.size && opts.size.height) ? opts.size.height : 320,
|
||||
width: (opts.size && opts.size.width ) ? opts.size.width : 710,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
page.onResourceRequested = function(requestData, request) {
|
||||
console.log('::loading resource ', requestData['url']);
|
||||
};
|
||||
|
||||
// helpful debug functions
|
||||
page.onConsoleMessage = function(msg){
|
||||
console.log(msg);
|
||||
};
|
||||
|
||||
page.onError = function(msg, trace) {
|
||||
var msgStack = ['ERROR: ' + msg];
|
||||
|
||||
if (trace && trace.length) {
|
||||
msgStack.push('TRACE:');
|
||||
trace.forEach(function(t) {
|
||||
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
|
||||
});
|
||||
}
|
||||
|
||||
console.error(msgStack.join('\n'));
|
||||
};
|
||||
|
||||
// render page
|
||||
function injectVerify(script) {
|
||||
var req = page.injectJs(script);
|
||||
if (!req) {
|
||||
console.log( '\nError!\n' + script + ' not found!\n' );
|
||||
phantom.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
page.onLoadFinished = function() {
|
||||
console.log('::rendering');
|
||||
|
||||
for (var j in config.js) {
|
||||
injectVerify(config.js[j]);
|
||||
}
|
||||
|
||||
page.evaluate(function(chartoptions) {
|
||||
// phantomjs doesn't know how to handle .bind, so we override
|
||||
Function.prototype.bind = Function.prototype.bind || function (thisp) {
|
||||
var fn = this;
|
||||
return function () {
|
||||
return fn.apply(thisp, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
// generate chart
|
||||
c3.generate(chartoptions);
|
||||
|
||||
}, opts);
|
||||
|
||||
// setting transition to 0 has proven not to work thus far, but 300ms isn't much
|
||||
// so this is acceptable for now
|
||||
setTimeout(function() {
|
||||
page.render(out);
|
||||
phantom.exit();
|
||||
}, 300);
|
||||
}
|
||||
|
||||
// apply css inline because that usually renders better
|
||||
var css = '';
|
||||
for (var i in config.css) {
|
||||
css += fs.read(config.css[i]);
|
||||
}
|
||||
page.content = config.template.format(css);
|
||||
BIN
libraries/framework/vendor/plugins/c3charts/extensions/exporter/test.png
vendored
Normal file
|
After Width: | Height: | Size: 16 KiB |
380
libraries/framework/vendor/plugins/c3charts/extensions/js/c3ext.js
vendored
Normal file
@@ -0,0 +1,380 @@
|
||||
var c3ext = {};
|
||||
c3ext.generate = function (options) {
|
||||
|
||||
if (options.zoom2 != null) {
|
||||
zoom2_reducers = options.zoom2.reducers || {};
|
||||
zoom2_enabled = options.zoom2.enabled;
|
||||
_zoom2_factor = options.zoom2.factor || 1;
|
||||
_zoom2_maxItems = options.zoom2.maxItems;
|
||||
}
|
||||
|
||||
if (!zoom2_enabled) {
|
||||
return c3.generate(options);
|
||||
}
|
||||
|
||||
|
||||
var originalData = Q.copy(options.data);
|
||||
var zoom2_reducers;
|
||||
var zoom2_enabled;
|
||||
var _zoom2_maxItems;
|
||||
|
||||
if (_zoom2_maxItems == null) {
|
||||
var el = d3.select(options.bindto)[0][0];
|
||||
if (el != null) {
|
||||
var availWidth = el.clientWidth;
|
||||
|
||||
var pointSize = 20;
|
||||
_zoom2_maxItems = Math.ceil(availWidth / pointSize);
|
||||
}
|
||||
if (_zoom2_maxItems == null || _zoom2_maxItems < 10) {
|
||||
_zoom2_maxItems = 10;
|
||||
}
|
||||
}
|
||||
|
||||
function onZoomChanged(e) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
var zoom2 = c3ext.ZoomBehavior({ changed: onZoomChanged, bindto: options.bindto });
|
||||
|
||||
zoom2.enhance = function () {
|
||||
_zoom2_maxItems *= 2;
|
||||
var totalItems = zoom2.getZoom().totalItems;
|
||||
if (_zoom2_maxItems > totalItems)
|
||||
_zoom2_maxItems = totalItems;
|
||||
refresh();
|
||||
}
|
||||
zoom2.dehance = function () {
|
||||
_zoom2_maxItems = Math.ceil(_zoom2_maxItems / 2) + 1;
|
||||
refresh();
|
||||
}
|
||||
|
||||
zoom2.maxItems = function () { return _zoom2_maxItems; };
|
||||
function zoomAndReduceData(list, zoomRange, func, maxItems) {
|
||||
//var maxItems = 10;//Math.ceil(10 * zoomFactor);
|
||||
var list2 = list.slice(zoomRange[0], zoomRange[1]);
|
||||
var chunkSize = 1;
|
||||
var list3 = list2;
|
||||
if (list3.length > maxItems) {
|
||||
var chunkSize = Math.ceil(list2.length / maxItems);
|
||||
list3 = list3.splitIntoChunksOf(chunkSize).map(func);
|
||||
}
|
||||
//console.log("x" + getCurrentZoomLevel() + ", maxItems=" + maxItems + " chunkSize=" + chunkSize + " totalBefore=" + list2.length + ", totalAfter=" + list3.length);
|
||||
return list3;
|
||||
}
|
||||
|
||||
function first(t) { return t[0]; }
|
||||
|
||||
var getDataForZoom = function (data) {
|
||||
if (data.columns == null || data.columns.length == 0)
|
||||
return;
|
||||
|
||||
var zoomInfo = zoom2.getZoom();
|
||||
if (zoomInfo.totalItems != data.columns[0].length - 1) {
|
||||
zoom2.setOptions({ totalItems: data.columns[0].length - 1 });
|
||||
zoomInfo = zoom2.getZoom();
|
||||
}
|
||||
data.columns = originalData.columns.map(function (column) {
|
||||
var name = column[0];
|
||||
var reducer = zoom2_reducers[name] || first; //by default take the first
|
||||
|
||||
var values = column.slice(1);
|
||||
var newValues = zoomAndReduceData(values, zoomInfo.currentZoom, reducer, _zoom2_maxItems);
|
||||
return [name].concat(newValues);
|
||||
});
|
||||
return data;
|
||||
};
|
||||
|
||||
getDataForZoom(options.data);
|
||||
var chart = c3.generate(options);
|
||||
var _chart_load_org = chart.load.bind(chart);
|
||||
chart.zoom2 = zoom2;
|
||||
chart.load = function (data) {
|
||||
if (data.unload) {
|
||||
unload(data.unload);
|
||||
delete data.unload;
|
||||
}
|
||||
Q.copy(data, originalData);
|
||||
refresh();
|
||||
}
|
||||
chart.unload = function (names) {
|
||||
unload(names);
|
||||
refresh();
|
||||
}
|
||||
|
||||
function unload(names) {
|
||||
originalData.columns.removeAll(function (t) { names.contains(t); });
|
||||
}
|
||||
|
||||
|
||||
function refresh() {
|
||||
var data = Q.copy(originalData)
|
||||
getDataForZoom(data);
|
||||
_chart_load_org(data);
|
||||
};
|
||||
|
||||
|
||||
return chart;
|
||||
}
|
||||
|
||||
c3ext.ZoomBehavior = function (options) {
|
||||
var zoom = { __type: "ZoomBehavior" };
|
||||
|
||||
var _zoom2_factor;
|
||||
var _left;
|
||||
var totalItems;
|
||||
var currentZoom;
|
||||
var bindto = options.bindto;
|
||||
var _zoomChanged = options.changed || function () { };
|
||||
var element;
|
||||
var mousewheelTimer;
|
||||
var deltaY = 0;
|
||||
var leftRatio = 0;
|
||||
|
||||
|
||||
zoom.setOptions = function (options) {
|
||||
if (options == null)
|
||||
options = {};
|
||||
_zoom2_factor = options.factor || 1;
|
||||
_left = 0;
|
||||
totalItems = options.totalItems || 0;
|
||||
currentZoom = [0, totalItems];
|
||||
_zoomChanged = options.changed || _zoomChanged;
|
||||
}
|
||||
|
||||
zoom.setOptions(options);
|
||||
|
||||
|
||||
function verifyZoom(newZoom) {
|
||||
//newZoom.sort();
|
||||
if (newZoom[1] > totalItems) {
|
||||
var diff = newZoom[1] - totalItems;
|
||||
newZoom[0] -= diff;
|
||||
newZoom[1] -= diff;
|
||||
}
|
||||
if (newZoom[0] < 0) {
|
||||
var diff = newZoom[0] * -1;
|
||||
newZoom[0] += diff;
|
||||
newZoom[1] += diff;
|
||||
}
|
||||
if (newZoom[1] > totalItems)
|
||||
newZoom[1] = totalItems;
|
||||
if (newZoom[0] < 0)
|
||||
newZoom[0] = 0;
|
||||
}
|
||||
|
||||
function zoomAndPan(zoomFactor, left) {
|
||||
var itemsToShow = Math.ceil(totalItems / zoomFactor);
|
||||
var newZoom = [left, left + itemsToShow];
|
||||
verifyZoom(newZoom);
|
||||
currentZoom = newZoom;
|
||||
onZoomChanged();
|
||||
}
|
||||
|
||||
function onZoomChanged() {
|
||||
if (_zoomChanged != null)
|
||||
_zoomChanged(zoom.getZoom());
|
||||
}
|
||||
function applyZoomAndPan() {
|
||||
zoomAndPan(_zoom2_factor, _left);
|
||||
}
|
||||
function getItemsToShow() {
|
||||
var itemsToShow = Math.ceil(totalItems / _zoom2_factor);
|
||||
return itemsToShow;
|
||||
}
|
||||
|
||||
|
||||
zoom.getZoom = function () {
|
||||
return { totalItems: totalItems, currentZoom: currentZoom.slice() };
|
||||
}
|
||||
|
||||
zoom.factor = function (factor, skipDraw) {
|
||||
if (arguments.length == 0)
|
||||
return _zoom2_factor;
|
||||
_zoom2_factor = factor;
|
||||
if (_zoom2_factor < 1)
|
||||
_zoom2_factor = 1;
|
||||
if (skipDraw)
|
||||
return;
|
||||
applyZoomAndPan();
|
||||
}
|
||||
zoom.left = function (left, skipDraw) {
|
||||
if (arguments.length == 0)
|
||||
return _left;
|
||||
_left = left;
|
||||
if (_left < 0)
|
||||
_left = 0;
|
||||
var pageSize = getItemsToShow();
|
||||
//_left += pageSize;
|
||||
if (_left + pageSize > totalItems)
|
||||
_left = totalItems - pageSize;
|
||||
console.log({ left: _left, pageSize: pageSize });
|
||||
if (skipDraw)
|
||||
return;
|
||||
applyZoomAndPan();
|
||||
}
|
||||
|
||||
zoom.zoomAndPanByRatio = function (zoomRatio, panRatio) {
|
||||
|
||||
var pageSize = getItemsToShow();
|
||||
var leftOffset = Math.round(pageSize * panRatio);
|
||||
var mouseLeft = _left + leftOffset;
|
||||
zoom.factor(zoom.factor() * zoomRatio, true);
|
||||
|
||||
var finalLeft = mouseLeft;
|
||||
if (zoomRatio != 1) {
|
||||
var pageSize2 = getItemsToShow();
|
||||
var leftOffset2 = Math.round(pageSize2 * panRatio);
|
||||
finalLeft = mouseLeft - leftOffset2;
|
||||
}
|
||||
zoom.left(finalLeft, true);
|
||||
applyZoomAndPan();
|
||||
}
|
||||
|
||||
zoom.zoomIn = function () {
|
||||
zoom.zoomAndPanByRatio(2, 0);
|
||||
}
|
||||
|
||||
zoom.zoomOut = function () {
|
||||
zoom.zoomAndPanByRatio(0.5, 0);
|
||||
}
|
||||
|
||||
zoom.panLeft = function () {
|
||||
zoom.zoomAndPanByRatio(1, -1);
|
||||
}
|
||||
zoom.panRight = function () {
|
||||
zoom.zoomAndPanByRatio(1, 1);
|
||||
}
|
||||
|
||||
zoom.reset = function () {
|
||||
_left = 0;
|
||||
_zoom2_factor = 1;
|
||||
applyZoomAndPan();
|
||||
}
|
||||
|
||||
function doZoom() {
|
||||
if (deltaY != 0) {
|
||||
var maxDelta = 10;
|
||||
var multiply = (maxDelta + deltaY) / maxDelta;
|
||||
//var factor = chart.zoom2.factor()*multiply;
|
||||
//factor= Math.ceil(factor*100) / 100;
|
||||
console.log({ deltaY: deltaY, multiply: multiply });
|
||||
zoom.zoomAndPanByRatio(multiply, leftRatio);//0.5);//leftRatio);
|
||||
deltaY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function element_mousewheel(e) {
|
||||
deltaY += e.deltaY;
|
||||
leftRatio = (e.offsetX - 70) / (e.currentTarget.offsetWidth - 70);
|
||||
//console.log({ "e.offsetX": e.offsetX, "e.currentTarget.offsetWidth": e.currentTarget.offsetWidth, leftRatio: leftRatio });
|
||||
mousewheelTimer.set(150);
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
if (bindto != null) {
|
||||
element = $(options.bindto);
|
||||
if (element.mousewheel) {
|
||||
mousewheelTimer = new Timer(doZoom);
|
||||
element.mousewheel(element_mousewheel);
|
||||
}
|
||||
}
|
||||
|
||||
return zoom;
|
||||
|
||||
}
|
||||
|
||||
if (typeof (Q) == "undefined") {
|
||||
var Q = function () {
|
||||
};
|
||||
|
||||
Q.copy = function (src, target, options, depth) {
|
||||
///<summary>Copies an object into a target object, recursively cloning any object or array in the way, overwrite=true will overwrite a primitive field value even if exists</summary>
|
||||
///<param name="src" />
|
||||
///<param name="target" />
|
||||
///<param name="options" type="Object">{ overwrite:false }</param>
|
||||
///<returns type="Object">The copied object</returns>
|
||||
if (depth == null)
|
||||
depth = 0;
|
||||
if (depth == 100) {
|
||||
console.warn("Q.copy is in depth of 100 - possible circular reference")
|
||||
}
|
||||
options = options || { overwrite: false };
|
||||
if (src == target || src == null)
|
||||
return target;
|
||||
if (typeof (src) != "object") {
|
||||
if (options.overwrite || target == null)
|
||||
return src;
|
||||
return target;
|
||||
}
|
||||
if (typeof (src.clone) == "function") {
|
||||
if (options.overwrite || target == null)
|
||||
return src.clone();
|
||||
return target;
|
||||
}
|
||||
if (target == null) {
|
||||
if (src instanceof Array)
|
||||
target = [];
|
||||
else
|
||||
target = {};
|
||||
}
|
||||
|
||||
if (src instanceof Array) {
|
||||
for (var i = 0; i < src.length; i++) {
|
||||
var item = src[i];
|
||||
var item2 = target[i];
|
||||
item2 = Q.copy(item, item2, options, depth + 1);
|
||||
target[i] = item2;
|
||||
}
|
||||
target.splice(src.length, target.length - src.length);
|
||||
return target;
|
||||
}
|
||||
for (var p in src) {
|
||||
var value = src[p];
|
||||
var value2 = target[p];
|
||||
value2 = Q.copy(value, value2, options, depth + 1);
|
||||
target[p] = value2;
|
||||
}
|
||||
return target;
|
||||
}
|
||||
}
|
||||
if (typeof (Timer) == "undefined") {
|
||||
var Timer = function (action, ms) {
|
||||
this.action = action;
|
||||
if (ms != null)
|
||||
this.set(ms);
|
||||
}
|
||||
|
||||
Timer.prototype.set = function (ms) {
|
||||
if (ms == null)
|
||||
ms = this._ms;
|
||||
else
|
||||
this._ms = ms;
|
||||
this.clear();
|
||||
if (ms == null)
|
||||
return;
|
||||
this.timeout = window.setTimeout(this.onTick.bind(this), ms);
|
||||
}
|
||||
|
||||
Timer.prototype.onTick = function () {
|
||||
this.clear();
|
||||
this.action();
|
||||
}
|
||||
|
||||
Timer.prototype.clear = function (ms) {
|
||||
if (this.timeout == null)
|
||||
return;
|
||||
window.clearTimeout(this.timeout);
|
||||
this.timeout = null;
|
||||
}
|
||||
}
|
||||
if (typeof(Array.prototype.splitIntoChunksOf)=="undefined") {
|
||||
Array.prototype.splitIntoChunksOf = function (countInEachChunk) {
|
||||
var chunks = Math.ceil(this.length / countInEachChunk);
|
||||
var list = [];
|
||||
for (var i = 0; i < this.length; i += countInEachChunk) {
|
||||
list.push(this.slice(i, i + countInEachChunk));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
36
libraries/framework/vendor/plugins/c3charts/require.js
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
|
||||
Available via the MIT or new BSD license.
|
||||
see: http://github.com/jrburke/requirejs for details
|
||||
*/
|
||||
var requirejs,require,define;
|
||||
(function(ca){function G(b){return"[object Function]"===M.call(b)}function H(b){return"[object Array]"===M.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function U(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function j(b,c){return s(b,c)&&b[c]}function B(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function V(b,c,d,g){c&&B(c,function(c,h){if(d||!s(b,h))g&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
|
||||
RegExp)?(b[h]||(b[h]={}),V(b[h],c,d,g)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function da(b){throw b;}function ea(b){if(!b)return b;var c=ca;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ha(b){function c(a,e,b){var f,n,c,d,g,h,i,I=e&&e.split("/");n=I;var m=l.map,k=m&&m["*"];if(a&&"."===a.charAt(0))if(e){n=
|
||||
I.slice(0,I.length-1);a=a.split("/");e=a.length-1;l.nodeIdCompat&&R.test(a[e])&&(a[e]=a[e].replace(R,""));n=a=n.concat(a);d=n.length;for(e=0;e<d;e++)if(c=n[e],"."===c)n.splice(e,1),e-=1;else if(".."===c)if(1===e&&(".."===n[2]||".."===n[0]))break;else 0<e&&(n.splice(e-1,2),e-=2);a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if(b&&m&&(I||k)){n=a.split("/");e=n.length;a:for(;0<e;e-=1){d=n.slice(0,e).join("/");if(I)for(c=I.length;0<c;c-=1)if(b=j(m,I.slice(0,c).join("/")))if(b=j(b,d)){f=b;
|
||||
g=e;break a}!h&&(k&&j(k,d))&&(h=j(k,d),i=e)}!f&&h&&(f=h,g=i);f&&(n.splice(0,g,f),a=n.join("/"))}return(f=j(l.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(e){if(e.getAttribute("data-requiremodule")===a&&e.getAttribute("data-requirecontext")===i.contextName)return e.parentNode.removeChild(e),!0})}function g(a){var e=j(l.paths,a);if(e&&H(e)&&1<e.length)return e.shift(),i.require.undef(a),i.require([a]),!0}function u(a){var e,b=a?a.indexOf("!"):-1;-1<b&&(e=a.substring(0,
|
||||
b),a=a.substring(b+1,a.length));return[e,a]}function m(a,e,b,f){var n,d,g=null,h=e?e.name:null,l=a,m=!0,k="";a||(m=!1,a="_@r"+(M+=1));a=u(a);g=a[0];a=a[1];g&&(g=c(g,h,f),d=j(p,g));a&&(g?k=d&&d.normalize?d.normalize(a,function(a){return c(a,h,f)}):c(a,h,f):(k=c(a,h,f),a=u(k),g=a[0],k=a[1],b=!0,n=i.nameToUrl(k)));b=g&&!d&&!b?"_unnormalized"+(Q+=1):"";return{prefix:g,name:k,parentMap:e,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(g?g+"!"+k:k)+b}}function q(a){var e=a.id,b=j(k,e);b||(b=k[e]=new i.Module(a));
|
||||
return b}function r(a,e,b){var f=a.id,n=j(k,f);if(s(p,f)&&(!n||n.defineEmitComplete))"defined"===e&&b(p[f]);else if(n=q(a),n.error&&"error"===e)b(n.error);else n.on(e,b)}function w(a,e){var b=a.requireModules,f=!1;if(e)e(a);else if(v(b,function(e){if(e=j(k,e))e.error=a,e.events.error&&(f=!0,e.emit("error",a))}),!f)h.onError(a)}function x(){S.length&&(ia.apply(A,[A.length,0].concat(S)),S=[])}function y(a){delete k[a];delete W[a]}function F(a,e,b){var f=a.map.id;a.error?a.emit("error",a.error):(e[f]=
|
||||
!0,v(a.depMaps,function(f,c){var d=f.id,g=j(k,d);g&&(!a.depMatched[c]&&!b[d])&&(j(e,d)?(a.defineDep(c,p[d]),a.check()):F(g,e,b))}),b[f]=!0)}function D(){var a,e,b=(a=1E3*l.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],c=[],h=!1,k=!0;if(!X){X=!0;B(W,function(a){var i=a.map,m=i.id;if(a.enabled&&(i.isDefine||c.push(a),!a.error))if(!a.inited&&b)g(m)?h=e=!0:(f.push(m),d(m));else if(!a.inited&&(a.fetched&&i.isDefine)&&(h=!0,!i.prefix))return k=!1});if(b&&f.length)return a=C("timeout","Load timeout for modules: "+
|
||||
f,null,f),a.contextName=i.contextName,w(a);k&&v(c,function(a){F(a,{},{})});if((!b||e)&&h)if((z||fa)&&!Y)Y=setTimeout(function(){Y=0;D()},50);X=!1}}function E(a){s(p,a[0])||q(m(a[0],null,!0)).init(a[1],a[2])}function K(a){var a=a.currentTarget||a.srcElement,e=i.onScriptLoad;a.detachEvent&&!Z?a.detachEvent("onreadystatechange",e):a.removeEventListener("load",e,!1);e=i.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener("error",e,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function L(){var a;
|
||||
for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var X,$,i,N,Y,l={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},k={},W={},aa={},A=[],p={},T={},ba={},M=1,Q=1;N={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?p[a.map.id]=a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?
|
||||
a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return j(l.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};$=function(a){this.events=j(aa,a.id)||{};this.map=a;this.shim=j(l.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,e,b,f){f=f||{};if(!this.inited){this.factory=e;if(b)this.on("error",b);else this.events.error&&(b=t(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
|
||||
b;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,e){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=e)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
|
||||
this.map.url;T[a]||(T[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,e,b=this.map.id;e=this.depExports;var f=this.exports,c=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&
|
||||
(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
|
||||
this.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,"defined",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||""),f=m(a.prefix+"!"+J,this.map.parentMap),r(f,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);
|
||||
if(this.events.error)g.on("error",t(this,function(a){this.emit("error",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C("fromtexteval",
|
||||
"fromText eval for "+b+" failed: "+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if("string"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,"defined",t(this,function(a){this.defineDep(b,
|
||||
a);this.check()}));this.errback&&r(a,"error",t(this,this.errback))}c=a.id;f=k[c];!s(N,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,
|
||||
nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,
|
||||
a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+"/"+(a.main||"main").replace(ja,"").replace(R,"")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=
|
||||
!0);if("string"===typeof f){if(G(c))return w(C("requireargs","Invalid require call"),d);if(a&&s(N,f))return N[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C("notloaded",'Module name "'+j+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[j]}L();i.nextTick(function(){L();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==
|
||||
d&&(!("."===g||".."===g)||1<d))e=b.substring(d,b.length),b=b.substring(0,d);return i.nameToUrl(c(b,a&&a.id,!0),e,!0)},defined:function(b){return s(p,m(b,a,!1,!0).id)},specified:function(b){b=m(b,a,!1,!0).id;return s(p,b)||s(k,b)}});a||(g.undef=function(b){x();var c=m(b,a,!0),e=j(k,b);d(b);delete p[b];delete T[c.url];delete aa[b];U(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&(aa[b]=e.events),y(b))});return g},enable:function(a){j(k,a.id)&&q(a).enable()},completeLoad:function(a){var b,
|
||||
c,f=j(l.shim,a)||{},d=f.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=j(k,a);if(!b&&!s(p,a)&&c&&!c.inited){if(l.enforceDefine&&(!d||!ea(d)))return g(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,f.deps||[],f.exportsFn])}D()},nameToUrl:function(a,b,c){var f,d,g;(f=j(l.pkgs,a))&&(a=f);if(f=j(ba,a))return i.nameToUrl(f,b,c);if(h.jsExtRegExp.test(a))f=a+(b||"");else{f=l.paths;a=a.split("/");for(d=a.length;0<d;d-=1)if(g=a.slice(0,
|
||||
d).join("/"),g=j(f,g)){H(g)&&(g=g[0]);a.splice(0,d,g);break}f=a.join("/");f+=b||(/^data\:|\?/.test(f)||c?"":".js");f=("/"===f.charAt(0)||f.match(/^[\w\+\.\-]+:/)?"":l.baseUrl)+f}return l.urlArgs?f+((-1===f.indexOf("?")?"?":"&")+l.urlArgs):f},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=K(a),i.completeLoad(a.id)},onScriptError:function(a){var b=K(a);if(!g(b.id))return w(C("scripterror",
|
||||
"Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var h,x,y,D,K,E,P,L,q,Q,la=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ma=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,R=/\.js$/,ja=/^\.\//;x=Object.prototype;var M=x.toString,ga=x.hasOwnProperty,ia=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),fa=!z&&"undefined"!==typeof importScripts,ka=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,
|
||||
Z="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},r={},S=[],O=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;r=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(r=require,require=void 0);h=requirejs=function(b,c,d,g){var u,m="_";!H(b)&&"string"!==typeof b&&(u=b,H(c)?(b=c,c=d,d=g):b=[]);u&&u.context&&(m=u.context);(g=j(F,m))||(g=F[m]=h.s.newContext(m));u&&g.configure(u);return g.require(b,c,d)};h.config=function(b){return h(b)};
|
||||
h.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version="2.1.11";h.jsExtRegExp=/^\/|:|\?|\.js$/;h.isBrowser=z;x=h.s={contexts:F,newContext:ha};h({});v(["toUrl","undef","defined","specified"],function(b){h[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;h.onError=da;h.createNode=function(b){var c=
|
||||
b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};h.load=function(b,c,d){var g=b&&b.config||{};if(z)return g=h.createNode(g,c,d),g.setAttribute("data-requirecontext",b.contextName),g.setAttribute("data-requiremodule",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf("[native code"))&&!Z?(O=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):
|
||||
(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,L=g,D?y.insertBefore(g,D):y.appendChild(g),L=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(K=b.getAttribute("data-main"))return q=K,r.baseUrl||(E=q.split("/"),q=E.pop(),Q=E.length?E.join("/")+"/":"./",r.baseUrl=
|
||||
Q),q=q.replace(R,""),h.jsExtRegExp.test(q)&&(q=K),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(g=L))P&&"interactive"===P.readyState||U(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),g=P;g&&(b||
|
||||
(b=g.getAttribute("data-requiremodule")),h=F[g.getAttribute("data-requirecontext")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);
|
||||
170
libraries/framework/vendor/plugins/c3charts/spec/api.data-spec.js
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 api data', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 5000, 2000, 1000, 4000, 1500, 2500]
|
||||
],
|
||||
names: {
|
||||
data1: 'Data Name 1',
|
||||
data2: 'Data Name 2'
|
||||
},
|
||||
colors: {
|
||||
data1: '#FF0000',
|
||||
data2: '#00FF00'
|
||||
},
|
||||
axes: {
|
||||
data1: 'y',
|
||||
data2: 'y2'
|
||||
}
|
||||
},
|
||||
axis: {
|
||||
y2: {
|
||||
show: true
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('data()', function () {
|
||||
|
||||
it('should return all of data if no argument given', function () {
|
||||
var results = chart.data(),
|
||||
expected = ['data1', 'data2'];
|
||||
results.forEach(function (result, i) {
|
||||
expect(result.id).toBe(expected[i]);
|
||||
});
|
||||
});
|
||||
|
||||
it('should return specifid data if string argument given', function () {
|
||||
var results = chart.data('data1');
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].id).toBe('data1');
|
||||
});
|
||||
|
||||
it('should return specifid data if array argument given', function () {
|
||||
var results = chart.data(['data1', 'data2']);
|
||||
expect(results.length).toBe(2);
|
||||
expect(results[0].id).toBe('data1');
|
||||
expect(results[1].id).toBe('data2');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('data.shown()', function () {
|
||||
|
||||
it('should return only shown targets', function () {
|
||||
var results;
|
||||
chart.hide('data1');
|
||||
results = chart.data.shown();
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].id).toBe('data2');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('data.values()', function () {
|
||||
|
||||
it('should return values for specified target', function () {
|
||||
var values = chart.data.values('data1'),
|
||||
expectedValues = [30, 200, 100, 400, 150, 250];
|
||||
expect(values.length).toBe(6);
|
||||
values.forEach(function (v, i) {
|
||||
expect(v).toBe(expectedValues[i]);
|
||||
});
|
||||
});
|
||||
|
||||
it('should return null when no args', function () {
|
||||
var values = chart.data.values();
|
||||
expect(values).toBeNull();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('data.names()', function () {
|
||||
|
||||
it('should return data.names specified as argument', function () {
|
||||
var results = chart.data.names();
|
||||
expect(results.data1).toBe('Data Name 1');
|
||||
expect(results.data2).toBe('Data Name 2');
|
||||
});
|
||||
|
||||
it('should return data.names specified as api', function () {
|
||||
var results = chart.data.names({
|
||||
data1: 'New Data Name 1',
|
||||
data2: 'New Data Name 2'
|
||||
});
|
||||
expect(results.data1).toBe('New Data Name 1');
|
||||
expect(results.data2).toBe('New Data Name 2');
|
||||
});
|
||||
|
||||
it('should set data.names specified as api', function () {
|
||||
expect(d3.select('.c3-legend-item-data1 text').text()).toBe("New Data Name 1");
|
||||
expect(d3.select('.c3-legend-item-data2 text').text()).toBe("New Data Name 2");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('data.colors()', function () {
|
||||
|
||||
it('should return data.colors specified as argument', function () {
|
||||
var results = chart.data.colors();
|
||||
expect(results.data1).toBe('#FF0000');
|
||||
expect(results.data2).toBe('#00FF00');
|
||||
});
|
||||
|
||||
it('should return data.colors specified as api', function () {
|
||||
var results = chart.data.colors({
|
||||
data1: '#00FF00',
|
||||
data2: '#FF0000'
|
||||
});
|
||||
expect(results.data1).toBe('#00FF00');
|
||||
expect(results.data2).toBe('#FF0000');
|
||||
});
|
||||
|
||||
it('should set data.colors specified as api', function () {
|
||||
expect(d3.select('.c3-line-data1').style('stroke')).toBe("#00ff00");
|
||||
expect(d3.select('.c3-line-data2').style('stroke')).toBe("#ff0000");
|
||||
expect(d3.select('.c3-legend-item-data1 .c3-legend-item-tile').style('fill')).toBe("#00ff00");
|
||||
expect(d3.select('.c3-legend-item-data2 .c3-legend-item-tile').style('fill')).toBe("#ff0000");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('data.axes()', function () {
|
||||
|
||||
it('should return data.axes specified as argument', function () {
|
||||
var results = chart.data.axes();
|
||||
expect(results.data1).toBe('y');
|
||||
expect(results.data2).toBe('y2');
|
||||
expect(d3.select('.c3-axis-y g.tick text').text()).toBe('0');
|
||||
expect(d3.select('.c3-axis-y2 g.tick text').text()).toBe('1000');
|
||||
});
|
||||
|
||||
it('should return data.axes specified as api', function () {
|
||||
var results = chart.data.axes({
|
||||
data1: 'y2',
|
||||
data2: 'y'
|
||||
});
|
||||
expect(results.data1).toBe('y2');
|
||||
expect(results.data2).toBe('y');
|
||||
expect(d3.select('.c3-axis-y g.tick text').text()).toBe('1000');
|
||||
expect(d3.select('.c3-axis-y2 g.tick text').text()).toBe('0');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
433
libraries/framework/vendor/plugins/c3charts/spec/api.focus-spec.js
vendored
Normal file
@@ -0,0 +1,433 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 api load', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400],
|
||||
['data2', 1000, 800, 500, 2000],
|
||||
['data3', 5000, 2000, 1000, 4000]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('focus', function () {
|
||||
|
||||
it('should focus all targets', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-focused')).toBeTruthy();
|
||||
});
|
||||
legendItems.each(function () {
|
||||
var item = d3.select(this);
|
||||
expect(item.classed('c3-legend-item-focused')).toBeTruthy();
|
||||
});
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should focus one target', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus('data2');
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-focused')).toBeFalsy();
|
||||
expect(targets.data2.classed('c3-focused')).toBeTruthy();
|
||||
expect(targets.data3.classed('c3-focused')).toBeFalsy();
|
||||
expect(legendItems.data1.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data2.classed('c3-legend-item-focused')).toBeTruthy();
|
||||
expect(legendItems.data3.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should focus multiple targets', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus(['data1', 'data2']);
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-focused')).toBeTruthy();
|
||||
expect(targets.data2.classed('c3-focused')).toBeTruthy();
|
||||
expect(targets.data3.classed('c3-focused')).toBeFalsy();
|
||||
expect(legendItems.data1.classed('c3-legend-item-focused')).toBeTruthy();
|
||||
expect(legendItems.data2.classed('c3-legend-item-focused')).toBeTruthy();
|
||||
expect(legendItems.data3.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('defocus', function () {
|
||||
|
||||
it('should defocus all targets', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-focused')).toBeFalsy();
|
||||
expect(line.classed('c3-defocused')).toBeTruthy();
|
||||
});
|
||||
legendItems.each(function () {
|
||||
var item = d3.select(this);
|
||||
expect(item.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(+item.style('opacity')).toBeCloseTo(0.3);
|
||||
});
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should defocus one target', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus('data2');
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-defocused')).toBeFalsy();
|
||||
expect(targets.data2.classed('c3-defocused')).toBeTruthy();
|
||||
expect(targets.data3.classed('c3-defocused')).toBeFalsy();
|
||||
expect(legendItems.data1.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data2.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data3.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(0.3);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(1);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should defocus multiple targets', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus(['data1', 'data2']);
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-defocused')).toBeTruthy();
|
||||
expect(targets.data2.classed('c3-defocused')).toBeTruthy();
|
||||
expect(targets.data3.classed('c3-defocused')).toBeFalsy();
|
||||
expect(legendItems.data1.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data2.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data3.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(0.3);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(0.3);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(1);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should defocus multiple targets after focused', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
chart.defocus(['data1', 'data2']);
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-defocused')).toBeTruthy();
|
||||
expect(targets.data2.classed('c3-defocused')).toBeTruthy();
|
||||
expect(targets.data3.classed('c3-defocused')).toBeFalsy();
|
||||
expect(legendItems.data1.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data2.classed('c3-legend-item-focused')).toBeFalsy();
|
||||
expect(legendItems.data3.classed('c3-legend-item-focused')).toBeTruthy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(0.3);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(0.3);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(1);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
}, 500);
|
||||
|
||||
});
|
||||
|
||||
describe('revert', function () {
|
||||
|
||||
it('should revert all targets after focus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
chart.revert();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-focused')).toBeFalsy();
|
||||
});
|
||||
legendItems.each(function () {
|
||||
var item = d3.select(this);
|
||||
expect(+item.style('opacity')).toBeCloseTo(1);
|
||||
});
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should revert all targets after defocus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus();
|
||||
setTimeout(function () {
|
||||
chart.revert();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-defocused')).toBeFalsy();
|
||||
});
|
||||
legendItems.each(function () {
|
||||
var item = d3.select(this);
|
||||
expect(+item.style('opacity')).toBeCloseTo(1);
|
||||
});
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should revert one target after focus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
chart.revert('data2');
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-focused')).toBeTruthy();
|
||||
expect(targets.data2.classed('c3-focused')).toBeFalsy();
|
||||
expect(targets.data3.classed('c3-focused')).toBeTruthy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(1);
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should revert one target after defocus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus();
|
||||
setTimeout(function () {
|
||||
chart.revert('data2');
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-defocused')).toBeTruthy();
|
||||
expect(targets.data2.classed('c3-defocused')).toBeFalsy();
|
||||
expect(targets.data3.classed('c3-defocused')).toBeTruthy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(0.3);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(0.3);
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should focus multiple targets after focus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
chart.revert(['data1', 'data2']);
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-focused')).toBeFalsy();
|
||||
expect(targets.data2.classed('c3-focused')).toBeFalsy();
|
||||
expect(targets.data3.classed('c3-focused')).toBeTruthy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(1);
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should focus multiple targets after defocus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus();
|
||||
setTimeout(function () {
|
||||
chart.revert(['data1', 'data2']);
|
||||
setTimeout(function () {
|
||||
var targets = {
|
||||
data1: main.select('.c3-chart-line.c3-target.c3-target-data1'),
|
||||
data2: main.select('.c3-chart-line.c3-target.c3-target-data2'),
|
||||
data3: main.select('.c3-chart-line.c3-target.c3-target-data3')
|
||||
},
|
||||
legendItems = {
|
||||
data1: legend.select('.c3-legend-item-data1'),
|
||||
data2: legend.select('.c3-legend-item-data2'),
|
||||
data3: legend.select('.c3-legend-item-data3')
|
||||
};
|
||||
expect(targets.data1.classed('c3-defocused')).toBeFalsy();
|
||||
expect(targets.data2.classed('c3-defocused')).toBeFalsy();
|
||||
expect(targets.data3.classed('c3-defocused')).toBeTruthy();
|
||||
expect(+legendItems.data1.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data2.style('opacity')).toBeCloseTo(1);
|
||||
expect(+legendItems.data3.style('opacity')).toBeCloseTo(0.3);
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('when legend.show = false', function () {
|
||||
|
||||
it('should update args to hide legend', function () {
|
||||
args.legend = {
|
||||
show: false
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should focus all targets without showing legend', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-focused')).toBeTruthy();
|
||||
});
|
||||
expect(legendItems.size()).toBeCloseTo(0);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should defocus all targets without showing legend', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.defocus();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-defocused')).toBeTruthy();
|
||||
});
|
||||
expect(legendItems.size()).toBeCloseTo(0);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should revert all targets after focus', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.focus();
|
||||
setTimeout(function () {
|
||||
chart.revert();
|
||||
setTimeout(function () {
|
||||
var targets = main.select('.c3-chart-line.c3-target'),
|
||||
legendItems = legend.select('.c3-legend-item');
|
||||
targets.each(function () {
|
||||
var line = d3.select(this);
|
||||
expect(line.classed('c3-focused')).toBeFalsy();
|
||||
});
|
||||
expect(legendItems.size()).toBeCloseTo(0);
|
||||
done();
|
||||
}, 500);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
122
libraries/framework/vendor/plugins/c3charts/spec/api.grid-spec.js
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 api grid', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('ygrid.add and ygrid.remove', function () {
|
||||
|
||||
it('should update y grids', function (done) {
|
||||
var main = chart.internal.main,
|
||||
expectedGrids = [
|
||||
{
|
||||
value: 100,
|
||||
text: 'Pressure Low'
|
||||
},
|
||||
{
|
||||
value: 200,
|
||||
text: 'Pressure High'
|
||||
}
|
||||
],
|
||||
grids;
|
||||
|
||||
// Call ygrids.add
|
||||
chart.ygrids.add(expectedGrids);
|
||||
setTimeout(function () {
|
||||
grids = main.selectAll('.c3-ygrid-line');
|
||||
expect(grids.size()).toBe(expectedGrids.length);
|
||||
grids.each(function (d, i) {
|
||||
var y = +d3.select(this).select('line').attr('y1'),
|
||||
text = d3.select(this).select('text').text(),
|
||||
expectedY = Math.round(chart.internal.y(expectedGrids[i].value)),
|
||||
expectedText = expectedGrids[i].text;
|
||||
expect(y).toBe(expectedY);
|
||||
expect(text).toBe(expectedText);
|
||||
});
|
||||
|
||||
// Call ygrids.remove
|
||||
chart.ygrids.remove(expectedGrids);
|
||||
setTimeout(function () {
|
||||
grids = main.selectAll('.c3-ygrid-line');
|
||||
expect(grids.size()).toBe(0);
|
||||
}, 500);
|
||||
|
||||
}, 500);
|
||||
|
||||
setTimeout(function () {
|
||||
done();
|
||||
}, 1200);
|
||||
});
|
||||
|
||||
it("should update x ygrids even if it's zoomed", function (done) {
|
||||
var main = chart.internal.main,
|
||||
expectedGrids = [
|
||||
{
|
||||
value: 0,
|
||||
text: 'Pressure Low'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
text: 'Pressure High'
|
||||
}
|
||||
],
|
||||
grids, domain;
|
||||
|
||||
chart.zoom([0, 2]);
|
||||
setTimeout(function () {
|
||||
|
||||
// Call xgrids
|
||||
chart.xgrids(expectedGrids);
|
||||
setTimeout(function () {
|
||||
grids = main.selectAll('.c3-xgrid-line');
|
||||
expect(grids.size()).toBe(expectedGrids.length);
|
||||
grids.each(function (d, i) {
|
||||
var x = +d3.select(this).select('line').attr('x1'),
|
||||
text = d3.select(this).select('text').text(),
|
||||
expectedX = Math.round(chart.internal.x(expectedGrids[i].value)),
|
||||
expectedText = expectedGrids[i].text;
|
||||
expect(x).toBe(expectedX);
|
||||
expect(text).toBe(expectedText);
|
||||
});
|
||||
|
||||
// check if it was not rescaled
|
||||
domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeLessThan(0);
|
||||
expect(domain[1]).toBeGreaterThan(400);
|
||||
|
||||
// Call xgrids.remove
|
||||
chart.xgrids.remove(expectedGrids);
|
||||
setTimeout(function () {
|
||||
grids = main.selectAll('.c3-xgrid-line');
|
||||
expect(grids.size()).toBe(0);
|
||||
}, 500); // for xgrids.remove()
|
||||
|
||||
}, 500); // for xgrids()
|
||||
|
||||
}, 500); // for zoom
|
||||
|
||||
setTimeout(function () {
|
||||
done();
|
||||
}, 1700);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
124
libraries/framework/vendor/plugins/c3charts/spec/api.load-spec.js
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 api load', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 5000, 2000, 1000, 4000, 1500, 2500]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('indexed data', function () {
|
||||
|
||||
describe('as column', function () {
|
||||
|
||||
it('should load additional data', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.load({
|
||||
columns: [
|
||||
['data3', 800, 500, 900, 500, 1000, 700]
|
||||
]
|
||||
});
|
||||
setTimeout(function () {
|
||||
var target = main.select('.c3-chart-line.c3-target.c3-target-data3'),
|
||||
legendItem = legend.select('.c3-legend-item.c3-legend-item-data3');
|
||||
expect(target.size()).toBe(1);
|
||||
expect(legendItem.size()).toBe(1);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('category data', function () {
|
||||
|
||||
it('should update arg to category data', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 'cat1', 'cat2', 'cat3', 'cat4', 'cat5', 'cat6'],
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 5000, 2000, 1000, 4000, 1500, 2500]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'category'
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
describe('as column', function () {
|
||||
|
||||
it('should load additional data', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.load({
|
||||
columns: [
|
||||
['data3', 800, 500, 900, 500, 1000, 700]
|
||||
]
|
||||
});
|
||||
setTimeout(function () {
|
||||
var target = main.select('.c3-chart-line.c3-target.c3-target-data3'),
|
||||
legendItem = legend.select('.c3-legend-item.c3-legend-item-data3'),
|
||||
tickTexts = main.selectAll('.c3-axis-x g.tick text'),
|
||||
expected = ['cat1', 'cat2', 'cat3', 'cat4', 'cat5', 'cat6'];
|
||||
expect(target.size()).toBe(1);
|
||||
expect(legendItem.size()).toBe(1);
|
||||
tickTexts.each(function (d, i) {
|
||||
var text = d3.select(this).select('tspan').text();
|
||||
expect(text).toBe(expected[i]);
|
||||
});
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should load additional data', function (done) {
|
||||
var main = chart.internal.main,
|
||||
legend = chart.internal.legend;
|
||||
chart.load({
|
||||
columns: [
|
||||
['x', 'new1', 'new2', 'new3', 'new4', 'new5', 'new6'],
|
||||
['data3', 800, 500, 900, 500, 1000, 700]
|
||||
]
|
||||
});
|
||||
setTimeout(function () {
|
||||
var target = main.select('.c3-chart-line.c3-target.c3-target-data3'),
|
||||
legendItem = legend.select('.c3-legend-item.c3-legend-item-data3'),
|
||||
tickTexts = main.selectAll('.c3-axis-x g.tick text'),
|
||||
expected = ['new1', 'new2', 'new3', 'new4', 'new5', 'new6'];
|
||||
expect(target.size()).toBe(1);
|
||||
expect(legendItem.size()).toBe(1);
|
||||
tickTexts.each(function (d, i) {
|
||||
var text = d3.select(this).select('tspan').text();
|
||||
expect(text).toBe(expected[i]);
|
||||
});
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
126
libraries/framework/vendor/plugins/c3charts/spec/api.zoom-spec.js
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 api zoom', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
},
|
||||
zoom: {
|
||||
enabled: true
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
if (typeof chart === 'undefined') {
|
||||
window.initDom();
|
||||
}
|
||||
chart = window.c3.generate(args);
|
||||
d3 = chart.internal.d3;
|
||||
// chart.internal.d3.select('.jasmine_html-reporter').style('display', 'none');
|
||||
|
||||
window.setTimeout(function () {
|
||||
done();
|
||||
}, 10);
|
||||
});
|
||||
|
||||
describe('zoom', function () {
|
||||
|
||||
it('should be zoomed properly', function () {
|
||||
var target = [3, 5], domain;
|
||||
chart.zoom(target);
|
||||
domain = chart.internal.x.domain();
|
||||
expect(domain[0]).toBe(target[0]);
|
||||
expect(domain[1]).toBe(target[1]);
|
||||
});
|
||||
|
||||
it('should be zoomed properly again', function () {
|
||||
var target = [1, 4], domain;
|
||||
chart.zoom(target);
|
||||
domain = chart.internal.x.domain();
|
||||
expect(domain[0]).toBe(target[0]);
|
||||
expect(domain[1]).toBe(target[1]);
|
||||
});
|
||||
|
||||
it('should load timeseries data', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'date',
|
||||
columns: [
|
||||
['date', '2014-01-01', '2014-01-02', '2014-08-01', '2014-10-19'],
|
||||
['data1', 30, 200, 100, 400]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'timeseries'
|
||||
}
|
||||
},
|
||||
zoom: {
|
||||
enabled: true
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be zoomed properly', function () {
|
||||
var target = [new Date(2014, 7, 1), new Date(2014, 8, 1)], domain;
|
||||
chart.zoom(target);
|
||||
domain = chart.internal.x.domain();
|
||||
expect(+domain[0]).toBe(+target[0]);
|
||||
expect(+domain[1]).toBe(+target[1]);
|
||||
});
|
||||
|
||||
it('should be zoomed properly', function () {
|
||||
var target = ['2014-08-01', '2014-09-01'], domain;
|
||||
chart.zoom(target);
|
||||
domain = chart.internal.x.domain();
|
||||
expect(+domain[0]).toBe(+chart.internal.parseDate(target[0]));
|
||||
expect(+domain[1]).toBe(+chart.internal.parseDate(target[1]));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('unzoom', function () {
|
||||
|
||||
it('should load indexed data', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250]
|
||||
]
|
||||
},
|
||||
zoom: {
|
||||
enabled: true
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be unzoomed properly', function () {
|
||||
var target = [1, 4], orginal = chart.internal.x.domain(), domain;
|
||||
|
||||
chart.zoom(target);
|
||||
domain = chart.internal.x.domain();
|
||||
expect(domain[0]).toBe(target[0]);
|
||||
expect(domain[1]).toBe(target[1]);
|
||||
|
||||
chart.unzoom();
|
||||
domain = chart.internal.x.domain();
|
||||
expect(domain[0]).toBe(orginal[0]);
|
||||
expect(domain[1]).toBe(orginal[1]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
78
libraries/framework/vendor/plugins/c3charts/spec/arc-spec.js
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart axis', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3, args;
|
||||
|
||||
beforeEach(function (done) {
|
||||
if (typeof chart === 'undefined') {
|
||||
window.initDom();
|
||||
}
|
||||
chart = window.c3.generate(args);
|
||||
d3 = chart.internal.d3;
|
||||
chart.internal.d3.select('.jasmine_html-reporter')
|
||||
.style('position', 'absolute')
|
||||
.style('right', 0);
|
||||
|
||||
window.setTimeout(function () {
|
||||
done();
|
||||
}, 50);
|
||||
});
|
||||
|
||||
describe('show pie chart', function () {
|
||||
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30],
|
||||
['data2', 150],
|
||||
['data3', 120]
|
||||
],
|
||||
type: 'pie'
|
||||
}
|
||||
};
|
||||
|
||||
it('should have correct classes', function () {
|
||||
var chartArc = d3.select('.c3-chart-arcs'),
|
||||
arcs = {
|
||||
data1: chartArc.select('.c3-chart-arc.c3-target.c3-target-data1')
|
||||
.select('g.c3-shapes.c3-shapes-data1.c3-arcs.c3-arcs-data1')
|
||||
.select('path.c3-shape.c3-shape.c3-arc.c3-arc-data1'),
|
||||
data2: chartArc.select('.c3-chart-arc.c3-target.c3-target-data2')
|
||||
.select('g.c3-shapes.c3-shapes-data2.c3-arcs.c3-arcs-data2')
|
||||
.select('path.c3-shape.c3-shape.c3-arc.c3-arc-data2'),
|
||||
data3: chartArc.select('.c3-chart-arc.c3-target.c3-target-data3')
|
||||
.select('g.c3-shapes.c3-shapes-data3.c3-arcs.c3-arcs-data3')
|
||||
.select('path.c3-shape.c3-shape.c3-arc.c3-arc-data3')
|
||||
};
|
||||
expect(arcs.data1.size()).toBe(1);
|
||||
expect(arcs.data2.size()).toBe(1);
|
||||
expect(arcs.data3.size()).toBe(1);
|
||||
});
|
||||
|
||||
it('should have correct d', function () {
|
||||
expect(d3.select('.c3-arc-data1').attr('d')).toMatch(/M-124\..+,-171\..+A211\..+,211\..+ 0 0,1 -3\..+,-211\..+L0,0Z/);
|
||||
expect(d3.select('.c3-arc-data2').attr('d')).toMatch(/M1\..+,-211\..+A211\..+,211\..+ 0 0,1 1\..+,211\..+L0,0Z/);
|
||||
expect(d3.select('.c3-arc-data3').attr('d')).toMatch(/M1\..+,211\..+A211\..+,211\..+ 0 0,1 -124\..+,-171\..+L0,0Z/);
|
||||
});
|
||||
|
||||
it('should set args with data id that can be converted to a color', function () {
|
||||
args.data.columns = [
|
||||
['black', 30],
|
||||
['data2', 150],
|
||||
['data3', 120]
|
||||
];
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have correct d even if data id can be converted to a color', function () {
|
||||
expect(d3.select('.c3-arc-black').attr('d')).toMatch(/M-124\..+,-171\..+A211\..+,211\..+ 0 0,1 -3\..+,-211\..+L0,0Z/);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
767
libraries/framework/vendor/plugins/c3charts/spec/axis-spec.js
vendored
Normal file
@@ -0,0 +1,767 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart axis', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y: {
|
||||
tick: {
|
||||
values: null,
|
||||
count: undefined
|
||||
}
|
||||
},
|
||||
y2: {
|
||||
tick: {
|
||||
values: null,
|
||||
count: undefined
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('axis.y.tick.count', function () {
|
||||
|
||||
var i = 1;
|
||||
|
||||
beforeEach(function () {
|
||||
args.axis.y.tick.count = i++;
|
||||
chart = window.c3.generate(args);
|
||||
});
|
||||
|
||||
it('should have only 1 tick on y axis', function () {
|
||||
var ticksSize = d3.select('.c3-axis-y').selectAll('g.tick').size();
|
||||
expect(ticksSize).toBe(1);
|
||||
});
|
||||
|
||||
it('should have 2 ticks on y axis', function () {
|
||||
var ticksSize = d3.select('.c3-axis-y').selectAll('g.tick').size();
|
||||
expect(ticksSize).toBe(2);
|
||||
});
|
||||
|
||||
it('should have 3 ticks on y axis', function () {
|
||||
var ticksSize = d3.select('.c3-axis-y').selectAll('g.tick').size();
|
||||
expect(ticksSize).toBe(3);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('axis.y.tick.values', function () {
|
||||
|
||||
var values = [100, 500];
|
||||
|
||||
beforeEach(function () {
|
||||
args.axis.y.tick.values = values;
|
||||
chart = window.c3.generate(args);
|
||||
});
|
||||
|
||||
it('should have only 2 tick on y axis', function () {
|
||||
var ticksSize = d3.select('.c3-axis-y').selectAll('g.tick').size();
|
||||
expect(ticksSize).toBe(2);
|
||||
});
|
||||
|
||||
it('should have specified tick texts', function () {
|
||||
d3.select('.c3-axis-y').selectAll('g.tick').each(function (d, i) {
|
||||
var text = d3.select(this).select('text').text();
|
||||
expect(+text).toBe(values[i]);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('axis y timeseries', function () {
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
["times", 60000, 120000, 180000, 240000]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y: {
|
||||
type : 'timeseries',
|
||||
tick: {
|
||||
time: {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function () {
|
||||
chart = window.c3.generate(args);
|
||||
});
|
||||
|
||||
it('should have 7 ticks on y axis', function () {
|
||||
var ticksSize = d3.select('.c3-axis-y').selectAll('g.tick').size();
|
||||
expect(ticksSize).toBe(7); // the count starts at initial value and increments by the set interval
|
||||
});
|
||||
|
||||
it('should have specified 30 second intervals', function () {
|
||||
var prevValue;
|
||||
d3.select('.c3-axis-y').selectAll('g.tick').each(function (d, i) {
|
||||
if (i !== 0) {
|
||||
var result = d - prevValue;
|
||||
expect(result).toEqual(30000); // expressed in milliseconds
|
||||
}
|
||||
prevValue = d;
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args to set axis.y.time', function () {
|
||||
args.axis.y.tick.time = {
|
||||
value : 'seconds',
|
||||
interval : 60
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have 4 ticks on y axis', function () {
|
||||
var ticksSize = d3.select('.c3-axis-y').selectAll('g.tick').size();
|
||||
expect(ticksSize).toBe(4); // the count starts at initial value and increments by the set interval
|
||||
});
|
||||
|
||||
it('should have specified 60 second intervals', function () {
|
||||
var prevValue;
|
||||
d3.select('.c3-axis-y').selectAll('g.tick').each(function (d, i) {
|
||||
if (i !== 0) {
|
||||
var result = d - prevValue;
|
||||
expect(result).toEqual(60000); // expressed in milliseconds
|
||||
}
|
||||
prevValue = d;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('axis.x.tick.width', function () {
|
||||
|
||||
describe('indexed x axis and y/y2 axis', function () {
|
||||
|
||||
describe('not rotated', function () {
|
||||
|
||||
it('should update args successfully', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
],
|
||||
axes: {
|
||||
data2: 'y2'
|
||||
}
|
||||
},
|
||||
axis: {
|
||||
y2: {
|
||||
show: true
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should construct indexed x axis properly', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick'),
|
||||
expectedX = '0',
|
||||
expectedDy = '.71em';
|
||||
expect(ticks.size()).toBe(6);
|
||||
ticks.each(function (d, i) {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(1);
|
||||
tspans.each(function () {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(i + '');
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
expect(tspan.attr('dy')).toBe(expectedDy);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should set axis.x.tick.format', function () {
|
||||
args.axis.x = {
|
||||
tick: {
|
||||
format: function () {
|
||||
return 'very long tick text on x axis';
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should split x axis tick text to multiple lines', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick'),
|
||||
expectedTexts = ['very long tick text', 'on x axis'],
|
||||
expectedX = '0';
|
||||
expect(ticks.size()).toBe(6);
|
||||
ticks.each(function () {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(2);
|
||||
tspans.each(function (d, i) {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTexts[i]);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
if (i === 0) {
|
||||
expect(tspan.attr('dy')).toBe('.71em');
|
||||
} else {
|
||||
expect(tspan.attr('dy')).toBeGreaterThan(8);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should construct y axis properly', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-y').selectAll('g.tick'),
|
||||
expectedX = '-9',
|
||||
expectedDy = '3';
|
||||
expect(ticks.size()).toBe(9);
|
||||
ticks.each(function (d) {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(1);
|
||||
tspans.each(function () {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(d + '');
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
expect(tspan.attr('dy')).toBe(expectedDy);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should construct y2 axis properly', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-y2').selectAll('g.tick'),
|
||||
expectedX = '9',
|
||||
expectedDy = '3';
|
||||
expect(ticks.size()).toBe(9);
|
||||
ticks.each(function (d) {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(1);
|
||||
tspans.each(function () {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(d + '');
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
expect(tspan.attr('dy')).toBe(expectedDy);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should set big values in y', function () {
|
||||
args.data.columns = [
|
||||
['data1', 3000000000000000, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
];
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not split y axis tick text to multiple lines', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-y2').selectAll('g.tick');
|
||||
ticks.each(function () {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('rotated', function () {
|
||||
|
||||
it('should update args to rotate axis', function () {
|
||||
args.axis.rotated = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should split x axis tick text to multiple lines', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick'),
|
||||
expectedTexts = ['very long tick', 'text on x axis'],
|
||||
expectedX = '-9';
|
||||
expect(ticks.size()).toBe(6);
|
||||
ticks.each(function () {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(2);
|
||||
tspans.each(function (d, i) {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTexts[i]);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
if (i === 0) {
|
||||
expect(tspan.attr('dy')).toBeLessThan(0);
|
||||
} else {
|
||||
expect(tspan.attr('dy')).toBeGreaterThan(9);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should not split y axis tick text to multiple lines', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-y').selectAll('g.tick'),
|
||||
expectedTexts = [
|
||||
'0',
|
||||
'500000000000000',
|
||||
'1000000000000000',
|
||||
'1500000000000000',
|
||||
'2000000000000000',
|
||||
'2500000000000000',
|
||||
'3000000000000000'
|
||||
],
|
||||
expectedX = '0',
|
||||
expectedDy = '.71em';
|
||||
expect(ticks.size()).toBe(7);
|
||||
ticks.each(function (d, i) {
|
||||
var tspans = d3.select(this).selectAll('tspan');
|
||||
expect(tspans.size()).toBe(1);
|
||||
tspans.each(function () {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTexts[i]);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
expect(tspan.attr('dy')).toBe(expectedDy);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('category axis', function () {
|
||||
|
||||
describe('not rotated', function () {
|
||||
|
||||
it('should update args successfully', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 'this is a very long tick text on category axis', 'cat1', 'cat2', 'cat3', 'cat4', 'cat5'],
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'category'
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should locate ticks properly', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick');
|
||||
ticks.each(function (d, i) {
|
||||
var tspans = d3.select(this).selectAll('tspan'),
|
||||
expectedX = '0',
|
||||
expectedDy = '.71em';
|
||||
if (i > 0) { // i === 0 should be checked in next test
|
||||
expect(tspans.size()).toBe(1);
|
||||
tspans.each(function () {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
expect(tspan.attr('dy')).toBe(expectedDy);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should split tick text properly', function () {
|
||||
var tick = chart.internal.main.select('.c3-axis-x').select('g.tick'),
|
||||
tspans = tick.selectAll('tspan'),
|
||||
expectedTickTexts = [
|
||||
'this is a very',
|
||||
'long tick text',
|
||||
'on category',
|
||||
'axis',
|
||||
],
|
||||
expectedX = '0';
|
||||
expect(tspans.size()).toBe(4);
|
||||
tspans.each(function (d, i) {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTickTexts[i]);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
// unable to define pricise number because it differs depends on environment..
|
||||
if (i === 0) {
|
||||
expect(tspan.attr('dy')).toBe('.71em');
|
||||
} else {
|
||||
expect(tspan.attr('dy')).toBeGreaterThan(8);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('rotated', function () {
|
||||
|
||||
it('should update args to rotate axis', function () {
|
||||
args.axis.rotated = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should locate ticks on rotated axis properly', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick');
|
||||
ticks.each(function (d, i) {
|
||||
var tspans = d3.select(this).selectAll('tspan'),
|
||||
expectedX = '-9',
|
||||
expectedDy = '3';
|
||||
if (i > 0) { // i === 0 should be checked in next test
|
||||
expect(tspans.size()).toBe(1);
|
||||
tspans.each(function () {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
expect(tspan.attr('dy')).toBe(expectedDy);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should split tick text on rotated axis properly', function () {
|
||||
var tick = chart.internal.main.select('.c3-axis-x').select('g.tick'),
|
||||
tspans = tick.selectAll('tspan'),
|
||||
expectedTickTexts = [
|
||||
'this is a very',
|
||||
'long tick text on',
|
||||
'category axis'
|
||||
],
|
||||
expectedX = '-9';
|
||||
expect(tspans.size()).toBe(3);
|
||||
tspans.each(function (d, i) {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTickTexts[i]);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
// unable to define pricise number because it differs depends on environment..
|
||||
if (i === 0) {
|
||||
expect(tspan.attr('dy')).toBeLessThan(0);
|
||||
} else {
|
||||
expect(tspan.attr('dy')).toBeGreaterThan(8);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('option used', function () {
|
||||
|
||||
describe('as null', function () {
|
||||
|
||||
it('should update args not to split ticks', function () {
|
||||
args.axis.x.tick = {
|
||||
multiline: false
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should split x tick', function () {
|
||||
var tick = chart.internal.main.select('.c3-axis-x').select('g.tick'),
|
||||
tspans = tick.selectAll('tspan');
|
||||
expect(tspans.size()).toBe(1);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('as value', function () {
|
||||
|
||||
it('should update args not to split ticks', function () {
|
||||
args.axis.x.tick = {
|
||||
width: 150
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should split x tick to 2 lines properly', function () {
|
||||
var tick = chart.internal.main.select('.c3-axis-x').select('g.tick'),
|
||||
tspans = tick.selectAll('tspan'),
|
||||
expectedTickTexts = [
|
||||
'this is a very long tick',
|
||||
'text on category axis'
|
||||
],
|
||||
expectedX = '-9';
|
||||
expect(tspans.size()).toBe(2);
|
||||
tspans.each(function (d, i) {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTickTexts[i]);
|
||||
expect(tspan.attr('x')).toBe(expectedX);
|
||||
// unable to define pricise number because it differs depends on environment..
|
||||
if (i === 0) {
|
||||
expect(tspan.attr('dy')).toBeLessThan(0);
|
||||
} else {
|
||||
expect(tspan.attr('dy')).toBeGreaterThan(8);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('with axis.x.tick.format', function () {
|
||||
|
||||
it('should update args to use axis.x.tick.format', function () {
|
||||
args.axis.x.tick.format = function () {
|
||||
return ['this is a very long tick text', 'on category axis'];
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have multiline tick text', function () {
|
||||
var tick = chart.internal.main.select('.c3-axis-x').select('g.tick'),
|
||||
tspans = tick.selectAll('tspan'),
|
||||
expectedTickTexts = ['this is a very long tick text', 'on category axis'];
|
||||
expect(tspans.size()).toBe(2);
|
||||
tspans.each(function (d, i) {
|
||||
var tspan = d3.select(this);
|
||||
expect(tspan.text()).toBe(expectedTickTexts[i]);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('axis.x.tick.rotate', function () {
|
||||
|
||||
describe('not rotated', function () {
|
||||
|
||||
it('should update args successfully', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 'category 1', 'category 2', 'category 3', 'category 4', 'category 5', 'category 6'],
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'category',
|
||||
tick: {
|
||||
rotate: 60
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should rotate tick texts', function () {
|
||||
chart.internal.main.selectAll('.c3-axis-x g.tick').each(function () {
|
||||
var tick = d3.select(this),
|
||||
text = tick.select('text'),
|
||||
tspan = text.select('tspan');
|
||||
expect(text.attr('transform')).toBe('rotate(60)');
|
||||
expect(text.attr('y')).toBe('1.5');
|
||||
expect(tspan.attr('dx')).toBe('6.928203230275509');
|
||||
});
|
||||
});
|
||||
|
||||
it('should have automatically calculated x axis height', function () {
|
||||
var box = chart.internal.main.select('.c3-axis-x').node().getBoundingClientRect();
|
||||
expect(box.height).toBeGreaterThan(50);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('axis.x.tick.fit', function () {
|
||||
|
||||
describe('axis.x.tick.fit = true', function () {
|
||||
|
||||
it('should set args for indexed data', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show fitted ticks on indexed data', function () {
|
||||
var ticks = chart.internal.main.selectAll('.c3-axis-x g.tick');
|
||||
expect(ticks.size()).toBe(6);
|
||||
});
|
||||
|
||||
it('should set args for x-based data', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 10, 20, 100, 110, 200, 1000],
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show fitted ticks on indexed data', function () {
|
||||
var ticks = chart.internal.main.selectAll('.c3-axis-x g.tick');
|
||||
expect(ticks.size()).toBe(6);
|
||||
});
|
||||
|
||||
it('should show fitted ticks after hide and show', function () {
|
||||
chart.hide();
|
||||
chart.show();
|
||||
var ticks = chart.internal.main.selectAll('.c3-axis-x g.tick');
|
||||
expect(ticks.size()).toBe(6);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('axis.x.tick.fit = false', function () {
|
||||
|
||||
it('should set args for indexed data', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
tick: {
|
||||
fit: false
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show fitted ticks on indexed data', function () {
|
||||
var ticks = chart.internal.main.selectAll('.c3-axis-x g.tick');
|
||||
expect(ticks.size()).toBe(11);
|
||||
});
|
||||
|
||||
it('should set args for x-based data', function () {
|
||||
args.data = {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 10, 20, 100, 110, 200, 1000],
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show fitted ticks on indexed data', function () {
|
||||
var ticks = chart.internal.main.selectAll('.c3-axis-x g.tick');
|
||||
expect(ticks.size()).toBe(10);
|
||||
});
|
||||
|
||||
it('should show fitted ticks after hide and show', function () {
|
||||
chart.hide();
|
||||
chart.show();
|
||||
var ticks = chart.internal.main.selectAll('.c3-axis-x g.tick');
|
||||
expect(ticks.size()).toBe(10);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('axis.y.inner', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y: {
|
||||
inner: false
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not have inner y axis', function () {
|
||||
var paddingLeft = chart.internal.getCurrentPaddingLeft(),
|
||||
tickTexts = chart.internal.main.selectAll('.c3-axis-y g.tick text');
|
||||
expect(paddingLeft).toBe(50);
|
||||
tickTexts.each(function () {
|
||||
expect(+d3.select(this).attr('x')).toBeLessThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args to have inner y axis', function () {
|
||||
args.axis.y.inner = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have inner y axis', function () {
|
||||
var paddingLeft = chart.internal.getCurrentPaddingLeft(),
|
||||
tickTexts = chart.internal.main.selectAll('.c3-axis-y g.tick text');
|
||||
expect(paddingLeft).toBe(1);
|
||||
tickTexts.each(function () {
|
||||
expect(+d3.select(this).attr('x')).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('axis.y2.inner', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y2: {
|
||||
show: true,
|
||||
inner: false
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not have inner y axis', function () {
|
||||
var paddingRight = chart.internal.getCurrentPaddingRight(),
|
||||
tickTexts = chart.internal.main.selectAll('.c3-axis-2y g.tick text');
|
||||
expect(paddingRight).toBeGreaterThan(39);
|
||||
tickTexts.each(function () {
|
||||
expect(+d3.select(this).attr('x')).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args to have inner y axis', function () {
|
||||
args.axis.y2.inner = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have inner y axis', function () {
|
||||
var paddingRight = chart.internal.getCurrentPaddingRight(),
|
||||
tickTexts = chart.internal.main.selectAll('.c3-axis-2y g.tick text');
|
||||
expect(paddingRight).toBe(2);
|
||||
tickTexts.each(function () {
|
||||
expect(+d3.select(this).attr('x')).toBeLessThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
43
libraries/framework/vendor/plugins/c3charts/spec/c3-helper.js
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
function initDom() {
|
||||
'use strict';
|
||||
|
||||
var div = document.createElement('div');
|
||||
div.id = 'chart';
|
||||
div.style.width = '640px';
|
||||
div.style.height = '480px';
|
||||
document.body.appendChild(div);
|
||||
document.body.style.margin = '0px';
|
||||
}
|
||||
typeof initDom !== 'undefined';
|
||||
|
||||
function setMouseEvent(chart, name, x, y, element) {
|
||||
'use strict';
|
||||
|
||||
var paddingLeft = chart.internal.main.node().transform.baseVal.getItem(0).matrix.e,
|
||||
event = document.createEvent("MouseEvents");
|
||||
event.initMouseEvent(name, true, true, window,
|
||||
0, 0, 0, x + paddingLeft, y + 5,
|
||||
false, false, false, false, 0, null);
|
||||
chart.internal.d3.event = event;
|
||||
if (element) { element.dispatchEvent(event); }
|
||||
}
|
||||
typeof setMouseEvent !== 'undefined';
|
||||
|
||||
function initChart(chart, args, done) {
|
||||
'use strict';
|
||||
|
||||
if (typeof chart === 'undefined') {
|
||||
window.initDom();
|
||||
}
|
||||
chart = window.c3.generate(args);
|
||||
chart.internal.d3.select('.jasmine_html-reporter')
|
||||
.style('position', 'absolute')
|
||||
.style('right', 0);
|
||||
|
||||
window.setTimeout(function () {
|
||||
done();
|
||||
}, 10);
|
||||
|
||||
return chart;
|
||||
}
|
||||
typeof initChart !== 'undefined';
|
||||
15
libraries/framework/vendor/plugins/c3charts/spec/c3-spec.js
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it;
|
||||
|
||||
describe('c3', function () {
|
||||
'use strict';
|
||||
|
||||
var c3 = window.c3;
|
||||
|
||||
it('exists', function () {
|
||||
expect(c3).not.toBeNull();
|
||||
expect(typeof c3).toBe('object');
|
||||
});
|
||||
});
|
||||
|
||||
67
libraries/framework/vendor/plugins/c3charts/spec/class-spec.js
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart class', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2 prefix', 50, 20, 10, 40, 15, 25],
|
||||
['data3 мужчины', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('internal.getTargetSelectorSuffix', function () {
|
||||
|
||||
it('should not replace any characters', function () {
|
||||
var input = 'data1',
|
||||
expected = '-' + input,
|
||||
suffix = chart.internal.getTargetSelectorSuffix(input);
|
||||
expect(suffix).toBe(expected);
|
||||
});
|
||||
|
||||
it('should replace space to "-"', function () {
|
||||
var input = 'data1 suffix',
|
||||
expected = '-data1-suffix',
|
||||
suffix = chart.internal.getTargetSelectorSuffix(input);
|
||||
expect(suffix).toBe(expected);
|
||||
});
|
||||
|
||||
it('should replace space to "-" with multibyte characters', function () {
|
||||
var input = 'data1 suffix 日本語',
|
||||
expected = '-data1-suffix-日本語',
|
||||
suffix = chart.internal.getTargetSelectorSuffix(input);
|
||||
expect(suffix).toBe(expected);
|
||||
});
|
||||
|
||||
it('should replace special charactors to "-"', function () {
|
||||
var input = 'data1 !@#$%^&*()_=+,.<>"\':;[]/|?~`{}\\',
|
||||
expected = '-data1--------------------------------',
|
||||
suffix = chart.internal.getTargetSelectorSuffix(input);
|
||||
expect(suffix).toBe(expected);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('multibyte characters on chart', function () {
|
||||
|
||||
it('should replace space to "-" with multibyte characters', function () {
|
||||
var selector = '.c3-target-data3-мужчины';
|
||||
expect(chart.internal.main.select(selector).size()).toBe(1);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
118
libraries/framework/vendor/plugins/c3charts/spec/core-spec.js
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('init', function () {
|
||||
|
||||
it('should be created', function () {
|
||||
var svg = d3.select('#chart svg');
|
||||
expect(svg).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should set 3rd party property to Function', function () {
|
||||
Function.prototype.$extIsFunction = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be created even if 3rd party property has been set', function () {
|
||||
var svg = d3.select('#chart svg');
|
||||
expect(svg).not.toBeNull();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('size', function () {
|
||||
|
||||
it('should have same width', function () {
|
||||
var svg = d3.select('#chart svg');
|
||||
expect(+svg.attr('width')).toBe(640);
|
||||
});
|
||||
|
||||
it('should have same height', function () {
|
||||
var svg = d3.select('#chart svg');
|
||||
expect(+svg.attr('height')).toBe(480);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('bindto', function () {
|
||||
|
||||
it('should accept d3.selection object', function () {
|
||||
args.bindto = d3.select('#chart');
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be created', function () {
|
||||
var svg = d3.select('#chart svg');
|
||||
expect(svg).not.toBeNull();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('empty data', function () {
|
||||
|
||||
it('should upaate args for empty data', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1'],
|
||||
['data2']
|
||||
]
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should generate a chart', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick');
|
||||
expect(ticks.size()).toBe(0);
|
||||
});
|
||||
|
||||
it('should upaate args for empty data', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x'],
|
||||
['data1'],
|
||||
['data2']
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'timeseries'
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should generate a chart', function () {
|
||||
var ticks = chart.internal.main.select('.c3-axis-x').selectAll('g.tick');
|
||||
expect(ticks.size()).toBe(0);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
831
libraries/framework/vendor/plugins/c3charts/spec/data-spec.js
vendored
Normal file
@@ -0,0 +1,831 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart data', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
order: function () {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('function in data.order', function () {
|
||||
it('should return false in isOrderAsc and isOrderDesc functions', function () {
|
||||
expect(chart.internal.isOrderAsc() || chart.internal.isOrderDesc()).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('data.xs', function () {
|
||||
|
||||
describe('normal x', function () {
|
||||
|
||||
it('should have correct number of xs for each', function () {
|
||||
expect(Object.keys(chart.internal.data.xs).length).toBe(3);
|
||||
expect(chart.internal.data.xs.data1.length).toBe(6);
|
||||
expect(chart.internal.data.xs.data2.length).toBe(6);
|
||||
expect(chart.internal.data.xs.data3.length).toBe(6);
|
||||
});
|
||||
|
||||
it('should have integer index as x', function () {
|
||||
for (var i = 0; i < chart.internal.data.xs.data3.length; i++) {
|
||||
expect(chart.internal.data.xs.data1[i]).toBe(i);
|
||||
expect(chart.internal.data.xs.data2[i]).toBe(i);
|
||||
expect(chart.internal.data.xs.data3[i]).toBe(i);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('timeseries x', function () {
|
||||
it('should load timeseries data successfully', function () {
|
||||
args = {
|
||||
data: {
|
||||
x : 'date',
|
||||
columns: [
|
||||
['date', '2013-01-01', '2013-01-02', '2013-01-03'],
|
||||
['data1', 30, 200, 100],
|
||||
['data2', 130, 300, 200]
|
||||
]
|
||||
},
|
||||
axis : {
|
||||
x : {
|
||||
type : 'timeseries'
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have correct number of xs', function () {
|
||||
expect(Object.keys(chart.internal.data.xs).length).toBe(2);
|
||||
expect(chart.internal.data.xs.data1.length).toBe(3);
|
||||
expect(chart.internal.data.xs.data2.length).toBe(3);
|
||||
});
|
||||
|
||||
it('should have Date object as x', function () {
|
||||
var xs = chart.internal.data.xs;
|
||||
expect(+xs.data1[0]).toBe(+new Date(2013, 0, 1, 0, 0, 0));
|
||||
expect(+xs.data1[1]).toBe(+new Date(2013, 0, 2, 0, 0, 0));
|
||||
expect(+xs.data1[2]).toBe(+new Date(2013, 0, 3, 0, 0, 0));
|
||||
expect(+xs.data2[0]).toBe(+new Date(2013, 0, 1, 0, 0, 0));
|
||||
expect(+xs.data2[1]).toBe(+new Date(2013, 0, 2, 0, 0, 0));
|
||||
expect(+xs.data2[2]).toBe(+new Date(2013, 0, 3, 0, 0, 0));
|
||||
});
|
||||
});
|
||||
|
||||
describe('milliseconds timeseries x', function () {
|
||||
|
||||
describe('as date string', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
x : 'date',
|
||||
xFormat: '%Y-%m-%d %H:%M:%S.%L',
|
||||
columns: [
|
||||
['date', "2014-05-20 17:25:00.123", "2014-05-20 17:30:00.345"],
|
||||
['data1', 30, 200],
|
||||
['data2', 130, 300]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'timeseries',
|
||||
tick: {
|
||||
format: '%Y-%m-%d %H:%M:%S.%L',
|
||||
multiline: false
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have correct number of xs', function () {
|
||||
expect(Object.keys(chart.internal.data.xs).length).toBe(2);
|
||||
expect(chart.internal.data.xs.data1.length).toBe(2);
|
||||
expect(chart.internal.data.xs.data2.length).toBe(2);
|
||||
});
|
||||
|
||||
it('should have Date object as x', function () {
|
||||
var xs = chart.internal.data.xs;
|
||||
expect(+xs.data1[0]).toBe(+new Date(2014, 4, 20, 17, 25, 0, 123));
|
||||
expect(+xs.data1[1]).toBe(+new Date(2014, 4, 20, 17, 30, 0, 345));
|
||||
expect(+xs.data2[0]).toBe(+new Date(2014, 4, 20, 17, 25, 0, 123));
|
||||
expect(+xs.data2[1]).toBe(+new Date(2014, 4, 20, 17, 30, 0, 345));
|
||||
});
|
||||
|
||||
it('should have milliseconds tick format', function () {
|
||||
var expected = ["2014-05-20 17:25:00.123", "2014-05-20 17:30:00.345"];
|
||||
chart.internal.main.selectAll('.c3-axis-x g.tick text').each(function (d, i) {
|
||||
expect(d3.select(this).text()).toBe(expected[i]);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('as unixtime number', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
x : 'date',
|
||||
columns: [
|
||||
['date', 1417622461123, 1417622522345],
|
||||
['data1', 30, 200],
|
||||
['data2', 130, 300]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'timeseries',
|
||||
tick: {
|
||||
format: '%Y-%m-%d %H:%M:%S.%L'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have correct number of xs', function () {
|
||||
expect(Object.keys(chart.internal.data.xs).length).toBe(2);
|
||||
expect(chart.internal.data.xs.data1.length).toBe(2);
|
||||
expect(chart.internal.data.xs.data2.length).toBe(2);
|
||||
});
|
||||
|
||||
it('should have Date object as x', function () {
|
||||
var xs = chart.internal.data.xs;
|
||||
expect(+xs.data1[0]).toBe(+new Date(2014, 11, 3, 16, 1, 1, 123));
|
||||
expect(+xs.data1[1]).toBe(+new Date(2014, 11, 3, 16, 2, 2, 345));
|
||||
expect(+xs.data2[0]).toBe(+new Date(2014, 11, 3, 16, 1, 1, 123));
|
||||
expect(+xs.data2[1]).toBe(+new Date(2014, 11, 3, 16, 2, 2, 345));
|
||||
});
|
||||
});
|
||||
|
||||
describe('as unixtime string', function () {
|
||||
|
||||
it('should upate args', function () {
|
||||
args = {
|
||||
data: {
|
||||
x : 'date',
|
||||
columns: [
|
||||
['date', "1417622461123", "1417622522345"],
|
||||
['data1', 30, 200],
|
||||
['data2', 130, 300]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'timeseries',
|
||||
tick: {
|
||||
format: '%Y-%m-%d %H:%M:%S.%L',
|
||||
multiline: false
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have correct number of xs', function () {
|
||||
expect(Object.keys(chart.internal.data.xs).length).toBe(2);
|
||||
expect(chart.internal.data.xs.data1.length).toBe(2);
|
||||
expect(chart.internal.data.xs.data2.length).toBe(2);
|
||||
});
|
||||
|
||||
it('should have Date object as x', function () {
|
||||
var xs = chart.internal.data.xs;
|
||||
expect(+xs.data1[0]).toBe(+new Date(2014, 11, 3, 16, 1, 1, 123));
|
||||
expect(+xs.data1[1]).toBe(+new Date(2014, 11, 3, 16, 2, 2, 345));
|
||||
expect(+xs.data2[0]).toBe(+new Date(2014, 11, 3, 16, 1, 1, 123));
|
||||
expect(+xs.data2[1]).toBe(+new Date(2014, 11, 3, 16, 2, 2, 345));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('data.label', function () {
|
||||
|
||||
describe('with small values', function () {
|
||||
|
||||
it('should update args to show data label', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 0.03, 0.2, 0.1, 0.4, 0.15, 0.250]
|
||||
],
|
||||
labels: true
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have proper y domain', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-0.02);
|
||||
expect(domain[1]).toBeCloseTo(0.45);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with positive values and null', function () {
|
||||
|
||||
describe('on not rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 190, 200, 190, null],
|
||||
],
|
||||
type: 'bar',
|
||||
labels: {
|
||||
format: function (v) {
|
||||
if (v === null) {
|
||||
return 'Not Applicable';
|
||||
}
|
||||
return d3.format('$')(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(0, -1);
|
||||
expect(domain[1]).toBeCloseTo(227, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [67, 49, 67, 423],
|
||||
expectedXs = [74, 221, 368, 515];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(189, -1);
|
||||
expect(domain[1]).toBeCloseTo(201, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [375, 40, 375, 422],
|
||||
expectedXs = [6, 198, 391, 583];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('on rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'bar';
|
||||
args.axis = {
|
||||
rotated: true
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(0, -1);
|
||||
expect(domain[1]).toBeCloseTo(231, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [57, 163, 269, 375],
|
||||
expectedXs = [490, 516, 490, 4];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(188, -1);
|
||||
expect(domain[1]).toBeCloseTo(202, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [9, 147, 286, 424],
|
||||
expectedXs = [76, 526, 76, 4];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with positive values and null', function () {
|
||||
|
||||
describe('on not rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', -190, -200, -190, null],
|
||||
],
|
||||
type: 'bar',
|
||||
labels: {
|
||||
format: function (v) {
|
||||
if (v === null) {
|
||||
return 'Not Applicable';
|
||||
}
|
||||
return d3.format('$')(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-227, -1);
|
||||
expect(domain[1]).toBeCloseTo(0, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [368, 387, 368, 12],
|
||||
expectedXs = [74, 221, 368, 515];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-201, -1);
|
||||
expect(domain[1]).toBeCloseTo(-189, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [58, 392, 58, 12],
|
||||
expectedXs = [6, 198, 391, 583];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('on rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'bar';
|
||||
args.axis = {
|
||||
rotated: true
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-232, -1);
|
||||
expect(domain[1]).toBeCloseTo(0, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [57, 163, 269, 375],
|
||||
expectedXs = [103, 78, 103, 526];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-202, -1);
|
||||
expect(domain[1]).toBeCloseTo(-188, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [9, 147, 286, 424],
|
||||
expectedXs = [511, 67, 511, 526];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with positive and negative values and null', function () {
|
||||
|
||||
describe('on non rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', -190, 200, 190, null],
|
||||
],
|
||||
type: 'bar',
|
||||
labels: {
|
||||
format: function (v) {
|
||||
if (v === null) {
|
||||
return 'Not Applicable';
|
||||
}
|
||||
return d3.format('$')(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-243, -1);
|
||||
expect(domain[1]).toBeCloseTo(253, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [392, 43, 52, 215],
|
||||
expectedXs = [74, 221, 368, 515];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-243, -1);
|
||||
expect(domain[1]).toBeCloseTo(253, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [392, 40, 49, 212],
|
||||
expectedXs = [6, 198, 391, 583];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('on rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'bar';
|
||||
args.axis = {
|
||||
rotated: true
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-254, -1);
|
||||
expect(domain[1]).toBeCloseTo(260, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [57, 163, 269, 375],
|
||||
expectedXs = [69, 525, 513, 295];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-254, -1);
|
||||
expect(domain[1]).toBeCloseTo(260, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [9, 147, 286, 424],
|
||||
expectedXs = [67, 527, 515, 297];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with positive grouped values', function () {
|
||||
|
||||
describe('on non rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 500],
|
||||
['data2', 50, 20, 10, 40],
|
||||
['data3', 250, 220, 210, 240],
|
||||
],
|
||||
groups: [['data1', 'data2', 'data3']],
|
||||
labels: true,
|
||||
type: 'bar',
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(0, -1);
|
||||
expect(domain[1]).toBeCloseTo(885, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [385, 317, 370, 164],
|
||||
expectedXs = [74, 221, 368, 515];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-94, -1);
|
||||
expect(domain[1]).toBeCloseTo(884, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [344, 284, 331, 144],
|
||||
expectedXs = [6, 198, 391, 583];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('on rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'bar';
|
||||
args.axis = {
|
||||
rotated: true
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(0, -1);
|
||||
expect(domain[1]).toBeCloseTo(888, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [57, 163, 269, 375],
|
||||
expectedXs = [57, 150, 77, 363];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-87, -1);
|
||||
expect(domain[1]).toBeCloseTo(887, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [9, 147, 286, 424],
|
||||
expectedXs = [107, 192, 125, 386];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with negative grouped values', function () {
|
||||
|
||||
describe('on non rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', -30, -200, -100, -500],
|
||||
['data2', -50, -20, -10, -40],
|
||||
['data3', -250, -220, -210, -240]
|
||||
],
|
||||
groups: [['data1', 'data2', 'data3']],
|
||||
labels: true,
|
||||
type: 'bar',
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-885, -1);
|
||||
expect(domain[1]).toBeCloseTo(0, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [51, 118, 65, 272],
|
||||
expectedXs = [74, 221, 368, 515];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-884, -1);
|
||||
expect(domain[1]).toBeCloseTo(94, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [88, 149, 101, 288],
|
||||
expectedXs = [6, 198, 391, 583];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('on rotated axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'bar';
|
||||
args.axis = {
|
||||
rotated: true
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-894, -1);
|
||||
expect(domain[1]).toBeCloseTo(0, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [57, 163, 269, 375],
|
||||
expectedXs = [533, 440, 513, 230];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args.data.type = 'line';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have y domain with proper padding', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-894, -1);
|
||||
expect(domain[1]).toBeCloseTo(94, -1);
|
||||
});
|
||||
|
||||
it('should locate labels above each data point', function () {
|
||||
var texts = chart.internal.main.selectAll('.c3-texts-data1 text'),
|
||||
expectedYs = [9, 147, 286, 424],
|
||||
expectedXs = [480, 397, 462, 205];
|
||||
texts.each(function (d, i) {
|
||||
var text = d3.select(this);
|
||||
expect(+text.attr('y')).toBeCloseTo(expectedYs[i], -2);
|
||||
expect(+text.attr('x')).toBeCloseTo(expectedXs[i], -2);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
116
libraries/framework/vendor/plugins/c3charts/spec/domain-spec.js
vendored
Normal file
@@ -0,0 +1,116 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart axis', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y: {},
|
||||
y2: {}
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('axis.y.min', function () {
|
||||
|
||||
it('should change axis.y.min to -100', function () {
|
||||
args.axis.y.min = -100;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be set properly when smaller than max of data', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBe(-150);
|
||||
expect(domain[1]).toBe(450);
|
||||
});
|
||||
|
||||
it('should change axis.y.min to 500', function () {
|
||||
args.axis.y.min = 500;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be set properly when bigger than max of data', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBe(499);
|
||||
expect(domain[1]).toBe(511);
|
||||
});
|
||||
|
||||
it('should change axis.y.min to undefined', function () {
|
||||
args.axis.y.min = undefined;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('axis.y.max', function () {
|
||||
|
||||
it('should change axis.y.max to 1000', function () {
|
||||
args.axis.y.max = 1000;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be set properly when bigger than min of data', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBe(-89);
|
||||
expect(domain[1]).toBe(1099);
|
||||
});
|
||||
|
||||
it('should change axis.y.max to 0', function () {
|
||||
args.axis.y.max = 0;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be set properly when smaller than min of data', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBe(-11);
|
||||
expect(domain[1]).toBe(1);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('axis.y.padding', function () {
|
||||
|
||||
it('should change axis.y.max to 1000', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 10, 20, 10, 40, 15, 25],
|
||||
['data2', 50, 40, 30, 45, 25, 45]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y: {
|
||||
padding: {
|
||||
top: 200,
|
||||
bottom: 200
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be set properly when bigger than min of data', function () {
|
||||
var domain = chart.internal.y.domain();
|
||||
expect(domain[0]).toBeCloseTo(-9, -1);
|
||||
expect(domain[1]).toBeCloseTo(69, -1);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
131
libraries/framework/vendor/plugins/c3charts/spec/grid-spec.js
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart grid', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
y: {
|
||||
tick: {
|
||||
}
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
y: {
|
||||
show: false
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('y grid', function () {
|
||||
|
||||
it('should not show y grids', function () {
|
||||
expect(chart.internal.main.select('.c3-ygrids').size()).toBe(0);
|
||||
});
|
||||
|
||||
it('should update args to show y grids', function () {
|
||||
args.grid.y.show = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show y grids', function () {
|
||||
var ygrids = chart.internal.main.select('.c3-ygrids');
|
||||
expect(ygrids.size()).toBe(1);
|
||||
expect(ygrids.selectAll('.c3-ygrid').size()).toBe(9);
|
||||
});
|
||||
|
||||
it('should update args to show only 3 y grids', function () {
|
||||
args.grid.y.ticks = 3;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show only 3 y grids', function () {
|
||||
var ygrids = chart.internal.main.select('.c3-ygrids');
|
||||
expect(ygrids.size()).toBe(1);
|
||||
expect(ygrids.selectAll('.c3-ygrid').size()).toBe(3);
|
||||
});
|
||||
|
||||
it('should update args to show y grids depending on y axis ticks', function () {
|
||||
args.axis.y.tick.count = 5;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show grids depending on y axis ticks', function () {
|
||||
var ygrids = chart.internal.main.select('.c3-ygrids'),
|
||||
expectedYs = [];
|
||||
ygrids.selectAll('.c3-ygrid').each(function (d, i) {
|
||||
expectedYs[i] = +d3.select(this).attr('y1');
|
||||
});
|
||||
expect(ygrids.size()).toBe(1);
|
||||
expect(ygrids.selectAll('.c3-ygrid').size()).toBe(5);
|
||||
chart.internal.main.select('.c3-axis-y').selectAll('.tick').each(function (d, i) {
|
||||
var t = d3.transform(d3.select(this).attr('transform'));
|
||||
expect(t.translate[1]).toBe(expectedYs[i]);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('x grid lines', function () {
|
||||
|
||||
describe('on category axis', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 'a', 'b', 'c', 'd'],
|
||||
['data1', 30, 200, 100, 400],
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
type: 'category'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
x: {
|
||||
lines: [
|
||||
{value: 3, text: 'Label 3'},
|
||||
{value: 'a', text: 'Label a'}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show x grid lines', function () {
|
||||
var lines = chart.internal.main.selectAll('.c3-xgrid-lines .c3-xgrid-line'),
|
||||
expectedX1 = [515, 74],
|
||||
expectedText = ['Label 3', 'Label a'];
|
||||
lines.each(function (id, i) {
|
||||
var line = d3.select(this),
|
||||
l = line.select('line'),
|
||||
t = line.select('text');
|
||||
expect(+l.attr('x1')).toBeCloseTo(expectedX1[i], -1);
|
||||
expect(t.text()).toBe(expectedText[i]);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
132
libraries/framework/vendor/plugins/c3charts/spec/interaction-spec.js
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart interaction', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('generate event rects', function () {
|
||||
|
||||
describe('custom x', function () {
|
||||
|
||||
it('should generate bar chart', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 0, 1000, 3000, 10000],
|
||||
['data', 10, 10, 10, 10]
|
||||
],
|
||||
type: 'bar'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have 4 event rects properly', function () {
|
||||
var lefts = [78, 138, 205.5, 407.5],
|
||||
widths = [60, 67.5, 202, 194];
|
||||
d3.selectAll('.c3-event-rect').each(function (d, i) {
|
||||
var box = d3.select(this).node().getBoundingClientRect();
|
||||
expect(box.left).toBe(lefts[i]);
|
||||
expect(box.width).toBe(widths[i]);
|
||||
});
|
||||
});
|
||||
|
||||
it('should generate bar chart with only one data', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', 0],
|
||||
['data', 10]
|
||||
],
|
||||
type: 'bar'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have 1 event rects properly', function () {
|
||||
var eventRects = d3.selectAll('.c3-event-rect');
|
||||
expect(eventRects.size()).toBe(1);
|
||||
eventRects.each(function () {
|
||||
var box = d3.select(this).node().getBoundingClientRect();
|
||||
expect(box.left).toBe(40.5);
|
||||
expect(box.width).toBe(598);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('timeseries', function () {
|
||||
|
||||
it('should generate line chart with timeseries', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', '20140101', '20140201', '20140210', '20140301'],
|
||||
['data', 10, 10, 10, 10]
|
||||
]
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have 4 event rects properly', function () {
|
||||
var lefts = [43.5, 193, 353, 500],
|
||||
widths = [149.5, 160, 147, 136];
|
||||
d3.selectAll('.c3-event-rect').each(function (d, i) {
|
||||
var box = d3.select(this).node().getBoundingClientRect();
|
||||
expect(box.left).toBe(lefts[i]);
|
||||
expect(box.width).toBe(widths[i]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
it('should generate line chart with only 1 data timeseries', function () {
|
||||
args = {
|
||||
data: {
|
||||
x: 'x',
|
||||
columns: [
|
||||
['x', '20140101'],
|
||||
['data', 10]
|
||||
]
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have 1 event rects properly', function () {
|
||||
var eventRects = d3.selectAll('.c3-event-rect');
|
||||
expect(eventRects.size()).toBe(1);
|
||||
eventRects.each(function () {
|
||||
var box = d3.select(this).node().getBoundingClientRect();
|
||||
expect(box.left).toBe(40.5);
|
||||
expect(box.width).toBe(598);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
186
libraries/framework/vendor/plugins/c3charts/spec/legend-spec.js
vendored
Normal file
@@ -0,0 +1,186 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart legend', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
if (typeof chart === 'undefined') {
|
||||
window.initDom();
|
||||
}
|
||||
chart = window.c3.generate(args);
|
||||
d3 = chart.internal.d3;
|
||||
chart.internal.d3.select('.jasmine_html-reporter')
|
||||
.style('position', 'absolute')
|
||||
.style('right', 0);
|
||||
|
||||
window.setTimeout(function () {
|
||||
done();
|
||||
}, 10);
|
||||
});
|
||||
|
||||
describe('legend position', function () {
|
||||
|
||||
it('should be located on the center of chart', function () {
|
||||
var box = chart.internal.legend.node().getBoundingClientRect();
|
||||
expect(box.left + box.right).toBe(640);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('legend as inset', function () {
|
||||
|
||||
it('should change the legend to "inset" successfully', function () {
|
||||
args.legend = {
|
||||
position: 'inset',
|
||||
inset: {
|
||||
step: null
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be positioned properly', function () {
|
||||
var box = d3.select('.c3-legend-background').node().getBoundingClientRect();
|
||||
expect(box.top).toBe(5.5);
|
||||
expect(box.left).toBe(60.5);
|
||||
});
|
||||
|
||||
it('should have automatically calculated height', function () {
|
||||
var box = d3.select('.c3-legend-background').node().getBoundingClientRect();
|
||||
expect(box.height).toBe(48);
|
||||
});
|
||||
|
||||
it('should change the legend step to 1 successfully', function () {
|
||||
args.legend.inset.step = 1;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have automatically calculated height', function () {
|
||||
var box = d3.select('.c3-legend-background').node().getBoundingClientRect();
|
||||
expect(box.height).toBe(28);
|
||||
});
|
||||
|
||||
it('should change the legend step to 2 successfully', function () {
|
||||
args.legend.inset.step = 2;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have automatically calculated height', function () {
|
||||
var box = d3.select('.c3-legend-background').node().getBoundingClientRect();
|
||||
expect(box.height).toBe(48);
|
||||
});
|
||||
|
||||
it('should update args to have only one series', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
position: 'inset'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should locate legend properly', function () {
|
||||
var box = d3.select('.c3-legend-background').node().getBoundingClientRect();
|
||||
expect(box.height).toBe(28);
|
||||
expect(box.width).toBeGreaterThan(64);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('legend.hide', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 130, 100, 200, 100, 250, 150]
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
hide: true
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not show legends', function () {
|
||||
d3.selectAll('.c3-legend-item').each(function () {
|
||||
expect(d3.select(this).style('visibility')).toBe('hidden');
|
||||
});
|
||||
});
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 130, 100, 200, 100, 250, 150]
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
hide: 'data2'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not show legends', function () {
|
||||
expect(d3.select('.c3-legend-item-data1').style('visibility')).toBe('visible');
|
||||
expect(d3.select('.c3-legend-item-data2').style('visibility')).toBe('hidden');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('legend.show', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 130, 100, 200, 100, 250, 150]
|
||||
]
|
||||
},
|
||||
legend: {
|
||||
show: false
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not initially have rendered any legend items', function () {
|
||||
expect(d3.selectAll('.c3-legend-item').empty()).toBe(true);
|
||||
});
|
||||
|
||||
it('allows us to show the legend on showLegend call', function () {
|
||||
chart.legend.show();
|
||||
d3.selectAll('.c3-legend-item').each(function () {
|
||||
expect(d3.select(this).style('visibility')).toBe('visible');
|
||||
// This selects all the children, but we expect it to be empty
|
||||
expect(d3.select(this).selectAll("*").length).not.toEqual(0);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
91
libraries/framework/vendor/plugins/c3charts/spec/shape.bar-spec.js
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
var setMouseEvent = window.setMouseEvent;
|
||||
|
||||
describe('c3 chart shape bar', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, -150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', -150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
type: 'bar'
|
||||
},
|
||||
axis: {
|
||||
rotated: false
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('internal.isWithinBar', function () {
|
||||
|
||||
describe('with normal axis', function () {
|
||||
|
||||
it('should not be within bar', function () {
|
||||
var bar = d3.select('.c3-target-data1 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 0, 0);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should be within bar', function () {
|
||||
var bar = d3.select('.c3-target-data1 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 31, 280);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not be within bar of negative value', function () {
|
||||
var bar = d3.select('.c3-target-data3 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 68, 280);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should be within bar of negative value', function () {
|
||||
var bar = d3.select('.c3-target-data3 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 68, 350);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeTruthy();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with rotated axis', function () {
|
||||
|
||||
it('should change the chart as axis rotated', function () {
|
||||
args.axis.rotated = true;
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not be within bar', function () {
|
||||
var bar = d3.select('.c3-target-data1 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 0, 0);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should be within bar', function () {
|
||||
var bar = d3.select('.c3-target-data1 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 190, 20);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be within bar of negative value', function () {
|
||||
var bar = d3.select('.c3-target-data3 .c3-bar-0').node();
|
||||
setMouseEvent(chart, 'click', 68, 50);
|
||||
expect(chart.internal.isWithinBar(bar)).toBeTruthy();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
102
libraries/framework/vendor/plugins/c3charts/spec/shape.line-spec.js
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart shape line', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, -150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', -150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
type: 'line'
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('shape-rendering for line chart', function () {
|
||||
|
||||
it("should not have shape-rendering when it's line chart", function () {
|
||||
d3.selectAll('.c3-line').each(function () {
|
||||
var style = d3.select(this).style('shape-rendering');
|
||||
expect(style).toBe('auto');
|
||||
});
|
||||
});
|
||||
|
||||
it('should chnage to step chart', function () {
|
||||
args.data.type = 'step';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should have shape-rendering = crispedges when it's step chart", function () {
|
||||
d3.selectAll('.c3-line').each(function () {
|
||||
var style = d3.select(this).style('shape-rendering');
|
||||
expect(style).toBe('crispedges');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('point.show option', function () {
|
||||
|
||||
it('should change args to include null data', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, null, 100, 400, -150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', -150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
type: 'line'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not show the circle for null', function (done) {
|
||||
setTimeout(function () {
|
||||
var target = chart.internal.main.select('.c3-chart-line.c3-target-data1');
|
||||
expect(+target.select('.c3-circle-0').style('opacity')).toBe(1);
|
||||
expect(+target.select('.c3-circle-1').style('opacity')).toBe(0);
|
||||
expect(+target.select('.c3-circle-2').style('opacity')).toBe(1);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
it('should change args to include null data on scatter plot', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, null, 100, 400, -150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', -150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
type: 'scatter'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not show the circle for null', function (done) {
|
||||
setTimeout(function () {
|
||||
var target = chart.internal.main.select('.c3-chart-line.c3-target-data1');
|
||||
expect(+target.select('.c3-circle-0').style('opacity')).toBe(0.5);
|
||||
expect(+target.select('.c3-circle-1').style('opacity')).toBe(0);
|
||||
expect(+target.select('.c3-circle-2').style('opacity')).toBe(0.5);
|
||||
done();
|
||||
}, 500);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
69
libraries/framework/vendor/plugins/c3charts/spec/tooltip-spec.js
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart tooltip', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('tooltip position', function () {
|
||||
|
||||
describe('without left margin', function () {
|
||||
|
||||
it('should show tooltip on proper position', function () {
|
||||
var eventRect = d3.select('.c3-event-rect-2').node();
|
||||
window.setMouseEvent(chart, 'mousemove', 100, 100, eventRect);
|
||||
|
||||
var tooltipContainer = d3.select('.c3-tooltip-container'),
|
||||
top = Math.floor(+tooltipContainer.style('top').replace(/px/, '')),
|
||||
left = Math.floor(+tooltipContainer.style('left').replace(/px/, '')),
|
||||
topExpected = 115,
|
||||
leftExpected = 307;
|
||||
expect(top).toBe(topExpected);
|
||||
expect(left).toBe(leftExpected);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with left margin', function () {
|
||||
|
||||
it('should set left margin', function () {
|
||||
d3.select('#chart').style('margin-left', '300px');
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should show tooltip on proper position', function () {
|
||||
var eventRect = d3.select('.c3-event-rect-2').node();
|
||||
window.setMouseEvent(chart, 'mousemove', 100, 100, eventRect);
|
||||
|
||||
var tooltipContainer = d3.select('.c3-tooltip-container'),
|
||||
top = Math.floor(+tooltipContainer.style('top').replace(/px/, '')),
|
||||
left = Math.floor(+tooltipContainer.style('left').replace(/px/, '')),
|
||||
topExpected = 115,
|
||||
leftExpected = 307;
|
||||
expect(top).toBe(topExpected);
|
||||
expect(left).toBe(leftExpected);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
140
libraries/framework/vendor/plugins/c3charts/spec/type-spec.js
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart types', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
type: 'pie'
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('internal.hasArcType', function () {
|
||||
|
||||
describe('with data', function () {
|
||||
|
||||
it('should return true', function () {
|
||||
expect(chart.internal.hasArcType()).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should change chart type to "bar"', function () {
|
||||
args.data.type = 'bar';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return false', function () {
|
||||
expect(chart.internal.hasArcType()).toBeFalsy();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with empty data', function () {
|
||||
|
||||
it('should update args to have empty data', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [],
|
||||
type: 'pie'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return true', function () {
|
||||
expect(chart.internal.hasArcType()).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should change chart type to "bar"', function () {
|
||||
args.data.type = 'bar';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return false', function () {
|
||||
expect(chart.internal.hasArcType()).toBeFalsy();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('internal.hasType', function () {
|
||||
|
||||
it('should update args', function () {
|
||||
args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 25],
|
||||
['data3', 150, 120, 110, 140, 115, 125]
|
||||
],
|
||||
type: 'pie'
|
||||
}
|
||||
};
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return true for "pie" type', function () {
|
||||
expect(chart.internal.hasType('pie')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return false for "line" type', function () {
|
||||
expect(chart.internal.hasType('line')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should return false for "bar" type', function () {
|
||||
expect(chart.internal.hasType('bar')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should unload successfully', function () {
|
||||
chart.unload([]);
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return true for "pie" type even if no data', function () {
|
||||
expect(chart.internal.hasType('pie')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return false for "line" type even if no data', function () {
|
||||
expect(chart.internal.hasType('line')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should return false for "bar" type even if no data', function () {
|
||||
expect(chart.internal.hasType('bar')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should change chart type to "bar" successfully', function () {
|
||||
args.data.type = 'bar';
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return false for "pie" type even if no data', function () {
|
||||
expect(chart.internal.hasType('pie')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should return false for "line" type even if no data', function () {
|
||||
expect(chart.internal.hasType('line')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should return true for "bar" type even if no data', function () {
|
||||
expect(chart.internal.hasType('bar')).toBeTruthy();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
73
libraries/framework/vendor/plugins/c3charts/spec/zoom-spec.js
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
var describe = window.describe,
|
||||
expect = window.expect,
|
||||
it = window.it,
|
||||
beforeEach = window.beforeEach;
|
||||
|
||||
describe('c3 chart zoom', function () {
|
||||
'use strict';
|
||||
|
||||
var chart, d3;
|
||||
|
||||
var args = {
|
||||
data: {
|
||||
columns: [
|
||||
['data1', 30, 200, 100, 400, 3150, 250],
|
||||
['data2', 50, 20, 10, 40, 15, 6025]
|
||||
]
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
extent: [1, 2]
|
||||
}
|
||||
},
|
||||
zoom: {
|
||||
enable: true
|
||||
},
|
||||
subchart: {
|
||||
show: true
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(function (done) {
|
||||
chart = window.initChart(chart, args, done);
|
||||
d3 = chart.internal.d3;
|
||||
});
|
||||
|
||||
describe('default extent', function () {
|
||||
|
||||
describe('main chart domain', function () {
|
||||
|
||||
it('should have original y domain', function () {
|
||||
var yDomain = chart.internal.y.domain(),
|
||||
expectedYDomain = [-591.5, 6626.5];
|
||||
expect(yDomain[0]).toBe(expectedYDomain[0]);
|
||||
expect(yDomain[1]).toBe(expectedYDomain[1]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('main chart domain', function () {
|
||||
|
||||
it('should have original y domain in subchart', function () {
|
||||
var yDomain = chart.internal.y.domain(),
|
||||
subYDomain = chart.internal.subY.domain();
|
||||
expect(subYDomain[0]).toBe(yDomain[0]);
|
||||
expect(subYDomain[1]).toBe(yDomain[1]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('main chart domain', function () {
|
||||
|
||||
it('should have specified brush extent', function () {
|
||||
var brushExtent = chart.internal.brush.extent(),
|
||||
expectedBrushExtent = [1, 2];
|
||||
expect(brushExtent[0]).toBe(expectedBrushExtent[0]);
|
||||
expect(brushExtent[1]).toBe(expectedBrushExtent[1]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
237
libraries/framework/vendor/plugins/canvasbg/canvasbg.js
vendored
Normal file
361
libraries/framework/vendor/plugins/circles/circles.js
vendored
Normal file
@@ -0,0 +1,361 @@
|
||||
// circles
|
||||
// copyright Artan Sinani
|
||||
// https://github.com/lugolabs/circles
|
||||
|
||||
/*
|
||||
Lightwheight JavaScript library that generates circular graphs in SVG.
|
||||
|
||||
Call Circles.create(options) with the following options:
|
||||
|
||||
id - the DOM element that will hold the graph
|
||||
radius - the radius of the circles
|
||||
width - the width of the ring (optional, has value 10, if not specified)
|
||||
value - init value of the circle (optional, defaults to 0)
|
||||
maxValue - maximum value of the circle (optional, defaults to 100)
|
||||
text - the text to display at the centre of the graph (optional, the current "htmlified" value will be shown if not specified)
|
||||
if `null` or an empty string, no text will be displayed
|
||||
can also be a function: the returned value will be the displayed text
|
||||
ex1. function(currentValue) {
|
||||
return '$'+currentValue;
|
||||
}
|
||||
ex2. function() {
|
||||
return this.getPercent() + '%';
|
||||
}
|
||||
colors - an array of colors, with the first item coloring the full circle
|
||||
(optional, it will be `['#EEE', '#F00']` if not specified)
|
||||
duration - value in ms of animation duration; (optional, defaults to 500);
|
||||
if 0 or `null` is passed, the animation will not run
|
||||
wrpClass - class name to apply on the generated element wrapping the whole circle.
|
||||
textClass: - class name to apply on the generated element wrapping the text content.
|
||||
|
||||
API:
|
||||
updateRadius(radius) - regenerates the circle with the given radius (see spec/responsive.html for an example hot to create a responsive circle)
|
||||
updateWidth(width) - regenerates the circle with the given stroke width
|
||||
updateColors(colors) - change colors used to draw the circle
|
||||
update(value, duration) - update value of circle. If value is set to true, force the update of displaying
|
||||
getPercent() - returns the percentage value of the circle, based on its current value and its max value
|
||||
getValue() - returns the value of the circle
|
||||
getMaxValue() - returns the max value of the circle
|
||||
getValueFromPercent(percentage) - returns the corresponding value of the circle based on its max value and given percentage
|
||||
htmlifyNumber(number, integerPartClass, decimalPartClass) - returned HTML representation of given number with given classes names applied on tags
|
||||
|
||||
*/
|
||||
|
||||
(function() {
|
||||
|
||||
var requestAnimFrame = window.requestAnimationFrame ||
|
||||
window.webkitRequestAnimationFrame ||
|
||||
window.mozRequestAnimationFrame ||
|
||||
window.oRequestAnimationFrame ||
|
||||
window.msRequestAnimationFrame ||
|
||||
function (callback) {
|
||||
setTimeout(callback, 1000 / 60);
|
||||
},
|
||||
|
||||
Circles = window.Circles = function(options) {
|
||||
var elId = options.id;
|
||||
this._el = document.getElementById(elId);
|
||||
|
||||
if (this._el === null) return;
|
||||
|
||||
this._radius = options.radius || 10;
|
||||
this._duration = options.duration === undefined ? 500 : options.duration;
|
||||
|
||||
this._value = 0;
|
||||
this._maxValue = options.maxValue || 100;
|
||||
|
||||
this._text = options.text === undefined ? function(value){return this.htmlifyNumber(value);} : options.text;
|
||||
this._strokeWidth = options.width || 10;
|
||||
this._colors = options.colors || ['#EEE', '#F00'];
|
||||
this._svg = null;
|
||||
this._movingPath = null;
|
||||
this._wrapContainer = null;
|
||||
this._textContainer = null;
|
||||
|
||||
this._wrpClass = options.wrpClass || 'circles-wrp';
|
||||
this._textClass = options.textClass || 'circle-text';
|
||||
|
||||
var endAngleRad = Math.PI / 180 * 270;
|
||||
this._start = -Math.PI / 180 * 90;
|
||||
this._startPrecise = this._precise(this._start);
|
||||
this._circ = endAngleRad - this._start;
|
||||
|
||||
this._generate().update(options.value || 0);
|
||||
};
|
||||
|
||||
Circles.prototype = {
|
||||
VERSION: '0.0.5',
|
||||
|
||||
_generate: function() {
|
||||
|
||||
this._svgSize = this._radius * 2;
|
||||
this._radiusAdjusted = this._radius - (this._strokeWidth / 2);
|
||||
|
||||
this._generateSvg()._generateText()._generateWrapper();
|
||||
|
||||
this._el.innerHTML = '';
|
||||
this._el.appendChild(this._wrapContainer);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_setPercentage: function(percentage) {
|
||||
this._movingPath.setAttribute('d', this._calculatePath(percentage, true));
|
||||
this._textContainer.innerHTML = this._getText(this.getValueFromPercent(percentage));
|
||||
},
|
||||
|
||||
_generateWrapper: function() {
|
||||
this._wrapContainer = document.createElement('div');
|
||||
this._wrapContainer.className = this._wrpClass;
|
||||
this._wrapContainer.style.position = 'relative';
|
||||
this._wrapContainer.style.display = 'inline-block';
|
||||
|
||||
this._wrapContainer.appendChild(this._svg);
|
||||
this._wrapContainer.appendChild(this._textContainer);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_generateText: function() {
|
||||
|
||||
this._textContainer = document.createElement('div');
|
||||
this._textContainer.className = this._textClass;
|
||||
|
||||
var style = {
|
||||
//position: 'absolute',
|
||||
//top: 0,
|
||||
//left: 0,
|
||||
//textAlign: 'center',
|
||||
//width: '100%',
|
||||
//fontSize: (this._radius * .7) + 'px',
|
||||
//height: this._svgSize + 'px',
|
||||
//lineHeight: this._svgSize + 'px'
|
||||
};
|
||||
|
||||
for(var prop in style) {
|
||||
this._textContainer.style[prop] = style[prop];
|
||||
}
|
||||
|
||||
this._textContainer.innerHTML = this._getText(0);
|
||||
return this;
|
||||
},
|
||||
|
||||
_getText: function(value) {
|
||||
if (!this._text) return '';
|
||||
|
||||
if (value === undefined) value = this._value;
|
||||
|
||||
value = parseFloat(value.toFixed(2));
|
||||
|
||||
return typeof this._text === 'function' ? this._text.call(this, value) : this._text;
|
||||
},
|
||||
|
||||
_generateSvg: function() {
|
||||
|
||||
this._svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
this._svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
||||
this._svg.setAttribute('width', this._svgSize);
|
||||
this._svg.setAttribute('height', this._svgSize);
|
||||
|
||||
this._generatePath(100, false, this._colors[0])._generatePath(1, true, this._colors[1]);
|
||||
|
||||
this._movingPath = this._svg.getElementsByTagName('path')[1];
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_generatePath: function(percentage, open, color) {
|
||||
var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
||||
path.setAttribute('fill', 'transparent');
|
||||
path.setAttribute('stroke', color);
|
||||
path.setAttribute('stroke-width', this._strokeWidth);
|
||||
path.setAttribute('d', this._calculatePath(percentage, open));
|
||||
|
||||
this._svg.appendChild(path);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_calculatePath: function(percentage, open) {
|
||||
var end = this._start + ((percentage / 100) * this._circ),
|
||||
endPrecise = this._precise(end);
|
||||
return this._arc(endPrecise, open);
|
||||
},
|
||||
|
||||
_arc: function(end, open) {
|
||||
var endAdjusted = end - 0.001,
|
||||
longArc = end - this._startPrecise < Math.PI ? 0 : 1;
|
||||
|
||||
return [
|
||||
'M',
|
||||
this._radius + this._radiusAdjusted * Math.cos(this._startPrecise),
|
||||
this._radius + this._radiusAdjusted * Math.sin(this._startPrecise),
|
||||
'A', // arcTo
|
||||
this._radiusAdjusted, // x radius
|
||||
this._radiusAdjusted, // y radius
|
||||
0, // slanting
|
||||
longArc, // long or short arc
|
||||
1, // clockwise
|
||||
this._radius + this._radiusAdjusted * Math.cos(endAdjusted),
|
||||
this._radius + this._radiusAdjusted * Math.sin(endAdjusted),
|
||||
open ? '' : 'Z' // close
|
||||
].join(' ');
|
||||
},
|
||||
|
||||
_precise: function(value) {
|
||||
return Math.round(value * 1000) / 1000;
|
||||
},
|
||||
|
||||
/*== Public methods ==*/
|
||||
|
||||
htmlifyNumber: function(number, integerPartClass, decimalPartClass) {
|
||||
|
||||
integerPartClass = integerPartClass || 'circles-integer';
|
||||
decimalPartClass = decimalPartClass || 'circles-decimals';
|
||||
|
||||
var parts = (number + '').split('.'),
|
||||
html = '<span class="' + integerPartClass + '">' + parts[0]+'</span>';
|
||||
|
||||
if (parts.length > 1) {
|
||||
html += '.<span class="' + decimalPartClass + '">' + parts[1].substring(0, 2) + '</span>';
|
||||
}
|
||||
return html;
|
||||
},
|
||||
|
||||
updateRadius: function(radius) {
|
||||
this._radius = radius;
|
||||
|
||||
return this._generate().update(true);
|
||||
},
|
||||
|
||||
updateWidth: function(width) {
|
||||
this._strokeWidth = width;
|
||||
|
||||
return this._generate().update(true);
|
||||
},
|
||||
|
||||
updateColors: function(colors) {
|
||||
this._colors = colors;
|
||||
|
||||
var paths = this._svg.getElementsByTagName('path');
|
||||
|
||||
paths[0].setAttribute('stroke', colors[0]);
|
||||
paths[1].setAttribute('stroke', colors[1]);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
getPercent: function() {
|
||||
return (this._value * 100) / this._maxValue;
|
||||
},
|
||||
|
||||
getValueFromPercent: function(percentage) {
|
||||
return (this._maxValue * percentage) / 100;
|
||||
},
|
||||
|
||||
getValue: function()
|
||||
{
|
||||
return this._value;
|
||||
},
|
||||
|
||||
getMaxValue: function()
|
||||
{
|
||||
return this._maxValue;
|
||||
},
|
||||
|
||||
update: function(value, duration) {
|
||||
if (value === true) {//Force update with current value
|
||||
this._setPercentage(this.getPercent());
|
||||
return this;
|
||||
}
|
||||
|
||||
if (this._value == value || isNaN(value)) return this;
|
||||
if (duration === undefined) duration = this._duration;
|
||||
|
||||
var self = this,
|
||||
oldPercentage = self.getPercent(),
|
||||
delta = 1,
|
||||
newPercentage, isGreater, steps, stepDuration;
|
||||
|
||||
this._value = Math.min(this._maxValue, Math.max(0, value));
|
||||
|
||||
if (!duration) {//No duration, we can't skip the animation
|
||||
this._setPercentage(this.getPercent());
|
||||
return this;
|
||||
}
|
||||
|
||||
newPercentage = self.getPercent();
|
||||
isGreater = newPercentage > oldPercentage;
|
||||
|
||||
delta += newPercentage % 1; //If new percentage is not an integer, we add the decimal part to the delta
|
||||
steps = Math.floor(Math.abs(newPercentage - oldPercentage) / delta);
|
||||
stepDuration = duration / steps;
|
||||
|
||||
|
||||
(function animate(lastFrame) {
|
||||
if (isGreater)
|
||||
oldPercentage += delta;
|
||||
else
|
||||
oldPercentage -= delta;
|
||||
|
||||
if ((isGreater && oldPercentage >= newPercentage) || (!isGreater && oldPercentage <= newPercentage))
|
||||
{
|
||||
requestAnimFrame(function(){ self._setPercentage(newPercentage); });
|
||||
return;
|
||||
}
|
||||
|
||||
requestAnimFrame(function() { self._setPercentage(oldPercentage); });
|
||||
|
||||
var now = Date.now(),
|
||||
deltaTime = now - lastFrame;
|
||||
|
||||
if (deltaTime >= stepDuration) {
|
||||
animate(now);
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
animate(Date.now());
|
||||
}, stepDuration - deltaTime);
|
||||
}
|
||||
|
||||
})(Date.now());
|
||||
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
Circles.create = function(options) {
|
||||
return new Circles(options);
|
||||
};
|
||||
|
||||
|
||||
// Helper function that adds responsive ability to chosen text elements
|
||||
$.fn.fitText = function( kompressor, options ) {
|
||||
|
||||
// Setup options
|
||||
var compressor = kompressor || 1,
|
||||
settings = $.extend({
|
||||
'minFontSize' : Number.NEGATIVE_INFINITY,
|
||||
'maxFontSize' : Number.POSITIVE_INFINITY
|
||||
}, options);
|
||||
|
||||
return this.each(function(){
|
||||
|
||||
// Store the object
|
||||
var $this = $(this);
|
||||
|
||||
// Resizer() resizes items based on the object width divided by the compressor * 10
|
||||
var resizer = function () {
|
||||
$this.css('font-size', Math.max(Math.min($this.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)));
|
||||
};
|
||||
|
||||
// Call once to set.
|
||||
resizer();
|
||||
|
||||
// Call on resize. Opera debounces their resize by default.
|
||||
$(window).on('resize.fittext orientationchange.fittext', resizer);
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
})();
|
||||
217
libraries/framework/vendor/plugins/colorpicker/css/bootstrap-colorpicker.css
vendored
Normal file
@@ -0,0 +1,217 @@
|
||||
/*!
|
||||
* Bootstrap Colorpicker
|
||||
* http://mjolnic.github.io/bootstrap-colorpicker/
|
||||
*
|
||||
* Originally written by (c) 2012 Stefan Petre
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
*
|
||||
*/
|
||||
|
||||
.colorpicker-saturation {
|
||||
float: left;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
cursor: crosshair;
|
||||
background-image: url("../img/bootstrap-colorpicker/saturation.png");
|
||||
}
|
||||
|
||||
.colorpicker-saturation i {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
margin: -4px 0 0 -4px;
|
||||
border: 1px solid #000;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.colorpicker-saturation i b {
|
||||
display: block;
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
border: 1px solid #fff;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.colorpicker-hue,
|
||||
.colorpicker-alpha {
|
||||
float: left;
|
||||
width: 15px;
|
||||
height: 100px;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 4px;
|
||||
cursor: row-resize;
|
||||
}
|
||||
|
||||
.colorpicker-hue i,
|
||||
.colorpicker-alpha i {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin-top: -1px;
|
||||
background: #000;
|
||||
border-top: 1px solid #fff;
|
||||
}
|
||||
|
||||
.colorpicker-hue {
|
||||
background-image: url("../img/bootstrap-colorpicker/hue.png");
|
||||
}
|
||||
|
||||
.colorpicker-alpha {
|
||||
display: none;
|
||||
background-image: url("../img/bootstrap-colorpicker/alpha.png");
|
||||
}
|
||||
|
||||
.colorpicker {
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 2500;
|
||||
min-width: 130px;
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.colorpicker:before,
|
||||
.colorpicker:after {
|
||||
display: table;
|
||||
line-height: 0;
|
||||
content: "";
|
||||
}
|
||||
|
||||
.colorpicker:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.colorpicker:before {
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
display: inline-block;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-left: 7px solid transparent;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
content: '';
|
||||
}
|
||||
|
||||
.colorpicker:after {
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
display: inline-block;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
border-left: 6px solid transparent;
|
||||
content: '';
|
||||
}
|
||||
|
||||
.colorpicker div {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-with-alpha {
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-with-alpha .colorpicker-alpha {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.colorpicker-color {
|
||||
height: 10px;
|
||||
margin-top: 5px;
|
||||
clear: both;
|
||||
background-image: url("../img/bootstrap-colorpicker/alpha.png");
|
||||
background-position: 0 100%;
|
||||
}
|
||||
|
||||
.colorpicker-color div {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.colorpicker-element .input-group-addon i,
|
||||
.colorpicker-element .add-on i {
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
vertical-align: text-top;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-inline {
|
||||
position: relative;
|
||||
z-index: auto;
|
||||
display: inline-block;
|
||||
float: none;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal {
|
||||
width: 110px;
|
||||
height: auto;
|
||||
min-width: 110px;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-saturation {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-color {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-hue,
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-alpha {
|
||||
float: left;
|
||||
width: 100px;
|
||||
height: 15px;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 0;
|
||||
cursor: col-resize;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-hue i,
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-alpha i {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
width: 1px;
|
||||
height: 15px;
|
||||
margin-top: 0;
|
||||
background: #ffffff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-hue {
|
||||
background-image: url("../img/bootstrap-colorpicker/hue-horizontal.png");
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-horizontal .colorpicker-alpha {
|
||||
background-image: url("../img/bootstrap-colorpicker/alpha-horizontal.png");
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.colorpicker.colorpicker-visible {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.colorpicker-inline.colorpicker-visible {
|
||||
display: inline-block;
|
||||
}
|
||||
9
libraries/framework/vendor/plugins/colorpicker/css/bootstrap-colorpicker.min.css
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
/*!
|
||||
* Bootstrap Colorpicker
|
||||
* http://mjolnic.github.io/bootstrap-colorpicker/
|
||||
*
|
||||
* Originally written by (c) 2012 Stefan Petre
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
*
|
||||
*/.colorpicker-saturation{float:left;width:100px;height:100px;cursor:crosshair;background-image:url("../img/bootstrap-colorpicker/saturation.png")}.colorpicker-saturation i{position:absolute;top:0;left:0;display:block;width:5px;height:5px;margin:-4px 0 0 -4px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-saturation i b{display:block;width:5px;height:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-hue,.colorpicker-alpha{float:left;width:15px;height:100px;margin-bottom:4px;margin-left:4px;cursor:row-resize}.colorpicker-hue i,.colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:100%;height:1px;margin-top:-1px;background:#000;border-top:1px solid #fff}.colorpicker-hue{background-image:url("../img/bootstrap-colorpicker/hue.png")}.colorpicker-alpha{display:none;background-image:url("../img/bootstrap-colorpicker/alpha.png")}.colorpicker{top:0;left:0;z-index:2500;min-width:130px;padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1}.colorpicker:before,.colorpicker:after{display:table;line-height:0;content:""}.colorpicker:after{clear:both}.colorpicker:before{position:absolute;top:-7px;left:6px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.colorpicker:after{position:absolute;top:-6px;left:7px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url("../img/bootstrap-colorpicker/alpha.png");background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-element .input-group-addon i,.colorpicker-element .add-on i{display:inline-block;width:16px;height:16px;vertical-align:text-top;cursor:pointer}.colorpicker.colorpicker-inline{position:relative;z-index:auto;display:inline-block;float:none}.colorpicker.colorpicker-horizontal{width:110px;height:auto;min-width:110px}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-hue,.colorpicker.colorpicker-horizontal .colorpicker-alpha{float:left;width:100px;height:15px;margin-bottom:4px;margin-left:0;cursor:col-resize}.colorpicker.colorpicker-horizontal .colorpicker-hue i,.colorpicker.colorpicker-horizontal .colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:1px;height:15px;margin-top:0;background:#fff;border:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url("../img/bootstrap-colorpicker/hue-horizontal.png")}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url("../img/bootstrap-colorpicker/alpha-horizontal.png")}.colorpicker.colorpicker-hidden{display:none}.colorpicker.colorpicker-visible{display:block}.colorpicker-inline.colorpicker-visible{display:inline-block}
|
||||
BIN
libraries/framework/vendor/plugins/colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png
vendored
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
libraries/framework/vendor/plugins/colorpicker/img/bootstrap-colorpicker/alpha.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
libraries/framework/vendor/plugins/colorpicker/img/bootstrap-colorpicker/hue-horizontal.png
vendored
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
libraries/framework/vendor/plugins/colorpicker/img/bootstrap-colorpicker/hue.png
vendored
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
libraries/framework/vendor/plugins/colorpicker/img/bootstrap-colorpicker/saturation.png
vendored
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
1
libraries/framework/vendor/plugins/colorpicker/js/bootstrap-colorpicker.min.js
vendored
Normal file
32
libraries/framework/vendor/plugins/countdown/countdownBasic.html
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<title>jQuery Countdown</title>
|
||||
<link rel="stylesheet" href="jquery.countdown.css">
|
||||
<style type="text/css">
|
||||
#defaultCountdown { width: 240px; height: 45px; }
|
||||
</style>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
|
||||
<script src="jquery.plugin.js"></script>
|
||||
<script src="jquery.countdown.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
var austDay = new Date();
|
||||
austDay = new Date(austDay.getFullYear() + 1, 1 - 1, 26);
|
||||
$('#defaultCountdown').countdown({until: austDay});
|
||||
$('#year').text(austDay.getFullYear());
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>jQuery Countdown Basics</h1>
|
||||
<p>This page demonstrates the very basics of the
|
||||
<a href="http://keith-wood.name/countdown.html">jQuery Countdown plugin</a>.
|
||||
It contains the minimum requirements for using the plugin and
|
||||
can be used as the basis for your own experimentation.</p>
|
||||
<p>For more detail see the <a href="http://keith-wood.name/countdownRef.html">documentation reference</a> page.</p>
|
||||
<p>Counting down to 26 January <span id="year">2014</span>.</p>
|
||||
<div id="defaultCountdown"></div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
libraries/framework/vendor/plugins/countdown/countdownGlowing.gif
vendored
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
libraries/framework/vendor/plugins/countdown/countdownLED.png
vendored
Normal file
|
After Width: | Height: | Size: 339 B |
BIN
libraries/framework/vendor/plugins/countdown/digits.png
vendored
Normal file
|
After Width: | Height: | Size: 24 KiB |
6
libraries/framework/vendor/plugins/countdown/jquery.countdown.min.js
vendored
Normal file
4
libraries/framework/vendor/plugins/countdown/jquery.plugin.min.js
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/** Abstract base class for collection plugins v1.0.1.
|
||||
Written by Keith Wood (kbwood{at}iinet.com.au) December 2013.
|
||||
Licensed under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license. */
|
||||
(function(){var j=false;window.JQClass=function(){};JQClass.classes={};JQClass.extend=function extender(f){var g=this.prototype;j=true;var h=new this();j=false;for(var i in f){h[i]=typeof f[i]=='function'&&typeof g[i]=='function'?(function(d,e){return function(){var b=this._super;this._super=function(a){return g[d].apply(this,a||[])};var c=e.apply(this,arguments);this._super=b;return c}})(i,f[i]):f[i]}function JQClass(){if(!j&&this._init){this._init.apply(this,arguments)}}JQClass.prototype=h;JQClass.prototype.constructor=JQClass;JQClass.extend=extender;return JQClass}})();(function($){JQClass.classes.JQPlugin=JQClass.extend({name:'plugin',defaultOptions:{},regionalOptions:{},_getters:[],_getMarker:function(){return'is-'+this.name},_init:function(){$.extend(this.defaultOptions,(this.regionalOptions&&this.regionalOptions[''])||{});var c=camelCase(this.name);$[c]=this;$.fn[c]=function(a){var b=Array.prototype.slice.call(arguments,1);if($[c]._isNotChained(a,b)){return $[c][a].apply($[c],[this[0]].concat(b))}return this.each(function(){if(typeof a==='string'){if(a[0]==='_'||!$[c][a]){throw'Unknown method: '+a;}$[c][a].apply($[c],[this].concat(b))}else{$[c]._attach(this,a)}})}},setDefaults:function(a){$.extend(this.defaultOptions,a||{})},_isNotChained:function(a,b){if(a==='option'&&(b.length===0||(b.length===1&&typeof b[0]==='string'))){return true}return $.inArray(a,this._getters)>-1},_attach:function(a,b){a=$(a);if(a.hasClass(this._getMarker())){return}a.addClass(this._getMarker());b=$.extend({},this.defaultOptions,this._getMetadata(a),b||{});var c=$.extend({name:this.name,elem:a,options:b},this._instSettings(a,b));a.data(this.name,c);this._postAttach(a,c);this.option(a,b)},_instSettings:function(a,b){return{}},_postAttach:function(a,b){},_getMetadata:function(d){try{var f=d.data(this.name.toLowerCase())||'';f=f.replace(/'/g,'"');f=f.replace(/([a-zA-Z0-9]+):/g,function(a,b,i){var c=f.substring(0,i).match(/"/g);return(!c||c.length%2===0?'"'+b+'":':b+':')});f=$.parseJSON('{'+f+'}');for(var g in f){var h=f[g];if(typeof h==='string'&&h.match(/^new Date\((.*)\)$/)){f[g]=eval(h)}}return f}catch(e){return{}}},_getInst:function(a){return $(a).data(this.name)||{}},option:function(a,b,c){a=$(a);var d=a.data(this.name);if(!b||(typeof b==='string'&&c==null)){var e=(d||{}).options;return(e&&b?e[b]:e)}if(!a.hasClass(this._getMarker())){return}var e=b||{};if(typeof b==='string'){e={};e[b]=c}this._optionsChanged(a,d,e);$.extend(d.options,e)},_optionsChanged:function(a,b,c){},destroy:function(a){a=$(a);if(!a.hasClass(this._getMarker())){return}this._preDestroy(a,this._getInst(a));a.removeData(this.name).removeClass(this._getMarker())},_preDestroy:function(a,b){}});function camelCase(c){return c.replace(/-([a-z])/g,function(a,b){return b.toUpperCase()})}$.JQPlugin={createPlugin:function(a,b){if(typeof a==='object'){b=a;a='JQPlugin'}a=camelCase(a);var c=camelCase(b.name);JQClass.classes[c]=JQClass.classes[a].extend(b);new JQClass.classes[c]()}}})(jQuery);
|
||||
248
libraries/framework/vendor/plugins/cropper/cropper.css
vendored
Normal file
@@ -0,0 +1,248 @@
|
||||
/*!
|
||||
* Cropper v0.9.0
|
||||
* https://github.com/fengyuanchen/cropper
|
||||
*
|
||||
* Copyright (c) 2014-2015 Fengyuan Chen and contributors
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Date: 2015-03-15T06:29:30.388Z
|
||||
*/
|
||||
.cropper-container {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-touch-callout: none;
|
||||
}
|
||||
.cropper-container img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-width: 0 !important;
|
||||
max-width: none !important;
|
||||
height: 100%;
|
||||
min-height: 0 !important;
|
||||
max-height: none !important;
|
||||
|
||||
image-orientation: 0deg !important;
|
||||
}
|
||||
.cropper-canvas,
|
||||
.cropper-drag-box,
|
||||
.cropper-crop-box,
|
||||
.cropper-modal {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
.cropper-drag-box {
|
||||
background-color: #fff;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
.cropper-modal {
|
||||
background-color: #000;
|
||||
filter: alpha(opacity=50);
|
||||
opacity: .5;
|
||||
}
|
||||
.cropper-view-box {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
outline: 1px solid #69f;
|
||||
outline-color: rgba(102, 153, 255, .75);
|
||||
}
|
||||
.cropper-dashed {
|
||||
position: absolute;
|
||||
display: block;
|
||||
filter: alpha(opacity=50);
|
||||
border: 0 dashed #fff;
|
||||
opacity: .5;
|
||||
}
|
||||
.cropper-dashed.dashed-h {
|
||||
top: 33.33333333%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 33.33333333%;
|
||||
border-top-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
.cropper-dashed.dashed-v {
|
||||
top: 0;
|
||||
left: 33.33333333%;
|
||||
width: 33.33333333%;
|
||||
height: 100%;
|
||||
border-right-width: 1px;
|
||||
border-left-width: 1px;
|
||||
}
|
||||
.cropper-face,
|
||||
.cropper-line,
|
||||
.cropper-point {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
filter: alpha(opacity=10);
|
||||
opacity: .1;
|
||||
}
|
||||
.cropper-face {
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: move;
|
||||
background-color: #fff;
|
||||
}
|
||||
.cropper-line {
|
||||
background-color: #69f;
|
||||
}
|
||||
.cropper-line.line-e {
|
||||
top: 0;
|
||||
right: -3px;
|
||||
width: 5px;
|
||||
cursor: e-resize;
|
||||
}
|
||||
.cropper-line.line-n {
|
||||
top: -3px;
|
||||
left: 0;
|
||||
height: 5px;
|
||||
cursor: n-resize;
|
||||
}
|
||||
.cropper-line.line-w {
|
||||
top: 0;
|
||||
left: -3px;
|
||||
width: 5px;
|
||||
cursor: w-resize;
|
||||
}
|
||||
.cropper-line.line-s {
|
||||
bottom: -3px;
|
||||
left: 0;
|
||||
height: 5px;
|
||||
cursor: s-resize;
|
||||
}
|
||||
.cropper-point {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
background-color: #69f;
|
||||
filter: alpha(opacity=75);
|
||||
opacity: .75;
|
||||
}
|
||||
.cropper-point.point-e {
|
||||
top: 50%;
|
||||
right: -3px;
|
||||
margin-top: -3px;
|
||||
cursor: e-resize;
|
||||
}
|
||||
.cropper-point.point-n {
|
||||
top: -3px;
|
||||
left: 50%;
|
||||
margin-left: -3px;
|
||||
cursor: n-resize;
|
||||
}
|
||||
.cropper-point.point-w {
|
||||
top: 50%;
|
||||
left: -3px;
|
||||
margin-top: -3px;
|
||||
cursor: w-resize;
|
||||
}
|
||||
.cropper-point.point-s {
|
||||
bottom: -3px;
|
||||
left: 50%;
|
||||
margin-left: -3px;
|
||||
cursor: s-resize;
|
||||
}
|
||||
.cropper-point.point-ne {
|
||||
top: -3px;
|
||||
right: -3px;
|
||||
cursor: ne-resize;
|
||||
}
|
||||
.cropper-point.point-nw {
|
||||
top: -3px;
|
||||
left: -3px;
|
||||
cursor: nw-resize;
|
||||
}
|
||||
.cropper-point.point-sw {
|
||||
bottom: -3px;
|
||||
left: -3px;
|
||||
cursor: sw-resize;
|
||||
}
|
||||
.cropper-point.point-se {
|
||||
right: -3px;
|
||||
bottom: -3px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
cursor: se-resize;
|
||||
filter: alpha(opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
.cropper-point.point-se:before {
|
||||
position: absolute;
|
||||
right: -50%;
|
||||
bottom: -50%;
|
||||
display: block;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
content: " ";
|
||||
background-color: #69f;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.cropper-point.point-se {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.cropper-point.point-se {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.cropper-point.point-se {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
filter: alpha(opacity=75);
|
||||
opacity: .75;
|
||||
}
|
||||
}
|
||||
.cropper-bg {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC");
|
||||
}
|
||||
.cropper-invisible {
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
.cropper-hide {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
width: auto!important;
|
||||
min-width: 0!important;
|
||||
max-width: none!important;
|
||||
height: auto!important;
|
||||
min-height: 0!important;
|
||||
max-height: none!important;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
.cropper-hidden {
|
||||
display: none !important;
|
||||
}
|
||||
.cropper-move {
|
||||
cursor: move;
|
||||
}
|
||||
.cropper-crop {
|
||||
cursor: crosshair;
|
||||
}
|
||||
.cropper-disabled .cropper-canvas,
|
||||
.cropper-disabled .cropper-face,
|
||||
.cropper-disabled .cropper-line,
|
||||
.cropper-disabled .cropper-point {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
1869
libraries/framework/vendor/plugins/cropper/cropper.js
vendored
Normal file
9
libraries/framework/vendor/plugins/cropper/cropper.min.css
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
/*!
|
||||
* Cropper v0.9.0
|
||||
* https://github.com/fengyuanchen/cropper
|
||||
*
|
||||
* Copyright (c) 2014-2015 Fengyuan Chen and contributors
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Date: 2015-03-15T06:29:30.388Z
|
||||
*/.cropper-container{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{display:block;width:100%;min-width:0!important;max-width:none!important;height:100%;min-height:0!important;max-height:none!important;image-orientation:0deg!important}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-drag-box{background-color:#fff;filter:alpha(opacity=0);opacity:0}.cropper-modal{background-color:#000;filter:alpha(opacity=50);opacity:.5}.cropper-view-box{display:block;width:100%;height:100%;overflow:hidden;outline:#69f solid 1px;outline-color:rgba(102,153,255,.75)}.cropper-dashed{position:absolute;display:block;filter:alpha(opacity=50);border:0 dashed #fff;opacity:.5}.cropper-dashed.dashed-h{top:33.33333333%;left:0;width:100%;height:33.33333333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333333%;width:33.33333333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;filter:alpha(opacity=10);opacity:.1}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;background-color:#69f;filter:alpha(opacity=75);opacity:.75}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;filter:alpha(opacity=100);opacity:1}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;filter:alpha(opacity=0);opacity:0}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;filter:alpha(opacity=75);opacity:.75}}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-invisible{filter:alpha(opacity=0);opacity:0}.cropper-hide{position:fixed;top:0;left:0;z-index:-1;width:auto!important;min-width:0!important;max-width:none!important;height:auto!important;min-height:0!important;max-height:none!important;filter:alpha(opacity=0);opacity:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-canvas,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}
|
||||
10
libraries/framework/vendor/plugins/cropper/cropper.min.js
vendored
Normal file
38
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/Readme.txt
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
# AutoFill
|
||||
|
||||
AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in information over the selected cells and incrementing numbers as needed. Key features include:
|
||||
|
||||
* Click and drag cell content insertion
|
||||
* Automatic incrementing of numeric information
|
||||
* Enable and disable on any column
|
||||
* Detailed callback functions for customisation
|
||||
* Support for both DataTables and browser window scrolling
|
||||
|
||||
|
||||
# Installation
|
||||
|
||||
To use AutoFill, first download DataTables ( http://datatables.net/download ) and place the unzipped AutoFill package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.
|
||||
|
||||
|
||||
# Basic usage
|
||||
|
||||
AutoFill is initialised using the `$.fn.dataTable.AutoFill` constructor. For example:
|
||||
|
||||
```js
|
||||
$(document).ready( function () {
|
||||
var table = $('#example').dataTable();
|
||||
new $.fn.dataTable.AutoFill( table );
|
||||
} );
|
||||
```
|
||||
|
||||
|
||||
# Documentation / support
|
||||
|
||||
* Documentation: http://datatables.net/extensions/autofill/
|
||||
* DataTables support forums: http://datatables.net/forums
|
||||
|
||||
|
||||
# GitHub
|
||||
|
||||
If you fancy getting involved with the development of AutoFill and help make it better, please refer to its GitHub repo: https://github.com/DataTables/AutoFill
|
||||
|
||||
24
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.css
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* AutoFill styles
|
||||
*/
|
||||
|
||||
div.AutoFill_filler {
|
||||
display: none;
|
||||
position: absolute;
|
||||
height: 14px;
|
||||
width: 14px;
|
||||
background: url(../images/filler.png) no-repeat center center;
|
||||
z-index: 1002;
|
||||
}
|
||||
|
||||
div.AutoFill_border {
|
||||
display: none;
|
||||
position: absolute;
|
||||
background-color: #0063dc;
|
||||
z-index: 1001;
|
||||
|
||||
box-shadow: 0px 0px 5px #76b4ff;
|
||||
-moz-box-shadow: 0px 0px 5px #76b4ff;
|
||||
-webkit-box-shadow: 0px 0px 5px #76b4ff;
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
div.AutoFill_filler{display:none;position:absolute;height:14px;width:14px;background:url(../images/filler.png) no-repeat center center;z-index:1002}div.AutoFill_border{display:none;position:absolute;background-color:#0063dc;z-index:1001;box-shadow:0px 0px 5px #76b4ff;-moz-box-shadow:0px 0px 5px #76b4ff;-webkit-box-shadow:0px 0px 5px #76b4ff}
|
||||
644
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/columns.html
vendored
Normal file
@@ -0,0 +1,644 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Column options</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
"columnDefs": [
|
||||
{ enable: false, targets: [-1, -2] },
|
||||
{ increment: false, targets: 3 }
|
||||
]
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Column options</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>Columns can be enabled (which they are by default) and disabled from providing the end user with
|
||||
AutoFill abilities by using either <code>columns</code> or <code>columnDefs</code> and the
|
||||
<code>enable</code> option. These two arrays work in exactly the same way <a href=
|
||||
"http://datatables.net/ref/columns">as in DataTables</a>.</p>
|
||||
|
||||
<p>This example shows how disabling columns counting from the right hand side of the table can be
|
||||
achieved. In this case, the last three columns.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
"columnDefs": [
|
||||
{ enable: false, targets: [-1, -2] },
|
||||
{ increment: false, targets: 3 }
|
||||
]
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li class="active"><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
652
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/complete-callback.html
vendored
Normal file
@@ -0,0 +1,652 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Complete callback</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
complete: function ( altered ) {
|
||||
var last = altered[ altered.length-1 ];
|
||||
alert(
|
||||
altered.length+' cells were altered in this auto-fill. The '+
|
||||
'value of the last cell altered was: '+last.oldValue+' and is '+
|
||||
'now '+last.newValue
|
||||
);
|
||||
}
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Complete callback</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>AutoFill provides a number of customisable callback functions so you can tailor it's actions to
|
||||
exactly what you need. This example shows the use of the <code>complete</code> callback function which
|
||||
is executed at the end of an auto-fill drag, providing information about the cells that were
|
||||
altered.</p>
|
||||
|
||||
<p>For a complete description of the <code>complete</code> callback, please refer to the <a href=
|
||||
"//datatables.net/extras/autofill/options">AutoFill documentation</a>.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
complete: function ( altered ) {
|
||||
var last = altered[ altered.length-1 ];
|
||||
alert(
|
||||
altered.length+' cells were altered in this auto-fill. The '+
|
||||
'value of the last cell altered was: '+last.oldValue+' and is '+
|
||||
'now '+last.newValue
|
||||
);
|
||||
}
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li class="active"><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
641
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/fill-both.html
vendored
Normal file
@@ -0,0 +1,641 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Horizontal and vertical fill</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
mode: 'both'
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Horizontal and vertical fill</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>By default AutoFill will allow the fill to operate only on a single column at a time (i.e.
|
||||
vertically). However, it has the ability to provide the fill either horizontally, over both axis or
|
||||
limited to just one axis depending on the direction of the drag. This option is provided by the
|
||||
<code>mode</code> sanitisation option.</p>
|
||||
|
||||
<p>In this case it is set to <code>both</code> (i.e. both horizontal and vertical axis) to provide the
|
||||
filler along a row, rather than a column.</p>
|
||||
|
||||
<p>For the full range of options and syntax for <code>mode</code> please refer to the <a href=
|
||||
"//datatables.net/extras/autofill/options">AutoFill documentation</a>.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
mode: 'both'
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li class="active"><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
641
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/fill-horizontal.html
vendored
Normal file
@@ -0,0 +1,641 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Horizontal fill</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
mode: 'x'
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Horizontal fill</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>By default AutoFill will allow the fill to operate only on a single column at a time (i.e.
|
||||
vertically). However, it has the ability to provide the fill either horizontally, over both axis or
|
||||
limited to just one axis depending on the direction of the drag. This option is provided by the
|
||||
<code>mode</code> sanitisation option.</p>
|
||||
|
||||
<p>In this case it is set to <code>x</code> (i.e. horizontal axis) to provide the filler along a row,
|
||||
rather than a column.</p>
|
||||
|
||||
<p>For the full range of options and syntax for <code>mode</code> please refer to the <a href=
|
||||
"//datatables.net/extras/autofill/options">AutoFill documentation</a>.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
mode: 'x'
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li class="active"><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
66
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/index.html
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
|
||||
<title>AutoFill examples - AutoFill examples</title>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>AutoFill examples</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in
|
||||
information over the selected cells and incrementing numbers as needed.</p>
|
||||
|
||||
<p>Thanks to <a href="http://www.phoniax.no/">Phoniax AS</a> for their sponsorship of this plug-in for
|
||||
DataTables.</p>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
638
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/scrolling.html
vendored
Normal file
@@ -0,0 +1,638 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Scrolling DataTable</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').dataTable( {
|
||||
scrollY: 200,
|
||||
scrollCollapse: false,
|
||||
paginate: false
|
||||
} );
|
||||
|
||||
new $.fn.dataTable.AutoFill( table );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Scrolling DataTable</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>When dragging an AutoFill handle, the table (if DataTables scrolling is enabled) or the window will
|
||||
be automatically scrolled, as you approach the edge of the scrolling component. The example below shows
|
||||
the effect with DataTables scrolling (and also window if needed).</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').dataTable( {
|
||||
scrollY: 200,
|
||||
scrollCollapse: false,
|
||||
paginate: false
|
||||
} );
|
||||
|
||||
new $.fn.dataTable.AutoFill( table );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li class="active"><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
631
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/simple.html
vendored
Normal file
@@ -0,0 +1,631 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Basic initialisation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
new $.fn.dataTable.AutoFill( table );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Basic initialisation</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in
|
||||
information over the selected cells and incrementing numbers as needed.</p>
|
||||
|
||||
<p>AutoFill is initialised using the <code>$.fn.dataTable.AutoFill</code> function as shown in the
|
||||
example below. It requires one parameter, the DataTable instance that AutoFill is to operate on, and
|
||||
optionally a second configuration parameter, which is shown in the other AutoFill examples.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
new $.fn.dataTable.AutoFill( table );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li class="active"><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
660
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/examples/step-callback.html
vendored
Normal file
@@ -0,0 +1,660 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>AutoFill example - Step callback</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.autoFill.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.autoFill.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
columnDefs: [ {
|
||||
targets: -1,
|
||||
step: function ( cell, read, last, i, x, y ) {
|
||||
var val = parseInt( (last || read).replace(/[$,]/g, ''), 10 );
|
||||
val += (x<0 || y<0 ? -100 : 100); // - if going back up, + if going down
|
||||
|
||||
// Format for the currency column
|
||||
return '$'+val.toString().replace( /\B(?=(\d{3})+(?!\d))/g, ',' );
|
||||
}
|
||||
} ]
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>AutoFill example <span>Step callback</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>By default, AutoFill will increment cells that contain numbers by a single digit for each cell that
|
||||
is iterated over (try the <em>Age</em> column below for example). This behaviour can be disabled
|
||||
completely using the <code>increment</code> column option, but it can also be modified to suit your
|
||||
requirements through use of the <code>step</code> column callback function.</p>
|
||||
|
||||
<p>The <code>step</code> callback is executed for each cell in the auto-fill set and gives complete
|
||||
control over how data is incremented. The example below shows the step function being used on the
|
||||
<em>Salary</em> column to increment by 100, rather than 1 for each cell.</p>
|
||||
|
||||
<p>For a complete description of the <code>step</code> callback, please refer to the <a href=
|
||||
"//datatables.net/extras/autofill/options">AutoFill documentation</a>.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.AutoFill( table, {
|
||||
columnDefs: [ {
|
||||
targets: -1,
|
||||
step: function ( cell, read, last, i, x, y ) {
|
||||
var val = parseInt( (last || read).replace(/[$,]/g, ''), 10 );
|
||||
val += (x<0 || y<0 ? -100 : 100); // - if going back up, + if going down
|
||||
|
||||
// Format for the currency column
|
||||
return '$'+val.toString().replace( /\B(?=(\d{3})+(?!\d))/g, ',' );
|
||||
}
|
||||
} ]
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.autoFill.js">../js/dataTables.autoFill.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.autoFill.css">../css/dataTables.autoFill.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./columns.html">Column options</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling DataTable</a></li>
|
||||
<li><a href="./fill-both.html">Horizontal and vertical fill</a></li>
|
||||
<li><a href="./fill-horizontal.html">Horizontal fill</a></li>
|
||||
<li><a href="./complete-callback.html">Complete callback</a></li>
|
||||
<li class="active"><a href="./step-callback.html">Step callback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
BIN
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/images/filler.png
vendored
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
855
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/js/dataTables.autoFill.js
vendored
Normal file
@@ -0,0 +1,855 @@
|
||||
/*! AutoFill 1.2.1
|
||||
* ©2008-2014 SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
|
||||
/**
|
||||
* @summary AutoFill
|
||||
* @description Add Excel like click and drag auto-fill options to DataTables
|
||||
* @version 1.2.1
|
||||
* @file dataTables.autoFill.js
|
||||
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
||||
* @contact www.sprymedia.co.uk/contact
|
||||
* @copyright Copyright 2010-2014 SpryMedia Ltd.
|
||||
*
|
||||
* This source file is free software, available under the following license:
|
||||
* MIT license - http://datatables.net/license/mit
|
||||
*
|
||||
* This source file is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
|
||||
*
|
||||
* For details please refer to: http://www.datatables.net
|
||||
*/
|
||||
|
||||
(function( window, document, undefined ) {
|
||||
|
||||
var factory = function( $, DataTable ) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* AutoFill provides Excel like auto-fill features for a DataTable
|
||||
*
|
||||
* @class AutoFill
|
||||
* @constructor
|
||||
* @param {object} oTD DataTables settings object
|
||||
* @param {object} oConfig Configuration object for AutoFill
|
||||
*/
|
||||
var AutoFill = function( oDT, oConfig )
|
||||
{
|
||||
/* Sanity check that we are a new instance */
|
||||
if ( ! (this instanceof AutoFill) ) {
|
||||
throw( "Warning: AutoFill must be initialised with the keyword 'new'" );
|
||||
}
|
||||
|
||||
if ( ! $.fn.dataTableExt.fnVersionCheck('1.7.0') ) {
|
||||
throw( "Warning: AutoFill requires DataTables 1.7 or greater");
|
||||
}
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Public class variables
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
this.c = {};
|
||||
|
||||
/**
|
||||
* @namespace Settings object which contains customisable information for AutoFill instance
|
||||
*/
|
||||
this.s = {
|
||||
/**
|
||||
* @namespace Cached information about the little dragging icon (the filler)
|
||||
*/
|
||||
"filler": {
|
||||
"height": 0,
|
||||
"width": 0
|
||||
},
|
||||
|
||||
/**
|
||||
* @namespace Cached information about the border display
|
||||
*/
|
||||
"border": {
|
||||
"width": 2
|
||||
},
|
||||
|
||||
/**
|
||||
* @namespace Store for live information for the current drag
|
||||
*/
|
||||
"drag": {
|
||||
"startX": -1,
|
||||
"startY": -1,
|
||||
"startTd": null,
|
||||
"endTd": null,
|
||||
"dragging": false
|
||||
},
|
||||
|
||||
/**
|
||||
* @namespace Data cache for information that we need for scrolling the screen when we near
|
||||
* the edges
|
||||
*/
|
||||
"screen": {
|
||||
"interval": null,
|
||||
"y": 0,
|
||||
"height": 0,
|
||||
"scrollTop": 0
|
||||
},
|
||||
|
||||
/**
|
||||
* @namespace Data cache for the position of the DataTables scrolling element (when scrolling
|
||||
* is enabled)
|
||||
*/
|
||||
"scroller": {
|
||||
"top": 0,
|
||||
"bottom": 0
|
||||
},
|
||||
|
||||
/**
|
||||
* @namespace Information stored for each column. An array of objects
|
||||
*/
|
||||
"columns": []
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @namespace Common and useful DOM elements for the class instance
|
||||
*/
|
||||
this.dom = {
|
||||
"table": null,
|
||||
"filler": null,
|
||||
"borderTop": null,
|
||||
"borderRight": null,
|
||||
"borderBottom": null,
|
||||
"borderLeft": null,
|
||||
"currentTarget": null
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Public class methods
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/**
|
||||
* Retreieve the settings object from an instance
|
||||
* @method fnSettings
|
||||
* @returns {object} AutoFill settings object
|
||||
*/
|
||||
this.fnSettings = function () {
|
||||
return this.s;
|
||||
};
|
||||
|
||||
|
||||
/* Constructor logic */
|
||||
this._fnInit( oDT, oConfig );
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
|
||||
AutoFill.prototype = {
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Private methods (they are of course public in JS, but recommended as private)
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/**
|
||||
* Initialisation
|
||||
* @method _fnInit
|
||||
* @param {object} dt DataTables settings object
|
||||
* @param {object} config Configuration object for AutoFill
|
||||
* @returns void
|
||||
*/
|
||||
"_fnInit": function ( dt, config )
|
||||
{
|
||||
var
|
||||
that = this,
|
||||
i, iLen;
|
||||
|
||||
// Use DataTables API to get the settings allowing selectors, instances
|
||||
// etc to be used, or for backwards compatibility get from the old
|
||||
// fnSettings method
|
||||
this.s.dt = DataTable.Api ?
|
||||
new DataTable.Api( dt ).settings()[0] :
|
||||
dt.fnSettings();
|
||||
this.s.init = config || {};
|
||||
this.dom.table = this.s.dt.nTable;
|
||||
|
||||
$.extend( true, this.c, AutoFill.defaults, config );
|
||||
|
||||
/* Add and configure the columns */
|
||||
this._initColumns();
|
||||
|
||||
/* Auto Fill click and drag icon */
|
||||
var filler = $('<div/>', {
|
||||
'class': 'AutoFill_filler'
|
||||
} )
|
||||
.appendTo( 'body' );
|
||||
this.dom.filler = filler[0];
|
||||
|
||||
// Get the height / width of the click element
|
||||
this.s.filler.height = filler.height();
|
||||
this.s.filler.width = filler.width();
|
||||
filler[0].style.display = "none";
|
||||
|
||||
/* Border display - one div for each side. We can't just use a single
|
||||
* one with a border, as we want the events to effectively pass through
|
||||
* the transparent bit of the box
|
||||
*/
|
||||
var border;
|
||||
var appender = document.body;
|
||||
if ( that.s.dt.oScroll.sY !== "" ) {
|
||||
that.s.dt.nTable.parentNode.style.position = "relative";
|
||||
appender = that.s.dt.nTable.parentNode;
|
||||
}
|
||||
|
||||
border = $('<div/>', {
|
||||
"class": "AutoFill_border"
|
||||
} );
|
||||
this.dom.borderTop = border.clone().appendTo( appender )[0];
|
||||
this.dom.borderRight = border.clone().appendTo( appender )[0];
|
||||
this.dom.borderBottom = border.clone().appendTo( appender )[0];
|
||||
this.dom.borderLeft = border.clone().appendTo( appender )[0];
|
||||
|
||||
/* Events */
|
||||
filler.on( 'mousedown.DTAF', function (e) {
|
||||
this.onselectstart = function() { return false; };
|
||||
that._fnFillerDragStart.call( that, e );
|
||||
return false;
|
||||
} );
|
||||
|
||||
$('tbody', this.dom.table).on(
|
||||
'mouseover.DTAF mouseout.DTAF',
|
||||
'>tr>td, >tr>th',
|
||||
function (e) {
|
||||
that._fnFillerDisplay.call( that, e );
|
||||
}
|
||||
);
|
||||
|
||||
$(this.dom.table).on( 'destroy.dt.DTAF', function () {
|
||||
filler.off( 'mousedown.DTAF' ).remove();
|
||||
$('tbody', this.dom.table).off( 'mouseover.DTAF mouseout.DTAF' );
|
||||
} );
|
||||
},
|
||||
|
||||
|
||||
_initColumns: function ( )
|
||||
{
|
||||
var that = this;
|
||||
var i, ien;
|
||||
var dt = this.s.dt;
|
||||
var config = this.s.init;
|
||||
|
||||
for ( i=0, ien=dt.aoColumns.length ; i<ien ; i++ ) {
|
||||
this.s.columns[i] = $.extend( true, {}, AutoFill.defaults.column );
|
||||
}
|
||||
|
||||
dt.oApi._fnApplyColumnDefs(
|
||||
dt,
|
||||
config.aoColumnDefs || config.columnDefs,
|
||||
config.aoColumns || config.columns,
|
||||
function (colIdx, def) {
|
||||
that._fnColumnOptions( colIdx, def );
|
||||
}
|
||||
);
|
||||
|
||||
// For columns which don't have read, write, step functions defined,
|
||||
// use the default ones
|
||||
for ( i=0, ien=dt.aoColumns.length ; i<ien ; i++ ) {
|
||||
var column = this.s.columns[i];
|
||||
|
||||
if ( ! column.read ) {
|
||||
column.read = this._fnReadCell;
|
||||
}
|
||||
if ( ! column.write ) {
|
||||
column.read = this._fnWriteCell;
|
||||
}
|
||||
if ( ! column.step ) {
|
||||
column.read = this._fnStep;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"_fnColumnOptions": function ( i, opts )
|
||||
{
|
||||
var column = this.s.columns[ i ];
|
||||
var set = function ( outProp, inProp ) {
|
||||
if ( opts[ inProp[0] ] !== undefined ) {
|
||||
column[ outProp ] = opts[ inProp[0] ];
|
||||
}
|
||||
if ( opts[ inProp[1] ] !== undefined ) {
|
||||
column[ outProp ] = opts[ inProp[1] ];
|
||||
}
|
||||
};
|
||||
|
||||
// Compatibility with the old Hungarian style of notation
|
||||
set( 'enable', ['bEnable', 'enable'] );
|
||||
set( 'read', ['fnRead', 'read'] );
|
||||
set( 'write', ['fnWrite', 'write'] );
|
||||
set( 'step', ['fnStep', 'step'] );
|
||||
set( 'increment', ['bIncrement', 'increment'] );
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Find out the coordinates of a given TD cell in a table
|
||||
* @method _fnTargetCoords
|
||||
* @param {Node} nTd
|
||||
* @returns {Object} x and y properties, for the position of the cell in the tables DOM
|
||||
*/
|
||||
"_fnTargetCoords": function ( nTd )
|
||||
{
|
||||
var nTr = $(nTd).parents('tr')[0];
|
||||
var position = this.s.dt.oInstance.fnGetPosition( nTd );
|
||||
|
||||
return {
|
||||
"x": $('td', nTr).index(nTd),
|
||||
"y": $('tr', nTr.parentNode).index(nTr),
|
||||
"row": position[0],
|
||||
"column": position[2]
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Display the border around one or more cells (from start to end)
|
||||
* @method _fnUpdateBorder
|
||||
* @param {Node} nStart Starting cell
|
||||
* @param {Node} nEnd Ending cell
|
||||
* @returns void
|
||||
*/
|
||||
"_fnUpdateBorder": function ( nStart, nEnd )
|
||||
{
|
||||
var
|
||||
border = this.s.border.width,
|
||||
offsetStart = $(nStart).offset(),
|
||||
offsetEnd = $(nEnd).offset(),
|
||||
x1 = offsetStart.left - border,
|
||||
x2 = offsetEnd.left + $(nEnd).outerWidth(),
|
||||
y1 = offsetStart.top - border,
|
||||
y2 = offsetEnd.top + $(nEnd).outerHeight(),
|
||||
width = offsetEnd.left + $(nEnd).outerWidth() - offsetStart.left + (2*border),
|
||||
height = offsetEnd.top + $(nEnd).outerHeight() - offsetStart.top + (2*border),
|
||||
oStyle;
|
||||
|
||||
// Recalculate start and end (when dragging "backwards")
|
||||
if( offsetStart.left > offsetEnd.left) {
|
||||
x1 = offsetEnd.left - border;
|
||||
x2 = offsetStart.left + $(nStart).outerWidth();
|
||||
width = offsetStart.left + $(nStart).outerWidth() - offsetEnd.left + (2*border);
|
||||
}
|
||||
|
||||
if ( this.s.dt.oScroll.sY !== "" )
|
||||
{
|
||||
/* The border elements are inside the DT scroller - so position relative to that */
|
||||
var
|
||||
offsetScroll = $(this.s.dt.nTable.parentNode).offset(),
|
||||
scrollTop = $(this.s.dt.nTable.parentNode).scrollTop(),
|
||||
scrollLeft = $(this.s.dt.nTable.parentNode).scrollLeft();
|
||||
|
||||
x1 -= offsetScroll.left - scrollLeft;
|
||||
x2 -= offsetScroll.left - scrollLeft;
|
||||
y1 -= offsetScroll.top - scrollTop;
|
||||
y2 -= offsetScroll.top - scrollTop;
|
||||
}
|
||||
|
||||
/* Top */
|
||||
oStyle = this.dom.borderTop.style;
|
||||
oStyle.top = y1+"px";
|
||||
oStyle.left = x1+"px";
|
||||
oStyle.height = this.s.border.width+"px";
|
||||
oStyle.width = width+"px";
|
||||
|
||||
/* Bottom */
|
||||
oStyle = this.dom.borderBottom.style;
|
||||
oStyle.top = y2+"px";
|
||||
oStyle.left = x1+"px";
|
||||
oStyle.height = this.s.border.width+"px";
|
||||
oStyle.width = width+"px";
|
||||
|
||||
/* Left */
|
||||
oStyle = this.dom.borderLeft.style;
|
||||
oStyle.top = y1+"px";
|
||||
oStyle.left = x1+"px";
|
||||
oStyle.height = height+"px";
|
||||
oStyle.width = this.s.border.width+"px";
|
||||
|
||||
/* Right */
|
||||
oStyle = this.dom.borderRight.style;
|
||||
oStyle.top = y1+"px";
|
||||
oStyle.left = x2+"px";
|
||||
oStyle.height = height+"px";
|
||||
oStyle.width = this.s.border.width+"px";
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Mouse down event handler for starting a drag
|
||||
* @method _fnFillerDragStart
|
||||
* @param {Object} e Event object
|
||||
* @returns void
|
||||
*/
|
||||
"_fnFillerDragStart": function (e)
|
||||
{
|
||||
var that = this;
|
||||
var startingTd = this.dom.currentTarget;
|
||||
|
||||
this.s.drag.dragging = true;
|
||||
|
||||
that.dom.borderTop.style.display = "block";
|
||||
that.dom.borderRight.style.display = "block";
|
||||
that.dom.borderBottom.style.display = "block";
|
||||
that.dom.borderLeft.style.display = "block";
|
||||
|
||||
var coords = this._fnTargetCoords( startingTd );
|
||||
this.s.drag.startX = coords.x;
|
||||
this.s.drag.startY = coords.y;
|
||||
|
||||
this.s.drag.startTd = startingTd;
|
||||
this.s.drag.endTd = startingTd;
|
||||
|
||||
this._fnUpdateBorder( startingTd, startingTd );
|
||||
|
||||
$(document).bind('mousemove.AutoFill', function (e) {
|
||||
that._fnFillerDragMove.call( that, e );
|
||||
} );
|
||||
|
||||
$(document).bind('mouseup.AutoFill', function (e) {
|
||||
that._fnFillerFinish.call( that, e );
|
||||
} );
|
||||
|
||||
/* Scrolling information cache */
|
||||
this.s.screen.y = e.pageY;
|
||||
this.s.screen.height = $(window).height();
|
||||
this.s.screen.scrollTop = $(document).scrollTop();
|
||||
|
||||
if ( this.s.dt.oScroll.sY !== "" )
|
||||
{
|
||||
this.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top;
|
||||
this.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height();
|
||||
}
|
||||
|
||||
/* Scrolling handler - we set an interval (which is cancelled on mouse up) which will fire
|
||||
* regularly and see if we need to do any scrolling
|
||||
*/
|
||||
this.s.screen.interval = setInterval( function () {
|
||||
var iScrollTop = $(document).scrollTop();
|
||||
var iScrollDelta = iScrollTop - that.s.screen.scrollTop;
|
||||
that.s.screen.y += iScrollDelta;
|
||||
|
||||
if ( that.s.screen.height - that.s.screen.y + iScrollTop < 50 )
|
||||
{
|
||||
$('html, body').animate( {
|
||||
"scrollTop": iScrollTop + 50
|
||||
}, 240, 'linear' );
|
||||
}
|
||||
else if ( that.s.screen.y - iScrollTop < 50 )
|
||||
{
|
||||
$('html, body').animate( {
|
||||
"scrollTop": iScrollTop - 50
|
||||
}, 240, 'linear' );
|
||||
}
|
||||
|
||||
if ( that.s.dt.oScroll.sY !== "" )
|
||||
{
|
||||
if ( that.s.screen.y > that.s.scroller.bottom - 50 )
|
||||
{
|
||||
$(that.s.dt.nTable.parentNode).animate( {
|
||||
"scrollTop": $(that.s.dt.nTable.parentNode).scrollTop() + 50
|
||||
}, 240, 'linear' );
|
||||
}
|
||||
else if ( that.s.screen.y < that.s.scroller.top + 50 )
|
||||
{
|
||||
$(that.s.dt.nTable.parentNode).animate( {
|
||||
"scrollTop": $(that.s.dt.nTable.parentNode).scrollTop() - 50
|
||||
}, 240, 'linear' );
|
||||
}
|
||||
}
|
||||
}, 250 );
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Mouse move event handler for during a move. See if we want to update the display based on the
|
||||
* new cursor position
|
||||
* @method _fnFillerDragMove
|
||||
* @param {Object} e Event object
|
||||
* @returns void
|
||||
*/
|
||||
"_fnFillerDragMove": function (e)
|
||||
{
|
||||
if ( e.target && e.target.nodeName.toUpperCase() == "TD" &&
|
||||
e.target != this.s.drag.endTd )
|
||||
{
|
||||
var coords = this._fnTargetCoords( e.target );
|
||||
|
||||
if ( this.c.mode == "y" && coords.x != this.s.drag.startX )
|
||||
{
|
||||
e.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0];
|
||||
}
|
||||
if ( this.c.mode == "x" && coords.y != this.s.drag.startY )
|
||||
{
|
||||
e.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0];
|
||||
}
|
||||
|
||||
if ( this.c.mode == "either")
|
||||
{
|
||||
if(coords.x != this.s.drag.startX )
|
||||
{
|
||||
e.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0];
|
||||
}
|
||||
else if ( coords.y != this.s.drag.startY ) {
|
||||
e.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0];
|
||||
}
|
||||
}
|
||||
|
||||
// update coords
|
||||
if ( this.c.mode !== "both" ) {
|
||||
coords = this._fnTargetCoords( e.target );
|
||||
}
|
||||
|
||||
var drag = this.s.drag;
|
||||
drag.endTd = e.target;
|
||||
|
||||
if ( coords.y >= this.s.drag.startY ) {
|
||||
this._fnUpdateBorder( drag.startTd, drag.endTd );
|
||||
}
|
||||
else {
|
||||
this._fnUpdateBorder( drag.endTd, drag.startTd );
|
||||
}
|
||||
this._fnFillerPosition( e.target );
|
||||
}
|
||||
|
||||
/* Update the screen information so we can perform scrolling */
|
||||
this.s.screen.y = e.pageY;
|
||||
this.s.screen.scrollTop = $(document).scrollTop();
|
||||
|
||||
if ( this.s.dt.oScroll.sY !== "" )
|
||||
{
|
||||
this.s.scroller.scrollTop = $(this.s.dt.nTable.parentNode).scrollTop();
|
||||
this.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top;
|
||||
this.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height();
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Mouse release handler - end the drag and take action to update the cells with the needed values
|
||||
* @method _fnFillerFinish
|
||||
* @param {Object} e Event object
|
||||
* @returns void
|
||||
*/
|
||||
"_fnFillerFinish": function (e)
|
||||
{
|
||||
var that = this, i, iLen, j;
|
||||
|
||||
$(document).unbind('mousemove.AutoFill mouseup.AutoFill');
|
||||
|
||||
this.dom.borderTop.style.display = "none";
|
||||
this.dom.borderRight.style.display = "none";
|
||||
this.dom.borderBottom.style.display = "none";
|
||||
this.dom.borderLeft.style.display = "none";
|
||||
|
||||
this.s.drag.dragging = false;
|
||||
|
||||
clearInterval( this.s.screen.interval );
|
||||
|
||||
var cells = [];
|
||||
var table = this.dom.table;
|
||||
var coordsStart = this._fnTargetCoords( this.s.drag.startTd );
|
||||
var coordsEnd = this._fnTargetCoords( this.s.drag.endTd );
|
||||
var columnIndex = function ( visIdx ) {
|
||||
return that.s.dt.oApi._fnVisibleToColumnIndex( that.s.dt, visIdx );
|
||||
};
|
||||
|
||||
// xxx - urgh - there must be a way of reducing this...
|
||||
if ( coordsStart.y <= coordsEnd.y ) {
|
||||
for ( i=coordsStart.y ; i<=coordsEnd.y ; i++ ) {
|
||||
if ( coordsStart.x <= coordsEnd.x ) {
|
||||
for ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) {
|
||||
cells.push( {
|
||||
node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],
|
||||
x: j - coordsStart.x,
|
||||
y: i - coordsStart.y,
|
||||
colIdx: columnIndex( j )
|
||||
} );
|
||||
}
|
||||
}
|
||||
else {
|
||||
for ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) {
|
||||
cells.push( {
|
||||
node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],
|
||||
x: j - coordsStart.x,
|
||||
y: i - coordsStart.y,
|
||||
colIdx: columnIndex( j )
|
||||
} );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for ( i=coordsStart.y ; i>=coordsEnd.y ; i-- ) {
|
||||
if ( coordsStart.x <= coordsEnd.x ) {
|
||||
for ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) {
|
||||
cells.push( {
|
||||
node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],
|
||||
x: j - coordsStart.x,
|
||||
y: i - coordsStart.y,
|
||||
colIdx: columnIndex( j )
|
||||
} );
|
||||
}
|
||||
}
|
||||
else {
|
||||
for ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) {
|
||||
cells.push( {
|
||||
node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0],
|
||||
x: coordsStart.x - j,
|
||||
y: coordsStart.y - i,
|
||||
colIdx: columnIndex( j )
|
||||
} );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// An auto-fill requires 2 or more cells
|
||||
if ( cells.length <= 1 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var edited = [];
|
||||
var previous;
|
||||
|
||||
for ( i=0, iLen=cells.length ; i<iLen ; i++ ) {
|
||||
var cell = cells[i];
|
||||
var column = this.s.columns[ cell.colIdx ];
|
||||
var read = column.read.call( column, cell.node );
|
||||
var stepValue = column.step.call( column, cell.node, read, previous, i, cell.x, cell.y );
|
||||
|
||||
column.write.call( column, cell.node, stepValue );
|
||||
|
||||
previous = stepValue;
|
||||
edited.push( {
|
||||
cell: cell,
|
||||
colIdx: cell.colIdx,
|
||||
newValue: stepValue,
|
||||
oldValue: read
|
||||
} );
|
||||
}
|
||||
|
||||
if ( this.c.complete !== null ) {
|
||||
this.c.complete.call( this, edited );
|
||||
}
|
||||
|
||||
// In 1.10 we can do a static draw
|
||||
if ( DataTable.Api ) {
|
||||
new DataTable.Api( this.s.dt ).draw( false );
|
||||
}
|
||||
else {
|
||||
this.s.dt.oInstance.fnDraw();
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Display the drag handle on mouse over cell
|
||||
* @method _fnFillerDisplay
|
||||
* @param {Object} e Event object
|
||||
* @returns void
|
||||
*/
|
||||
"_fnFillerDisplay": function (e)
|
||||
{
|
||||
var filler = this.dom.filler;
|
||||
|
||||
/* Don't display automatically when dragging */
|
||||
if ( this.s.drag.dragging)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check that we are allowed to AutoFill this column or not */
|
||||
var nTd = (e.target.nodeName.toLowerCase() == 'td') ? e.target : $(e.target).parents('td')[0];
|
||||
var iX = this._fnTargetCoords(nTd).column;
|
||||
if ( !this.s.columns[iX].enable )
|
||||
{
|
||||
filler.style.display = "none";
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.type == 'mouseover')
|
||||
{
|
||||
this.dom.currentTarget = nTd;
|
||||
this._fnFillerPosition( nTd );
|
||||
|
||||
filler.style.display = "block";
|
||||
}
|
||||
else if ( !e.relatedTarget || !e.relatedTarget.className.match(/AutoFill/) )
|
||||
{
|
||||
filler.style.display = "none";
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Position the filler icon over a cell
|
||||
* @method _fnFillerPosition
|
||||
* @param {Node} nTd Cell to position filler icon over
|
||||
* @returns void
|
||||
*/
|
||||
"_fnFillerPosition": function ( nTd )
|
||||
{
|
||||
var offset = $(nTd).offset();
|
||||
var filler = this.dom.filler;
|
||||
filler.style.top = (offset.top - (this.s.filler.height / 2)-1 + $(nTd).outerHeight())+"px";
|
||||
filler.style.left = (offset.left - (this.s.filler.width / 2)-1 + $(nTd).outerWidth())+"px";
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Alias for access
|
||||
DataTable.AutoFill = AutoFill;
|
||||
DataTable.AutoFill = AutoFill;
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Constants
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/**
|
||||
* AutoFill version
|
||||
* @constant version
|
||||
* @type String
|
||||
* @default See code
|
||||
*/
|
||||
AutoFill.version = "1.2.1";
|
||||
|
||||
|
||||
/**
|
||||
* AutoFill defaults
|
||||
* @namespace
|
||||
*/
|
||||
AutoFill.defaults = {
|
||||
/**
|
||||
* Mode for dragging (restrict to y-axis only, x-axis only, either one or none):
|
||||
*
|
||||
* * `y` - y-axis only (default)
|
||||
* * `x` - x-axis only
|
||||
* * `either` - either one, but not both axis at the same time
|
||||
* * `both` - multiple cells allowed
|
||||
*
|
||||
* @type {string}
|
||||
* @default `y`
|
||||
*/
|
||||
mode: 'y',
|
||||
|
||||
complete: null,
|
||||
|
||||
/**
|
||||
* Column definition defaults
|
||||
* @namespace
|
||||
*/
|
||||
column: {
|
||||
/**
|
||||
* If AutoFill should be enabled on this column
|
||||
*
|
||||
* @type {boolean}
|
||||
* @default true
|
||||
*/
|
||||
enable: true,
|
||||
|
||||
/**
|
||||
* Allow automatic increment / decrement on this column if a number
|
||||
* is found.
|
||||
*
|
||||
* @type {boolean}
|
||||
* @default true
|
||||
*/
|
||||
increment: true,
|
||||
|
||||
/**
|
||||
* Cell read function
|
||||
*
|
||||
* Default function will simply read the value from the HTML of the
|
||||
* cell.
|
||||
*
|
||||
* @type {function}
|
||||
* @param {node} cell `th` / `td` element to read the value from
|
||||
* @return {string} Data that has been read
|
||||
*/
|
||||
read: function ( cell ) {
|
||||
return $(cell).html();
|
||||
},
|
||||
|
||||
/**
|
||||
* Cell write function
|
||||
*
|
||||
* Default function will simply write to the HTML and tell the DataTable
|
||||
* to update.
|
||||
*
|
||||
* @type {function}
|
||||
* @param {node} cell `th` / `td` element to write the value to
|
||||
* @return {string} Data two write
|
||||
*/
|
||||
write: function ( cell, val ) {
|
||||
var table = $(cell).parents('table');
|
||||
if ( DataTable.Api ) {
|
||||
// 1.10
|
||||
table.DataTable().cell( cell ).data( val );
|
||||
}
|
||||
else {
|
||||
// 1.9
|
||||
var dt = table.dataTable();
|
||||
var pos = dt.fnGetPosition( cell );
|
||||
dt.fnUpdate( val, pos[0], pos[2], false );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Step function. This provides the ability to customise how the values
|
||||
* are incremented.
|
||||
*
|
||||
* @param {node} cell `th` / `td` element that is being operated upon
|
||||
* @param {string} read Cell value from `read` function
|
||||
* @param {string} last Value of the previous cell
|
||||
* @param {integer} i Loop counter
|
||||
* @param {integer} x Cell x-position in the current auto-fill. The
|
||||
* starting cell is coordinate 0 regardless of its physical position
|
||||
* in the DataTable.
|
||||
* @param {integer} y Cell y-position in the current auto-fill. The
|
||||
* starting cell is coordinate 0 regardless of its physical position
|
||||
* in the DataTable.
|
||||
* @return {string} Value to write
|
||||
*/
|
||||
step: function ( cell, read, last, i, x, y ) {
|
||||
// Increment a number if it is found
|
||||
var re = /(\-?\d+)/;
|
||||
var match = this.increment && last ? last.match(re) : null;
|
||||
if ( match ) {
|
||||
return last.replace( re, parseInt(match[1],10) + (x<0 || y<0 ? -1 : 1) );
|
||||
}
|
||||
return last === undefined ?
|
||||
read :
|
||||
last;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return AutoFill;
|
||||
};
|
||||
|
||||
|
||||
// Define as an AMD module if possible
|
||||
if ( typeof define === 'function' && define.amd ) {
|
||||
define( ['jquery', 'datatables'], factory );
|
||||
}
|
||||
else if ( typeof exports === 'object' ) {
|
||||
// Node/CommonJS
|
||||
factory( require('jquery'), require('datatables') );
|
||||
}
|
||||
else if ( jQuery && !jQuery.fn.dataTable.AutoFill ) {
|
||||
// Otherwise simply initialise as normal, stopping multiple evaluation
|
||||
factory( jQuery, jQuery.fn.dataTable );
|
||||
}
|
||||
|
||||
|
||||
}(window, document));
|
||||
|
||||
22
libraries/framework/vendor/plugins/datatables/extensions/AutoFill/js/dataTables.autoFill.min.js
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/*!
|
||||
AutoFill 1.2.1
|
||||
©2008-2014 SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
(function(o,j,m){var l=function(c,k){var h=function(d,b){if(!(this instanceof h))throw"Warning: AutoFill must be initialised with the keyword 'new'";if(!c.fn.dataTableExt.fnVersionCheck("1.7.0"))throw"Warning: AutoFill requires DataTables 1.7 or greater";this.c={};this.s={filler:{height:0,width:0},border:{width:2},drag:{startX:-1,startY:-1,startTd:null,endTd:null,dragging:!1},screen:{interval:null,y:0,height:0,scrollTop:0},scroller:{top:0,bottom:0},columns:[]};this.dom={table:null,filler:null,borderTop:null,
|
||||
borderRight:null,borderBottom:null,borderLeft:null,currentTarget:null};this.fnSettings=function(){return this.s};this._fnInit(d,b);return this};h.prototype={_fnInit:function(d,b){var a=this;this.s.dt=k.Api?(new k.Api(d)).settings()[0]:d.fnSettings();this.s.init=b||{};this.dom.table=this.s.dt.nTable;c.extend(!0,this.c,h.defaults,b);this._initColumns();var e=c("<div/>",{"class":"AutoFill_filler"}).appendTo("body");this.dom.filler=e[0];this.s.filler.height=e.height();this.s.filler.width=e.width();e[0].style.display=
|
||||
"none";var g,f=j.body;""!==a.s.dt.oScroll.sY&&(a.s.dt.nTable.parentNode.style.position="relative",f=a.s.dt.nTable.parentNode);g=c("<div/>",{"class":"AutoFill_border"});this.dom.borderTop=g.clone().appendTo(f)[0];this.dom.borderRight=g.clone().appendTo(f)[0];this.dom.borderBottom=g.clone().appendTo(f)[0];this.dom.borderLeft=g.clone().appendTo(f)[0];e.on("mousedown.DTAF",function(b){this.onselectstart=function(){return false};a._fnFillerDragStart.call(a,b);return false});c("tbody",this.dom.table).on("mouseover.DTAF mouseout.DTAF",
|
||||
">tr>td, >tr>th",function(b){a._fnFillerDisplay.call(a,b)});c(this.dom.table).on("destroy.dt.DTAF",function(){e.off("mousedown.DTAF").remove();c("tbody",this.dom.table).off("mouseover.DTAF mouseout.DTAF")})},_initColumns:function(){var d=this,b,a,e=this.s.dt,g=this.s.init;b=0;for(a=e.aoColumns.length;b<a;b++)this.s.columns[b]=c.extend(!0,{},h.defaults.column);e.oApi._fnApplyColumnDefs(e,g.aoColumnDefs||g.columnDefs,g.aoColumns||g.columns,function(a,b){d._fnColumnOptions(a,b)});b=0;for(a=e.aoColumns.length;b<
|
||||
a;b++)if(e=this.s.columns[b],e.read||(e.read=this._fnReadCell),e.write||(e.read=this._fnWriteCell),!e.step)e.read=this._fnStep},_fnColumnOptions:function(d,b){var a=this.s.columns[d],c=function(c,d){b[d[0]]!==m&&(a[c]=b[d[0]]);b[d[1]]!==m&&(a[c]=b[d[1]])};c("enable",["bEnable","enable"]);c("read",["fnRead","read"]);c("write",["fnWrite","write"]);c("step",["fnStep","step"]);c("increment",["bIncrement","increment"])},_fnTargetCoords:function(d){var b=c(d).parents("tr")[0],a=this.s.dt.oInstance.fnGetPosition(d);
|
||||
return{x:c("td",b).index(d),y:c("tr",b.parentNode).index(b),row:a[0],column:a[2]}},_fnUpdateBorder:function(d,b){var a=this.s.border.width,e=c(d).offset(),g=c(b).offset(),f=e.left-a,i=g.left+c(b).outerWidth(),n=e.top-a,h=g.top+c(b).outerHeight(),j=g.left+c(b).outerWidth()-e.left+2*a,k=g.top+c(b).outerHeight()-e.top+2*a;e.left>g.left&&(f=g.left-a,i=e.left+c(d).outerWidth(),j=e.left+c(d).outerWidth()-g.left+2*a);""!==this.s.dt.oScroll.sY&&(a=c(this.s.dt.nTable.parentNode).offset(),e=c(this.s.dt.nTable.parentNode).scrollTop(),
|
||||
g=c(this.s.dt.nTable.parentNode).scrollLeft(),f-=a.left-g,i-=a.left-g,n-=a.top-e,h-=a.top-e);a=this.dom.borderTop.style;a.top=n+"px";a.left=f+"px";a.height=this.s.border.width+"px";a.width=j+"px";a=this.dom.borderBottom.style;a.top=h+"px";a.left=f+"px";a.height=this.s.border.width+"px";a.width=j+"px";a=this.dom.borderLeft.style;a.top=n+"px";a.left=f+"px";a.height=k+"px";a.width=this.s.border.width+"px";a=this.dom.borderRight.style;a.top=n+"px";a.left=i+"px";a.height=k+"px";a.width=this.s.border.width+
|
||||
"px"},_fnFillerDragStart:function(d){var b=this,a=this.dom.currentTarget;this.s.drag.dragging=!0;b.dom.borderTop.style.display="block";b.dom.borderRight.style.display="block";b.dom.borderBottom.style.display="block";b.dom.borderLeft.style.display="block";var e=this._fnTargetCoords(a);this.s.drag.startX=e.x;this.s.drag.startY=e.y;this.s.drag.startTd=a;this.s.drag.endTd=a;this._fnUpdateBorder(a,a);c(j).bind("mousemove.AutoFill",function(a){b._fnFillerDragMove.call(b,a)});c(j).bind("mouseup.AutoFill",
|
||||
function(a){b._fnFillerFinish.call(b,a)});this.s.screen.y=d.pageY;this.s.screen.height=c(o).height();this.s.screen.scrollTop=c(j).scrollTop();""!==this.s.dt.oScroll.sY&&(this.s.scroller.top=c(this.s.dt.nTable.parentNode).offset().top,this.s.scroller.bottom=this.s.scroller.top+c(this.s.dt.nTable.parentNode).height());this.s.screen.interval=setInterval(function(){var a=c(j).scrollTop();b.s.screen.y=b.s.screen.y+(a-b.s.screen.scrollTop);b.s.screen.height-b.s.screen.y+a<50?c("html, body").animate({scrollTop:a+
|
||||
50},240,"linear"):b.s.screen.y-a<50&&c("html, body").animate({scrollTop:a-50},240,"linear");b.s.dt.oScroll.sY!==""&&(b.s.screen.y>b.s.scroller.bottom-50?c(b.s.dt.nTable.parentNode).animate({scrollTop:c(b.s.dt.nTable.parentNode).scrollTop()+50},240,"linear"):b.s.screen.y<b.s.scroller.top+50&&c(b.s.dt.nTable.parentNode).animate({scrollTop:c(b.s.dt.nTable.parentNode).scrollTop()-50},240,"linear"))},250)},_fnFillerDragMove:function(d){if(d.target&&"TD"==d.target.nodeName.toUpperCase()&&d.target!=this.s.drag.endTd){var b=
|
||||
this._fnTargetCoords(d.target);"y"==this.c.mode&&b.x!=this.s.drag.startX&&(d.target=c("tbody>tr:eq("+b.y+")>td:eq("+this.s.drag.startX+")",this.dom.table)[0]);"x"==this.c.mode&&b.y!=this.s.drag.startY&&(d.target=c("tbody>tr:eq("+this.s.drag.startY+")>td:eq("+b.x+")",this.dom.table)[0]);"either"==this.c.mode&&(b.x!=this.s.drag.startX?d.target=c("tbody>tr:eq("+this.s.drag.startY+")>td:eq("+b.x+")",this.dom.table)[0]:b.y!=this.s.drag.startY&&(d.target=c("tbody>tr:eq("+b.y+")>td:eq("+this.s.drag.startX+
|
||||
")",this.dom.table)[0]));"both"!==this.c.mode&&(b=this._fnTargetCoords(d.target));var a=this.s.drag;a.endTd=d.target;b.y>=this.s.drag.startY?this._fnUpdateBorder(a.startTd,a.endTd):this._fnUpdateBorder(a.endTd,a.startTd);this._fnFillerPosition(d.target)}this.s.screen.y=d.pageY;this.s.screen.scrollTop=c(j).scrollTop();""!==this.s.dt.oScroll.sY&&(this.s.scroller.scrollTop=c(this.s.dt.nTable.parentNode).scrollTop(),this.s.scroller.top=c(this.s.dt.nTable.parentNode).offset().top,this.s.scroller.bottom=
|
||||
this.s.scroller.top+c(this.s.dt.nTable.parentNode).height())},_fnFillerFinish:function(){var d=this,b,a;c(j).unbind("mousemove.AutoFill mouseup.AutoFill");this.dom.borderTop.style.display="none";this.dom.borderRight.style.display="none";this.dom.borderBottom.style.display="none";this.dom.borderLeft.style.display="none";this.s.drag.dragging=!1;clearInterval(this.s.screen.interval);var e=[],g=this.dom.table,f=this._fnTargetCoords(this.s.drag.startTd),i=this._fnTargetCoords(this.s.drag.endTd),h=function(a){return d.s.dt.oApi._fnVisibleToColumnIndex(d.s.dt,
|
||||
a)};if(f.y<=i.y)for(b=f.y;b<=i.y;b++)if(f.x<=i.x)for(a=f.x;a<=i.x;a++)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(a=f.x;a>=i.x;a--)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(b=f.y;b>=i.y;b--)if(f.x<=i.x)for(a=f.x;a<=i.x;a++)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(a=f.x;a>=i.x;a--)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:f.x-a,y:f.y-
|
||||
b,colIdx:h(a)});if(!(1>=e.length)){var g=[],m;b=0;for(a=e.length;b<a;b++){var f=e[b],i=this.s.columns[f.colIdx],h=i.read.call(i,f.node),l=i.step.call(i,f.node,h,m,b,f.x,f.y);i.write.call(i,f.node,l);m=l;g.push({cell:f,colIdx:f.colIdx,newValue:l,oldValue:h})}null!==this.c.complete&&this.c.complete.call(this,g);k.Api?(new k.Api(this.s.dt)).draw(!1):this.s.dt.oInstance.fnDraw()}},_fnFillerDisplay:function(d){var b=this.dom.filler;if(!this.s.drag.dragging){var a="td"==d.target.nodeName.toLowerCase()?
|
||||
d.target:c(d.target).parents("td")[0],e=this._fnTargetCoords(a).column;if(this.s.columns[e].enable)if("mouseover"==d.type)this.dom.currentTarget=a,this._fnFillerPosition(a),b.style.display="block";else{if(!d.relatedTarget||!d.relatedTarget.className.match(/AutoFill/))b.style.display="none"}else b.style.display="none"}},_fnFillerPosition:function(d){var b=c(d).offset(),a=this.dom.filler;a.style.top=b.top-this.s.filler.height/2-1+c(d).outerHeight()+"px";a.style.left=b.left-this.s.filler.width/2-1+c(d).outerWidth()+
|
||||
"px"}};k.AutoFill=h;k.AutoFill=h;h.version="1.2.1";h.defaults={mode:"y",complete:null,column:{enable:!0,increment:!0,read:function(d){return c(d).html()},write:function(d,b){var a=c(d).parents("table");if(k.Api)a.DataTable().cell(d).data(b);else{var a=a.dataTable(),e=a.fnGetPosition(d);a.fnUpdate(b,e[0],e[2],!1)}},step:function(c,b,a,e,g,f){c=/(\-?\d+)/;return(e=this.increment&&a?a.match(c):null)?a.replace(c,parseInt(e[1],10)+(0>g||0>f?-1:1)):a===m?b:a}}};return h};"function"===typeof define&&define.amd?
|
||||
define(["jquery","datatables"],l):"object"===typeof exports?l(require("jquery"),require("datatables")):jQuery&&!jQuery.fn.dataTable.AutoFill&&l(jQuery,jQuery.fn.dataTable)})(window,document);
|
||||
39
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/Readme.txt
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# ColReorder
|
||||
|
||||
ColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include:
|
||||
|
||||
* Very easy integration with DataTables
|
||||
* Tight integration with all other DataTables plug-ins
|
||||
* The ability to exclude the first (or more) column from being movable
|
||||
* Predefine a column order
|
||||
* Save staving integration with DataTables
|
||||
|
||||
|
||||
# Installation
|
||||
|
||||
To use ColReorder, first download DataTables ( http://datatables.net/download ) and place the unzipped ColReorder package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser.
|
||||
|
||||
|
||||
# Basic usage
|
||||
|
||||
ColReorder is initialised using the `R` option that it adds to DataTables' `dom` option. For example:
|
||||
|
||||
```js
|
||||
$(document).ready( function () {
|
||||
$('#example').dataTable( {
|
||||
"dom": 'Rlfrtip'
|
||||
} );
|
||||
} );
|
||||
```
|
||||
|
||||
|
||||
# Documentation / support
|
||||
|
||||
* Documentation: http://datatables.net/extensions/colreorder/
|
||||
* DataTables support forums: http://datatables.net/forums
|
||||
|
||||
|
||||
# GitHub
|
||||
|
||||
If you fancy getting involved with the development of ColReorder and help make it better, please refer to its GitHub repo: https://github.com/DataTables/ColReorder
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Namespace DTCR - "DataTables ColReorder" plug-in
|
||||
*/
|
||||
|
||||
table.DTCR_clonedTable {
|
||||
background-color: rgba(255, 255, 255, 0.7);
|
||||
z-index: 202;
|
||||
}
|
||||
|
||||
div.DTCR_pointer {
|
||||
width: 1px;
|
||||
background-color: #0259C4;
|
||||
z-index: 201;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
table.DTCR_clonedTable{background-color:rgba(255,255,255,0.7);z-index:202}div.DTCR_pointer{width:1px;background-color:#0259C4;z-index:201}
|
||||
649
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/alt_insert.html
vendored
Normal file
@@ -0,0 +1,649 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - Alternative insert styling</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
div.DTCR_pointer {
|
||||
margin-top: -15px;
|
||||
margin-left: -9px;
|
||||
width: 18px;
|
||||
background: url('../images/insert.png') no-repeat top left;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#example').DataTable( {
|
||||
dom: 'Rlfrtip'
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>Alternative insert styling</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>Using CSS it is easy to modify the insert bar to suit your web-site. This example shows how an arrow
|
||||
can be used to show the insert point rather than the straight bar used in the other examples by simply
|
||||
adding an extra CSS rule to include the image.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
$('#example').DataTable( {
|
||||
dom: 'Rlfrtip'
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;">div.DTCR_pointer {
|
||||
margin-top: -15px;
|
||||
margin-left: -9px;
|
||||
width: 18px;
|
||||
background: url('../images/insert.png') no-repeat top left;
|
||||
}</code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li class="active"><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
669
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/col_filter.html
vendored
Normal file
@@ -0,0 +1,669 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - Individual column filtering</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
// Setup - add a text input to each footer cell
|
||||
$('#example tfoot th').each( function () {
|
||||
var title = $('#example thead th').eq( $(this).index() ).text();
|
||||
$(this).html( '<input type="text" placeholder="Search '+title+'" />' );
|
||||
} );
|
||||
|
||||
// DataTable
|
||||
var table = $('#example').DataTable( {
|
||||
dom: 'Rlfrtip'
|
||||
} );
|
||||
|
||||
// Apply the filter
|
||||
$("#example tfoot input").on( 'keyup change', function () {
|
||||
table
|
||||
.column( $(this).parent().index()+':visible' )
|
||||
.search( this.value )
|
||||
.draw();
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>Individual column filtering</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>This example of how to use ColReorder shows how it can with with DataTables' ability to do
|
||||
individual column filtering. The basic example is exactly the same as the DataTables column filtering
|
||||
example, but with ColReorder also added to the table (through the <code>R</code> option for <a href=
|
||||
"//datatables.net/reference/option/dom"><code class="option" title=
|
||||
"DataTables initialisation option">dom<span>DT</span></code></a>).</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
// Setup - add a text input to each footer cell
|
||||
$('#example tfoot th').each( function () {
|
||||
var title = $('#example thead th').eq( $(this).index() ).text();
|
||||
$(this).html( '<input type="text" placeholder="Search '+title+'" />' );
|
||||
} );
|
||||
|
||||
// DataTable
|
||||
var table = $('#example').DataTable( {
|
||||
dom: 'Rlfrtip'
|
||||
} );
|
||||
|
||||
// Apply the filter
|
||||
$("#example tfoot input").on( 'keyup change', function () {
|
||||
table
|
||||
.column( $(this).parent().index()+':visible' )
|
||||
.search( this.value )
|
||||
.draw();
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li class="active"><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
649
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/colvis.html
vendored
Normal file
@@ -0,0 +1,649 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - ColVis integration</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../ColVis/css/dataTables.colVis.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../ColVis/js/dataTables.colVis.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').DataTable( {
|
||||
dom: 'RC<"clear">lfrtip',
|
||||
columnDefs: [
|
||||
{ visible: false, targets: 1 }
|
||||
]
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>ColVis integration</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>ColReorder interfaces with the <a href="//datatables.net/extensions/colvis">ColVis extension</a> for
|
||||
DataTables by updating the order of the list of columns whenever a reorder is done. This is shown in
|
||||
the example below, where one column has been initially hidden to add extra emphasis to ColVis.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').DataTable( {
|
||||
dom: 'RC<"clear">lfrtip',
|
||||
columnDefs: [
|
||||
{ visible: false, targets: 1 }
|
||||
]
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
<li><a href=
|
||||
"../../ColVis/js/dataTables.colVis.js">../../ColVis/js/dataTables.colVis.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
<li><a href=
|
||||
"../../ColVis/css/dataTables.colVis.css">../../ColVis/css/dataTables.colVis.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li class="active"><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
846
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/fixedcolumns.html
vendored
Normal file
@@ -0,0 +1,846 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - FixedColumns integration</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../FixedColumns/css/dataTables.fixedColumns.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../FixedColumns/js/dataTables.fixedColumns.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
window.table = $('#example').DataTable( {
|
||||
dom: 'Rlfrtip',
|
||||
scrollX: true,
|
||||
scrollCollapse: true,
|
||||
columnDefs: [
|
||||
{ sortable: false, targets: 0 },
|
||||
{ sortable: false, targets: -1 }
|
||||
],
|
||||
sorting: [[ 1, 'asc' ]],
|
||||
colReorder: {
|
||||
fixedColumnsLeft: 1,
|
||||
fixedColumnsRight: 1
|
||||
}
|
||||
} );
|
||||
|
||||
window.fc = new $.fn.dataTable.FixedColumns( table, {
|
||||
leftColumns: 1,
|
||||
rightColumns: 1
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>FixedColumns integration</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>While ColReorder works with the built-in scrolling options in DataTables (<a href=
|
||||
"//datatables.net/reference/option/scrollY"><code class="option" title=
|
||||
"DataTables initialisation option">scrollY<span>DT</span></code></a> and <a href=
|
||||
"//datatables.net/reference/option/scrollX"><code class="option" title=
|
||||
"DataTables initialisation option">scrollX<span>DT</span></code></a>) and also the <a href=
|
||||
"//datatables.net/extensions/fixedcolumns">FixedColumns extension</a>.</p>
|
||||
|
||||
<p>ColReorder provides the <code>fixedColumnsLeft</code> and <code>fixedColumnsRight</code> options
|
||||
which allows you disallow reordering of the fixed columns (which is required).</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display nowrap" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>First name</th>
|
||||
<th>Last name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
<th>Extn.</th>
|
||||
<th>E-mail</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger</td>
|
||||
<td>Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
<td>5421</td>
|
||||
<td>t.nixon@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett</td>
|
||||
<td>Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
<td>8422</td>
|
||||
<td>g.winters@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton</td>
|
||||
<td>Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
<td>1562</td>
|
||||
<td>a.cox@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric</td>
|
||||
<td>Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
<td>6224</td>
|
||||
<td>c.kelly@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi</td>
|
||||
<td>Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
<td>5407</td>
|
||||
<td>a.satou@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle</td>
|
||||
<td>Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
<td>4804</td>
|
||||
<td>b.williamson@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod</td>
|
||||
<td>Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
<td>9608</td>
|
||||
<td>h.chandler@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona</td>
|
||||
<td>Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
<td>6200</td>
|
||||
<td>r.davidson@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen</td>
|
||||
<td>Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
<td>2360</td>
|
||||
<td>c.hurst@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya</td>
|
||||
<td>Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
<td>1667</td>
|
||||
<td>s.frost@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena</td>
|
||||
<td>Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
<td>3814</td>
|
||||
<td>j.gaines@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn</td>
|
||||
<td>Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
<td>9497</td>
|
||||
<td>q.flynn@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde</td>
|
||||
<td>Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
<td>6741</td>
|
||||
<td>c.marshall@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley</td>
|
||||
<td>Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
<td>3597</td>
|
||||
<td>h.kennedy@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana</td>
|
||||
<td>Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
<td>1965</td>
|
||||
<td>t.fitzpatrick@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael</td>
|
||||
<td>Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
<td>1581</td>
|
||||
<td>m.silva@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul</td>
|
||||
<td>Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
<td>3059</td>
|
||||
<td>p.byrd@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria</td>
|
||||
<td>Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
<td>1721</td>
|
||||
<td>g.little@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley</td>
|
||||
<td>Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
<td>2558</td>
|
||||
<td>b.greer@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai</td>
|
||||
<td>Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
<td>2290</td>
|
||||
<td>d.rios@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette</td>
|
||||
<td>Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
<td>1937</td>
|
||||
<td>j.caldwell@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri</td>
|
||||
<td>Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
<td>6154</td>
|
||||
<td>y.berry@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar</td>
|
||||
<td>Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
<td>8330</td>
|
||||
<td>c.vance@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris</td>
|
||||
<td>Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
<td>3023</td>
|
||||
<td>d.wilder@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica</td>
|
||||
<td>Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
<td>5797</td>
|
||||
<td>a.ramos@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin</td>
|
||||
<td>Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
<td>8822</td>
|
||||
<td>g.joyce@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer</td>
|
||||
<td>Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
<td>9239</td>
|
||||
<td>j.chang@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden</td>
|
||||
<td>Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
<td>1314</td>
|
||||
<td>b.wagner@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona</td>
|
||||
<td>Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
<td>2947</td>
|
||||
<td>f.green@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou</td>
|
||||
<td>Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
<td>8899</td>
|
||||
<td>s.itou@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle</td>
|
||||
<td>House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
<td>2769</td>
|
||||
<td>m.house@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki</td>
|
||||
<td>Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
<td>6832</td>
|
||||
<td>s.burks@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott</td>
|
||||
<td>Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
<td>3606</td>
|
||||
<td>p.bartlett@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin</td>
|
||||
<td>Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
<td>2860</td>
|
||||
<td>g.cortez@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena</td>
|
||||
<td>Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
<td>8240</td>
|
||||
<td>m.mccray@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity</td>
|
||||
<td>Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
<td>5384</td>
|
||||
<td>u.butler@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard</td>
|
||||
<td>Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
<td>7031</td>
|
||||
<td>h.hatfield@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope</td>
|
||||
<td>Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
<td>6318</td>
|
||||
<td>h.fuentes@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian</td>
|
||||
<td>Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
<td>9422</td>
|
||||
<td>v.harrell@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy</td>
|
||||
<td>Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
<td>7580</td>
|
||||
<td>t.mooney@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson</td>
|
||||
<td>Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
<td>1042</td>
|
||||
<td>j.bradshaw@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia</td>
|
||||
<td>Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
<td>2120</td>
|
||||
<td>o.liang@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno</td>
|
||||
<td>Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
<td>6222</td>
|
||||
<td>b.nash@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura</td>
|
||||
<td>Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
<td>9383</td>
|
||||
<td>s.yamamoto@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor</td>
|
||||
<td>Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
<td>8327</td>
|
||||
<td>t.walton@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn</td>
|
||||
<td>Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
<td>2927</td>
|
||||
<td>f.camacho@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge</td>
|
||||
<td>Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
<td>8352</td>
|
||||
<td>s.baldwin@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida</td>
|
||||
<td>Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
<td>7439</td>
|
||||
<td>z.frank@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita</td>
|
||||
<td>Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
<td>4389</td>
|
||||
<td>z.serrano@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer</td>
|
||||
<td>Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
<td>3431</td>
|
||||
<td>j.acosta@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara</td>
|
||||
<td>Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
<td>3990</td>
|
||||
<td>c.stevens@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione</td>
|
||||
<td>Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
<td>1016</td>
|
||||
<td>h.butler@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael</td>
|
||||
<td>Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
<td>6733</td>
|
||||
<td>l.greer@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas</td>
|
||||
<td>Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
<td>8196</td>
|
||||
<td>j.alexander@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad</td>
|
||||
<td>Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
<td>6373</td>
|
||||
<td>s.decker@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael</td>
|
||||
<td>Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
<td>5384</td>
|
||||
<td>m.bruce@datatables.net</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna</td>
|
||||
<td>Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
<td>4226</td>
|
||||
<td>d.snider@datatables.net</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
window.table = $('#example').DataTable( {
|
||||
dom: 'Rlfrtip',
|
||||
scrollX: true,
|
||||
scrollCollapse: true,
|
||||
columnDefs: [
|
||||
{ sortable: false, targets: 0 },
|
||||
{ sortable: false, targets: -1 }
|
||||
],
|
||||
sorting: [[ 1, 'asc' ]],
|
||||
colReorder: {
|
||||
fixedColumnsLeft: 1,
|
||||
fixedColumnsRight: 1
|
||||
}
|
||||
} );
|
||||
|
||||
window.fc = new $.fn.dataTable.FixedColumns( table, {
|
||||
leftColumns: 1,
|
||||
rightColumns: 1
|
||||
} );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
<li><a href=
|
||||
"../../FixedColumns/js/dataTables.fixedColumns.js">../../FixedColumns/js/dataTables.fixedColumns.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
<li><a href=
|
||||
"../../FixedColumns/css/dataTables.fixedColumns.css">../../FixedColumns/css/dataTables.fixedColumns.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li class="active"><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
649
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/fixedheader.html
vendored
Normal file
@@ -0,0 +1,649 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - FixedHeader integration</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../FixedHeader/css/dataTables.fixedHeader.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../FixedHeader/js/dataTables.fixedHeader.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').dataTable( {
|
||||
dom: 'Rlfrtip'
|
||||
} );
|
||||
|
||||
new $.fn.dataTable.fixedHeader( table );
|
||||
} );
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>FixedHeader integration</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>FixedHeader is a particularly useful plug-in for DataTables, allowing a table header to float at the
|
||||
top of a scrolling window. ColReorder works well with FixedHeader, allowing you to reorder columns even
|
||||
using the floating header, as shown in the example below.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').dataTable( {
|
||||
dom: 'Rlfrtip'
|
||||
} );
|
||||
|
||||
new $.fn.dataTable.fixedHeader( table );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
<li><a href=
|
||||
"../../FixedHeader/js/dataTables.fixedHeader.js">../../FixedHeader/js/dataTables.fixedHeader.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
<li><a href=
|
||||
"../../FixedHeader/css/dataTables.fixedHeader.css">../../FixedHeader/css/dataTables.fixedHeader.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li class="active"><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
78
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/index.html
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
|
||||
<title>ColReorder examples - ColReorder examples</title>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>ColReorder examples</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>ColReorder adds the ability for the end user to click and drag column headers to reorder a table as
|
||||
they see fit, to DataTables. Key features include:</p>
|
||||
|
||||
<ul class="markdown">
|
||||
<li>Very easy integration with DataTables</li>
|
||||
<li>Tight integration with all other DataTables plug-ins</li>
|
||||
<li>The ability to exclude the first (or more) column from being movable</li>
|
||||
<li>Predefine a column order</li>
|
||||
<li>Save staving integration with DataTables</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
652
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/jqueryui.html
vendored
Normal file
@@ -0,0 +1,652 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - jQuery UI styling</title>
|
||||
<link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../Plugins/integration/jqueryui/dataTables.jqueryui.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src=
|
||||
"../../Plugins/integration/jqueryui/dataTables.jqueryui.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.ColReorder( table );
|
||||
} );
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>jQuery UI styling</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>This example shows how the jQuery UI ThemeRoller option in DataTables can be used with
|
||||
ColReorder.</p>
|
||||
|
||||
<p>The important thing to note here is that it is easier to use <code>new
|
||||
$.fn.dataTable.ColReorder()</code> to add ColReorder to the table rather than <a href=
|
||||
"//datatables.net/reference/option/dom"><code class="option" title=
|
||||
"DataTables initialisation option">dom<span>DT</span></code></a> as the jQuery UI integration uses a
|
||||
complex expression for <a href="//datatables.net/reference/option/dom"><code class="option" title=
|
||||
"DataTables initialisation option">dom<span>DT</span></code></a>.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').dataTable();
|
||||
|
||||
new $.fn.dataTable.ColReorder( table );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href=
|
||||
"../../Plugins/integration/jqueryui/dataTables.jqueryui.js">../../Plugins/integration/jqueryui/dataTables.jqueryui.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css</a></li>
|
||||
<li><a href=
|
||||
"../../Plugins/integration/jqueryui/dataTables.jqueryui.css">../../Plugins/integration/jqueryui/dataTables.jqueryui.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li class="active"><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
639
libraries/framework/vendor/plugins/datatables/extensions/ColReorder/examples/new_init.html
vendored
Normal file
@@ -0,0 +1,639 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico">
|
||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=2.0">
|
||||
|
||||
<title>ColReorder example - Initialisation using `new`</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../media/css/jquery.dataTables.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/dataTables.colReorder.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/syntax/shCore.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../examples/resources/demo.css">
|
||||
<style type="text/css" class="init">
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../js/dataTables.colReorder.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/syntax/shCore.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="../../../examples/resources/demo.js"></script>
|
||||
<script type="text/javascript" language="javascript" class="init">
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
|
||||
new $.fn.dataTable.ColReorder( table );
|
||||
} );
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="dt-example">
|
||||
<div class="container">
|
||||
<section>
|
||||
<h1>ColReorder example <span>Initialisation using `new`</span></h1>
|
||||
|
||||
<div class="info">
|
||||
<p>As well as providing the option to be initialised through the <code>R</code> option of <a href=
|
||||
"//datatables.net/reference/option/dom"><code class="option" title=
|
||||
"DataTables initialisation option">dom<span>DT</span></code></a>, ColReorder can also be added to a
|
||||
DataTable using direct initialisation - <code>new $.fn.dataTable.ColReorder();</code> as shown in this
|
||||
example.</p>
|
||||
</div>
|
||||
|
||||
<table id="example" class="display" cellspacing="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Position</th>
|
||||
<th>Office</th>
|
||||
<th>Age</th>
|
||||
<th>Start date</th>
|
||||
<th>Salary</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tiger Nixon</td>
|
||||
<td>System Architect</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>61</td>
|
||||
<td>2011/04/25</td>
|
||||
<td>$320,800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Garrett Winters</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>63</td>
|
||||
<td>2011/07/25</td>
|
||||
<td>$170,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ashton Cox</td>
|
||||
<td>Junior Technical Author</td>
|
||||
<td>San Francisco</td>
|
||||
<td>66</td>
|
||||
<td>2009/01/12</td>
|
||||
<td>$86,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cedric Kelly</td>
|
||||
<td>Senior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2012/03/29</td>
|
||||
<td>$433,060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Airi Satou</td>
|
||||
<td>Accountant</td>
|
||||
<td>Tokyo</td>
|
||||
<td>33</td>
|
||||
<td>2008/11/28</td>
|
||||
<td>$162,700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brielle Williamson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2012/12/02</td>
|
||||
<td>$372,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Herrod Chandler</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>San Francisco</td>
|
||||
<td>59</td>
|
||||
<td>2012/08/06</td>
|
||||
<td>$137,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rhona Davidson</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Tokyo</td>
|
||||
<td>55</td>
|
||||
<td>2010/10/14</td>
|
||||
<td>$327,900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Colleen Hurst</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>39</td>
|
||||
<td>2009/09/15</td>
|
||||
<td>$205,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sonya Frost</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>23</td>
|
||||
<td>2008/12/13</td>
|
||||
<td>$103,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jena Gaines</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>30</td>
|
||||
<td>2008/12/19</td>
|
||||
<td>$90,560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quinn Flynn</td>
|
||||
<td>Support Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>22</td>
|
||||
<td>2013/03/03</td>
|
||||
<td>$342,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Charde Marshall</td>
|
||||
<td>Regional Director</td>
|
||||
<td>San Francisco</td>
|
||||
<td>36</td>
|
||||
<td>2008/10/16</td>
|
||||
<td>$470,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Haley Kennedy</td>
|
||||
<td>Senior Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>43</td>
|
||||
<td>2012/12/18</td>
|
||||
<td>$313,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tatyana Fitzpatrick</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>19</td>
|
||||
<td>2010/03/17</td>
|
||||
<td>$385,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Silva</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>London</td>
|
||||
<td>66</td>
|
||||
<td>2012/11/27</td>
|
||||
<td>$198,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paul Byrd</td>
|
||||
<td>Chief Financial Officer (CFO)</td>
|
||||
<td>New York</td>
|
||||
<td>64</td>
|
||||
<td>2010/06/09</td>
|
||||
<td>$725,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gloria Little</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>New York</td>
|
||||
<td>59</td>
|
||||
<td>2009/04/10</td>
|
||||
<td>$237,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bradley Greer</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>41</td>
|
||||
<td>2012/10/13</td>
|
||||
<td>$132,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dai Rios</td>
|
||||
<td>Personnel Lead</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>35</td>
|
||||
<td>2012/09/26</td>
|
||||
<td>$217,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jenette Caldwell</td>
|
||||
<td>Development Lead</td>
|
||||
<td>New York</td>
|
||||
<td>30</td>
|
||||
<td>2011/09/03</td>
|
||||
<td>$345,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yuri Berry</td>
|
||||
<td>Chief Marketing Officer (CMO)</td>
|
||||
<td>New York</td>
|
||||
<td>40</td>
|
||||
<td>2009/06/25</td>
|
||||
<td>$675,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Caesar Vance</td>
|
||||
<td>Pre-Sales Support</td>
|
||||
<td>New York</td>
|
||||
<td>21</td>
|
||||
<td>2011/12/12</td>
|
||||
<td>$106,450</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doris Wilder</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>Sidney</td>
|
||||
<td>23</td>
|
||||
<td>2010/09/20</td>
|
||||
<td>$85,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Angelica Ramos</td>
|
||||
<td>Chief Executive Officer (CEO)</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2009/10/09</td>
|
||||
<td>$1,200,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Joyce</td>
|
||||
<td>Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>42</td>
|
||||
<td>2010/12/22</td>
|
||||
<td>$92,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Chang</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Singapore</td>
|
||||
<td>28</td>
|
||||
<td>2010/11/14</td>
|
||||
<td>$357,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brenden Wagner</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>28</td>
|
||||
<td>2011/06/07</td>
|
||||
<td>$206,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fiona Green</td>
|
||||
<td>Chief Operating Officer (COO)</td>
|
||||
<td>San Francisco</td>
|
||||
<td>48</td>
|
||||
<td>2010/03/11</td>
|
||||
<td>$850,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shou Itou</td>
|
||||
<td>Regional Marketing</td>
|
||||
<td>Tokyo</td>
|
||||
<td>20</td>
|
||||
<td>2011/08/14</td>
|
||||
<td>$163,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michelle House</td>
|
||||
<td>Integration Specialist</td>
|
||||
<td>Sidney</td>
|
||||
<td>37</td>
|
||||
<td>2011/06/02</td>
|
||||
<td>$95,400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Suki Burks</td>
|
||||
<td>Developer</td>
|
||||
<td>London</td>
|
||||
<td>53</td>
|
||||
<td>2009/10/22</td>
|
||||
<td>$114,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Prescott Bartlett</td>
|
||||
<td>Technical Author</td>
|
||||
<td>London</td>
|
||||
<td>27</td>
|
||||
<td>2011/05/07</td>
|
||||
<td>$145,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gavin Cortez</td>
|
||||
<td>Team Leader</td>
|
||||
<td>San Francisco</td>
|
||||
<td>22</td>
|
||||
<td>2008/10/26</td>
|
||||
<td>$235,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Martena Mccray</td>
|
||||
<td>Post-Sales support</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>46</td>
|
||||
<td>2011/03/09</td>
|
||||
<td>$324,050</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unity Butler</td>
|
||||
<td>Marketing Designer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/12/09</td>
|
||||
<td>$85,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Howard Hatfield</td>
|
||||
<td>Office Manager</td>
|
||||
<td>San Francisco</td>
|
||||
<td>51</td>
|
||||
<td>2008/12/16</td>
|
||||
<td>$164,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hope Fuentes</td>
|
||||
<td>Secretary</td>
|
||||
<td>San Francisco</td>
|
||||
<td>41</td>
|
||||
<td>2010/02/12</td>
|
||||
<td>$109,850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vivian Harrell</td>
|
||||
<td>Financial Controller</td>
|
||||
<td>San Francisco</td>
|
||||
<td>62</td>
|
||||
<td>2009/02/14</td>
|
||||
<td>$452,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Timothy Mooney</td>
|
||||
<td>Office Manager</td>
|
||||
<td>London</td>
|
||||
<td>37</td>
|
||||
<td>2008/12/11</td>
|
||||
<td>$136,200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jackson Bradshaw</td>
|
||||
<td>Director</td>
|
||||
<td>New York</td>
|
||||
<td>65</td>
|
||||
<td>2008/09/26</td>
|
||||
<td>$645,750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Olivia Liang</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2011/02/03</td>
|
||||
<td>$234,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bruno Nash</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>London</td>
|
||||
<td>38</td>
|
||||
<td>2011/05/03</td>
|
||||
<td>$163,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sakura Yamamoto</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>Tokyo</td>
|
||||
<td>37</td>
|
||||
<td>2009/08/19</td>
|
||||
<td>$139,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thor Walton</td>
|
||||
<td>Developer</td>
|
||||
<td>New York</td>
|
||||
<td>61</td>
|
||||
<td>2013/08/11</td>
|
||||
<td>$98,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finn Camacho</td>
|
||||
<td>Support Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>47</td>
|
||||
<td>2009/07/07</td>
|
||||
<td>$87,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serge Baldwin</td>
|
||||
<td>Data Coordinator</td>
|
||||
<td>Singapore</td>
|
||||
<td>64</td>
|
||||
<td>2012/04/09</td>
|
||||
<td>$138,575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zenaida Frank</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>New York</td>
|
||||
<td>63</td>
|
||||
<td>2010/01/04</td>
|
||||
<td>$125,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Zorita Serrano</td>
|
||||
<td>Software Engineer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>56</td>
|
||||
<td>2012/06/01</td>
|
||||
<td>$115,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jennifer Acosta</td>
|
||||
<td>Junior Javascript Developer</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>43</td>
|
||||
<td>2013/02/01</td>
|
||||
<td>$75,650</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cara Stevens</td>
|
||||
<td>Sales Assistant</td>
|
||||
<td>New York</td>
|
||||
<td>46</td>
|
||||
<td>2011/12/06</td>
|
||||
<td>$145,600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hermione Butler</td>
|
||||
<td>Regional Director</td>
|
||||
<td>London</td>
|
||||
<td>47</td>
|
||||
<td>2011/03/21</td>
|
||||
<td>$356,250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lael Greer</td>
|
||||
<td>Systems Administrator</td>
|
||||
<td>London</td>
|
||||
<td>21</td>
|
||||
<td>2009/02/27</td>
|
||||
<td>$103,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jonas Alexander</td>
|
||||
<td>Developer</td>
|
||||
<td>San Francisco</td>
|
||||
<td>30</td>
|
||||
<td>2010/07/14</td>
|
||||
<td>$86,500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Shad Decker</td>
|
||||
<td>Regional Director</td>
|
||||
<td>Edinburgh</td>
|
||||
<td>51</td>
|
||||
<td>2008/11/13</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Michael Bruce</td>
|
||||
<td>Javascript Developer</td>
|
||||
<td>Singapore</td>
|
||||
<td>29</td>
|
||||
<td>2011/06/27</td>
|
||||
<td>$183,000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donna Snider</td>
|
||||
<td>Customer Support</td>
|
||||
<td>New York</td>
|
||||
<td>27</td>
|
||||
<td>2011/01/25</td>
|
||||
<td>$112,000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="tabs">
|
||||
<li class="active">Javascript</li>
|
||||
<li>HTML</li>
|
||||
<li>CSS</li>
|
||||
<li>Ajax</li>
|
||||
<li>Server-side script</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs">
|
||||
<div class="js">
|
||||
<p>The Javascript shown below is used to initialise the table shown in this
|
||||
example:</p><code class="multiline brush: js;">$(document).ready(function() {
|
||||
var table = $('#example').DataTable();
|
||||
|
||||
new $.fn.dataTable.ColReorder( table );
|
||||
} );</code>
|
||||
|
||||
<p>In addition to the above code, the following Javascript library files are loaded for use in this
|
||||
example:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../../media/js/jquery.js">../../../media/js/jquery.js</a></li>
|
||||
<li><a href=
|
||||
"../../../media/js/jquery.dataTables.js">../../../media/js/jquery.dataTables.js</a></li>
|
||||
<li><a href="../js/dataTables.colReorder.js">../js/dataTables.colReorder.js</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="table">
|
||||
<p>The HTML shown below is the raw HTML table element, before it has been enhanced by
|
||||
DataTables:</p>
|
||||
</div>
|
||||
|
||||
<div class="css">
|
||||
<div>
|
||||
<p>This example uses a little bit of additional CSS beyond what is loaded from the library
|
||||
files (below), in order to correctly display the table. The additional CSS used is shown
|
||||
below:</p><code class="multiline brush: js;"></code>
|
||||
</div>
|
||||
|
||||
<p>The following CSS library files are loaded for use in this example to provide the styling of the
|
||||
table:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href=
|
||||
"../../../media/css/jquery.dataTables.css">../../../media/css/jquery.dataTables.css</a></li>
|
||||
<li><a href="../css/dataTables.colReorder.css">../css/dataTables.colReorder.css</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ajax">
|
||||
<p>This table loads data by Ajax. The latest data that has been loaded is shown below. This data
|
||||
will update automatically as any additional data is loaded.</p>
|
||||
</div>
|
||||
|
||||
<div class="php">
|
||||
<p>The script used to perform the server-side processing for this table is shown below. Please note
|
||||
that this is just an example script using PHP. Server-side processing scripts can be written in any
|
||||
language, using <a href="//datatables.net/manual/server-side">the protocol described in the
|
||||
DataTables documentation</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<div class="footer">
|
||||
<div class="gradient"></div>
|
||||
|
||||
<div class="liner">
|
||||
<h2>Other examples</h2>
|
||||
|
||||
<div class="toc">
|
||||
<div class="toc-group">
|
||||
<h3><a href="./index.html">Examples</a></h3>
|
||||
<ul class="toc active">
|
||||
<li><a href="./simple.html">Basic initialisation</a></li>
|
||||
<li class="active"><a href="./new_init.html">Initialisation using `new`</a></li>
|
||||
<li><a href="./alt_insert.html">Alternative insert styling</a></li>
|
||||
<li><a href="./realtime.html">Realtime updating</a></li>
|
||||
<li><a href="./state_save.html">State saving</a></li>
|
||||
<li><a href="./scrolling.html">Scrolling table</a></li>
|
||||
<li><a href="./predefined.html">Predefined column ordering</a></li>
|
||||
<li><a href="./reset.html">Reset ordering API</a></li>
|
||||
<li><a href="./colvis.html">ColVis integration</a></li>
|
||||
<li><a href="./fixedcolumns.html">FixedColumns integration</a></li>
|
||||
<li><a href="./fixedheader.html">FixedHeader integration</a></li>
|
||||
<li><a href="./jqueryui.html">jQuery UI styling</a></li>
|
||||
<li><a href="./col_filter.html">Individual column filtering</a></li>
|
||||
<li><a href="./server_side.html">Server-side processing</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="epilogue">
|
||||
<p>Please refer to the <a href="http://www.datatables.net">DataTables documentation</a> for full
|
||||
information about its API properties and methods.<br>
|
||||
Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and
|
||||
<a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of
|
||||
DataTables.</p>
|
||||
|
||||
<p class="copyright">DataTables designed and created by <a href=
|
||||
"http://www.sprymedia.co.uk">SpryMedia Ltd</a> © 2007-2014<br>
|
||||
DataTables is licensed under the <a href="http://www.datatables.net/mit">MIT license</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||