corrade-nucleus-nucleons – Blame information for rev 3

Subversion Repositories:
Rev:
Rev Author Line No. Line
2 office 1 <!DOCTYPE html>
2  
3 <html lang="en">
4 <head>
5 <meta charset="utf-8">
6 <meta http-equiv="X-UA-Compatible" content="IE=edge">
7 <meta name="viewport" content="width=device-width, initial-scale=1">
8 <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
9 <meta name="description" content="Corrade Nucleon">
10 <meta name="author" content="Wizardry and Steamworks">
11 <link rel="icon" href="favicon.ico">
12  
13 <title>Corrade Nucleus - LSL Scripting Environment</title>
14  
15 <!-- Bootstrap core CSS -->
16 <link href="/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css">
17 <!-- Corrade Nucleus Fonts -->
18 <link href="/css/nucleus/fonts.css" rel="stylesheet" type="text/css">
19 <!-- Customized Nucleus style. -->
20 <link href="/css/nucleus/nucleus.css" rel="stylesheet" type="text/css">
21 <!-- Script Kiddie style. -->
22 <link href="/script-kiddie/css/style.css" rel="stylesheet" type="text/css">
23  
24 <!-- Bootstrap Toggle -->
25 <link href="/script-kiddie/bower_components/bootstrap-toggle/css/bootstrap-toggle.min.css" rel="stylesheet" type="text/css">
26  
27 </script>
28 </head>
29  
30 <body>
31 <!-- Dialog Modal -->
32 <div id="popup" class="modal fade bs-example-modal-lg" role="dialog">
33 <div class="modal-dialog modal-lg">
34 <!-- Modal content-->
35  
36 <div class="modal-content">
37 <div class="modal-header">
38 <button type="button" class="close" data-dismiss="modal">&times;</button>
39  
40 <h1 id="title" class="modal-title"></h1>
41 </div>
42  
43 <div id="content" class="modal-body">
44 <div class="progress">
45 <div id="progressbar" class="progress-bar" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="100" style="min-width: 2em; width: 2%;">
46 0%
47 </div>
48 </div>
49  
50 <div class="modal-footer">
51 <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
52 </div>
53 </div>
54 </div>
55 </div>
56 </div>
57  
58 <div class="container">
59 <div class="jumbotron">
60 <h1>Corrade Script Kiddie</h1>
61 <p class="lead">Script Kiddie is an LSL editor using Corrade as a backend for developing scripts.</p>
62 <img src="script-kiddie/img/script-kiddie.png"></div>
63  
64 <!-- <div id="drag-1" class="draggable">
65 <p> You can drag one element </p>
66 </div> -->
67  
68 <div id="editor-panel" class="panel panel-default draggable movable">
69 <div class="panel-heading">
70 <form id="script-tools" class="form-inline" data-toggle="validator" onSubmit="event.preventDefault();">
71 <div class="input-group">
72 <span class="input-group-btn">
73 <button id="compile-script" class="btn btn-default check-image checkButton" type="button" title="Compile script.">Compile</button>
74 <button id="tidy-script" class="btn btn-default" type="button" title="Tidy source-code.">Cleanup</button>
75 </span>
76 </div>
77 <div class="form-group has-feedback">
78 <div class="input-group">
79 <span class="input-group-btn">
80 <input id="store-script" type="checkbox" data-toggle="toggle" data-on="Store" data-off="No Store" data-onstyle="success" disabled="disabled">
81 </span>
82 <input id="script-name" type="text" class="form-control" placeholder="Script Name" aria-describedby="basic-addon1" required>
83 <span class="input-group-addon">-</span>
84 <input id="script-UUID" type="text" class="form-control" aria-describedby="basic-addon2" size="36" readonly>
85 </div>
86 </div>
87 </form>
88 </div>
89 <div class="panel-body" id="editorpanel">
90 <div id="editor" style="height: 500px;">default
91 {
92 state_entry()
93 {
94 llSay(0, "Hello, Avatar!");
95 }
96  
97 touch_start(integer total_number)
98 {
99 llSay(0, "Touched.");
100 }
101 }
102 </div>
103 </div>
104 </div>
105  
106 <div id="error-panel" class="panel panel-default draggable movable">
107 <div class="panel-heading">
108 <p>Compilation Errors</p>
109 </div>
110 <div class="panel-body" id="errorpanel">
111 <div id="errors">
112 <textarea id="message" class="form-control" rows="5" style="min-width: 100%; max-width: 100%; font-family: monospace; display: none;" readonly></textarea>
113 </div>
114 </div>
115 </div>
116  
117 </div> <!-- /container -->
118  
119 <footer class="footer">
120 <p>&copy; 2017 Wizardry and Steamworks</p>
121 </footer>
122  
123 <!-- jQuery -->
124 <script src="/bower_components/jquery/dist/jquery.min.js" type="text/javascript"></script>
125 <!-- Bootstrap Javascript -->
126 <script src="/bower_components/bootstrap/dist/js/bootstrap.min.js" type="text/javascript"></script>
127 <!-- Bootstrap Validator -->
128 <script src="/script-kiddie/bower_components/bootstrap-validator/dist/validator.min.js" type="text/javascript"></script>
129 <!-- Bootstrap Toggle -->
130 <script src="/script-kiddie/bower_components/bootstrap-toggle/js/bootstrap-toggle.min.js" type="text/javascript"></script>
131 <!-- ACE -->
132 <script type="text/javascript" src="/script-kiddie/bower_components/ace-builds/src-min-noconflict/ace.js"></script>
133 <script type="text/javascript" src="/script-kiddie/bower_components/ace-builds/src-min-noconflict/ext-language_tools.js"></script>
134 <!-- Beautify.JS -->
135 <script type="text/javascript" src="/script-kiddie/bower_components/js-beautify/js/lib/beautify.js"></script>
136 <!-- Velocity -->
137 <script type="text/javascript" src="/script-kiddie/bower_components/velocity/velocity.min.js"></script>
138 <!-- Interact JS -->
139 <script type="text/javascript" src="/script-kiddie/bower_components/interactjs/dist/interact.min.js"></script>
140 <!-- CryptoJS -->
3 office 141 <script src="/bower_components/cryptojslib/components/core-min.js" type="text/javascript"></script>
2 office 142 <script src="/bower_components/cryptojslib/components/enc-base64-min.js" type="text/javascript"></script>
143 <!-- Wizardry and Steamworks JavaScript Includes -->
144 <script src="/js/was/csv.js" type="text/javascript"></script>
145 <script src="/js/was/jquery/arrays.js" type="text/javascript"></script>
146 <script>
147 $(document).ready(() => {
148 // Auto-complete.
149 ace.require("ace/ext/language_tools");
150  
151 // Create the editor.
152 var editor = ace.edit("editor");
153 editor.setTheme("ace/theme/twilight");
154 editor.getSession().setMode("ace/mode/lsl");
155 editor.setOptions({
156 enableBasicAutocompletion: true,
157 enableSnippets: false,
158 enableLiveAutocompletion: true
159 });
160  
161 // Get the script from the storage.
162 var storeScriptText = localStorage.getItem("nucleus-script-kiddie.lsl");
163 if (typeof value == "string")
164 editor.getSession().setValue(storeScriptText);
165  
166 function compile(lsl) {
167 // Set the editor to read-only.
168 editor.setReadOnly(true);
169  
170 // Set the button image.
171 $('#compile-script').removeClass("check-image");
172 $('#compile-script').removeClass("checkButton");
173  
174 $('#compile-script').removeClass("cross-image");
175 $('#compile-script').removeClass("crossButton");
176  
177 $('#compile-script').addClass("activity-image");
178 $('#compile-script').addClass("activityButton");
179  
180 $.ajax({
181 type: 'POST',
182 url: '/',
183 data: {
184 command: 'compilescript',
185 data: lsl
186 },
187 dataType: 'json'
188 }).done(function(response) {
189 // Set the editor to read-enabled.
190 editor.setReadOnly(false);
191  
192 if(response.success === "True") {
193 // Set the button image.
194 $('#compile-script').removeClass("activity-image");
195 $('#compile-script').removeClass("activityButton");
196  
197 $('#compile-script').addClass("check-image");
198 $('#compile-script').addClass("checkButton");
199  
200 $("#message").velocity("slideUp", {
201 duration: 1000
202 });
203 return;
204 }
205  
206 // Move panel to top.
207 $('#error-panel').css('z-index', getTopWindowIndex() + 1);
208 $('#error-panel').css('position', 'relative');
209  
210 // Set the button image.
211 $('#compile-script').removeClass("activity-image");
212 $('#compile-script').removeClass("activityButton");
213  
214 $('#compile-script').addClass("cross-image");
215 $('#compile-script').addClass("crossButton");
216  
217 $("#message").velocity("slideDown", {
218 duration: 1000
219 });
220  
221 $('#message').val(wasCSVToArray(response.data).join(''));
222 });
223 }
224  
225 function store(lsl) {
226 $.ajax({
227 type: 'POST',
228 url: '/',
229 data: {
230 command: 'upload',
231 type: 'LSLText',
232 item: $('#script-UUID').val(),
233 name: $('#script-name').val(),
234 data: CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(lsl))
235 },
236 dataType: 'json'
237 }).done(function(response) {
238 if(response.success === "True") {
239 var data = wasCSVToArray(response.data);
240 var UUID = data[data.indexOf('item') + 1];
241  
242 // Set the inventory UUID of the saved script.
243 $('#script-UUID').val(UUID);
244  
245 localStorage.setItem('nucleus-script-kiddie-script-UUID', UUID);
3 office 246 return;
2 office 247 }
248 });
249 }
250  
251 // Add compiling with Ctrl-S
252 editor.commands.addCommand({
253 name: 'Compile',
254 bindKey: {
255 win: 'Ctrl-S',
256 mac: 'Command-S'
257 },
258 exec: editor => {
259 var data = editor.getSession().getValue();
260 compile(data);
261 if($('#store-script').prop('checked') === true)
262 store(data);
263 },
264 readOnly: false // false if this command should not apply in readOnly mode
265 });
266  
267 // Add click listener for compile button.
268 $('#compile-script').on('click', function (e) {
269 if($('#compile-script').hasClass("activity-image"))
270 return;
271  
272 var data = editor.getSession().getValue();
273 compile(data);
274 if($('#store-script').prop('checked') === true)
275 store(data);
276 });
277  
278 // Add click listener for tidy button.
279 $('#tidy-script').on('click', function (e) {
280 if($('#compile-script').hasClass("activity-image"))
281 return;
282  
283 // Code cleanup parameters.
284 editor.setValue(
285 js_beautify(
286 editor.getSession().getValue(),
287 {
288 "indent_size": 4,
289 "indent_char": " ",
290 "indent_with_tabs": false,
291 "eol": "\n",
292 "end_with_newline": true,
293 "indent_level": 0,
294 "preserve_newlines": true,
295 "max_preserve_newlines": 10,
296 "space_in_paren": false,
297 "space_in_empty_paren": false,
298 "jslint_happy": false,
299 "space_after_anon_function": false,
300 "brace_style": "expand",
301 "break_chained_methods": false,
302 "keep_array_indentation": false,
303 "unescape_strings": false,
304 "wrap_line_length": 0,
305 "e4x": false,
306 "comma_first": false,
307 "operator_position": "before-newline"
308 }
309 )
310 );
311 });
312  
313 // Save script on change.
314 editor.getSession().on('change', function(e) {
315 localStorage.setItem("nucleus-script-kiddie.lsl", editor.getValue());
316 });
317  
318 // Move windows to top on click.
319 $('.draggable').click(function() {
320 $(this).css('z-index', getTopWindowIndex() + 1);
321 });
322  
323 // target elements with the "draggable" class
324 interact('.draggable')
325 .draggable({
326 // enable inertial throwing
327 inertia: true,
328 // keep the element within the area of it's parent
329 restrict: {
330 // Let the user move the windows freely.
331 //restriction: "parent",
332 endOnly: true,
333 elementRect: { top: 0, left: 0, bottom: 1, right: 1 }
334 },
335  
336 // enable autoScroll
337 autoScroll: true,
338  
339 onmove: dragMoveListener,
340 onend: function (event) {
341 event.target.style.opacity = 1;
342 },
343 onstart: function(event) {
344 // Move windows to top on drag.
345 event.target.style.zIndex = getTopWindowIndex() + 1;
346 event.target.style.opacity = 0.5;
347 }
348 })
349 .allowFrom('.panel-heading');
350  
351 function getTopWindowIndex() {
352 return Math.max.apply(null,
353 $.map($('.draggable'), function(e, n) {
354 if ($(e).css('position') != 'static')
355 return parseInt($(e).css('z-index')) || 1;
356 })
357 );
358 }
359  
360 function dragMoveListener (event) {
361 var target = event.target,
362 // keep the dragged position in the data-x/data-y attributes
363 x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx,
364 y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
365  
366 // translate the element
367 target.style.webkitTransform =
368 target.style.transform =
369 'translate(' + x + 'px, ' + y + 'px)';
370  
371 // update the posiion attributes
372 target.setAttribute('data-x', x);
373 target.setAttribute('data-y', y);
374 }
375  
376 // this is used later in the resizing and gesture demos
377 window.dragMoveListener = dragMoveListener;
378  
379 // Get the item name from the storage.
380 var storeScriptUUID = localStorage.getItem('nucleus-script-kiddie-script-UUID');
381 if (typeof storeScriptUUID == "string")
382 $('#script-UUID').val(storeScriptUUID);
383  
384 // Get the item name from the storage.
385 var storeScriptName = localStorage.getItem('nucleus-script-kiddie-script-name');
386 if (typeof storeScriptName == "string")
387 $('#script-name').val(storeScriptName);
388  
389 // Store script name on modification.
390 var scriptNameTimerID;
391 $('#script-name').on('input',function(e){
392 var value = $(this).val();
393 if($(this).data('lastval')!= value){
394  
395 $(this).data('lastval',value);
396 clearTimeout(scriptNameTimerID);
397  
398 scriptNameTimerID = setTimeout(function() {
399 localStorage.setItem('nucleus-script-kiddie-script-name', value);
400 },500);
401 };
402 });
403  
404 // Enable storing of script only if the form validates.
405 $('#script-tools').on('validated.bs.validator', function (e) {
406 if($('#script-tools').has('.has-error').length !== 0) {
407 $('#store-script').bootstrapToggle('off');
408 $('#store-script').bootstrapToggle('disable');
409 return;
410 }
411 $('#store-script').bootstrapToggle('enable');
412 });
413  
414  
415 });
416 </script>
417 </body>
418 </html>