forked from BarclaySoftware/WebScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
118 lines (104 loc) · 3.39 KB
/
script.js
File metadata and controls
118 lines (104 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.session.setMode("ace/mode/html");
editor.setOptions({
fontSize: "16px",
fontFamily: 'code-font',
wrap: false,
showPrintMargin: false,
enableBasicAutocompletion: true,
enableLiveAutocompletion: true,
enableSnippets: true
});
function openFile() {
var input = document.createElement('input');
input.type = 'file';
input.accept = 'text/html';
input.onchange = function(event) {
var file = event.target.files[0];
var reader = new FileReader();
reader.onload = function() {
editor.setValue(reader.result);
document.title = file.name + " - WebScript";
updatePreview();
};
reader.readAsText(file);
};
input.click();
}
function saveFile() {
var content = editor.getValue();
var blob = new Blob([content], { type: 'text/html' });
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
var currentDate = new Date().toISOString().slice(0, 19).replace(/[-T:/]/g, '');
var fileName = 'html_' + currentDate + '.html';
a.download = fileName;
document.title = fileName;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
isModified = false;
}
document.getElementById('openButton').addEventListener('click', openFile);
document.getElementById('saveButton').addEventListener('click', saveFile);
var isModified = false;
editor.session.on('change', function() {
isModified = true;
var fileName = document.title;
if (!fileName.endsWith('*')) {
fileName += "*";
}
document.title = fileName;
updatePreview();
});
function updatePreview() {
var preview = document.getElementById('preview');
preview.srcdoc = editor.getValue();
}
window.addEventListener('beforeunload', function(e) {
if (isModified) {
var confirmationMessage = 'You have unsaved changes. Are you sure you want to leave?';
e.returnValue = confirmationMessage;
return confirmationMessage;
}
});
document.getElementById('lineWrapSelect').addEventListener('change', function() {
var value = this.value === 'on';
editor.setOption('wrap', value);
});
window.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.key === 's') {
event.preventDefault();
saveFile();
} else if (event.ctrlKey && event.key === 'o') {
event.preventDefault();
openFile();
}
});
var divider = document.getElementById('divider');
var editorContainer = document.getElementById('editor-container');
var editorElement = document.getElementById('editor');
var isResizing = false;
divider.addEventListener('mousedown', function(e) {
isResizing = true;
document.body.style.cursor = 'ew-resize';
});
document.addEventListener('mousemove', function(e) {
if (isResizing) {
var offsetRight = editorContainer.clientWidth - (e.clientX - editorContainer.offsetLeft);
var editorWidth = editorContainer.clientWidth - offsetRight;
editorWidth = Math.max(editorWidth, 100);
editorElement.style.width = editorWidth + 'px';
editor.resize();
}
});
document.addEventListener('mouseup', function() {
if (isResizing) {
isResizing = false;
document.body.style.cursor = 'default';
}
});
updatePreview();