mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-03-20 04:20:00 +01:00
Improves event system.
This commit is contained in:
parent
34eed09537
commit
2819fd8496
@ -24,12 +24,14 @@ modulejs.define('core/event', ['_'], function (_) {
|
||||
|
||||
pub = function (topic, data) {
|
||||
|
||||
// console.log('EVENT PUB', topic, data);
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
|
||||
// console.log('EVENT PUB', topic, args);
|
||||
if (_.isString(topic) && subscriptions[topic]) {
|
||||
|
||||
_.each(subscriptions[topic], function (callback) {
|
||||
|
||||
callback(data);
|
||||
callback.apply(topic, args);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
@ -104,6 +104,8 @@ modulejs.define('core/location', ['_', 'modernizr', 'core/settings', 'core/event
|
||||
|
||||
setLocation = function (newAbsHref, keepBrowserUrl) {
|
||||
|
||||
event.pub('location.beforeChange');
|
||||
|
||||
newAbsHref = encodedHref(newAbsHref);
|
||||
|
||||
if (absHref !== newAbsHref) {
|
||||
@ -127,8 +129,19 @@ modulejs.define('core/location', ['_', 'modernizr', 'core/settings', 'core/event
|
||||
|
||||
refresh = function () {
|
||||
|
||||
|
||||
var item = getItem(),
|
||||
oldItems = _.values(item.content);
|
||||
|
||||
event.pub('location.beforeRefresh');
|
||||
|
||||
load(function () {
|
||||
event.pub('location.refreshed', getItem());
|
||||
|
||||
var newItems = _.values(item.content),
|
||||
added = _.difference(newItems, oldItems),
|
||||
removed = _.difference(oldItems, newItems);
|
||||
|
||||
event.pub('location.refreshed', item, added, removed);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -6,10 +6,22 @@ modulejs.define('ext/autorefresh', ['_', '$', 'core/settings', 'core/event', 'co
|
||||
interval: 5000
|
||||
}, allsettings.autorefresh),
|
||||
|
||||
timeoutId = null,
|
||||
|
||||
heartbeat = function () {
|
||||
|
||||
location.refresh();
|
||||
setTimeout(heartbeat, settings.interval);
|
||||
},
|
||||
|
||||
before = function () {
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
},
|
||||
|
||||
after = function () {
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(heartbeat, settings.interval);
|
||||
},
|
||||
|
||||
init = function () {
|
||||
@ -20,10 +32,10 @@ modulejs.define('ext/autorefresh', ['_', '$', 'core/settings', 'core/event', 'co
|
||||
|
||||
settings.interval = Math.max(1000, settings.interval);
|
||||
|
||||
event.sub('ready', function () {
|
||||
|
||||
setTimeout(heartbeat, settings.interval);
|
||||
});
|
||||
event.sub('location.beforeChange', before);
|
||||
event.sub('location.beforeRefresh', before);
|
||||
event.sub('location.changed', after);
|
||||
event.sub('location.refreshed', after);
|
||||
};
|
||||
|
||||
init();
|
||||
|
@ -224,6 +224,11 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
|
||||
_.each(item.content, initEntry);
|
||||
},
|
||||
|
||||
onLocationRefreshed = function (item, added, removed) {
|
||||
|
||||
_.each(added, initEntry);
|
||||
},
|
||||
|
||||
init = function () {
|
||||
|
||||
if (!settings.enabled) {
|
||||
@ -280,7 +285,7 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
|
||||
});
|
||||
|
||||
event.sub('location.changed', onLocationChanged);
|
||||
event.sub('entry.created', initEntry);
|
||||
event.sub('location.refreshed', onLocationRefreshed);
|
||||
|
||||
$(window).on('resize load', adjustSize);
|
||||
};
|
||||
|
@ -275,6 +275,11 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
|
||||
_.each(item.content, initEntry);
|
||||
},
|
||||
|
||||
onLocationRefreshed = function (item, added, removed) {
|
||||
|
||||
_.each(added, initEntry);
|
||||
},
|
||||
|
||||
init = function () {
|
||||
|
||||
if (!settings.enabled) {
|
||||
@ -303,7 +308,7 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
|
||||
});
|
||||
|
||||
event.sub('location.changed', onLocationChanged);
|
||||
event.sub('entry.created', initEntry);
|
||||
event.sub('location.refreshed', onLocationRefreshed);
|
||||
|
||||
$(window).on('resize load', adjustSize);
|
||||
};
|
||||
|
@ -111,6 +111,23 @@ modulejs.define('ext/select', ['_', '$', 'core/settings', 'core/event'], functio
|
||||
}
|
||||
},
|
||||
|
||||
onLocationRefreshed = function (item, added, removed) {
|
||||
|
||||
var selectionChanged = false;
|
||||
|
||||
_.each(removed, function (item) {
|
||||
|
||||
if (item.$extended && item.$extended.hasClass('selected')) {
|
||||
item.$extended.removeClass('selected');
|
||||
selectionChanged = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (selectionChanged) {
|
||||
publish();
|
||||
}
|
||||
},
|
||||
|
||||
init = function () {
|
||||
|
||||
if (!settings.enabled) {
|
||||
@ -119,13 +136,7 @@ modulejs.define('ext/select', ['_', '$', 'core/settings', 'core/event'], functio
|
||||
|
||||
$selectionRect.hide().appendTo('body');
|
||||
|
||||
event.sub('entry.removed', function (entry) {
|
||||
|
||||
if (entry.$extended && entry.$extended.hasClass('selected')) {
|
||||
entry.$extended.removeClass('selected');
|
||||
publish();
|
||||
}
|
||||
});
|
||||
event.sub('location.refreshed', onLocationRefreshed);
|
||||
|
||||
$document
|
||||
.on('mousedown', '.noSelection', noSelection)
|
||||
|
@ -61,6 +61,11 @@ modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/event', 'core/ser
|
||||
}, settings.delay);
|
||||
},
|
||||
|
||||
onLocationRefreshed = function (item, added, removed) {
|
||||
|
||||
_.each(added, checkEntry);
|
||||
},
|
||||
|
||||
init = function () {
|
||||
|
||||
if (!settings.enabled || !server.api) {
|
||||
@ -68,10 +73,7 @@ modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/event', 'core/ser
|
||||
}
|
||||
|
||||
event.sub('location.changed', onLocationChanged);
|
||||
event.sub('entry.created', function (entry) {
|
||||
|
||||
checkEntry(entry);
|
||||
});
|
||||
event.sub('location.refreshed', onLocationRefreshed);
|
||||
};
|
||||
|
||||
init();
|
||||
|
@ -51,39 +51,21 @@ modulejs.define('model/entry', ['_', 'core/types', 'core/event', 'core/settings'
|
||||
return null;
|
||||
}
|
||||
|
||||
var created = !cache[absHref],
|
||||
changed = false;
|
||||
|
||||
var self = cache[absHref] || new Entry(absHref);
|
||||
|
||||
if (_.isNumber(time)) {
|
||||
if (self.time !== time) {
|
||||
changed = true;
|
||||
}
|
||||
self.time = time;
|
||||
}
|
||||
if (_.isNumber(size)) {
|
||||
if (self.size !== size) {
|
||||
changed = true;
|
||||
}
|
||||
self.size = size;
|
||||
}
|
||||
if (status) {
|
||||
if (self.status !== status) {
|
||||
changed = true;
|
||||
}
|
||||
self.status = status;
|
||||
}
|
||||
if (isContentFetched) {
|
||||
self.isContentFetched = true;
|
||||
}
|
||||
|
||||
if (created) {
|
||||
event.pub('entry.created', self);
|
||||
} else if (changed) {
|
||||
event.pub('entry.changed', self);
|
||||
}
|
||||
|
||||
return self;
|
||||
},
|
||||
|
||||
@ -102,8 +84,6 @@ modulejs.define('model/entry', ['_', 'core/types', 'core/event', 'core/settings'
|
||||
|
||||
removeEntry(entry.absHref);
|
||||
});
|
||||
|
||||
event.pub('entry.removed', self);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -119,23 +119,18 @@ modulejs.define('view/items', ['_', '$', 'core/settings', 'core/resource', 'core
|
||||
}
|
||||
},
|
||||
|
||||
onLocationRefreshed = function (item) {
|
||||
onLocationRefreshed = function (item, added, removed) {
|
||||
|
||||
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);
|
||||
$empty = $extended.find('.empty');
|
||||
|
||||
_.each(create, function (item) {
|
||||
_.each(added, function (item) {
|
||||
|
||||
update(item, true).hide().appendTo($ul).fadeIn(400);
|
||||
});
|
||||
|
||||
_.each(remove, function (item) {
|
||||
_.each(removed, function (item) {
|
||||
|
||||
item.$extended.fadeOut(400, function () {
|
||||
item.$extended.remove();
|
||||
|
Loading…
x
Reference in New Issue
Block a user