global.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. $(document).ready(function(){
  2. wireClicks();
  3. animateProgressBars();
  4. toggleEvents();
  5. });
  6. function wireClicks(){
  7. $("span.versionInfo").click(function(e){
  8. handleVersionClick();
  9. });
  10. $(".getAPILinks").click(function(e){
  11. showAPILinks($(this));
  12. });
  13. $(".serverIdToggle").click(function(e){
  14. showHideServerIDShow($(this));
  15. });
  16. }
  17. function showHideServerIDShow(linkElem){
  18. if($(".serverId:visible").length){
  19. $(".serverId").removeClass('hide').addClass('hide');
  20. $(linkElem).text($(linkElem).attr('showtext'));
  21. $("tr.expand-child").each(function(e){
  22. $("td:first", $(this)).attr('colspan', Number($("td:first", $(this)).attr('colspan')) - 1);
  23. });
  24. }else{
  25. $(".serverId").removeClass('hide');
  26. $(linkElem).text($(linkElem).attr('hidetext'));
  27. $("tr.expand-child").each(function(e){
  28. $("td:first", $(this)).attr('colspan', Number($("td:first", $(this)).attr('colspan')) + 1);
  29. });
  30. }
  31. }
  32. function animateProgressBars(){
  33. var percent = 0;
  34. $(".progress-bar").each(function() {
  35. percent = $(this).attr("data");
  36. if(percent){
  37. $(this).animate({
  38. width: percent + "%"
  39. });
  40. }
  41. });
  42. }
  43. function showAPILinks(elem){
  44. $("div.mangificWrapper .magnificTitle").text(getLang('api_links'));
  45. var apiToken = elem.attr('token');
  46. var ipAddr = elem.attr('ip');
  47. var port = elem.attr('port');
  48. var modKey = elem.attr('modkey');
  49. var panelURL = elem.attr('panelurl');
  50. if(apiToken && ipAddr && port && modKey && panelURL){
  51. var actions = new Array(
  52. {url: 'ogp_api.php?gamemanager/start', lang: 'start_server'},
  53. {url: 'ogp_api.php?gamemanager/stop', lang: 'stop_server'},
  54. {url: 'ogp_api.php?gamemanager/restart', lang: 'restart_server'}
  55. );
  56. var hasRcon = elem.attr('hasrcon');
  57. if(hasRcon && hasRcon === 'true'){
  58. actions.push({url: 'ogp_api.php?gamemanager/rcon', lang: 'rcon_command_title', additional: '&command={YOUR_RCON_COMMAND}'});
  59. }
  60. var isSteam = elem.attr('hassteam');
  61. if(isSteam && isSteam === 'true'){
  62. actions.push({url: 'ogp_api.php?gamemanager/update', lang: 'get_steam_autoupdate_api_link', additional: '&type=steam', selected: true});
  63. }
  64. var selectListHTML = '<select class="ogpAPIActions">';
  65. for(var i = 0; i < actions.length; i++){
  66. selectListHTML += '<option value="' + actions[i]["url"] + '" ' + (actions[i].hasOwnProperty('additional') && actions[i].additional ? 'additional="' + actions[i].additional + '"' : '') + ' ' + (actions[i].hasOwnProperty('selected') && actions[i]["selected"] && actions[i]["selected"] == true ? 'selected' : '') + '>' + getLang(actions[i]["lang"]) + '</option>';
  67. }
  68. selectListHTML += '</select>';
  69. $("div.mangificWrapper .magnificContentsDiv").html(decodeEntities(getLang('api_links_popup_html')) + '<p>' + getLang('actions') +':&nbsp; ' + selectListHTML + '</p><p><input class="updateLink" style="width: 75%;" type="text" value=""><button class="copyButton">' + $(elem).attr('copyme') + '</button>&nbsp; <span class="copyStatus"></span></p>');
  70. showPopup(function(){
  71. $(".ogpAPIActions").change(function(e){
  72. var newActionValue = $(this).val();
  73. var apiURL = panelURL + '/' + newActionValue + '&token=' + apiToken + '&ip=' + ipAddr + '&port=' + port + '&mod_key=' + modKey;
  74. var additionalParamsToAdd = $('option:selected', $(this)).attr('additional');
  75. if(additionalParamsToAdd){
  76. apiURL += additionalParamsToAdd;
  77. }
  78. $("input.updateLink").val(apiURL);
  79. });
  80. $("input.updateLink").click(function(e){
  81. $(this).select();
  82. });
  83. $(".copyButton").click(function(e){
  84. copyInput($("input.updateLink"), $("span.copyStatus"), elem);
  85. });
  86. copyInput($("input.updateLink"), $("span.copyStatus"), elem);
  87. $(".ogpAPIActions").trigger('change');
  88. });
  89. }
  90. }
  91. function copyInput(input, resultArea, elemWithAttr){
  92. input.select();
  93. var successful = document.execCommand('copy');
  94. var msg = successful ? 'successful' : 'unsuccessful';
  95. logToConsole('Copying text command was ' + msg);
  96. if(successful){
  97. $(resultArea).text($(elemWithAttr).attr('copysuccess')).fadeIn('fast').delay(500).fadeOut('slow').delay(500).fadeIn('slow').delay(500).fadeOut('slow').delay(500).fadeIn('fast').delay(2000).fadeIn('fast').fadeOut('slow');
  98. }else{
  99. $(resultArea).text($(elemWithAttr).attr('copyfail')).fadeIn('fast').delay(500).fadeOut('slow').delay(500).fadeIn('slow').delay(500).fadeOut('slow').delay(500).fadeIn('fast').delay(2000).fadeIn('fast').fadeOut('slow');
  100. }
  101. }
  102. function showPopup(onOpen, onClose){
  103. $.magnificPopup.open({
  104. items: {
  105. src: $("div.mangificWrapper div.white-popup"),
  106. type: 'inline'
  107. },
  108. callbacks: {
  109. close: function() {
  110. cleanupPopup();
  111. if(!isUndefinedOrEmptyValue(onClose) && jQuery.isFunction(onClose)){
  112. onClose();
  113. }
  114. },
  115. open: function() {
  116. if(!isUndefinedOrEmptyValue(onOpen) && jQuery.isFunction(onOpen)){
  117. onOpen();
  118. }
  119. }
  120. }
  121. });
  122. }
  123. function cleanupPopup(){
  124. $("div.mangificWrapper .magnificTitle").text('');
  125. $("div.mangificWrapper .magnificContentsDiv").html('');
  126. }
  127. function handleVersionClick(){
  128. if($("span.versionNumber").hasClass("hide")){
  129. $("span.versionNumber").removeClass("hide");
  130. $("span.version").removeClass("hide");
  131. // Copy the value of the version if their browser supports it
  132. $(document.body).append("<input class='tempCopyValue hide' type='text' value='" + $("span.versionNumber").text() + "' />");
  133. try {
  134. $("input.tempCopyValue").removeClass("hide");
  135. $("input.tempCopyValue").select();
  136. var successful = document.execCommand('copy');
  137. $("input.tempCopyValue").remove();
  138. var msg = successful ? 'successful' : 'unsuccessful';
  139. logToConsole('Copying text command was ' + msg);
  140. if(successful){
  141. $("span.copyVersionResult").text($("span.copyVersionResult").attr('lang')).css("color", "#43ff0f").removeClass("hide");
  142. $("span.copyVersionResult").css("left", $("span.versionNumber").offset().left + $("span.versionNumber").width() + 5 + "px");
  143. $("span.copyVersionResult").fadeIn('fast', function(e){ hideVLength(); }).delay(500).fadeOut('slow', function(e){ showVLength(); }).delay(500).fadeIn('slow', function(e){ hideVLength(); }).delay(500).fadeOut('slow', function(e){ showVLength(); }).delay(500).fadeIn('fast', function(e){ hideVLength(); }).delay(2000).fadeIn('fast',function() {
  144. resetVersionView(true);
  145. });
  146. }
  147. }catch(err){
  148. resetVersionView(true);
  149. }
  150. }else{
  151. $("span.copyVersionResult").stop();
  152. resetVersionView();
  153. }
  154. }
  155. function logToConsole(msg){
  156. window.console && console.log(msg);
  157. }
  158. function isUndefinedOrEmptyValue(input, canBeFalse){
  159. if(typeof input === typeof undefined || input === null || input === ''){
  160. return true;
  161. }
  162. if(input === false && !isUndefinedOrEmptyValue(canBeFalse) && canBeFalse === true){
  163. return false;
  164. }else if(input === false){
  165. return true;
  166. }
  167. return false;
  168. }
  169. function resetVersionView(hideVersion){
  170. $("input.tempCopyValue").remove();
  171. $("span.copyVersionResult").text("");
  172. if(isUndefinedOrEmptyValue(hideVersion)){
  173. $("span.versionNumber").removeClass("hide").addClass("hide");
  174. $("span.version").removeClass("hide").addClass("hide");
  175. }
  176. $("span.copyVersionResult").removeClass("hide").addClass("hide");
  177. }
  178. function hideVLength(){
  179. $("span.versionNumberCopyLengthener").removeClass("hide").addClass("hide");
  180. }
  181. function showVLength(){
  182. $("span.versionNumberCopyLengthener").removeClass("hide");
  183. }
  184. function toggleEvents(){
  185. // Toggle show server id if setting is enabled and the markup is on the page.
  186. if($("p.serverIdToggle").length){
  187. $("p.serverIdToggle").trigger("click");
  188. }
  189. $(".tablesorter").tablesorter({
  190. cssHeader: "header",
  191. cssAsc: "headerSortUp",
  192. cssDesc: "headerSortDown",
  193. cssChildRow: "expand-child",
  194. sortInitialOrder: "asc",
  195. sortMultiSortKey: "shiftKey"
  196. });
  197. }
  198. function getLang(key){
  199. if(!key.startsWith(langConstPrefix)){
  200. key = langConstPrefix + key;
  201. }
  202. if(langConsts && langConsts.hasOwnProperty(key)){
  203. return langConsts[key];
  204. }
  205. return false;
  206. }
  207. function decodeEntities(encodedString) {
  208. var textArea = document.createElement('textarea');
  209. textArea.innerHTML = encodedString;
  210. var toReturn = textArea.value;
  211. textArea.remove();
  212. return toReturn;
  213. }