9 changed files with 1123 additions and 95 deletions
@ -0,0 +1,201 @@
|
||||
/** |
||||
* Default DropKick theme |
||||
* |
||||
* Feel free to edit the default theme |
||||
* or even add your own. |
||||
* |
||||
* See the readme for themeing help |
||||
* |
||||
*/ |
||||
|
||||
/***** Begin Theme, feel free to edit in here! ******/ |
||||
|
||||
/* One container to bind them... */ |
||||
.dk_container { |
||||
background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f5f5f5)); |
||||
background: -moz-linear-gradient(top, #fff, #f5f5f5); |
||||
background: -o-linear-gradient(top, #fff, #f5f5f5); |
||||
background-color: #f5f5f5; |
||||
font-family: 'Helvetica', Arial, sans-serif; |
||||
font-size: 12px; |
||||
font-weight: bold; |
||||
line-height: 14px; |
||||
border-radius: 5px; |
||||
-moz-border-radius: 5px; |
||||
-webkit-border-radius: 5px; |
||||
} |
||||
.dk_container:focus { |
||||
outline: 0; |
||||
} |
||||
.dk_container a { |
||||
cursor: pointer; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
/* Opens the dropdown and holds the menu label */ |
||||
.dk_toggle { |
||||
/** |
||||
* Help: Arrow image not appearing |
||||
* Try updating this property to your correct dk_arrows.png path |
||||
*/ |
||||
background-image: url('../images/dk_arrows.png'); |
||||
background-repeat: no-repeat; |
||||
background-position: 90% center; |
||||
border: 1px solid #ccc; |
||||
color: #333; |
||||
margin-top: 2px; |
||||
margin-left: 2px; |
||||
padding: 4px 2px 2px 4px; |
||||
text-shadow: #fff 1px 1px 0; |
||||
border-radius: 5px; |
||||
-moz-border-radius: 5px; |
||||
-webkit-border-radius: 5px; |
||||
-webkit-transition: border-color .5s; |
||||
-moz-transition: border-color .5s; |
||||
-o-transition: border-color .5s; |
||||
transition: border-color .5s; |
||||
} |
||||
.dk_toggle:hover { |
||||
border-color: #8c8c8c; |
||||
} |
||||
/* Applied when the dropdown is focused */ |
||||
.dk_focus .dk_toggle { |
||||
border-color: #40b5e2; |
||||
} |
||||
.dk_focus .dk_toggle { |
||||
box-shadow: 0 0 5px #40b5e2; |
||||
-moz-box-shadow: 0 0 5px #40b5e2; |
||||
-webkit-box-shadow: 0 0 5px #40b5e2; |
||||
} |
||||
|
||||
/* Applied whenever the dropdown is open */ |
||||
.dk_open { |
||||
box-shadow: 0 0 5px #40b5e2; |
||||
-moz-box-shadow: 0 0 5px #40b5e2; |
||||
-webkit-box-shadow: 0 0 5px #40b5e2; |
||||
/** |
||||
* Help: Dropdown menu is covered by something |
||||
* Try setting this value higher |
||||
*/ |
||||
z-index: 10; |
||||
} |
||||
.dk_open .dk_toggle { |
||||
background-color: #ececec; |
||||
border-color: #8c8c8c; |
||||
color: #ccc; |
||||
box-shadow: inset 0 -2px 5px #ccc; |
||||
border-radius: 5px 5px 0 0; |
||||
-moz-border-radius: 5px 5px 0 0; |
||||
-webkit-border-radius: 5px 5px 0 0; |
||||
} |
||||
|
||||
/* The outer container of the options */ |
||||
.dk_options { |
||||
box-shadow: rgba(0, 0, 0, .2) 0 2px 8px; |
||||
-moz-box-shadow: rgba(0, 0, 0, .2) 0 2px 8px; |
||||
-webkit-box-shadow: rgba(0, 0, 0, .2) 0 2px 8px; |
||||
border-radius: 0 0 5px 5px; |
||||
-moz-border-radius: 0 0 5px 5px; |
||||
-webkit-border-radius: 0 0 5px 5px; |
||||
} |
||||
.dk_options a { |
||||
background-color: #fff; |
||||
border-bottom: 1px solid #999; |
||||
font-weight: bold; |
||||
padding: 8px 10px; |
||||
} |
||||
.dk_options li:last-child a { |
||||
border-bottom: none; |
||||
} |
||||
.dk_options a:hover, |
||||
.dk_option_current a { |
||||
background-color: #0084c7; |
||||
border-bottom-color: #004c72; |
||||
color: #fff; |
||||
text-decoration: none; |
||||
text-shadow: rgba(0, 0, 0, .5) 0 1px 0; |
||||
} |
||||
|
||||
/* Inner container for options, this is what makes the scrollbar possible. */ |
||||
.dk_options_inner { |
||||
border: 1px solid #8c8c8e; |
||||
border-bottom-width: 2px; |
||||
border-bottom-color: #999; |
||||
color: #333; |
||||
max-height: 250px; |
||||
text-shadow: #fff 0 1px 0; |
||||
border-radius: 0 0 5px 5px; |
||||
-moz-border-radius: 0 0 5px 5px; |
||||
-webkit-border-radius: 0 0 5px 5px; |
||||
} |
||||
|
||||
/* Set a max-height on the options inner */ |
||||
.dk_options_inner, |
||||
.dk_touch .dk_options { |
||||
max-height: 250px; |
||||
} |
||||
|
||||
/****** End Theme ******/ |
||||
|
||||
/***** Critical to the continued enjoyment of working dropdowns ******/ |
||||
|
||||
.dk_container { |
||||
display: none; |
||||
float: left; |
||||
position: relative; |
||||
} |
||||
.dk_container a { |
||||
outline: 0; |
||||
} |
||||
|
||||
.dk_toggle { |
||||
display: -moz-inline-stack; |
||||
display: inline-block; |
||||
*display: inline; |
||||
position: relative; |
||||
zoom: 1; |
||||
} |
||||
|
||||
.dk_open { |
||||
position: relative; |
||||
} |
||||
.dk_open .dk_options { |
||||
display: block; |
||||
} |
||||
.dk_open .dk_label { |
||||
color: inherit; |
||||
} |
||||
|
||||
.dk_options { |
||||
display: none; |
||||
margin-top: -1px; |
||||
position: absolute; |
||||
right: 0; |
||||
width: 100%; |
||||
} |
||||
.dk_options a, |
||||
.dk_options a:link, |
||||
.dk_options a:visited { |
||||
display: block; |
||||
} |
||||
.dk_options_inner { |
||||
overflow: auto; |
||||
position: relative; |
||||
} |
||||
|
||||
.dk_touch .dk_options { |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.dk_touch .dk_options_inner { |
||||
max-height: none; |
||||
overflow: visible; |
||||
} |
||||
|
||||
.dk_fouc select { |
||||
position: relative; |
||||
top: -99999em; |
||||
visibility: hidden; |
||||
} |
||||
|
||||
/***** End Critical to the continued enjoyment of working dropdowns ******/ |
@ -0,0 +1,124 @@
|
||||
.slick-enhancement-pager { |
||||
width: 100%; |
||||
height: 26px; |
||||
border: 1px solid gray; |
||||
border-top: 0; |
||||
background: url('../images/header-columns-bg.gif') repeat-x center bottom; |
||||
vertical-align: middle; |
||||
position: relative; |
||||
} |
||||
|
||||
.button-base-class { |
||||
display: inline-block; |
||||
border: #CCC solid 1px; |
||||
margin: 4px; |
||||
width:16px; |
||||
height:16px; |
||||
cursor: pointer; |
||||
vertical-align: middle; |
||||
border-radius: 3px; |
||||
-moz-border-radius: 3px; |
||||
-webkit-border-radius: 3px; |
||||
} |
||||
|
||||
.resultset_first{ |
||||
background: url('../images/resultset_first.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_first:hover{ |
||||
background: #CEF url('../images/resultset_first.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_prev{ |
||||
background: url('../images/resultset_previous.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_prev:hover{ |
||||
background: #CEF url('../images/resultset_previous.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_next{ |
||||
background: url('../images/resultset_next.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_next:hover{ |
||||
background: #CEF url('../images/resultset_next.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_last{ |
||||
background: url('../images/resultset_last.png') no-repeat; |
||||
} |
||||
|
||||
.resultset_last:hover{ |
||||
background: #CEF url('../images/resultset_last.png') no-repeat; |
||||
} |
||||
|
||||
.spacer{ |
||||
width: 1px; |
||||
margin: 4px; |
||||
display: inline-block; |
||||
background: url('../images/spacer.png') no-repeat; |
||||
} |
||||
|
||||
.refresh{ |
||||
background: url('../images/arrow_refresh.png') no-repeat; |
||||
} |
||||
|
||||
.refresh:hover{ |
||||
background: #CEF url('../images/arrow_refresh.png') no-repeat; |
||||
} |
||||
|
||||
.dataloading{ |
||||
display: inline-block; |
||||
margin: 4px; |
||||
background: url('../images/ajax-loader.gif') no-repeat; |
||||
width:16px; |
||||
height:16px; |
||||
cursor: pointer; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
.pageplus{ |
||||
background: url('../images/pageplus.png') no-repeat; |
||||
} |
||||
|
||||
.pageplus:hover{ |
||||
background: #CEF url('../images/pageplus.png') no-repeat; |
||||
} |
||||
|
||||
.pageminus{ |
||||
background: url('../images/pageminus.png') no-repeat; |
||||
} |
||||
|
||||
.pageminus:hover{ |
||||
background: #CEF url('../images/pageminus.png') no-repeat; |
||||
} |
||||
|
||||
.currentrecords{ |
||||
position:absolute;right:0px; |
||||
background: url('../images/lightbulb.png') no-repeat; |
||||
} |
||||
|
||||
.currentrecords:hover{ |
||||
position:absolute;right:0px; |
||||
background: #CEF url('../images/lightbulb.png') no-repeat; |
||||
} |
||||
|
||||
.pagerslider{ |
||||
display:inline-block; |
||||
width:80px; |
||||
margin:4px 9px 4px 4px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
.recordsperpage{ |
||||
display:inline-block; |
||||
vertical-align: middle; |
||||
width:80px; |
||||
} |
||||
|
||||
.recordstate{ |
||||
position:absolute; |
||||
top:6px; |
||||
right:26px; |
||||
} |
@ -0,0 +1,402 @@
|
||||
/** |
||||
* DropKick |
||||
* |
||||
* Highly customizable <select> lists |
||||
* https://github.com/JamieLottering/DropKick
|
||||
* |
||||
* © 2011 Jamie Lottering <http://github.com/JamieLottering>
|
||||
* <http://twitter.com/JamieLottering>
|
||||
*
|
||||
*/ |
||||
(function ($, window, document) { |
||||
|
||||
var ie6 = false; |
||||
|
||||
// Help prevent flashes of unstyled content
|
||||
if ($.browser.msie && $.browser.version.substr(0, 1) < 7) { |
||||
ie6 = true; |
||||
} else { |
||||
document.documentElement.className = document.documentElement.className + ' dk_fouc'; |
||||
} |
||||
|
||||
var |
||||
// Public methods exposed to $.fn.dropkick()
|
||||
methods = {}, |
||||
|
||||
// Cache every <select> element that gets dropkicked
|
||||
lists = [], |
||||
|
||||
// Convenience keys for keyboard navigation
|
||||
keyMap = { |
||||
'left' : 37, |
||||
'up' : 38, |
||||
'right' : 39, |
||||
'down' : 40, |
||||
'enter' : 13 |
||||
}, |
||||
|
||||
// HTML template for the dropdowns
|
||||
dropdownTemplate = [ |
||||
'<div class="dk_container" id="dk_container_{{ id }}" tabindex="{{ tabindex }}">', |
||||
'<a class="dk_toggle">', |
||||
'<span class="dk_label">{{ label }}</span>', |
||||
'</a>', |
||||
'<div class="dk_options">', |
||||
'<ul class="dk_options_inner">', |
||||
'</ul>', |
||||
'</div>', |
||||
'</div>' |
||||
].join(''), |
||||
|
||||
// HTML template for dropdown options
|
||||
optionTemplate = '<li class="{{ current }}"><a data-dk-dropdown-value="{{ value }}">{{ text }}</a></li>', |
||||
|
||||
// Some nice default values
|
||||
defaults = { |
||||
startSpeed : 1000, // I recommend a high value here, I feel it makes the changes less noticeable to the user
|
||||
theme : false, |
||||
change : false |
||||
}, |
||||
|
||||
// Make sure we only bind keydown on the document once
|
||||
keysBound = false |
||||
; |
||||
|
||||
// Called by using $('foo').dropkick();
|
||||
methods.init = function (settings) { |
||||
settings = $.extend({}, defaults, settings); |
||||
|
||||
return this.each(function () { |
||||
var |
||||
// The current <select> element
|
||||
$select = $(this), |
||||
|
||||
// Store a reference to the originally selected <option> element
|
||||
$original = $select.find(':selected').first(), |
||||
|
||||
// Save all of the <option> elements
|
||||
$options = $select.find('option'), |
||||
|
||||
// We store lots of great stuff using jQuery data
|
||||
data = $select.data('dropkick') || {}, |
||||
|
||||
// This gets applied to the 'dk_container' element
|
||||
id = $select.attr('id') || $select.attr('name'), |
||||
|
||||
// This gets updated to be equal to the longest <option> element
|
||||
width = settings.width || $select.outerWidth(), |
||||
|
||||
// Check if we have a tabindex set or not
|
||||
tabindex = $select.attr('tabindex') ? $select.attr('tabindex') : '', |
||||
|
||||
// The completed dk_container element
|
||||
$dk = false, |
||||
|
||||
theme |
||||
; |
||||
|
||||
// Dont do anything if we've already setup dropkick on this element
|
||||
if (data.id) { |
||||
return $select; |
||||
} else { |
||||
data.settings = settings; |
||||
data.tabindex = tabindex; |
||||
data.id = id; |
||||
data.$original = $original; |
||||
data.$select = $select; |
||||
data.value = _notBlank($select.val()) || _notBlank($original.attr('value')); |
||||
data.label = $original.text(); |
||||
data.options = $options; |
||||
} |
||||
|
||||
// Build the dropdown HTML
|
||||
$dk = _build(dropdownTemplate, data); |
||||
|
||||
// Make the dropdown fixed width if desired
|
||||
$dk.find('.dk_toggle').css({ |
||||
'width' : width + 'px' |
||||
}); |
||||
|
||||
// Hide the <select> list and place our new one in front of it
|
||||
$select.before($dk); |
||||
|
||||
// Update the reference to $dk
|
||||
$dk = $('#dk_container_' + id).fadeIn(settings.startSpeed); |
||||
|
||||
// Save the current theme
|
||||
theme = settings.theme ? settings.theme : 'default'; |
||||
$dk.addClass('dk_theme_' + theme); |
||||
data.theme = theme; |
||||
|
||||
// Save the updated $dk reference into our data object
|
||||
data.$dk = $dk; |
||||
|
||||
// Save the dropkick data onto the <select> element
|
||||
$select.data('dropkick', data); |
||||
|
||||
// Do the same for the dropdown, but add a few helpers
|
||||
$dk.data('dropkick', data); |
||||
|
||||
lists[lists.length] = $select; |
||||
|
||||
// Focus events
|
||||
$dk.bind('focus.dropkick', function (e) { |
||||
$dk.addClass('dk_focus'); |
||||
}).bind('blur.dropkick', function (e) { |
||||
$dk.removeClass('dk_open dk_focus'); |
||||
}); |
||||
|
||||
setTimeout(function () { |
||||
$select.hide(); |
||||
}, 0); |
||||
}); |
||||
}; |
||||
|
||||
// Allows dynamic theme changes
|
||||
methods.theme = function (newTheme) { |
||||
var |
||||
$select = $(this), |
||||
list = $select.data('dropkick'), |
||||
$dk = list.$dk, |
||||
oldtheme = 'dk_theme_' + list.theme |
||||
; |
||||
|
||||
$dk.removeClass(oldtheme).addClass('dk_theme_' + newTheme); |
||||
|
||||
list.theme = newTheme; |
||||
}; |
||||
|
||||
// Reset all <selects and dropdowns in our lists array
|
||||
methods.reset = function () { |
||||
for (var i = 0, l = lists.length; i < l; i++) { |
||||
var |
||||
listData = lists[i].data('dropkick'), |
||||
$dk = listData.$dk, |
||||
$current = $dk.find('li').first() |
||||
; |
||||
|
||||
$dk.find('.dk_label').text(listData.label); |
||||
$dk.find('.dk_options_inner').animate({ scrollTop: 0 }, 0); |
||||
|
||||
_setCurrent($current, $dk); |
||||
_updateFields($current, $dk, true); |
||||
} |
||||
}; |
||||
|
||||
// Expose the plugin
|
||||
$.fn.dropkick = function (method) { |
||||
if (!ie6) { |
||||
if (methods[method]) { |
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); |
||||
} else if (typeof method === 'object' || ! method) { |
||||
return methods.init.apply(this, arguments); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
// private
|
||||
function _handleKeyBoardNav(e, $dk) { |
||||
var |
||||
code = e.keyCode, |
||||
data = $dk.data('dropkick'), |
||||
options = $dk.find('.dk_options'), |
||||
open = $dk.hasClass('dk_open'), |
||||
current = $dk.find('.dk_option_current'), |
||||
first = options.find('li').first(), |
||||
last = options.find('li').last(), |
||||
next, |
||||
prev |
||||
; |
||||
|
||||
switch (code) { |
||||
case keyMap.enter: |
||||
if (open) { |
||||
_updateFields(current.find('a'), $dk); |
||||
_closeDropdown($dk); |
||||
} else { |
||||
_openDropdown($dk); |
||||
} |
||||
e.preventDefault(); |
||||
break; |
||||
|
||||
case keyMap.up: |
||||
prev = current.prev('li'); |
||||
if (open) { |
||||
if (prev.length) { |
||||
_setCurrent(prev, $dk); |
||||
} else { |
||||
_setCurrent(last, $dk); |
||||
} |
||||
} else { |
||||
_openDropdown($dk); |
||||
} |
||||
e.preventDefault(); |
||||
break; |
||||
|
||||
case keyMap.down: |
||||
if (open) { |
||||
next = current.next('li').first(); |
||||
if (next.length) { |
||||
_setCurrent(next, $dk); |
||||
} else { |
||||
_setCurrent(first, $dk); |
||||
} |
||||
} else { |
||||
_openDropdown($dk); |
||||
} |
||||
e.preventDefault(); |
||||
break; |
||||
|
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
// Update the <select> value, and the dropdown label
|
||||
function _updateFields(option, $dk, reset) { |
||||
var value, label, data; |
||||
|
||||
value = option.attr('data-dk-dropdown-value'); |
||||
label = option.text(); |
||||
data = $dk.data('dropkick'); |
||||
|
||||
$select = data.$select; |
||||
$select.val(value); |
||||
|
||||
$dk.find('.dk_label').text(label); |
||||
|
||||
reset = reset || false; |
||||
|
||||
if (data.settings.change && !reset) { |
||||
data.settings.change.call($select, value, label); |
||||
} |
||||
} |
||||
|
||||
// Set the currently selected option
|
||||
function _setCurrent($current, $dk) { |
||||
$dk.find('.dk_option_current').removeClass('dk_option_current'); |
||||
$current.addClass('dk_option_current'); |
||||
|
||||
_setScrollPos($dk, $current); |
||||
} |
||||
|
||||
function _setScrollPos($dk, anchor) { |
||||
var height = anchor.prevAll('li').outerHeight() * anchor.prevAll('li').length; |
||||
$dk.find('.dk_options_inner').animate({ scrollTop: height + 'px' }, 0); |
||||
} |
||||
|
||||
// Close a dropdown
|
||||
function _closeDropdown($dk) { |
||||
$dk.removeClass('dk_open'); |
||||
} |
||||
|
||||
// Open a dropdown
|
||||
function _openDropdown($dk) { |
||||
var data = $dk.data('dropkick'); |
||||
$dk.find('.dk_options').css({ top : $dk.find('.dk_toggle').outerHeight() - 1 }); |
||||
$dk.toggleClass('dk_open'); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* Turn the dropdownTemplate into a jQuery object and fill in the variables. |
||||
*/ |
||||
function _build (tpl, view) { |
||||
var |
||||
// Template for the dropdown
|
||||
template = tpl, |
||||
// Holder of the dropdowns options
|
||||
options = [], |
||||
$dk |
||||
; |
||||
|
||||
template = template.replace('{{ id }}', view.id); |
||||
template = template.replace('{{ label }}', view.label); |
||||
template = template.replace('{{ tabindex }}', view.tabindex); |
||||
|
||||
if (view.options && view.options.length) { |
||||
for (var i = 0, l = view.options.length; i < l; i++) { |
||||
var |
||||
$option = $(view.options[i]), |
||||
current = 'dk_option_current', |
||||
oTemplate = optionTemplate |
||||
; |
||||
|
||||
oTemplate = oTemplate.replace('{{ value }}', $option.val()); |
||||
oTemplate = oTemplate.replace('{{ current }}', (_notBlank($option.val()) === view.value) ? current : ''); |
||||
oTemplate = oTemplate.replace('{{ text }}', $option.text()); |
||||
|
||||
options[options.length] = oTemplate; |
||||
} |
||||
} |
||||
|
||||
$dk = $(template); |
||||
$dk.find('.dk_options_inner').html(options.join('')); |
||||
|
||||
return $dk; |
||||
} |
||||
|
||||
function _notBlank(text) { |
||||
return ($.trim(text).length > 0) ? text : false; |
||||
} |
||||
|
||||
$(function () { |
||||
|
||||
// Handle click events on the dropdown toggler
|
||||
$('.dk_toggle').live('click', function (e) { |
||||
var $dk = $(this).parents('.dk_container').first(); |
||||
|
||||
_openDropdown($dk); |
||||
|
||||
if ("ontouchstart" in window) { |
||||
$dk.addClass('dk_touch'); |
||||
$dk.find('.dk_options_inner').addClass('scrollable vertical'); |
||||
} |
||||
|
||||
e.preventDefault(); |
||||
return false; |
||||
}); |
||||
|
||||
// Handle click events on individual dropdown options
|
||||
$('.dk_options a').live(($.browser.msie ? 'mousedown' : 'click'), function (e) { |
||||
var |
||||
$option = $(this), |
||||
$dk = $option.parents('.dk_container').first(), |
||||
data = $dk.data('dropkick') |
||||
; |
||||
|
||||
_closeDropdown($dk); |
||||
_updateFields($option, $dk); |
||||
_setCurrent($option.parent(), $dk); |
||||
|
||||
e.preventDefault(); |
||||
return false; |
||||
}); |
||||
|
||||
// Setup keyboard nav
|
||||
$(document).bind('keydown.dk_nav', function (e) { |
||||
var |
||||
// Look for an open dropdown...
|
||||
$open = $('.dk_container.dk_open'), |
||||
|
||||
// Look for a focused dropdown
|
||||
$focused = $('.dk_container.dk_focus'), |
||||
|
||||
// Will be either $open, $focused, or null
|
||||
$dk = null |
||||
; |
||||
|
||||
// If we have an open dropdown, key events should get sent to that one
|
||||
if ($open.length) { |
||||
$dk = $open; |
||||
} else if ($focused.length && !$open.length) { |
||||
// But if we have no open dropdowns, use the focused dropdown instead
|
||||
$dk = $focused; |
||||
} |
||||
|
||||
if ($dk) { |
||||
_handleKeyBoardNav(e, $dk); |
||||
} |
||||
}); |
||||
}); |
||||
})(jQuery, window, document); |
@ -0,0 +1,23 @@
|
||||
|
||||
(function($){var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};$.toJSON=typeof JSON==='object'&&JSON.stringify?JSON.stringify:function(o){if(o===null){return'null';} |
||||
var type=typeof o;if(type==='undefined'){return undefined;} |
||||
if(type==='number'||type==='boolean'){return''+o;} |
||||
if(type==='string'){return $.quoteString(o);} |
||||
if(type==='object'){if(typeof o.toJSON==='function'){return $.toJSON(o.toJSON());} |
||||
if(o.constructor===Date){var month=o.getUTCMonth()+1,day=o.getUTCDate(),year=o.getUTCFullYear(),hours=o.getUTCHours(),minutes=o.getUTCMinutes(),seconds=o.getUTCSeconds(),milli=o.getUTCMilliseconds();if(month<10){month='0'+month;} |
||||
if(day<10){day='0'+day;} |
||||
if(hours<10){hours='0'+hours;} |
||||
if(minutes<10){minutes='0'+minutes;} |
||||
if(seconds<10){seconds='0'+seconds;} |
||||
if(milli<100){milli='0'+milli;} |
||||
if(milli<10){milli='0'+milli;} |
||||
return'"'+year+'-'+month+'-'+day+'T'+ |
||||
hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} |
||||
if(o.constructor===Array){var ret=[];for(var i=0;i<o.length;i++){ret.push($.toJSON(o[i])||'null');} |
||||
return'['+ret.join(',')+']';} |
||||
var name,val,pairs=[];for(var k in o){type=typeof k;if(type==='number'){name='"'+k+'"';}else if(type==='string'){name=$.quoteString(k);}else{continue;} |
||||
type=typeof o[k];if(type==='function'||type==='undefined'){continue;} |
||||
val=$.toJSON(o[k]);pairs.push(name+':'+val);} |
||||
return'{'+pairs.join(',')+'}';}};$.evalJSON=typeof JSON==='object'&&JSON.parse?JSON.parse:function(src){return eval('('+src+')');};$.secureEvalJSON=typeof JSON==='object'&&JSON.parse?JSON.parse:function(src){var filtered=src.replace(/\\["\\\/bfnrtu]/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered)){return eval('('+src+')');}else{throw new SyntaxError('Error parsing JSON, source is not valid.');}};$.quoteString=function(string){if(string.match(escapeable)){return'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;} |
||||
c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';} |
||||
return'"'+string+'"';};})(jQuery); |
@ -0,0 +1,264 @@
|
||||
/** |
||||
* SlickGrid Enhancement Pager |
||||
* |
||||
* An easy-to-use slickgrid pager. |
||||
* https://github.com/kingleema/SlickGridEnhancementPager
|
||||
* Released under the MIT license. |
||||
*
|
||||
* Copyright 2012 KingleeMa <https://github.com/kingleema>
|
||||
* |
||||
*/ |
||||
(function ($) { |
||||
function EnhancementPager(paramObj) { |
||||
var waiting = parseInt(paramObj.waiting); |
||||
if (isNaN(waiting)) { |
||||
waiting = 30000; |
||||
} |
||||
|
||||
var param = { pageSize: 10, pageIndex: 1 }; |
||||
|
||||
for (var attrname in paramObj.params) { |
||||
param[attrname] = paramObj.params[attrname]; |
||||
} |
||||
|
||||
$.ajax({ |
||||
url: paramObj.remoteUrl, |
||||
type: 'POST', |
||||
cache: false, |
||||
data: param , |
||||
dataType: "text", |
||||
crossDomain: false, |
||||
timeout: waiting, |
||||
beforeSend: function() { |
||||
paramObj.container.html('<span class="dataloading"> </span>'); |
||||
}, |
||||
error: function (XMLHttpRequest, textStatus, errorThrown) { |
||||
paramObj.container.html('<span style="position:absolute;top:5px;left:5px;color:red;">Error! ' + errorThrown + '</span>'); |
||||
}, |
||||
success: function (data) { |
||||
var total = $.evalJSON(data).Total; |
||||
pagecount = parseInt(Math.floor(parseFloat(total / 10)) + 1); |
||||
initPager(pagecount, paramObj.pagerType, paramObj.trans, waiting); |
||||
|
||||
getData(1, paramObj.remoteUrl, paramObj.pagerType, paramObj.params, waiting); |
||||
} |
||||
}); |
||||
|
||||
function initPager(pagecount, pagertype, trans, waiting) { |
||||
paramObj.container.html(''); |
||||
$('<span class="perpage" title="Records count of per page"><select class="recordsperpage">\ |
||||
<option value="10">10</option>\ |
||||
<option value="25">25</option>\ |
||||
<option value="50">50</option>\ |
||||
<option value="100">100</option>\ |
||||
</select></span>\ |
||||
<span class="spacer"> </span>\ |
||||
<span class="pagelabel" style="vertical-align: middle;">Page</span>\ |
||||
<input class="currentpage" title="Current Page" type="text" value="1" style="vertical-align: middle;width:7px" />\ |
||||
<span style="vertical-align: middle;"> / </span>\ |
||||
<span id="totalpages" style="vertical-align: middle;">#</span>\ |
||||
<span class="spacer"> </span>\ |
||||
<a id="dataloading" href="javascript:;" class="button-base-class refresh" title="Refresh"></a>\ |
||||
<span class="spacer"> </span>\ |
||||
<span class="recordstate"><span class="recordstatelabel">Display</span> <span id="recordsegment"></span> / <span id="totalrecords"></span></span>\ |
||||
<a href="javascript:;" class="button-base-class currentrecords" title="Show/Hide Current Records State"></a>').appendTo(paramObj.container); |
||||
$('.currentpage').keydown(function (e) { |
||||
if (e.keyCode == 13) { |
||||
var changedvalue = 1; |
||||
if (isNaN(parseInt($(".currentpage").val()))) { |
||||
$(".currentpage").val(changedvalue); |
||||
} else { |
||||
changedvalue = parseInt($(".currentpage").val()); |
||||
if (changedvalue < 1) { |
||||
changedvalue = 1; |
||||
} |
||||
if (changedvalue > parseInt($("#totalpages").text())) { |
||||
changedvalue = parseInt($("#totalpages").text()); |
||||
} |
||||
$('.currentpage').val(changedvalue); |
||||
} |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
} |
||||
}); |
||||
if (pagertype == "slider") { |
||||
$('<span class="button-base-class pageminus" title="Previous Page"> </span>\ |
||||
<span class="pagerslider"></span>\ |
||||
<span class="button-base-class pageplus" title="Next Page"> </span>\ |
||||
<span class="spacer"> </span>').insertBefore($('.pagelabel')); |
||||
if (trans !== null && trans !== undefined) { |
||||
$.each(trans, function (k, v) { |
||||
if (k != "resultset_first" && k != "resultset_prev" && k != "resultset_next" && k != "resultset_last") { |
||||
if (k == "pagelabel" || k == "recordstatelabel") { |
||||
$('.' + k).text(v); |
||||
} else { |
||||
$('.' + k).attr("title", v); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
$(".pagerslider").slider({ |
||||
range: "min", |
||||
value: 1, |
||||
step: 1, |
||||
min: 1, |
||||
max: pagecount, |
||||
slide: function (event, ui) { |
||||
$(".currentpage").css("width", ui.value.toString().length * 7 + "px"); |
||||
var pd = ui.value; |
||||
$(".currentpage").val(pd); |
||||
}, |
||||
stop: function (event, ui) { |
||||
var changedvalue = ui.value; |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
} |
||||
}); |
||||
$(".pageplus").click(function () { |
||||
if (isNaN(parseInt($(".currentpage").val()))) { |
||||
$(".currentpage").val(1); |
||||
} |
||||
var changedvalue = parseInt($(".currentpage").val()) + 1; |
||||
if (changedvalue > parseInt($("#totalpages").text())) { |
||||
changedvalue = parseInt($("#totalpages").text()); |
||||
} |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
$(".pageminus").click(function () { |
||||
if (isNaN(parseInt($(".currentpage").val()))) { |
||||
$(".currentpage").val(1); |
||||
} |
||||
var changedvalue = parseInt($(".currentpage").val()) - 1; |
||||
if (changedvalue < 1) { |
||||
changedvalue = 1; |
||||
} |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
} else { |
||||
$('<a href="javascript:;" class="button-base-class resultset_first" title="First Page"></a>\ |
||||
<a href="javascript:;" class="button-base-class resultset_prev" title="Previous Page"></a>\ |
||||
<span class="spacer"> </span>').insertBefore($('.pagelabel')); |
||||
$('<span class="spacer"> </span>\ |
||||
<a href="javascript:;" class="button-base-class resultset_next" title="Next Page"></a>\ |
||||
<a href="javascript:;" class="button-base-class resultset_last" title="Last Page"></a>').insertAfter($('#totalpages')); |
||||
if (trans !== null && trans !== undefined) { |
||||
$.each(trans, function (k, v) { |
||||
if (k != "pageminus" && k != "pageplus") { |
||||
if (k == "pagelabel" || k == "recordstatelabel") { |
||||
$('.' + k).text(v); |
||||
} else { |
||||
$('.' + k).attr("title", v); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
$(".resultset_first").click(function () { |
||||
var changedvalue = 1; |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
$(".resultset_prev").click(function () { |
||||
if (isNaN(parseInt($(".currentpage").val()))) { |
||||
$(".currentpage").val(1); |
||||
} |
||||
var changedvalue = parseInt($(".currentpage").val()) - 1; |
||||
if (changedvalue < 1) { |
||||
changedvalue = 1; |
||||
} |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
$(".resultset_next").click(function () { |
||||
if (isNaN(parseInt($(".currentpage").val()))) { |
||||
$(".currentpage").val(1); |
||||
} |
||||
var changedvalue = parseInt($(".currentpage").val()) + 1; |
||||
if (changedvalue > parseInt($("#totalpages").text())) { |
||||
changedvalue = parseInt($("#totalpages").text()); |
||||
} |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
$(".resultset_last").click(function () { |
||||
var changedvalue = parseInt($("#totalpages").text()); |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
} |
||||
$('.recordsperpage').dropkick({ |
||||
change: function (value, label) { |
||||
var changedvalue = 1; |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
} |
||||
}); |
||||
$(".refresh").click(function () { |
||||
if (isNaN(parseInt($(".currentpage").val()))) { |
||||
$(".currentpage").val(1); |
||||
} |
||||
var changedvalue = parseInt($(".currentpage").val()); |
||||
if (changedvalue < 1) { |
||||
changedvalue = 1; |
||||
} |
||||
if (changedvalue > parseInt($("#totalpages").text())) { |
||||
changedvalue = parseInt($("#totalpages").text()); |
||||
} |
||||
getData(changedvalue, paramObj.remoteUrl, pagertype, paramObj.params, waiting); |
||||
}); |
||||
$(".currentrecords").click(function () { |
||||
$(".recordstate").toggle("fast"); |
||||
}); |
||||
} |
||||
function getData(changedvalue, url, pagertype, params, waiting) { |
||||
var pagesize = $('.recordsperpage').val(); |
||||
var pageindex = changedvalue; |
||||
var postedData = {}; |
||||
postedData['pageSize'] = pagesize; |
||||
postedData['pageIndex'] = pageindex; |
||||
if (params !== null && params != undefined) { |
||||
$.each(params, function (k, v) { |
||||
postedData[k] = v; |
||||
}); |
||||
} |
||||
//alert();
|
||||
$.ajax({ |
||||
url: url, |
||||
type: 'POST', |
||||
cache: false, |
||||
dataType: "text", |
||||
crossDomain: true, |
||||
data: postedData, |
||||
timeout: waiting, |
||||
beforeSend: function() { |
||||
$("#dataloading").attr("disabled","disabled"); |
||||
$('#dataloading').removeClass('refresh'); |
||||
$('#dataloading').addClass('dataloading'); |
||||
}, |
||||
error: function (XMLHttpRequest, textStatus, errorThrown) { |
||||
paramObj.container.html('<span style="position:absolute;top:5px;left:5px;color:red;">Error! ' + errorThrown + '</span>'); |
||||
}, |
||||
success: function (data) { |
||||
var total = $.evalJSON(data).Total; |
||||
var rows = $.evalJSON($.evalJSON(data).Rows); |
||||
//alert(rows.user_id);
|
||||
paramObj.datagrid.setData(rows); |
||||
paramObj.datagrid.render(); |
||||
$(".currentpage").css("width", changedvalue.toString().length * 7 + "px"); |
||||
$(".currentpage").val(changedvalue); |
||||
var currentvalue = changedvalue; |
||||
var pagesize = parseInt($('.recordsperpage').val()); |
||||
var fromvalue = (currentvalue - 1) * pagesize + 1; |
||||
var tovalue = fromvalue + pagesize - 1; |
||||
if (tovalue > total) { |
||||
tovalue = total; |
||||
} |
||||
$("#recordsegment").text(fromvalue + "-" + tovalue); |
||||
$("#totalrecords").text(total); |
||||
var totalpages = parseInt(Math.floor(parseFloat(total / pagesize)) + 1); |
||||
$("#totalpages").text(totalpages); |
||||
if (pagertype == "slider") { |
||||
$(".pagerslider").slider("value", changedvalue); |
||||
$(".pagerslider").slider("option", "max", totalpages); |
||||
} |
||||
$("#dataloading").removeAttr("disabled"); |
||||
$('#dataloading').removeClass('dataloading'); |
||||
$('#dataloading').addClass('refresh'); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
$.extend(true, window, { Slick: { Controls: { EnhancementPager: EnhancementPager}} }); |
||||
})(jQuery); |
Loading…
Reference in new issue