\
+
System Data \
\
\
\
@@ -506,6 +547,7 @@ setuptools.app.config.settings = function(highlight, section) {
var switchTo = false;
if ( $(this).hasClass('muledump') === true ) switchTo = 'muledump';
if ( $(this).hasClass('settings') === true ) switchTo = 'settings';
+ if ( $(this).hasClass('advanced') === true ) switchTo = 'advanced';
if ( $(this).hasClass('assistants') === true ) switchTo = 'assistants';
if ( $(this).hasClass('system') === true ) switchTo = 'system';
if ( switchTo === false ) return;
@@ -660,7 +702,7 @@ setuptools.app.config.settings = function(highlight, section) {
if ( [
'enabled', 'preventAutoDownload', 'automaticBackups', 'debugging', 'ga', 'gaPing', 'gaErrors', 'gaOptions',
'gaTotals', 'errors', 'autocomplete', 'mqDisplayIgn', 'muleMenu', 'hideHeaderText', 'lowStorageSpace',
- 'compression', 'timesync'
+ 'compression', 'timesync', 'equipSilhouettes'
].indexOf(name) > -1 ) {
newvalue = ( setuptools.copy.config[name] === true ) ? 1 : 0;
@@ -672,8 +714,8 @@ setuptools.app.config.settings = function(highlight, section) {
'maximumBackupCount', 'rowlength', 'nomasonry', 'accountLoadDelay', 'totalswidth', 'mulelogin',
'alertNewVersion', 'menuPosition', 'corsAssistant', 'accountAssistant', 'longpress', 'accountsPerPage',
'backupAssistant', 'groupsMergeMode', 'autoReloadDays', 'pagesearch', 'animations', 'giftChestWidth',
- 'lazySave', 'totalsExportWidth', 'exportDefault'
- ].indexOf(name) > -1 ) {
+ 'lazySave', 'totalsExportWidth', 'exportDefault', 'keyBindings', 'badaccounts',
+ ].indexOf(name) > -1 ) {
newvalue = setuptools.copy.config[name];
@@ -751,6 +793,7 @@ setuptools.app.config.settings = function(highlight, section) {
settings.maximumBackupCount = Number($('.setuptools.app.config.settings select[name="maximumBackupCount"]').val());
settings.autocomplete = ( $('.setuptools.app.config.settings select[name="autocomplete"]').val() === '1' );
settings.automaticBackups = ( $('.setuptools.app.config.settings select[name="automaticBackups"]').val() === '1' );
+ settings.badaccounts = Number($('.setuptools.app.config.settings select[name="badaccounts"]').val());
settings.rowlength = Number($('.setuptools.app.config.settings select[name="rowlength"]').val());
settings.accountLoadDelay = Number($('.setuptools.app.config.settings select[name="accountLoadDelay"]').val());
settings.totalswidth = Number($('.setuptools.app.config.settings select[name="totalswidth"]').val());
@@ -758,6 +801,7 @@ setuptools.app.config.settings = function(highlight, section) {
settings.muleMenu = ( $('.setuptools.app.config.settings select[name="muleMenu"]').val() === '1' );
settings.nomasonry = ( $('.setuptools.app.config.settings select[name="nomasonry"]').val() === '0' ) ? 0 : 1;
settings.errors = ( $('.setuptools.app.config.settings select[name="errors"]').val() === '1' );
+ settings.equipSilhouettes = ( $('.setuptools.app.config.settings select[name="equipSilhouettes"]').val() === '1' );
settings.hideHeaderText = ( $('.setuptools.app.config.settings select[name="hideHeaderText"]').val() === '1' );
settings.debugging = ( $('.setuptools.app.config.settings select[name="debugging"]').val() === '1' );
settings.compression = ( $('.setuptools.app.config.settings select[name="compression"]').val() === '1' );
@@ -765,6 +809,7 @@ setuptools.app.config.settings = function(highlight, section) {
settings.groupsMergeMode = Number($('.setuptools.app.config.settings select[name="groupsMergeMode"]').val());
settings.autoReloadDays = Number($('.setuptools.app.config.settings select[name="autoReloadDays"]').val());
settings.menuPosition = Number($('.setuptools.app.config.settings select[name="menuPosition"]').val());
+ settings.keyBindings = Number($('.setuptools.app.config.settings select[name="keyBindings"]').val());
settings.lazySave = Number($('.setuptools.app.config.settings select[name="lazySave"]').val());
settings.longpress = Number($('.setuptools.app.config.settings select[name="longpress"]').val());
settings.lowStorageSpace = ( $('.setuptools.app.config.settings select[name="lowStorageSpace"]').val() === '1' );
@@ -1024,6 +1069,71 @@ setuptools.app.config.userExists = function(username) {
};
+/**
+ * @function
+ * @param {string} username
+ * @returns {boolean}
+ * Toggle the enabled/disabled state of a user account
+ */
+setuptools.app.config.userToggle = function(username) {
+
+ if ( setuptools.state.loaded === true && setuptools.data.accounts.accounts[username] ) {
+
+ setuptools.data.accounts.accounts[username].enabled = !(setuptools.data.accounts.accounts[username].enabled);
+ setuptools.app.config.save('SetupTools/Config user toggle', true);
+ return true;
+
+ }
+
+ return false;
+
+};
+
+/**
+ * @function
+ * @param {string} guid
+ * @returns {boolean}
+ * Delete the specified user account gracefully
+ */
+setuptools.app.config.userDelete = function(guid) {
+
+ if ( setuptools.state.loaded === true && setuptools.data.accounts.accounts[guid] ) {
+
+ // cancel any potential mulequeue inclusion
+ setuptools.app.mulequeue.task.cancel(guid);
+
+ // cleanup account presence where necessary
+ delete window.accounts[guid];
+ delete setuptools.data.accounts.accounts[guid];
+
+ // clean up pagesearch configs
+ setuptools.app.muledump.pagesearch.state.list = setuptools.app.muledump.pagesearch.state.list.filter(function(data) {
+ return !( data.username === guid );
+ });
+
+ setuptools.app.muledump.pagesearch.paginate.PageList = setuptools.app.muledump.pagesearch.paginate.PageList.filter(function(data) {
+ return !( data.username === guid );
+ });
+
+ // reinitialize pagesearch
+ setuptools.app.muledump.pagesearch.init();
+
+ // clean up mule dom and data
+ if ( mules[guid] ) {
+ mules[guid].dom.remove();
+ delete mules[guid];
+ }
+
+ // save and go
+ setuptools.app.config.save('SetupTools/Config user deleted');
+ return true;
+
+ }
+
+ return false;
+
+};
+
// determine if a user is enabled
setuptools.app.config.userEnabled = function(username) {
diff --git a/lib/setuptools/src/groups.js b/lib/setuptools/src/groups.js
index d7bc3673..9a707e8f 100644
--- a/lib/setuptools/src/groups.js
+++ b/lib/setuptools/src/groups.js
@@ -1305,7 +1305,7 @@ setuptools.app.groups.manager = function(group, open) {
direction = $(this).hasClass('selected');
$(this).addClass('selected');
- if ( setuptools.state.ctrlKey === false ) $(this).siblings().removeClass('selected');
+ if ( setuptools.app.muledump.keys('ctrl', e) === false ) $(this).siblings().removeClass('selected');
firstSelected = $(self).text();
lastSelected = false;
triggered = false;
@@ -1346,7 +1346,7 @@ setuptools.app.groups.manager = function(group, open) {
var cells = $('.setuptools.groupMember.cell');
var firstIndex = setuptools.data.groups.groupOrder.indexOf(firstSelected);
var lastIndex = setuptools.data.groups.groupOrder.indexOf(lastSelected);
- if ( setuptools.state.ctrlKey === false ) $(this).siblings().removeClass('selected');
+ if ( setuptools.app.muledump.keys('ctrl', e) === false ) $(this).siblings().removeClass('selected');
// ascending selection
if ( firstIndex < lastIndex )
@@ -1366,7 +1366,7 @@ setuptools.app.groups.manager = function(group, open) {
}
$(this).addClass('selected');
- if ( setuptools.state.ctrlKey === false ) $(this).siblings().removeClass('selected');
+ if ( setuptools.app.muledump.keys('ctrl', e) === false ) $(this).siblings().removeClass('selected');
}
diff --git a/lib/setuptools/src/init.js b/lib/setuptools/src/init.js
index 20ba5358..716099bc 100644
--- a/lib/setuptools/src/init.js
+++ b/lib/setuptools/src/init.js
@@ -111,16 +111,18 @@ setuptools.init.main = function(window) {
// if user provides their own configuration let's load it
if (
typeof userConfiguration === 'object' &&
- (new SeaSalt_Hashing(JSON.stringify(userConfiguration))).toString() !== '7df52aba88bafe6ffdcdd8cf2e0d358be3bcb08ae5a4f4991940938c45f8ce96'
+ userConfiguration.enabled === true
) {
window.techlog('SetupTools/Init - Client config importing ' + Object.keys(userConfiguration).length + ' keys', 'force');
+
+ delete userConfiguration.enabled;
$.extend(true, setuptools.data, userConfiguration);
// load our configuration into the window
- for ( var i in setuptools.data.config )
- if ( setuptools.data.config.hasOwnProperty(i) )
- window[i] = setuptools.data.config[i];
+ Object.filter(setuptools.data.config, function(key, value) {
+ window[key] = value;
+ });
// check for potential performance issues
setuptools.app.checkperf();
@@ -171,9 +173,9 @@ setuptools.init.main = function(window) {
window.options_init(setuptools.state.hosted);
// load our configuration into the window
- for ( var i in setuptools.data.config )
- if ( setuptools.data.config.hasOwnProperty(i) )
- window[i] = setuptools.data.config[i];
+ Object.filter(setuptools.data.config, function(key, value) {
+ window[key] = value;
+ });
// run any configuration upgrades
setuptools.app.upgrade.seek();
diff --git a/lib/setuptools/src/lightbox.js b/lib/setuptools/src/lightbox.js
index 6b62e557..e8009029 100644
--- a/lib/setuptools/src/lightbox.js
+++ b/lib/setuptools/src/lightbox.js
@@ -1228,7 +1228,9 @@ setuptools.lightbox.tooltip = function(parent, content, modifiers) {
// adjust menu position if this is going to render right of the window
var parentOuter = ( parent !== false ) ? parent.outerWidth() : 0;
var width = tooltip.outerWidth(true);
+ var height = tooltip.outerHeight(true);
if ( position.left+width >= window.innerWidth-20 ) css.left = css.left-width+parentOuter;
+ if ( css.top < window.pageYOffset ) css.top += (parent && parent.outerHeight(true) || 0)+height;
if ( css.left+width >= window.innerWidth ) return;
// set the css
@@ -1347,6 +1349,15 @@ setuptools.lightbox.display = function(page, config) {
if ( typeof config !== 'object' ) config = {};
+ // apply any insertions
+ setuptools.lightbox.inserts = setuptools.lightbox.inserts.filter(function(data) {
+ if ( data[0] === page ) {
+ console.log(data);
+ setuptools.lightbox[data[1]].apply(null, data[2]);
+ }
+ return false;
+ });
+
// search build data for drawhelp and goback data
var gobackData;
var drawhelpData;
@@ -1507,7 +1518,8 @@ setuptools.lightbox.goback = function(page, callback, text1, text2) {
text1 = 'Go back to the';
text2 = 'previous page';
}
- if ( typeof callback != 'function' ) setuptools.lightbox.error('The callback value for goback is not valid.', 10);
+
+ if ( typeof callback !== 'function' ) setuptools.lightbox.error('The callback value for goback is not valid.', 10);
if ( !setuptools.lightbox.builds[page] ) setuptools.lightbox.builds[page] = [];
setuptools.lightbox.builds[page].push({
@@ -1519,6 +1531,28 @@ setuptools.lightbox.goback = function(page, callback, text1, text2) {
};
+/**
+ * @function
+ * @param {string} page
+ * @param {string} callback
+ * @param {array} [args]
+ * Insert a page piece for a future page display
+ */
+setuptools.lightbox.insert = function(page, callback, args) {
+
+ // check for duplicates
+ if ( setuptools.lightbox.inserts.filter(function(data) {
+ return !(
+ data[0] !== page ||
+ (data[0] === page && data[1] !== callback) ||
+ (data[0] === page && data[1] === callback && JSON.stringify(data[2]) !== JSON.stringify(args))
+ );
+ }).length > 0 ) return false;
+
+ return setuptools.lightbox.inserts.push([page, callback, args]);
+
+};
+
// display an error message
setuptools.lightbox.error = function(message, code) {
diff --git a/lib/setuptools/src/muledump.js b/lib/setuptools/src/muledump.js
index c2733f03..302e4cfb 100644
--- a/lib/setuptools/src/muledump.js
+++ b/lib/setuptools/src/muledump.js
@@ -58,291 +58,92 @@ setuptools.app.muledump.warnData = function(Mule, name, data) {
/**
* @function
- * @param {array} CustomList
- * @param {object} mule
- * @returns {{FinalList: Array, RemovedList: Array}}
- * Chsort v1 - Deduplicate and validate custom character id list
- */
-setuptools.app.muledump.chsortcustomDedupAndValidate = function(CustomList, mule) {
-
- // get our list of char ids
- var FinalList = [];
- var CharIdList = [];
- var DuplicateList = [];
- var RemovedList = [];
- CustomList = CustomList.replace('#', '').split(/, ?/);
-
- // generate the character id list
- for ( var i = 0; i < mule.data.query.results.Chars.Char.length; i++ ) CharIdList.push(mule.data.query.results.Chars.Char[i].id);
-
- // validate and deduplicate
- for ( var i in CustomList ) {
-
- if ( CustomList.hasOwnProperty(i) ) {
-
- // is it a valid id
- if ( CharIdList.indexOf(CustomList[i]) === -1 ) {
- if ( typeof CustomList[i] === 'string' ) RemovedList.push(JSON.parse(JSON.stringify(CustomList[i])));
- delete CustomList[i];
- }
-
- // is it already in the list
- if ( DuplicateList.indexOf(CustomList[i]) > -1) {
- if ( typeof CustomList[i] === 'string' ) RemovedList.push(JSON.parse(JSON.stringify(CustomList[i])));
- delete CustomList[i];
- } else {
- if ( typeof CustomList[i] === 'string' ) DuplicateList.push(JSON.parse(JSON.stringify(CustomList[i])));
- }
-
- }
-
- }
-
- // clean up our final list
- for ( var i in CustomList )
- if ( CustomList.hasOwnProperty(i) )
- if ( typeof CustomList[i] === 'string' )
- FinalList.push(CustomList[i]);
-
- return {FinalList: FinalList, RemovedList: RemovedList};
-
-};
-
-/**
- * @function
- * @param {object} mule
- * Chsort v1 - Assist the user in creating a custom sort list
+ * @param {jQuery} $i
+ * @param {string | array} [classes]
+ * @param {string} [content]
+ * @param {number} [ttl]
+ * Binds the item tooltip to all item divs
*/
-setuptools.app.muledump.chsortcustom = function(mule) {
-
- if ( !mule ) setuptools.lightbox.error('No mule provided to custom sort utility.');
-
- // prepare the object is none exists
- if ( typeof setuptools.data.muledump.chsortcustom.accounts[mule.guid] === 'undefined' ) setuptools.data.muledump.chsortcustom.accounts[mule.guid] = {active: '', data: {}};
-
- setuptools.lightbox.build('muledump-chsortcustom-index', ' \
- Saving a list will set that list as active and overwrite any stored data for that list or create a new list item. \
-
For account : : ' + mule.guid + ' \
- ' + ( (
- setuptools.state.loaded === true &&
- typeof setuptools.data.accounts.accounts[mule.guid].ign === 'string' &&
- setuptools.data.accounts.accounts[mule.guid].ign.length > 0
- ) ? '
IGN : : ' + setuptools.data.accounts.accounts[mule.guid].ign + '' : '' ) + '\
-
Choose Existing List \
-
\
-
\
- ');
+setuptools.app.muledump.tooltip = function($i, classes, content, ttl) {
- // build our select menu
- if ( Object.keys(setuptools.data.muledump.chsortcustom.accounts[mule.guid].data).length > 0 ) {
-
- setuptools.lightbox.build('muledump-chsortcustom-index', ' \
- \
- ');
-
- // loop thru data
- for ( var i in setuptools.data.muledump.chsortcustom.accounts[mule.guid].data )
- if ( setuptools.data.muledump.chsortcustom.accounts[mule.guid].data.hasOwnProperty(i) )
- setuptools.lightbox.build('muledump-chsortcustom-index', ' \
- ' + i + ' \
- ');
-
- setuptools.lightbox.build('muledump-chsortcustom-index', ' \
- \
- ');
-
- } else {
+ if ( typeof ttl !== 'number' ) ttl = setuptools.data.config.tooltip;
+ if ( typeof content === 'number' ) {
- setuptools.lightbox.build('muledump-chsortcustom-index', 'No saved lists found');
+ ttl = content;
+ content = undefined;
}
- setuptools.lightbox.build('muledump-chsortcustom-index', ' \
- List Name to Edit \
- \
-
\
-
Prepare List \
-
Enter a list of IDs separated by commas. \
-
\
-
\
-
\
- \
- \
-
\
- ');
-
- setuptools.lightbox.settitle('muledump-chsortcustom-index', 'Character Sorting Lists');
- setuptools.lightbox.drawhelp('muledump-chsortcustom-index', 'docs/features/character-sorting', 'Character Sorting Lists Help');
- setuptools.lightbox.display('muledump-chsortcustom-index');
-
- // populate selected data
- $('select[name="chsortExisting"]').change(function() {
-
- var chsortId = $(this).val();
- $('input[name="chsortListName"]').val(chsortId);
- $('input[name="chsortcustom"]').val(setuptools.data.muledump.chsortcustom.accounts[mule.guid].data[chsortId].join(', '));
-
- });
-
- $('.setuptools.link.muledump.save.delete').click(function() {
-
- var chsortId = $('input[name="chsortListName"]').val();
- if ( chsortId.length === 0 ) return;
- if ( typeof setuptools.data.muledump.chsortcustom.accounts[mule.guid].data[chsortId] === 'undefined' ) return;
-
- // delete the list
- delete setuptools.data.muledump.chsortcustom.accounts[mule.guid].data[chsortId];
-
- // set default value to top key
- var newChsortId = Object.keys(setuptools.data.muledump.chsortcustom.accounts[mule.guid].data)[0];
- if ( setuptools.data.muledump.chsortcustom.accounts[mule.guid].active === chsortId )
- setuptools.data.muledump.chsortcustom.accounts[mule.guid].active = (typeof newChsortId === 'undefined' ) ? '' : newChsortId;
-
- // save the changes
- setuptools.app.config.save('CharacterSort/Delete');
-
- // update the form
- $('select[name="chsortExisting"] option[value="' + chsortId + '"]').remove();
- if ( typeof newChsortId === 'string' ) {
-
- $('select[name="chsortExisting"] option[value="' + newChsortId + '"]').prop('selected', 'selected');
- $('input[name="chsortListName"]').val(newChsortId);
- $('input[name="chsortcustom"]').val(setuptools.data.muledump.chsortcustom.accounts[mule.guid].data[newChsortId].join(', '));
-
- }
-
- });
-
- // save changes to a list or new list
- $('.setuptools.link.muledump.save.list').click(function() {
-
- var UserListName = $('input[name="chsortListName"]').val();
- var UserInput = $('input[name="chsortcustom"]').val();
- var Lists = false;
- if ( UserInput.length > 0 ) Lists = setuptools.app.muledump.chsortcustomDedupAndValidate(UserInput, mule);
- var SaveState = false;
-
- // save the list if it's at least 1 long
- if ( typeof Lists === 'object' && Lists.FinalList.length > 0 ) {
-
- setuptools.data.muledump.chsortcustom.accounts[mule.guid].active = UserListName;
- setuptools.data.muledump.chsortcustom.accounts[mule.guid].data[UserListName] = $.extend(true, [], Lists.FinalList);
- SaveState = setuptools.app.config.save('CharacterSort/Save');
- if ( setuptools.config.devForcePoint !== 'chsortcustom-save' && SaveState === true ) {
-
- if ( Lists.RemovedList.length > 0 ) setuptools.lightbox.build('muledump-chsortcustom-save', 'The follow IDs were invalid or duplicates:
' + Lists.RemovedList.join(', ') + '
');
- setuptools.lightbox.build('muledump-chsortcustom-save', 'The changes have been saved.');
- mule.query(false, true);
-
- }
-
- } else {
-
- // if no list is provided then we're erasing this instead
- if ( UserInput.length === 0 ) {
-
- setuptools.lightbox.build('muledump-chsortcustom-save', 'Choose \'Delete List\' to remove a list.');
-
- } else {
-
- setuptools.lightbox.build('muledump-chsortcustom-save', 'Oops! No valid account IDs were detected.');
-
- }
-
- setuptools.lightbox.build('muledump-chsortcustom-save', ' \
-
Valid formats include: \
-
1, 2, 3, 4, ... \
-
1,2,3,4,... \
-
#1,#2,#3,#4,... \
-
1, #2, 3,#4, ... \
-
You get the idea. \
- ');
-
- }
-
- if ( SaveState === false ) setuptools.lightbox.build('muledump-chsortcustom-save', 'Hmm, there was a problem saving. This setting will reset on page reload.');
- setuptools.lightbox.goback('muledump-chsortcustom-save', function() {
- setuptools.app.muledump.chsortcustom(mule);
- });
- setuptools.lightbox.settitle('muledump-chsortcustom-save', 'Character Sorting Lists');
- setuptools.lightbox.display('muledump-chsortcustom-save');
-
-
- });
-
-};
-
-/**
- * @function
- * @param {jQuery} $i
- * @param {string | array} classes
- * Binds the item tooltip to all item divs
- */
-setuptools.app.muledump.tooltip = function($i, classes) {
-
- // select all items
- if ( !item ) $i = $('.item');
+ var contentCallback = function(self) {
+ setuptools.lightbox.tooltip(self, content, {heightFrom: 'tooltip', classes: classes});
+ };
- // item mouseenter events
- $i.off('mouseenter.muledump.tooltip').on('mouseenter.muledump.tooltip', function(e) {
+ // the default tooltip is for items
+ var defaultCallback = function(self) {
- if ( e.ctrlKey === true ) return;
- var self = this;
var id = +$(self).attr('data-itemId');
var ItemData = items[id];
if ( typeof ItemData !== 'object' || ItemData[0] === 'Empty Slot' ) return;
- // tooltip popup
- clearTimeout(setuptools.tmp.tstateOpen);
- setuptools.tmp.tstateOpen = setTimeout(function() {
- if ( typeof ItemData !== 'object' || ItemData[0] === 'Empty Slot' ) return;
-
- // build tooltip data
- // three columns: [ bagTypeImage ] [ item name/feed power ] [ tier/fame bonus ]
- var html = '';
-
- // poorman's bagType constants
- var bagPosition = '0px 0px';
- if ( ItemData[7] === 1 ) bagPosition = '-26px -0px';
- if ( ItemData[7] === 2 ) bagPosition = '-52px -0px';
- if ( ItemData[7] === 3 ) bagPosition = '-78px -0px';
- if ( ItemData[7] === 4 ) bagPosition = '-26px -26px';
- if ( ItemData[7] === 5 ) bagPosition = '-52px -26px';
- if ( ItemData[7] === 6 ) bagPosition = '-26px -52px';
- if ( ItemData[7] === 7 ) bagPosition = '-0px -26px';
- if ( ItemData[7] === 8 ) bagPosition = '-78px -26px';
- if ( ItemData[7] === 9 ) bagPosition = '-0px -52px';
-
- // column one
- html += ' \
+ // build tooltip data
+ // three columns: [ bagTypeImage ] [ item name/feed power ] [ tier/fame bonus ]
+ var html = '';
+
+ // poorman's bagType constants
+ var bagPosition = '0px 0px';
+ if ( ItemData[7] === 1 ) bagPosition = '-26px -0px';
+ if ( ItemData[7] === 2 ) bagPosition = '-52px -0px';
+ if ( ItemData[7] === 3 ) bagPosition = '-78px -0px';
+ if ( ItemData[7] === 4 ) bagPosition = '-26px -26px';
+ if ( ItemData[7] === 5 ) bagPosition = '-52px -26px';
+ if ( ItemData[7] === 6 ) bagPosition = '-26px -52px';
+ if ( ItemData[7] === 7 ) bagPosition = '-0px -26px';
+ if ( ItemData[7] === 8 ) bagPosition = '-78px -26px';
+ if ( ItemData[7] === 9 ) bagPosition = '-0px -52px';
+
+ // column one
+ html += ' \
\
';
- // column two
- html += ' \
+ // column two
+ html += ' \
\
' + ItemData[0] + ( ( ItemData[8] === true ) ? ' (SB) ' : '' ) + ' \
' + ( (ItemData[6]) ? 'Feed Power: ' + ItemData[6] + ' ' : '' ) + '\
\
';
- // column three
- var tier = '';
- if ( ItemData[2] > -1 && ItemData[1] !== 10 ) tier += '
T' + ItemData[2] + ' ';
- if ( ItemData[9] === 1 && ItemData[1] !== 10 ) tier += '
UT ';
- if ( ItemData[9] === 2 ) tier += '
ST ';
- var c2Margin = ( tier.length > 0 ) ? ' margin-left: 15px;' : '';
- html += ' \
+ // column three
+ var tier = '';
+ if ( ItemData[2] > -1 && ItemData[1] !== 10 ) tier += '
T' + ItemData[2] + ' ';
+ if ( ItemData[9] === 1 && ItemData[1] !== 10 ) tier += '
UT ';
+ if ( ItemData[9] === 2 ) tier += '
ST ';
+ var c2Margin = ( tier.length > 0 ) ? ' margin-left: 15px;' : '';
+ html += ' \
\
' + tier + ' \
' + ( ( ItemData[5] ) ? 'Fame Bonus: ' + ItemData[5] + '% ' : '' ) + ' \
\
';
- setuptools.lightbox.tooltip(self, html, {classes: classes});
- }, setuptools.data.config.tooltip);
+ setuptools.lightbox.tooltip(self, html, {classes: classes});
+ };
+
+ // select all items
+ if ( !item ) $i = $('.item');
+
+ // item mouseenter events
+ $i.off('mouseenter.muledump.tooltip').on('mouseenter.muledump.tooltip', function(e) {
+
+ if ( setuptools.app.muledump.keys('ctrl', e) === true ) return;
+ var self = this;
+
+ // tooltip popup
+ clearTimeout(setuptools.tmp.tstateOpen);
+ setuptools.tmp.tstateOpen = setTimeout(((typeof content === 'string') ? contentCallback : defaultCallback), ttl, self);
// search context menu
/*$(this).contextmenu(function(e) {
@@ -716,1816 +517,84 @@ setuptools.app.muledump.pagesearch.execute = function(state, searchTerm) {
};
-/*
-// Totals
-*/
-
/**
* @function
- * @param {jQuery} [track]
- * @param {string} [page]
- * Display the advanced totals menu
+ * @param {string} guid
+ * @returns {string}
+ * Returns the display name for a provided guid
*/
-setuptools.app.muledump.totals.menu.advanced = function(track, page) {
-
- if ( !(track instanceof jQuery) ) track = $('#totalsMenu');
- setuptools.lightbox.menu.context.close('totalsmenuAdvanced');
- var options = [
- {
- option: 'hover',
- action: 'close'
- },
- {
- option: 'scrollLock',
- hook: '#totalsMenu'
- },
- {
- option: 'skip',
- value: 'reposition'
- },
- {
- option: 'afterClose',
- callback: setuptools.app.muledump.totals.menu.advanced,
- callbackArg: [track, page]
- },
- {
- option: 'css',
- css: {
- width: '177px'
- }
- },
- {
- option: 'class',
- value: 'smallMenuCells'
- },
- {
- option: 'pos',
- h: 'left',
- v: 'top',
- vpx: 28
- },
- {
- class: 'goBack',
- name: 'Go back...',
- callback: setuptools.app.muledump.totals.menu.main,
- override: 'afterClose'
- },
- /*{
- class: 'goBack',
- name: 'Basic Filters...',
- callback: setuptools.app.muledump.totals.menu.basic,
- override: 'afterClose'
- },*/
- {
- option: 'header',
- value: 'Weapons',
- class: 'openTotalWeaponsMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.advanced(args.track, args.page);
- },
- callbackArg: {track: track, page: 'weapons'},
- override: 'afterClose'
- }
- ];
-
- // populate type - weapons
- if ( page === 'weapons' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['bows', 'daggers', 'katanas', 'staves', 'swords', 'wands']
- );
-
- options.push({
- option: 'header',
- value: 'Abilities',
- class: 'openTotalAbilitiesMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.advanced(args.track, args.page);
- },
- callbackArg: {track: track, page: 'abilities'},
- override: 'afterClose'
- });
-
- // populate type - abilities
- if ( page === 'abilities' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['cloaks', 'helms', 'orbs', 'poisons', 'prisms', 'quivers', 'scepters', 'seals', 'shields', 'skulls', 'spells', 'stars', 'tomes', 'traps']
- );
+setuptools.app.muledump.getName = function(guid) {
- options.push({
- option: 'header',
- value: 'Armor',
- class: 'openTotalArmorMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.advanced(args.track, args.page);
- },
- callbackArg: {track: track, page: 'armor'},
- override: 'afterClose'
- });
+ return ( (
+ setuptools.state.loaded === true &&
+ setuptools.data.config.mqDisplayIgn === true &&
+ typeof setuptools.data.accounts.accounts[guid].ign === 'string'
+ ) ? setuptools.data.accounts.accounts[guid].ign : guid );
- // populate type - armor
- if ( page === 'armor' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['heavyarmor', 'lightarmor', 'robes']
- );
+};
- setuptools.app.muledump.totals.menu.populateByType(options, ['rings']);
+/**
+ * @function
+ * @param {string | array} keys
+ * @param {object} e
+ * @param {boolean} [raw]
+ * Return the state of the specified keys
+ */
+setuptools.app.muledump.keys = function(keys, e, raw) {
- options.push(
- {
- class: 'disableAll',
- name: 'Disable All Filters',
- callback: setuptools.app.muledump.totals.config.toggleAllTypes,
- callbackArg: false
- },
- {
- class: 'hideAll',
- name: 'Enable All Filters',
- callback: setuptools.app.muledump.totals.config.toggleAllTypes,
- callbackArg: true
- }
- );
+ if ( typeof keys === 'undefined' ) return;
+ if ( typeof keys === 'string' ) keys = [keys];
+ if ( !Array.isArray(keys) ) return;
- if ( setuptools.data.muledump.totals.configSets.active !== 'Default' ) options.push({
- class: 'saveTotalsSettings',
- name: 'Save Settings',
- callback: function() {
- setuptools.app.muledump.totals.config.save('active', true);
- setuptools.lightbox.status(this, 'Saved!');
- }
+ var keymap = $.extend(true, setuptools.data.muledump.keys[0], setuptools.data.muledump.keys[setuptools.data.config.keyBindings]);
+ var result = {};
+ keys.filter(function(key) {
+ result[key] = e[keymap[key]] || false;
});
- options.push({
- class: 'resetTotalsSettings',
- name: 'Reset Settings',
- callback: function() {
- setuptools.app.muledump.cleanupSecondaryCache();
- setuptools.app.muledump.totals.config.activate('active', true);
- }
+ if ( keys.length === 1 ) return result[keys[0]];
+ if ( raw === true ) return result;
+ var falseCount = 0;
+ Object.filter(result, function(key, value) {
+ if ( value === false ) falseCount++;
});
-
- setuptools.lightbox.menu.context.create('totalsmenuAdvanced', false, track, options);
+ return ( falseCount === 0 );
};
/**
* @function
- * @param {jQuery} [track]
- * @param {string} [page]
- * Display the item types totals menu
- * Presently not used (keeping the menu short)
+ * @param {string} option
+ * @param {boolean} [value]
+ * @param {boolean} [skip]
+ * Toggle the state of the specified options
*/
-setuptools.app.muledump.totals.menu.basic = function(track, page) {
-
- if ( !(track instanceof jQuery) ) track = $('#totalsMenu');
- setuptools.lightbox.menu.context.close('totalsmenuBasic');
- var options = [
- {
- option: 'hover',
- action: 'close'
- },
- {
- option: 'scrollLock',
- hook: '#totalsMenu'
- },
- {
- option: 'skip',
- value: 'reposition'
- },
- {
- option: 'afterClose',
- callback: setuptools.app.muledump.totals.menu.basic,
- callbackArg: [track, page]
- },
- {
- option: 'class',
- value: 'smallMenuCells'
- },
- {
- option: 'css',
- css: {
- width: '177px'
- }
- },
- {
- option: 'pos',
- h: 'left',
- v: 'top',
- vpx: 28
- },
- {
- class: 'goBack',
- name: 'Go back...',
- callback: setuptools.app.muledump.totals.menu.main,
- override: 'afterClose'
- },
- {
- class: 'goBack',
- name: 'Advanced Filters...',
- callback: setuptools.app.muledump.totals.menu.advanced,
- override: 'afterClose'
- }
- ];
-
- /* waiting on this
- options.push({
- option: 'header',
- value: 'Equipment',
- class: 'openTotalEquipmentMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.basic(args.track, args.page);
- },
- callbackArg: {track: track, page: 'equipment'},
- override: 'afterClose'
- });
+setuptools.app.muledump.toggleoption = function(option, value, skip) {
- // populate type - equipment
- if ( page === 'equipment' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['weapons', 'abilities', 'armor', 'rings']
- );*/
+ if ( typeof option === 'undefined' ) return;
+ if ( typeof option === 'string' ) option = [option];
+ if ( Array.isArray(option) === false ) return;
- options.push({
- option: 'header',
- value: 'Consumables',
- class: 'openTotalConsumableMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.basic(args.track, args.page);
- },
- callbackArg: {track: track, page: 'consumables'},
- override: 'afterClose'
- });
+ // switch the option
+ for ( var i = 0; i < option.length; i++) setuptools.data.options[option[i]] = ( typeof value === 'undefined' ) ? !setuptools.data.options[option[i]] : value;
- // populate type - consumables
- if ( page === 'consumables' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['candies', 'helpfulconsumables', 'assistants', 'otherconsumables', 'potions', 'potionssb']
- );
+ // totals filter keys need to update the secondary item filter list
+ setuptools.app.muledump.totals.updateSecondaryFilter();
- options.push({
- option: 'header',
- value: 'Single Use Items',
- class: 'openTotalSingleUseMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.basic(args.track, args.page);
- },
- callbackArg: {track: track, page: 'singleuse'},
- override: 'afterClose'
- });
+ if ( skip !== true ) {
+ update_totals();
+ update_filter();
+ options_save();
+ }
- // populate type - singleuser
- if ( page === 'singleuse' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['finespirits', 'eggs', 'keys', 'petfood', 'petstones', 'portkeys', 'skins', 'textiles']
- );
+};
- options.push({
- option: 'header',
- value: 'Other Items',
- class: 'openTotalOtherItemsMenu',
- callback: function(args) {
- setuptools.app.muledump.totals.menu.basic(args.track, args.page);
- },
- callbackArg: {track: track, page: 'otheritems'},
- override: 'afterClose'
- });
-
- // populate type - armor
- if ( page === 'otheritems' ) setuptools.app.muledump.totals.menu.populateByType(
- options,
- ['empty', 'eventitems', 'misc', 'tarot', 'treasures', 'assistants', 'other', 'tarot', 'treasures']
- );
-
- options.push(
- {
- class: 'disableAll',
- name: 'Disable All Filters',
- callback: setuptools.app.muledump.totals.config.toggleAllTypes,
- callbackArg: false
- },
- {
- class: 'hideAll',
- name: 'Enable All Filters',
- callback: setuptools.app.muledump.totals.config.toggleAllTypes,
- callbackArg: true
- }
- );
-
- if ( setuptools.data.muledump.totals.configSets.active !== 'Default' ) options.push({
- class: 'saveTotalsSettings',
- name: 'Save Settings',
- callback: function() {
- setuptools.app.muledump.totals.config.save('active', true);
- setuptools.lightbox.status(this, 'Saved!');
- }
- });
-
- options.push({
- class: 'resetTotalsSettings',
- name: 'Reset Settings',
- callback: function() {
- setuptools.app.muledump.cleanupSecondaryCache();
- setuptools.app.muledump.totals.config.activate('active', true);
- }
- });
-
- setuptools.lightbox.menu.context.create('totalsmenuBasic', false, track, options);
-
-};
-
-/**
- * @function
- * Display a menu for managing totals-related settings
- */
-setuptools.app.muledump.totals.menu.settings = function() {
-
- /* Active Configuration Sets
- /* Create New Configuration Set
- /* Active Account Filter Members
- /* Item Group Sort Order
- /* Permanently Hidden Items
- */
-
- setuptools.lightbox.close();
- setuptools.lightbox.build('totalsmenu-settings', ' \
-
\
- ');
-
- if ( setuptools.state.loaded === false ) setuptools.lightbox.build('totalsmenu-settings', ' \
-
In order to permanently save these settings you must be using SetupTools. See
Totals Management in the wiki.
\
-
\
- ');
-
- // display the account filter info
- setuptools.lightbox.build('totalsmenu-settings', ' \
-
\
-
Active Configuration Set
\
-
\
- \
- ');
-
- Object.filter(setuptools.data.muledump.totals.configSets.settings, function(name, config) {
- var activeText = '';
- if ( setuptools.data.muledump.totals.configSets.active === name ) activeText = ' (active)';
- setuptools.lightbox.build('totalsmenu-settings', ' \
- ' + name + activeText + ' \
- ');
- });
-
- var favClass = '';
- var favTitle = 'Click to Favorite';
- if ( setuptools.data.muledump.totals.configSets.favorites.indexOf(setuptools.data.muledump.totals.configSets.active) > -1 ) {
- favClass = 'selected';
- favTitle = 'Click to Unfavorite';
- }
-
- setuptools.lightbox.build('totalsmenu-settings', ' \
- \
-
\
-
\
- \
- \
- \
- \
-
\
-
\
-
\
- \
-
\
-
Create New Configuration Set
\
-
\
- \
-
\
-
\
- \
-
\
-
\
-
\
- \
-
Item Group Sorting
\
- ' + ( (setuptools.app.muledump.totals.config.getKey('slotOrder').length === 0) ? '
Uh oh :D This configSet has invalid data!
' : '' ) + ' \
-
\
-
⚪⚪⚪
\
-
\
-
\
- \
-
Active Account Filter Members
\
- ' + ( (setuptools.app.muledump.totals.config.getKey('accountFilter').length === 0) ? '
No accounts in filter
' : '' ) + ' \
-
\
-
\
- ');
-
- // display the hidden items filter info
- setuptools.lightbox.build('totalsmenu-settings', ' \
-
Permanently Hidden Items
\
- ' + ( ( setuptools.app.muledump.totals.config.getKey('itemFilter').length === 0 ) ? '
No items hidden
' : '' ) + '\
-
\
- ');
-
- if ( setuptools.app.muledump.totals.config.getKey('itemFilter').length > 0 ) setuptools.lightbox.build('totalsmenu-settings', ' \
-
⚪⚪⚪
\
-
\
- ');
-
- setuptools.lightbox.build('totalsmenu-settings', ' \
-
\
- Legend \
- Shift+Click items to enable/disable them\
- Click and drag items to sort them (item sorting)\
- Double click items to access subsorting menu (item sorting)\
-
\
- ');
-
- var currentSet = setuptools.data.muledump.totals.configSets.active;
- setuptools.lightbox.settitle('totalsmenu-settings', 'Totals Settings Manager');
- setuptools.lightbox.drawhelp('totalsmenu-settings', 'docs/muledump/totals-manager', 'Totals Help');
- setuptools.lightbox.display('totalsmenu-settings', {variant: 'fl-Totals', afterClose: function() {
- setuptools.tmp.itemSortDragging.off();
- setuptools.app.muledump.totals.updateSecondaryFilter();
- window.update_totals();
- window.update_filter();
- option_updated('totals');
- }});
-
- if ( setuptools.state.loaded === false ) {
- $('.featherlight-content input').prop('disabled', true).attr('placeholder', 'This feature requires SetupTools');
- $('.featherlight-content select').prop('disabled', true);
- $('.featherlight-content div.setuptools.menuStyle:not(.resetSlotOrder)').addClass('disabled truly').removeClass('selected negative').attr('title', 'This feature requires SetupTools');
- }
-
- // item subsorting allows for sorting items within a group
- $('.itemSlotTypeSorting.cell')
- .on('click.muledump.totals.itemGroupSorting', function(e) {
- if ( e.shiftKey === false ) return;
- setuptools.app.muledump.toggleoption('totalsFilter-' + $(this).attr('data-type'), undefined, true);
- $(this).toggleClass('enabled');
- if ( setuptools.state.loaded === false ) {
- window.update_totals();
- window.update_filter();
- option_updated('totals');
- }
- })
- .on('dblclick.muledump.totals.itemGroupSorting', function(e) {
-
- var vst = setuptools.app.muledump.itemSlotTypeVst($(this).attr('data-type'));
- var itemList = setuptools.app.muledump.itemsByVst(vst);
- if ( typeof vst === 'undefined' ) return;
-
- setuptools.lightbox.build('totalsmenu-itemSorting', ' \
-
\
- Click and drag to sort items within their group. Don\'t forget to save on previous page.\
- \
-
\
-
\
- \
- ');
-
- setuptools.lightbox.settitle('totalsmenu-itemSorting', 'Item Sorting');
- setuptools.lightbox.display('totalsmenu-itemSorting', {variant: 'fl-Totals'});
-
- // provide a hidden item filter integration
- $('#itemSubsortingBox > div.item').on('click.muledump.itemFilter', function(e) {
-
- if ( e.target !== this || e.shiftKey === false || !$(this).attr('data-itemid') ) return;
- setuptools.app.muledump.totals.toggleHideItem($(this).attr('data-itemid'));
- $(this).toggleClass('selected');
-
- });
-
- // bind the tooltip
- var itemsSelected = $('div#itemSubsortingBox div.item');
- setuptools.app.muledump.tooltip(itemsSelected, 'itemSubsortingTooltip');
-
- // item dragging
- setuptools.tmp.itemSubsortDragging = new Muledump_Dragging({
- target: ['item', 'subsorting', 'cell'],
- targetattr: 'data-itemId',
- approach: 0.1,
- dragclass: 'dragging bright',
- callbacks: {
- before: function(parent, self) {
-
- if (
- typeof window.items[self.attr('data-itemId')] !== 'object' ||
- typeof window.items[parent.target] !== 'object'
- ) return;
-
- // determine source and target virtualSlotTypes and exit if target doesn't have the attribute
- var itemid = self.attr('data-itemId');
- var targetid = parent.target;
- parent.itemid = itemid;
- parent.targetid = targetid;
- if ( itemid === targetid ) return;
- return true;
-
- },
- after: function(parent, self) {
-
- var slotSubOrder = setuptools.app.muledump.totals.config.getKey('slotSubOrder');
- var vst = window.items[parent.itemid][setuptools.config.vstIndex];
- slotSubOrder[vst].splice(slotSubOrder[vst].indexOf(parent.itemid), 1);
- slotSubOrder[vst].splice((slotSubOrder[vst].indexOf(parent.targetid)+parent.indexModifier), 0, parent.itemid);
-
- }
- }
- });
-
- });
-
- // bind the dragging class
- setuptools.tmp.itemSortDragging = new Muledump_Dragging({
- target: ['itemSlotTypeSorting', 'cell'],
- targetattr: 'data-type',
- approach: 0.1,
- callbacks: {
- before: function(parent, self) {
-
- if (
- typeof window.itemsSlotTypeMap[self.attr('data-type')] !== 'object' ||
- typeof window.itemsSlotTypeMap[parent.target] !== 'object'
- ) return;
-
- // determine source and target virtualSlotTypes and exit if target doesn't have the attribute
- var vst = setuptools.app.muledump.itemSlotTypeVst(self.attr('data-type'));
- var targetVst = setuptools.app.muledump.itemSlotTypeVst(parent.target);
- parent.vst = vst;
- parent.targetVst = targetVst;
- if ( vst === targetVst ) return;
- return true;
-
- },
- after: function(parent, self) {
-
- var slotOrder = setuptools.app.muledump.totals.config.getKey('slotOrder');
- slotOrder.splice(slotOrder.indexOf(parent.vst), 1);
- slotOrder.splice((slotOrder.indexOf(parent.targetVst)+parent.indexModifier), 0, parent.vst);
-
- },
- finish: function(parent, self) {
-
- if ( parent.clickIndexDown === parent.clickIndexUp ) return;
- if ( setuptools.state.loaded === false ) {
- window.init_totals();
- window.update_totals();
- }
-
- }
- }
- });
-
- // item sorting is an expandable box
- setuptools.lightbox.expander('#itemSlotTypeSorting', '.itemSlotTypeSorting.expansion');
- setuptools.lightbox.expander('#hiddenItems', '.hiddenItems.expansion');
-
- // toggle favorite status
- $('.setuptools.link.favorite').on('click.muledump.totals.favorite', function() {
-
- if ( $(this).hasClass('disabled') === true ) return;
- var name = $(this).parent().prev().find('select[name="totalsConfigSets"]').val();
- if ( name === 'Default' ) {
- setuptools.lightbox.status(this, 'No!');
- return;
- }
- var index = setuptools.data.muledump.totals.configSets.favorites.indexOf(name);
- if ( index === -1 ) {
- setuptools.data.muledump.totals.configSets.favorites.push(name);
- $(this).addClass('selected').attr('title', 'Click to Unfavorite');
- } else {
- setuptools.data.muledump.totals.configSets.favorites.splice(index, 1);
- $(this).removeClass('selected').attr('title', 'Click to Favorite');
- }
- setuptools.app.config.save('Totals config set was favorite toggled', true);
-
- });
-
- // automatically switch buttons on config selection
- $('select[name="totalsConfigSets"]').on('change.muledump.totals.totalsConfigSets', function() {
-
- var name = $(this).val();
-
- var favoriteButton = $('.setuptools.link.favorite');
- if ( setuptools.data.muledump.totals.configSets.favorites.indexOf(name) === -1 ) {
- favoriteButton.removeClass('selected').attr('title', 'Click to Favorite');
- } else favoriteButton.addClass('selected').attr('title', 'Click to Unfavorite');
-
- var activateButton = $('.setuptools.link.activateSet');
- if ( setuptools.data.muledump.totals.configSets.active === name ) {
- activateButton.text('Save');
- } else activateButton.text('Switch To');
-
- });
-
- // resets configuration to original state
- $('.setuptools.link.reset').on('click.muledump.totals.reset', function() {
- if ( $(this).hasClass('disabled') === true ) return;
- setuptools.app.muledump.totals.config.activate(undefined, true, true);
- setuptools.lightbox.status(this, 'Active reset!');
- setuptools.app.muledump.totals.menu.settings();
- });
-
- // switch active configuration
- $('.setuptools.link.activateSet')
- .off('click.muledump.totals.activateSet')
- .on('click.muledump.totals.activateSet', function() {
-
- if ( $(this).hasClass('disabled') === true ) return;
- var name = $('select[name="totalsConfigSets"]').val();
- if ( typeof setuptools.data.muledump.totals.configSets.settings[name] !== 'object' ) return;
- if ( $(this).text() === 'Save' ) {
-
- setuptools.app.muledump.totals.config.save(name, true);
- setuptools.lightbox.status($(this), 'Saved!');
-
- window.init_totals();
- window.update_totals();
-
- return;
-
- }
-
- if ( currentSet !== name ) setuptools.app.muledump.totals.config.reset(currentSet);
- currentSet = name;
- setuptools.app.muledump.totals.config.activate(name);
- setuptools.app.muledump.totals.menu.settings();
- setuptools.lightbox.status($('.setuptools.link.activateSet'), "Enabled!");
-
- });
-
- // delete a configuration set
- $('.setuptools.link.deleteSet').on('click.muledump.totals.deleteSet', function() {
-
- if ( $(this).hasClass('disabled') === true ) return;
- var name = $('select[name="totalsConfigSets"]').val();
- if ( name === 'Default' ) {
- setuptools.lightbox.status(this, 'No!');
- return;
- }
- if ( typeof setuptools.data.muledump.totals.configSets.settings[name] !== 'object' ) return;
- delete setuptools.data.muledump.totals.configSets.settings[name];
- setuptools.app.config.save('Totals config set deleted', true);
- if ( name === setuptools.data.muledump.totals.configSets.active ) setuptools.app.muledump.totals.config.activate('Default');
- setuptools.app.muledump.totals.menu.settings();
-
- });
-
- // save configurations
- $('.setuptools.link.saveNewSet').on('click.muledump.totals.saveNewSet', function() {
-
- if ( $(this).hasClass('disabled') === true ) return;
- if ( this.busy === true ) return;
- var name = $('input[name="newConfigSetName"]').val();
-
- // name cannot be empty
- if ( name === '' ) {
-
- this.busy = true;
- $(this).removeClass('positive').addClass('negative');
- setuptools.lightbox.status(this, 'Invalid set name', function(self) {
- self.busy = false;
- $(self).removeClass('negative');
- });
- return;
-
- }
-
- // name must be unique
- if ( typeof setuptools.data.muledump.totals.configSets[name] === 'object' ) {
-
- $(this).removeClass('positive').addClass('negative');
- setuptools.lightbox.status(this, 'Name already exists', function(self) {
- self.removeClass('negative').addClass('positive');
- });
- return;
-
- }
-
- var origName = setuptools.data.muledump.totals.configSets.active;
-
- // create the configuration
- setuptools.app.muledump.totals.config.save(name);
- setuptools.app.muledump.totals.menu.settings();
- setuptools.lightbox.status($('.setuptools.link.saveNewSet'), 'Created!');
-
- // reset previous configSet if saving a new set
- if ( origName !== name ) setuptools.app.muledump.totals.config.reset(origName);
-
- });
-
- // reset the slotOrder to default
- $('div.setuptools.link.resetSlotOrder').on('click.muledump.resetSlotOrder', function() {
- setuptools.app.muledump.totals.config.setKey('slotOrder', $.extend(true, [], setuptools.copy.totals.defaultConfig.slotOrder));
- setuptools.app.muledump.totals.config.setKey('slotSubOrder', $.extend(true, {}, setuptools.config.totalsKeyObjects.slotSubOrder));
- setuptools.app.muledump.totals.menu.settings();
- });
-
- // erase the hidden items list
- $('div.setuptools.link.clearAllHidden').on('click.muledump.clearAllHidden', function() {
- setuptools.app.muledump.totals.config.setKey('itemFilter', $.extend(true, [], setuptools.config.totalsKeyObjects.itemFilter));
- setuptools.tmp.globalTotalsCounter.import('clearExcluded');
- window.update_totals();
- window.update_filter();
- option_updated('totals');
- setuptools.app.muledump.totals.menu.settings();
- });
-
- // handle hidden items list clicks
- var itemsSelected = $('div#hiddenItems div.item');
- setuptools.app.muledump.tooltip(itemsSelected, 'hiddenItemsTooltip');
- itemsSelected.off('click.muledump.totals.hiddenItems').on('click.muledump.totals.hiddenItems', function(e) {
- if ( e.shiftKey === true ) {
-
- var itemId = +$(this).attr('data-itemid');
- setuptools.app.muledump.totals.config.getKey('itemFilter').splice(setuptools.app.muledump.totals.config.getKey('itemFilter').indexOf(itemId), 1);
- setuptools.app.muledump.totals.config.setKey('itemFilter', setuptools.app.muledump.totals.config.getKey('itemFilter'));
- $(this).remove();
- $('.tooltip').remove();
-
- }
- });
-
- // handle account filter list clicks
- $('#accountFilterList div').off('click.muledump.totals.accountFilterList').on('click.muledump.totals.accountFilterList', function(e) {
-
- if ( e.shiftKey === true ) {
-
- var guid = $(this).attr('data-guid');
- if ( !guid ) return;
- setuptools.app.muledump.totals.config.getKey('accountFilter').splice(setuptools.app.muledump.totals.config.getKey('accountFilter').indexOf(guid), 1);
- $(this).remove();
- if ( setuptools.app.muledump.totals.config.getKey('accountFilter').length === 0 ) {
-
- $('#accountFilterList').text('No accounts in filter');
-
- }
-
- }
-
- });
-
- $('div.muledump.link.nameswap').on('click.muledump.link.nameswap', function() {
- setuptools.data.config.mqDisplayIgn = !(setuptools.data.config.mqDisplayIgn);
- setuptools.app.muledump.totals.menu.settings();
- });
-
-};
-
-/**
- * @function
- * @param {jQuery} [track]
- * Display the totals menu
- */
-setuptools.app.muledump.totals.menu.main = function(track) {
-
- if ( !(track instanceof jQuery) ) track = $('#totalsMenu');
- setuptools.lightbox.menu.context.close('totalsmenu');
- var options = [
- {
- option: 'hover',
- action: 'close'
- },
- {
- option: 'scrollLock',
- hook: '#totalsMenu'
- },
- {
- option: 'skip',
- value: 'reposition'
- },
- {
- option: 'afterClose',
- callback: setuptools.app.muledump.totals.menu.main
- },
- {
- option: 'class',
- value: 'smallMenuCells'
- },
- {
- option: 'css',
- css: {
- width: '177px'
- }
- },
- {
- option: 'pos',
- h: 'left',
- v: 'top',
- vpx: 28
- },
- {
- class: 'toggleTotals',
- name: ( (setuptools.data.options.totals === true) ? 'Disable' : 'Enable' ) + ' Totals',
- callback: setuptools.app.muledump.toggleoption,
- callbackArg: 'totals'
- },
- {
- class: 'openTotalsSettings',
- name: 'Settings Manager',
- callback: setuptools.app.muledump.totals.menu.settings,
- override: 'afterClose'
- }
- ];
-
- // totals needs to be enabled for these options
- if ( setuptools.data.options.totals === true ) {
-
- if ( Array.isArray(setuptools.app.muledump.totals.config.getKey('accountFilter')) && setuptools.app.muledump.totals.config.getKey('accountFilter').length > 0 ) options.push({
- class: 'resetAccountFilter',
- name: 'Reset Account Filter',
- callback: function() {
- setuptools.app.muledump.totals.config.setKey('accountFilter', $.extend(true, [], setuptools.config.totalsKeyObjects.accountFilter));
- setuptools.app.muledump.totals.updateSecondaryFilter();
- setuptools.tmp.globalTotalsCounter.import();
- window.update_totals();
- window.update_filter();
- option_updated('totals');
- }
- });
-
- options.push({
- class: 'displayGlobalTotals',
- name: ( (setuptools.data.options.totalsGlobal === true) ? 'Disable' : 'Enable' ) + ' Global',
- callback: function(arg) {
-
- // toggle the option
- setuptools.app.muledump.toggleoption(arg, undefined, true);
-
- // mules with custom sorting need to be reset in certain circumstances
- for (var guid in mules)
- if (mules.hasOwnProperty(guid))
- if (mules[guid].customSorting === true) {
-
- mules[guid].createCounter();
- mules[guid].query(false, true);
-
- }
-
- window.update_totals();
- window.update_filter();
- window.options_save();
-
- },
- callbackArg: 'totalsGlobal'
- });
-
- options.push(
- /*{
- class: 'totalsBasicMenu',
- name: 'Basic Filters...',
- callback: setuptools.app.muledump.totals.menu.basic,
- override: 'afterClose'
- },*/
- {
- option: 'select',
- name: 'Sorting Mode',
- class: 'sortingMode',
- options: {
- standard: 'Standard',
- alphabetical: 'Alphabetical',
- fb: 'Fame Bonus',
- fp: 'Feed Power'
- },
- selected: setuptools.app.muledump.totals.config.getKey('sortingMode'),
- binding: function () {
-
- $('select.sortingMode').on('change.muledump.totals.sortingMode', function () {
-
- var mode = $(this).val();
- setuptools.app.muledump.totals.config.setKey('sortingMode', mode);
- setuptools.app.muledump.totals.updateSecondaryFilter();
- window.init_totals();
- window.update_totals();
- setuptools.app.muledump.totals.menu.main();
-
- });
-
- }
- });
-
- var favoriteOptions = {};
- setuptools.data.muledump.totals.configSets.favorites.filter(function(item, index) {
- if ( setuptools.app.muledump.totals.config.exists(item) === false ) {
-
- setuptools.data.muledump.totals.configSets.favorites.splice(index, 1);
- return;
-
- }
-
- favoriteOptions[item] = item;
- });
- if ( typeof favoriteOptions[setuptools.data.muledump.totals.configSets.active] !== 'string' ) favoriteOptions[setuptools.data.muledump.totals.configSets.active] = setuptools.data.muledump.totals.configSets.active;
-
- if ( Object.keys(favoriteOptions).length > 1 ) options.push({
- option: 'select',
- name: 'Favorite Filters',
- class: 'favoriteFilter',
- options: favoriteOptions,
- selected: setuptools.data.muledump.totals.configSets.active,
- binding: function() {
-
- $('select.favoriteFilter').on('change.muledump.totals.favoriteFilter', function() {
-
- var name = $(this).val();
- if ( typeof setuptools.data.muledump.totals.configSets.settings[name] !== 'object' ) return;
- setuptools.app.muledump.totals.config.reset(setuptools.data.muledump.totals.configSets.active);
- setuptools.app.muledump.totals.config.activate(name);
- setuptools.app.muledump.totals.menu.main();
-
- });
-
- }
- });
-
- if ( setuptools.data.muledump.totals.configSets.active !== 'Default' ) options.push({
- class: 'saveTotalsSettings',
- name: 'Save Settings',
- callback: function() {
- setuptools.app.muledump.totals.config.save('active', true);
- setuptools.lightbox.status(this, 'Saved!');
- }
- });
-
- options.push({
- class: 'resetTotalsSettings',
- name: 'Reset Settings',
- callback: function() {
- setuptools.app.muledump.cleanupSecondaryCache();
- setuptools.app.muledump.totals.config.activate('active', true);
- }
- },
- {
- option: 'header',
- value: 'Advanced Filters...',
- class: 'totalsAdvancedMenu',
- callback: setuptools.app.muledump.totals.menu.advanced,
- override: 'afterClose'
- },
- {
- option: 'header',
- value: 'Standard Filters'
- },
- {
- option: 'select',
- name: 'Fame Bonus',
- class: 'fameBonusFilter',
- options: {
- '-1': 'Disabled',
- '0': '> 0',
- '1': '> 1%',
- '2': '> 2%',
- '3': '> 3%',
- '4': '> 4%',
- '5': '> 5%'
- },
- selected: setuptools.data.options.fameamount,
- binding: function() {
-
- $('select.fameBonusFilter').change(function() {
-
- setuptools.data.options.famefilter = !( $(this).val() === '-1' );
- setuptools.data.options.fameamount = $(this).val();
- option_updated('famefilter');
-
- });
-
- }
- },
- {
- option: 'select',
- name: 'Feed Power',
- class: 'feedPowerFilter',
- options: {
- '-1': 'Disabled',
- '0': '> 0',
- '100': '> 100',
- '250': '> 250',
- '500': '> 500',
- '1000': '> 1000',
- '2500': '> 2500'
- },
- selected: setuptools.data.options.feedpower,
- binding: function() {
-
- $('select.feedPowerFilter').change(function() {
-
- setuptools.data.options.feedfilter = !( $(this).val() === '-1' );
- setuptools.data.options.feedpower = $(this).val();
- option_updated('feedfilter');
-
- });
-
- }
- },
- {
- class: 'toggleSBFilter',
- name: ( (setuptools.data.options.sbfilter === true) ? 'Disable' : 'Show Only' ) + ' Soulbound',
- callback: setuptools.app.muledump.toggleoption,
- callbackArg: 'sbfilter'
- },
- {
- class: 'toggleNonSBFilter',
- name: ( (setuptools.data.options.nonsbfilter === true) ? 'Disable' : 'Show Only' ) + ' Tradeable',
- callback: setuptools.app.muledump.toggleoption,
- callbackArg: 'nonsbfilter'
- },
- {
- class: 'toggleUTFilter',
- name: ( (setuptools.data.options.utfilter === true) ? 'Disable' : 'Show Only' ) + ' Untiered',
- callback: setuptools.app.muledump.toggleoption,
- callbackArg: 'utfilter'
- },
- {
- class: 'toggleSTFilter',
- name: ( (setuptools.data.options.stfilter === true) ? 'Disable' : 'Show Only' ) + ' Set Items',
- callback: setuptools.app.muledump.toggleoption,
- callbackArg: 'stfilter'
- });
-
- }
-
- setuptools.lightbox.menu.context.create('totalsmenu', false, track, options);
-
-};
-
-/**
- * @function
- * @param {object} options
- * @param types
- */
-setuptools.app.muledump.totals.menu.populateByType = function(options, types) {
-
- if ( typeof types === 'string' ) types = [types];
- if ( Array.isArray(types) === false ) return;
-
- for ( var a = 0; a < types.length; a++ ) {
-
- var type = types[a];
- var filterName = 'totalsFilter-' + type;
- var displayName = setuptools.app.muledump.itemSlotTypeName(type);
- if ( typeof displayName === 'undefined' ) continue;
- options.push({
- class: 'toggle-' + filterName,
- name: ( (setuptools.data.options[filterName] === true) ? 'Hide' : 'Show' ) + ' ' + displayName,
- callback: setuptools.app.muledump.toggleoption,
- callbackArg: filterName
- });
-
- }
-
-};
-
-/**
- * @function
- * @param {string} key
- * @param {string} [configSet]
- * @param {*} [defaultValue]
- * @returns {*}
- * Returns the specified key from a configSet
- */
-setuptools.app.muledump.totals.config.getKey = function(key, configSet, defaultValue) {
-
- if ( !configSet || configSet === false ) configSet = setuptools.data.muledump.totals.configSets.active;
- if ( typeof setuptools.data.muledump.totals.configSets.settings[configSet] !== 'object' ) return;
- if ( typeof setuptools.data.muledump.totals.configSets.settings[configSet][key] === 'undefined' ) {
- if ( defaultValue === null ) return;
- if ( !defaultValue ) defaultValue = ( Array.isArray(setuptools.config.totalsKeyObjects[key]) === true ) ?
- $.extend(true, [], setuptools.config.totalsKeyObjects[key]) :
- $.extend(true, {}, setuptools.config.totalsKeyObjects[key]);
- this.setKey(key, defaultValue, configSet);
- return defaultValue;
- }
- return setuptools.data.muledump.totals.configSets.settings[configSet][key];
-
-};
-
-/**
- * @function
- * @param {string} key
- * @param {*} value
- * @param {string} [configSet]
- * Returns the specified key from a configSet
- */
-setuptools.app.muledump.totals.config.setKey = function(key, value, configSet) {
-
- if ( typeof key !== 'string' || !value ) return;
- if ( !configSet ) configSet = setuptools.data.muledump.totals.configSets.active;
- if ( typeof setuptools.data.muledump.totals.configSets.settings[configSet] !== 'object' ) return;
- setuptools.data.muledump.totals.configSets.settings[configSet][key] = value;
- setuptools.data.options[key] = setuptools.data.muledump.totals.configSets.settings[configSet][key];
-
-};
-
-/**
- * @function
- * @param {string} configSet
- * @returns {boolean}
- * Returns whether or not the specified configSet exists
- */
-setuptools.app.muledump.totals.config.exists = function(configSet) {
-
- if ( !configSet || configSet === 'active' ) configSet = setuptools.data.muledump.totals.configSets.active;
- if ( typeof configSet !== 'string' ) return;
- return ( typeof setuptools.data.muledump.totals.configSets.settings[configSet] === 'object' );
-
-};
-
-/**
- * @function
- * @param configSet
- * Reinitializes a configSet (or multiple) for when the slotMap changes or items get added or removed
- */
-setuptools.app.muledump.totals.config.reinit = function(configSet) {
-
- if ( configSet === 'all' ) configSet = Object.keys(setuptools.data.muledump.totals.configSets.settings);
- if ( configSet === 'active' ) configSet = [setuptools.data.muledump.totals.configSets.active];
- if ( typeof configSet === 'string' ) configSet = [configSet];
- if ( Array.isArray(configSet) === false || configSet.length === 0 ) return;
-
- setuptools.app.techlog('Totals/ConfigSet reinit executing');
-
- // configSet cleanup
- configSet.filter(function(configSet) {
-
- var slotSubOrder = setuptools.app.muledump.totals.config.getKey('slotSubOrder', configSet);
- Object.filter(slotSubOrder, function(vst, items) {
-
- // loop through slotOrder groups and make list of items that do not belong
- var deleteItems = [];
- items.filter(function(item) {
-
- var itemid = +item;
- if (
- typeof window.items[itemid] === 'undefined' ||
- (
- window.items[itemid][setuptools.config.vstIndex] !== (+vst) &&
- window.items[itemid][1] !== (+vst)
- )
- ) {
- deleteItems.push(item);
- }
-
- });
-
- // delete the found items
- for ( var i = 0; i < deleteItems.length; i++ ) {
- slotSubOrder[vst].splice(slotSubOrder[vst].indexOf(deleteItems[i]), 1);
- setuptools.app.techlog('Totals/ConfigSet reinit deleting: [set: ' + configSet + ', vst: ' + vst + ', itemid: ' + deleteItems[i] + ']');
- }
-
- // loop through window.items and insert items that do belong
- Object.filter(window.items, function(itemid, item) {
- itemid = itemid.toString();
- if ( (!(item[setuptools.config.vstIndex] !== (+vst) && item[1] !== (+vst))) && slotSubOrder[vst].indexOf(itemid) === -1 ) {
- slotSubOrder[vst].push(itemid);
- setuptools.app.techlog('Totals/ConfigSet reinit adding: [set: ' + configSet + ', vst: ' + vst + ', itemid: ' + itemid + ']');
- }
- });
-
- });
-
- });
-
-};
-
-/**
- * @function
- * @param {string} configSet
- * @returns {boolean}
- * Delete a specific configSet
- */
-setuptools.app.muledump.totals.config.delete = function(configSet) {
-
- if ( configSet === 'all' ) configSet = Object.keys(setuptools.data.muledump.totals.configSets.settings);
- if ( configSet === 'active' ) configSet = [setuptools.data.muledump.totals.configSets.active];
- if ( typeof configSet === 'string' ) configSet = [configSet];
- if ( Array.isArray(configSet) === false || configSet.length === 0 ) return;
-
- // delete specified configSets
- configSet.filter(function(configSet) {
- if (
- setuptools.app.muledump.totals.config.exists(configSet) === false ||
- configSet === 'Default'
- ) return;
-
- // delete configSet
- delete setuptools.data.muledump.totals.configSets.settings[configSet];
-
- // remove from favorites
- if ( setuptools.data.muledump.totals.configSets.favorites.indexOf(configSet) > -1 ) setuptools.data.muledump.totals.configSets.favorites.splice(
- setuptools.data.muledump.totals.configSets.favorites.indexOf(configSet),
- 1
- );
- });
-
- // reset default configuration
- if ( configSet.length === 1 && configSet[0] === 'Default' ) setuptools.data.muledump.totals.configSets.settings[configSet[0]] = $.extend(true, {}, setuptools.copy.totals.defaultConfig);
- if ( configSet.indexOf(setuptools.data.muledump.totals.configSets.active) > -1 ) setuptools.app.muledump.totals.config.activate('Default');
-
- return true;
-
-};
-
-/**
- * @function
- * @param {boolean} state
- */
-setuptools.app.muledump.totals.config.toggleAllTypes = function(state) {
-
- if ( typeof state === 'undefined' ) return false;
- setuptools.app.muledump.totals.config.getTypes().filter(function(type) {
- setuptools.app.muledump.toggleoption('totalsFilter-' + type, state, true);
- });
- window.update_totals();
- window.update_filter();
- option_updated('totals');
- return true;
-
-};
-
-/**
- * @function
- * @param {string} name
- * Store a temporary backup of all configSets
- */
-setuptools.app.muledump.totals.config.backup = function(name) {
-
- if ( typeof setuptools.copy.totals.configSets === 'undefined' ) {
- setuptools.copy.totals.configSets = $.extend(true, {}, setuptools.data.muledump.totals.configSets);
- return;
- }
-
- // only copy configSets not present
- var configSets = [];
- if ( typeof name === 'string' ) configSets = [name];
- if ( configSets.length === 0 ) configSets = setuptools.data.muledump.totals.configSets.settings;
- for ( var configSet in configSets )
- if ( configSets.hasOwnProperty(configSet) )
- if ( typeof setuptools.copy.totals.configSets[configSet] === 'undefined' )
- setuptools.copy.totals.configSets[configSet] = $.extend(true, {}, configSets[configSet]);
-
-};
-
-/**
- * @function
- * @param {string} name
- * @param {boolean} [immediate]
- * Create a totals configuration set
- */
-setuptools.app.muledump.totals.config.save = function(name, immediate) {
-
- if ( typeof name === 'undefined' || name === 'active') name = setuptools.data.muledump.totals.configSets.active;
- if ( typeof name !== 'string' ) return;
- var accountFilter = $.extend(true, [], setuptools.app.muledump.totals.config.getKey('accountFilter'));
- var slotOrder = $.extend(true, [], setuptools.app.muledump.totals.config.getKey('slotOrder'));
- var itemFilter = $.extend(true, [], setuptools.app.muledump.totals.config.getKey('itemFilter'));
- var slotSubOrder = $.extend(true, {}, setuptools.app.muledump.totals.config.getKey('slotSubOrder'));
- var disabled = $.extend(true, [], setuptools.app.muledump.totals.config.getKey('disabled'));
- var sortingMode = setuptools.app.muledump.totals.config.getKey('sortingMode');
- if ( setuptools.data.muledump.totals.configSets.settings[name] !== 'object' ) setuptools.data.muledump.totals.configSets.settings[name] = {};
- setuptools.config.totalsSaveKeys.filter(function(item) {
- setuptools.data.muledump.totals.configSets.settings[name][item] = setuptools.data.options[item];
- });
- var origName = setuptools.data.muledump.totals.configSets.active;
- setuptools.data.muledump.totals.configSets.active = name;
- setuptools.app.muledump.totals.config.setKey('accountFilter', accountFilter);
- setuptools.app.muledump.totals.config.setKey('slotOrder', slotOrder);
- setuptools.app.muledump.totals.config.setKey('itemFilter', itemFilter);
- setuptools.app.muledump.totals.config.setKey('slotSubOrder', slotSubOrder);
- setuptools.app.muledump.totals.config.setKey('sortingMode', sortingMode);
- setuptools.app.muledump.totals.config.setKey('disabled', disabled);
- setuptools.app.config.save('Totals config set saved', (immediate !== true));
- setuptools.copy.totals.configSets.settings[name] = $.extend(true, {}, setuptools.data.muledump.totals.configSets.settings[name]);
- if ( name !== origName ) setuptools.app.muledump.totals.config.reset(origName);
- window.options_save();
- setuptools.app.muledump.totals.config.backup(name);
-
-};
-
-/**
- * @function
- * @param {string} [name]
- * Resets the specified configSet to its previous save state without changing the UI
- */
-setuptools.app.muledump.totals.config.reset = function(name) {
-
- if ( typeof name === 'undefined' || name === 'active' ) name = setuptools.data.muledump.totals.configSets.active || 'Default';
- if ( typeof name !== 'string' ) return;
- if ( typeof setuptools.data.muledump.totals.configSets.settings[name] !== 'object' ) return;
- setuptools.data.muledump.totals.configSets.settings[name] = $.extend(true, {}, setuptools.copy.totals.configSets && setuptools.copy.totals.configSets.settings[name] || setuptools.copy.totals.defaultConfig);
-
-};
-
-/**
- * @function
- * @param {string} [name]
- * @param {boolean} [reset]
- * @param {boolean} [skipSave]
- * Activate a totals configSet and optionally reset its state
- */
-setuptools.app.muledump.totals.config.activate = function(name, reset, skipSave) {
-
- if ( typeof name === 'boolean' ) {
- reset = name;
- name = undefined;
- }
-
- if ( typeof name === 'undefined' || name === 'active' ) name = setuptools.data.muledump.totals.configSets.active || 'Default';
- if ( typeof name !== 'string' ) return;
- if ( typeof setuptools.data.muledump.totals.configSets.settings[name] !== 'object' ) return;
-
- // reset from original configuration
- if ( reset === true ) setuptools.app.muledump.totals.config.reset(name);
-
- // reset keys for default profile
- if ( name === 'Default' ) {
- setuptools.data.muledump.totals.configSets.settings[name] = $.extend(true, {}, setuptools.copy.totals.defaultConfig);
- setuptools.data.muledump.totals.configSets.settings[name].sortingMode = setuptools.copy.totals.defaultConfig.sortingMode;
- }
-
- // reset keys
- Object.filter(setuptools.data.muledump.totals.configSets.settings[name], function(key) {
- setuptools.data.options[key] = setuptools.data.muledump.totals.configSets.settings[name][key];
- });
-
- setuptools.data.muledump.totals.configSets.active = name;
- if ( skipSave !== true ) setuptools.app.config.save('Totals config set activated');
- if ( setuptools.tmp.globalTotalsCounter instanceof Muledump_TotalsCounter ) setuptools.tmp.globalTotalsCounter.import();
- setuptools.app.muledump.totals.updateSecondaryFilter();
- window.init_totals();
- window.update_totals();
- window.update_filter();
-
-};
-
-/**
- * @function
- * @returns {Array}
- * Return a list of item types
- */
-setuptools.app.muledump.totals.config.getTypes = function() {
-
- var types = [];
- Object.filter(window.itemsSlotTypeMap, function(type) {
- if ( types.indexOf(type) === -1 ) types.push(type);
- });
- return types;
-
-};
-
-/**
- * @function
- * @param {string} guid
- * @returns {string}
- * Returns the display name for a provided guid
- */
-setuptools.app.muledump.getName = function(guid) {
-
- return ( (
- setuptools.state.loaded === true &&
- setuptools.data.config.mqDisplayIgn === true &&
- typeof setuptools.data.accounts.accounts[guid].ign === 'string'
- ) ? setuptools.data.accounts.accounts[guid].ign : guid );
-
-};
-
-/**
- * @function
- * @param vst
- * Returns a list of items by virtualSlotType
- */
-setuptools.app.muledump.itemsByVst = function(vst) {
-
- if ( typeof vst === 'string' ) vst = setuptools.app.muledump.itemSlotTypeVst(vst);
- if ( typeof vst !== 'number' ) return [];
- var itemList = [];
- Object.filter(window.items, function(itemid, item) {
- if (
- item[setuptools.config.vstIndex] === vst &&
- !(item[3] === 40 && item[4] === 0) &&
- setuptools.config.disqualifiedItemIds.indexOf(+itemid) === -1
- ) itemList.push(itemid);
- });
- return itemList;
-
-};
-
-/**
- * @function
- * @param {string} name
- * Return the virtualSlotType of a named item group
- */
-setuptools.app.muledump.itemSlotTypeVst = function(name) {
-
- if ( typeof window.itemsSlotTypeMap[name] === 'undefined' ) return;
- return window.itemsSlotTypeMap[name].virtualSlotType || window.itemsSlotTypeMap[name].slotType;
-
-};
-
-/**
- * @function
- * @param {number} vst
- * @returns {*}
- * Determine the display name of a provided type name, slotType, or virtualSlotType
- */
-setuptools.app.muledump.itemSlotTypeName = function(vst) {
-
- var type = Object.filter(window.itemsSlotTypeMap, undefined, function(type, data) {
- if ( vst === type || data.virtualSlotType === vst || data.slotType === vst ) return data.displayName || type[0].toUpperCase()+type.substr(1);
- });
- return type[Object.keys(type)[0]];
-
-};
-
-/**
- * @function
- * @param {number} type
- * @returns {*}
- * Map item SlotType to a virtual id format
- */
-setuptools.app.muledump.itemsSlotTypeMapper = function(type) {
-
- if ( typeof Number(type) === 'number' ) var itemid = Number(type);
-
- // mapConfig identifier keys and their corresponding index in constants
- var mapKeys = {
- name: 0,
- slotType: 1,
- tier: 2,
- fameBonus: 5,
- feedPower: 6,
- bagType: 7,
- soulbound: 8,
- utst: 9
- };
-
- var mapConfig = window.itemsSlotTypeMap;
- var itemList = items;
- if ( typeof itemid === 'number' ) {
-
- itemList = {};
- itemList[itemid] = window.items[itemid];
-
- }
-
- var filteredItems = Object.filter(itemList, undefined, function(itemid, item) {
-
- if ( typeof item === 'undefined' ) return;
-
- var slotType = item[1];
- var virtualSlotType;
- var configKeys = Object.keys(Object.filter(mapConfig, function(type, data) {
- if ( data.slotType === slotType ) {
- if ( typeof data.sheet === 'undefined' ) data.sheet = setuptools.config.totalsDefaultIcon;
- return true;
- }
- }));
-
- for ( var x = 0; x < configKeys.length; x++ ) {
-
- var configKey = configKeys[x];
-
- if ( typeof mapConfig[configKey] === 'undefined' ) {
- setuptools.app.techlog('SlotTypeMapper encountered unknown slotType - ' + JSON.stringify(configKey));
- continue;
- }
-
- virtualSlotType = undefined;
- var matches = 0;
- var required = Object.keys(mapConfig[configKey]).length;
- for (var key in mapConfig[configKey]) {
-
- if (mapConfig[configKey].hasOwnProperty(key)) {
-
- // reserved properties; not checked against
- if ( ['displayName', 'sheet'].indexOf(key) > -1 ) {
- matches++;
- continue;
- }
-
- if ( key === 'slotType' && typeof virtualSlotType !== 'string' ) virtualSlotType = mapConfig[configKey].virtualSlotType;
-
- if ( key === 'virtualSlotType' ) {
- virtualSlotType = mapConfig[configKey].virtualSlotType;
- matches++;
- continue;
- }
-
- // values must match
- if (
- ['number', 'boolean'].indexOf(typeof mapConfig[configKey][key]) > -1 &&
- mapConfig[configKey][key] !== item[mapKeys[key]]
- ) continue;
-
- // try and include items but not require them to match (like name key)
- if ( key === 'include' ) {
-
- if (
- mapConfig[configKey][key] instanceof RegExp &&
- item[mapKeys.name].match(mapConfig[configKey][key])
- ) {
- matches = required;
- } else {
- required--;
- }
- continue;
- }
-
- // some groups have multiple values for one key (I'm looking at you potions)
- if (
- Array.isArray(mapConfig[configKey][key]) === true &&
- mapConfig[configKey][key].indexOf(item[mapKeys[key]]) === -1
- ) continue;
-
- if (
- mapConfig[configKey][key] instanceof RegExp &&
- !item[mapKeys[key]].match(mapConfig[configKey][key])
- ) continue;
-
- // support multiple gt/gte/lt/lte operations
- if (
- Array.isArray(mapConfig[configKey][key]) === false &&
- !(mapConfig[configKey][key] instanceof RegExp) &&
- typeof mapConfig[configKey][key] === 'object'
- ) {
-
- var foundCommands = 0;
- var matchedCommands = 0;
- for ( var command in mapConfig[configKey][key] ) {
-
- if ( mapConfig[configKey][key].hasOwnProperty(command) ) {
-
- foundCommands++;
- var value = mapConfig[configKey][key][command];
- if (
- (command === 'gte' && item[mapKeys[key]] >= value) ||
- (command === 'gt' && item[mapKeys[key]] > value) ||
- (command === 'lte' && item[mapKeys[key]] <= value) ||
- (command === 'lt' && item[mapKeys[key]] < value)
- ) matchedCommands++;
-
- }
-
- }
-
- if ( foundCommands !== matchedCommands ) continue;
-
- }
-
- matches++;
-
- }
-
- }
-
- if ( matches >= required ) return virtualSlotType || slotType;
-
- }
-
- });
-
- var filteredValues = Object.values(filteredItems);
- if ( typeof itemid === 'number' && filteredValues.length === 0 ) return 50000;
- if ( filteredValues.length === 1 ) return filteredValues[0];
- return filteredItems;
-
-};
-
-/**
- * @function
- * Update all secondary filters for totals processing
- */
-setuptools.app.muledump.totals.updateSecondaryFilter = function() {
-
- // reset accountFilter and disabled filter on mules
- for ( var guid in mules ) {
- if (mules.hasOwnProperty(guid)) {
-
- // accountFilter
- if ( setuptools.app.muledump.totals.config.getKey('accountFilter').indexOf(guid) === -1 ) {
- mules[guid].dom.removeClass('filteringEnabled');
- } else {
- mules[guid].dom.addClass('filteringEnabled');
- }
-
- // disabled filter
- mules[guid].disabled = ( setuptools.app.muledump.totals.config.getKey('disabled').indexOf(guid) > -1 );
- mules[guid].dom.toggleClass('disabled', mules[guid].disabled);
- if ( mules[guid].disabled === true ) {
- setuptools.tmp.globalTotalsCounter.import(mules[guid].totals, true);
- } else {
-
- // we'll only run this if it'll pass mode 0
- if (
- typeof setuptools.tmp.globalTotalsCounter.sourceData[guid] !== 'object' ||
- new SeaSalt_Hashing(JSON.stringify(setuptools.tmp.globalTotalsCounter.sourceData[guid].meta), 'sha256', 'hex').toString() !== new SeaSalt_Hashing(JSON.stringify(mules[guid].totals.data.meta), 'sha256', 'hex').toString()
- ) setuptools.tmp.globalTotalsCounter.import(mules[guid].totals);
-
- }
-
- }
- }
-
- // insert generated totals save keys if they aren't already there
- // note: doing this by key count is probably not as good a choice as doing it by key validation.
- // this would be the place to add/remove key changes.
- if ( setuptools.config.totalsSaveKeys.length <= setuptools.config.totalsFilterKeysIndex ) {
- Object.keys(window.itemsSlotTypeMap).filter(function(element) {
- setuptools.config.totalsSaveKeys.push('totalsFilter-' + element);
- });
- setuptools.app.muledump.totals.config.activate(true);
- }
-
- // populate any missing filter keys in options
- for ( var h = 0; h < setuptools.config.totalsSaveKeys.length; h++ )
- if ( typeof setuptools.data.options[setuptools.config.totalsSaveKeys[h]] === 'undefined' )
- setuptools.data.options[setuptools.config.totalsSaveKeys[h]] = true;
-
- // generate the secondary item filter
- setuptools.tmp.totalsSecondaryFilter = [];
- for ( var i = setuptools.config.totalsFilterKeysIndex; i < setuptools.config.totalsSaveKeys.length; i++ ) {
-
- var key = setuptools.config.totalsSaveKeys[i];
- var type = (key.match(/^.*?-([a-z0-9]*)$/i))[1];
- var vstList = setuptools.app.muledump.itemSlotTypeVst(type);
- if ( typeof vstList !== 'number' ) vstList = [50000];
- if ( typeof vstList === 'number' ) vstList = [vstList];
-
- // rather than build this every call, let's cache the object given it is static anyway
- if ( typeof setuptools.tmp.totalsRuntimeCache === 'undefined') setuptools.tmp.totalsRuntimeCache = {};
- if ( typeof setuptools.tmp.totalsRuntimeCache[type] === 'undefined' ) setuptools.tmp.totalsRuntimeCache[type] = [];
-
- Object.filter(
- window.items,
- function(itemid, item) {
- for ( var i = 0; i < vstList.length; i++ )
- if ( item[setuptools.config.vstIndex] === vstList[i] ) setuptools.tmp.totalsRuntimeCache[type].push(Number(itemid));
- }
- );
-
- // process the item list
- var itemList = setuptools.tmp.totalsRuntimeCache[type];
- var j;
- if ( setuptools.data.options[key] === true ) {
-
- for ( j = 0; j < itemList.length; j++ )
- if ( setuptools.tmp.totalsSecondaryFilter.indexOf(itemList[j]) > -1 )
- setuptools.tmp.totalsSecondaryFilter.splice(setuptools.tmp.totalsSecondaryFilter.indexOf(itemList[j]), 1);
-
- } else {
-
- for ( j = 0; j < itemList.length; j++ )
- if ( setuptools.tmp.totalsSecondaryFilter.indexOf(itemList[j]) === -1 )
- setuptools.tmp.totalsSecondaryFilter.push(itemList[j]);
-
- }
-
- }
-
-};
-
-/**
- * @function
- * @param {number} itemid
- * Toggle the item in and out of the itemFilter
- */
-setuptools.app.muledump.totals.toggleHideItem = function(itemid) {
-
- itemid = Number(itemid);
- var index = setuptools.app.muledump.totals.config.getKey('itemFilter').indexOf(itemid);
- if ( index === -1 ) {
- setuptools.app.muledump.totals.config.getKey('itemFilter').push(itemid);
- } else setuptools.app.muledump.totals.config.getKey('itemFilter').splice(index, 1);
- setuptools.app.muledump.totals.config.setKey('itemFilter', setuptools.app.muledump.totals.config.getKey('itemFilter'));
- window.update_totals();
- window.update_filter();
- option_updated('totals');
-
-};
-
-/**
- * @function
- * @param {string} option
- * @param {boolean} [value]
- * @param {boolean} [skip]
- * Toggle the state of the specified options
- */
-setuptools.app.muledump.toggleoption = function(option, value, skip) {
-
- if ( typeof option === 'undefined' ) return;
- if ( typeof option === 'string' ) option = [option];
- if ( Array.isArray(option) === false ) return;
-
- // switch the option
- for ( var i = 0; i < option.length; i++) setuptools.data.options[option[i]] = ( typeof value === 'undefined' ) ? !setuptools.data.options[option[i]] : value;
-
- // totals filter keys need to update the secondary item filter list
- setuptools.app.muledump.totals.updateSecondaryFilter();
-
- if ( skip !== true ) {
- update_totals();
- update_filter();
- options_save();
- }
-
-};
-
-/**
- * @function
- * @param {object} e
- * Create a quick access menu for various UI endpoints and commands
- */
-setuptools.app.muledump.bodymenu = function(e) {
+/**
+ * @function
+ * @param {object} e
+ * Create a quick access menu for various UI endpoints and commands
+ */
+setuptools.app.muledump.bodymenu = function(e) {
e.preventDefault();
var options = [{
@@ -2778,21 +847,6 @@ setuptools.app.muledump.mulemenu = function(e, guid, context, track, extraopts)
}
// add global options
- if (
- setuptools.app.config.determineFormat(setuptools.data.accounts, 0) === true ||
- (setuptools.state.loaded === true && setuptools.data.accounts.accounts[guid].loginOnly === false )
- ) options.push(
- {
- class: 'chsort',
- name: 'Edit Character Sorting Lists',
- callback: function(guid) {
- // v1 // setuptools.app.muledump.chsortcustom(mules[guid]);
- setuptools.app.muledump.charsort.menu(guid);
- },
- callbackArg: guid
- }
- );
-
if ( setuptools.data.options.totals === true ) options.push({
class: 'toggleTotals',
name: ((
@@ -2816,9 +870,38 @@ setuptools.app.muledump.mulemenu = function(e, guid, context, track, extraopts)
},
callbackArg: guid
- });
-
- options.push({
+ });
+
+ if (
+ setuptools.app.config.determineFormat(setuptools.data.accounts, 0) === true ||
+ (setuptools.state.loaded === true && setuptools.data.accounts.accounts[guid].loginOnly === false )
+ ) options.push(
+ {
+ class: 'chsort',
+ name: 'Character Sorting Lists',
+ callback: function(guid) {
+ // v1 // setuptools.app.muledump.chsortcustom(mules[guid]);
+ setuptools.app.muledump.charsort.menu(guid);
+ },
+ callbackArg: guid
+ }
+ );
+
+ options.push({
+ class: 'openWardrobe',
+ name: 'Skin Wardrobe',
+ callback: function(guid) {
+ setuptools.app.muledump.ownedSkins(guid);
+ },
+ callbackArg: guid
+ },{
+ class: 'openWhitebags',
+ name: 'Whitebag Tracker',
+ callback: function(guid) {
+ setuptools.app.muledump.whitebag.tracker(guid);
+ },
+ callbackArg: guid
+ },{
class: 'copyMenuOpen',
name: "Copy...",
callback: setuptools.app.muledump.copymenu,
@@ -3129,7 +1212,7 @@ setuptools.app.muledump.realmeye.link = function(itemNumber, link, extra) {
// determine uri
if ( link === 'wiki' ) {
- itemName = itemName.toLowerCase().replace(/\s/g, '-');
+ itemName = itemName.toLowerCase().replace(/(\s|')/g, '-');
} else if ( link === 'sell' ) {
link = 'offers-to/buy';
itemName = itemNumber;
@@ -3553,66 +1636,331 @@ setuptools.app.muledump.checkupdates = function(force) {
// White Bag Tracker
*/
-setuptools.app.muledump.whitebag = {};
-
-// returns a list of all white bag items
+/**
+ * @function
+ * @param {boolean} [full]
+ * @returns {object}
+ * Gather a list of white bag items from constants
+ */
setuptools.app.muledump.whitebag.items = function(full) {
// pull a list of whitebags from constants
- var whitebags = Object.filter(items, function(key, value) {
- if ( value[7] === 6 ) return true;
- });
+ setuptools.tmp.whitebagsFull = ( typeof setuptools.tmp.whitebagsFull === 'object' ) ?
+ setuptools.tmp.whitebags :
+ Object.filter(items, function(key, value) {
+ if ( value[7] === 6 ) return true;
+ });
// if full === true we will send the items and their data
- if ( full === true ) return whitebags;
+ if ( full === true ) return setuptools.tmp.whitebagsFull;
- // but typically we'll only need to send the item ids
- return Object.keys(whitebags);
+ // but typically we'll only need to send the item ids after converting them from strings
+ if ( typeof setuptools.tmp.whitebagsCompact === 'object' ) return setuptools.tmp.whitebagsCompact;
+ setuptools.tmp.whitebagsCompact = Object.keys(setuptools.tmp.whitebagsFull);
+ setuptools.tmp.whitebagsCompact.filter(function(element, index) {
+ setuptools.tmp.whitebagsCompact[index] = Number(element);
+ });
+ return setuptools.tmp.whitebagsCompact;
};
-setuptools.app.muledump.whitebag.tracker = function(guid) {
+/**
+ * @function
+ * @param {string} guid
+ * @param {boolean} [counters]
+ * @param {boolean} [owned]
+ * Initialize the base object for a new guid
+ */
+setuptools.app.muledump.whitebag.init = function(guid, counters, owned) {
// it's so big!
var config = setuptools.data.muledump.whitebagTracker;
// generate the base configuration for new accounts
if ( typeof config.accounts[guid] === 'undefined' ) config.accounts[guid] = $.extend(true, {}, setuptools.objects.whitebagTrackerAccount);
+ if ( typeof config.accounts[guid] === 'object' ) {
+ if ( counters === true ) config.accounts[guid].items = {};
+ if ( owned === true ) config.accounts[guid].owned = [];
+ }
- var displayName;
- if (
- setuptools.state.loaded === true &&
- setuptools.data.config.mqDisplayIgn === true &&
- typeof setuptools.data.accounts.accounts[guid] === 'object' &&
- typeof setuptools.data.accounts.accounts[guid].ign === 'string'
- ) displayName = setuptools.data.accounts.accounts[guid].ign;
- if ( displayName === undefined ) displayName = guid;
+};
+
+/**
+ * @function
+ * @param {string} guid
+ * @param {object} config
+ * Saves the specified configuration permanently
+ */
+setuptools.app.muledump.whitebag.save = function(guid, config) {
+
+ setuptools.data.muledump.whitebagTracker.accounts[guid] = config;
+ setuptools.app.config.save('Whitebags/Totals saving changes', true);
+
+};
+
+/**
+ * @function
+ * @param guid
+ * Display Whitebag Tracker for Totals Count
+ */
+setuptools.app.muledump.whitebag.tracker = function(guid) {
+
+ setuptools.lightbox.close();
+ setuptools.tmp.wbSaveOnClose = false;
+
+ // initialize the base object if this account is new here
+ setuptools.app.muledump.whitebag.init(guid);
+
+ // it's so big!
+ var config = $.extend(true, {}, setuptools.data.muledump.whitebagTracker.accounts[guid]);
// build our ui
- var dom = $('#whitebagTracker');
- var html = ' \
-
\
- \
- ' + ( (mules[guid].opt('accountName') === true ) ? '' : '' ) + ' \
-
\
-
\
- ';
+ setuptools.lightbox.build('whitebag-totals', ' \
+ \
+ \
+
\
+
\
+ ' + ( (mules[guid].opt('accountName') === true ) ? '' : '' ) + ' \
+
\
+
\
+
\
+
\
+ Legend \
+ Shift+Click items to add/remove them from the owned list\
+ Click items to increase the quantity by 1\
+ Ctrl+Click items to decrease the quantity by 1\
+ Auto saves on close\
+
\
+ ');
// display our ui
- dom.empty().append(html);
+ setuptools.lightbox.settitle('whitebag-totals', 'White Bag Tracker');
+ setuptools.lightbox.drawhelp('whitebag-totals', 'docs/muledump/whitebags', 'White Bag Tracker Help');
+ setuptools.lightbox.display('whitebag-totals', {
+ variant: 'fl-Whitebags',
+ afterClose: function() {
+
+ if ( setuptools.tmp.wbSaveOnClose !== true ) return;
+ setuptools.app.muledump.whitebag.save(guid, config);
+
+ }
+ });
- // populate the items
- var itemsDom = dom.find('div.items');
+ // obtain and sort the whitebags list
var whitebags = {};
- (setuptools.app.muledump.whitebag.items()).filter(function(item) {
+ var wbitems = ((setuptools.app.muledump.whitebag.items()).filter(function(item) {
whitebags[item] = 0;
- });
- whitebags = $.extend(true, whitebags, config.accounts[guid].items);
- Object.filter(whitebags, function(key) {
- var itemDom = window.item(key, 'wb', (config.accounts[guid].items[key] || 0));
+ return true;
+ })).sort(function(a,b) {
+ // sort alphabetically if same slotType
+ if ( items[a][1] === items[b][1] ) {
+ if ( items[a][0] < items[b][0] ) return -1;
+ if ( items[a][0] > items[b][0] ) return 1;
+ // identical names; sort by itemid instead
+ return a-b;
+ }
+ // sort by slotType
+ return (items[a][1]-items[b][1]);
+ });
+
+ // merge the whitebags list with the configuration data
+ config.items = $.extend(true, whitebags, config.items);
+
+ // populate items
+ var itemsDom = $('div.wbstage > div.items > div');
+ wbitems.filter(function(key) {
+ var selected = false;
+ if ( config.owned.indexOf(key) === -1 && config.items[key] > 0 ) config.owned.push(key);
+ if ( config.owned.indexOf(key) > -1 ) selected = true;
+ var itemDom = window.item(key, 'wb noselect' + ( (selected === true) ? ' selected' : '' ), ( (setuptools.data.config.wbTotals === true) ? (config.items[key] || 0) : undefined ));
itemDom.appendTo(itemsDom);
});
+ // select the newly inserted items
+ var wbitemsdom = $('div.item.wb');
+
+ // bind tooltips
+ setuptools.app.muledump.tooltip(wbitemsdom, 'whitebagTrackerTooltip', 750);
+
+ // bind increment/decrement
+ wbitemsdom.on('click.wb.increment', function(e) {
+
+ var itemid = Number($(this).attr('data-itemid'));
+
+ if ( setuptools.app.muledump.keys('shift', e) === true ) {
+
+ if ( config.owned.indexOf(itemid) === -1 ) {
+ $(this).addClass('selected');
+ config.owned.push(itemid);
+ } else {
+ if ( setuptools.data.config.wbTotals === true && config.items[itemid] > 0 ) return;
+ $(this).removeClass('selected');
+ config.owned.splice(
+ config.owned.indexOf(itemid),
+ 1
+ );
+ config.items[itemid] = 0;
+ }
+ setuptools.tmp.wbSaveOnClose = true;
+ return;
+
+ }
+
+ if ( setuptools.data.config.wbTotals === false ) return;
+ var value = Number($(this).text());
+ if ( typeof value !== 'number' ) value = 0;
+ if ( value === 0 && setuptools.app.muledump.keys('ctrl', e) === true ) return;
+ value = ( setuptools.app.muledump.keys('ctrl', e) === true ) ?
+ (
+ (value > 0) ?
+ value-1 :
+ value
+ ) :
+ value+1;
+
+ setuptools.tmp.wbSaveOnClose = true;
+ $(this).find('div').text(value);
+ if ( value > 0 ) {
+ $(this).addClass('selected');
+ if ( config.owned.indexOf(itemid) === -1 ) config.owned.push(itemid);
+ }
+ if (
+ value === 0 &&
+ config.owned.indexOf(itemid) === -1
+ ) $(this).removeClass('selected');
+ config.items[itemid] = value;
+
+ });
+
+ // handle the actions menu button
+ $('div.muledump.link.go').on('click.wbmenu.go', function() {
+
+ var action = $('select[name="wbaction"]').val().toLowerCase();
+ if ( action === 'reset' ) {
+ setuptools.tmp.wbSaveOnClose = false;
+ setuptools.app.muledump.whitebag.tracker(guid);
+ } else if ( action === 'cancel' ) {
+ setuptools.tmp.wbSaveOnClose = false;
+ setuptools.lightbox.close();
+ } else if ( action === 'clear' ) {
+ setuptools.app.muledump.whitebag.init(guid, true, true);
+ setuptools.tmp.wbSaveOnClose = false;
+ setuptools.app.muledump.whitebag.tracker(guid);
+ } else if ( action === 'save' ) {
+ setuptools.tmp.wbSaveOnClose = false;
+ setuptools.app.muledump.whitebag.save(guid, config);
+ setuptools.lightbox.status($(this), 'Ok!');
+ } else if ( action === 'totals' ) {
+ setuptools.data.config.wbTotals = !( setuptools.data.config.wbTotals );
+ setuptools.app.config.save('WhiteBag/Tracker switching wbTotals option', true);
+ setuptools.app.muledump.whitebag.tracker(guid);
+ } else if ( action === 'import' ) {
+
+ setuptools.lightbox.build('whitebags-import', ' \
+ This replaces the current values by counting current inventory. \
+
\
+
How do you wish to proceed?\
+ \
+
\
+ \
+ \
+ \
+ \
+
\
+ ');
+
+ setuptools.lightbox.settitle('whitebags-import', 'Import from Inventory');
+ setuptools.lightbox.drawhelp('whitebags-import', 'docs/features/whitebags', 'White Bag Tracker Help');
+ setuptools.lightbox.display('whitebags-import', {variant: 'nobackground'});
+
+ // bind cancel button
+ $('div.muledump.link.import.cancel').on('click.import.cancel', function() {
+ setuptools.lightbox.close('whitebags-import');
+ });
+
+ // bind confirm button
+ $('div.muledump.link.import:not(.cancel)').on('click.import.confirm', function(e) {
+
+ var action;
+ if ( $(this).hasClass('clear') ) {
+ action = 'clear';
+ } else if ( $(this).hasClass('reset') ) {
+ action = 'reset';
+ }
+
+ // ctrl+click overrides the zeroing of existing data
+ if ( action === 'clear' ) setuptools.app.muledump.whitebag.init(guid, true);
+ if ( action === 'reset' ) setuptools.app.muledump.whitebag.init(guid, true, true);
+ var config = $.extend(true, {}, setuptools.data.muledump.whitebagTracker.accounts[guid]);
+
+ wbitems.filter(function(itemid) {
+ itemid = Number(itemid);
+ var newvalue = (config.items[itemid] || 0);
+ if ( mules[guid].totals instanceof Muledump_TotalsCounter ) newvalue += (mules[guid].totals.data.totals[itemid] || 0);
+ setuptools.data.muledump.whitebagTracker.accounts[guid].items[itemid] = (setuptools.data.muledump.whitebagTracker.accounts[guid].items[itemid] || 0)+newvalue;
+ });
+
+ setuptools.app.config.save('Whitebags/Totals saving after import');
+ setuptools.app.muledump.whitebag.tracker(guid);
+
+ });
+
+ }
+
+ });
+
+ // handle the export button
+ $('div.muledump.link.export').on('click.wb.export', function(e) {
+
+ // build our base object
+ var action = $('select[name="wbexport"]').val().toLowerCase();
+ var owned = {};
+ config.owned.filter(function(itemid) {
+ owned[itemid] = 1;
+ });
+
+ // insert goback button to exporter page
+ setuptools.lightbox.insert('exporter-main', 'goback', ['exporter-main', function() {
+ setuptools.app.muledump.whitebag.tracker(guid);
+ }]);
+
+ // close lightbox and proceed to exporter
+ setuptools.lightbox.close();
+ setuptools.app.muledump.exporter.ui.main(undefined, action, {
+ items: 11,
+ totals: config.items,
+ sortorder: wbitems,
+ filter: owned,
+ fillStyle: '#88a09b',
+ strokeStyle: '#dcf7fe',
+ minTotal: -1,
+ fillNumbers: ( setuptools.data.config.wbTotals === true )
+ });
+
+ });
};
@@ -3730,13 +2078,15 @@ setuptools.app.muledump.exporter.imgur = function(canvas, callback) {
/**
* @function
* @param {string} type
+ * @param {object} [override]
* @returns {string}
* Generate the Totals text export data
*/
-setuptools.app.muledump.exporter.text = function(type) {
+setuptools.app.muledump.exporter.text = function(type, override) {
- var ids = window.ids;
- var totals = window.totals;
+ if ( typeof override !== 'object' ) override = {};
+ var totals = override.totals || window.totals;
+ var ids = override.sortorder || window.ids;
var items = window.items;
var e = {txt: [], csv: [], json: {}};
if ( !e[type] ) return 'Invalid text export type requested';
@@ -3806,9 +2156,10 @@ setuptools.app.muledump.exporter.saveLink = function(string, type) {
* @function
* @param [canvas]
* @param {string} [type]
+ * @param {object} [override]
* Displays the Muledump Exporter UI
*/
-setuptools.app.muledump.exporter.ui.main = function(canvas, type) {
+setuptools.app.muledump.exporter.ui.main = function(canvas, type, override) {
if ( typeof type === 'undefined' && typeof canvas === 'undefined' ) {
@@ -3846,7 +2197,12 @@ setuptools.app.muledump.exporter.ui.main = function(canvas, type) {
if ( canvas.match(/^https?:\/\/.*$/) ) {
$('div.canvas.exporter').html('
');
- } else $('div.canvas.exporter').html('
');
+ } else if ( canvas.match(/^data:image\/.*$/) ) {
+ $('div.canvas.exporter').html('
');
+ } else {
+ $('div.exporter.status').html('
No totals information available');
+ $('div.canvas.exporter').html('');
+ }
}
@@ -3859,8 +2215,8 @@ setuptools.app.muledump.exporter.ui.main = function(canvas, type) {
setuptools.lightbox.build('exporter-main', '\