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