Vue.component('grid', { computed: { gridRows: function() { var lefts = $(this.markup).find('div.slick-pane-left:not(.slick-pane-header)').not('[style*="display: none"]').find('div.slick-row').get(); var rights = $(this.markup).find('div.slick-pane-right:not(.slick-pane-header)').not('[style*="display: none"]').find('div.slick-row').get(); var rows = []; do { var row = []; row.push(lefts.shift()); row.push(rights.shift()); rows.push(row); } while (lefts.length); return rows; }, headersArray: function() { return $(this.markup).find('div.slick-header-columns div[role="columnheader"] > span:not(.slick-sort-indicator)'); } }, created: function() { var $this = this; this.headersArray.each(function(index, header) { $this.headers.push($(header).text().trim()); }); $.each(this.gridRows, function(rowIndex, row) { var columns = []; $this.gridColumns(row).each(function(colIndex, column) { if ($this.table.length == 0) { $this.columnOrder.push(colIndex); } columns.push($this.gridColumnData(column)); }); $this.table.push(columns); $this.originalTable.push(columns); }); }, data: function() { return { columnOrder: [], headers: [], hidden: [], originalTable: [], sortColumn: { index : -1, direction: -1 }, table: [] } }, methods: { getSortIcon: function(index) { if (index != this.sortColumn.index) { return 'fa-sort grayed-out'; } return this.sortColumn.direction == 1 ? 'fa-sort-amount-asc' : 'fa-sort-amount-desc'; }, gridColumnData: function(gridColumn) { var child = $(gridColumn).find(':first'); if ($(child).hasClass('ui-text')) { return $(child).find('span') ? $(child).text().trim() : $(child).attr('title'); } if ($(child).hasClass('ui-checkbox')) { return ''; } if ($(child).hasClass('editor-text')) { return $(child).val(); } if ($(child).hasClass('ui-buttoninput')) { return $(child).find('input:first-child').val(); } if ($(child).hasClass('ui-combobox')) { return $(child).find('select option[value="' + $(child).find('input').val() + '"]').text().trim(); } return ''; }, gridColumns: function(gridRow) { return $(gridRow).find('div[role="gridcell"]'); }, isHidden: function(index) { return this.hidden.indexOf(index) != -1; }, moveColumn: function(index, direction) { var curr = this.columnOrder.indexOf(index); this.$set(this.columnOrder, curr, this.columnOrder[curr + direction]); this.$set(this.columnOrder, curr + direction, index); }, sortRows: function() { var $this = this; this.table = this.table.sort(function(a, b) { var index = $this.sortColumn.index; var x = a; var y = b; if ($this.sortColumn.direction == 2) { x = b; y = a; } if (x[index] > y[index]) { return 1; } if (x[index] < y[index]) { return -1; } return 0; }); }, toggleHidden: function(index) { if (this.isHidden(index)) { this.hidden.splice(this.hidden.indexOf(index), 1); } else { this.hidden.push(index); } }, toggleSortColumn: function(index) { if (this.sortColumn.index != index) { this.sortColumn.index = index; this.sortColumn.direction = 1; this.sortRows(); } else if (this.sortColumn.direction == 1) { this.sortColumn.direction = 2; this.sortRows(); } else { this.sortColumn.index = -1; this.sortColumn.direction = -1; this.table = this.originalTable.slice(0); } }, $: $ }, props: ['markup'], template: "
\n {{ headers[columnIndex] }}\n \n <\/i>\n 2\" class=\"action fa\" :class=\"getSortIcon(columnIndex)\" @click=\"toggleSortColumn(columnIndex)\" title=\"Change Column Sort\"><\/i>\n <\/i>\n <\/i>\n <\/div>\n <\/th>\n <\/tr>\n <\/thead>\n \n <\/td>\n <\/tr>\n <\/tbody>\n <\/table>\n<\/div>"
});
Vue.component('presentation', {
computed: {
hasLegend: function() {
return $(this.markup).closest('fieldset').length > 0;
},
legend: function() {
return $(this.markup).closest('fieldset').find('legend').text().trim();
},
rows: function() {
return $(this.markup).find('tr');
}
},
created: function() {
var $this = this;
this.rows.each(function(index, row) {
var actualRow = [];
$this.columns(row).each(function(index, column) {
var actualColumn = '';
switch (true) {
case $this.isHidden(column):
break;
case $this.isSimple(column):
actualColumn = $this.getText(column);
break;
case $this.isGroup(column):
actualColumn = '' + $this.getGroupLabel(column) + ': ' + $this.getOptionList(column);
break;
case $this.isComplex(column):
var that = $this;
var added = [];
$this.complex(column).each(function(index, complexity) {
var label = that.getNonEmptyLabel(complexity);
if (added.indexOf(label) == -1) {
actualColumn += label + ' ' + that.getData(column, $(complexity)) + '';
added.push(label);
}
});
break;
case $this.isLabeled(column):
actualColumn = $this.getLabel(column) + ' ' + $this.getData(column, $this.getLabelEl(column)) + ' ' + $this.getDescriptor(column);
break;
case $this.isTextField(column):
actualColumn = '' + $(column).find('label').text().trim() + ': ' + $(column).find('span').text().trim();
break;
}
actualRow.push(actualColumn);
});
$this.table.push(actualRow);
});
var maxColumns = 0;
$.each(this.table, function(index, row) {
maxColumns = Math.max(maxColumns, row.length);
});
$.each(this.table, function(index, row) {
while (row.length < maxColumns) {
$this.table[index].push('');
}
});
},
data: function() {
return {
hidden: false,
table: []
}
},
methods: {
columnHasData: function(index) {
var hasData = false;
$.each(this.table, function(rowIndex, row) {
$.each(row, function (columnIndex, column) {
if (columnIndex == index && column.length) {
hasData = true;
}
});
});
return hasData;
},
columns: function(row) {
return $(row).find('td');
},
complex: function(column) {
return this.getLabelEl(column);
},
getData: function(column, label) {
if (label.length == 0) {
return '';
}
var data = $(column).find('input[name="' + label.attr('for').substr(1) + '"]').attr('title');
if (data) {
return data;
}
data = $(column).find('input[id="' + label.attr('for') + '"]').attr('title');
if (data) {
return data;
}
if (label.attr('for').match(/_btn$/)) {
return '';
}
return '';
},
getDescriptor: function(column) {
var descriptor = $(column).find('div[data-widget="textfield"]');
return descriptor.length
? '' + $(descriptor).find('span').text().trim() + ''
: '';
},
getGroupLabel: function(column) {
return $(column).find('div[data-widget="component"] > label:first-child').text().trim();
},
getLabel: function(column) {
return this.getNonEmptyLabel(this.getLabelEl(column));
},
getLabelEl: function(column) {
return $(column).find('label[for]');
},
getNonEmptyLabel: function(label) {
label = $(label).text().trim();
return label
? '' + label + ':'
: '';
},
getOptionList: function(column) {
var options = this.options(column);
var list = [];
options.each(function(index, option) {
list.push(
' '
+ $(option).find('label').text().trim()
+ '');
});
return list.join(' ');
},
getText: function(column) {
return $(column).find('div[data-widget="text"]').text().trim();
},
isComplex: function(column) {
return this.getLabelEl(column).length > 1;
},
isGroup: function(column) {
return $(column).find('div[data-widget="radiogroup"]').length > 0;
},
isHidden: function(column) {
return $(column).find('div[style*="display: none"]').length > 0;
},
isLabeled: function(column) {
return this.getLabelEl(column).length > 0;
},
isSimple: function(column) {
return $(column).find('div[data-widget="text"]').length > 0;
},
isTextField: function(column) {
return $(column).find('div[data-widget="textfield"]').length > 0;
},
options: function(column) {
return $(column).find('div[data-widget="radiobox"]');
},
rowHasData: function(r) {
return r.join('').length;
},
$: $
},
props: ['markup'],
template: " | \n \n \n {{ legend }}\n <\/i>\n <\/h3>\n <\/div>\n <\/td>\n <\/tr>\n <\/tbody>\n <\/table>\n<\/div>\n"
});
Vue.component('banner-printer', {
created: function() {
this.message = this.messageTemplate;
},
computed: {
activities: function() {
var activities = [];
var pieces = $(this.footer).find('div[id^="activity"][style!="display: none;"]');
pieces.each(function(index, piece) {
if ($(piece).find('label').length && $(piece).find('span').length) {
activities.push(piece);
}
});
return activities;
},
criteria: function() {
var criteria = {};
var pieces = $(this.doc).find('div.layout-row label').not('.empty');
pieces.each(function(index, piece) {
if ($(piece).parent().css('display') == 'none') {
return;
}
var value = '';
var data = $(piece).closest('div[data-widget="component"]').find('span.ui-widget-content');
if (!data.length) {
data = $(piece).closest('div[data-widget="datefield"]').find('span.ui-widget-content');
}
if (!data.length) {
data = $(piece).closest('div[data-widget="textinput"]').find('span.ui-widget-content');
}
if (!data.length) {
data = $(piece).closest('div[data-widget="combobox"]').find('span.ui-widget-content');
}
data.each(function(index, datum) {
value += ' ' + $(datum).text().trim();
});
if (!data.length) {
data = $(piece).closest('div[data-widget="component"]').find('div[data-widget="checkbox"] > button');
if (data.length) {
value = ''
}
}
criteria[$(piece).text().trim()] = value;
});
return criteria;
},
messageTemplate: function() {
return "ENTER DETAILS HERE\n(missing/wrong data, malformed tables, etc.)";
},
sections: function() {
var sections = [];
var pieces = $(this.doc).find('div[data-widget="collapsiblepanel"] h3.ui-collapsiblepanel-header');
pieces.each(function(index, piece) {
if ($(piece).closest('div.ui-tabs-hide').length == 0) {
sections.push(piece);
}
});
pieces = $(this.doc).find('div[data-widget="accordion"] h3.ui-accordion-header');
pieces.each(function(index, piece) {
if ($(piece).closest('div.ui-tabs-hide').length == 0) {
sections.push(piece);
}
});
return sections;
}
},
data: function() {
return {
b9Form: this.title,
buttonLabel: 'Report a problem',
contact: '',
doc: markup,
error: '',
footer: footer,
message: '',
success: ''
};
},
methods: {
done: function(response) {
this.buttonLabel = 'Report a problem';
if (response.error != undefined) {
this.error = response.error;
} else if (response.success != undefined) {
this.success = response.success;
} else {
this.error = 'There was an error submitting the report. Please try again.';
}
},
fail: function(response) {
this.buttonLabel = 'Report a problem';
if (response.error != undefined) {
this.error = response.error;
} else {
this.error = 'There was an error submitting the report. Please try again.';
}
},
grids: function(section) {
return $(section).parent().find('div[data-widget="datagrid"]').get();
},
resetResult: function() {
this.error = '';
this.success = '';
},
reportProblem: function() {
this.buttonLabel = 'Sending...';
$.ajax({
type: 'POST',
url: 'https://banner9printer.apps.wayne.edu/report',
data: {
b9Form: this.b9Form,
contact: this.contact,
message: this.message,
_token: 'pSTykxNI3g6g7U5nFr329csiGIXSy5heWVrtjBuP'
}
})
.done(this.done)
.fail(this.fail);
},
sectionTitle: function(section) {
var titleDiv = $(section).find('div.ui-accordion-title');
if (titleDiv.length) {
return titleDiv.text().trim();
}
titleDiv = $(section).find('div.ui-collapsiblepanel-title');
if (titleDiv.length) {
return titleDiv.text().trim();
}
return $(section).text().trim();
},
tables: function(section) {
return $(section).parent().find('table[role="presentation"]').filter(function(index, table) {
return $(table).closest('div[style*="display: none"]').length == 0;
}).get();
},
$ : $
},
props: ['stats', 'title'],
template: " | \n \n |
---|