Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function (window, ElementPrototype, ArrayPrototype, polyfill) {
- function NodeList() { [polyfill] }
- NodeList.prototype.length = ArrayPrototype.length;
- ElementPrototype.matchesSelector = ElementPrototype.matchesSelector ||
- ElementPrototype.mozMatchesSelector ||
- ElementPrototype.msMatchesSelector ||
- ElementPrototype.oMatchesSelector ||
- ElementPrototype.webkitMatchesSelector ||
- function matchesSelector(selector) {
- return ArrayPrototype.indexOf.call(this.parentNode.querySelectorAll(selector), this) > -1;
- };
- ElementPrototype.ancestorQuerySelectorAll = ElementPrototype.ancestorQuerySelectorAll ||
- ElementPrototype.mozAncestorQuerySelectorAll ||
- ElementPrototype.msAncestorQuerySelectorAll ||
- ElementPrototype.oAncestorQuerySelectorAll ||
- ElementPrototype.webkitAncestorQuerySelectorAll ||
- function ancestorQuerySelectorAll(selector) {
- for (var cite = this, newNodeList = new NodeList; cite = cite.parentElement;) {
- if (cite.matchesSelector(selector)) ArrayPrototype.push.call(newNodeList, cite);
- }
- return newNodeList;
- };
- ElementPrototype.ancestorQuerySelector = ElementPrototype.ancestorQuerySelector ||
- ElementPrototype.mozAncestorQuerySelector ||
- ElementPrototype.msAncestorQuerySelector ||
- ElementPrototype.oAncestorQuerySelector ||
- ElementPrototype.webkitAncestorQuerySelector ||
- function ancestorQuerySelector(selector) {
- return this.ancestorQuerySelectorAll(selector)[0] || null;
- };
- })(this, Element.prototype, Array.prototype);
- function generateTableRow() {
- var emptyColumn = document.createElement('tr');
- emptyColumn.innerHTML = '<td><a class="cut"><i class="icon-remove"></i></a><span contenteditable></span></td>' +
- '<td><span contenteditable></span></td>' +
- '<td><span data-prefix>£</span><span contenteditable>0.00</span></td>' +
- '<td><span contenteditable>0</span></td>' +
- '<td><span data-prefix>£</span><span>0.00</span></td>';
- return emptyColumn;
- }
- function parseFloatHTML(element) {
- return parseFloat(element.innerHTML.replace(/[^\d\.\-]+/g, '')) || 0;
- }
- function parsePrice(number) {
- return number.toFixed(2).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1,');
- }
- function updateNumber(e) {
- var
- activeElement = document.activeElement,
- value = parseFloat(activeElement.innerHTML),
- wasPrice = activeElement.innerHTML == parsePrice(parseFloatHTML(activeElement));
- if (!isNaN(value) && (e.keyCode == 38 || e.keyCode == 40 || e.wheelDeltaY)) {
- e.preventDefault();
- value += e.keyCode == 38 ? 1 : e.keyCode == 40 ? -1 : Math.round(e.wheelDelta * 0.025);
- value = Math.max(value, 0);
- activeElement.innerHTML = wasPrice ? parsePrice(value) : value;
- }
- updateInvoice();
- }
- function updateInvoice() {
- var total = 0;
- var cells, price, total, a, i;
- for (var a = document.querySelectorAll('table.inventory tbody tr'), i = 0; a[i]; ++i) {
- cells = a[i].querySelectorAll('span:last-child');
- price = parseFloatHTML(cells[2]) * parseFloatHTML(cells[3]);
- total += price;
- cells[4].innerHTML = price;
- }
- cells = document.querySelectorAll('table.balance td:last-child span:last-child');
- cells[0].innerHTML = total;
- cells[2].innerHTML = document.querySelector('table.meta tr:last-child td:last-child span:last-child').innerHTML = parsePrice(total - parseFloatHTML(cells[1]));
- var prefix = document.querySelector('#prefix').innerHTML;
- for (a = document.querySelectorAll('[data-prefix]'), i = 0; a[i]; ++i) a[i].innerHTML = prefix;
- for (a = document.querySelectorAll('span[data-prefix] + span'), i = 0; a[i]; ++i) if (document.activeElement != a[i]) a[i].innerHTML = parsePrice(parseFloatHTML(a[i]));
- }
- function onContentLoad() {
- updateInvoice();
- var
- input = document.querySelector('input'),
- image = document.querySelector('img');
- function onClick(e) {
- var element = e.target.querySelector('[contenteditable]'), row;
- element && e.target != document.documentElement && e.target != document.body && element.focus();
- if (e.target.matchesSelector('.add')) {
- document.querySelector('table.inventory tbody').appendChild(generateTableRow());
- }
- else if (e.target.className == 'icon-remove') {
- row = e.target.ancestorQuerySelector('tr');
- row.parentNode.removeChild(row);
- }
- updateInvoice();
- }
- function onEnterCancel(e) {
- e.preventDefault();
- image.classList.add('hover');
- }
- function onLeaveCancel(e) {
- e.preventDefault();
- image.classList.remove('hover');
- }
- function onFileInput(e) {
- image.classList.remove('hover');
- var
- reader = new FileReader(),
- files = e.dataTransfer ? e.dataTransfer.files : e.target.files,
- i = 0;
- reader.onload = onFileLoad;
- while (files[i]) reader.readAsDataURL(files[i++]);
- }
- function onFileLoad(e) {
- var data = e.target.result;
- image.src = data;
- }
- if (window.addEventListener) {
- document.addEventListener('click', onClick);
- document.addEventListener('mousewheel', updateNumber);
- document.addEventListener('keydown', updateNumber);
- document.addEventListener('keydown', updateInvoice);
- document.addEventListener('keyup', updateInvoice);
- input.addEventListener('focus', onEnterCancel);
- input.addEventListener('mouseover', onEnterCancel);
- input.addEventListener('dragover', onEnterCancel);
- input.addEventListener('dragenter', onEnterCancel);
- input.addEventListener('blur', onLeaveCancel);
- input.addEventListener('dragleave', onLeaveCancel);
- input.addEventListener('mouseout', onLeaveCancel);
- input.addEventListener('drop', onFileInput);
- input.addEventListener('change', onFileInput);
- }
- }
- window.addEventListener && document.addEventListener('DOMContentLoaded', onContentLoad);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement