diff --git a/README.md b/README.md
index 5cfa885c..31b481ea 100644
--- a/README.md
+++ b/README.md
@@ -63,7 +63,7 @@ It profits from these great projects:
* removes `aai` mode!
* adds smart browsing
-* add line wrap and line highlighting on hover to text preview
+* add line wrap and line highlighting (on hover) to text preview
### v0.22.1 - *2012-10-16*
diff --git a/src/_h5ai/client/js/inc/core/location.js b/src/_h5ai/client/js/inc/core/location.js
index 5529447e..253f98ac 100644
--- a/src/_h5ai/client/js/inc/core/location.js
+++ b/src/_h5ai/client/js/inc/core/location.js
@@ -72,6 +72,36 @@ modulejs.define('core/location', ['_', 'modernizr', 'core/settings', 'core/event
return modulejs.require('model/entry').get(absHref);
},
+ load = function (callback) {
+
+ modulejs.require('core/server').request({action: 'get', entries: true, entriesHref: absHref, entriesWhat: 1}, function (json) {
+
+ var Entry = modulejs.require('model/entry'),
+ entry = Entry.get(absHref);
+
+ if (json) {
+
+ var found = {};
+
+ _.each(json.entries, function (jsonEntry) {
+
+ var e = Entry.get(jsonEntry.absHref, jsonEntry.time, jsonEntry.size, jsonEntry.status, jsonEntry.content);
+ found[e.absHref] = true;
+ });
+
+ _.each(entry.content, function (e) {
+
+ if (!found[e.absHref]) {
+ Entry.remove(e.absHref);
+ }
+ });
+ }
+ if (_.isFunction(callback)) {
+ callback(entry);
+ }
+ });
+ },
+
setLocation = function (newAbsHref, keepBrowserUrl) {
newAbsHref = encodedHref(newAbsHref);
@@ -89,12 +119,19 @@ modulejs.define('core/location', ['_', 'modernizr', 'core/settings', 'core/event
}
notify.set('loading...');
- modulejs.require('core/refresh')(function () {
+ load(function () {
notify.set();
event.pub('location.changed', getItem());
});
},
+ refresh = function () {
+
+ load(function () {
+ event.pub('location.refreshed', getItem());
+ });
+ },
+
setLink = function ($el, item) {
$el.attr('href', item.absHref);
@@ -123,13 +160,19 @@ modulejs.define('core/location', ['_', 'modernizr', 'core/settings', 'core/event
}
+ event.sub('ready', function () {
+
+ setLocation(document.location.href, true);
+ });
+
+
return {
forceEncoding: forceEncoding,
- encodedHref: encodedHref,
getDomain: getDomain,
getAbsHref: getAbsHref,
getItem: getItem,
setLocation: setLocation,
+ refresh: refresh,
setLink: setLink
};
});
diff --git a/src/_h5ai/client/js/inc/core/refresh.js b/src/_h5ai/client/js/inc/core/refresh.js
deleted file mode 100644
index 912b06c4..00000000
--- a/src/_h5ai/client/js/inc/core/refresh.js
+++ /dev/null
@@ -1,37 +0,0 @@
-
-modulejs.define('core/refresh', ['_', 'core/server', 'model/entry', 'core/location'], function (_, server, Entry, location) {
-
- var parseJson = function (entry, json) {
-
- var found = {};
-
- _.each(json.entries, function (jsonEntry) {
-
- var e = Entry.get(jsonEntry.absHref, jsonEntry.time, jsonEntry.size, jsonEntry.status, jsonEntry.content);
- found[e.absHref] = true;
- });
-
- _.each(entry.content, function (e) {
- if (!found[e.absHref]) {
- Entry.remove(e.absHref);
- }
- });
- },
-
- refresh = function (callback) {
-
- var entry = Entry.get(location.getAbsHref());
-
- server.request({action: 'get', entries: true, entriesHref: entry.absHref, entriesWhat: 1}, function (json) {
-
- if (json) {
- parseJson(entry, json);
- }
- if (_.isFunction(callback)) {
- callback(entry);
- }
- });
- };
-
- return refresh;
-});
diff --git a/src/_h5ai/client/js/inc/ext/autorefresh.js b/src/_h5ai/client/js/inc/ext/autorefresh.js
index 7faff453..43e4b020 100644
--- a/src/_h5ai/client/js/inc/ext/autorefresh.js
+++ b/src/_h5ai/client/js/inc/ext/autorefresh.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/autorefresh', ['_', '$', 'core/settings', 'core/event', 'core/refresh'], function (_, $, allsettings, event, refresh) {
+modulejs.define('ext/autorefresh', ['_', '$', 'core/settings', 'core/event', 'core/location'], function (_, $, allsettings, event, location) {
var settings = _.extend({
enabled: false,
@@ -8,7 +8,7 @@ modulejs.define('ext/autorefresh', ['_', '$', 'core/settings', 'core/event', 'co
heartbeat = function () {
- refresh();
+ location.refresh();
setTimeout(heartbeat, settings.interval);
},
diff --git a/src/_h5ai/client/js/inc/ext/crumb.js b/src/_h5ai/client/js/inc/ext/crumb.js
index b4656b50..43b906f1 100644
--- a/src/_h5ai/client/js/inc/ext/crumb.js
+++ b/src/_h5ai/client/js/inc/ext/crumb.js
@@ -14,7 +14,6 @@ modulejs.define('ext/crumb', ['_', '$', 'core/settings', 'core/resource', 'core/
pageHintTemplate = '
',
statusHintTemplate = '',
- // updates the crumb for this single entry
update = function (entry, force) {
if (!force && entry.$crumb && entry.$crumb.data('status') === entry.status) {
@@ -62,13 +61,6 @@ modulejs.define('ext/crumb', ['_', '$', 'core/settings', 'core/resource', 'core/
return $html;
},
- onContentChanged = function (entry) {
-
- if (entry.$crumb) {
- update(entry, true);
- }
- },
-
onLocationChanged = function (item) {
var crumb = item.getCrumb(),
@@ -101,10 +93,6 @@ modulejs.define('ext/crumb', ['_', '$', 'core/settings', 'core/resource', 'core/
return;
}
- // event.sub('entry.created', onContentChanged);
- // event.sub('entry.removed', onContentChanged);
- event.sub('entry.changed', onContentChanged);
-
event.sub('location.changed', onLocationChanged);
};
diff --git a/src/_h5ai/client/js/inc/ext/delete.js b/src/_h5ai/client/js/inc/ext/delete.js
index 7c99f4de..5e0d5159 100644
--- a/src/_h5ai/client/js/inc/ext/delete.js
+++ b/src/_h5ai/client/js/inc/ext/delete.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/event', 'core/resource', 'core/refresh', 'core/server'], function (_, $, allsettings, event, resource, refresh, server) {
+modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/event', 'core/resource', 'core/location', 'core/server'], function (_, $, allsettings, event, resource, location, server) {
var settings = _.extend({
enabled: false
@@ -31,7 +31,7 @@ modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/event', 'core/re
if (!json || json.code) {
failed();
}
- refresh();
+ location.refresh();
},
requestDeletion = function (hrefsStr) {
diff --git a/src/_h5ai/client/js/inc/ext/dropbox.js b/src/_h5ai/client/js/inc/ext/dropbox.js
index 2d45a5b2..e8a8b78f 100644
--- a/src/_h5ai/client/js/inc/ext/dropbox.js
+++ b/src/_h5ai/client/js/inc/ext/dropbox.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/dropbox', ['_', '$', 'core/settings', 'core/location', 'core/refresh', 'core/server'], function (_, $, allsettings, location, refresh, server) {
+modulejs.define('ext/dropbox', ['_', '$', 'core/settings', 'core/location', 'core/server'], function (_, $, allsettings, location, server) {
var settings = _.extend({
enabled: false,
@@ -99,7 +99,7 @@ modulejs.define('ext/dropbox', ['_', '$', 'core/settings', 'core/location', 'cor
afterAll: function () {
- refresh();
+ location.refresh();
},
error: function (err, file) {
diff --git a/src/_h5ai/client/js/inc/ext/sort.js b/src/_h5ai/client/js/inc/ext/sort.js
index 89031b21..964528d5 100644
--- a/src/_h5ai/client/js/inc/ext/sort.js
+++ b/src/_h5ai/client/js/inc/ext/sort.js
@@ -143,8 +143,8 @@ modulejs.define('ext/sort', ['_', '$', 'core/settings', 'core/resource', 'core/e
event.preventDefault();
});
- event.sub('entry.changed', onContentChanged);
- event.sub('entry.created', onContentChanged);
+ event.sub('location.changed', onContentChanged);
+ event.sub('location.refreshed', onContentChanged);
};
init();
diff --git a/src/_h5ai/client/js/inc/ext/statusbar.js b/src/_h5ai/client/js/inc/ext/statusbar.js
index 09edfd47..7956e932 100644
--- a/src/_h5ai/client/js/inc/ext/statusbar.js
+++ b/src/_h5ai/client/js/inc/ext/statusbar.js
@@ -1,5 +1,5 @@
-modulejs.define('ext/statusbar', ['_', '$', 'core/settings', 'core/format', 'core/event', 'core/location'], function (_, $, allsettings, format, event, location) {
+modulejs.define('ext/statusbar', ['_', '$', 'core/settings', 'core/format', 'core/event'], function (_, $, allsettings, format, event) {
var settings = _.extend({
enabled: false
@@ -37,36 +37,22 @@ modulejs.define('ext/statusbar', ['_', '$', 'core/settings', 'core/format', 'cor
var $statusbar = $(template),
$folderTotal = $statusbar.find('.folderTotal'),
- $fileTotal = $statusbar.find('.fileTotal');
+ $fileTotal = $statusbar.find('.fileTotal'),
+ onLocationChanged = function (item) {
+
+ var stats = item.getStats();
+ $folderTotal.text(stats.folders);
+ $fileTotal.text(stats.files);
+ };
$statusDefault = $statusbar.find('.status.default');
$statusDynamic = $statusbar.find('.status.dynamic');
- event.sub('location.changed', function (item) {
-
- var stats = item.getStats();
- $folderTotal.text(stats.folders);
- $fileTotal.text(stats.files);
-
- update();
- });
-
- event.sub('statusbar', update);
$('#bottombar > .center').append($statusbar);
- event.sub('entry.created', function () {
-
- var stats = location.getItem().getStats();
- $folderTotal.text(stats.folders);
- $fileTotal.text(stats.files);
- });
-
- event.sub('entry.removed', function () {
-
- var stats = location.getItem().getStats();
- $folderTotal.text(stats.folders);
- $fileTotal.text(stats.files);
- });
+ event.sub('statusbar', update);
+ event.sub('location.changed', onLocationChanged);
+ event.sub('location.refreshed', onLocationChanged);
event.sub('entry.mouseenter', function (entry) {
diff --git a/src/_h5ai/client/js/inc/ext/tree.js b/src/_h5ai/client/js/inc/ext/tree.js
index 00afc7f2..a42787dc 100644
--- a/src/_h5ai/client/js/inc/ext/tree.js
+++ b/src/_h5ai/client/js/inc/ext/tree.js
@@ -20,7 +20,6 @@ modulejs.define('ext/tree', ['_', '$', 'core/settings', 'core/resource', 'core/e
magicSequence = '=h5ai=',
- // updates the tree for this single entry
update = function (entry) {
var $html = $(template),
@@ -223,7 +222,6 @@ modulejs.define('ext/tree', ['_', '$', 'core/settings', 'core/resource', 'core/e
});
},
- // creates the complete tree from entry down to the root
init = function () {
if (!settings.enabled) {
@@ -243,14 +241,8 @@ modulejs.define('ext/tree', ['_', '$', 'core/settings', 'core/resource', 'core/e
shiftTree();
});
- event.sub('location.changed', onLocationChanged);
-
- // strong negative performance impact in aai mode
- // event.sub('entry.changed', onContentChanged);
- // event.sub('entry.created', onContentChanged);
- // event.sub('entry.removed', onContentChanged);
-
event.sub('ready', adjustSpacing);
+ event.sub('location.changed', onLocationChanged);
$(window).on('resize', function () {
diff --git a/src/_h5ai/client/js/inc/main.js b/src/_h5ai/client/js/inc/main.js
index 8e92d494..f9513298 100644
--- a/src/_h5ai/client/js/inc/main.js
+++ b/src/_h5ai/client/js/inc/main.js
@@ -1,14 +1,10 @@
modulejs.define('main', ['_', 'core/event'], function (_, event) {
- event.pub('beforeView');
-
modulejs.require('view/items');
modulejs.require('view/spacing');
modulejs.require('view/viewmode');
- event.pub('beforeExt');
-
_.each(modulejs.state(), function (state, id) {
if (/^ext\/.+/.test(id)) {
@@ -16,7 +12,5 @@ modulejs.define('main', ['_', 'core/event'], function (_, event) {
}
});
- modulejs.require('core/location').setLocation(document.location.href, true);
-
event.pub('ready');
});
diff --git a/src/_h5ai/client/js/inc/view/items.js b/src/_h5ai/client/js/inc/view/items.js
index 702ae024..f5d5420c 100644
--- a/src/_h5ai/client/js/inc/view/items.js
+++ b/src/_h5ai/client/js/inc/view/items.js
@@ -119,6 +119,36 @@ modulejs.define('view/items', ['_', '$', 'core/settings', 'core/resource', 'core
}
},
+ onLocationRefreshed = function (item) {
+
+ var $extended = $('#extended'),
+ $ul = $extended.find('ul'),
+ $empty = $extended.find('.empty'),
+ $items = $ul.find('.entry:not(.folder-parent)'),
+ currentItems = _.map($items.get(), function (i) { return $(i).data('entry'); }),
+ refreshedItems = _.values(item.content),
+ create = _.difference(refreshedItems, currentItems),
+ remove = _.difference(currentItems, refreshedItems);
+
+ _.each(create, function (item) {
+
+ update(item, true).hide().appendTo($ul).fadeIn(400);
+ });
+
+ _.each(remove, function (item) {
+
+ item.$extended.fadeOut(400, function () {
+ item.$extended.remove();
+ });
+ });
+
+ if (item.isEmpty()) {
+ setTimeout(function () { $empty.show(); }, 400);
+ } else {
+ $empty.hide();
+ }
+ },
+
init = function () {
var $content = $(contentTemplate),
@@ -134,36 +164,8 @@ modulejs.define('view/items', ['_', '$', 'core/settings', 'core/resource', 'core
.on('mouseenter', '.entry a', onMouseenter)
.on('mouseleave', '.entry a', onMouseleave);
- event.sub('entry.changed', function (entry) {
-
- if (entry.isInCurrentFolder() && entry.$extended) {
- update(entry, true);
- }
- });
-
- event.sub('entry.created', function (entry) {
-
- if (entry.isInCurrentFolder() && !entry.$extended) {
- $emtpy.fadeOut(100, function () {
- update(entry, true).hide().appendTo($ul).fadeIn(400);
- });
- }
- });
-
- event.sub('entry.removed', function (entry) {
-
- if (entry.isInCurrentFolder() && entry.$extended) {
- entry.$extended.fadeOut(400, function () {
- entry.$extended.remove();
-
- if (entry.parent.isEmpty()) {
- $emtpy.fadeIn(100);
- }
- });
- }
- });
-
event.sub('location.changed', onLocationChanged);
+ event.sub('location.refreshed', onLocationRefreshed);
$content.appendTo('body');
};
diff --git a/src/_h5ai/conf/options.json b/src/_h5ai/conf/options.json
index 759607ce..eb13f916 100644
--- a/src/_h5ai/conf/options.json
+++ b/src/_h5ai/conf/options.json
@@ -55,7 +55,7 @@ Options
- interval: number, update interval in milliseconds, at least 1000
*/
"autorefresh": {
- "enabled": false,
+ "enabled": true,
"interval": 5000
},