corrade-nucleus-nucleons – Rev 39

Subversion Repositories:
Rev:
<div id="script-kiddie">
    <!-- Script Kiddie style. -->
    <link href="/script-kiddie/css/style.css" rel="stylesheet" type="text/css">
    
    <!-- Bootstrap Toggle -->
    <link href="/script-kiddie/node_modules/bootstrap-toggle/css/bootstrap-toggle.min.css" rel="stylesheet" type="text/css">
    
    <!-- Dialog Modal -->
    <div id="script-kiddie-avatar-select" class="modal fade bs-example-modal-lg" role="dialog">
        <div class="modal-dialog modal-lg">
            <!-- Modal content-->

            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>

                    <h1 class="modal-title">Avatar Selection</h1>
                </div>

                <form class="form-inline" data-toggle="validator" onSubmit="event.preventDefault();">
                    <div class="modal-body">
                        <p>Please enter the avatar firstname and lastname to send the script to.</p>
                        <div class="form-group has-feedback">
                            <label for="script-kiddie-avatar-firstname">First Name</label>
                            <input id="script-kiddie-avatar-firstname" type="text" class="form-control" aria-describedby="basic-addon1" required>
                            <label for="script-kiddie-avatar-lastname">Last Name</label>
                            <input id="script-kiddie-avatar-lastname" type="text" class="form-control" aria-describedby="basic-addon1" required>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                        <button id="script-kiddie-send-script" type="submit" class="btn btn-primary">Confirm</button>
                    </div>
                </form>
            </div>
        </div>
    </div>

      <div class="panel panel-default window-manager-window" data-target="script-kiddie">
          <div class="panel-heading">
            <button type="button" class="close window-manager-close-button" data-target="script-kiddie"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            <form id="script-kiddie-script-tools" data-toggle="validator" onSubmit="event.preventDefault();">
                <div class="form-group">
                      <button id="script-kiddie-compile-script" class="btn btn-default check-image checkButton" type="button" title="Compile script.">Compile</button>
                      <button id="script-kiddie-tidy-script" class="btn btn-default" type="button" title="Tidy source-code.">Cleanup</button>
                 
                </div>
                <div class="form-group has-feedback">
                      <div class="input-group">
                          <span class="input-group-btn">
                              <input id="script-kiddie-store-script" type="checkbox" data-toggle="toggle" data-on="Store" data-off="No Store" data-onstyle="success" disabled="disabled">
                          </span>
                          <input id="script-kiddie-script-name" type="text" class="form-control" placeholder="Script Name" aria-describedby="basic-addon1" required>
                          <span class="input-group-addon">-</span>
                          <input id="script-kiddie-script-UUID" type="text" class="form-control" aria-describedby="basic-addon2" size="36">
                          <span class="input-group-btn">
                              <button id="script-kiddie-give-script" class="btn btn-default" type="button" title="Give script." disabled="disabled">Give</button>
                          </span>
                      </div>
                </div>
            </form>
          </div>
          <div class="panel-body"> 
              <div>
                  <textarea id="script-kiddie-message" class="form-control" rows="5" style="min-width: 100%; max-width: 100%; font-family: monospace; display: none;" readonly></textarea>
              </div>
              <div id="script-kiddie-editor" style="height: 500px;">default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        llSay(0, "Touched.");
    }
}
</div>
          </div>
      </div>
      
    <!-- Bootstrap Validator -->
    <script src="/node_modules/bootstrap-validator/dist/validator.min.js" type="text/javascript"></script>
    <!-- Bootstrap Toggle -->
    <script src="/script-kiddie/node_modules/bootstrap-toggle/js/bootstrap-toggle.min.js" type="text/javascript"></script>
    <!-- ACE -->
    <script src="/script-kiddie/node_modules/ace-builds/src-min-noconflict/ace.js"  type="text/javascript"></script>
    <script src="/script-kiddie/node_modules/ace-builds/src-min-noconflict/ext-language_tools.js" type="text/javascript"></script>
    <!-- Beautify.JS -->
    <script src="/script-kiddie/node_modules/js-beautify/js/lib/beautify.js" type="text/javascript"></script>
    <!-- Velocity -->
    <script src="/script-kiddie/node_modules/velocity-animate/velocity.min.js" type="text/javascript"></script>
    <script>
    $(document).ready(() => {
        // Auto-complete.
        ace.require("ace/ext/language_tools");
        
        // Create the editor.
        var editor = ace.edit("script-kiddie-editor");
        editor.setTheme("ace/theme/twilight");
        editor.getSession().setMode("ace/mode/lsl");
        editor.setOptions({
            enableBasicAutocompletion: true,
            enableSnippets: false,
            enableLiveAutocompletion: true
        });
        
        // Get the script from the storage.
        var storeScriptText = localStorage.getItem('nucleus-script-kiddie-script-body');
        if (typeof storeScriptText == "string")
            editor.getSession().setValue(storeScriptText);
        
        function compile(lsl, callback) {
            // Set the editor to read-only.
            editor.setReadOnly(true);
            
            // Set the button image.
            $('#script-kiddie-compile-script').removeClass("check-image");
            $('#script-kiddie-compile-script').removeClass("checkButton");
            
            $('#script-kiddie-compile-script').removeClass("cross-image");
            $('#script-kiddie-compile-script').removeClass("crossButton");
            
            $('#script-kiddie-compile-script').addClass("activity-image");
            $('#script-kiddie-compile-script').addClass("activityButton");
            
            $.ajax({
                type: 'POST',
                url: '/',
                data: {
                    command: 'compilescript',
                    data: lsl
                },
                dataType: 'json'
            }).done(function(response) {
                var success = response.success === "True";
                // Set the editor to read-enabled.
                editor.setReadOnly(false);
                
                if(success) {
                    // Set the button image.
                    $('#script-kiddie-compile-script').removeClass("activity-image");
                    $('#script-kiddie-compile-script').removeClass("activityButton");
                
                    $('#script-kiddie-compile-script').addClass("check-image");
                    $('#script-kiddie-compile-script').addClass("checkButton");
                    
                    $("#script-kiddie-message").velocity("slideUp", {
                        duration: 1000
                    });
                    callback(success);
                    return;
                }
                
                // Move panel to top.
                $('#script-kiddie-error-panel').css('z-index', getTopWindowIndex() + 1);
                $('#script-kiddie-error-panel').css('position', 'relative');
                
                // Set the button image.
                $('#script-kiddie-compile-script').removeClass("activity-image");
                $('#script-kiddie-compile-script').removeClass("activityButton");
                
                $('#script-kiddie-compile-script').addClass("cross-image");
                $('#script-kiddie-compile-script').addClass("crossButton");
                
                $("#script-kiddie-message").velocity("slideDown", {
                    duration: 1000
                });
                
                $('#script-kiddie-message').val(wasCSVToArray(response.data).join(''));
                callback(success);
            });
        }
        
        function store(lsl, callback) {
            $.ajax({
                type: 'POST',
                url: '/',
                data: {
                    command: 'updatescript',
                    create: true,
                    type: 'agent',
                    entity: 'text',
                    item: $('#script-kiddie-script-UUID').val(),
                    target: $('#script-kiddie-script-name').val(),
                    data: lsl
                },
                dataType: 'json'
            }).done(function(response) {
                var success = response.success === "True";
                if(success) {
                    // Get the response data and item UUID.
                    var data = wasCSVToArray(response.data);
                    var UUID = data[data.indexOf('item') + 1];
                    
                    // Set the inventory UUID of the saved script.
                    $('#script-kiddie-script-UUID').val(UUID);
                    
                    localStorage.setItem('nucleus-script-kiddie-script-UUID', UUID);
                }
                callback(success);
            });
        }
        
        // Add compiling with Ctrl-S
        editor.commands.addCommand({
            name: 'Compile',
            bindKey: {
                win: 'Ctrl-S', 
                mac: 'Command-S'
            },
            exec: editor => {
                var data = editor.getSession().getValue();
                // Store locally on save.
                localStorage.setItem('nucleus-script-kiddie-script-body', data);
                
                compile(data, (success) => {
                    // Script did not compile so do not store.
                    if(!success)
                        return;
                    
                    // Storing is not enabled so return.
                    if($('#script-kiddie-store-script').prop('checked') !== true)
                        return;
                    
                    store(data, (success) => {
                        // Script was stored successfully.
                        //alert("Script stored succssfully.");
                    });
                });
                
            },
            readOnly: false // false if this command should not apply in readOnly mode
        });
        
        // Add click listener for compile button.
        $('#script-kiddie-compile-script').on('click', function (e) {
            if($('#script-kiddie-compile-script').hasClass("activity-image"))
                return;
            
            var data = editor.getSession().getValue();
            compile(data, (success) => {});
            if($('#script-kiddie-store-script').prop('checked') === true)
                store(data);
        });
        
        // Add click listener for tidy button.
        $('#script-kiddie-tidy-script').on('click', function (e) {
            if($('#script-kiddie-compile-script').hasClass("activity-image"))
                return;
            
            // Code cleanup parameters.
            editor.setValue(
                js_beautify(
                    editor.getSession().getValue(), 
                    {
                        "indent_size": 4,
                        "indent_char": " ",
                        "indent_with_tabs": false,
                        "eol": "\n",
                        "end_with_newline": true,
                        "indent_level": 0,
                        "preserve_newlines": true,
                        "max_preserve_newlines": 10,
                        "space_in_paren": false,
                        "space_in_empty_paren": false,
                        "jslint_happy": false,
                        "space_after_anon_function": false,
                        "brace_style": "expand",
                        "break_chained_methods": false,
                        "keep_array_indentation": false,
                        "unescape_strings": false,
                        "wrap_line_length": 0,
                        "e4x": false,
                        "comma_first": false,
                        "operator_position": "before-newline"
                    }
                )
            );
        });
        
        function give(firstname, lastname, callback) {
            $.ajax({
                type: 'POST',
                url: '/',
                data: {
                    command: 'give',
                    entity: 'avatar',
                    item: $('#script-kiddie-script-UUID').val(),
                    firstname: firstname,
                    lastname: lastname,
                    permissions: 'c--mvt------------c--mvtc--mvt'
                },
                dataType: 'json'
            }).done(function(response) {
                callback(response);
            });
        }
        
        // Add click listener for give button.
        $('#script-kiddie-give-script').on('click', function (e) {
            if($('#script-kiddie-compile-script').hasClass("activity-image"))
                return;
            
                // Show the popup.
                $('#script-kiddie-avatar-select').modal('show');
        });
        
        // Add click listener to modal confirmation.
        $('#script-kiddie-send-script').on('click', function(e) {
                // Hide the popup.
                $('#script-kiddie-avatar-select').modal('hide');
            
            // Disable give button.
            $('#script-kiddie-give-script').attr('disabled', true);
            give($('#script-kiddie-avatar-firstname').val(), $('#script-kiddie-avatar-lastname').val(), (response) => {
                // Enable give button.
                $('#script-kiddie-give-script').attr('disabled', false);
            });
        })
        
        // Save script on change.
        editor.getSession().on('change', function(e) {
            localStorage.setItem('nucleus-script-kiddie-script-body', editor.getSession().getValue());
        });
        
        // Get the item name from the storage.
        var storeScriptUUID = localStorage.getItem('nucleus-script-kiddie-script-UUID');
        if (typeof storeScriptUUID == "string")
            $('#script-kiddie-script-UUID').val(storeScriptUUID);
        
        // Get the item name from the storage.
        var storeScriptName = localStorage.getItem('nucleus-script-kiddie-script-name');
        if (typeof storeScriptName == "string")
            $('#script-kiddie-script-name').val(storeScriptName);
        
        // Store script name on modification.
        var scriptNameTimerID;    
        $('#script-kiddie-script-name').on('input',function(e){
            var value = $(this).val();
            if($(this).data('lastval')!= value){

                $(this).data('lastval',value);
                clearTimeout(scriptNameTimerID);

                scriptNameTimerID = setTimeout(function() {
                    localStorage.setItem('nucleus-script-kiddie-script-name', value);
                },500);
            };
        });
        
        // Enable storing of script only if the form validates.
        $('#script-kiddie-script-tools').on('validated.bs.validator', function (e) {
            if($('#script-kiddie-script-tools').has('.has-error').length !== 0) {
                $('#script-kiddie-store-script').bootstrapToggle('off');
                $('#script-kiddie-store-script').bootstrapToggle('disable');
                return;
            }
            $('#script-kiddie-store-script').bootstrapToggle('enable');
        });
        
        $('#script-kiddie-store-script').change(function() {
            switch($('#script-kiddie-store-script').prop('checked'))
            {
                case true:
                    // Disable script name and UUID.
                    $('#script-kiddie-script-name').attr('disabled', true);
                    $('#script-kiddie-script-UUID').attr('disabled', true);
                    
                    var data = editor.getSession().getValue();
                    // Store locally on save.
                    localStorage.setItem('nucleus-script-kiddie-script-body', data);
                    
                    $('#script-kiddie-give-script').attr('disabled', true);
                    compile(data, (success) => {
                        store(data, (success) => {
                            // Script was stored successfully.
                            // Enable the give button.
                            $('#script-kiddie-give-script').attr('disabled', false);
                        });
                    });
                    break;
                default:
                    // Enable script name and UUID.
                    $('#script-kiddie-script-name').attr('disabled', false);
                    $('#script-kiddie-script-UUID').attr('disabled', false);
                    
                    // Disable the give button.
                    $('#script-kiddie-give-script').attr('disabled', true);
                    break;
            }
        });
        
    });
    </script>
</div>