Created
September 29, 2015 02:17
-
-
Save kilgarenone/312b827c9c4df25ebfe5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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