diff --git a/src/scripts/base.js b/src/scripts/base.js
new file mode 100644
index 0000000..6ea6a91
--- /dev/null
+++ b/src/scripts/base.js
@@ -0,0 +1,184 @@
+'use strict';
+
+$(document).ready(function() {
+
+ // Smooth scrolling
+ $('a[href*="#"]:not([href="#"])').click(function() {
+ if (location.pathname.replace(/^\//, '') === this.pathname.replace(/^\//, '') && location.hostname === this.hostname) {
+ var target = $(this.hash);
+ target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
+ if (target.length) {
+ $('html,body').animate({
+ scrollTop: target.offset().top
+ }, 1000);
+ return false;
+ }
+ }
+ });
+
+});
+
+(function() {
+ var files = Array();
+ var queue = Array();
+
+ $(window).bind('beforeunload', function(){
+ if (queue.length===0) {
+ return;
+ }
+
+ return 'There are still ' + queue.length + ' files being uploaded.';
+ });
+
+ function upload(file) {
+ $('.browse').addClass('uploading');
+
+ var li = $('
');
+
+ li.append($('####################################################
Uploading... ' + file.name + '
'));
+ $(li).appendTo($('.queue'));
+
+ var xhr = new XMLHttpRequest();
+
+ xhr.upload.addEventListener('progress', function(e) {
+ var pc = parseInt((e.loaded / e.total * 100));
+ $('.upload-progress', $(li)).show();
+ $('.upload-progress .bar', $(li)).css('width', pc + '%');
+ $('.upload-progress span ', $(li)).empty().append(pc + '%');
+
+ }, false);
+
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState === 4) {
+ /* $('.upload-progress', $(li)).hide();*/
+ $('#web').addClass('uploading');
+ // progress.className = (xhr.status == 200 ? "success" : "failure");
+ if (xhr.status === 200) {
+ $(li).html('' + xhr.responseText + '');
+ } else {
+ $(li).html('Error (' + xhr.status + ') during upload of file ' + file.name + '');
+ }
+
+ // file uploaded successfully, remove from queue
+ var index = queue.indexOf(xhr);
+ if (index > -1) {
+ queue.splice(index, 1);
+ }
+
+ files.push(URI(xhr.responseText.replace('\n', '')).path());
+
+ $('.download-zip').attr('href', URI('(' + files.join(',') + ').zip').absoluteTo(location.href).toString());
+ $('.download-tar').attr('href', URI('(' + files.join(',') + ').tar.gz').absoluteTo(location.href).toString());
+
+ $('.all-files').addClass('show');
+ }
+ };
+
+ // should queue all uploads.
+ queue.push(xhr);
+
+ // start upload
+ xhr.open('PUT', './' + file.name, true);
+ xhr.send(file);
+ }
+
+ $(document).bind('dragenter', function(event) {
+ event.preventDefault();
+ }).bind('dragover', function(event) {
+ event.preventDefault();
+ // show drop indicator
+ $('#terminal').addClass('dragged');
+ $('#web').addClass('dragged');
+ }).bind('dragleave', function() {
+ $('#terminal').removeClass('dragged');
+ $('#web').removeClass('dragged');
+
+ }).bind('drop dragdrop', function(event) {
+ var files = event.originalEvent.target.files || event.originalEvent.dataTransfer.files;
+
+ $.each(files, function(index, file) {
+ upload(file);
+ });
+
+ event.stopPropagation();
+ event.preventDefault();
+ });
+
+ $('a.browse').on('click', function() {
+ $('input[type=file]').click();
+ return (false);
+ });
+
+
+ $('input[type=file]').on('change', function() {
+ $.each(this.files, function(index, file) {
+ if (file instanceof Blob) {
+ upload(file);
+ }
+ });
+ });
+
+ // clipboard
+ if (window.location.href.indexOf('download') > -1 ) {
+
+
+ (function() {
+ var copylinkbtn = document.getElementById('copy-link-btn'),
+ copylink = document.getElementById('copy-link-wrapper'),
+ overlay = document.getElementById('overlay');
+
+ var url = 'http://url';
+ copylinkbtn.addEventListener('click', function() {
+
+ var error = document.getElementsByClassName('error');
+
+ while (error[0]) {
+ error[0].parentNode.removeChild(error[0]);
+ }
+
+ document.body.className += ' active';
+
+ copylink.children[1].value = url;
+ copylink.children[1].focus();
+ copylink.children[1].select();
+ }, false);
+
+ overlay.addEventListener('click', function() {
+ document.body.className = '';
+ }, false);
+
+ copylink.children[1].addEventListener('keydown', function(e) {
+
+ var error = document.getElementsByClassName('error');
+
+ while (error[0]) {
+ error[0].parentNode.removeChild(error[0]);
+ }
+
+ setTimeout(function() {
+
+ if ((e.metaKey || e.ctrlKey) && e.keyCode === 67 && isTextSelected(copylink.children[2])) {
+ document.body.className = '';
+ } else if ((e.metaKey || e.ctrlKey) && e.keyCode === 67 && isTextSelected(copylink.children[2]) === false) {
+ var error = document.createElement('span');
+ error.className = 'error';
+ var errortext = document.createTextNode('The link was not copied, make sure the entire text is selected.');
+
+ error.appendChild(errortext);
+ copylink.appendChild(error);
+ }
+ }, 100);
+
+ function isTextSelected(input) {
+ if (typeof input.selectionStart === 'number') {
+ return input.selectionStart === 0 && input.selectionEnd === input.value.length;
+ } else if (typeof document.selection !== 'undefined') {
+ input.focus();
+ return document.selection.createRange().text === input.value;
+ }
+ }
+ }, false);
+ })();
+ }
+
+})();