$(function(){ UI.elements = { menu: $('nav > .menu'), secondary_menu: $('nav.secondary_menu'), main: $('main'), connection: { status: $('#connection'), user_and_host: $('#user_and_host'), msg: $('#message') } }; UI.buildMenu(); UI.stored.getOpts(); //check if username and host have been stored in the url if (location.hash) { var hash = location.hash.substring(1).split('@'); var user = hash[0].split('&'); mist.user.name = user[0]; if (user[1]) { mist.user.host = user[1]; } } //check if we are logged in mist.send(function(d){ //we're logged in $(window).trigger('hashchange'); },{},{timeout: 5, hide: true}); }); $(window).on('hashchange', function(e) { var loc = location.hash.substring(1).split('@'); if (!loc[1]) { loc[1] = ''; } var tab = loc[1].split('&'); if (tab[0] == '') { tab[0] = 'Overview'; } UI.showTab(tab[0],tab[1]); }); var UI = { debug: false, elements: {}, stored: { getOpts: function(){ var stored = localStorage['stored']; if (stored) { stored = JSON.parse(stored); } $.extend(true,this.vars,stored); return this.vars; }, saveOpt: function(name,val){ this.vars[name] = val; localStorage['stored'] = JSON.stringify(this.vars); return this.vars; }, vars: { helpme: true } }, interval: false, returnTab: ['Overview'], countrylist: {'AF':'Afghanistan','AX':'Åland Islands','AL':'Albania','DZ':'Algeria','AS':'American Samoa','AD':'Andorra', 'AO':'Angola','AI':'Anguilla','AQ':'Antarctica','AG':'Antigua and Barbuda','AR':'Argentina','AM':'Armenia','AW':'Aruba', 'AU':'Australia','AT':'Austria','AZ':'Azerbaijan','BS':'Bahamas','BH':'Bahrain','BD':'Bangladesh','BB':'Barbados', 'BY':'Belarus','BE':'Belgium','BZ':'Belize','BJ':'Benin','BM':'Bermuda','BT':'Bhutan','BO':'Bolivia, Plurinational State of', 'BQ':'Bonaire, Sint Eustatius and Saba','BA':'Bosnia and Herzegovina','BW':'Botswana','BV':'Bouvet Island','BR':'Brazil', 'IO':'British Indian Ocean Territory','BN':'Brunei Darussalam','BG':'Bulgaria','BF':'Burkina Faso','BI':'Burundi','KH':'Cambodia', 'CM':'Cameroon','CA':'Canada','CV':'Cape Verde','KY':'Cayman Islands','CF':'Central African Republic','TD':'Chad','CL':'Chile', 'CN':'China','CX':'Christmas Island','CC':'Cocos (Keeling) Islands','CO':'Colombia','KM':'Comoros','CG':'Congo', 'CD':'Congo, the Democratic Republic of the','CK':'Cook Islands','CR':'Costa Rica','CI':'Côte d\'Ivoire','HR':'Croatia', 'CU':'Cuba','CW':'Curaçao','CY':'Cyprus','CZ':'Czech Republic','DK':'Denmark','DJ':'Djibouti','DM':'Dominica', 'DO':'Dominican Republic','EC':'Ecuador','EG':'Egypt','SV':'El Salvador','GQ':'Equatorial Guinea','ER':'Eritrea','EE':'Estonia', 'ET':'Ethiopia','FK':'Falkland Islands (Malvinas)','FO':'Faroe Islands','FJ':'Fiji','FI':'Finland','FR':'France','GF':'French Guiana', 'PF':'French Polynesia','TF':'French Southern Territories','GA':'Gabon','GM':'Gambia','GE':'Georgia','DE':'Germany','GH':'Ghana', 'GI':'Gibraltar','GR':'Greece','GL':'Greenland','GD':'Grenada','GP':'Guadeloupe','GU':'Guam','GT':'Guatemala','GG':'Guernsey', 'GN':'Guinea','GW':'Guinea-Bissau','GY':'Guyana','HT':'Haiti','HM':'Heard Island and McDonald Islands', 'VA':'Holy See (Vatican City State)','HN':'Honduras','HK':'Hong Kong','HU':'Hungary','IS':'Iceland','IN':'India','ID':'Indonesia', 'IR':'Iran, Islamic Republic of','IQ':'Iraq','IE':'Ireland','IM':'Isle of Man','IL':'Israel','IT':'Italy','JM':'Jamaica', 'JP':'Japan','JE':'Jersey','JO':'Jordan','KZ':'Kazakhstan','KE':'Kenya','KI':'Kiribati', 'KP':'Korea, Democratic People\'s Republic of','KR':'Korea, Republic of','KW':'Kuwait','KG':'Kyrgyzstan', 'LA':'Lao People\'s Democratic Republic','LV':'Latvia','LB':'Lebanon','LS':'Lesotho','LR':'Liberia','LY':'Libya', 'LI':'Liechtenstein','LT':'Lithuania','LU':'Luxembourg','MO':'Macao','MK':'Macedonia, the former Yugoslav Republic of', 'MG':'Madagascar','MW':'Malawi','MY':'Malaysia','MV':'Maldives','ML':'Mali','MT':'Malta','MH':'Marshall Islands', 'MQ':'Martinique','MR':'Mauritania','MU':'Mauritius','YT':'Mayotte','MX':'Mexico','FM':'Micronesia, Federated States of', 'MD':'Moldova, Republic of','MC':'Monaco','MN':'Mongolia','ME':'Montenegro','MS':'Montserrat','MA':'Morocco','MZ':'Mozambique', 'MM':'Myanmar','NA':'Namibia','NR':'Nauru','NP':'Nepal','NL':'Netherlands','NC':'New Caledonia','NZ':'New Zealand','NI':'Nicaragua', 'NE':'Niger','NG':'Nigeria','NU':'Niue','NF':'Norfolk Island','MP':'Northern Mariana Islands','NO':'Norway','OM':'Oman', 'PK':'Pakistan','PW':'Palau','PS':'Palestine, State of','PA':'Panama','PG':'Papua New Guinea','PY':'Paraguay','PE':'Peru', 'PH':'Philippines','PN':'Pitcairn','PL':'Poland','PT':'Portugal','PR':'Puerto Rico','QA':'Qatar','RE':'Réunion', 'RO':'Romania','RU':'Russian Federation','RW':'Rwanda','BL':'Saint Barthélemy','SH':'Saint Helena, Ascension and Tristan da Cunha', 'KN':'Saint Kitts and Nevis','LC':'Saint Lucia','MF':'Saint Martin (French part)','PM':'Saint Pierre and Miquelon', 'VC':'Saint Vincent and the Grenadines','WS':'Samoa','SM':'San Marino','ST':'Sao Tome and Principe','SA':'Saudi Arabia', 'SN':'Senegal','RS':'Serbia','SC':'Seychelles','SL':'Sierra Leone','SG':'Singapore','SX':'Sint Maarten (Dutch part)','SK':'Slovakia', 'SI':'Slovenia','SB':'Solomon Islands','SO':'Somalia','ZA':'South Africa','GS':'South Georgia and the South Sandwich Islands', 'SS':'South Sudan','ES':'Spain','LK':'Sri Lanka','SD':'Sudan','SR':'Suriname','SJ':'Svalbard and Jan Mayen','SZ':'Swaziland', 'SE':'Sweden','CH':'Switzerland','SY':'Syrian Arab Republic','TW':'Taiwan, Province of China','TJ':'Tajikistan', 'TZ':'Tanzania, United Republic of','TH':'Thailand','TL':'Timor-Leste','TG':'Togo','TK':'Tokelau','TO':'Tonga', 'TT':'Trinidad and Tobago','TN':'Tunisia','TR':'Turkey','TM':'Turkmenistan','TC':'Turks and Caicos Islands','TV':'Tuvalu', 'UG':'Uganda','UA':'Ukraine','AE':'United Arab Emirates','GB':'United Kingdom','US':'United States', 'UM':'United States Minor Outlying Islands','UY':'Uruguay','UZ':'Uzbekistan','VU':'Vanuatu','VE':'Venezuela, Bolivarian Republic of', 'VN':'Viet Nam','VG':'Virgin Islands, British','VI':'Virgin Islands, U.S.','WF':'Wallis and Futuna','EH':'Western Sahara','YE':'Yemen', 'ZM':'Zambia','ZW':'Zimbabwe' }, tooltip: { show: function (pos,contents){ $tooltip = this.element; if (!$.contains(document.body,$tooltip[0])) { $('body').append($tooltip); } $tooltip.html(contents); clearTimeout(this.hiding); delete this.hiding; var mh = $(document).height() - $tooltip.outerHeight(); var mw = $(document).width() - $tooltip.outerWidth(); $tooltip.css('left',Math.min(pos.pageX+10,mw-10)); $tooltip.css('top',Math.min(pos.pageY+25,mh-10)); $tooltip.show().addClass('show'); }, hide: function() { $tooltip = this.element; $tooltip.removeClass('show'); this.hiding = setTimeout(function(){ $tooltip.hide(); },500); }, element: $('
').attr('id','tooltip') }, menu: [ { Overview: {}, Protocols: {}, Streams: {}, Preview: {}, Limits: { LTSonly: true }, Logs: {}, Statistics: {}, 'Server Stats': {} }, { Disconnect: { classes: ['red'] } }, { Guides: { link: 'http://mistserver.org/wiki/Category:Guides' }, Tools: { submenu: { 'Release notes': { link: 'http://mistserver.org/wiki/Mistserver_Changelog' }, 'Mist Shop': { link: 'http://mistserver.org/products' }, 'Email for Help': {}, 'Terms & Conditions': { link: 'http://mistserver.org/wiki/Mistserver_license' } } } } ], buildMenu: function(){ function createButton(j,button) { var $button = $('').addClass('button'); $button.html( $('').addClass('plain').text(j) ).append( $('').addClass('highlighted').text(j) ); for (var k in button.classes) { $button.addClass(button.classes[k]); } if ('LTSonly' in button) { $button.addClass('LTSonly'); } if ('link' in button) { $button.attr('href',button.link).attr('target','_blank'); } else if (!('submenu' in button)) { $button.click(function(e){ UI.navto(j); e.stopPropagation(); }); } return $button; } var $menu = UI.elements.menu; for (var i in UI.menu) { if (i > 0) { $menu.append($('
')); } for (var j in UI.menu[i]) { var button = UI.menu[i][j]; var $button = createButton(j,button); $menu.append($button); if ('submenu' in button) { var $sub = $('').addClass('submenu'); $button.addClass('arrowdown').append($sub); for (var k in button.submenu) { $sub.append(createButton(k,button.submenu[k])); } } } } var $ihb = $('
').attr('id','ih_button').text('?').click(function(){ $('body').toggleClass('helpme'); UI.stored.saveOpt('helpme',$('body').hasClass('helpme')); }).attr('title','Click to toggle the display of integrated help'); if (UI.stored.getOpts().helpme) { $('body').addClass('helpme'); } $menu.after($ihb).after( $('
').addClass('separator') ); }, buildUI: function(elements){ /*elements should be an array of objects, the objects containing the UI element options * (or a jQuery object that will be inserted isntead). element options: { label: 'Username', //label to display in front of the field type: 'str', //type of input field pointer: {main: mist.user, index: 'name'}, //pointer to the value this input field controls help: 'You should enter your username here.', //what should be displayed in the integrated help balloon validate: ['required',function(){}] //how the input should be validated } */ var $c = $('
').addClass('input_container'); for (var i in elements) { var e = elements[i]; if (e instanceof jQuery) { $c.append(e); continue; } if (e.type == 'help') { var $s = $('').addClass('text_container').append( $('').addClass('description').append(e.help) ); $c.append($s); if ('classes' in e) { for (var j in e.classes) { $s.addClass(e.classes[j]); } } continue; } if (e.type == 'text') { $c.append( $('').addClass('text_container').append( $('').addClass('text').append(e.text) ) ); continue; } if (e.type == 'custom') { $c.append(e.custom); continue; } if (e.type == 'buttons') { var $bc = $('').addClass('button_container'); if ('css' in e) { $bc.css(e.css); } $c.append($bc); for (var j in e.buttons) { var button = e.buttons[j]; var $b = $('