Advertisement
Guest User

Scratch FM6 Helper Script

a guest
Nov 14th, 2016
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function(ext) {
  2.    
  3.     ext.success = false;
  4.    
  5.     $.ajax({
  6.  
  7.         async:false,
  8.  
  9.         type:'GET',
  10.  
  11.         url:'https://mcapi.us/scripts/minecraft.js',
  12.        
  13.         data:null,
  14.        
  15.         success: function(){ext.success = true;},
  16.        
  17.         error: function(){ext.success = false;},
  18.  
  19.         dataType:'script'
  20.  
  21.     });
  22.    
  23.     ext._shutdown = function() {};
  24.    
  25.     ext._getStatus = function() {
  26.         if(ext.success){
  27.             return {status: 2, msg: 'Ready - 1.0.11 (Minecraft 1.9.2) - By: Mrcomputer1'};
  28.         }else{
  29.             return {status: 1, msg: 'Failed to get the MCAPI.US Javascript file! Reload the page or check status.mcapi.us!'};
  30.         }
  31.     };
  32.    
  33.     ext.isOnline = function(serverIP, serverPORT, callback) {
  34.         MinecraftAPI.getServerStatus(serverIP, {
  35.             port: serverPORT
  36.         }, function(err, status) {
  37.             if(err) {alert("Something went wrong!");callback(0)}
  38.            
  39.             if(status.online === true){
  40.                 callback(1);
  41.                 return 1;
  42.             }else{
  43.                 callback(0);
  44.                 return 0;
  45.             }
  46.         });
  47.     };
  48.    
  49.     ext.getMotd = function(serverIP, serverPORT, callback) {
  50.         MinecraftAPI.getServerStatus(serverIP, {
  51.             port: serverPORT
  52.         }, function(err, status){
  53.             if(err) {alert("Something went wrong!");callback(0)}
  54.            
  55.             if(status.online === true){
  56.                 callback(status.motd);
  57.                 return status.motd;
  58.             }else{
  59.                 callback(0);
  60.                 return 0;
  61.             }
  62.         });
  63.     };
  64.    
  65.     ext.getOnlinePlayers = function(serverIP, serverPORT, callback) {
  66.         MinecraftAPI.getServerStatus(serverIP, {
  67.             port: serverPORT
  68.         }, function(err, status){
  69.             if(err) {alert("Something went wrong!");callback(0)}
  70.            
  71.             if(status.online === true){
  72.                 callback(status.players.now);
  73.                 return status.players.now;
  74.             }else{
  75.                 callback(0);
  76.                 return 0;
  77.             }
  78.         });
  79.     };
  80.    
  81.     ext.getMaxPlayers = function(serverIP, serverPORT, callback) {
  82.         MinecraftAPI.getServerStatus(serverIP, {
  83.             port: serverPORT
  84.         }, function(err, status){
  85.             if(err) {alert("Something went wrong!");callback(0)}
  86.            
  87.             if(status.online === true){
  88.                 callback(status.players.max);
  89.                 return status.players.max;
  90.             }else{
  91.                 callback(0);
  92.                 return 0;
  93.             }
  94.         });
  95.     };
  96.    
  97.     ext.getServerSoftware = function(serverIP, serverPORT, callback) {
  98.         MinecraftAPI.getServerStatus(serverIP, {
  99.             port: serverPORT
  100.         }, function(err, status){
  101.             if(err) {alert("Something went wrong!");callback(0)}
  102.            
  103.             if(status.online === true){
  104.                 callback(status.server.name);
  105.                 return status.server.name;
  106.             }else{
  107.                 callback(0);
  108.                 return 0;
  109.             }
  110.         });
  111.     };
  112.    
  113.     ext.isVersion = function(serverIP, serverPORT, version, callback){
  114.         MinecraftAPI.getServerStatus(serverIP, {
  115.             port: serverPORT
  116.         }, function(err, status){
  117.             if(err) {alert("Something went wrong!");callback(0)}
  118.            
  119.             var p = 0;
  120.             if(version === "1.9.2"){
  121.                 p = 109;
  122.             }else if(version === "1.9.1"){
  123.                 p = 108;
  124.             }else if(version === "1.9"){
  125.                 p = 107;
  126.             }else if(version === "1.8.8-1.8"){
  127.                 p = 47;
  128.             }else if(version === "1.8.5-1.8"){
  129.                 p = 47;
  130.             }else if(version === "1.7.10-1.7.6"){
  131.                 p = 5;
  132.             }else if(version === "1.7.5-1.7.1pre"){
  133.                 p = 4;
  134.             }
  135.            
  136.            
  137.            
  138.             if(status.online === true){
  139.                 if(p === status.server.protocol){
  140.                     callback(1);
  141.                     return 1;
  142.                 }else{
  143.                     callback(0);
  144.                     return 0;
  145.                 }
  146.             }else{
  147.                 callback(-1);
  148.                 return -1;
  149.             }
  150.         });
  151.     };
  152.    
  153.     ext.getVersion = function(serverIP, serverPORT, callback){
  154.         MinecraftAPI.getServerStatus(serverIP, {
  155.             port: serverPORT
  156.         }, function(err, status){
  157.             if(err) {alert("Something went wrong!");callback(0)}
  158.            
  159.             var s = ""; //add 109 1.9.2
  160.             if(server.status.protocol == 109){
  161.                 s = "1.9.2";
  162.             }else if(status.server.protocol == 108){
  163.                 s = "1.9.1"
  164.             }else if(status.server.protocol === 107){
  165.                 s = "1.9";
  166.             }else if(status.server.protocol === 47){
  167.                 s = "1.8.8";
  168.             }else if(status.server.protocol === 5){
  169.                 s = "1.7.10-1.7.6";
  170.             }else if(status.server.protocol === 4){
  171.                 s = "1.7.5-1.7.1pre";
  172.             }
  173.            
  174.            
  175.            
  176.             if(status.online === true){
  177.                 callback(s);
  178.                 return s;
  179.             }else{
  180.                 callback(0);
  181.                 return 0;
  182.             }
  183.         });
  184.     };
  185.    
  186.     ext.getMojangStatus = function(statusOf, callback){
  187.         $.get("http://status.mojang.com/check/", {}, function(data){
  188.             var id = -1;
  189.             if(statusOf === "minecraft.net"){
  190.                 id = 0;
  191.             }else if(statusOf === "session.minecraft.net"){
  192.                 id = 1;
  193.             }else if(statusOf === "account.mojang.com"){
  194.                 id = 2;
  195.             }else if(statusOf === "auth.mojang.com"){
  196.                 id = 3;
  197.             }else if(statusOf === "skins.minecraft.net"){
  198.                 id = 4;
  199.             }else if(statusOf === "authserver.mojang.com"){
  200.                 id = 5;
  201.             }else if(statusOf === "sessionserver.mojang.com"){
  202.                 id = 6;
  203.             }else if(statusOf === "api.mojang.com"){
  204.                 id = 7;
  205.             }else if(statusOf === "textures.minecraft.net"){
  206.                 id = 8;
  207.             }else{
  208.                 alert("Script Error!");
  209.             }
  210.            
  211.             if(data[id][statusOf] === "green"){
  212.                 callback(1);
  213.             }else if(data[id][statusOf] === "yellow"){
  214.                 callback(0);
  215.             }else{
  216.                 callback(-1);
  217.             }
  218.         }, "json");
  219.     };
  220.    
  221.     ext.getServerIP = function(server){
  222.         if(server === "Mineplex US"){
  223.             return "us.mineplex.com";
  224.         }else if(server === "Mineplex EU"){
  225.             return "eu.mineplex.com";
  226.         }else if(server === "Shotbow Network US"){
  227.             return "us.shotbow.net";
  228.         }else if(server === "Shotbow Network EU"){
  229.             return "eu.shotbow.net";
  230.         }else if(server === "The Nexus MC US"){
  231.             return "hub.thenexusmc.com";
  232.         }else if(server === "The Nexus MC EU"){
  233.             return "eu.thenexusmc.com";
  234.         }else if(server === "Hypixel"){
  235.             return "mc.hypixel.net";
  236.             //Other //V//
  237.         }else if(server === "--[US]--"){
  238.             return "";
  239.         }else if(server === "--[EU]--"){
  240.             return "";
  241.         }else if(server === "--[Unknown]--"){
  242.             return "";
  243.         }else if(server === "----"){
  244.             return "";
  245.         }else if(server === "Suggest a server (Run the block, disable popup blocker)"){
  246.             window.open("http://goo.gl/forms/2DEyZWFDQd", "_blank", "channelmode=yes,height=550,width=720,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no");
  247.             return "";
  248.         }
  249.     };
  250.    
  251.     ext.getServerPort = function(server){
  252.         if(server === "Mineplex US"){
  253.             return 25565;
  254.         }else if(server === "Mineplex EU"){
  255.             return 25565;
  256.         }else if(server === "Shotbow Network US"){
  257.             return 25565;
  258.         }else if(server === "Shotbow Network EU"){
  259.             return 25565;
  260.         }else if(server === "The Nexus MC US"){
  261.             return 25565;
  262.         }else if(server === "The Nexus MC EU"){
  263.             return 25565;
  264.         }else if(server === "Hypixel"){
  265.             return 25565;
  266.             //Other //V//
  267.         }else if(server === "--[US]--"){
  268.             return "";
  269.         }else if(server === "--[EU]--"){
  270.             return "";
  271.         }else if(server === "--[Unknown]--"){
  272.             return "";
  273.         }else if(server === "----"){
  274.             return "";
  275.         }else if(server === "Suggest a server (Run the block, disable popup blocker)"){
  276.             window.open("http://goo.gl/forms/2DEyZWFDQd", "_blank", "channelmode=yes,height=550,width=720,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no");
  277.             return "";
  278.         }
  279.     };
  280.    
  281.     ext.isBoolean = function(s){
  282.         if(s == "1"){
  283.             return true;
  284.         }else if(s == "0"){
  285.             return false;
  286.         }else if(s == "-1"){
  287.             return false;
  288.         }else{
  289.             return false;
  290.         }
  291.     };
  292.    
  293.     ext.getLastOnline = function(serverIP, serverPORT, what, callback){
  294.         MinecraftAPI.getServerStatus(serverIP, {
  295.             port: serverPORT
  296.         }, function(err, status){
  297.             if(err) {alert("Something went wrong!");callback(0)}
  298.            
  299.             var d;
  300.             if(status.last_online == 0){
  301.                 callback(-1);
  302.             }else{
  303.                 var d = new Date(status.last_online*1000);
  304.             }
  305.            
  306.             var m = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  307.             var year = d.getFullYear();
  308.             var month = m[d.getMonth()];
  309.             var monthid = d.getMonth() + 1;
  310.             var day = d.getDate();
  311.             var hour = d.getHours();
  312.             var min = d.getMinutes();
  313.             var sec = d.getSeconds();
  314.            
  315.             if(what == "time"){
  316.                 callback(hour + ":" + min + ":" + sec);
  317.             }else if(what == "date (D/M/Y)"){
  318.                 callback(day + "/" + monthid + "/" + year);
  319.             }else if(what == "date (M/D/Y)"){
  320.                 callback(monthid + "/" + day + "/" + year);
  321.             }else if(what == "day"){
  322.                 callback(day);
  323.             }else if(what == "month (name)"){
  324.                 callback(month);
  325.             }else if(what == "month (id)"){
  326.                 callback(monthid);
  327.             }else if(what == "year"){
  328.                 callback(year);
  329.             }else if(what == "hour"){
  330.                 callback(hour);
  331.             }else if(what == "minutes"){
  332.                 callback(min);
  333.             }else if(what == "seconds"){
  334.                 callback(sec);
  335.             }else{
  336.                 alert("Something went wrong!");
  337.                 callback(-1);
  338.             }
  339.            
  340.         });
  341.     };
  342.    
  343.     var descriptor = {
  344.         blocks: [
  345.             ['R', 'Is %s %n online?', 'isOnline', '', 25565],
  346.             ['R', 'Motd of %s %n', 'getMotd', '', 25565],
  347.             ['R', 'Online players of %s %n', 'getOnlinePlayers', '', 25565],
  348.             ['R', 'Max players of %s %n', 'getMaxPlayers', '', 25565],
  349.             ['R', 'Server Software of %s %n', 'getServerSoftware', '', 25565],
  350.             ['R', 'Is %s %n %m.mcVersion', 'isVersion', '', 25565, '1.9.2'],
  351.             ['R', 'Get Version %s %n', 'getVersion', '', 25565],
  352.             ['R', 'Get Mojang Status %m.mojangStatus', 'getMojangStatus', 'minecraft.net'],
  353.             ['r', 'Server IP %m.server', 'getServerIP', ''],
  354.             ['r', 'Server Port %m.server', 'getServerPort', ''],
  355.             ['b', '%s Turns is blocks into booleans', 'isBoolean', ''],
  356.             ['R', 'Last recorded online %s %n %m.lastOnlineDates', 'getLastOnline', '', 25565, 'date (D/M/Y)'],
  357.         ],
  358.         menus: {
  359.             mcVersion: ["1.9.2", "1.9.1", "1.9", "1.8.8-1.8", "1.7.10-1.7.6", "1.7.5-1.7.1"],
  360.             mojangStatus: ["minecraft.net", "session.minecraft.net", "account.mojang.com", "auth.mojang.com", "skins.minecraft.net", "authserver.mojang.com", "sessionserver.mojang.com", "api.mojang.com", "textures.minecraft.net"],
  361.             server: ['--[US]--', 'Mineplex US', 'Shotbow Network US', 'The Nexus MC US', '--[EU]--', 'Mineplex EU', 'Shotbow Network EU', 'The Nexus MC EU', '--[Unknown]--', 'Hypixel', '----', 'Suggest a server (Run the block, disable popup blocker)'],
  362.             lastOnlineDates: ['time', 'date (D/M/Y)', 'date (M/D/Y)', 'day', 'month (name)', 'month (id)', 'year', 'hour', 'minutes', 'seconds']
  363.         },
  364.         url: 'http://Mrcomputer1.github.io/MinecraftServerCheckerExtension/'
  365.     };
  366.    
  367.     ScratchExtensions.register('Minecraft Server Checker', descriptor, ext);
  368. })({});
  369. (function(ext) {
  370.  
  371. /*!
  372.  * JavaScript Cookie v2.1.3
  373.  * https://github.com/js-cookie/js-cookie
  374.  *
  375.  * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
  376.  * Released under the MIT license
  377.  */
  378. ;(function (factory) {
  379.     var registeredInModuleLoader = false;
  380.     if (typeof define === 'function' && define.amd) {
  381.         define(factory);
  382.         registeredInModuleLoader = true;
  383.     }
  384.     if (typeof exports === 'object') {
  385.         module.exports = factory();
  386.         registeredInModuleLoader = true;
  387.     }
  388.     if (!registeredInModuleLoader) {
  389.         var OldCookies = window.Cookies;
  390.         var api = window.Cookies = factory();
  391.         api.noConflict = function () {
  392.             window.Cookies = OldCookies;
  393.             return api;
  394.         };
  395.     }
  396. }(function () {
  397.     function extend () {
  398.         var i = 0;
  399.         var result = {};
  400.         for (; i < arguments.length; i++) {
  401.             var attributes = arguments[ i ];
  402.             for (var key in attributes) {
  403.                 result[key] = attributes[key];
  404.             }
  405.         }
  406.         return result;
  407.     }
  408.  
  409.     function init (converter) {
  410.         function api (key, value, attributes) {
  411.             var result;
  412.             if (typeof document === 'undefined') {
  413.                 return;
  414.             }
  415.  
  416.             // Write
  417.  
  418.             if (arguments.length > 1) {
  419.                 attributes = extend({
  420.                     path: '/'
  421.                 }, api.defaults, attributes);
  422.  
  423.                 if (typeof attributes.expires === 'number') {
  424.                     var expires = new Date();
  425.                     expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
  426.                     attributes.expires = expires;
  427.                 }
  428.  
  429.                 try {
  430.                     result = JSON.stringify(value);
  431.                     if (/^[\{\[]/.test(result)) {
  432.                         value = result;
  433.                     }
  434.                 } catch (e) {}
  435.  
  436.                 if (!converter.write) {
  437.                     value = encodeURIComponent(String(value))
  438.                         .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
  439.                 } else {
  440.                     value = converter.write(value, key);
  441.                 }
  442.  
  443.                 key = encodeURIComponent(String(key));
  444.                 key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
  445.                 key = key.replace(/[\(\)]/g, escape);
  446.  
  447.                 return (document.cookie = [
  448.                     key, '=', value,
  449.                     attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
  450.                     attributes.path ? '; path=' + attributes.path : '',
  451.                     attributes.domain ? '; domain=' + attributes.domain : '',
  452.                     attributes.secure ? '; secure' : ''
  453.                 ].join(''));
  454.             }
  455.  
  456.             // Read
  457.  
  458.             if (!key) {
  459.                 result = {};
  460.             }
  461.  
  462.             // To prevent the for loop in the first place assign an empty array
  463.             // in case there are no cookies at all. Also prevents odd result when
  464.             // calling "get()"
  465.             var cookies = document.cookie ? document.cookie.split('; ') : [];
  466.             var rdecode = /(%[0-9A-Z]{2})+/g;
  467.             var i = 0;
  468.  
  469.             for (; i < cookies.length; i++) {
  470.                 var parts = cookies[i].split('=');
  471.                 var cookie = parts.slice(1).join('=');
  472.  
  473.                 if (cookie.charAt(0) === '"') {
  474.                     cookie = cookie.slice(1, -1);
  475.                 }
  476.  
  477.                 try {
  478.                     var name = parts[0].replace(rdecode, decodeURIComponent);
  479.                     cookie = converter.read ?
  480.                         converter.read(cookie, name) : converter(cookie, name) ||
  481.                         cookie.replace(rdecode, decodeURIComponent);
  482.  
  483.                     if (this.json) {
  484.                         try {
  485.                             cookie = JSON.parse(cookie);
  486.                         } catch (e) {}
  487.                     }
  488.  
  489.                     if (key === name) {
  490.                         result = cookie;
  491.                         break;
  492.                     }
  493.  
  494.                     if (!key) {
  495.                         result[name] = cookie;
  496.                     }
  497.                 } catch (e) {}
  498.             }
  499.  
  500.             return result;
  501.         }
  502.  
  503.         api.set = api;
  504.         api.get = function (key) {
  505.             return api.call(api, key);
  506.         };
  507.         api.getJSON = function () {
  508.             return api.apply({
  509.                 json: true
  510.             }, [].slice.call(arguments));
  511.         };
  512.         api.defaults = {};
  513.  
  514.         api.remove = function (key, attributes) {
  515.             api(key, '', extend(attributes, {
  516.                 expires: -1
  517.             }));
  518.         };
  519.  
  520.         api.withConverter = init;
  521.  
  522.         return api;
  523.     }
  524.  
  525.     return init(function () {});
  526. }));
  527.  
  528.     var html;
  529.     var domain = ".com";
  530. //    var domain = ".dev";
  531.  
  532.     var username = Cookies.get('scratch2html_username') ? Cookies.get('scratch2html_username') : 'www' ;
  533.     var password = Cookies.get('scratch2html_password');
  534.     var slug;
  535.  
  536.     function processTag(tag) {
  537.       html += tag;
  538.       $.post('http://localhost:5678/add', {tag: tag}, function() {
  539.           console.log('add tag:' + tag);
  540.       });
  541.     }
  542.  
  543.     ext._shutdown = function() {};
  544.  
  545.     ext._getStatus = function() {
  546.         return {status: 2, msg: 'Ready'};
  547.     };
  548.  
  549.     ext.html = function() {
  550.         html = '<html>';
  551.         $.post('http://localhost:5678/add', {tag: tag}, function() {
  552.             console.log('add tag: <html>');
  553.         });
  554.     };
  555.  
  556.     ext.head = function() {
  557.         tag = '<head>';
  558.         processTag(tag);
  559.     };
  560.  
  561.     ext.refresh = function(str) {
  562.         tag = '<meta http-equiv="refresh" content="' + str + '">';
  563.         processTag(tag);
  564.     };
  565.  
  566.     ext.head_end = function() {
  567.         tag = '</head>';
  568.         processTag(tag);
  569.     };
  570.  
  571.     ext.body = function() {
  572.         tag = '<body>';
  573.         processTag(tag);
  574.     };
  575.  
  576.     ext.h1 = function(str) {
  577.         tag = '<h1>' + str + '</h1>';
  578.         processTag(tag);
  579.     };
  580.  
  581.     ext.h2 = function(str) {
  582.         tag = '<h2>' + str + '</h2>';
  583.         processTag(tag);
  584.     };
  585.  
  586.     ext.p = function(str) {
  587.         tag = '<p>' + str + '</p>';
  588.         processTag(tag);
  589.     };
  590.  
  591.     ext.br = function(str) {
  592.         tag = '<br />';
  593.         processTag(tag);
  594.     };
  595.  
  596.     ext.img = function(str) {
  597.         tag = '<img src="' + str + '">';
  598.         processTag(tag);
  599.     };
  600.  
  601.     ext.table = function() {
  602.         tag = '<table border="1">';
  603.         processTag(tag);
  604.     };
  605.  
  606.     ext.tr = function() {
  607.         tag = '<tr>';
  608.         processTag(tag);
  609.     };
  610.  
  611.     ext.td = function(str) {
  612.         tag = '<td>' + str + '</td>';
  613.         processTag(tag);
  614.     };
  615.  
  616.     ext.tr_end = function() {
  617.         tag = '</tr>';
  618.         processTag(tag);
  619.     };
  620.  
  621.     ext.table_end = function() {
  622.         tag = '</table>';
  623.         processTag(tag);
  624.     };
  625.  
  626.     ext.body_end = function() {
  627.         tag = '</body>';
  628.         processTag(tag);
  629.     };
  630.  
  631.     ext.html_end = function() {
  632.         tag = '</html>';
  633.         processTag(tag);
  634.     };
  635.  
  636.     ext.set_password = function(str) {
  637.         password = str;
  638.         Cookies.set('scratch2html_password', str, { expires: 90 });
  639.     };
  640.  
  641.     ext.publish = function(str1, str2) {
  642.         username = str1
  643.         slug = str2
  644.         Cookies.set('scratch2html_username', username, { expires: 90 });
  645.         $.post('http://' + username + '.scratch2html' + domain + '/sites.json', {'site[slug]': slug, 'site[html]': html, password: password}, function() {
  646.             console.log('post:' + html);
  647.         });
  648.     };
  649.  
  650.     ext.open_page = function() {
  651.         window.open('http://' + username + '.scratch2html' +  domain + '/' + slug, '_blank');
  652.     }
  653.  
  654.     var descriptor = {
  655.         blocks: [
  656.             [' ', '<html>', 'html'],
  657.             [' ', '<head>', 'head'],
  658.             [' ', '<meta http-equiv="refresh" content=" %s ">', 'refresh', '5'],
  659.             [' ', '</head>', 'head_end'],
  660.             [' ', '<body>', 'body'],
  661.             [' ', '<h1> %s </h1>', 'h1', 'h1'],
  662.             [' ', '<h2> %s </h2>', 'h2', 'h2'],
  663.             [' ', '<p> %s </p>', 'p', 'p'],
  664.             [' ', '<br />', 'br'],
  665.             [' ', '<table border="1">', 'table'],
  666.             [' ', '<tr>', 'tr'],
  667.             [' ', '<td> %s </td>', 'td', 'td'],
  668.             [' ', '<img src=" %s ">', 'img', 'https://wiki.scratch.mit.edu/w/images/Cat.png'],
  669.             [' ', '</tr>', 'tr_end'],
  670.             [' ', '</table>', 'table_end'],
  671.             [' ', '</body>', 'body_end'],
  672.             [' ', '</html>', 'html_end'],
  673.             [' ', 'Set password to %s', 'set_password', password],
  674.             [' ', 'Publish to http:// %s .scratch2html.com/ %s', 'publish', username, ''],
  675.             [' ', 'Open page', 'open_page']
  676.         ]
  677.     };
  678.  
  679.     ScratchExtensions.register('Scratch2HTML', descriptor, ext);
  680.  
  681. })({});
  682. /* Extension using the JavaScript Speech API for speech to text */
  683. /* Sayamindu Dasgupta <sayamindu@media.mit.edu>, April 2014 */
  684.  
  685. new (function() {
  686.     var ext = this;
  687.    
  688.     var recognized_speech = '';
  689.  
  690.     ext.recognize_speech = function (callback) {
  691.         var recognition = new webkitSpeechRecognition();
  692.         recognition.onresult = function(event) {
  693.             if (event.results.length > 0) {
  694.                 recognized_speech = event.results[0][0].transcript;
  695.                 if (typeof callback=="function") callback();
  696.             }
  697.         };
  698.         recognition.start();
  699.     };
  700.  
  701.     ext.recognized_speech = function () {return recognized_speech;};
  702.  
  703.     ext._shutdown = function() {};
  704.  
  705.     ext._getStatus = function() {
  706.         if (window.webkitSpeechRecognition === undefined) {
  707.             return {status: 1, msg: 'Your browser does not support speech recognition. Try using Google Chrome.'};
  708.         }
  709.         return {status: 2, msg: 'Ready'};
  710.     };
  711.  
  712.     var descriptor = {
  713.         blocks: [
  714.             ['w', 'wait and recognize speech', 'recognize_speech'],
  715.             ['r', 'recognized speech', 'recognized_speech']
  716.         ],
  717.     };
  718.  
  719.     ScratchExtensions.register('Speech To Text', descriptor, ext);
  720. })();
  721. /* Extension using the JavaScript Speech API for text to speech */
  722. /* Sayamindu Dasgupta <sayamindu@media.mit.edu>, April 2014 */
  723.  
  724. new (function() {
  725.     var ext = this;
  726.  
  727.     /*function _get_voices() {
  728.         var ret = [];
  729.         var voices = speechSynthesis.getVoices();
  730.        
  731.         for(var i = 0; i < voices.length; i++ ) {
  732.             ret.push(voices[i].name);
  733.             console.log(voices.toString());
  734.         }
  735.  
  736.         return ret;
  737.     }
  738.  
  739.     ext.set_voice = function() {
  740.     };*/
  741.  
  742.     ext.speak_text = function (text, callback) {
  743.         var u = new SpeechSynthesisUtterance(text.toString());
  744.         u.onend = function(event) {
  745.             if (typeof callback=="function") callback();
  746.         };
  747.        
  748.         speechSynthesis.speak(u);
  749.     };
  750.  
  751.     ext._shutdown = function() {};
  752.  
  753.     ext._getStatus = function() {
  754.         if (window.SpeechSynthesisUtterance === undefined) {
  755.             return {status: 1, msg: 'Your browser does not support text to speech. Try using Google Chrome or Safari.'};
  756.         }
  757.         return {status: 2, msg: 'Ready'};
  758.     };
  759.  
  760.     var descriptor = {
  761.         blocks: [
  762.             //['', 'set voice to %m.voices', 'set_voice', ''],
  763.             ['w', 'speak %s', 'speak_text', 'Hello!'],
  764.         ],
  765.         /*menus: {
  766.             voices: _get_voices(),
  767.         },*/
  768.     };
  769.  
  770.     ScratchExtensions.register('Text to Speech', descriptor, ext);
  771. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement