Skip to content

Commit 980f021

Browse files
commit on 03-10-2023 at 14:17
1 parent d880625 commit 980f021

File tree

97 files changed

+5809
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+5809
-0
lines changed

.htaccess

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
RewriteEngine On
2+
RewriteCond %{REQUEST_FILENAME} !-d
3+
RewriteCond %{REQUEST_FILENAME}.js -f
4+
RewriteRule (.*)$ $1.js
5+
6+
RewriteEngine On
7+
RewriteCond %{REQUEST_FILENAME} !-d
8+
RewriteCond %{REQUEST_FILENAME}.php -f
9+
RewriteRule (.*)$ $1.php

AUTHORS

Whitespace-only changes.

Fonts/fonts.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"Arial": "Arial, Helvetica, sans-serif",
3+
"Cambria": "Cambria, Cochin, Georgia, Times, 'Times New Roman', serif",
4+
"Cursive": "cursive",
5+
"Courier New": "'Courier New', Courier, monospace",
6+
"System UI": "system-ui",
7+
"Franklin Gothic": "'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif",
8+
"Gill Sans": "'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif",
9+
"Georgia": "Georgia, 'Times New Roman', Times, serif",
10+
"Lucida Sans": "'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode'",
11+
"Impact": "Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif",
12+
"Monospace": "monospace",
13+
"Roboto UI": "Roboto, 'Segoe UI', Tahoma, sans-serif",
14+
"Segoe UI": "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif",
15+
"Serif": "serif",
16+
"Times New Roman": "'Times New Roman', Times, serif",
17+
"Trebuchet MS": "'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial",
18+
"Verdana": "Verdana, Geneva, Tahoma, sans-serif"
19+
}

components/initializeSettings.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import contextStatusBar from "../exports/contextStatusBar";
2+
import settings from "../import/settings";
3+
import SBLogic from "../import/SBLogic";
4+
import statusbar from "../import/statusbar";
5+
import server from "../server/server";
6+
import { cssSetupFn } from "../import/NBSinit";
7+
8+
function initializeSettings() {
9+
$("#statusBar").on("change", function() {
10+
server({"editor.statusBar": this.checked ? 'on' : 'off'});
11+
});
12+
settings.cssSetup["editor.wordWrap"]=='off' && $(".writable-area").attr("data-word-wrap", 'off');
13+
$(".set-status-bar").click(function() {
14+
var checkbox = $(this).find("input")[0];
15+
setSetting("editor.statusBar", checkbox.checked ? 'on' : 'off');
16+
});
17+
}
18+
function setSetting(property, value) {
19+
if (property in settings.editorSetup) {
20+
if (property==='editor.statusBar') {
21+
var statusInfo = {extension: $("body").attr("data-file-type")};
22+
var zoom = window.sessionStorage.getItem("zoom_value");
23+
zoom = zoom || JSON.stringify({zoom: 100});
24+
var statusBar = statusbar();
25+
value=='on' ? $('.editor-content').append(statusBar) : $('.status-bar').remove();
26+
27+
$("span.zoom").text(JSON.parse(zoom).zoom + "%");
28+
$(".active-filetype").html(
29+
`<span class="extension">${statusInfo.extension}</span>`
30+
);
31+
SBLogic();
32+
contextStatusBar();
33+
}
34+
} else {
35+
$(".writable-area").removeClass("active");
36+
$("body").css(cssSetupFn(property, value, settings.fontSetup));
37+
$(".writable-area").attr("data-"+$.dashed(property.slice(7)), value);
38+
}
39+
}
40+
export { setSetting };
41+
export default initializeSettings;

components/open.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { importPageData } from "../import/preveiw";
2+
import { fetchContent } from "../import/preveiw";
3+
import render from "../import/render";
4+
import fetchingPopup from "../templates/fetchingPopup";
5+
6+
function formData(file, filename) {
7+
var form = document.createElement("form");
8+
var request = document.createElement("input");
9+
var filename = request.cloneNode(true);
10+
var fileElem = request.cloneNode(true);
11+
fileElem.type='file';
12+
fileElem.name='file';
13+
fileElem.files = file;
14+
request.value='POST';
15+
request.name='request';
16+
filename.name='filename';
17+
filename.value=filename;
18+
$(form).append([request, filename, fileElem]);
19+
return new FormData(form);
20+
}
21+
function fopener() {
22+
$("#fopener").on("change", function(e) {
23+
render.rendWithArgs(fetchingPopup, "Fetching data");
24+
var file = e.target.files;
25+
var filename = file[0]['name'];
26+
filename = filename.split('.');
27+
filename.pop();
28+
fetchContent('POST', null,
29+
formData(file, filename), function(response) {
30+
importPageData(response);
31+
$(".fetching-popup").remove();
32+
/* clear Undo data when open new file data */
33+
window.sessionStorage.removeItem("undoBackup");
34+
});
35+
});
36+
}
37+
export default fopener;

components/print.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function print() {
2+
$("#File")[0].checked=false;
3+
var fontFamily = {fontFamily: $(".writable-area").css("font-family")};
4+
fontFamily.fontSize = $(".writable-area").css("font-size");
5+
var entity = [];
6+
$(".line").each(function(_i, line) {
7+
entity.push($(line).text());
8+
});
9+
if ($("body").css("--word-wrap")=='break-word') {
10+
entity = entity.join('<br/>');
11+
} else {
12+
entity = entity.join('');
13+
}
14+
var windowX = window.outerWidth;
15+
var windowY = window.outerHeight;
16+
var win = window.open(window.location.href, '_blank', `top=0,left=0,width=${windowX},height=${windowY}`);
17+
if (!win) return;
18+
19+
var copyDocument = new DOMParser().parseFromString(entity, "text/html");
20+
$(copyDocument).find("body").css(fontFamily).css('pointer-events', 'none');
21+
win.document.write($(copyDocument.firstChild).html());
22+
win.print();
23+
win.close();
24+
}
25+
function printPage() {
26+
$(".print").click(print)
27+
};
28+
export { print };
29+
export default printPage;

components/save.js

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
import { hidePopupWithEase } from "../exports/multiTaskHandler";
2+
import tmpFilename from "../import/tmpFilename";
3+
import textBackups from "../exports/textBackups";
4+
import render from "../import/render";
5+
import xhrSend from "../server/xhrSend";
6+
import saveAsPopup from "../templates/save-as";
7+
import fileBackup from "../import/fileBackup";
8+
import existsErrorPopup from "../templates/existErrorPopup";
9+
10+
function createData() {
11+
var datasource = {};
12+
var data = window.localStorage.getItem("statusInfo");
13+
data = data && JSON.parse(data) || {};
14+
datasource["charset"]=data.charset || "UTF-8";
15+
datasource["fileExists"]=$("body").attr("data-file-exists");
16+
datasource["fileName"]=$("body").attr("data-file-opened");
17+
datasource["fileType"]=$("body").attr("data-file-type");
18+
datasource["fileExists"]=JSON.parse(datasource["fileExists"]);
19+
return datasource;
20+
}
21+
export default function save() {
22+
$(".s-save").click(openSaveAsPopup);
23+
}
24+
function openSaveAsPopup() {
25+
if ($(".save-as-popup").length) {
26+
return;
27+
}
28+
const datasource = createData();
29+
if (datasource["fileExists"]) {
30+
saveFileContent({skip: true, content: extractHTML()});
31+
return;
32+
}
33+
render(saveAsPopup).runScript(selectAndFocusInput);
34+
}
35+
function saveFileContent(senderData) {
36+
if (senderData.content===fileBackup.backups && senderData.skip) {
37+
return;
38+
}
39+
if (!fileBackup.backups ||
40+
(fileBackup.backups && fileBackup.backups!==senderData.content)) {
41+
fileBackup.backups=senderData.content;
42+
}
43+
xhrSend(senderData, resetup);
44+
}
45+
function submitSaveAs() {
46+
$("#saveAsForm").on("submit", function(e) {
47+
e.preventDefault();
48+
saveFileContent(serializeFormData(this));
49+
});
50+
}
51+
function selectAndFocusInput() {
52+
var input = $("#filename")[0];
53+
input.select();
54+
submitSaveAs();
55+
setRecentFileList();
56+
toggleHandler();
57+
$(input).focus();
58+
}
59+
function saveRecentFileInLocalDB(filename) {
60+
var data = window.localStorage.getItem("recent");
61+
try {
62+
data = data && JSON.parse(data);
63+
} catch(e) {};
64+
if (!data) {
65+
data = {dir: `${$("body").attr("data-root-dir")}\\tmp\\`, recent: []};
66+
}
67+
68+
$.extend(true, data, {recent: [filename]});
69+
data.recent = $.unique(data.recent);
70+
71+
window.localStorage.setItem("recent", JSON.stringify(data));
72+
return data;
73+
}
74+
function setRecentFileList() {
75+
var data = window.localStorage.getItem("recent");
76+
try {
77+
data = data && JSON.parse(data);
78+
}
79+
catch(e) {};
80+
81+
$(".recentfile .rtoggle").empty();
82+
var recentElem, value;
83+
84+
if (!data) {
85+
data = {dir: `${$("body").attr("data-root-dir")}\\tmp\\`, recent: ["Untitled.txt"]};
86+
}
87+
88+
$.each(data.recent.reverse(), function(_i, recentFile) {
89+
recentElem = document.createElement("div");
90+
value = data.dir + recentFile;
91+
$(recentElem).attr("data-id", "#filename");
92+
$(recentElem).attr("data-path", value).attr("data-value", recentFile);
93+
$(recentElem).html(value);
94+
$(recentElem).addClass("eqiv-recent-file");
95+
$(".recentfile .rtoggle").append(recentElem);
96+
});
97+
}
98+
function toggleHandler() {
99+
$(".eqiv-recent-file, .ftype").click(function() {
100+
if ($(this).filter("#ftype")) {
101+
$("#XFT").val($(this).attr("data-sender"));
102+
}
103+
var id = $(this).attr("data-id");
104+
var value = $(this).attr("data-value");
105+
$("#chooseType")[0].checked=false;
106+
$("#recentToggle")[0].checked=false;
107+
var focusable = $(id).val(value).filter("#filename");
108+
focusable.length && focusable[0].select();
109+
focusable.focus();
110+
});
111+
}
112+
function resetup(response, status, sender) {
113+
$(".save-as-popup").remove();
114+
if (response.exists) {
115+
render.rendWithArgs(existsErrorPopup, sender["file-name"]);
116+
$(".btn-ok").click(function() {
117+
hidePopupWithEase($(".error-popup"));
118+
});
119+
return;
120+
}
121+
if (response.status===status) {
122+
textBackups.text = $(".line").text();
123+
if (sender.skip) return;
124+
125+
var filename = sender["file-name"].split(".");
126+
var extension = filename.pop();
127+
filename = filename.join(".");
128+
document.title = `Notebook – ${filename}`;
129+
$(".extension").text(extension);
130+
saveRecentFileInLocalDB(sender["file-name"]);
131+
$("body")
132+
.attr("data-file-type", extension).attr("data-file-exists", true) .attr("data-file-opened", filename);
133+
}
134+
}
135+
function extractHTML() {
136+
var extracted="";
137+
$.each($(".line"), function(_i, line) {
138+
extracted += $(line).text().replace(/\s/g, "\x20") + "\n";
139+
});
140+
141+
extracted = extracted.replace(/^\n/, "").replace(/\n$/, "");
142+
return extracted.replace(/</g, "&lt;").replace(/>/g, "&gt;");
143+
}
144+
function serializeFormData(form) {
145+
/**
146+
* text-data
147+
* method
148+
* data-file-exists
149+
* data-file-content
150+
* data-file-type
151+
* data-file-opened
152+
*/
153+
var rnoAcceptFilename = /[\\\/\:\*\?\<\>\"\|]/g;
154+
var rExtension = /\.[a-z0-9]{1,10}$/;
155+
var data = JSON.parse($(form).serializeJson());
156+
data.content = extractHTML();
157+
158+
if (data['xhr-file-type']==='txt') {
159+
var filename = data['file-name'];
160+
data['file-name'] = filename.replace(/\.txt$/, '').concat('.txt');
161+
}
162+
163+
if (!rExtension.test(data['file-name'])) {
164+
data['file-name']=data['file-name'].concat('.txt');
165+
}
166+
167+
if (rnoAcceptFilename.test(data["file-name"])) {
168+
return;
169+
}
170+
return data;
171+
}
172+
export { createData, selectAndFocusInput };

components/save_all.js

Whitespace-only changes.

components/save_as.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import saveAsPopup from "../templates/save-as";
2+
import render from "../import/render";
3+
import { selectAndFocusInput } from "./save";
4+
export default function saveAs() {
5+
$(".s-save-as").click(function() {
6+
render( saveAsPopup ).runScript(selectAndFocusInput);
7+
});
8+
}

components/tab_open.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function tabOpener() {
2+
$(".new-tab").click(function() {
3+
var a = document.createElement("a");
4+
a.href='/';
5+
a.target='blank';
6+
a.click();
7+
});
8+
$(".new-window").click(function() {
9+
var windowX = window.outerWidth;
10+
var windowY = window.outerHeight;
11+
var subX = 90 * 2;
12+
var subY = 50 * 2;
13+
var finalWidth = windowX - subX;
14+
var finalHeight = windowY - subY;
15+
window.open(window.location.href, "_blank",
16+
`top=${subY / 2},
17+
left=${subX / 2},
18+
width=${finalWidth},height=${finalHeight}`
19+
);
20+
});
21+
}
22+
export default tabOpener;

0 commit comments

Comments
 (0)