'use strict'; pandora.ui.preferencesDialog = function() { var isReloading = false, tabs = [ {id: 'account', title: Ox._('Account')}, {id: 'appearance', title: Ox._('Appearance')}, {id: 'advanced', title: Ox._('Advanced')} ]; Ox.getObjectById(tabs, pandora.user.ui.part.preferences || 'account').selected = true; var $tabPanel = Ox.TabPanel({ content: function(id) { var $content = Ox.Element() .css({overflowY: 'auto'}) .append( $('') .attr({src: '/static/png/icon.png'}) .css({ position: 'absolute', left: '16px', top: '16px', width: '64px', height: '64px' }) ); if (id == 'account') { $content.append( Ox.Form({ items: [ Ox.Input({ disabled: true, id: 'username', label: Ox._('Username'), labelWidth: 120, value: pandora.user.username, width: 320 }), Ox.Input({ autovalidate: /.+/, id: 'password', label: Ox._('New Password'), labelWidth: 120, type: 'password', validate: pandora.validateNewPassword, width: 320 }) .bindEvent({ validate: function(data) { data.valid && pandora.api.editPreferences({password: data.value}); } }), Ox.Input({ autovalidate: pandora.autovalidateEmail, id: 'email', label: Ox._('E-Mail Address'), labelWidth: 120, validate: pandora.validateNewEmail, value: pandora.user.email, width: 320 }) .bindEvent({ validate: function(data) { if (data.valid && data.value != pandora.user.email) { pandora.user.email = data.value; pandora.api.editPreferences({email: data.value}); } } }), Ox.Input({ disabled: true, id: 'level', label: Ox._('Level'), labelWidth: 120, value: Ox.toTitleCase(pandora.user.level), width: 320 }), Ox.Checkbox({ id: 'newsletter', label: Ox._('Newsletter'), labelWidth: 120, title: pandora.user.newsletter ? Ox._('Subscribed') : Ox._('Unsubscribed'), value: pandora.user.newsletter, width: 320 }) .bindEvent({ change: function(data) { pandora.user.newsletter = data.value; this.options({ title: pandora.user.newsletter ? Ox._('Subscribed') : Ox._('Unsubscribed') }); pandora.api.editPreferences({ newsletter: pandora.user.newsletter }); } }) ] }) .css({position: 'absolute', left: '96px', top: '16px'}) ); } else if (id == 'appearance') { $content.append( Ox.Form({ items: [ Ox.Select({ id: 'theme', items: pandora.site.themes.map(function(theme) { return {id: theme, title: Ox.Theme.getThemeData(theme).themeName} }), label: Ox._('Theme'), labelWidth: 120, value: pandora.user.ui.theme, width: 320 }) .bindEvent({ change: function(data) { pandora.UI.set({theme: data.value}); pandora.setTheme(data.value); } }), Ox.Select({ id: 'locale', items: Object.keys(Ox.LOCALE_NAMES).map(function(locale) { return {id: locale, title: Ox.LOCALE_NAMES[locale]} }), label: Ox._('Language'), labelWidth: 120, value: pandora.user.ui.locale, width: 320 }) .bindEvent({ change: function(data) { pandora.UI.set({locale: data.value}); pandora.setLocale(data.value, function() { isReloading = true; $dialog.close(); pandora.$ui.appPanel.reload(); }); } }) ] }) .css({position: 'absolute', left: '96px', top: '16px'}) ); } else if (id == 'advanced') { $content.append( Ox.Button({ title: Ox._('Reset UI Settings...'), width: 160 }) .bindEvent({ click: function() { pandora.$ui.resetUIDialog = pandora.ui.resetUIDialog().open(); } }) .css({position: 'absolute', left: '96px', top: '16px'}) ).append( Ox.Button({ title: Ox._('Run Script on Load...'), width: 160 }) .bindEvent({ click: function() { pandora.$ui.onloadDialog = pandora.ui.onloadDialog().open(); } }) .css({position: 'absolute', left: '96px', top: '40px'}) ); } return $content; }, tabs: tabs }) .bindEvent({ change: function(data) { pandora.UI.set({'part.preferences': data.selected}); } }), $dialog = Ox.Dialog({ buttons: [ Ox.Button({ id: 'signout', title: Ox._('Sign Out...') }).bindEvent({ click: function() { pandora.UI.set({page: 'signout'}); } }), {}, Ox.Button({ id: 'done', title: Ox._('Done') }).bindEvent({ click: function() { $dialog.close(); } }) ], closeButton: true, content: $tabPanel, height: 192, minHeight: 192, minWidth: 432, title: Ox._('Preferences'), width: 432 }) .bindEvent({ close: function() { if (pandora.user.ui.page == 'preferences' && !isReloading) { pandora.UI.set({page: ''}); } }, 'pandora_part.preferences': function(data) { if (pandora.user.ui.page == 'preferences') { $tabPanel.select(data.value == '' ? 'account' : data.value); } } }); return $dialog; };