diff --git a/src/_h5ai/config.js b/src/_h5ai/config.js
index bb64c0fa..86dc8053 100644
--- a/src/_h5ai/config.js
+++ b/src/_h5ai/config.js
@@ -60,7 +60,7 @@ var H5AI_CONFIG = {
*/
"autoupdate": {
"enabled": true,
- "interval": 5000
+ "interval": 1000
},
/*
@@ -213,7 +213,7 @@ var H5AI_CONFIG = {
"java": "java",
"makefile": "xml",
"markdown": "plain",
- "php": "php",
+ /*"php": "php",*/
"python": "python",
"readme": "plain",
"rb": "ruby",
@@ -331,7 +331,7 @@ var H5AI_CONFIG = {
"hpp": [".hpp"],
"html": [".htm", ".html", ".shtml"],
"ico": [".ico"],
- "image": [".xpm"],
+ "image": [".svg", ".xpm"],
"install": ["install"],
"java": [".java"],
"jpg": [".jpg", ".jpeg"],
diff --git a/src/_h5ai/css/inc/dropbox.less b/src/_h5ai/css/inc/dropbox.less
new file mode 100644
index 00000000..d87a2f6c
--- /dev/null
+++ b/src/_h5ai/css/inc/dropbox.less
@@ -0,0 +1,100 @@
+
+#dropbox {
+ margin: 48px 24px;
+ padding: 24px 12px;
+ overflow: hidden;
+
+ background-color: #f8f8f8;
+ border: 1px dashed #ccc;
+ border-radius: 10px;
+
+ .transition(all 0.2s ease-in-out);
+
+ .label {
+ text-align: center;
+ color: #eee;
+ font-size: 5em;
+ font-weight: bold;
+ }
+
+ &.hint {
+ // color: #ccc;
+ // border-color: #aaa;
+ }
+
+ &.match {
+ border-color: #555;
+
+ .label {
+ color: #999;
+ }
+ }
+}
+
+#uploads {
+ width: 450px;
+ margin: 12px auto;
+ padding: 0;
+ list-style: none;
+
+ .upload {
+ color: #555;
+ font-size: 0.9em;
+
+ .name {
+ display: inline-block;
+ white-space: nowrap;
+ width: 320px;
+ overflow: hidden;
+
+ &:before {
+ display: inline-block;
+ content: '•';
+ color: #55c;
+ width: 1em;
+ text-align: center;
+ padding-right: 1em;
+ }
+ }
+
+ .size {
+ // display: inline-block;
+ display: none;
+ float: right;
+ white-space: nowrap;
+
+ &:after {
+ content: ' bytes'
+ }
+ }
+
+ .progress {
+ display: inline-block;
+ margin: 4px 8px;
+
+ width: 84px;
+ height: 8px;
+ background-color: #ddd;
+ overflow: hidden;
+ float: right;
+
+ .bar {
+ width: 0%;
+ height: 100%;
+ background-color: #999;
+ }
+ }
+
+ &.finished .name:before {
+ // content: '✓✔';
+ content: '✔';
+ color: #008200;
+ }
+ &.error .name:before {
+ content: '✖';
+ color: #c55;
+ }
+ }
+
+}
+
diff --git a/src/_h5ai/css/inc/preview-img.less b/src/_h5ai/css/inc/preview-img.less
index 7e6f9540..6946de74 100644
--- a/src/_h5ai/css/inc/preview-img.less
+++ b/src/_h5ai/css/inc/preview-img.less
@@ -18,11 +18,22 @@
}
+// @check-white: rgba(255,255,255,0.5);
+// @check-black: rgba(0,0,0,0.2);
+@check-white: #f8f8f8;
+@check-black: #e8e8e8;
#pv-img-image {
max-width: 100%;
max-height: 100%;
border: 2px solid #fff;
.border-radius(4px);
+
+ background-color: @check-white;
+ background-image:
+ -webkit-linear-gradient(45deg, @check-black 25%, transparent 25%, transparent 75%, @check-black 75%, @check-black),
+ -webkit-linear-gradient(45deg, @check-black 25%, transparent 25%, transparent 75%, @check-black 75%, @check-black);
+ background-size: 60px 60px;
+ background-position: 0 0, 30px 30px
}
#pv-img-overlay.fullscreen {
diff --git a/src/_h5ai/css/styles.less b/src/_h5ai/css/styles.less
index 39281b71..427acd71 100644
--- a/src/_h5ai/css/styles.less
+++ b/src/_h5ai/css/styles.less
@@ -23,6 +23,7 @@ body {
@import "inc/content";
@import "inc/extended";
+@import "inc/dropbox";
@import "inc/bottombar";
@import "inc/l10n";
diff --git a/src/_h5ai/images/delete.png b/src/_h5ai/images/delete.png
new file mode 100644
index 00000000..9d8afaef
Binary files /dev/null and b/src/_h5ai/images/delete.png differ
diff --git a/src/_h5ai/js/inc/ext/dropbox.js b/src/_h5ai/js/inc/ext/dropbox.js
new file mode 100644
index 00000000..7e589b53
--- /dev/null
+++ b/src/_h5ai/js/inc/ext/dropbox.js
@@ -0,0 +1,139 @@
+
+modulejs.define('ext/dropbox', ['_', '$', 'core/settings', 'core/entry'], function (_, $, allsettings, entry) {
+
+ var defaults = {
+ enabled: true
+ },
+
+ settings = _.extend({}, defaults, allsettings.dropbox),
+
+ template = '
',
+
+ uploadTemplate = '' +
+ '' +
+ '' +
+ '' +
+ '',
+
+ init = function () {
+
+ if (!settings.enabled) {
+ return;
+ }
+
+ var $dropbox = $(template).appendTo('#content');
+
+ var uploads = {};
+
+ $dropbox.filedrop({
+
+ // The name of the $_FILES entry:
+ paramname: 'userfile',
+
+ maxfiles: 24,
+ maxfilesize: 1024,
+ url: allsettings.h5aiAbsHref + 'php/api.php',
+ data: {
+ action: 'upload',
+ href: entry.absHref
+ },
+
+ dragOver: function () {
+
+ $dropbox.addClass('match');
+ },
+
+ dragLeave: function () {
+
+ $dropbox.removeClass('match');
+ },
+
+ docOver: function () {
+
+ $dropbox.addClass('hint');
+ },
+
+ docLeave: function () {
+
+ $dropbox.removeClass('hint');
+ },
+
+ drop: function () {
+
+ $dropbox.removeClass('match hint');
+ },
+
+
+ beforeEach: function (file) {
+
+ uploads[file.name] = $(uploadTemplate).appendTo('#uploads')
+ .find('.name').text(file.name).end()
+ .find('.size').text(file.size).end()
+ .find('.progress .bar').css('width', 0).end();
+
+ console.log('beforeEach', file);
+ },
+
+ uploadStarted: function (i, file, len) {
+
+ console.log('uploadStarted', i, file, len);
+ },
+
+ progressUpdated: function (i, file, progress) {
+
+ uploads[file.name]
+ .find('.progress .bar').css('width', '' + progress + '%');
+ console.log('progressUpdated', i, file, progress);
+ },
+
+ uploadFinished: function (i, file, response) {
+
+ uploads[file.name].addClass(response.code ? 'error' : 'finished');
+ setTimeout(function () {
+ uploads[file.name].slideUp(400, function () {
+
+ uploads[file.name].remove();
+ });
+ }, 5000);
+ console.log('uploadFinished', i, file, response);
+ },
+
+ afterAll: function () {
+
+ // $('#uploads .upload').remove();
+ },
+
+
+ error: function (err, file) {
+
+ uploads[file.name].addClass('error');
+ setTimeout(function () {
+ uploads[file.name].slideUp(400, function () {
+
+ uploads[file.name].remove();
+ });
+ }, 5000);
+ switch (err) {
+ case 'BrowserNotSupported':
+ console.log('ERROR', 'Your browser does not support HTML5 file uploads!');
+ break;
+ case 'TooManyFiles':
+ console.log('ERROR', 'Too many files! Please select 5 at most! (configurable)');
+ break;
+ case 'FileTooLarge':
+ console.log('ERROR', file.name + ' is too large! Please upload files up to 2mb (configurable).');
+ break;
+ default:
+ break;
+ }
+ console.log('error', err, file);
+ }
+ });
+
+
+
+
+ };
+
+ init();
+});
diff --git a/src/_h5ai/js/inc/ext/preview-img.js b/src/_h5ai/js/inc/ext/preview-img.js
index 1ae586e2..64c50a71 100644
--- a/src/_h5ai/js/inc/ext/preview-img.js
+++ b/src/_h5ai/js/inc/ext/preview-img.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/entry'], function (_, $, allsettings, resource, store, entry) {
+modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/event', 'core/entry'], function (_, $, allsettings, resource, store, event, entry) {
var defaults = {
enabled: false,
@@ -149,7 +149,6 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
$('#pv-img-bar-original').find('a').attr('href', currentEntries[currentIdx].absHref);
}, 1);
});
-
});
},
@@ -201,13 +200,20 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
}
},
- initEntry = function (entries, entry, idx) {
+ initEntry = function (entry) {
- if (entry.$extended) {
+ if (entry.$extended && _.indexOf(settings.types, entry.type) >= 0) {
entry.$extended.find('a').on('click', function (event) {
event.preventDefault();
- onEnter(entries, idx);
+
+ var matchedEntries = _.compact(_.map($('#extended .entry'), function (entry) {
+
+ entry = $(entry).data('entry');
+ return _.indexOf(settings.types, entry.type) >= 0 ? entry : null;
+ }));
+
+ onEnter(matchedEntries, _.indexOf(matchedEntries, entry));
});
}
},
@@ -218,13 +224,9 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
return;
}
- var imageEntries = _.filter(entry.content, function (entry) {
+ _.each(entry.content, function (e) {
- return _.indexOf(settings.types, entry.type) >= 0;
- });
- _.each(imageEntries, function (e, idx) {
-
- initEntry(imageEntries, e, idx);
+ initEntry(e);
});
$(template).appendTo('body');
@@ -277,6 +279,11 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
}
});
+ event.sub('entry.created', function (entry) {
+
+ initEntry(entry);
+ });
+
$(window).on('resize load', adjustSize);
};
diff --git a/src/_h5ai/js/inc/ext/preview-txt.js b/src/_h5ai/js/inc/ext/preview-txt.js
index 8463e073..cfc6429b 100644
--- a/src/_h5ai/js/inc/ext/preview-txt.js
+++ b/src/_h5ai/js/inc/ext/preview-txt.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/entry'], function (_, $, allsettings, resource, store, entry) {
+modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/event', 'core/entry'], function (_, $, allsettings, resource, store, event, entry) {
var defaults = {
enabled: false,
@@ -16,7 +16,7 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
java: 'java',
makefile: 'xml',
markdown: 'plain',
- php: 'php',
+ // php: 'php',
python: 'python',
readme: 'plain',
rb: 'ruby',
@@ -207,13 +207,20 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
}
},
- initEntry = function (entries, entry, idx) {
+ initEntry = function (entry) {
- if (entry.$extended) {
+ if (entry.$extended && _.indexOf(_.keys(settings.types), entry.type) >= 0) {
entry.$extended.find('a').on('click', function (event) {
event.preventDefault();
- onEnter(entries, idx);
+
+ var matchedEntries = _.compact(_.map($('#extended .entry'), function (entry) {
+
+ entry = $(entry).data('entry');
+ return _.indexOf(_.keys(settings.types), entry.type) >= 0 ? entry : null;
+ }));
+
+ onEnter(matchedEntries, _.indexOf(matchedEntries, entry));
});
}
},
@@ -224,13 +231,9 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
return;
}
- var imageEntries = _.filter(entry.content, function (entry) {
+ _.each(entry.content, function (e) {
- return _.indexOf(_.keys(settings.types), entry.type) >= 0;
- });
- _.each(imageEntries, function (e, idx) {
-
- initEntry(imageEntries, e, idx);
+ initEntry(e);
});
$(template).appendTo('body');
@@ -254,6 +257,11 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
event.stopPropagation();
});
+ event.sub('entry.created', function (entry) {
+
+ initEntry(entry);
+ });
+
$(window).on('resize load', adjustSize);
};
diff --git a/src/_h5ai/js/inc/ext/thumbnails.js b/src/_h5ai/js/inc/ext/thumbnails.js
index 468e5a37..8bd87fdc 100644
--- a/src/_h5ai/js/inc/ext/thumbnails.js
+++ b/src/_h5ai/js/inc/ext/thumbnails.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/entry', 'core/ajax'], function (_, allsettings, entry, ajax) {
+modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/entry', 'core/event', 'core/ajax'], function (_, allsettings, entry, event, ajax) {
var defaults = {
enabled: false,
@@ -52,6 +52,11 @@ modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/entry', 'core/aja
_.each(entry.content, checkEntry);
}, settings.delay);
+
+ event.sub('entry.created', function (entry) {
+
+ checkEntry(entry);
+ });
};
init(entry);
diff --git a/src/_h5ai/js/inc/main.js b/src/_h5ai/js/inc/main.js
index e192f2db..6821c3e2 100644
--- a/src/_h5ai/js/inc/main.js
+++ b/src/_h5ai/js/inc/main.js
@@ -27,6 +27,7 @@
// @include "ext/crumb.js"
// @include "ext/custom.js"
// @include "ext/download.js"
+ // @include "ext/dropbox.js"
// @include "ext/filter.js"
// @include "ext/folderstatus.js"
// @include "ext/google-analytics.js"
diff --git a/src/_h5ai/js/inc/view/extended.js b/src/_h5ai/js/inc/view/extended.js
index 5f561c2f..f8ff27bd 100644
--- a/src/_h5ai/js/inc/view/extended.js
+++ b/src/_h5ai/js/inc/view/extended.js
@@ -18,7 +18,7 @@ modulejs.define('view/extended', ['_', '$', 'core/settings', 'core/resource', 'c
'' +
'',
hintTemplate = '',
- listTemplate = '