teacher.js 5.48 KB
$(function(){
    var teacherId = document.getElementById('teacher');
    var socket = io('https://live-api:5000');
    // var socket = io('http://live-api:5000');

    // 初始化codemirror页面
    var teacher = CodeMirror.fromTextArea(teacherId, {
      value: '输入HTML代码',
      mode:  'text/x-java',
      lineNumbers: true,
      smartIndent: false
    });

    // 记录每次操作的变化
    CodeMirror.on(teacher,"change", function(instance, changeObj) {
        // console.log(instance);
        // console.log(changeObj);
        var changeObjStr = JSON.stringify(changeObj);

        // 
        socket.emit('teacher.programming', changeObjStr);

        socket.emit('programming.content', teacher.getValue());

        // 构建操作对象
        buildOperate('teacher', changeObj);

        console.log(IDELive.operations);

    });

    // 链接时执行初始化代码
    socket.on('programming.content', function(msg) {
        // teacher.setValue(msg);
    });



    var IDELive = {
        operations: []    // 存储录制时的动作对象
    }

    // 选中 input 事件
    $('#runtimeArgus').focus(function(){
        console.log('------getValue')
        socket.emit('select.menu');
    })

    // 输入事件
    $('#runtimeArgus').bind('input propertychange', function() {  
        console.log($('#runtimeArgus').val());
        socket.emit('stdin.value', $('#runtimeArgus').val());
    }); 
    // $("#runtimeArgus").change(function(){
        
    // });



    var LiveTeacher = {
        init: function(){
            LiveTeacher.events();
        },
        events: function(){
            var _this = this;
            $('#liveStart').on('click', function(){ liveStartFun(); });
            $('#liveEnd').on('click', function(){ liveEndFun(); });

            $('#liveConfirm').on('click', function(){ liveConfirmFun(); });
            $('#liveCancel').on('click', function(){ liveCancelFun(); });

            $('#liveSave').on('click', function(){  });
            $('#liveOut').on('click', function(){ liveOutFun(); });

            $('#CompileBtn').on('click', function(){ liveCompileFun(); });
            
        },
        liveStartFun: function(){},
        liveEndFun: function(){},

        liveConfirmFun: function(){},
        liveCancelFun: function(){},

        liveSaveFun: function(){},
        liveOutFun: function(){},

        liveCompileFun: function(){}
    }

    // 禁止关闭浏览器
    window.onbeforeunload = function(){
        alert('-0000');
        console.log('-----======')
        return ('你确定要结束教学吗?请确认保存内容');
    }



    LiveTeacher.init();

    // 开始录制
    function liveStartFun(){
        // $('.tip-wrap').show();
        $('#liveStart').hide();
        $('#liveEnd').show();
    }

    // 确认开始录制
    function liveConfirmFun(){
        $('.tip-wrap').hide();
        IDELive.record_startime = new Date().getTime()
        console.log(IDELive.record_startime);
    }

    // 结束录制
    function liveEndFun(){
        // $('#liveStart').hide();
        $('#liveEnd').hide();
        $('#liveSave').removeAttr('disabled')
    }

    // 取消开始录制
    function liveCancelFun(){
        $('.tip-wrap').hide();
    }

    // 编译
    function liveCompileFun(){
        console.log('编译' + teacher.getValue());

        socket.emit('programming.compile');

        var el = document.querySelector('#CompileBtn')
        var l = Ladda.create(el);
        l.start();

        var input = $('#input').val() || '';
        var code = teacher.getValue();
        var compileData = {
            code: code,
            langid: 10,
            input: input
        }
        $.ajax({
            type: "post",
            url: gxb_api + "/submit/submitCode/api",
            data: JSON.stringify(compileData),
            dataType: "json",
            contentType: "application/json",
            success: function(data) {
               console.log(data);
               l.remove();
               compileResult(data);
            },
            error: function(){
                l.stop();
                alert('错误');
            }
        });
    }

    // 结束录制
    function liveOutFun(){
        // 课程结束时清楚服务端记录的数据
        socket.emit('programming.clear', '');
        teacher.setValue('');
        console.log('programming.clear')

        socket.on('programming.clear', function(msg) {
            console.log('programming.clear ---- ');
            content = '';
            io.emit('programming.content', msg);
        });


        // window.onbeforeunload = function(){
        //     return ('你确定要结束教学吗?')
        // }
        // window.close()

        $(window).unbind('beforeunload',  function(){ 
            return '确认退出? 将不保存你的代码';
        });
        window.close();
    }




    /**
     * 组合录入代码 
     * by Kira 2017-5-17
     */ 
    function buildOperate(editor, changeobj){
        var intervaltime,
            currenttime = new Date().getTime();
        console.log(IDELive.record_startime);
        var intervaltime = currenttime - IDELive.record_startime;

        var  operateObj = {
            intervaltime: intervaltime,
            editor: editor,
            changeobj: changeobj,
            currenttime: currenttime,
            trigger: 0
        };
        IDELive.operations.push( operateObj);       // 添加每次输入对象
        IDELive.record_startime = currenttime; //设定起始时间
    }

    
})