speedTest.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. /* PHP MAILER JS FILE */
  2. /*
  3. $(document).on('click', '#PHPMAILER-settings-button', function() {
  4. var post = {
  5. plugin:'PHPMailer/settings/get', // used for switch case in your API call
  6. api:'api/?v1/plugin', // API Endpoint will always be this for custom plugin API calls
  7. name:$(this).attr('data-plugin-name'),
  8. configName:$(this).attr('data-config-name'),
  9. messageTitle:'', // Send succees message title (top line)
  10. messageBody:'Disabled '+$(this).attr('data-plugin-name'), // Send succees message body (bottom line)
  11. error:'Organizr Function: API Connection Failed' // conole error message
  12. };
  13. var callbacks = $.Callbacks(); // init callbacks var
  14. //callbacks.add( ); // add function to callback to be fired after API call
  15. //settingsAPI(post,callbacks); // exec API call
  16. //ajaxloader(".content-wrap","in");
  17. //setTimeout(function(){ buildPlugins();ajaxloader(); }, 3000);
  18. });
  19. */
  20. function clamp(num, min, max) {
  21. return num <= min ? min : num >= max ? max : num;
  22. }
  23. function I(id){return document.getElementById(id);}
  24. var w=null; //speedtest worker
  25. function startStop(){
  26. if(w!=null){
  27. //speedtest is running, abort
  28. w.postMessage('abort');
  29. w=null;
  30. $('#speedTestButtonText').text('Start');
  31. initUI();
  32. }else{
  33. //test is not running, begin
  34. w=new Worker('api/plugins/misc/speedTest/speedtest_worker.min.js');
  35. w.postMessage('start'); //Add optional parameters as a JSON object to this command
  36. $('#speedTestButtonText').text('Running');
  37. w.onmessage=function(e){
  38. var data=e.data.split(';');
  39. var status=Number(data[0]);
  40. if(status>=4){
  41. //test completed
  42. $('#speedTestButtonText').text('Re-Test');
  43. w=null;
  44. }
  45. var downloadText = Math.ceil((data[1]/1000)*1000);
  46. var downloadPercent = clamp(Math.ceil(((data[1]/1000)*100)/5)*5, 0,100);
  47. var uploadText = Math.ceil((data[2]/1000)*1000);
  48. var uploadPercent = clamp(Math.ceil(((data[2]/1000)*100)/5)*5, 0,100);
  49. I("ip").textContent=data[4];
  50. I("dlText").textContent=(status==1&&data[1]==0)?"...":Math.ceil(data[1]);
  51. I("ulText").textContent=(status==3&&data[2]==0)?"...":Math.ceil(data[2]);
  52. I("pingText").textContent=Math.ceil(data[3]);
  53. I("jitText").textContent=Math.ceil(data[5]);
  54. var prog=(Number(data[6])*2+Number(data[7])*2+Number(data[8]))/5;
  55. I("progress").style.width=(100*prog)+"%";
  56. $('#downloadPercent').attr('class', 'css-bar css-bar-'+downloadPercent+' css-bar-lg css-bar-default').attr('data-label', downloadText+'Mbps');
  57. $('#uploadPercent').attr('class', 'css-bar css-bar-'+uploadPercent+' css-bar-lg css-bar-warning pull-right').attr('data-label', uploadText+'Mbps');
  58. };
  59. }
  60. }
  61. //poll the status from the worker every 200ms (this will also update the UI)
  62. setInterval(function(){
  63. if(w) w.postMessage('status');
  64. },200);
  65. //function to (re)initialize UI
  66. function initUI(){
  67. I("dlText").textContent="";
  68. I("ulText").textContent="";
  69. I("pingText").textContent="";
  70. I("jitText").textContent="";
  71. I("ip").textContent="";
  72. I("progress").style.width="";
  73. $('#downloadPercent').attr('class', 'css-bar css-bar-0 css-bar-lg css-bar-default').attr('data-label', '0Mbps');
  74. $('#uploadPercent').attr('class', 'css-bar css-bar-0 css-bar-lg css-bar-warning pull-right').attr('data-label', '0Mbps');
  75. }
  76. // FUNCTIONS
  77. speedTestLaunch()
  78. function speedTestLaunch(){
  79. if(typeof activeInfo == 'undefined'){
  80. setTimeout(function () {
  81. speedTestLaunch();
  82. }, 1000);
  83. }else{
  84. if(activeInfo.plugins["SPEEDTEST-enabled"] == true){
  85. if (activeInfo.user.groupID <= activeInfo.plugins.includes["SPEEDTEST-Auth-include"]) {
  86. var menuList = `<li><a class="inline-popups speedTestModal" href="#speedtest-area" data-effect="mfp-zoom-out"><i class="fa fa-rocket fa-fw"></i> <span lang="en">Test Server Speed</span></a></li>`;
  87. var htmlDOM = `
  88. <div id="speedtest-area" class="white-popup mfp-with-anim mfp-hide">
  89. <div class="col-md-4 col-md-offset-4">
  90. <div class="panel bg-org panel-info">
  91. <div class="panel-heading">
  92. <span lang="en">Test Speed to Server</span>
  93. <button id="startStopBtn" onclick="startStop()" class="btn btn-info waves-effect waves-light pull-right"><span lang="en" id="speedTestButtonText">Start</span> <i class="fa fa-rocket m-l-5"></i></button>
  94. </div>
  95. <div class="panel-body">
  96. <div id="test">
  97. <div class="row hidden-xs">
  98. <div class="col-md-6 col-xs-6"><div id="downloadPercent" data-label="0Mbps" style="font-size: 15px;"></div></div>
  99. <div class="col-md-6 col-xs-6"><div id="uploadPercent" data-label="0Mbps" style="font-size: 15px;"></div></div>
  100. </div>
  101. <div class="progress progress-sm">
  102. <div id="progress" class="progress-bar progress-bar-info active progress-bar-striped" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
  103. <span class="sr-only">0% Complete (success)</span>
  104. </div>
  105. </div>
  106. <div class="white-box m-b-0">
  107. <div class="user-btm-box">
  108. <div class="col-md-3 col-xs-6 p-l-0 p-r-0 text-center">
  109. <p class="text-success"><i class="ti-download fa-2x"></i></p>
  110. <h1 id="dlText"></h1>
  111. <h4 class="">Mbps</h4>
  112. </div>
  113. <div class="col-md-3 col-xs-6 p-l-0 p-r-0 text-center">
  114. <p class="text-warning"><i class="ti-upload fa-2x"></i></p>
  115. <h1 id="ulText"></h1>
  116. <h4 class="">Mbps</h4>
  117. </div>
  118. <div class="col-md-3 col-xs-6 p-l-0 p-r-0 text-center">
  119. <p class="text-purple"><i class="ti-direction-alt fa-2x"></i></p>
  120. <h1 id="pingText"></h1>
  121. <h4 class="">ms</h4>
  122. </div>
  123. <div class="col-md-3 col-xs-6 p-l-0 p-r-0 text-center">
  124. <p class="text-info"><i class="ti-pulse fa-2x"></i></p>
  125. <h1 id="jitText"></h1>
  126. <h4 class="">ms</h4>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. <script type="text/javascript">initUI();</script>
  132. </div>
  133. <div class="panel-footer"> IP Address: <span id="ip"></span> </div>
  134. </div>
  135. </div>
  136. </div>
  137. `;
  138. $('.append-menu').after(menuList);
  139. $('.organizr-area').after(htmlDOM);
  140. pageLoad();
  141. }
  142. }
  143. }
  144. }
  145. // CHANGE CUSTOMIZE Options
  146. $(document).on('change asColorPicker::close', '#SPEEDTEST-settings-page1 :input', function(e) {
  147. var input = $(this);
  148. switch ($(this).attr('type')) {
  149. case 'switch':
  150. case 'checkbox':
  151. var value = $(this).prop("checked") ? true : false;
  152. break;
  153. default:
  154. var value = $(this).val().toString();
  155. }
  156. var post = {
  157. api:'api/?v1/update/config',
  158. name:$(this).attr("name"),
  159. type:$(this).attr("data-type"),
  160. value:value,
  161. messageTitle:'',
  162. messageBody:'Updated Value for '+$(this).parent().parent().find('label').text(),
  163. error:'Organizr Function: API Connection Failed'
  164. };
  165. var callbacks = $.Callbacks();
  166. //callbacks.add( buildCustomizeAppearance );
  167. settingsAPI(post,callbacks);
  168. //disable button then renable
  169. $('#SPEEDTEST-settings-page :input').prop('disabled', 'true');
  170. setTimeout(
  171. function(){
  172. $('#SPEEDTEST-settings-page :input').prop('disabled', null);
  173. input.emulateTab();
  174. },
  175. 2000
  176. );
  177. });
  178. $(document).on('click', '#SPEEDTEST-settings-button', function() {
  179. var post = {
  180. plugin:'SpeedTest/settings/get', // used for switch case in your API call
  181. };
  182. ajaxloader(".content-wrap","in");
  183. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  184. var response = JSON.parse(data);
  185. $('#SPEEDTEST-settings-items').html(buildFormGroup(response.data));
  186. }).fail(function(xhr) {
  187. console.error("Organizr Function: API Connection Failed");
  188. });
  189. ajaxloader();
  190. });