/**
* PUI Object
*/
var PUI = {
zindex : 1000,
gridColumns: {
'1': 'ui-grid-col-12',
'2': 'ui-grid-col-6',
'3': 'ui-grid-col-4',
'4': 'ui-grid-col-3',
'6': 'ui-grid-col-2',
'12': 'ui-grid-col-11'
},
charSet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
/**
* Aligns container scrollbar to keep item in container viewport, algorithm copied from jquery-ui menu widget
*/
scrollInView: function(container, item) {
var borderTop = parseFloat(container.css('borderTopWidth')) || 0,
paddingTop = parseFloat(container.css('paddingTop')) || 0,
offset = item.offset().top - container.offset().top - borderTop - paddingTop,
scroll = container.scrollTop(),
elementHeight = container.height(),
itemHeight = item.outerHeight(true);
if(offset < 0) {
container.scrollTop(scroll + offset);
}
else if((offset + itemHeight) > elementHeight) {
container.scrollTop(scroll + offset - elementHeight + itemHeight);
}
},
generateRandomId: function() {
var id = '';
for (var i = 1; i <= 10; i++) {
var randPos = Math.floor(Math.random() * this.charSet.length);
id += this.charSet[randPos];
}
return id;
},
isIE: function(version) {
return (this.browser.msie && parseInt(this.browser.version, 10) === version);
},
escapeRegExp: function(text) {
return text.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
},
escapeHTML: function(value) {
return value.replace(/&/g,'&').replace(//g,'>');
},
escapeClientId: function(id) {
return "#" + id.replace(/:/g,"\\:");
},
clearSelection: function() {
if(window.getSelection) {
if(window.getSelection().empty) {
window.getSelection().empty();
} else if(window.getSelection().removeAllRanges) {
window.getSelection().removeAllRanges();
}
} else if(document.selection && document.selection.empty) {
document.selection.empty();
}
},
inArray: function(arr, item) {
for(var i = 0; i < arr.length; i++) {
if(arr[i] === item) {
return true;
}
}
return false;
},
calculateScrollbarWidth: function() {
if(!this.scrollbarWidth) {
if(this.browser.msie) {
var $textarea1 = $('')
.css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body'),
$textarea2 = $('')
.css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body');
this.scrollbarWidth = $textarea1.width() - $textarea2.width();
$textarea1.add($textarea2).remove();
}
else {
var $div = $('
').appendTo(this.container);
this.icon = $('
').appendTo(this.box);
this.disabled = this.element.prop('disabled');
this.label = $('label[for="' + this.element.attr('id') + '"]');
if(this.isChecked()) {
this.box.addClass('ui-state-active');
this.icon.addClass('fa fa-fw fa-check');
}
if(this.disabled) {
this.box.addClass('ui-state-disabled');
} else {
this._bindEvents();
}
},
_bindEvents: function() {
var $this = this;
this.box.on('mouseover.puicheckbox', function() {
if(!$this.isChecked())
$this.box.addClass('ui-state-hover');
})
.on('mouseout.puicheckbox', function() {
$this.box.removeClass('ui-state-hover');
})
.on('click.puicheckbox', function() {
$this.toggle();
});
this.element.on('focus.puicheckbox', function() {
if($this.isChecked()) {
$this.box.removeClass('ui-state-active');
}
$this.box.addClass('ui-state-focus');
})
.on('blur.puicheckbox', function() {
if($this.isChecked()) {
$this.box.addClass('ui-state-active');
}
$this.box.removeClass('ui-state-focus');
})
.on('keydown.puicheckbox', function(e) {
var keyCode = $.ui.keyCode;
if(e.which == keyCode.SPACE) {
e.preventDefault();
}
})
.on('keyup.puicheckbox', function(e) {
var keyCode = $.ui.keyCode;
if(e.which == keyCode.SPACE) {
$this.toggle(true);
e.preventDefault();
}
});
this.label.on('click.puicheckbox', function(e) {
$this.toggle();
e.preventDefault();
});
},
toggle: function(keypress) {
if(this.isChecked()) {
this.uncheck(keypress);
} else {
this.check(keypress);
}
this._trigger('change', null, this.isChecked());
},
isChecked: function() {
return this.element.prop('checked');
},
check: function(activate, silent) {
if(!this.isChecked()) {
this.element.prop('checked', true);
this.icon.addClass('fa fa-fw fa-check');
if(!activate) {
this.box.addClass('ui-state-active');
}
if(!silent) {
this.element.trigger('change');
}
}
},
uncheck: function() {
if(this.isChecked()) {
this.element.prop('checked', false);
this.box.removeClass('ui-state-active');
this.icon.removeClass('fa fa-fw fa-check');
this.element.trigger('change');
}
},
_unbindEvents: function() {
this.box.off('mouseover.puicheckbox mouseout.puicheckbox click.puicheckbox');
this.element.off('focus.puicheckbox blur.puicheckbox keydown.puicheckbox keyup.puicheckbox');
if (this.label.length) {
this.label.off('click.puicheckbox');
}
},
disable: function() {
this.box.prop('disabled', true);
this.box.attr('aria-disabled', true);
this.box.addClass('ui-state-disabled').removeClass('ui-state-hover');
this._unbindEvents();
},
enable: function() {
this.box.prop('disabled', false);
this.box.attr('aria-disabled', false);
this.box.removeClass('ui-state-disabled');
this._bindEvents();
},
_destroy: function() {
this._unbindEvents();
this.container.removeClass('ui-chkbox ui-widget');
this.box.remove();
this.element.unwrap().unwrap();
}
});
})();
/**
* PrimeUI Datagrid Widget
*/
(function() {
$.widget("primeui.puidatagrid", {
options: {
columns: 3,
datasource: null,
paginator: null,
header: null,
footer: null,
content: null,
lazy: false,
template: null
},
_create: function() {
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
this.element.addClass('ui-datagrid ui-widget');
//header
if(this.options.header) {
this.element.append('');
}
//content
this.content = $('
').appendTo(this.element);
//footer
if(this.options.footer) {
this.element.append('');
}
//data
if(this.options.datasource) {
this._initDatasource();
}
},
_onDataInit: function(data) {
this._onDataUpdate(data);
this._initPaginator();
},
_onDataUpdate: function(data) {
this.data = data;
if(!this.data) {
this.data = [];
}
this.reset();
this._renderData();
},
_onLazyLoad: function(data) {
this.data = data;
if(!this.data) {
this.data = [];
}
this._renderData();
},
reset: function() {
if(this.paginator) {
this.paginator.puipaginator('setState', {
page: 0,
totalRecords: this.options.lazy ? this.options.paginator.totalRecords : this.data.length
});
}
},
paginate: function() {
if(this.options.lazy) {
this.options.datasource.call(this, this._onLazyLoad, this._createStateMeta());
}
else {
this._renderData();
}
},
_renderData: function() {
if(this.data) {
this.content.html('');
var firstNonLazy = this._getFirst(),
first = this.options.lazy ? 0 : firstNonLazy,
rows = this._getRows(),
gridRow = null;
for(var i = first; i < (first + rows); i++) {
var dataValue = this.data[i];
if(dataValue) {
var gridColumn = $('
').appendTo(this.content),
markup = this._createItemContent(dataValue);
gridColumn.append(markup);
}
}
}
},
_getFirst: function() {
if(this.paginator) {
var page = this.paginator.puipaginator('option', 'page'),
rows = this.paginator.puipaginator('option', 'rows');
return (page * rows);
}
else {
return 0;
}
},
_getRows: function() {
if(this.options.paginator)
return this.paginator ? this.paginator.puipaginator('option', 'rows') : this.options.paginator.rows;
else
return this.data ? this.data.length : 0;
},
_createStateMeta: function() {
var state = {
first: this._getFirst(),
rows: this._getRows()
};
return state;
},
_initPaginator: function() {
var $this = this;
if(this.options.paginator) {
this.options.paginator.paginate = function(event, state) {
$this.paginate();
};
this.options.paginator.totalRecords = this.options.lazy ? this.options.paginator.totalRecords : this.data.length;
this.paginator = $('
').insertAfter(this.content).puipaginator(this.options.paginator);
}
},
_initDatasource: function() {
if($.isArray(this.options.datasource)) {
this._onDataInit(this.options.datasource);
}
else {
if($.type(this.options.datasource) === 'string') {
var $this = this,
dataURL = this.options.datasource;
this.options.datasource = function() {
$.ajax({
type: 'GET',
url: dataURL,
dataType: "json",
context: $this,
success: function (response) {
this._onDataInit(response);
}
});
};
}
if($.type(this.options.datasource) === 'function') {
if(this.options.lazy)
this.options.datasource.call(this, this._onDataInit, {first:0, rows: this._getRows()});
else
this.options.datasource.call(this, this._onDataInit);
}
}
},
_updateDatasource: function(datasource) {
this.options.datasource = datasource;
if($.isArray(this.options.datasource)) {
this._onDataUpdate(this.options.datasource);
}
else if($.type(this.options.datasource) === 'function') {
if(this.options.lazy)
this.options.datasource.call(this, this._onDataUpdate, {first:0, rows: this._getRows()});
else
this.options.datasource.call(this, this._onDataUpdate);
}
},
_setOption: function(key, value) {
if(key === 'datasource') {
this._updateDatasource(value);
}
else {
$.Widget.prototype._setOption.apply(this, arguments);
}
},
_createItemContent: function(obj) {
if(this.options.template) {
var templateContent = this.options.template.html();
Mustache.parse(templateContent);
return Mustache.render(templateContent, obj);
}
else {
return this.options.content.call(this, obj);
}
}
});
})();
/**
* PrimeUI Datascroller Widget
*/
(function() {
$.widget("primeui.puidatascroller", {
options: {
header: null,
buffer: 0.9,
chunkSize: 10,
datasource: null,
lazy: false,
content: null,
template: null,
mode: 'document',
loader: null,
scrollHeight: null,
totalSize: null
},
_create: function() {
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
this.element.addClass('ui-datascroller ui-widget');
if(this.options.header) {
this.header = this.element.append('').children('.ui-datascroller-header');
}
this.content = this.element.append('
').children('.ui-datascroller-content');
this.list = this.content.append('
').children('.ui-datascroller-list');
this.loaderContainer = this.content.append('
').children('.ui-datascroller-loader');
this.loadStatus = $('
');
this.loading = false;
this.allLoaded = false;
this.offset = 0;
if(this.options.mode === 'self') {
this.element.addClass('ui-datascroller-inline');
if(this.options.scrollHeight) {
this.content.css('height', this.options.scrollHeight);
}
}
if(this.options.loader) {
this.bindManualLoader();
}
else {
this.bindScrollListener();
}
if(this.options.datasource) {
if($.isArray(this.options.datasource)) {
this._onDataInit(this.options.datasource);
}
else {
if($.type(this.options.datasource) === 'string') {
var $this = this,
dataURL = this.options.datasource;
this.options.datasource = function() {
$.ajax({
type: 'GET',
url: dataURL,
dataType: "json",
context: $this,
success: function (response) {
this._onDataInit(response);
}
});
};
}
if($.type(this.options.datasource) === 'function') {
if(this.options.lazy)
this.options.datasource.call(this, this._onLazyLoad, {first:this.offset});
else
this.options.datasource.call(this, this._onDataInit);
}
}
}
},
_onDataInit: function(data) {
this.data = data||[];
this.options.totalSize = this.data.length;
this._load();
},
_onLazyLoad: function(data) {
this._renderData(data, 0, this.options.chunkSize);
this._onloadComplete();
},
bindScrollListener: function() {
var $this = this;
if(this.options.mode === 'document') {
var win = $(window),
doc = $(document),
$this = this,
NS = 'scroll.' + this.id;
win.off(NS).on(NS, function () {
if(win.scrollTop() >= ((doc.height() * $this.options.buffer) - win.height()) && $this.shouldLoad()) {
$this._load();
}
});
}
else {
this.content.on('scroll', function () {
var scrollTop = this.scrollTop,
scrollHeight = this.scrollHeight,
viewportHeight = this.clientHeight;
if((scrollTop >= ((scrollHeight * $this.options.buffer) - (viewportHeight))) && $this.shouldLoad()) {
$this._load();
}
});
}
},
bindManualLoader: function() {
var $this = this;
this.options.loader.on('click.dataScroller', function(e) {
$this._load();
e.preventDefault();
});
},
_load: function() {
this.loading = true;
this.loadStatus.appendTo(this.loaderContainer);
if(this.options.loader) {
this.options.loader.hide();
}
if(this.options.lazy) {
this.options.datasource.call(this, this._onLazyLoad, {first: this.offset});
}
else {
this._renderData(this.data, this.offset, (this.offset + this.options.chunkSize));
this._onloadComplete();
}
},
_renderData: function(data, start, end) {
if(data && data.length) {
for(var i = start; i < end; i++) {
var listItem = $('
'),
content = this._createItemContent(data[i]);
listItem.append(content);
this.list.append(listItem);
}
}
},
shouldLoad: function() {
return (!this.loading && !this.allLoaded);
},
_createItemContent: function(obj) {
if(this.options.template) {
var template = this.options.template.html();
Mustache.parse(template);
return Mustache.render(template, obj);
}
else {
return this.options.content.call(this, obj);
}
},
_onloadComplete: function() {
this.offset += this.options.chunkSize;
this.loading = false;
this.allLoaded = this.offset >= this.options.totalSize;
this.loadStatus.remove();
if(this.options.loader && !this.allLoaded) {
this.options.loader.show();
}
}
});
})();
/**
* PrimeUI Datatable Widget
*/
(function() {
$.widget("primeui.puidatatable", {
options: {
columns: null,
datasource: null,
paginator: null,
globalFilter:null,
selectionMode: null,
caption: null,
footer: null,
sortField: null,
sortOrder: 1,
sortMeta: [],
sortMode: null,
scrollable: false,
scrollHeight: null,
scrollWidth: null,
responsive: false,
expandableRows: false,
expandedRowContent: null,
rowExpandMode: 'multiple',
draggableColumns: false,
resizableColumns: false,
columnResizeMode: 'fit',
draggableRows: false,
filterDelay: 300,
stickyHeader: false,
editMode: null,
tabindex: 0,
emptyMessage: 'No records found',
sort: null,
rowSelect: null,
rowUnselect: null,
rowSelectContextMenu: null,
rowCollapse: null,
rowExpand: null,
colReorder: null,
colResize: null,
rowReorder: null,
cellEdit: null
},
_create: function() {
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
this.element.addClass('ui-datatable ui-widget');
if(this.options.responsive) {
this.element.addClass('ui-datatable-reflow');
}
if(this.options.scrollable) {
this._createScrollableDatatable();
}
else {
this._createRegularDatatable();
}
if(this.options.datasource) {
if($.isArray(this.options.datasource)) {
this._onDataInit(this.options.datasource);
}
else {
if($.type(this.options.datasource) === 'string') {
var $this = this,
dataURL = this.options.datasource;
this.options.datasource = function() {
$.ajax({
type: 'GET',
url: dataURL,
dataType: "json",
context: $this,
success: function (response) {
this._onDataInit(response);
}
});
};
}
if($.type(this.options.datasource) === 'function') {
if(this.options.lazy)
this.options.datasource.call(this, this._onDataInit, {first:0, rows:this._getRows(), sortField:this.options.sortField, sortOrder:this.options.sortOrder, filters: this._createFilterMap()});
else
this.options.datasource.call(this, this._onDataInit);
}
}
}
},
_createRegularDatatable: function() {
this.tableWrapper = $('
').appendTo(this.element);
this.table = $('
').appendTo(this.tableWrapper);
this.thead = this.table.children('thead');
this.tbody = this.table.children('tbody').addClass('ui-datatable-data ui-widget-content');
if(this.containsFooter()) {
this.tfoot = this.thead.after('
').next();
}
},
_createScrollableDatatable: function() {
this.element.append('')
.append('
');
this.thead = this.element.find('> .ui-datatable-scrollable-header > .ui-datatable-scrollable-header-box > table > thead');
this.tbody = this.element.find('> .ui-datatable-scrollable-body > table > tbody');
if(this.containsFooter()) {
this.element.append('');
this.tfoot = this.element.find('> .ui-datatable-scrollable-footer > .ui-datatable-scrollable-footer-box > table > tfoot');
}
},
_initialize: function() {
var $this = this;
this._initHeader();
this._initFooter();
if(this.options.caption) {
this.element.prepend('');
}
if(this.options.paginator) {
this.options.paginator.paginate = function(event, state) {
$this.paginate();
};
this.options.paginator.totalRecords = this.options.lazy ? this.options.paginator.totalRecords : this.data.length;
this.paginator = $('
').insertAfter(this.tableWrapper).puipaginator(this.options.paginator);
if(this.options.paginator.contentLeft) {
this.paginator.prepend(this.options.paginator.contentLeft.call());
}
if(this.options.paginator.contentRight) {
this.paginator.append(this.options.paginator.contentRight.call());
}
}
if(this.options.footer) {
this.element.append('');
}
if(this._isSortingEnabled()) {
this._initSorting();
}
if(this.hasFiltering) {
this._initFiltering();
}
if(this.options.selectionMode) {
this._initSelection();
}
if(this.options.expandableRows) {
this._initExpandableRows();
}
if(this.options.draggableColumns) {
this._initDraggableColumns();
}
if(this.options.stickyHeader) {
this._initStickyHeader();
}
if ((this.options.sortField && this.options.sortOrder) || this.options.sortMeta.length) {
this.sortByDefault();
}
else {
this._renderData();
}
if(this.options.scrollable) {
this._initScrolling();
}
if(this.options.resizableColumns) {
this._initResizableColumns();
}
if(this.options.draggableRows) {
this._initDraggableRows();
}
if(this.options.editMode) {
this._initEditing();
}
},
_initHeader: function() {
if(this.options.headerRows) {
for(var i = 0; i < this.options.headerRows.length; i++) {
this._initHeaderColumns(this.options.headerRows[i].columns);
}
}
else if(this.options.columns) {
this._initHeaderColumns(this.options.columns);
}
},
_initFooter: function() {
if(this.containsFooter()) {
if(this.options.footerRows) {
for(var i = 0; i < this.options.footerRows.length; i++) {
this._initFooterColumns(this.options.footerRows[i].columns);
}
}
else if(this.options.columns) {
this._initFooterColumns(this.options.columns);
}
}
},
_initHeaderColumns: function(columns) {
var headerRow = $('
|
').appendTo(this.thead),
$this = this;
$.each(columns, function(i, col) {
var cell = $('
| ').data('field', col.field).uniqueId().appendTo(headerRow);
if(col.headerClass) {
cell.addClass(col.headerClass);
}
if(col.headerStyle) {
cell.attr('style', col.headerStyle);
}
if(col.headerText)
cell.children('.ui-column-title').text(col.headerText);
else if(col.headerContent)
cell.children('.ui-column-title').append(col.headerContent.call(this, col));
if(col.rowspan) {
cell.attr('rowspan', col.rowspan);
}
if(col.colspan) {
cell.attr('colspan', col.colspan);
}
if(col.sortable) {
cell.addClass('ui-sortable-column')
.data('order', 0)
.append('
');
}
if(col.filter) {
$this.hasFiltering = true;
var filterElement = $('
').puiinputtext().data({
'field': col.field,
'filtermatchmode': col.filterMatchMode||'startsWith'
}).appendTo(cell);
if(col.filterFunction) {
filterElement.on('filter', function(event, dataValue, filterValue) {
return col.filterFunction.call($this, dataValue, filterValue);
});
}
}
});
},
_initFooterColumns: function(columns) {
var footerRow = $('
|
').appendTo(this.tfoot);
$.each(columns, function(i, col) {
var cell = $('
| ');
if(col.footerText) {
cell.text(col.footerText);
}
if(col.rowspan) {
cell.attr('rowspan', col.rowspan);
}
if(col.colspan) {
cell.attr('colspan', col.colspan);
}
cell.appendTo(footerRow);
});
},
_indicateInitialSortColumn: function(sortField, sortOrder) {
var $this = this;
$.each(this.sortableColumns, function(i, column) {
var $column = $(column),
data = $column.data();
if (sortField === data.field) {
var sortIcon = $column.children('.ui-sortable-column-icon');
$column.data('order', sortOrder).removeClass('ui-state-hover').addClass('ui-state-active');
if(sortOrder == -1)
sortIcon.removeClass('fa-sort fa-sort-asc').addClass('fa-sort-desc');
else if(sortOrder == 1)
sortIcon.removeClass('fa-sort fa-sort-desc').addClass('fa-sort-asc');
}
});
},
_indicateInitialSortColumns: function() {
var $this = this;
for(var i = 0; i < this.options.sortMeta.length; i++) {
var meta = this.options.sortMeta[i];
this._indicateInitialSortColumn(meta.field, meta.order);
}
},
_onDataInit: function(data) {
this.data = data;
if(!this.data) {
this.data = [];
}
this._initialize();
},
_onDataUpdate: function(data) {
this.data = data;
if(!this.data) {
this.data = [];
}
this.reset();
this._renderData();
},
_onLazyLoad: function(data) {
this.data = data;
if(!this.data) {
this.data = [];
}
this._renderData();
},
reset: function() {
if(this.options.selectionMode) {
this.selection = [];
}
if(this.paginator) {
this.paginator.puipaginator('setState', {
page: 0,
totalRecords: this.options.lazy ? this.options.paginator.totalRecords : this.data.length
});
}
this.thead.find('> tr > th.ui-sortable-column').data('order', 0).filter('.ui-state-active').removeClass('ui-state-active')
.children('span.ui-sortable-column-icon').removeClass('fa-sort-asc fa-sort-desc').addClass('fa-sort');
},
_isMultiSort: function() {
if(this.options.sortMode === 'multiple')
return true;
else
return false;
},
_resetSortState: function(column) {
this.sortableColumns.filter('.ui-state-active').data('order', 0).removeClass('ui-state-active').children('span.ui-sortable-column-icon')
.removeClass('fa-sort-asc fa-sort-desc').addClass('fa-sort');
},
_initSorting: function() {
var $this = this;
this.sortableColumns = this.thead.find('> tr > th.ui-sortable-column');
this.sortableColumns.on('mouseover.puidatatable', function() {
var column = $(this);
if(!column.hasClass('ui-state-active'))
column.addClass('ui-state-hover');
})
.on('mouseout.puidatatable', function() {
var column = $(this);
if(!column.hasClass('ui-state-active'))
column.removeClass('ui-state-hover');
})
.on('click.puidatatable', function(event) {
if(!$(event.target).is('th,span')) {
return;
}
var column = $(this),
sortField = column.data('field'),
order = column.data('order'),
sortOrder = (order === 0) ? 1 : (order * -1),
sortIcon = column.children('.ui-sortable-column-icon'),
metaKey = event.metaKey||event.ctrlKey;
if($this._isMultiSort()) {
if(metaKey) {
$this._addSortMeta({field: sortField, order: sortOrder});
$this.sort();
}
else {
$this.options.sortMeta = [];
$this._addSortMeta({field: sortField, order: sortOrder});
$this._resetSortState(column);
$this.sort();
}
}
else {
//update state
$this.options.sortField = sortField;
$this.options.sortOrder = sortOrder;
$this._resetSortState(column);
$this.sort();
}
//update visuals
column.data('order', sortOrder).removeClass('ui-state-hover').addClass('ui-state-active');
if(sortOrder === -1)
sortIcon.removeClass('fa-sort fa-sort-asc').addClass('fa-sort-desc');
else if(sortOrder === 1)
sortIcon.removeClass('fa-sort fa-sort-desc').addClass('fa-sort-asc');
$this._trigger('sort', event, {'sortOrder': sortOrder, 'sortField': sortField});
});
},
_addSortMeta: function(meta) {
var index = -1;
for(var i = 0; i < this.options.sortMeta.length; i++) {
if(this.options.sortMeta[i].field === meta.field) {
index = i;
}
}
if(index >= 0)
this.options.sortMeta[index] = meta;
else
this.options.sortMeta.push(meta);
},
paginate: function() {
if(this.options.lazy) {
this.options.datasource.call(this, this._onLazyLoad, this._createStateMeta());
}
else {
this._renderData();
}
},
_multipleSort: function() {
var $this = this;
function multisort(data1,data2,sortMeta,index) {
var value1 = data1[sortMeta[index].field],
value2 = data2[sortMeta[index].field],
result = null;
if (typeof value1 == 'string' || value1 instanceof String) {
if (value1.localeCompare && (value1 != value2)) {
return (sortMeta[index].order * value1.localeCompare(value2));
}
}
else {
result = (value1 < value2) ? -1 : 1;
}
if(value1 == value2) {
return (sortMeta.length - 1) > (index) ? (multisort(data1, data2, sortMeta, index + 1)) : 0;
}
return (sortMeta[index].order * result);
}
this.data.sort(function (data1,data2) {
return multisort(data1, data2, $this.options.sortMeta, 0);
});
this._renderData();
},
sort: function() {
if(this.options.lazy) {
this.options.datasource.call(this, this._onLazyLoad, this._createStateMeta());
}
else {
if(this._isMultiSort())
this._multipleSort();
else
this._singleSort();
}
},
_singleSort: function() {
var $this = this;
this.data.sort(function(data1, data2) {
var value1 = data1[$this.options.sortField], value2 = data2[$this.options.sortField],
result = null;
if (typeof value1 == 'string' || value1 instanceof String) {
if ( value1.localeCompare ) {
return ($this.options.sortOrder * value1.localeCompare(value2));
}
else {
if (value1.toLowerCase) {
value1 = value1.toLowerCase();
}
if (value2.toLowerCase) {
value2 = value2.toLowerCase();
}
result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
}
}
else {
result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
}
return ($this.options.sortOrder * result);
});
if(this.paginator) {
this.paginator.puipaginator('option', 'page', 0);
}
this._renderData();
},
sortByField: function(a, b) {
var aName = a.name.toLowerCase();
var bName = b.name.toLowerCase();
return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
},
sortByDefault: function() {
if(this._isMultiSort()) {
if(this.options.sortMeta) {
this._indicateInitialSortColumns();
this.sort();
}
}
else {
this._indicateInitialSortColumn(this.options.sortField, this.options.sortOrder);
this.sort();
}
},
_renderData: function() {
this.tbody.html('');
var dataToRender = this.filteredData||this.data;
if(dataToRender && dataToRender.length) {
var firstNonLazy = this._getFirst(),
first = this.options.lazy ? 0 : firstNonLazy,
rows = this._getRows();
for(var i = first; i < (first + rows); i++) {
var rowData = dataToRender[i];
if(rowData) {
var row = $('
|
').appendTo(this.tbody),
zebraStyle = (i%2 === 0) ? 'ui-datatable-even' : 'ui-datatable-odd',
rowIndex = i;
row.addClass(zebraStyle);
row.data('rowdata', rowData);
if(this.options.selectionMode && this._isSelected(rowData)) {
row.addClass("ui-state-highlight");
}
for(var j = 0; j < this.options.columns.length; j++) {
var column = $('
| ').appendTo(row),
columnOptions = this.options.columns[j];
if(columnOptions.bodyClass) {
column.addClass(columnOptions.bodyClass);
}
if(columnOptions.bodyStyle) {
column.attr('style', columnOptions.bodyStyle);
}
if(columnOptions.editor) {
column.addClass('ui-editable-column').data({
'editor': columnOptions.editor,
'rowdata': rowData,
'field': columnOptions.field
});
}
if(columnOptions.content) {
var content = columnOptions.content.call(this, rowData, columnOptions);
if($.type(content) === 'string')
column.html(content);
else
column.append(content);
}
else if(columnOptions.rowToggler) {
column.append('
');
}
else if(columnOptions.field) {
column.text(rowData[columnOptions.field]);
}
if(this.options.responsive && columnOptions.headerText) {
column.prepend('
' + columnOptions.headerText + '');
}
}
}
}
}
else {
var emptyRow = $('
|
').appendTo(this.tbody);
var emptyColumn = $('
| ').attr('colspan',this.options.columns.length).appendTo(emptyRow);
emptyColumn.html(this.options.emptyMessage);
}
},
_getFirst: function() {
if(this.paginator) {
var page = this.paginator.puipaginator('option', 'page'),
rows = this.paginator.puipaginator('option', 'rows');
return (page * rows);
}
else {
return 0;
}
},
_getRows: function() {
return this.paginator ? this.paginator.puipaginator('option', 'rows') : (this.data ? this.data.length : 0);
},
_isSortingEnabled: function() {
var cols = this.options.columns;
if(cols) {
for(var i = 0; i < cols.length; i++) {
if(cols[i].sortable) {
return true;
}
}
}
return false;
},
_initSelection: function() {
var $this = this;
this.selection = [];
this.rowSelector = '> tr.ui-widget-content:not(.ui-datatable-empty-message,.ui-datatable-unselectable)';
//shift key based range selection
if(this._isMultipleSelection()) {
this.originRowIndex = 0;
this.cursorIndex = null;
}
this.tbody.off('mouseover.puidatatable mouseout.puidatatable mousedown.puidatatable click.puidatatable', this.rowSelector)
.on('mouseover.datatable', this.rowSelector, null, function() {
var element = $(this);
if(!element.hasClass('ui-state-highlight')) {
element.addClass('ui-state-hover');
}
})
.on('mouseout.datatable', this.rowSelector, null, function() {
var element = $(this);
if(!element.hasClass('ui-state-highlight')) {
element.removeClass('ui-state-hover');
}
})
.on('mousedown.datatable', this.rowSelector, null, function() {
$this.mousedownOnRow = true;
})
.on('click.datatable', this.rowSelector, null, function(e) {
$this._onRowClick(e, this);
$this.mousedownOnRow = false;
});
this._bindSelectionKeyEvents();
},
_onRowClick: function(event, rowElement) {
if(!$(event.target).is(':input,:button,a,.ui-c')) {
var row = $(rowElement),
selected = row.hasClass('ui-state-highlight'),
metaKey = event.metaKey||event.ctrlKey,
shiftKey = event.shiftKey;
this.focusedRow = row;
//unselect a selected row if metakey is on
if(selected && metaKey) {
this.unselectRow(row);
}
else {
//unselect previous selection if this is single selection or multiple one with no keys
if(this._isSingleSelection() || (this._isMultipleSelection() && !metaKey && !shiftKey)) {
if (this._isMultipleSelection()) {
var selections = this.getSelection();
for (var i = 0; i < selections.length; i++) {
this._trigger('rowUnselect', null, selections[i]);
}
}
this.unselectAllRows();
}
this.selectRow(row, false, event);
}
PUI.clearSelection();
}
},
onRowRightClick: function(event, rowElement) {
var row = $(rowElement),
selectedData = row.data('rowdata'),
selected = row.hasClass('ui-state-highlight');
if(this._isSingleSelection() || !selected) {
this.unselectAllRows();
}
this.selectRow(row, true);
this.dataSelectedByContextMenu = selectedData;
this._trigger('rowSelectContextMenu', event, selectedData);
PUI.clearSelection();
},
_bindSelectionKeyEvents: function() {
var $this = this;
this.tbody.attr('tabindex', this.options.tabindex).on('focus', function(e) {
//ignore mouse click on row
if(!$this.mousedownOnRow) {
$this.focusedRow = $this.tbody.children('tr.ui-widget-content').eq(0);
$this.focusedRow.addClass('ui-state-hover');
}
})
.on('blur', function() {
if($this.focusedRow) {
$this.focusedRow.removeClass('ui-state-hover');
$this.focusedRow = null;
}
})
.on('keydown', function(e) {
var keyCode = $.ui.keyCode,
key = e.which;
if($this.focusedRow) {
switch(key) {
case keyCode.UP:
var prevRow = $this.focusedRow.prev('tr.ui-widget-content');
if(prevRow.length) {
$this.focusedRow.removeClass('ui-state-hover');
$this.focusedRow = prevRow;
$this.focusedRow.addClass('ui-state-hover');
}
e.preventDefault();
break;
case keyCode.DOWN:
var nextRow = $this.focusedRow.next('tr.ui-widget-content');
if(nextRow.length) {
$this.focusedRow.removeClass('ui-state-hover');
$this.focusedRow = nextRow;
$this.focusedRow.addClass('ui-state-hover');
}
e.preventDefault();
break;
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
case keyCode.SPACE:
e.target = $this.focusedRow.children().eq(0).get(0);
$this._onRowClick(e, $this.focusedRow.get(0));
e.preventDefault();
break;
default:
break;
};
}
});
},
_isSingleSelection: function() {
return this.options.selectionMode === 'single';
},
_isMultipleSelection: function() {
return this.options.selectionMode === 'multiple';
},
unselectAllRows: function() {
this.tbody.children('tr.ui-state-highlight').removeClass('ui-state-highlight').attr('aria-selected', false);
this.selection = [];
},
unselectRow: function(row, silent) {
var unselectedData = row.data('rowdata');
row.removeClass('ui-state-highlight').attr('aria-selected', false);
this._removeSelection(unselectedData);
if(!silent) {
this._trigger('rowUnselect', null, unselectedData);
}
},
selectRow: function(row, silent, event) {
var selectedData = row.data('rowdata');
row.removeClass('ui-state-hover').addClass('ui-state-highlight').attr('aria-selected', true);
this._addSelection(selectedData);
if(!silent) {
this._trigger('rowSelect', event, selectedData);
}
},
getSelection: function() {
return this.selection;
},
_removeSelection: function(rowData) {
this.selection = $.grep(this.selection, function(value) {
return value !== rowData;
});
},
_addSelection: function(rowData) {
if(!this._isSelected(rowData)) {
this.selection.push(rowData);
}
},
_isSelected: function(rowData) {
return PUI.inArray(this.selection, rowData);
},
_initExpandableRows: function() {
var $this = this,
togglerSelector = '> tr > td > div.ui-row-toggler';
this.tbody.off('click', togglerSelector)
.on('click', togglerSelector, null, function() {
$this.toggleExpansion($(this));
})
.on('keydown', togglerSelector, null, function(e) {
var key = e.which,
keyCode = $.ui.keyCode;
if((key === keyCode.ENTER||key === keyCode.NUMPAD_ENTER)) {
$this.toggleExpansion($(this));
e.preventDefault();
}
});
},
toggleExpansion: function(toggler) {
var row = toggler.closest('tr'),
expanded = toggler.hasClass('fa-chevron-circle-down');
if(expanded) {
toggler.addClass('fa-chevron-circle-right').removeClass('fa-chevron-circle-down').attr('aria-expanded', false);
this.collapseRow(row);
this._trigger('rowCollapse', null, row.data('rowdata'));
}
else {
if(this.options.rowExpandMode === 'single') {
this.collapseAllRows();
}
toggler.addClass('fa-chevron-circle-down').removeClass('fa-chevron-circle-right').attr('aria-expanded', true);
this.loadExpandedRowContent(row);
}
},
loadExpandedRowContent: function(row) {
var expandedRow = $('
|
');
expandedRow.children('td').append(this.options.expandedRowContent.call(this, row.data('rowdata')));
row.addClass('ui-expanded-row').after(expandedRow);
this._trigger('rowExpand', null, row.data('rowdata'));
},
collapseRow: function(row) {
row.removeClass('ui-expanded-row').next('.ui-expanded-row-content').remove();
},
collapseAllRows: function() {
var $this = this;
this.getExpandedRows().each(function () {
var expandedRow = $(this);
$this.collapseRow(expandedRow);
var columns = expandedRow.children('td');
for (var i = 0; i < columns.length; i++) {
var column = columns.eq(i),
toggler = column.children('.ui-row-toggler');
if (toggler.length) {
toggler.addClass('fa-chevron-circle-right').removeClass('fa-chevron-circle-down');
}
}
});
},
getExpandedRows: function () {
return this.tbody.children('.ui-expanded-row');
},
_createStateMeta: function() {
var state = {
first: this._getFirst(),
rows: this._getRows(),
sortField: this.options.sortField,
sortOrder: this.options.sortOrder,
sortMeta: this.options.sortMeta,
filters: this.filterMetaMap
};
return state;
},
_updateDatasource: function(datasource) {
this.options.datasource = datasource;
if($.isArray(this.options.datasource)) {
this._onDataUpdate(this.options.datasource);
}
else if($.type(this.options.datasource) === 'function') {
if(this.options.lazy)
this.options.datasource.call(this, this._onDataUpdate, {first:0, rows: this._getRows(), sortField:this.options.sortField, sortorder:this.options.sortOrder, filters: this._createFilterMap()});
else
this.options.datasource.call(this, this._onDataUpdate);
}
},
_setOption: function(key, value) {
if(key === 'datasource') {
this._updateDatasource(value);
}
else {
$.Widget.prototype._setOption.apply(this, arguments);
}
},
_initScrolling: function() {
this.scrollHeader = this.element.children('.ui-datatable-scrollable-header');
this.scrollBody = this.element.children('.ui-datatable-scrollable-body');
this.scrollHeaderBox = this.scrollHeader.children('.ui-datatable-scrollable-header-box');
this.headerTable = this.scrollHeaderBox.children('table');
this.bodyTable = this.scrollBody.children('table');
this.percentageScrollHeight = this.options.scrollHeight && (this.options.scrollHeight.indexOf('%') !== -1);
this.percentageScrollWidth = this.options.scrollWidth && (this.options.scrollWidth.indexOf('%') !== -1);
var $this = this,
scrollBarWidth = this.getScrollbarWidth() + 'px';
if(this.options.scrollHeight) {
if(this.percentageScrollHeight)
this.adjustScrollHeight();
else
this.scrollBody.css('max-height', this.options.scrollHeight + 'px');
if(this.hasVerticalOverflow()) {
this.scrollHeaderBox.css('margin-right', scrollBarWidth);
}
}
this.fixColumnWidths();
if(this.options.scrollWidth) {
if(this.percentageScrollWidth)
this.adjustScrollWidth();
else
this.setScrollWidth(parseInt(this.options.scrollWidth));
}
this.cloneHead();
this.scrollBody.on('scroll.dataTable', function() {
var scrollLeft = $this.scrollBody.scrollLeft();
$this.scrollHeaderBox.css('margin-left', -scrollLeft);
});
this.scrollHeader.on('scroll.dataTable', function() {
$this.scrollHeader.scrollLeft(0);
});
var resizeNS = 'resize.' + this.id;
$(window).off(resizeNS).on(resizeNS, function() {
if($this.element.is(':visible')) {
if($this.percentageScrollHeight)
$this.adjustScrollHeight();
if($this.percentageScrollWidth)
$this.adjustScrollWidth();
}
});
},
cloneHead: function() {
this.theadClone = this.thead.clone();
this.theadClone.find('th').each(function() {
var header = $(this);
header.attr('id', header.attr('id') + '_clone');
$(this).children().not('.ui-column-title').remove();
});
this.theadClone.removeAttr('id').addClass('ui-datatable-scrollable-theadclone').height(0).prependTo(this.bodyTable);
//align horizontal scroller on keyboard tab
if(this.options.scrollWidth) {
var clonedSortableColumns = this.theadClone.find('> tr > th.ui-sortable-column');
clonedSortableColumns.each(function() {
$(this).data('original', $(this).attr('id').split('_clone')[0]);
});
clonedSortableColumns.on('blur.dataTable', function() {
$(PUI.escapeClientId($(this).data('original'))).removeClass('ui-state-focus');
})
.on('focus.dataTable', function() {
$(PUI.escapeClientId($(this).data('original'))).addClass('ui-state-focus');
})
.on('keydown.dataTable', function(e) {
var key = e.which,
keyCode = $.ui.keyCode;
if((key === keyCode.ENTER||key === keyCode.NUMPAD_ENTER) && $(e.target).is(':not(:input)')) {
$(PUI.escapeClientId($(this).data('original'))).trigger('click.dataTable', (e.metaKey||e.ctrlKey));
e.preventDefault();
}
});
}
},
adjustScrollHeight: function() {
var relativeHeight = this.element.parent().innerHeight() * (parseInt(this.options.scrollHeight) / 100),
tableHeaderHeight = this.element.children('.ui-datatable-header').outerHeight(true) || 0,
tableFooterHeight = this.element.children('.ui-datatable-footer').outerHeight(true) || 0,
scrollersHeight = (this.scrollHeader.outerHeight(true) + (this.scrollFooter == undefined ? 0 : this.scrollFooter.outerHeight(true))),
paginatorsHeight = this.paginator ? this.paginator.getContainerHeight(true) : 0,
height = (relativeHeight - (scrollersHeight + paginatorsHeight + tableHeaderHeight + tableFooterHeight));
this.scrollBody.css('max-height', height + 'px');
},
adjustScrollWidth: function() {
var width = parseInt((this.element.parent().innerWidth() * (parseInt(this.options.scrollWidth) / 100)));
this.setScrollWidth(width);
},
setOuterWidth: function(element, width) {
var diff = element.outerWidth() - element.width();
element.width(width - diff);
},
setScrollWidth: function(width) {
var $this = this;
this.element.children('.ui-widget-header').each(function() {
$this.setOuterWidth($(this), width);
});
this.scrollHeader.width(width);
this.scrollBody.css('margin-right', 0).width(width);
},
alignScrollBody: function() {
var marginRight = this.hasVerticalOverflow() ? this.getScrollbarWidth() + 'px' : '0px';
this.scrollHeaderBox.css('margin-right', marginRight);
},
getScrollbarWidth: function() {
if(!this.scrollbarWidth) {
this.scrollbarWidth = PUI.browser.webkit ? '15' : PUI.calculateScrollbarWidth();
}
return this.scrollbarWidth;
},
hasVerticalOverflow: function() {
return (this.options.scrollHeight && this.bodyTable.outerHeight() > this.scrollBody.outerHeight())
},
restoreScrollState: function() {
var scrollState = this.scrollStateHolder.val(),
scrollValues = scrollState.split(',');
this.scrollBody.scrollLeft(scrollValues[0]);
this.scrollBody.scrollTop(scrollValues[1]);
},
saveScrollState: function() {
var scrollState = this.scrollBody.scrollLeft() + ',' + this.scrollBody.scrollTop();
this.scrollStateHolder.val(scrollState);
},
clearScrollState: function() {
this.scrollStateHolder.val('0,0');
},
fixColumnWidths: function() {
if(!this.columnWidthsFixed) {
if(this.options.scrollable) {
this.scrollHeaderBox.find('> table > thead > tr > th').each(function() {
var headerCol = $(this),
width = headerCol.width();
headerCol.width(width);
});
}
else {
this.element.find('> .ui-datatable-tablewrapper > table > thead > tr > th').each(function() {
var col = $(this);
col.width(col.width());
});
}
this.columnWidthsFixed = true;
}
},
_initDraggableColumns: function() {
var $this = this;
this.dragIndicatorTop = $('
').hide().appendTo(this.element);
this.dragIndicatorBottom = $('
').hide().appendTo(this.element);
this.thead.find('> tr > th').draggable({
appendTo: 'body',
opacity: 0.75,
cursor: 'move',
scope: this.id,
cancel: ':input,.ui-column-resizer',
drag: function(event, ui) {
var droppable = ui.helper.data('droppable-column');
if(droppable) {
var droppableOffset = droppable.offset(),
topArrowY = droppableOffset.top - 10,
bottomArrowY = droppableOffset.top + droppable.height() + 8,
arrowX = null;
//calculate coordinates of arrow depending on mouse location
if(event.originalEvent.pageX >= droppableOffset.left + (droppable.width() / 2)) {
var nextDroppable = droppable.next();
if(nextDroppable.length == 1)
arrowX = nextDroppable.offset().left - 9;
else
arrowX = droppable.offset().left + droppable.innerWidth() - 9;
ui.helper.data('drop-location', 1); //right
}
else {
arrowX = droppableOffset.left - 9;
ui.helper.data('drop-location', -1); //left
}
$this.dragIndicatorTop.offset({
'left': arrowX,
'top': topArrowY - 3
}).show();
$this.dragIndicatorBottom.offset({
'left': arrowX,
'top': bottomArrowY - 3
}).show();
}
},
stop: function(event, ui) {
//hide dnd arrows
$this.dragIndicatorTop.css({
'left':0,
'top':0
}).hide();
$this.dragIndicatorBottom.css({
'left':0,
'top':0
}).hide();
},
helper: function() {
var header = $(this),
helper = $('
');
helper.width(header.width());
helper.height(header.height());
helper.html(header.html());
return helper.get(0);
}
}).droppable({
hoverClass:'ui-state-highlight',
tolerance:'pointer',
scope: this.id,
over: function(event, ui) {
ui.helper.data('droppable-column', $(this));
},
drop: function(event, ui) {
var draggedColumnHeader = ui.draggable,
dropLocation = ui.helper.data('drop-location'),
droppedColumnHeader = $(this),
draggedColumnFooter = null,
droppedColumnFooter = null;
var draggedCells = $this.tbody.find('> tr:not(.ui-expanded-row-content) > td:nth-child(' + (draggedColumnHeader.index() + 1) + ')'),
droppedCells = $this.tbody.find('> tr:not(.ui-expanded-row-content) > td:nth-child(' + (droppedColumnHeader.index() + 1) + ')');
if($this.containsFooter()) {
var footerColumns = $this.tfoot.find('> tr > td'),
draggedColumnFooter = footerColumns.eq(draggedColumnHeader.index()),
droppedColumnFooter = footerColumns.eq(droppedColumnHeader.index());
}
//drop right
if(dropLocation > 0) {
/* TODO :Resizable columns
* if($this.options.resizableColumns) {
if(droppedColumnHeader.next().length) {
droppedColumnHeader.children('span.ui-column-resizer').show();
draggedColumnHeader.children('span.ui-column-resizer').hide();
}
}*/
draggedColumnHeader.insertAfter(droppedColumnHeader);
draggedCells.each(function(i, item) {
$(this).insertAfter(droppedCells.eq(i));
});
if(draggedColumnFooter && droppedColumnFooter) {
draggedColumnFooter.insertAfter(droppedColumnFooter);
}
//sync clone
if($this.options.scrollable) {
var draggedColumnClone = $(document.getElementById(draggedColumnHeader.attr('id') + '_clone')),
droppedColumnClone = $(document.getElementById(droppedColumnHeader.attr('id') + '_clone'));
draggedColumnClone.insertAfter(droppedColumnClone);
}
}
//drop left
else {
draggedColumnHeader.insertBefore(droppedColumnHeader);
draggedCells.each(function(i, item) {
$(this).insertBefore(droppedCells.eq(i));
});
if(draggedColumnFooter && droppedColumnFooter) {
draggedColumnFooter.insertBefore(droppedColumnFooter);
}
//sync clone
if($this.options.scrollable) {
var draggedColumnClone = $(document.getElementById(draggedColumnHeader.attr('id') + '_clone')),
droppedColumnClone = $(document.getElementById(droppedColumnHeader.attr('id') + '_clone'));
draggedColumnClone.insertBefore(droppedColumnClone);
}
}
//fire colReorder event
$this._trigger('colReorder', null, {
dragIndex: draggedColumnHeader.index(),
dropIndex: droppedColumnHeader.index()
});
}
});
},
containsFooter: function() {
if(this.hasFooter === undefined) {
this.hasFooter = this.options.footerRows !== undefined;
if(!this.hasFooter) {
if(this.options.columns) {
for(var i = 0; i < this.options.columns.length; i++) {
if(this.options.columns[i].footerText !== undefined) {
this.hasFooter = true;
break;
}
}
}
}
}
return this.hasFooter;
},
_initResizableColumns: function() {
this.element.addClass('ui-datatable-resizable');
this.thead.find('> tr > th').addClass('ui-resizable-column');
this.resizerHelper = $('
').appendTo(this.element);
this.addResizers();
var resizers = this.thead.find('> tr > th > span.ui-column-resizer'),
$this = this;
setTimeout(function() {
$this.fixColumnWidths();
}, 5);
resizers.draggable({
axis: 'x',
start: function(event, ui) {
ui.helper.data('originalposition', ui.helper.offset());
var height = $this.options.scrollable ? $this.scrollBody.height() : $this.thead.parent().height() - $this.thead.height() - 1;
$this.resizerHelper.height(height);
$this.resizerHelper.show();
},
drag: function(event, ui) {
$this.resizerHelper.offset({
left: ui.helper.offset().left + ui.helper.width() / 2,
top: $this.thead.offset().top + $this.thead.height()
});
},
stop: function(event, ui) {
ui.helper.css({
'left': '',
'top': '0px',
'right': '0px'
});
$this.resize(event, ui);
$this.resizerHelper.hide();
if($this.options.columnResizeMode === 'expand') {
setTimeout(function() {
$this._trigger('colResize', null, {element: ui.helper.parent()});
}, 5);
}
else {
$this._trigger('colResize', null, {element: ui.helper.parent()});
}
if($this.options.stickyHeader) {
$this.thead.find('.ui-column-filter').prop('disabled', false);
$this.clone = $this.thead.clone(true);
$this.cloneContainer.find('thead').remove();
$this.cloneContainer.children('table').append($this.clone);
$this.thead.find('.ui-column-filter').prop('disabled', true);
}
},
containment: this.element
});
},
resize: function(event, ui) {
var columnHeader, nextColumnHeader, change = null, newWidth = null, nextColumnWidth = null,
expandMode = (this.options.columnResizeMode === 'expand'),
table = this.thead.parent(),
columnHeader = ui.helper.parent(),
nextColumnHeader = columnHeader.next();
change = (ui.position.left - ui.originalPosition.left),
newWidth = (columnHeader.width() + change),
nextColumnWidth = (nextColumnHeader.width() - change);
if((newWidth > 15 && nextColumnWidth > 15) || (expandMode && newWidth > 15)) {
if(expandMode) {
table.width(table.width() + change);
setTimeout(function() {
columnHeader.width(newWidth);
}, 1);
}
else {
columnHeader.width(newWidth);
nextColumnHeader.width(nextColumnWidth);
}
if(this.options.scrollable) {
var cloneTable = this.theadClone.parent(),
colIndex = columnHeader.index();
if(expandMode) {
var $this = this;
//body
cloneTable.width(cloneTable.width() + change);
//footer
this.footerTable.width(this.footerTable.width() + change);
setTimeout(function() {
if($this.hasColumnGroup) {
$this.theadClone.find('> tr:first').children('th').eq(colIndex).width(newWidth); //body
$this.footerTable.find('> tfoot > tr:first').children('th').eq(colIndex).width(newWidth); //footer
}
else {
$this.theadClone.find(PUI.escapeClientId(columnHeader.attr('id') + '_clone')).width(newWidth); //body
$this.footerCols.eq(colIndex).width(newWidth); //footer
}
}, 1);
}
else {
//body
this.theadClone.find(PUI.escapeClientId(columnHeader.attr('id') + '_clone')).width(newWidth);
this.theadClone.find(PUI.escapeClientId(nextColumnHeader.attr('id') + '_clone')).width(nextColumnWidth);
//footer
/*if(this.footerCols.length > 0) {
var footerCol = this.footerCols.eq(colIndex),
nextFooterCol = footerCol.next();
footerCol.width(newWidth);
nextFooterCol.width(nextColumnWidth);
}*/
}
}
}
},
addResizers: function() {
var resizableColumns = this.thead.find('> tr > th.ui-resizable-column');
resizableColumns.prepend('
');
if(this.options.columnResizeMode === 'fit') {
resizableColumns.filter(':last-child').children('span.ui-column-resizer').hide();
}
},
_initDraggableRows: function() {
var $this = this;
this.tbody.sortable({
placeholder: 'ui-datatable-rowordering ui-state-active',
cursor: 'move',
handle: 'td,span:not(.ui-c)',
appendTo: document.body,
helper: function(event, ui) {
var cells = ui.children(),
helper = $('
'),
helperRow = ui.clone(),
helperCells = helperRow.children();
for(var i = 0; i < helperCells.length; i++) {
helperCells.eq(i).width(cells.eq(i).width());
}
helperRow.appendTo(helper.find('tbody'));
return helper;
},
update: function(event, ui) {
$this.syncRowParity();
$this._trigger('rowReorder', null, {
fromIndex: ui.item.data('ri'),
toIndex: $this._getFirst() + ui.item.index()
});
},
change: function(event, ui) {
if($this.options.scrollable) {
PUI.scrollInView($this.scrollBody, ui.placeholder);
}
}
});
},
syncRowParity: function() {
var rows = this.tbody.children('tr.ui-widget-content');
for(var i = this._getFirst(); i < rows.length; i++) {
var row = rows.eq(i);
row.data('ri', i).removeClass('ui-datatable-even ui-datatable-odd');
if(i % 2 === 0)
row.addClass('ui-datatable-even');
else
row.addClass('ui-datatable-odd');
}
},
getContextMenuSelection: function(data) {
return this.dataSelectedByContextMenu;
},
_initFiltering: function() {
var $this = this;
this.filterElements = this.thead.find('.ui-column-filter');
this.filterElements.on('keyup', function() {
if($this.filterTimeout) {
clearTimeout($this.filterTimeout);
}
$this.filterTimeout = setTimeout(function() {
$this.filter();
$this.filterTimeout = null;
},
$this.options.filterDelay);
});
if(this.options.globalFilter) {
$(this.options.globalFilter).on('keyup.puidatatable', function() {
$this.filter();
});
}
},
filter: function() {
this.filterMetaMap = [];
for(var i = 0; i < this.filterElements.length; i++) {
var filterElement = this.filterElements.eq(i),
filterElementValue = filterElement.val();
this.filterMetaMap.push({
field: filterElement.data('field'),
filterMatchMode: filterElement.data('filtermatchmode'),
value: filterElementValue.toLowerCase(),
element: filterElement
});
}
if(this.options.lazy) {
this.options.datasource.call(this, this._onLazyLoad, this._createStateMeta());
}
else {
var globalFilterValue = $(this.options.globalFilter).val();
this.filteredData = [];
for(var i = 0; i < this.data.length; i++) {
var localMatch = true;
var globalMatch = false;
for(var j = 0; j < this.filterMetaMap.length; j++) {
var filterMeta = this.filterMetaMap[j],
filterValue = filterMeta.value,
filterField = filterMeta.field,
dataFieldValue = this.data[i][filterField];
var filterConstraint = this.filterConstraints[filterMeta.filterMatchMode];
//global
if(this.options.globalFilter && !globalMatch) {
var filterConstraint = this.filterConstraints['contains'];
globalMatch = filterConstraint(dataFieldValue, globalFilterValue);
}
//local
if(filterMeta.filterMatchMode === 'custom') {
localMatch = filterMeta.element.triggerHandler('filter', [dataFieldValue, filterValue]);
}
else {
var filterConstraint = this.filterConstraints[filterMeta.filterMatchMode];
if(!filterConstraint(dataFieldValue, filterValue)) {
localMatch = false;
}
}
if(!localMatch) {
break;
}
}
var matches = localMatch;
if(this.options.globalFilter) {
matches = localMatch && globalMatch;
}
if(matches) {
this.filteredData.push(this.data[i]);
}
}
if(this.filteredData.length === this.data.length) {
this.filteredData = null;
}
if(this.paginator) {
this.paginator.puipaginator('option', 'totalRecords', this.filteredData ? this.filteredData.length : this.data ? this.data.length : 0);
}
this._renderData();
}
},
filterConstraints: {
startsWith: function(value, filter) {
if(filter === undefined || filter === null || $.trim(filter) === '') {
return true;
}
if(value === undefined || value === null) {
return false;
}
return value.toString().toLowerCase().slice(0, filter.length) === filter;
},
contains: function(value, filter) {
if(filter === undefined || filter === null || $.trim(filter) === '') {
return true;
}
if(value === undefined || value === null) {
return false;
}
return value.toString().toLowerCase().indexOf(filter) !== -1;
}
},
_initStickyHeader: function() {
var table = this.thead.parent(),
offset = table.offset(),
win = $(window),
$this = this,
stickyNS = 'scroll.' + this.id,
resizeNS = 'resize.sticky-' + this.id;
this.cloneContainer = $('
');
this.clone = this.thead.clone(true);
this.cloneContainer.children('table').append(this.clone);
this.cloneContainer.css({
position: 'absolute',
width: table.outerWidth(),
top: offset.top,
left: offset.left,
'z-index': ++PUI.zindex
})
.appendTo(this.element);
win.off(stickyNS).on(stickyNS, function() {
var scrollTop = win.scrollTop(),
tableOffset = table.offset();
if(scrollTop > tableOffset.top) {
$this.cloneContainer.css({
'position': 'fixed',
'top': '0px'
})
.addClass('ui-shadow ui-sticky');
if(scrollTop >= (tableOffset.top + $this.tbody.height()))
$this.cloneContainer.hide();
else
$this.cloneContainer.show();
}
else {
$this.cloneContainer.css({
'position': 'absolute',
'top': tableOffset.top
})
.removeClass('ui-shadow ui-sticky');
}
})
.off(resizeNS).on(resizeNS, function() {
$this.cloneContainer.width(table.outerWidth());
});
//filter support
this.thead.find('.ui-column-filter').prop('disabled', true);
},
_initEditing: function() {
var cellSelector = '> tr > td.ui-editable-column',
$this = this;
this.tbody.off('click', cellSelector)
.on('click', cellSelector, null, function(e) {
var cell = $(this);
if(!cell.hasClass('ui-cell-editing')) {
$this._showCellEditor(cell);
e.stopPropagation();
}
});
},
_showCellEditor: function(cell) {
var editor = this.editors[cell.data('editor')].call(),
$this = this;
editor.val(cell.data('rowdata')[cell.data('field')]);
cell.addClass('ui-cell-editing').html('').append(editor);
editor.focus().on('change', function() {
$this._onCellEditorChange(cell);
})
.on('blur', function() {
$this._onCellEditorBlur(cell);
})
.on('keydown', function(e) {
var key = e.which,
keyCode = $.ui.keyCode;
if((key === keyCode.ENTER||key === keyCode.NUMPAD_ENTER)) {
$(this).trigger('change').trigger('blur');
e.preventDefault();
}
else if(key === keyCode.TAB) {
if(e.shiftKey) {
var prevCell = cell.prevAll('td.ui-editable-column').eq(0);
if(!prevCell.length) {
prevCell = cell.parent().prev('tr').children('td.ui-editable-column:last');
}
if(prevCell.length) {
$this._showCellEditor(prevCell);
}
}
else {
var nextCell = cell.nextAll('td.ui-editable-column').eq(0);
if(!nextCell.length) {
nextCell = cell.parent().next('tr').children('td.ui-editable-column').eq(0);
}
if(nextCell.length) {
$this._showCellEditor(nextCell);
}
}
e.preventDefault();
} else if(key === keyCode.ESCAPE) {
$this._onCellEditorBlur(cell);
}
});
},
_onCellEditorChange: function(cell) {
var newCellValue = cell.children('.ui-cell-editor').val();
var retVal = this._trigger('cellEdit', null, {
oldValue: cell.data('rowdata')[cell.data('field')],
newValue: newCellValue,
data: cell.data('rowdata'),
field: cell.data('field')
});
if(retVal !== false) {
cell.data('rowdata')[cell.data('field')] = newCellValue;
}
},
_onCellEditorBlur: function(cell) {
cell.removeClass('ui-cell-editing').text(cell.data('rowdata')[cell.data('field')])
.children('.ui-cell-editor').remove();
},
reload: function() {
this._updateDatasource(this.options.datasource);
},
getPaginator: function() {
return this.paginator;
},
setTotalRecords: function(val) {
this.paginator.puipaginator('option','totalRecords', val);
},
_createFilterMap: function() {
var filters = null;
if(this.filterElements) {
filters = {};
for(var i = 0; i < this.filterElements.length; i++) {
var filterElement = this.filterElements.eq(i),
value = filterElement.val();
if($.trim(value).length) {
filters[filterElement.data('field')] = value;
}
}
}
return filters;
},
editors: {
'input': function() {
return $('
');
}
}
});
})();
/**
* PrimeUI Dialog Widget
*/
(function() {
$.widget("primeui.puidialog", {
options: {
draggable: true,
resizable: true,
location: 'center',
minWidth: 150,
minHeight: 25,
height: 'auto',
width: '300px',
visible: false,
modal: false,
showEffect: null,
hideEffect: null,
effectOptions: {},
effectSpeed: 'normal',
closeOnEscape: true,
rtl: false,
closable: true,
minimizable: false,
maximizable: false,
appendTo: null,
buttons: null,
responsive: false,
title: null,
enhanced: false
},
_create: function() {
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
//container
if(!this.options.enhanced) {
this.element.addClass('ui-dialog ui-widget ui-widget-content ui-helper-hidden ui-corner-all ui-shadow')
.contents().wrapAll('
');
//header
var title = this.options.title||this.element.attr('title');
this.element.prepend('').appendTo(this.stripWrapper);
for(var i = 0; i < this.panels.length; i++) {
var image = this.panels.eq(i).children('img'),
frameClass = (i == this.options.activeIndex) ? 'ui-galleria-frame ui-galleria-frame-active' : 'ui-galleria-frame',
frameMarkup = '
' +
'' +
'
 + ')
' +
'
';
this.strip.append(frameMarkup);
}
this.frames = this.strip.children('li.ui-galleria-frame');
//navigators
this.element.append('
' +
'
');
//caption
if(this.options.showCaption) {
this.caption = $('
').css({
'bottom': this.stripWrapper.outerHeight() + 10,
'width': this.panelWrapper.width()
}).appendTo(this.element);
}
},
_bindEvents: function() {
var $this = this;
this.element.children('div.ui-galleria-nav-prev').on('click.puigalleria', function() {
if($this.slideshowActive) {
$this.stopSlideshow();
}
if(!$this.isAnimating()) {
$this.prev();
}
});
this.element.children('div.ui-galleria-nav-next').on('click.puigalleria', function() {
if($this.slideshowActive) {
$this.stopSlideshow();
}
if(!$this.isAnimating()) {
$this.next();
}
});
this.strip.children('li.ui-galleria-frame').on('click.puigalleria', function() {
if($this.slideshowActive) {
$this.stopSlideshow();
}
$this.select($(this).index(), false);
});
},
_unbindEvents: function() {
this.element.children('div.ui-galleria-nav-prev').off('click.puigalleria');
this.element.children('div.ui-galleria-nav-next').off('click.puigalleria');
this.strip.children('li.ui-galleria-frame').off('click.puigalleria');
},
startSlideshow: function() {
var $this = this;
this.interval = window.setInterval(function() {
$this.next();
}, this.options.transitionInterval);
this.slideshowActive = true;
},
stopSlideshow: function() {
if(this.interval) {
window.clearInterval(this.interval);
}
this.slideshowActive = false;
},
isSlideshowActive: function() {
return this.slideshowActive;
},
select: function(index, reposition) {
if(index !== this.options.activeIndex) {
if(this.options.showCaption) {
this._hideCaption();
}
var oldPanel = this.panels.eq(this.options.activeIndex),
newPanel = this.panels.eq(index);
//content
oldPanel.hide(this.options.effect, this.options.effectOptions, this.options.effectSpeed);
newPanel.show(this.options.effect, this.options.effectOptions, this.options.effectSpeed);
if (this.options.showFilmstrip) {
var oldFrame = this.frames.eq(this.options.activeIndex),
newFrame = this.frames.eq(index);
//frame
oldFrame.removeClass('ui-galleria-frame-active').css('opacity', '');
newFrame.animate({opacity:1.0}, this.options.effectSpeed, null, function() {
$(this).addClass('ui-galleria-frame-active');
});
//viewport
if( (reposition === undefined || reposition === true) ) {
var frameLeft = newFrame.position().left,
stepFactor = this.options.frameWidth + parseInt(newFrame.css('margin-right'), 10),
stripLeft = this.strip.position().left,
frameViewportLeft = frameLeft + stripLeft,
frameViewportRight = frameViewportLeft + this.options.frameWidth;
if(frameViewportRight > this.stripWrapper.width()) {
this.strip.animate({left: '-=' + stepFactor}, this.options.effectSpeed, 'easeInOutCirc');
} else if(frameViewportLeft < 0) {
this.strip.animate({left: '+=' + stepFactor}, this.options.effectSpeed, 'easeInOutCirc');
}
}
}
//caption
if(this.options.showCaption) {
this._showCaption(newPanel);
}
this.options.activeIndex = index;
}
},
_hideCaption: function() {
this.caption.slideUp(this.options.effectSpeed);
},
_showCaption: function(panel) {
var image = panel.children('img');
this.caption.html('
' + image.attr('title') + '
' + image.attr('alt') + '
').slideDown(this.options.effectSpeed);
},
prev: function() {
if(this.options.activeIndex !== 0) {
this.select(this.options.activeIndex - 1);
}
},
next: function() {
if(this.options.activeIndex !== (this.panels.length - 1)) {
this.select(this.options.activeIndex + 1);
}
else {
this.select(0, false);
this.strip.animate({left: 0}, this.options.effectSpeed, 'easeInOutCirc');
}
},
isAnimating: function() {
return this.strip.is(':animated');
}
});
})();
/**
* PrimeFaces Growl Widget
*/
(function() {
$.widget("primeui.puigrowl", {
options: {
sticky: false,
life: 3000,
messages: null,
appendTo: document.body
},
_create: function() {
var container = this.element;
this.originalParent = this.element.parent();
container.addClass("ui-growl ui-widget");
if(this.options.appendTo) {
container.appendTo(this.options.appendTo);
}
if(this.options.messages) {
this.show(this.options.messages);
}
},
show: function(msgs) {
var $this = this;
this.element.css('z-index', ++PUI.zindex);
this.clear();
if(msgs && msgs.length) {
$.each(msgs, function(i, msg) {
$this._renderMessage(msg);
});
}
},
clear: function() {
var messageElements = this.element.children('div.ui-growl-item-container');
for(var i = 0; i < messageElements.length; i++) {
this._unbindMessageEvents(messageElements.eq(i));
}
messageElements.remove();
},
_renderMessage: function(msg) {
var markup = '
';
markup += '
';
markup += '
';
markup += '
';
markup += '
';
markup += '
' + msg.summary + '';
markup += '
' + (msg.detail||'') + '
';
markup += '
';
var message = $(markup);
this._bindMessageEvents(message);
message.appendTo(this.element).fadeIn();
},
_removeMessage: function(message) {
message.fadeTo('normal', 0, function() {
message.slideUp('normal', 'easeInOutCirc', function() {
message.remove();
});
});
},
_bindMessageEvents: function(message) {
var $this = this,
sticky = this.options.sticky;
message.on('mouseover.puigrowl', function() {
var msg = $(this);
if(!msg.is(':animated')) {
msg.find('div.ui-growl-icon-close:first').show();
}
})
.on('mouseout.puigrowl', function() {
$(this).find('div.ui-growl-icon-close:first').hide();
});
//remove message on click of close icon
message.find('div.ui-growl-icon-close').on('click.puigrowl',function() {
$this._removeMessage(message);
if(!sticky) {
window.clearTimeout(message.data('timeout'));
}
});
if(!sticky) {
this._setRemovalTimeout(message);
}
},
_unbindMessageEvents: function(message) {
var $this = this,
sticky = this.options.sticky;
message.off('mouseover.puigrowl mouseout.puigrowl');
message.find('div.ui-growl-icon-close').off('click.puigrowl');
if(!sticky) {
var timeout = message.data('timeout');
if(timeout) {
window.clearTimeout(timeout);
}
}
},
_setRemovalTimeout: function(message) {
var $this = this;
var timeout = window.setTimeout(function() {
$this._removeMessage(message);
}, this.options.life);
message.data('timeout', timeout);
},
_getIcon: function(severity) {
switch(severity) {
case 'info':
return 'fa-info-circle';
break;
case 'warn':
return 'fa-warning';
break;
case 'error':
return 'fa-close';
break;
default:
return 'fa-info-circle';
break;
}
},
_setOption: function(key, value) {
if(key === 'value' || key === 'messages') {
this.show(value);
}
else {
$.Widget.prototype._setOption.apply(this, arguments);
}
},
_destroy: function() {
this.clear();
this.element.removeClass("ui-growl ui-widget");
if(this.options.appendTo) {
this.element.appendTo(this.originalParent);
}
}
});
})();
/**
* PrimeUI inputtext widget
*/
(function() {
$.widget("primeui.puiinputtext", {
options: {
disabled: false
},
_create: function() {
var input = this.element,
disabled = input.prop('disabled');
//visuals
input.addClass('ui-inputtext ui-widget ui-state-default ui-corner-all');
if(input.prop('disabled'))
input.addClass('ui-state-disabled');
else if(this.options.disabled)
this.disable();
else
this._enableMouseEffects();
},
_destroy: function() {
this.element.removeClass('ui-inputtext ui-widget ui-state-default ui-state-disabled ui-state-hover ui-state-focus ui-corner-all');
this._disableMouseEffects();
},
_enableMouseEffects: function () {
var input = this.element;
input.on('mouseover.puiinputtext', function() {
input.addClass('ui-state-hover');
})
.on('mouseout.puiinputtext', function() {
input.removeClass('ui-state-hover');
})
.on('focus.puiinputtext', function() {
input.addClass('ui-state-focus');
})
.on('blur.puiinputtext', function() {
input.removeClass('ui-state-focus');
});
},
_disableMouseEffects: function () {
this.element.off('mouseover.puiinputtext mouseout.puiinputtext focus.puiinputtext blur.puiinputtext');
},
disable: function () {
this.element.prop('disabled', true);
this.element.addClass('ui-state-disabled');
this.element.removeClass('ui-state-focus ui-state-hover');
this._disableMouseEffects();
},
enable: function () {
this.element.prop('disabled', false);
this.element.removeClass('ui-state-disabled');
this._enableMouseEffects();
},
_setOption: function(key, value) {
if(key === 'disabled') {
if(value)
this.disable();
else
this.enable();
}
else {
$.Widget.prototype._setOption.apply(this, arguments);
}
}
});
})();
/**
* PrimeUI Lightbox Widget
*/
(function() {
$.widget("primeui.puilightbox", {
options: {
iframeWidth: 640,
iframeHeight: 480,
iframe: false
},
_create: function() {
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
this.options.mode = this.options.iframe ? 'iframe' : (this.element.children('div').length == 1) ? 'inline' : 'image';
var dom = '
';
this.panel = $(dom).appendTo(document.body);
this.contentWrapper = this.panel.children('.ui-lightbox-content-wrapper');
this.content = this.contentWrapper.children('.ui-lightbox-content');
this.caption = this.panel.children('.ui-lightbox-caption');
this.captionText = this.caption.children('.ui-lightbox-caption-text');
this.closeIcon = this.caption.children('.ui-lightbox-close');
if(this.options.mode === 'image') {
this._setupImaging();
}
else if(this.options.mode === 'inline') {
this._setupInline();
}
else if(this.options.mode === 'iframe') {
this._setupIframe();
}
this._bindCommonEvents();
this.links.data('puilightbox-trigger', true).find('*').data('puilightbox-trigger', true);
this.closeIcon.data('puilightbox-trigger', true).find('*').data('puilightbox-trigger', true);
},
_bindCommonEvents: function() {
var $this = this;
this.closeIcon.on('hover.ui-lightbox', function() {
$(this).toggleClass('ui-state-hover');
})
.on('click.ui-lightbox', function(e) {
$this.hide();
e.preventDefault();
});
//hide when outside is clicked
$(document.body).on('click.ui-lightbox-' + this.id, function (e) {
if($this.isHidden()) {
return;
}
//do nothing if target is the link
var target = $(e.target);
if(target.data('puilightbox-trigger')) {
return;
}
//hide if mouse is outside of lightbox
var offset = $this.panel.offset();
if(e.pageX < offset.left ||
e.pageX > offset.left + $this.panel.width() ||
e.pageY < offset.top ||
e.pageY > offset.top + $this.panel.height()) {
$this.hide();
}
});
//sync window resize
$(window).on('resize.ui-lightbox-' + this.id, function() {
if(!$this.isHidden()) {
$(document.body).children('.ui-widget-overlay').css({
'width': $(document).width(),
'height': $(document).height()
});
}
});
},
_destroy: function() {
this.links.removeData('puilightbox-trigger').find('*').removeData('puilightbox-trigger');
this._unbindEvents();
this.panel.remove();
if(this.modality) {
this._disableModality();
}
},
_unbindEvents: function() {
this.closeIcon.off('hover.ui-lightbox click.ui-lightbox');
$(document.body).off('click.ui-lightbox-' + this.id);
$(window).off('resize.ui-lightbox-' + this.id)
this.links.off('click.ui-lightbox');
if(this.options.mode === 'image') {
this.imageDisplay.off('load.ui-lightbox');
this.navigators.off('hover.ui-lightbox click.ui-lightbox');
}
},
_setupImaging: function() {
var $this = this;
this.links = this.element.children('a');
this.content.append('
![]()
');
this.imageDisplay = this.content.children('img');
this.navigators = this.contentWrapper.children('a');
this.imageDisplay.on('load.ui-lightbox', function() {
var image = $(this);
$this._scaleImage(image);
//coordinates to center overlay
var leftOffset = ($this.panel.width() - image.width()) / 2,
topOffset = ($this.panel.height() - image.height()) / 2;
//resize content for new image
$this.content.removeClass('ui-lightbox-loading').animate({
width: image.width(),
height: image.height()
},
500,
function() {
//show image
image.fadeIn();
$this._showNavigators();
$this.caption.slideDown();
});
$this.panel.animate({
left: '+=' + leftOffset,
top: '+=' + topOffset
}, 500);
});
this.navigators.on('hover.ui-lightbox', function() {
$(this).toggleClass('ui-state-hover');
})
.on('click.ui-lightbox', function(e) {
var nav = $(this),
index;
$this._hideNavigators();
if(nav.hasClass('ui-lightbox-nav-left')) {
index = $this.current === 0 ? $this.links.length - 1 : $this.current - 1;
$this.links.eq(index).trigger('click');
}
else {
index = $this.current == $this.links.length - 1 ? 0 : $this.current + 1;
$this.links.eq(index).trigger('click');
}
e.preventDefault();
});
this.links.on('click.ui-lightbox', function(e) {
var link = $(this);
if($this.isHidden()) {
$this.content.addClass('ui-lightbox-loading').width(32).height(32);
$this.show();
}
else {
$this.imageDisplay.fadeOut(function() {
//clear for onload scaling
$(this).css({
'width': 'auto',
'height': 'auto'
});
$this.content.addClass('ui-lightbox-loading');
});
$this.caption.slideUp();
}
window.setTimeout(function() {
$this.imageDisplay.attr('src', link.attr('href'));
$this.current = link.index();
var title = link.attr('title');
if(title) {
$this.captionText.html(title);
}
}, 1000);
e.preventDefault();
});
},
_scaleImage: function(image) {
var win = $(window),
winWidth = win.width(),
winHeight = win.height(),
imageWidth = image.width(),
imageHeight = image.height(),
ratio = imageHeight / imageWidth;
if(imageWidth >= winWidth && ratio <= 1){
imageWidth = winWidth * 0.75;
imageHeight = imageWidth * ratio;
}
else if(imageHeight >= winHeight){
imageHeight = winHeight * 0.75;
imageWidth = imageHeight / ratio;
}
image.css({
'width':imageWidth + 'px',
'height':imageHeight + 'px'
});
},
_setupInline: function() {
this.links = this.element.children('a');
this.inline = this.element.children('div').addClass('ui-lightbox-inline');
this.inline.appendTo(this.content).show();
var $this = this;
this.links.on('click.ui-lightbox', function(e) {
$this.show();
var title = $(this).attr('title');
if(title) {
$this.captionText.html(title);
$this.caption.slideDown();
}
e.preventDefault();
});
},
_setupIframe: function() {
var $this = this;
this.links = this.element;
this.iframe = $('
').appendTo(this.content);
if(this.options.iframeTitle) {
this.iframe.attr('title', this.options.iframeTitle);
}
this.element.click(function(e) {
if(!$this.iframeLoaded) {
$this.content.addClass('ui-lightbox-loading').css({
width: $this.options.iframeWidth,
height: $this.options.iframeHeight
});
$this.show();
$this.iframe.on('load', function() {
$this.iframeLoaded = true;
$this.content.removeClass('ui-lightbox-loading');
})
.attr('src', $this.element.attr('href'));
}
else {
$this.show();
}
var title = $this.element.attr('title');
if(title) {
$this.caption.html(title);
$this.caption.slideDown();
}
e.preventDefault();
});
},
show: function() {
this.center();
this.panel.css('z-index', ++PUI.zindex).show();
if(!this.modality) {
this._enableModality();
}
this._trigger('show');
},
hide: function() {
this.panel.fadeOut();
this._disableModality();
this.caption.hide();
if(this.options.mode === 'image') {
this.imageDisplay.hide().attr('src', '').removeAttr('style');
this._hideNavigators();
}
this._trigger('hide');
},
center: function() {
var win = $(window),
left = (win.width() / 2 ) - (this.panel.width() / 2),
top = (win.height() / 2 ) - (this.panel.height() / 2);
this.panel.css({
'left': left,
'top': top
});
},
_enableModality: function() {
this.modality = $('
')
.css({
'width': $(document).width(),
'height': $(document).height(),
'z-index': this.panel.css('z-index') - 1
})
.appendTo(document.body);
},
_disableModality: function() {
this.modality.remove();
this.modality = null;
},
_showNavigators: function() {
this.navigators.zIndex(this.imageDisplay.zIndex() + 1).show();
},
_hideNavigators: function() {
this.navigators.hide();
},
isHidden: function() {
return this.panel.is(':hidden');
},
showURL: function(opt) {
if(opt.width) {
this.iframe.attr('width', opt.width);
}
if(opt.height) {
this.iframe.attr('height', opt.height);
}
this.iframe.attr('src', opt.src);
this.show();
}
});
})();
/**
* PrimeUI inputtextarea widget
*/
(function() {
$.widget("primeui.puiinputtextarea", {
options: {
autoResize: false,
autoComplete: false,
maxlength: null,
counter: null,
counterTemplate: '{0}',
minQueryLength: 3,
queryDelay: 700,
completeSource: null
},
_create: function() {
var $this = this;
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
this.element.puiinputtext();
if(this.options.autoResize) {
this.options.rowsDefault = this.element.attr('rows');
this.options.colsDefault = this.element.attr('cols');
this.element.addClass('ui-inputtextarea-resizable');
this.element.on('keyup.puiinputtextarea-resize', function() {
$this._resize();
}).on('focus.puiinputtextarea-resize', function() {
$this._resize();
}).on('blur.puiinputtextarea-resize', function() {
$this._resize();
});
}
if(this.options.maxlength) {
this.element.on('keyup.puiinputtextarea-maxlength', function(e) {
var value = $this.element.val(),
length = value.length;
if(length > $this.options.maxlength) {
$this.element.val(value.substr(0, $this.options.maxlength));
}
if($this.options.counter) {
$this._updateCounter();
}
});
}
if(this.options.counter) {
this._updateCounter();
}
if(this.options.autoComplete) {
this._initAutoComplete();
}
},
_destroy: function() {
this.element.puiinputtext('destroy');
if(this.options.autoResize) {
this.element.removeClass('ui-inputtextarea-resizable').off('keyup.puiinputtextarea-resize focus.puiinputtextarea-resize blur.puiinputtextarea-resize');
}
if(this.options.maxlength) {
this.element.off('keyup.puiinputtextarea-maxlength');
}
if(this.options.autoComplete) {
this.element.off('keyup.puiinputtextarea-autocomplete keydown.puiinputtextarea-autocomplete');
$(document.body).off('mousedown.puiinputtextarea-' + this.id);
$(window).off('resize.puiinputtextarea-' + this.id);
if(this.items) {
this.items.off();
}
this.panel.remove();
}
},
_updateCounter: function() {
var value = this.element.val(),
length = value.length;
if(this.options.counter) {
var remaining = this.options.maxlength - length,
remainingText = this.options.counterTemplate.replace('{0}', remaining);
this.options.counter.text(remainingText);
}
},
_resize: function() {
var linesCount = 0,
lines = this.element.val().split('\n');
for(var i = lines.length-1; i >= 0 ; --i) {
linesCount += Math.floor((lines[i].length / this.options.colsDefault) + 1);
}
var newRows = (linesCount >= this.options.rowsDefault) ? (linesCount + 1) : this.options.rowsDefault;
this.element.attr('rows', newRows);
},
_initAutoComplete: function() {
var panelMarkup = '
',
$this = this;
this.panel = $(panelMarkup).appendTo(document.body);
this.element.on('keyup.puiinputtextarea-autocomplete', function(e) {
var keyCode = $.ui.keyCode;
switch(e.which) {
case keyCode.UP:
case keyCode.LEFT:
case keyCode.DOWN:
case keyCode.RIGHT:
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
case keyCode.TAB:
case keyCode.SPACE:
case keyCode.CONTROL:
case keyCode.ALT:
case keyCode.ESCAPE:
case 224: //mac command
//do not search
break;
default:
var query = $this._extractQuery();
if(query && query.length >= $this.options.minQueryLength) {
//Cancel the search request if user types within the timeout
if($this.timeout) {
$this._clearTimeout($this.timeout);
}
$this.timeout = window.setTimeout(function() {
$this.search(query);
}, $this.options.queryDelay);
}
break;
}
}).on('keydown.puiinputtextarea-autocomplete', function(e) {
var overlayVisible = $this.panel.is(':visible'),
keyCode = $.ui.keyCode,
highlightedItem;
switch(e.which) {
case keyCode.UP:
case keyCode.LEFT:
if(overlayVisible) {
highlightedItem = $this.items.filter('.ui-state-highlight');
var prev = highlightedItem.length === 0 ? $this.items.eq(0) : highlightedItem.prev();
if(prev.length == 1) {
highlightedItem.removeClass('ui-state-highlight');
prev.addClass('ui-state-highlight');
if($this.options.scrollHeight) {
PUI.scrollInView($this.panel, prev);
}
}
e.preventDefault();
}
else {
$this._clearTimeout();
}
break;
case keyCode.DOWN:
case keyCode.RIGHT:
if(overlayVisible) {
highlightedItem = $this.items.filter('.ui-state-highlight');
var next = highlightedItem.length === 0 ? _self.items.eq(0) : highlightedItem.next();
if(next.length == 1) {
highlightedItem.removeClass('ui-state-highlight');
next.addClass('ui-state-highlight');
if($this.options.scrollHeight) {
PUI.scrollInView($this.panel, next);
}
}
e.preventDefault();
}
else {
$this._clearTimeout();
}
break;
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
if(overlayVisible) {
$this.items.filter('.ui-state-highlight').trigger('click');
e.preventDefault();
}
else {
$this._clearTimeout();
}
break;
case keyCode.SPACE:
case keyCode.CONTROL:
case keyCode.ALT:
case keyCode.BACKSPACE:
case keyCode.ESCAPE:
case 224: //mac command
$this._clearTimeout();
if(overlayVisible) {
$this._hide();
}
break;
case keyCode.TAB:
$this._clearTimeout();
if(overlayVisible) {
$this.items.filter('.ui-state-highlight').trigger('click');
$this._hide();
}
break;
}
});
//hide panel when outside is clicked
$(document.body).on('mousedown.puiinputtextarea-' + this.id, function (e) {
if($this.panel.is(":hidden")) {
return;
}
var offset = $this.panel.offset();
if(e.target === $this.element.get(0)) {
return;
}
if (e.pageX < offset.left ||
e.pageX > offset.left + $this.panel.width() ||
e.pageY < offset.top ||
e.pageY > offset.top + $this.panel.height()) {
$this._hide();
}
});
//Hide overlay on resize
var resizeNS = 'resize.puiinputtextarea-' + this.id;
$(window).off(resizeNS).on(resizeNS, function() {
if($this.panel.is(':visible')) {
$this._hide();
}
});
},
_bindDynamicEvents: function() {
var $this = this;
//visuals and click handler for items
this.items.on('mouseover', function() {
var item = $(this);
if(!item.hasClass('ui-state-highlight')) {
$this.items.filter('.ui-state-highlight').removeClass('ui-state-highlight');
item.addClass('ui-state-highlight');
}
})
.on('click', function(event) {
var item = $(this),
itemValue = item.attr('data-item-value'),
insertValue = itemValue.substring($this.query.length);
$this.element.focus();
$this.element.insertText(insertValue, $this.element.getSelection().start, true);
$this._hide();
$this._trigger("itemselect", event, item);
});
},
_clearTimeout: function() {
if(this.timeout) {
window.clearTimeout(this.timeout);
}
this.timeout = null;
},
_extractQuery: function() {
var end = this.element.getSelection().end,
result = /\S+$/.exec(this.element.get(0).value.slice(0, end)),
lastWord = result ? result[0] : null;
return lastWord;
},
search: function(q) {
this.query = q;
var request = {
query: q
};
if(this.options.completeSource) {
this.options.completeSource.call(this, request, this._handleResponse);
}
},
_handleResponse: function(data) {
this.panel.html('');
var listContainer = $('
');
for(var i = 0; i < data.length; i++) {
var item = $('
');
item.attr('data-item-value', data[i].value);
item.text(data[i].label);
listContainer.append(item);
}
this.panel.append(listContainer);
this.items = this.panel.find('.ui-autocomplete-item');
this._bindDynamicEvents();
if(this.items.length > 0) {
//highlight first item
this.items.eq(0).addClass('ui-state-highlight');
//adjust height
if(this.options.scrollHeight && this.panel.height() > this.options.scrollHeight) {
this.panel.height(this.options.scrollHeight);
}
if(this.panel.is(':hidden')) {
this._show();
}
else {
this._alignPanel(); //with new items
}
}
else {
this.panel.hide();
}
},
_alignPanel: function() {
var pos = this.element.getCaretPosition(),
offset = this.element.offset();
this.panel.css({
'left': offset.left + pos.left,
'top': offset.top + pos.top,
'width': this.element.innerWidth()
});
},
_show: function() {
this._alignPanel();
this.panel.show();
},
_hide: function() {
this.panel.hide();
},
disable: function () {
this.element.puiinputtext('disable');
},
enable: function () {
this.element.puiinputtext('enable');
}
});
})();
/**
* PrimeUI listvox widget
*/
(function() {
$.widget("primeui.puilistbox", {
options: {
value: null,
scrollHeight: 200,
content: null,
data: null,
template: null,
style: null,
styleClass: null,
multiple: false,
enhanced: false,
change: null
},
_create: function() {
if(!this.options.enhanced) {
this.element.wrap('
');
this.container = this.element.parent().parent();
this.listContainer = $('
').appendTo(this.container);
if(this.options.data) {
this._populateInputFromData();
}
this._populateContainerFromOptions();
}
else {
this.container = this.element.parent().parent();
this.listContainer = this.container.children('ul').addClass('ui-listbox-list');
this.items = this.listContainer.children('li').addClass('ui-listbox-item ui-corner-all');
this.choices = this.element.children('option');
}
if(this.options.style) {
this.container.attr('style', this.options.style);
}
if(this.options.styleClass) {
this.container.addClass(this.options.styleClass);
}
if(this.options.multiple)
this.element.prop('multiple', true);
else
this.options.multiple = this.element.prop('multiple');
//preselection
if(this.options.value !== null && this.options.value !== undefined) {
this._updateSelection(this.options.value);
}
this._restrictHeight();
this._bindEvents();
},
_populateInputFromData: function() {
for(var i = 0; i < this.options.data.length; i++) {
var choice = this.options.data[i];
if(choice.label) {
this.element.append('
');
} else {
this.element.append('
');
}
}
},
_populateContainerFromOptions: function() {
this.choices = this.element.children('option');
for(var i = 0; i < this.choices.length; i++) {
var choice = this.choices.eq(i);
this.listContainer.append('
' + this._createItemContent(choice.get(0)) + '');
}
this.items = this.listContainer.find('.ui-listbox-item:not(.ui-state-disabled)');
},
_restrictHeight: function() {
if(this.container.height() > this.options.scrollHeight) {
this.container.height(this.options.scrollHeight);
}
},
_bindEvents: function() {
var $this = this;
//items
this._bindItemEvents(this.items);
//input
this.element.on('focus.puilistbox', function() {
$this.container.addClass('ui-state-focus');
}).on('blur.puilistbox', function() {
$this.container.removeClass('ui-state-focus');
});
},
_bindItemEvents: function(item) {
var $this = this;
item.on('mouseover.puilistbox', function() {
var item = $(this);
if(!item.hasClass('ui-state-highlight')) {
item.addClass('ui-state-hover');
}
})
.on('mouseout.puilistbox', function() {
$(this).removeClass('ui-state-hover');
})
.on('dblclick.puilistbox', function(e) {
$this.element.trigger('dblclick');
PUI.clearSelection();
e.preventDefault();
})
.on('click.puilistbox', function(e) {
if($this.options.multiple)
$this._clickMultiple(e, $(this));
else
$this._clickSingle(e, $(this));
});
},
_unbindEvents: function() {
this._unbindItemEvents();
this.element.off('focus.puilistbox blur.puilistbox');
},
_unbindItemEvents: function() {
this.items.off('mouseover.puilistbox mouseout.puilistbox dblclick.puilistbox click.puilistbox');
},
_clickSingle: function(event, item) {
var selectedItem = this.items.filter('.ui-state-highlight');
if(item.index() !== selectedItem.index()) {
if(selectedItem.length) {
this.unselectItem(selectedItem);
}
this.selectItem(item);
this._trigger('change', event, {
value: this.choices.eq(item.index()).attr('value'),
index: item.index()
});
}
this.element.trigger('click');
PUI.clearSelection();
event.preventDefault();
},
_clickMultiple: function(event, item) {
var selectedItems = this.items.filter('.ui-state-highlight'),
metaKey = (event.metaKey||event.ctrlKey),
unchanged = (!metaKey && selectedItems.length === 1 && selectedItems.index() === item.index());
if(!event.shiftKey) {
if(!metaKey) {
this.unselectAll();
}
if(metaKey && item.hasClass('ui-state-highlight')) {
this.unselectItem(item);
}
else {
this.selectItem(item);
this.cursorItem = item;
}
}
else {
//range selection
if(this.cursorItem) {
this.unselectAll();
var currentItemIndex = item.index(),
cursorItemIndex = this.cursorItem.index(),
startIndex = (currentItemIndex > cursorItemIndex) ? cursorItemIndex : currentItemIndex,
endIndex = (currentItemIndex > cursorItemIndex) ? (currentItemIndex + 1) : (cursorItemIndex + 1);
for(var i = startIndex ; i < endIndex; i++) {
this.selectItem(this.items.eq(i));
}
}
else {
this.selectItem(item);
this.cursorItem = item;
}
}
if(!unchanged) {
var values = [],
indexes = [];
for(var i = 0; i < this.choices.length; i++) {
if(this.choices.eq(i).prop('selected')) {
values.push(this.choices.eq(i).attr('value'));
indexes.push(i);
}
}
this._trigger('change', event, {
value: values,
index: indexes
})
}
this.element.trigger('click');
PUI.clearSelection();
event.preventDefault();
},
unselectAll: function() {
this.items.removeClass('ui-state-highlight ui-state-hover');
this.choices.filter(':selected').prop('selected', false);
},
selectItem: function(value) {
var item = null;
if($.type(value) === 'number') {
item = this.items.eq(value);
}
else {
item = value;
}
item.addClass('ui-state-highlight').removeClass('ui-state-hover');
this.choices.eq(item.index()).prop('selected', true);
this._trigger('itemSelect', null, this.choices.eq(item.index()));
},
unselectItem: function(value) {
var item = null;
if($.type(value) === 'number') {
item = this.items.eq(value);
}
else {
item = value;
}
item.removeClass('ui-state-highlight');
this.choices.eq(item.index()).prop('selected', false);
this._trigger('itemUnselect', null, this.choices.eq(item.index()));
},
_setOption: function (key, value) {
if (key === 'data') {
this.element.empty();
this.listContainer.empty();
this._populateInputFromData();
this._populateContainerFromOptions();
this._restrictHeight();
this._bindEvents();
}
else if (key === 'value') {
this._updateSelection(value);
}
else if (key === 'options') {
this._updateOptions(value);
}
else {
$.Widget.prototype._setOption.apply(this, arguments);
}
},
disable: function () {
this._unbindEvents();
this.items.addClass('ui-state-disabled');
},
enable: function () {
this._bindEvents();
this.items.removeClass('ui-state-disabled');
},
_createItemContent: function(choice) {
if(this.options.template) {
var template = this.options.template.html();
Mustache.parse(template);
return Mustache.render(template, choice);
}
else if(this.options.content) {
return this.options.content.call(this, choice);
}
else {
return choice.label;
}
},
_updateSelection: function(value) {
this.choices.prop('selected', false);
this.items.removeClass('ui-state-highlight');
for(var i = 0; i < this.choices.length; i++) {
var choice = this.choices.eq(i);
if(this.options.multiple) {
if($.inArray(choice.attr('value'), value) >= 0) {
choice.prop('selected', true);
this.items.eq(i).addClass('ui-state-highlight');
}
}
else {
if(choice.attr('value') == value) {
choice.prop('selected', true);
this.items.eq(i).addClass('ui-state-highlight');
break;
}
}
}
},
//primeng
_updateOptions: function(options) {
var $this = this;
setTimeout(function() {
$this.items = $this.listContainer.children('li').addClass('ui-listbox-item ui-corner-all');
$this.choices = $this.element.children('option');
$this._unbindItemEvents();
$this._bindItemEvents(this.items);
}, 50);
},
_destroy: function() {
this._unbindEvents();
if(!this.options.enhanced) {
this.listContainer.remove();
this.element.unwrap().unwrap();
}
if(this.options.style) {
this.container.removeAttr('style');
}
if(this.options.styleClass) {
this.container.removeClass(this.options.styleClass);
}
if(this.options.multiple) {
this.element.prop('multiple', false);
}
if(this.choices) {
this.choices.prop('selected', false);
}
},
removeAllOptions: function() {
this.element.empty();
this.listContainer.empty();
this.container.empty();
this.element.val('');
},
addOption: function(value,label) {
var newListItem;
if(this.options.content) {
var option = (label) ? {'label':label,'value':value}: {'label':value,'value':value};
newListItem = $('
').append(this.options.content(option)).appendTo(this.listContainer);
}
else {
var listLabel = (label) ? label: value;
newListItem = $('
' + listLabel + '').appendTo(this.listContainer);
}
if(label)
this.element.append('
');
else
this.element.append('
');
this._bindItemEvents(newListItem);
this.choices = this.element.children('option');
this.items = this.items.add(newListItem);
}
});
})();
/**
* PrimeUI BaseMenu widget
*/
(function() {
$.widget("primeui.puibasemenu", {
options: {
popup: false,
trigger: null,
my: 'left top',
at: 'left bottom',
triggerEvent: 'click'
},
_create: function() {
if(this.options.popup) {
this._initPopup();
}
},
_initPopup: function() {
var $this = this;
this.element.closest('.ui-menu').addClass('ui-menu-dynamic ui-shadow').appendTo(document.body);
if($.type(this.options.trigger) === 'string') {
this.options.trigger = $(this.options.trigger);
}
this.positionConfig = {
my: this.options.my,
at: this.options.at,
of: this.options.trigger
};
this.options.trigger.on(this.options.triggerEvent + '.ui-menu', function(e) {
if($this.element.is(':visible')) {
$this.hide();
}
else {
$this.show();
}
e.preventDefault();
});
//hide overlay on document click
$(document.body).on('click.ui-menu-' + this.id, function (e) {
var popup = $this.element.closest('.ui-menu');
if(popup.is(":hidden")) {
return;
}
//do nothing if mousedown is on trigger
var target = $(e.target);
if(target.is($this.options.trigger.get(0))||$this.options.trigger.has(target).length > 0) {
return;
}
//hide if mouse is outside of overlay except trigger
var offset = popup.offset();
if(e.pageX < offset.left ||
e.pageX > offset.left + popup.width() ||
e.pageY < offset.top ||
e.pageY > offset.top + popup.height()) {
$this.hide(e);
}
});
//Hide overlay on resize
$(window).on('resize.ui-menu-' + this.id, function() {
if($this.element.closest('.ui-menu').is(':visible')) {
$this.align();
}
});
},
show: function() {
this.align();
this.element.closest('.ui-menu').css('z-index', ++PUI.zindex).show();
},
hide: function() {
this.element.closest('.ui-menu').fadeOut('fast');
},
align: function() {
this.element.closest('.ui-menu').css({left:'', top:''}).position(this.positionConfig);
},
_destroy: function() {
if(this.options.popup) {
$(document.body).off('click.ui-menu-' + this.id);
$(window).off('resize.ui-menu-' + this.id);
this.options.trigger.off(this.options.triggerEvent + '.ui-menu');
}
}
});
})();
/**
* PrimeUI Menu widget
*/
(function() {
$.widget("primeui.puimenu", $.primeui.puibasemenu, {
options: {
enhanced: false
},
_create: function() {
var $this = this;
this.id = this.element.attr('id');
if(!this.id) {
this.id = this.element.uniqueId().attr('id');
}
if(!this.options.enhanced) {
this.element.wrap('');
}
this.container = this.element.parent();
this.originalParent = this.container.parent();
this.element.addClass('ui-menu-list ui-helper-reset');
this.element.children('li').each(function() {
var listItem = $(this);
if(listItem.children('h3').length > 0) {
listItem.addClass('ui-widget-header ui-corner-all');
}
else {
listItem.addClass('ui-menuitem ui-widget ui-corner-all');
var menuitemLink = listItem.children('a'),
icon = menuitemLink.data('icon');
menuitemLink.addClass('ui-menuitem-link ui-corner-all');
if($this.options.enhanced)
menuitemLink.children('span').addClass('ui-menuitem-text');
else
menuitemLink.contents().wrap('');
if(icon) {
menuitemLink.prepend('');
}
}
});
this.menuitemLinks = this.element.find('.ui-menuitem-link:not(.ui-state-disabled)');
this._bindEvents();
this._super();
},
_bindEvents: function() {
var $this = this;
this.menuitemLinks.on('mouseenter.ui-menu', function(e) {
$(this).addClass('ui-state-hover');
})
.on('mouseleave.ui-menu', function(e) {
$(this).removeClass('ui-state-hover');
});
if(this.options.popup) {
this.menuitemLinks.on('click.ui-menu', function() {
$this.hide();
});
}
},
_unbindEvents: function() {
this.menuitemLinks.off('mouseenter.ui-menu mouseleave.ui-menu');
if(this.options.popup) {
this.menuitemLinks.off('click.ui-menu');
}
},
_destroy: function() {
this._super();
var $this = this;
this._unbindEvents();
this.element.removeClass('ui-menu-list ui-helper-reset');
this.element.children('li.ui-widget-header').removeClass('ui-widget-header ui-corner-all');
this.element.children('li:not(.ui-widget-header)').removeClass('ui-menuitem ui-widget ui-corner-all')
.children('a').removeClass('ui-menuitem-link ui-corner-all').each(function() {
var link = $(this);
link.children('.ui-menuitem-icon').remove();
if($this.options.enhanced)
link.children('.ui-menuitem-text').removeClass('ui-menuitem-text');
else
link.children('.ui-menuitem-text').contents().unwrap();
});
if(this.options.popup) {
this.container.appendTo(this.originalParent);
}
if(!this.options.enhanced) {
this.element.unwrap();
}
}
});
})();
/**
* PrimeUI BreadCrumb Widget
*/
(function() {
$.widget("primeui.puibreadcrumb", {
_create: function() {
var $this = this;
if(!this.options.enhanced) {
this.element.wrap('