Skip to content

Instantly share code, notes, and snippets.

@kilgarenone
Created September 29, 2015 02:17
Show Gist options
  • Save kilgarenone/312b827c9c4df25ebfe5 to your computer and use it in GitHub Desktop.
Save kilgarenone/312b827c9c4df25ebfe5 to your computer and use it in GitHub Desktop.
var filterTaskInAsset = (function() {
// Private variables
var expandedAsset = {},
assetStore = {},
loadMoreHref = null,
list = null,
currentStatus = null;
// Cache asset's properties
function insertAssetStates(assetId, assetObj) {
var thisAsset = expandedAsset[assetId] || {};
expandedAsset[assetId] = $.extend(thisAsset, assetObj);
}
function clearAssetIds() {
expandedAsset.length = 0;
}
// Get expanded assets' id
function getExpandedAssetKeys() {
if(!Object.keys(expandedAsset).length > 0) {
return 0;
}
var keys = [];
for(var k in expandedAsset) {
var asset = expandedAsset[k];
if(asset.visible) {
var spinnerOverlay = $('<div class="processing"><i class="fa fa-spinner fa-spin fa-2x"></i></div>');
keys.push(k);
asset.spinner = spinnerOverlay.appendTo(asset.$ele.find('.taskList'));
}
}
return keys;
}
function cacheList(loadMoreUrl, assetList) {
loadMoreHref = loadMoreUrl;
list = assetList;
}
function getCurrentStatus() {
return currentStatus;
}
function setCurrentStatus(status) {
currentStatus = status;
}
function compareStatus(assetId) {
return expandedAsset[assetId].inStatus != currentStatus;
}
function replaceAndAppend() {
for(var k in assetStore) {
// skip if not expanded asset
if(!expandedAsset[k].visible) {
continue;
}
var assetStoreEle = assetStore[k],
wrapDiv = $('<div/>');
// Initialize and append listitems in a container
for (var i = 0, len = assetStoreEle.length; i < len; i++) {
assetStoreEle[i].data('ListItem', (new ListItem( assetStoreEle[i], { updateAddressBar: false,
parentAsset: { 'assetOnUpdate' : expandedAsset[k].onup,
'assetId' : k
}
})));
wrapDiv.append(assetStoreEle[i]);
}
// Append the container's nodes in corresponding assets
expandedAsset[k].$ele.find('.listItem.add')
.nextAll('.listItem, .content')
.remove()
.end()
.after(wrapDiv.children());
// Reset listitems in assetstore
assetStore[k].length = 0;
// Remove cached spinner in an asset
expandedAsset[k].spinner.remove();
// Update latest filtered status of an asset
expandedAsset[k].inStatus = currentStatus;
}
}
function filterTaskInAsset(d) {
var filterParam = {ft: d.type, fv: d.id, fr: d.fr || 0, start: 0};
$.ajax({
'url' : loadMoreHref + '/filter_assets_tasks',
'type' : 'POST',
'data' : { ids: getExpandedAssetKeys(), filter: filterParam }
})
.done(function(res) {
if(res.status !== 1) {
return;
}
$('<div/>').append($(res.html)).find('.listItem').each(function() {
var listItem = $(this),
listItemId = listItem.data('assetId');
if(assetStore[listItemId] == null) {
assetStore[listItemId] = [];
}
// Insert listitems based on their asset id for looping later
assetStore[listItemId].push(listItem);
});
replaceAndAppend();
});
}
// Public methods
return {
insertAssetStates : insertAssetStates,
filterTask : filterTaskInAsset,
clearAssetIds : clearAssetIds,
cacheList : cacheList,
getCurrentStatus : getCurrentStatus,
setCurrentStatus : setCurrentStatus,
compareStatus : compareStatus
};
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment