@nextcloud/files 4.0.0-beta.3 → 4.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/chunks/{folder-6N4fHAic.mjs → folder-Bf-tAYWu.mjs} +11 -5
- package/dist/chunks/folder-Bf-tAYWu.mjs.map +1 -0
- package/dist/dav/dav.d.ts +26 -9
- package/dist/dav.mjs +16 -23
- package/dist/dav.mjs.map +1 -1
- package/dist/fileListHeaders.d.ts +8 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +157 -1631
- package/dist/index.mjs.map +1 -1
- package/dist/navigation/column.d.ts +9 -9
- package/dist/navigation/navigation.d.ts +11 -8
- package/dist/navigation/view.d.ts +23 -11
- package/dist/sidebar/Sidebar.d.ts +33 -0
- package/dist/sidebar/SidebarTab.d.ts +78 -0
- package/dist/sidebar/index.d.ts +2 -0
- package/dist/types.d.ts +13 -13
- package/dist/utils/filename.d.ts +1 -1
- package/package.json +13 -18
- package/dist/chunks/folder-6N4fHAic.mjs.map +0 -1
- package/dist/chunks/folder-DY0O4v7K.cjs +0 -438
- package/dist/chunks/folder-DY0O4v7K.cjs.map +0 -1
- package/dist/dav.cjs +0 -281
- package/dist/dav.cjs.map +0 -1
- package/dist/index.cjs +0 -3018
- package/dist/index.cjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { l as logger, F as FileType } from "./chunks/folder-
|
|
2
|
-
import { a, b, N, c, P } from "./chunks/folder-
|
|
1
|
+
import { l as logger, F as FileType } from "./chunks/folder-Bf-tAYWu.mjs";
|
|
2
|
+
import { a, b, N, c, P } from "./chunks/folder-Bf-tAYWu.mjs";
|
|
3
3
|
import { TypedEventTarget } from "typescript-event-target";
|
|
4
|
-
import
|
|
4
|
+
import isSvg from "is-svg";
|
|
5
5
|
import { getCapabilities } from "@nextcloud/capabilities";
|
|
6
|
-
import { extname, basename } from "
|
|
6
|
+
import { extname, basename } from "@nextcloud/paths";
|
|
7
7
|
import { getCanonicalLocale, getLanguage } from "@nextcloud/l10n";
|
|
8
8
|
var DefaultType = /* @__PURE__ */ ((DefaultType2) => {
|
|
9
9
|
DefaultType2["DEFAULT"] = "default";
|
|
@@ -896,62 +896,6 @@ const getFileListHeaders = function() {
|
|
|
896
896
|
}
|
|
897
897
|
return window._nc_filelistheader;
|
|
898
898
|
};
|
|
899
|
-
class Navigation extends TypedEventTarget {
|
|
900
|
-
_views = [];
|
|
901
|
-
_currentView = null;
|
|
902
|
-
/**
|
|
903
|
-
* Register a new view on the navigation
|
|
904
|
-
* @param view The view to register
|
|
905
|
-
* @throws `Error` is thrown if a view with the same id is already registered
|
|
906
|
-
*/
|
|
907
|
-
register(view) {
|
|
908
|
-
if (this._views.find((search) => search.id === view.id)) {
|
|
909
|
-
throw new Error(`View id ${view.id} is already registered`);
|
|
910
|
-
}
|
|
911
|
-
this._views.push(view);
|
|
912
|
-
this.dispatchTypedEvent("update", new CustomEvent("update"));
|
|
913
|
-
}
|
|
914
|
-
/**
|
|
915
|
-
* Remove a registered view
|
|
916
|
-
* @param id The id of the view to remove
|
|
917
|
-
*/
|
|
918
|
-
remove(id) {
|
|
919
|
-
const index = this._views.findIndex((view) => view.id === id);
|
|
920
|
-
if (index !== -1) {
|
|
921
|
-
this._views.splice(index, 1);
|
|
922
|
-
this.dispatchTypedEvent("update", new CustomEvent("update"));
|
|
923
|
-
}
|
|
924
|
-
}
|
|
925
|
-
/**
|
|
926
|
-
* Set the currently active view
|
|
927
|
-
* @fires UpdateActiveViewEvent
|
|
928
|
-
* @param view New active view
|
|
929
|
-
*/
|
|
930
|
-
setActive(view) {
|
|
931
|
-
this._currentView = view;
|
|
932
|
-
const event = new CustomEvent("updateActive", { detail: view });
|
|
933
|
-
this.dispatchTypedEvent("updateActive", event);
|
|
934
|
-
}
|
|
935
|
-
/**
|
|
936
|
-
* The currently active files view
|
|
937
|
-
*/
|
|
938
|
-
get active() {
|
|
939
|
-
return this._currentView;
|
|
940
|
-
}
|
|
941
|
-
/**
|
|
942
|
-
* All registered views
|
|
943
|
-
*/
|
|
944
|
-
get views() {
|
|
945
|
-
return this._views;
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
const getNavigation = function() {
|
|
949
|
-
if (typeof window._nc_navigation === "undefined") {
|
|
950
|
-
window._nc_navigation = new Navigation();
|
|
951
|
-
logger.debug("Navigation service initialized");
|
|
952
|
-
}
|
|
953
|
-
return window._nc_navigation;
|
|
954
|
-
};
|
|
955
899
|
class Column {
|
|
956
900
|
_column;
|
|
957
901
|
constructor(column) {
|
|
@@ -992,1577 +936,10 @@ const isValidColumn = function(column) {
|
|
|
992
936
|
}
|
|
993
937
|
return true;
|
|
994
938
|
};
|
|
995
|
-
var sax$1 = {};
|
|
996
|
-
var hasRequiredSax;
|
|
997
|
-
function requireSax() {
|
|
998
|
-
if (hasRequiredSax) return sax$1;
|
|
999
|
-
hasRequiredSax = 1;
|
|
1000
|
-
(function(exports) {
|
|
1001
|
-
(function(sax2) {
|
|
1002
|
-
sax2.parser = function(strict, opt) {
|
|
1003
|
-
return new SAXParser(strict, opt);
|
|
1004
|
-
};
|
|
1005
|
-
sax2.SAXParser = SAXParser;
|
|
1006
|
-
sax2.SAXStream = SAXStream;
|
|
1007
|
-
sax2.createStream = createStream;
|
|
1008
|
-
sax2.MAX_BUFFER_LENGTH = 64 * 1024;
|
|
1009
|
-
var buffers = [
|
|
1010
|
-
"comment",
|
|
1011
|
-
"sgmlDecl",
|
|
1012
|
-
"textNode",
|
|
1013
|
-
"tagName",
|
|
1014
|
-
"doctype",
|
|
1015
|
-
"procInstName",
|
|
1016
|
-
"procInstBody",
|
|
1017
|
-
"entity",
|
|
1018
|
-
"attribName",
|
|
1019
|
-
"attribValue",
|
|
1020
|
-
"cdata",
|
|
1021
|
-
"script"
|
|
1022
|
-
];
|
|
1023
|
-
sax2.EVENTS = [
|
|
1024
|
-
"text",
|
|
1025
|
-
"processinginstruction",
|
|
1026
|
-
"sgmldeclaration",
|
|
1027
|
-
"doctype",
|
|
1028
|
-
"comment",
|
|
1029
|
-
"opentagstart",
|
|
1030
|
-
"attribute",
|
|
1031
|
-
"opentag",
|
|
1032
|
-
"closetag",
|
|
1033
|
-
"opencdata",
|
|
1034
|
-
"cdata",
|
|
1035
|
-
"closecdata",
|
|
1036
|
-
"error",
|
|
1037
|
-
"end",
|
|
1038
|
-
"ready",
|
|
1039
|
-
"script",
|
|
1040
|
-
"opennamespace",
|
|
1041
|
-
"closenamespace"
|
|
1042
|
-
];
|
|
1043
|
-
function SAXParser(strict, opt) {
|
|
1044
|
-
if (!(this instanceof SAXParser)) {
|
|
1045
|
-
return new SAXParser(strict, opt);
|
|
1046
|
-
}
|
|
1047
|
-
var parser = this;
|
|
1048
|
-
clearBuffers(parser);
|
|
1049
|
-
parser.q = parser.c = "";
|
|
1050
|
-
parser.bufferCheckPosition = sax2.MAX_BUFFER_LENGTH;
|
|
1051
|
-
parser.opt = opt || {};
|
|
1052
|
-
parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags;
|
|
1053
|
-
parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase";
|
|
1054
|
-
parser.tags = [];
|
|
1055
|
-
parser.closed = parser.closedRoot = parser.sawRoot = false;
|
|
1056
|
-
parser.tag = parser.error = null;
|
|
1057
|
-
parser.strict = !!strict;
|
|
1058
|
-
parser.noscript = !!(strict || parser.opt.noscript);
|
|
1059
|
-
parser.state = S.BEGIN;
|
|
1060
|
-
parser.strictEntities = parser.opt.strictEntities;
|
|
1061
|
-
parser.ENTITIES = parser.strictEntities ? Object.create(sax2.XML_ENTITIES) : Object.create(sax2.ENTITIES);
|
|
1062
|
-
parser.attribList = [];
|
|
1063
|
-
if (parser.opt.xmlns) {
|
|
1064
|
-
parser.ns = Object.create(rootNS);
|
|
1065
|
-
}
|
|
1066
|
-
if (parser.opt.unquotedAttributeValues === void 0) {
|
|
1067
|
-
parser.opt.unquotedAttributeValues = !strict;
|
|
1068
|
-
}
|
|
1069
|
-
parser.trackPosition = parser.opt.position !== false;
|
|
1070
|
-
if (parser.trackPosition) {
|
|
1071
|
-
parser.position = parser.line = parser.column = 0;
|
|
1072
|
-
}
|
|
1073
|
-
emit2(parser, "onready");
|
|
1074
|
-
}
|
|
1075
|
-
if (!Object.create) {
|
|
1076
|
-
Object.create = function(o) {
|
|
1077
|
-
function F() {
|
|
1078
|
-
}
|
|
1079
|
-
F.prototype = o;
|
|
1080
|
-
var newf = new F();
|
|
1081
|
-
return newf;
|
|
1082
|
-
};
|
|
1083
|
-
}
|
|
1084
|
-
if (!Object.keys) {
|
|
1085
|
-
Object.keys = function(o) {
|
|
1086
|
-
var a2 = [];
|
|
1087
|
-
for (var i in o) if (o.hasOwnProperty(i)) a2.push(i);
|
|
1088
|
-
return a2;
|
|
1089
|
-
};
|
|
1090
|
-
}
|
|
1091
|
-
function checkBufferLength(parser) {
|
|
1092
|
-
var maxAllowed = Math.max(sax2.MAX_BUFFER_LENGTH, 10);
|
|
1093
|
-
var maxActual = 0;
|
|
1094
|
-
for (var i = 0, l = buffers.length; i < l; i++) {
|
|
1095
|
-
var len = parser[buffers[i]].length;
|
|
1096
|
-
if (len > maxAllowed) {
|
|
1097
|
-
switch (buffers[i]) {
|
|
1098
|
-
case "textNode":
|
|
1099
|
-
closeText(parser);
|
|
1100
|
-
break;
|
|
1101
|
-
case "cdata":
|
|
1102
|
-
emitNode(parser, "oncdata", parser.cdata);
|
|
1103
|
-
parser.cdata = "";
|
|
1104
|
-
break;
|
|
1105
|
-
case "script":
|
|
1106
|
-
emitNode(parser, "onscript", parser.script);
|
|
1107
|
-
parser.script = "";
|
|
1108
|
-
break;
|
|
1109
|
-
default:
|
|
1110
|
-
error(parser, "Max buffer length exceeded: " + buffers[i]);
|
|
1111
|
-
}
|
|
1112
|
-
}
|
|
1113
|
-
maxActual = Math.max(maxActual, len);
|
|
1114
|
-
}
|
|
1115
|
-
var m = sax2.MAX_BUFFER_LENGTH - maxActual;
|
|
1116
|
-
parser.bufferCheckPosition = m + parser.position;
|
|
1117
|
-
}
|
|
1118
|
-
function clearBuffers(parser) {
|
|
1119
|
-
for (var i = 0, l = buffers.length; i < l; i++) {
|
|
1120
|
-
parser[buffers[i]] = "";
|
|
1121
|
-
}
|
|
1122
|
-
}
|
|
1123
|
-
function flushBuffers(parser) {
|
|
1124
|
-
closeText(parser);
|
|
1125
|
-
if (parser.cdata !== "") {
|
|
1126
|
-
emitNode(parser, "oncdata", parser.cdata);
|
|
1127
|
-
parser.cdata = "";
|
|
1128
|
-
}
|
|
1129
|
-
if (parser.script !== "") {
|
|
1130
|
-
emitNode(parser, "onscript", parser.script);
|
|
1131
|
-
parser.script = "";
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
SAXParser.prototype = {
|
|
1135
|
-
end: function() {
|
|
1136
|
-
end(this);
|
|
1137
|
-
},
|
|
1138
|
-
write,
|
|
1139
|
-
resume: function() {
|
|
1140
|
-
this.error = null;
|
|
1141
|
-
return this;
|
|
1142
|
-
},
|
|
1143
|
-
close: function() {
|
|
1144
|
-
return this.write(null);
|
|
1145
|
-
},
|
|
1146
|
-
flush: function() {
|
|
1147
|
-
flushBuffers(this);
|
|
1148
|
-
}
|
|
1149
|
-
};
|
|
1150
|
-
var Stream;
|
|
1151
|
-
try {
|
|
1152
|
-
Stream = require("stream").Stream;
|
|
1153
|
-
} catch (ex) {
|
|
1154
|
-
Stream = function() {
|
|
1155
|
-
};
|
|
1156
|
-
}
|
|
1157
|
-
if (!Stream) Stream = function() {
|
|
1158
|
-
};
|
|
1159
|
-
var streamWraps = sax2.EVENTS.filter(function(ev) {
|
|
1160
|
-
return ev !== "error" && ev !== "end";
|
|
1161
|
-
});
|
|
1162
|
-
function createStream(strict, opt) {
|
|
1163
|
-
return new SAXStream(strict, opt);
|
|
1164
|
-
}
|
|
1165
|
-
function SAXStream(strict, opt) {
|
|
1166
|
-
if (!(this instanceof SAXStream)) {
|
|
1167
|
-
return new SAXStream(strict, opt);
|
|
1168
|
-
}
|
|
1169
|
-
Stream.apply(this);
|
|
1170
|
-
this._parser = new SAXParser(strict, opt);
|
|
1171
|
-
this.writable = true;
|
|
1172
|
-
this.readable = true;
|
|
1173
|
-
var me = this;
|
|
1174
|
-
this._parser.onend = function() {
|
|
1175
|
-
me.emit("end");
|
|
1176
|
-
};
|
|
1177
|
-
this._parser.onerror = function(er) {
|
|
1178
|
-
me.emit("error", er);
|
|
1179
|
-
me._parser.error = null;
|
|
1180
|
-
};
|
|
1181
|
-
this._decoder = null;
|
|
1182
|
-
streamWraps.forEach(function(ev) {
|
|
1183
|
-
Object.defineProperty(me, "on" + ev, {
|
|
1184
|
-
get: function() {
|
|
1185
|
-
return me._parser["on" + ev];
|
|
1186
|
-
},
|
|
1187
|
-
set: function(h) {
|
|
1188
|
-
if (!h) {
|
|
1189
|
-
me.removeAllListeners(ev);
|
|
1190
|
-
me._parser["on" + ev] = h;
|
|
1191
|
-
return h;
|
|
1192
|
-
}
|
|
1193
|
-
me.on(ev, h);
|
|
1194
|
-
},
|
|
1195
|
-
enumerable: true,
|
|
1196
|
-
configurable: false
|
|
1197
|
-
});
|
|
1198
|
-
});
|
|
1199
|
-
}
|
|
1200
|
-
SAXStream.prototype = Object.create(Stream.prototype, {
|
|
1201
|
-
constructor: {
|
|
1202
|
-
value: SAXStream
|
|
1203
|
-
}
|
|
1204
|
-
});
|
|
1205
|
-
SAXStream.prototype.write = function(data) {
|
|
1206
|
-
if (typeof Buffer === "function" && typeof Buffer.isBuffer === "function" && Buffer.isBuffer(data)) {
|
|
1207
|
-
if (!this._decoder) {
|
|
1208
|
-
var SD = require$$1.StringDecoder;
|
|
1209
|
-
this._decoder = new SD("utf8");
|
|
1210
|
-
}
|
|
1211
|
-
data = this._decoder.write(data);
|
|
1212
|
-
}
|
|
1213
|
-
this._parser.write(data.toString());
|
|
1214
|
-
this.emit("data", data);
|
|
1215
|
-
return true;
|
|
1216
|
-
};
|
|
1217
|
-
SAXStream.prototype.end = function(chunk) {
|
|
1218
|
-
if (chunk && chunk.length) {
|
|
1219
|
-
this.write(chunk);
|
|
1220
|
-
}
|
|
1221
|
-
this._parser.end();
|
|
1222
|
-
return true;
|
|
1223
|
-
};
|
|
1224
|
-
SAXStream.prototype.on = function(ev, handler) {
|
|
1225
|
-
var me = this;
|
|
1226
|
-
if (!me._parser["on" + ev] && streamWraps.indexOf(ev) !== -1) {
|
|
1227
|
-
me._parser["on" + ev] = function() {
|
|
1228
|
-
var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);
|
|
1229
|
-
args.splice(0, 0, ev);
|
|
1230
|
-
me.emit.apply(me, args);
|
|
1231
|
-
};
|
|
1232
|
-
}
|
|
1233
|
-
return Stream.prototype.on.call(me, ev, handler);
|
|
1234
|
-
};
|
|
1235
|
-
var CDATA = "[CDATA[";
|
|
1236
|
-
var DOCTYPE = "DOCTYPE";
|
|
1237
|
-
var XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace";
|
|
1238
|
-
var XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/";
|
|
1239
|
-
var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE };
|
|
1240
|
-
var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;
|
|
1241
|
-
var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;
|
|
1242
|
-
var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;
|
|
1243
|
-
var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;
|
|
1244
|
-
function isWhitespace(c2) {
|
|
1245
|
-
return c2 === " " || c2 === "\n" || c2 === "\r" || c2 === " ";
|
|
1246
|
-
}
|
|
1247
|
-
function isQuote(c2) {
|
|
1248
|
-
return c2 === '"' || c2 === "'";
|
|
1249
|
-
}
|
|
1250
|
-
function isAttribEnd(c2) {
|
|
1251
|
-
return c2 === ">" || isWhitespace(c2);
|
|
1252
|
-
}
|
|
1253
|
-
function isMatch(regex, c2) {
|
|
1254
|
-
return regex.test(c2);
|
|
1255
|
-
}
|
|
1256
|
-
function notMatch(regex, c2) {
|
|
1257
|
-
return !isMatch(regex, c2);
|
|
1258
|
-
}
|
|
1259
|
-
var S = 0;
|
|
1260
|
-
sax2.STATE = {
|
|
1261
|
-
BEGIN: S++,
|
|
1262
|
-
// leading byte order mark or whitespace
|
|
1263
|
-
BEGIN_WHITESPACE: S++,
|
|
1264
|
-
// leading whitespace
|
|
1265
|
-
TEXT: S++,
|
|
1266
|
-
// general stuff
|
|
1267
|
-
TEXT_ENTITY: S++,
|
|
1268
|
-
// & and such.
|
|
1269
|
-
OPEN_WAKA: S++,
|
|
1270
|
-
// <
|
|
1271
|
-
SGML_DECL: S++,
|
|
1272
|
-
// <!BLARG
|
|
1273
|
-
SGML_DECL_QUOTED: S++,
|
|
1274
|
-
// <!BLARG foo "bar
|
|
1275
|
-
DOCTYPE: S++,
|
|
1276
|
-
// <!DOCTYPE
|
|
1277
|
-
DOCTYPE_QUOTED: S++,
|
|
1278
|
-
// <!DOCTYPE "//blah
|
|
1279
|
-
DOCTYPE_DTD: S++,
|
|
1280
|
-
// <!DOCTYPE "//blah" [ ...
|
|
1281
|
-
DOCTYPE_DTD_QUOTED: S++,
|
|
1282
|
-
// <!DOCTYPE "//blah" [ "foo
|
|
1283
|
-
COMMENT_STARTING: S++,
|
|
1284
|
-
// <!-
|
|
1285
|
-
COMMENT: S++,
|
|
1286
|
-
// <!--
|
|
1287
|
-
COMMENT_ENDING: S++,
|
|
1288
|
-
// <!-- blah -
|
|
1289
|
-
COMMENT_ENDED: S++,
|
|
1290
|
-
// <!-- blah --
|
|
1291
|
-
CDATA: S++,
|
|
1292
|
-
// <![CDATA[ something
|
|
1293
|
-
CDATA_ENDING: S++,
|
|
1294
|
-
// ]
|
|
1295
|
-
CDATA_ENDING_2: S++,
|
|
1296
|
-
// ]]
|
|
1297
|
-
PROC_INST: S++,
|
|
1298
|
-
// <?hi
|
|
1299
|
-
PROC_INST_BODY: S++,
|
|
1300
|
-
// <?hi there
|
|
1301
|
-
PROC_INST_ENDING: S++,
|
|
1302
|
-
// <?hi "there" ?
|
|
1303
|
-
OPEN_TAG: S++,
|
|
1304
|
-
// <strong
|
|
1305
|
-
OPEN_TAG_SLASH: S++,
|
|
1306
|
-
// <strong /
|
|
1307
|
-
ATTRIB: S++,
|
|
1308
|
-
// <a
|
|
1309
|
-
ATTRIB_NAME: S++,
|
|
1310
|
-
// <a foo
|
|
1311
|
-
ATTRIB_NAME_SAW_WHITE: S++,
|
|
1312
|
-
// <a foo _
|
|
1313
|
-
ATTRIB_VALUE: S++,
|
|
1314
|
-
// <a foo=
|
|
1315
|
-
ATTRIB_VALUE_QUOTED: S++,
|
|
1316
|
-
// <a foo="bar
|
|
1317
|
-
ATTRIB_VALUE_CLOSED: S++,
|
|
1318
|
-
// <a foo="bar"
|
|
1319
|
-
ATTRIB_VALUE_UNQUOTED: S++,
|
|
1320
|
-
// <a foo=bar
|
|
1321
|
-
ATTRIB_VALUE_ENTITY_Q: S++,
|
|
1322
|
-
// <foo bar="""
|
|
1323
|
-
ATTRIB_VALUE_ENTITY_U: S++,
|
|
1324
|
-
// <foo bar="
|
|
1325
|
-
CLOSE_TAG: S++,
|
|
1326
|
-
// </a
|
|
1327
|
-
CLOSE_TAG_SAW_WHITE: S++,
|
|
1328
|
-
// </a >
|
|
1329
|
-
SCRIPT: S++,
|
|
1330
|
-
// <script> ...
|
|
1331
|
-
SCRIPT_ENDING: S++
|
|
1332
|
-
// <script> ... <
|
|
1333
|
-
};
|
|
1334
|
-
sax2.XML_ENTITIES = {
|
|
1335
|
-
"amp": "&",
|
|
1336
|
-
"gt": ">",
|
|
1337
|
-
"lt": "<",
|
|
1338
|
-
"quot": '"',
|
|
1339
|
-
"apos": "'"
|
|
1340
|
-
};
|
|
1341
|
-
sax2.ENTITIES = {
|
|
1342
|
-
"amp": "&",
|
|
1343
|
-
"gt": ">",
|
|
1344
|
-
"lt": "<",
|
|
1345
|
-
"quot": '"',
|
|
1346
|
-
"apos": "'",
|
|
1347
|
-
"AElig": 198,
|
|
1348
|
-
"Aacute": 193,
|
|
1349
|
-
"Acirc": 194,
|
|
1350
|
-
"Agrave": 192,
|
|
1351
|
-
"Aring": 197,
|
|
1352
|
-
"Atilde": 195,
|
|
1353
|
-
"Auml": 196,
|
|
1354
|
-
"Ccedil": 199,
|
|
1355
|
-
"ETH": 208,
|
|
1356
|
-
"Eacute": 201,
|
|
1357
|
-
"Ecirc": 202,
|
|
1358
|
-
"Egrave": 200,
|
|
1359
|
-
"Euml": 203,
|
|
1360
|
-
"Iacute": 205,
|
|
1361
|
-
"Icirc": 206,
|
|
1362
|
-
"Igrave": 204,
|
|
1363
|
-
"Iuml": 207,
|
|
1364
|
-
"Ntilde": 209,
|
|
1365
|
-
"Oacute": 211,
|
|
1366
|
-
"Ocirc": 212,
|
|
1367
|
-
"Ograve": 210,
|
|
1368
|
-
"Oslash": 216,
|
|
1369
|
-
"Otilde": 213,
|
|
1370
|
-
"Ouml": 214,
|
|
1371
|
-
"THORN": 222,
|
|
1372
|
-
"Uacute": 218,
|
|
1373
|
-
"Ucirc": 219,
|
|
1374
|
-
"Ugrave": 217,
|
|
1375
|
-
"Uuml": 220,
|
|
1376
|
-
"Yacute": 221,
|
|
1377
|
-
"aacute": 225,
|
|
1378
|
-
"acirc": 226,
|
|
1379
|
-
"aelig": 230,
|
|
1380
|
-
"agrave": 224,
|
|
1381
|
-
"aring": 229,
|
|
1382
|
-
"atilde": 227,
|
|
1383
|
-
"auml": 228,
|
|
1384
|
-
"ccedil": 231,
|
|
1385
|
-
"eacute": 233,
|
|
1386
|
-
"ecirc": 234,
|
|
1387
|
-
"egrave": 232,
|
|
1388
|
-
"eth": 240,
|
|
1389
|
-
"euml": 235,
|
|
1390
|
-
"iacute": 237,
|
|
1391
|
-
"icirc": 238,
|
|
1392
|
-
"igrave": 236,
|
|
1393
|
-
"iuml": 239,
|
|
1394
|
-
"ntilde": 241,
|
|
1395
|
-
"oacute": 243,
|
|
1396
|
-
"ocirc": 244,
|
|
1397
|
-
"ograve": 242,
|
|
1398
|
-
"oslash": 248,
|
|
1399
|
-
"otilde": 245,
|
|
1400
|
-
"ouml": 246,
|
|
1401
|
-
"szlig": 223,
|
|
1402
|
-
"thorn": 254,
|
|
1403
|
-
"uacute": 250,
|
|
1404
|
-
"ucirc": 251,
|
|
1405
|
-
"ugrave": 249,
|
|
1406
|
-
"uuml": 252,
|
|
1407
|
-
"yacute": 253,
|
|
1408
|
-
"yuml": 255,
|
|
1409
|
-
"copy": 169,
|
|
1410
|
-
"reg": 174,
|
|
1411
|
-
"nbsp": 160,
|
|
1412
|
-
"iexcl": 161,
|
|
1413
|
-
"cent": 162,
|
|
1414
|
-
"pound": 163,
|
|
1415
|
-
"curren": 164,
|
|
1416
|
-
"yen": 165,
|
|
1417
|
-
"brvbar": 166,
|
|
1418
|
-
"sect": 167,
|
|
1419
|
-
"uml": 168,
|
|
1420
|
-
"ordf": 170,
|
|
1421
|
-
"laquo": 171,
|
|
1422
|
-
"not": 172,
|
|
1423
|
-
"shy": 173,
|
|
1424
|
-
"macr": 175,
|
|
1425
|
-
"deg": 176,
|
|
1426
|
-
"plusmn": 177,
|
|
1427
|
-
"sup1": 185,
|
|
1428
|
-
"sup2": 178,
|
|
1429
|
-
"sup3": 179,
|
|
1430
|
-
"acute": 180,
|
|
1431
|
-
"micro": 181,
|
|
1432
|
-
"para": 182,
|
|
1433
|
-
"middot": 183,
|
|
1434
|
-
"cedil": 184,
|
|
1435
|
-
"ordm": 186,
|
|
1436
|
-
"raquo": 187,
|
|
1437
|
-
"frac14": 188,
|
|
1438
|
-
"frac12": 189,
|
|
1439
|
-
"frac34": 190,
|
|
1440
|
-
"iquest": 191,
|
|
1441
|
-
"times": 215,
|
|
1442
|
-
"divide": 247,
|
|
1443
|
-
"OElig": 338,
|
|
1444
|
-
"oelig": 339,
|
|
1445
|
-
"Scaron": 352,
|
|
1446
|
-
"scaron": 353,
|
|
1447
|
-
"Yuml": 376,
|
|
1448
|
-
"fnof": 402,
|
|
1449
|
-
"circ": 710,
|
|
1450
|
-
"tilde": 732,
|
|
1451
|
-
"Alpha": 913,
|
|
1452
|
-
"Beta": 914,
|
|
1453
|
-
"Gamma": 915,
|
|
1454
|
-
"Delta": 916,
|
|
1455
|
-
"Epsilon": 917,
|
|
1456
|
-
"Zeta": 918,
|
|
1457
|
-
"Eta": 919,
|
|
1458
|
-
"Theta": 920,
|
|
1459
|
-
"Iota": 921,
|
|
1460
|
-
"Kappa": 922,
|
|
1461
|
-
"Lambda": 923,
|
|
1462
|
-
"Mu": 924,
|
|
1463
|
-
"Nu": 925,
|
|
1464
|
-
"Xi": 926,
|
|
1465
|
-
"Omicron": 927,
|
|
1466
|
-
"Pi": 928,
|
|
1467
|
-
"Rho": 929,
|
|
1468
|
-
"Sigma": 931,
|
|
1469
|
-
"Tau": 932,
|
|
1470
|
-
"Upsilon": 933,
|
|
1471
|
-
"Phi": 934,
|
|
1472
|
-
"Chi": 935,
|
|
1473
|
-
"Psi": 936,
|
|
1474
|
-
"Omega": 937,
|
|
1475
|
-
"alpha": 945,
|
|
1476
|
-
"beta": 946,
|
|
1477
|
-
"gamma": 947,
|
|
1478
|
-
"delta": 948,
|
|
1479
|
-
"epsilon": 949,
|
|
1480
|
-
"zeta": 950,
|
|
1481
|
-
"eta": 951,
|
|
1482
|
-
"theta": 952,
|
|
1483
|
-
"iota": 953,
|
|
1484
|
-
"kappa": 954,
|
|
1485
|
-
"lambda": 955,
|
|
1486
|
-
"mu": 956,
|
|
1487
|
-
"nu": 957,
|
|
1488
|
-
"xi": 958,
|
|
1489
|
-
"omicron": 959,
|
|
1490
|
-
"pi": 960,
|
|
1491
|
-
"rho": 961,
|
|
1492
|
-
"sigmaf": 962,
|
|
1493
|
-
"sigma": 963,
|
|
1494
|
-
"tau": 964,
|
|
1495
|
-
"upsilon": 965,
|
|
1496
|
-
"phi": 966,
|
|
1497
|
-
"chi": 967,
|
|
1498
|
-
"psi": 968,
|
|
1499
|
-
"omega": 969,
|
|
1500
|
-
"thetasym": 977,
|
|
1501
|
-
"upsih": 978,
|
|
1502
|
-
"piv": 982,
|
|
1503
|
-
"ensp": 8194,
|
|
1504
|
-
"emsp": 8195,
|
|
1505
|
-
"thinsp": 8201,
|
|
1506
|
-
"zwnj": 8204,
|
|
1507
|
-
"zwj": 8205,
|
|
1508
|
-
"lrm": 8206,
|
|
1509
|
-
"rlm": 8207,
|
|
1510
|
-
"ndash": 8211,
|
|
1511
|
-
"mdash": 8212,
|
|
1512
|
-
"lsquo": 8216,
|
|
1513
|
-
"rsquo": 8217,
|
|
1514
|
-
"sbquo": 8218,
|
|
1515
|
-
"ldquo": 8220,
|
|
1516
|
-
"rdquo": 8221,
|
|
1517
|
-
"bdquo": 8222,
|
|
1518
|
-
"dagger": 8224,
|
|
1519
|
-
"Dagger": 8225,
|
|
1520
|
-
"bull": 8226,
|
|
1521
|
-
"hellip": 8230,
|
|
1522
|
-
"permil": 8240,
|
|
1523
|
-
"prime": 8242,
|
|
1524
|
-
"Prime": 8243,
|
|
1525
|
-
"lsaquo": 8249,
|
|
1526
|
-
"rsaquo": 8250,
|
|
1527
|
-
"oline": 8254,
|
|
1528
|
-
"frasl": 8260,
|
|
1529
|
-
"euro": 8364,
|
|
1530
|
-
"image": 8465,
|
|
1531
|
-
"weierp": 8472,
|
|
1532
|
-
"real": 8476,
|
|
1533
|
-
"trade": 8482,
|
|
1534
|
-
"alefsym": 8501,
|
|
1535
|
-
"larr": 8592,
|
|
1536
|
-
"uarr": 8593,
|
|
1537
|
-
"rarr": 8594,
|
|
1538
|
-
"darr": 8595,
|
|
1539
|
-
"harr": 8596,
|
|
1540
|
-
"crarr": 8629,
|
|
1541
|
-
"lArr": 8656,
|
|
1542
|
-
"uArr": 8657,
|
|
1543
|
-
"rArr": 8658,
|
|
1544
|
-
"dArr": 8659,
|
|
1545
|
-
"hArr": 8660,
|
|
1546
|
-
"forall": 8704,
|
|
1547
|
-
"part": 8706,
|
|
1548
|
-
"exist": 8707,
|
|
1549
|
-
"empty": 8709,
|
|
1550
|
-
"nabla": 8711,
|
|
1551
|
-
"isin": 8712,
|
|
1552
|
-
"notin": 8713,
|
|
1553
|
-
"ni": 8715,
|
|
1554
|
-
"prod": 8719,
|
|
1555
|
-
"sum": 8721,
|
|
1556
|
-
"minus": 8722,
|
|
1557
|
-
"lowast": 8727,
|
|
1558
|
-
"radic": 8730,
|
|
1559
|
-
"prop": 8733,
|
|
1560
|
-
"infin": 8734,
|
|
1561
|
-
"ang": 8736,
|
|
1562
|
-
"and": 8743,
|
|
1563
|
-
"or": 8744,
|
|
1564
|
-
"cap": 8745,
|
|
1565
|
-
"cup": 8746,
|
|
1566
|
-
"int": 8747,
|
|
1567
|
-
"there4": 8756,
|
|
1568
|
-
"sim": 8764,
|
|
1569
|
-
"cong": 8773,
|
|
1570
|
-
"asymp": 8776,
|
|
1571
|
-
"ne": 8800,
|
|
1572
|
-
"equiv": 8801,
|
|
1573
|
-
"le": 8804,
|
|
1574
|
-
"ge": 8805,
|
|
1575
|
-
"sub": 8834,
|
|
1576
|
-
"sup": 8835,
|
|
1577
|
-
"nsub": 8836,
|
|
1578
|
-
"sube": 8838,
|
|
1579
|
-
"supe": 8839,
|
|
1580
|
-
"oplus": 8853,
|
|
1581
|
-
"otimes": 8855,
|
|
1582
|
-
"perp": 8869,
|
|
1583
|
-
"sdot": 8901,
|
|
1584
|
-
"lceil": 8968,
|
|
1585
|
-
"rceil": 8969,
|
|
1586
|
-
"lfloor": 8970,
|
|
1587
|
-
"rfloor": 8971,
|
|
1588
|
-
"lang": 9001,
|
|
1589
|
-
"rang": 9002,
|
|
1590
|
-
"loz": 9674,
|
|
1591
|
-
"spades": 9824,
|
|
1592
|
-
"clubs": 9827,
|
|
1593
|
-
"hearts": 9829,
|
|
1594
|
-
"diams": 9830
|
|
1595
|
-
};
|
|
1596
|
-
Object.keys(sax2.ENTITIES).forEach(function(key) {
|
|
1597
|
-
var e = sax2.ENTITIES[key];
|
|
1598
|
-
var s2 = typeof e === "number" ? String.fromCharCode(e) : e;
|
|
1599
|
-
sax2.ENTITIES[key] = s2;
|
|
1600
|
-
});
|
|
1601
|
-
for (var s in sax2.STATE) {
|
|
1602
|
-
sax2.STATE[sax2.STATE[s]] = s;
|
|
1603
|
-
}
|
|
1604
|
-
S = sax2.STATE;
|
|
1605
|
-
function emit2(parser, event, data) {
|
|
1606
|
-
parser[event] && parser[event](data);
|
|
1607
|
-
}
|
|
1608
|
-
function emitNode(parser, nodeType, data) {
|
|
1609
|
-
if (parser.textNode) closeText(parser);
|
|
1610
|
-
emit2(parser, nodeType, data);
|
|
1611
|
-
}
|
|
1612
|
-
function closeText(parser) {
|
|
1613
|
-
parser.textNode = textopts(parser.opt, parser.textNode);
|
|
1614
|
-
if (parser.textNode) emit2(parser, "ontext", parser.textNode);
|
|
1615
|
-
parser.textNode = "";
|
|
1616
|
-
}
|
|
1617
|
-
function textopts(opt, text) {
|
|
1618
|
-
if (opt.trim) text = text.trim();
|
|
1619
|
-
if (opt.normalize) text = text.replace(/\s+/g, " ");
|
|
1620
|
-
return text;
|
|
1621
|
-
}
|
|
1622
|
-
function error(parser, er) {
|
|
1623
|
-
closeText(parser);
|
|
1624
|
-
if (parser.trackPosition) {
|
|
1625
|
-
er += "\nLine: " + parser.line + "\nColumn: " + parser.column + "\nChar: " + parser.c;
|
|
1626
|
-
}
|
|
1627
|
-
er = new Error(er);
|
|
1628
|
-
parser.error = er;
|
|
1629
|
-
emit2(parser, "onerror", er);
|
|
1630
|
-
return parser;
|
|
1631
|
-
}
|
|
1632
|
-
function end(parser) {
|
|
1633
|
-
if (parser.sawRoot && !parser.closedRoot) strictFail(parser, "Unclosed root tag");
|
|
1634
|
-
if (parser.state !== S.BEGIN && parser.state !== S.BEGIN_WHITESPACE && parser.state !== S.TEXT) {
|
|
1635
|
-
error(parser, "Unexpected end");
|
|
1636
|
-
}
|
|
1637
|
-
closeText(parser);
|
|
1638
|
-
parser.c = "";
|
|
1639
|
-
parser.closed = true;
|
|
1640
|
-
emit2(parser, "onend");
|
|
1641
|
-
SAXParser.call(parser, parser.strict, parser.opt);
|
|
1642
|
-
return parser;
|
|
1643
|
-
}
|
|
1644
|
-
function strictFail(parser, message) {
|
|
1645
|
-
if (typeof parser !== "object" || !(parser instanceof SAXParser)) {
|
|
1646
|
-
throw new Error("bad call to strictFail");
|
|
1647
|
-
}
|
|
1648
|
-
if (parser.strict) {
|
|
1649
|
-
error(parser, message);
|
|
1650
|
-
}
|
|
1651
|
-
}
|
|
1652
|
-
function newTag(parser) {
|
|
1653
|
-
if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]();
|
|
1654
|
-
var parent = parser.tags[parser.tags.length - 1] || parser;
|
|
1655
|
-
var tag = parser.tag = { name: parser.tagName, attributes: {} };
|
|
1656
|
-
if (parser.opt.xmlns) {
|
|
1657
|
-
tag.ns = parent.ns;
|
|
1658
|
-
}
|
|
1659
|
-
parser.attribList.length = 0;
|
|
1660
|
-
emitNode(parser, "onopentagstart", tag);
|
|
1661
|
-
}
|
|
1662
|
-
function qname(name, attribute) {
|
|
1663
|
-
var i = name.indexOf(":");
|
|
1664
|
-
var qualName = i < 0 ? ["", name] : name.split(":");
|
|
1665
|
-
var prefix = qualName[0];
|
|
1666
|
-
var local = qualName[1];
|
|
1667
|
-
if (attribute && name === "xmlns") {
|
|
1668
|
-
prefix = "xmlns";
|
|
1669
|
-
local = "";
|
|
1670
|
-
}
|
|
1671
|
-
return { prefix, local };
|
|
1672
|
-
}
|
|
1673
|
-
function attrib(parser) {
|
|
1674
|
-
if (!parser.strict) {
|
|
1675
|
-
parser.attribName = parser.attribName[parser.looseCase]();
|
|
1676
|
-
}
|
|
1677
|
-
if (parser.attribList.indexOf(parser.attribName) !== -1 || parser.tag.attributes.hasOwnProperty(parser.attribName)) {
|
|
1678
|
-
parser.attribName = parser.attribValue = "";
|
|
1679
|
-
return;
|
|
1680
|
-
}
|
|
1681
|
-
if (parser.opt.xmlns) {
|
|
1682
|
-
var qn = qname(parser.attribName, true);
|
|
1683
|
-
var prefix = qn.prefix;
|
|
1684
|
-
var local = qn.local;
|
|
1685
|
-
if (prefix === "xmlns") {
|
|
1686
|
-
if (local === "xml" && parser.attribValue !== XML_NAMESPACE) {
|
|
1687
|
-
strictFail(
|
|
1688
|
-
parser,
|
|
1689
|
-
"xml: prefix must be bound to " + XML_NAMESPACE + "\nActual: " + parser.attribValue
|
|
1690
|
-
);
|
|
1691
|
-
} else if (local === "xmlns" && parser.attribValue !== XMLNS_NAMESPACE) {
|
|
1692
|
-
strictFail(
|
|
1693
|
-
parser,
|
|
1694
|
-
"xmlns: prefix must be bound to " + XMLNS_NAMESPACE + "\nActual: " + parser.attribValue
|
|
1695
|
-
);
|
|
1696
|
-
} else {
|
|
1697
|
-
var tag = parser.tag;
|
|
1698
|
-
var parent = parser.tags[parser.tags.length - 1] || parser;
|
|
1699
|
-
if (tag.ns === parent.ns) {
|
|
1700
|
-
tag.ns = Object.create(parent.ns);
|
|
1701
|
-
}
|
|
1702
|
-
tag.ns[local] = parser.attribValue;
|
|
1703
|
-
}
|
|
1704
|
-
}
|
|
1705
|
-
parser.attribList.push([parser.attribName, parser.attribValue]);
|
|
1706
|
-
} else {
|
|
1707
|
-
parser.tag.attributes[parser.attribName] = parser.attribValue;
|
|
1708
|
-
emitNode(parser, "onattribute", {
|
|
1709
|
-
name: parser.attribName,
|
|
1710
|
-
value: parser.attribValue
|
|
1711
|
-
});
|
|
1712
|
-
}
|
|
1713
|
-
parser.attribName = parser.attribValue = "";
|
|
1714
|
-
}
|
|
1715
|
-
function openTag(parser, selfClosing) {
|
|
1716
|
-
if (parser.opt.xmlns) {
|
|
1717
|
-
var tag = parser.tag;
|
|
1718
|
-
var qn = qname(parser.tagName);
|
|
1719
|
-
tag.prefix = qn.prefix;
|
|
1720
|
-
tag.local = qn.local;
|
|
1721
|
-
tag.uri = tag.ns[qn.prefix] || "";
|
|
1722
|
-
if (tag.prefix && !tag.uri) {
|
|
1723
|
-
strictFail(parser, "Unbound namespace prefix: " + JSON.stringify(parser.tagName));
|
|
1724
|
-
tag.uri = qn.prefix;
|
|
1725
|
-
}
|
|
1726
|
-
var parent = parser.tags[parser.tags.length - 1] || parser;
|
|
1727
|
-
if (tag.ns && parent.ns !== tag.ns) {
|
|
1728
|
-
Object.keys(tag.ns).forEach(function(p) {
|
|
1729
|
-
emitNode(parser, "onopennamespace", {
|
|
1730
|
-
prefix: p,
|
|
1731
|
-
uri: tag.ns[p]
|
|
1732
|
-
});
|
|
1733
|
-
});
|
|
1734
|
-
}
|
|
1735
|
-
for (var i = 0, l = parser.attribList.length; i < l; i++) {
|
|
1736
|
-
var nv = parser.attribList[i];
|
|
1737
|
-
var name = nv[0];
|
|
1738
|
-
var value = nv[1];
|
|
1739
|
-
var qualName = qname(name, true);
|
|
1740
|
-
var prefix = qualName.prefix;
|
|
1741
|
-
var local = qualName.local;
|
|
1742
|
-
var uri = prefix === "" ? "" : tag.ns[prefix] || "";
|
|
1743
|
-
var a2 = {
|
|
1744
|
-
name,
|
|
1745
|
-
value,
|
|
1746
|
-
prefix,
|
|
1747
|
-
local,
|
|
1748
|
-
uri
|
|
1749
|
-
};
|
|
1750
|
-
if (prefix && prefix !== "xmlns" && !uri) {
|
|
1751
|
-
strictFail(parser, "Unbound namespace prefix: " + JSON.stringify(prefix));
|
|
1752
|
-
a2.uri = prefix;
|
|
1753
|
-
}
|
|
1754
|
-
parser.tag.attributes[name] = a2;
|
|
1755
|
-
emitNode(parser, "onattribute", a2);
|
|
1756
|
-
}
|
|
1757
|
-
parser.attribList.length = 0;
|
|
1758
|
-
}
|
|
1759
|
-
parser.tag.isSelfClosing = !!selfClosing;
|
|
1760
|
-
parser.sawRoot = true;
|
|
1761
|
-
parser.tags.push(parser.tag);
|
|
1762
|
-
emitNode(parser, "onopentag", parser.tag);
|
|
1763
|
-
if (!selfClosing) {
|
|
1764
|
-
if (!parser.noscript && parser.tagName.toLowerCase() === "script") {
|
|
1765
|
-
parser.state = S.SCRIPT;
|
|
1766
|
-
} else {
|
|
1767
|
-
parser.state = S.TEXT;
|
|
1768
|
-
}
|
|
1769
|
-
parser.tag = null;
|
|
1770
|
-
parser.tagName = "";
|
|
1771
|
-
}
|
|
1772
|
-
parser.attribName = parser.attribValue = "";
|
|
1773
|
-
parser.attribList.length = 0;
|
|
1774
|
-
}
|
|
1775
|
-
function closeTag(parser) {
|
|
1776
|
-
if (!parser.tagName) {
|
|
1777
|
-
strictFail(parser, "Weird empty close tag.");
|
|
1778
|
-
parser.textNode += "</>";
|
|
1779
|
-
parser.state = S.TEXT;
|
|
1780
|
-
return;
|
|
1781
|
-
}
|
|
1782
|
-
if (parser.script) {
|
|
1783
|
-
if (parser.tagName !== "script") {
|
|
1784
|
-
parser.script += "</" + parser.tagName + ">";
|
|
1785
|
-
parser.tagName = "";
|
|
1786
|
-
parser.state = S.SCRIPT;
|
|
1787
|
-
return;
|
|
1788
|
-
}
|
|
1789
|
-
emitNode(parser, "onscript", parser.script);
|
|
1790
|
-
parser.script = "";
|
|
1791
|
-
}
|
|
1792
|
-
var t = parser.tags.length;
|
|
1793
|
-
var tagName = parser.tagName;
|
|
1794
|
-
if (!parser.strict) {
|
|
1795
|
-
tagName = tagName[parser.looseCase]();
|
|
1796
|
-
}
|
|
1797
|
-
var closeTo = tagName;
|
|
1798
|
-
while (t--) {
|
|
1799
|
-
var close = parser.tags[t];
|
|
1800
|
-
if (close.name !== closeTo) {
|
|
1801
|
-
strictFail(parser, "Unexpected close tag");
|
|
1802
|
-
} else {
|
|
1803
|
-
break;
|
|
1804
|
-
}
|
|
1805
|
-
}
|
|
1806
|
-
if (t < 0) {
|
|
1807
|
-
strictFail(parser, "Unmatched closing tag: " + parser.tagName);
|
|
1808
|
-
parser.textNode += "</" + parser.tagName + ">";
|
|
1809
|
-
parser.state = S.TEXT;
|
|
1810
|
-
return;
|
|
1811
|
-
}
|
|
1812
|
-
parser.tagName = tagName;
|
|
1813
|
-
var s2 = parser.tags.length;
|
|
1814
|
-
while (s2-- > t) {
|
|
1815
|
-
var tag = parser.tag = parser.tags.pop();
|
|
1816
|
-
parser.tagName = parser.tag.name;
|
|
1817
|
-
emitNode(parser, "onclosetag", parser.tagName);
|
|
1818
|
-
var x = {};
|
|
1819
|
-
for (var i in tag.ns) {
|
|
1820
|
-
x[i] = tag.ns[i];
|
|
1821
|
-
}
|
|
1822
|
-
var parent = parser.tags[parser.tags.length - 1] || parser;
|
|
1823
|
-
if (parser.opt.xmlns && tag.ns !== parent.ns) {
|
|
1824
|
-
Object.keys(tag.ns).forEach(function(p) {
|
|
1825
|
-
var n = tag.ns[p];
|
|
1826
|
-
emitNode(parser, "onclosenamespace", { prefix: p, uri: n });
|
|
1827
|
-
});
|
|
1828
|
-
}
|
|
1829
|
-
}
|
|
1830
|
-
if (t === 0) parser.closedRoot = true;
|
|
1831
|
-
parser.tagName = parser.attribValue = parser.attribName = "";
|
|
1832
|
-
parser.attribList.length = 0;
|
|
1833
|
-
parser.state = S.TEXT;
|
|
1834
|
-
}
|
|
1835
|
-
function parseEntity(parser) {
|
|
1836
|
-
var entity = parser.entity;
|
|
1837
|
-
var entityLC = entity.toLowerCase();
|
|
1838
|
-
var num;
|
|
1839
|
-
var numStr = "";
|
|
1840
|
-
if (parser.ENTITIES[entity]) {
|
|
1841
|
-
return parser.ENTITIES[entity];
|
|
1842
|
-
}
|
|
1843
|
-
if (parser.ENTITIES[entityLC]) {
|
|
1844
|
-
return parser.ENTITIES[entityLC];
|
|
1845
|
-
}
|
|
1846
|
-
entity = entityLC;
|
|
1847
|
-
if (entity.charAt(0) === "#") {
|
|
1848
|
-
if (entity.charAt(1) === "x") {
|
|
1849
|
-
entity = entity.slice(2);
|
|
1850
|
-
num = parseInt(entity, 16);
|
|
1851
|
-
numStr = num.toString(16);
|
|
1852
|
-
} else {
|
|
1853
|
-
entity = entity.slice(1);
|
|
1854
|
-
num = parseInt(entity, 10);
|
|
1855
|
-
numStr = num.toString(10);
|
|
1856
|
-
}
|
|
1857
|
-
}
|
|
1858
|
-
entity = entity.replace(/^0+/, "");
|
|
1859
|
-
if (isNaN(num) || numStr.toLowerCase() !== entity) {
|
|
1860
|
-
strictFail(parser, "Invalid character entity");
|
|
1861
|
-
return "&" + parser.entity + ";";
|
|
1862
|
-
}
|
|
1863
|
-
return String.fromCodePoint(num);
|
|
1864
|
-
}
|
|
1865
|
-
function beginWhiteSpace(parser, c2) {
|
|
1866
|
-
if (c2 === "<") {
|
|
1867
|
-
parser.state = S.OPEN_WAKA;
|
|
1868
|
-
parser.startTagPosition = parser.position;
|
|
1869
|
-
} else if (!isWhitespace(c2)) {
|
|
1870
|
-
strictFail(parser, "Non-whitespace before first tag.");
|
|
1871
|
-
parser.textNode = c2;
|
|
1872
|
-
parser.state = S.TEXT;
|
|
1873
|
-
}
|
|
1874
|
-
}
|
|
1875
|
-
function charAt(chunk, i) {
|
|
1876
|
-
var result = "";
|
|
1877
|
-
if (i < chunk.length) {
|
|
1878
|
-
result = chunk.charAt(i);
|
|
1879
|
-
}
|
|
1880
|
-
return result;
|
|
1881
|
-
}
|
|
1882
|
-
function write(chunk) {
|
|
1883
|
-
var parser = this;
|
|
1884
|
-
if (this.error) {
|
|
1885
|
-
throw this.error;
|
|
1886
|
-
}
|
|
1887
|
-
if (parser.closed) {
|
|
1888
|
-
return error(
|
|
1889
|
-
parser,
|
|
1890
|
-
"Cannot write after close. Assign an onready handler."
|
|
1891
|
-
);
|
|
1892
|
-
}
|
|
1893
|
-
if (chunk === null) {
|
|
1894
|
-
return end(parser);
|
|
1895
|
-
}
|
|
1896
|
-
if (typeof chunk === "object") {
|
|
1897
|
-
chunk = chunk.toString();
|
|
1898
|
-
}
|
|
1899
|
-
var i = 0;
|
|
1900
|
-
var c2 = "";
|
|
1901
|
-
while (true) {
|
|
1902
|
-
c2 = charAt(chunk, i++);
|
|
1903
|
-
parser.c = c2;
|
|
1904
|
-
if (!c2) {
|
|
1905
|
-
break;
|
|
1906
|
-
}
|
|
1907
|
-
if (parser.trackPosition) {
|
|
1908
|
-
parser.position++;
|
|
1909
|
-
if (c2 === "\n") {
|
|
1910
|
-
parser.line++;
|
|
1911
|
-
parser.column = 0;
|
|
1912
|
-
} else {
|
|
1913
|
-
parser.column++;
|
|
1914
|
-
}
|
|
1915
|
-
}
|
|
1916
|
-
switch (parser.state) {
|
|
1917
|
-
case S.BEGIN:
|
|
1918
|
-
parser.state = S.BEGIN_WHITESPACE;
|
|
1919
|
-
if (c2 === "\uFEFF") {
|
|
1920
|
-
continue;
|
|
1921
|
-
}
|
|
1922
|
-
beginWhiteSpace(parser, c2);
|
|
1923
|
-
continue;
|
|
1924
|
-
case S.BEGIN_WHITESPACE:
|
|
1925
|
-
beginWhiteSpace(parser, c2);
|
|
1926
|
-
continue;
|
|
1927
|
-
case S.TEXT:
|
|
1928
|
-
if (parser.sawRoot && !parser.closedRoot) {
|
|
1929
|
-
var starti = i - 1;
|
|
1930
|
-
while (c2 && c2 !== "<" && c2 !== "&") {
|
|
1931
|
-
c2 = charAt(chunk, i++);
|
|
1932
|
-
if (c2 && parser.trackPosition) {
|
|
1933
|
-
parser.position++;
|
|
1934
|
-
if (c2 === "\n") {
|
|
1935
|
-
parser.line++;
|
|
1936
|
-
parser.column = 0;
|
|
1937
|
-
} else {
|
|
1938
|
-
parser.column++;
|
|
1939
|
-
}
|
|
1940
|
-
}
|
|
1941
|
-
}
|
|
1942
|
-
parser.textNode += chunk.substring(starti, i - 1);
|
|
1943
|
-
}
|
|
1944
|
-
if (c2 === "<" && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {
|
|
1945
|
-
parser.state = S.OPEN_WAKA;
|
|
1946
|
-
parser.startTagPosition = parser.position;
|
|
1947
|
-
} else {
|
|
1948
|
-
if (!isWhitespace(c2) && (!parser.sawRoot || parser.closedRoot)) {
|
|
1949
|
-
strictFail(parser, "Text data outside of root node.");
|
|
1950
|
-
}
|
|
1951
|
-
if (c2 === "&") {
|
|
1952
|
-
parser.state = S.TEXT_ENTITY;
|
|
1953
|
-
} else {
|
|
1954
|
-
parser.textNode += c2;
|
|
1955
|
-
}
|
|
1956
|
-
}
|
|
1957
|
-
continue;
|
|
1958
|
-
case S.SCRIPT:
|
|
1959
|
-
if (c2 === "<") {
|
|
1960
|
-
parser.state = S.SCRIPT_ENDING;
|
|
1961
|
-
} else {
|
|
1962
|
-
parser.script += c2;
|
|
1963
|
-
}
|
|
1964
|
-
continue;
|
|
1965
|
-
case S.SCRIPT_ENDING:
|
|
1966
|
-
if (c2 === "/") {
|
|
1967
|
-
parser.state = S.CLOSE_TAG;
|
|
1968
|
-
} else {
|
|
1969
|
-
parser.script += "<" + c2;
|
|
1970
|
-
parser.state = S.SCRIPT;
|
|
1971
|
-
}
|
|
1972
|
-
continue;
|
|
1973
|
-
case S.OPEN_WAKA:
|
|
1974
|
-
if (c2 === "!") {
|
|
1975
|
-
parser.state = S.SGML_DECL;
|
|
1976
|
-
parser.sgmlDecl = "";
|
|
1977
|
-
} else if (isWhitespace(c2)) ;
|
|
1978
|
-
else if (isMatch(nameStart, c2)) {
|
|
1979
|
-
parser.state = S.OPEN_TAG;
|
|
1980
|
-
parser.tagName = c2;
|
|
1981
|
-
} else if (c2 === "/") {
|
|
1982
|
-
parser.state = S.CLOSE_TAG;
|
|
1983
|
-
parser.tagName = "";
|
|
1984
|
-
} else if (c2 === "?") {
|
|
1985
|
-
parser.state = S.PROC_INST;
|
|
1986
|
-
parser.procInstName = parser.procInstBody = "";
|
|
1987
|
-
} else {
|
|
1988
|
-
strictFail(parser, "Unencoded <");
|
|
1989
|
-
if (parser.startTagPosition + 1 < parser.position) {
|
|
1990
|
-
var pad = parser.position - parser.startTagPosition;
|
|
1991
|
-
c2 = new Array(pad).join(" ") + c2;
|
|
1992
|
-
}
|
|
1993
|
-
parser.textNode += "<" + c2;
|
|
1994
|
-
parser.state = S.TEXT;
|
|
1995
|
-
}
|
|
1996
|
-
continue;
|
|
1997
|
-
case S.SGML_DECL:
|
|
1998
|
-
if (parser.sgmlDecl + c2 === "--") {
|
|
1999
|
-
parser.state = S.COMMENT;
|
|
2000
|
-
parser.comment = "";
|
|
2001
|
-
parser.sgmlDecl = "";
|
|
2002
|
-
continue;
|
|
2003
|
-
}
|
|
2004
|
-
if (parser.doctype && parser.doctype !== true && parser.sgmlDecl) {
|
|
2005
|
-
parser.state = S.DOCTYPE_DTD;
|
|
2006
|
-
parser.doctype += "<!" + parser.sgmlDecl + c2;
|
|
2007
|
-
parser.sgmlDecl = "";
|
|
2008
|
-
} else if ((parser.sgmlDecl + c2).toUpperCase() === CDATA) {
|
|
2009
|
-
emitNode(parser, "onopencdata");
|
|
2010
|
-
parser.state = S.CDATA;
|
|
2011
|
-
parser.sgmlDecl = "";
|
|
2012
|
-
parser.cdata = "";
|
|
2013
|
-
} else if ((parser.sgmlDecl + c2).toUpperCase() === DOCTYPE) {
|
|
2014
|
-
parser.state = S.DOCTYPE;
|
|
2015
|
-
if (parser.doctype || parser.sawRoot) {
|
|
2016
|
-
strictFail(
|
|
2017
|
-
parser,
|
|
2018
|
-
"Inappropriately located doctype declaration"
|
|
2019
|
-
);
|
|
2020
|
-
}
|
|
2021
|
-
parser.doctype = "";
|
|
2022
|
-
parser.sgmlDecl = "";
|
|
2023
|
-
} else if (c2 === ">") {
|
|
2024
|
-
emitNode(parser, "onsgmldeclaration", parser.sgmlDecl);
|
|
2025
|
-
parser.sgmlDecl = "";
|
|
2026
|
-
parser.state = S.TEXT;
|
|
2027
|
-
} else if (isQuote(c2)) {
|
|
2028
|
-
parser.state = S.SGML_DECL_QUOTED;
|
|
2029
|
-
parser.sgmlDecl += c2;
|
|
2030
|
-
} else {
|
|
2031
|
-
parser.sgmlDecl += c2;
|
|
2032
|
-
}
|
|
2033
|
-
continue;
|
|
2034
|
-
case S.SGML_DECL_QUOTED:
|
|
2035
|
-
if (c2 === parser.q) {
|
|
2036
|
-
parser.state = S.SGML_DECL;
|
|
2037
|
-
parser.q = "";
|
|
2038
|
-
}
|
|
2039
|
-
parser.sgmlDecl += c2;
|
|
2040
|
-
continue;
|
|
2041
|
-
case S.DOCTYPE:
|
|
2042
|
-
if (c2 === ">") {
|
|
2043
|
-
parser.state = S.TEXT;
|
|
2044
|
-
emitNode(parser, "ondoctype", parser.doctype);
|
|
2045
|
-
parser.doctype = true;
|
|
2046
|
-
} else {
|
|
2047
|
-
parser.doctype += c2;
|
|
2048
|
-
if (c2 === "[") {
|
|
2049
|
-
parser.state = S.DOCTYPE_DTD;
|
|
2050
|
-
} else if (isQuote(c2)) {
|
|
2051
|
-
parser.state = S.DOCTYPE_QUOTED;
|
|
2052
|
-
parser.q = c2;
|
|
2053
|
-
}
|
|
2054
|
-
}
|
|
2055
|
-
continue;
|
|
2056
|
-
case S.DOCTYPE_QUOTED:
|
|
2057
|
-
parser.doctype += c2;
|
|
2058
|
-
if (c2 === parser.q) {
|
|
2059
|
-
parser.q = "";
|
|
2060
|
-
parser.state = S.DOCTYPE;
|
|
2061
|
-
}
|
|
2062
|
-
continue;
|
|
2063
|
-
case S.DOCTYPE_DTD:
|
|
2064
|
-
if (c2 === "]") {
|
|
2065
|
-
parser.doctype += c2;
|
|
2066
|
-
parser.state = S.DOCTYPE;
|
|
2067
|
-
} else if (c2 === "<") {
|
|
2068
|
-
parser.state = S.OPEN_WAKA;
|
|
2069
|
-
parser.startTagPosition = parser.position;
|
|
2070
|
-
} else if (isQuote(c2)) {
|
|
2071
|
-
parser.doctype += c2;
|
|
2072
|
-
parser.state = S.DOCTYPE_DTD_QUOTED;
|
|
2073
|
-
parser.q = c2;
|
|
2074
|
-
} else {
|
|
2075
|
-
parser.doctype += c2;
|
|
2076
|
-
}
|
|
2077
|
-
continue;
|
|
2078
|
-
case S.DOCTYPE_DTD_QUOTED:
|
|
2079
|
-
parser.doctype += c2;
|
|
2080
|
-
if (c2 === parser.q) {
|
|
2081
|
-
parser.state = S.DOCTYPE_DTD;
|
|
2082
|
-
parser.q = "";
|
|
2083
|
-
}
|
|
2084
|
-
continue;
|
|
2085
|
-
case S.COMMENT:
|
|
2086
|
-
if (c2 === "-") {
|
|
2087
|
-
parser.state = S.COMMENT_ENDING;
|
|
2088
|
-
} else {
|
|
2089
|
-
parser.comment += c2;
|
|
2090
|
-
}
|
|
2091
|
-
continue;
|
|
2092
|
-
case S.COMMENT_ENDING:
|
|
2093
|
-
if (c2 === "-") {
|
|
2094
|
-
parser.state = S.COMMENT_ENDED;
|
|
2095
|
-
parser.comment = textopts(parser.opt, parser.comment);
|
|
2096
|
-
if (parser.comment) {
|
|
2097
|
-
emitNode(parser, "oncomment", parser.comment);
|
|
2098
|
-
}
|
|
2099
|
-
parser.comment = "";
|
|
2100
|
-
} else {
|
|
2101
|
-
parser.comment += "-" + c2;
|
|
2102
|
-
parser.state = S.COMMENT;
|
|
2103
|
-
}
|
|
2104
|
-
continue;
|
|
2105
|
-
case S.COMMENT_ENDED:
|
|
2106
|
-
if (c2 !== ">") {
|
|
2107
|
-
strictFail(parser, "Malformed comment");
|
|
2108
|
-
parser.comment += "--" + c2;
|
|
2109
|
-
parser.state = S.COMMENT;
|
|
2110
|
-
} else if (parser.doctype && parser.doctype !== true) {
|
|
2111
|
-
parser.state = S.DOCTYPE_DTD;
|
|
2112
|
-
} else {
|
|
2113
|
-
parser.state = S.TEXT;
|
|
2114
|
-
}
|
|
2115
|
-
continue;
|
|
2116
|
-
case S.CDATA:
|
|
2117
|
-
if (c2 === "]") {
|
|
2118
|
-
parser.state = S.CDATA_ENDING;
|
|
2119
|
-
} else {
|
|
2120
|
-
parser.cdata += c2;
|
|
2121
|
-
}
|
|
2122
|
-
continue;
|
|
2123
|
-
case S.CDATA_ENDING:
|
|
2124
|
-
if (c2 === "]") {
|
|
2125
|
-
parser.state = S.CDATA_ENDING_2;
|
|
2126
|
-
} else {
|
|
2127
|
-
parser.cdata += "]" + c2;
|
|
2128
|
-
parser.state = S.CDATA;
|
|
2129
|
-
}
|
|
2130
|
-
continue;
|
|
2131
|
-
case S.CDATA_ENDING_2:
|
|
2132
|
-
if (c2 === ">") {
|
|
2133
|
-
if (parser.cdata) {
|
|
2134
|
-
emitNode(parser, "oncdata", parser.cdata);
|
|
2135
|
-
}
|
|
2136
|
-
emitNode(parser, "onclosecdata");
|
|
2137
|
-
parser.cdata = "";
|
|
2138
|
-
parser.state = S.TEXT;
|
|
2139
|
-
} else if (c2 === "]") {
|
|
2140
|
-
parser.cdata += "]";
|
|
2141
|
-
} else {
|
|
2142
|
-
parser.cdata += "]]" + c2;
|
|
2143
|
-
parser.state = S.CDATA;
|
|
2144
|
-
}
|
|
2145
|
-
continue;
|
|
2146
|
-
case S.PROC_INST:
|
|
2147
|
-
if (c2 === "?") {
|
|
2148
|
-
parser.state = S.PROC_INST_ENDING;
|
|
2149
|
-
} else if (isWhitespace(c2)) {
|
|
2150
|
-
parser.state = S.PROC_INST_BODY;
|
|
2151
|
-
} else {
|
|
2152
|
-
parser.procInstName += c2;
|
|
2153
|
-
}
|
|
2154
|
-
continue;
|
|
2155
|
-
case S.PROC_INST_BODY:
|
|
2156
|
-
if (!parser.procInstBody && isWhitespace(c2)) {
|
|
2157
|
-
continue;
|
|
2158
|
-
} else if (c2 === "?") {
|
|
2159
|
-
parser.state = S.PROC_INST_ENDING;
|
|
2160
|
-
} else {
|
|
2161
|
-
parser.procInstBody += c2;
|
|
2162
|
-
}
|
|
2163
|
-
continue;
|
|
2164
|
-
case S.PROC_INST_ENDING:
|
|
2165
|
-
if (c2 === ">") {
|
|
2166
|
-
emitNode(parser, "onprocessinginstruction", {
|
|
2167
|
-
name: parser.procInstName,
|
|
2168
|
-
body: parser.procInstBody
|
|
2169
|
-
});
|
|
2170
|
-
parser.procInstName = parser.procInstBody = "";
|
|
2171
|
-
parser.state = S.TEXT;
|
|
2172
|
-
} else {
|
|
2173
|
-
parser.procInstBody += "?" + c2;
|
|
2174
|
-
parser.state = S.PROC_INST_BODY;
|
|
2175
|
-
}
|
|
2176
|
-
continue;
|
|
2177
|
-
case S.OPEN_TAG:
|
|
2178
|
-
if (isMatch(nameBody, c2)) {
|
|
2179
|
-
parser.tagName += c2;
|
|
2180
|
-
} else {
|
|
2181
|
-
newTag(parser);
|
|
2182
|
-
if (c2 === ">") {
|
|
2183
|
-
openTag(parser);
|
|
2184
|
-
} else if (c2 === "/") {
|
|
2185
|
-
parser.state = S.OPEN_TAG_SLASH;
|
|
2186
|
-
} else {
|
|
2187
|
-
if (!isWhitespace(c2)) {
|
|
2188
|
-
strictFail(parser, "Invalid character in tag name");
|
|
2189
|
-
}
|
|
2190
|
-
parser.state = S.ATTRIB;
|
|
2191
|
-
}
|
|
2192
|
-
}
|
|
2193
|
-
continue;
|
|
2194
|
-
case S.OPEN_TAG_SLASH:
|
|
2195
|
-
if (c2 === ">") {
|
|
2196
|
-
openTag(parser, true);
|
|
2197
|
-
closeTag(parser);
|
|
2198
|
-
} else {
|
|
2199
|
-
strictFail(parser, "Forward-slash in opening tag not followed by >");
|
|
2200
|
-
parser.state = S.ATTRIB;
|
|
2201
|
-
}
|
|
2202
|
-
continue;
|
|
2203
|
-
case S.ATTRIB:
|
|
2204
|
-
if (isWhitespace(c2)) {
|
|
2205
|
-
continue;
|
|
2206
|
-
} else if (c2 === ">") {
|
|
2207
|
-
openTag(parser);
|
|
2208
|
-
} else if (c2 === "/") {
|
|
2209
|
-
parser.state = S.OPEN_TAG_SLASH;
|
|
2210
|
-
} else if (isMatch(nameStart, c2)) {
|
|
2211
|
-
parser.attribName = c2;
|
|
2212
|
-
parser.attribValue = "";
|
|
2213
|
-
parser.state = S.ATTRIB_NAME;
|
|
2214
|
-
} else {
|
|
2215
|
-
strictFail(parser, "Invalid attribute name");
|
|
2216
|
-
}
|
|
2217
|
-
continue;
|
|
2218
|
-
case S.ATTRIB_NAME:
|
|
2219
|
-
if (c2 === "=") {
|
|
2220
|
-
parser.state = S.ATTRIB_VALUE;
|
|
2221
|
-
} else if (c2 === ">") {
|
|
2222
|
-
strictFail(parser, "Attribute without value");
|
|
2223
|
-
parser.attribValue = parser.attribName;
|
|
2224
|
-
attrib(parser);
|
|
2225
|
-
openTag(parser);
|
|
2226
|
-
} else if (isWhitespace(c2)) {
|
|
2227
|
-
parser.state = S.ATTRIB_NAME_SAW_WHITE;
|
|
2228
|
-
} else if (isMatch(nameBody, c2)) {
|
|
2229
|
-
parser.attribName += c2;
|
|
2230
|
-
} else {
|
|
2231
|
-
strictFail(parser, "Invalid attribute name");
|
|
2232
|
-
}
|
|
2233
|
-
continue;
|
|
2234
|
-
case S.ATTRIB_NAME_SAW_WHITE:
|
|
2235
|
-
if (c2 === "=") {
|
|
2236
|
-
parser.state = S.ATTRIB_VALUE;
|
|
2237
|
-
} else if (isWhitespace(c2)) {
|
|
2238
|
-
continue;
|
|
2239
|
-
} else {
|
|
2240
|
-
strictFail(parser, "Attribute without value");
|
|
2241
|
-
parser.tag.attributes[parser.attribName] = "";
|
|
2242
|
-
parser.attribValue = "";
|
|
2243
|
-
emitNode(parser, "onattribute", {
|
|
2244
|
-
name: parser.attribName,
|
|
2245
|
-
value: ""
|
|
2246
|
-
});
|
|
2247
|
-
parser.attribName = "";
|
|
2248
|
-
if (c2 === ">") {
|
|
2249
|
-
openTag(parser);
|
|
2250
|
-
} else if (isMatch(nameStart, c2)) {
|
|
2251
|
-
parser.attribName = c2;
|
|
2252
|
-
parser.state = S.ATTRIB_NAME;
|
|
2253
|
-
} else {
|
|
2254
|
-
strictFail(parser, "Invalid attribute name");
|
|
2255
|
-
parser.state = S.ATTRIB;
|
|
2256
|
-
}
|
|
2257
|
-
}
|
|
2258
|
-
continue;
|
|
2259
|
-
case S.ATTRIB_VALUE:
|
|
2260
|
-
if (isWhitespace(c2)) {
|
|
2261
|
-
continue;
|
|
2262
|
-
} else if (isQuote(c2)) {
|
|
2263
|
-
parser.q = c2;
|
|
2264
|
-
parser.state = S.ATTRIB_VALUE_QUOTED;
|
|
2265
|
-
} else {
|
|
2266
|
-
if (!parser.opt.unquotedAttributeValues) {
|
|
2267
|
-
error(parser, "Unquoted attribute value");
|
|
2268
|
-
}
|
|
2269
|
-
parser.state = S.ATTRIB_VALUE_UNQUOTED;
|
|
2270
|
-
parser.attribValue = c2;
|
|
2271
|
-
}
|
|
2272
|
-
continue;
|
|
2273
|
-
case S.ATTRIB_VALUE_QUOTED:
|
|
2274
|
-
if (c2 !== parser.q) {
|
|
2275
|
-
if (c2 === "&") {
|
|
2276
|
-
parser.state = S.ATTRIB_VALUE_ENTITY_Q;
|
|
2277
|
-
} else {
|
|
2278
|
-
parser.attribValue += c2;
|
|
2279
|
-
}
|
|
2280
|
-
continue;
|
|
2281
|
-
}
|
|
2282
|
-
attrib(parser);
|
|
2283
|
-
parser.q = "";
|
|
2284
|
-
parser.state = S.ATTRIB_VALUE_CLOSED;
|
|
2285
|
-
continue;
|
|
2286
|
-
case S.ATTRIB_VALUE_CLOSED:
|
|
2287
|
-
if (isWhitespace(c2)) {
|
|
2288
|
-
parser.state = S.ATTRIB;
|
|
2289
|
-
} else if (c2 === ">") {
|
|
2290
|
-
openTag(parser);
|
|
2291
|
-
} else if (c2 === "/") {
|
|
2292
|
-
parser.state = S.OPEN_TAG_SLASH;
|
|
2293
|
-
} else if (isMatch(nameStart, c2)) {
|
|
2294
|
-
strictFail(parser, "No whitespace between attributes");
|
|
2295
|
-
parser.attribName = c2;
|
|
2296
|
-
parser.attribValue = "";
|
|
2297
|
-
parser.state = S.ATTRIB_NAME;
|
|
2298
|
-
} else {
|
|
2299
|
-
strictFail(parser, "Invalid attribute name");
|
|
2300
|
-
}
|
|
2301
|
-
continue;
|
|
2302
|
-
case S.ATTRIB_VALUE_UNQUOTED:
|
|
2303
|
-
if (!isAttribEnd(c2)) {
|
|
2304
|
-
if (c2 === "&") {
|
|
2305
|
-
parser.state = S.ATTRIB_VALUE_ENTITY_U;
|
|
2306
|
-
} else {
|
|
2307
|
-
parser.attribValue += c2;
|
|
2308
|
-
}
|
|
2309
|
-
continue;
|
|
2310
|
-
}
|
|
2311
|
-
attrib(parser);
|
|
2312
|
-
if (c2 === ">") {
|
|
2313
|
-
openTag(parser);
|
|
2314
|
-
} else {
|
|
2315
|
-
parser.state = S.ATTRIB;
|
|
2316
|
-
}
|
|
2317
|
-
continue;
|
|
2318
|
-
case S.CLOSE_TAG:
|
|
2319
|
-
if (!parser.tagName) {
|
|
2320
|
-
if (isWhitespace(c2)) {
|
|
2321
|
-
continue;
|
|
2322
|
-
} else if (notMatch(nameStart, c2)) {
|
|
2323
|
-
if (parser.script) {
|
|
2324
|
-
parser.script += "</" + c2;
|
|
2325
|
-
parser.state = S.SCRIPT;
|
|
2326
|
-
} else {
|
|
2327
|
-
strictFail(parser, "Invalid tagname in closing tag.");
|
|
2328
|
-
}
|
|
2329
|
-
} else {
|
|
2330
|
-
parser.tagName = c2;
|
|
2331
|
-
}
|
|
2332
|
-
} else if (c2 === ">") {
|
|
2333
|
-
closeTag(parser);
|
|
2334
|
-
} else if (isMatch(nameBody, c2)) {
|
|
2335
|
-
parser.tagName += c2;
|
|
2336
|
-
} else if (parser.script) {
|
|
2337
|
-
parser.script += "</" + parser.tagName;
|
|
2338
|
-
parser.tagName = "";
|
|
2339
|
-
parser.state = S.SCRIPT;
|
|
2340
|
-
} else {
|
|
2341
|
-
if (!isWhitespace(c2)) {
|
|
2342
|
-
strictFail(parser, "Invalid tagname in closing tag");
|
|
2343
|
-
}
|
|
2344
|
-
parser.state = S.CLOSE_TAG_SAW_WHITE;
|
|
2345
|
-
}
|
|
2346
|
-
continue;
|
|
2347
|
-
case S.CLOSE_TAG_SAW_WHITE:
|
|
2348
|
-
if (isWhitespace(c2)) {
|
|
2349
|
-
continue;
|
|
2350
|
-
}
|
|
2351
|
-
if (c2 === ">") {
|
|
2352
|
-
closeTag(parser);
|
|
2353
|
-
} else {
|
|
2354
|
-
strictFail(parser, "Invalid characters in closing tag");
|
|
2355
|
-
}
|
|
2356
|
-
continue;
|
|
2357
|
-
case S.TEXT_ENTITY:
|
|
2358
|
-
case S.ATTRIB_VALUE_ENTITY_Q:
|
|
2359
|
-
case S.ATTRIB_VALUE_ENTITY_U:
|
|
2360
|
-
var returnState;
|
|
2361
|
-
var buffer;
|
|
2362
|
-
switch (parser.state) {
|
|
2363
|
-
case S.TEXT_ENTITY:
|
|
2364
|
-
returnState = S.TEXT;
|
|
2365
|
-
buffer = "textNode";
|
|
2366
|
-
break;
|
|
2367
|
-
case S.ATTRIB_VALUE_ENTITY_Q:
|
|
2368
|
-
returnState = S.ATTRIB_VALUE_QUOTED;
|
|
2369
|
-
buffer = "attribValue";
|
|
2370
|
-
break;
|
|
2371
|
-
case S.ATTRIB_VALUE_ENTITY_U:
|
|
2372
|
-
returnState = S.ATTRIB_VALUE_UNQUOTED;
|
|
2373
|
-
buffer = "attribValue";
|
|
2374
|
-
break;
|
|
2375
|
-
}
|
|
2376
|
-
if (c2 === ";") {
|
|
2377
|
-
var parsedEntity = parseEntity(parser);
|
|
2378
|
-
if (parser.opt.unparsedEntities && !Object.values(sax2.XML_ENTITIES).includes(parsedEntity)) {
|
|
2379
|
-
parser.entity = "";
|
|
2380
|
-
parser.state = returnState;
|
|
2381
|
-
parser.write(parsedEntity);
|
|
2382
|
-
} else {
|
|
2383
|
-
parser[buffer] += parsedEntity;
|
|
2384
|
-
parser.entity = "";
|
|
2385
|
-
parser.state = returnState;
|
|
2386
|
-
}
|
|
2387
|
-
} else if (isMatch(parser.entity.length ? entityBody : entityStart, c2)) {
|
|
2388
|
-
parser.entity += c2;
|
|
2389
|
-
} else {
|
|
2390
|
-
strictFail(parser, "Invalid character in entity name");
|
|
2391
|
-
parser[buffer] += "&" + parser.entity + c2;
|
|
2392
|
-
parser.entity = "";
|
|
2393
|
-
parser.state = returnState;
|
|
2394
|
-
}
|
|
2395
|
-
continue;
|
|
2396
|
-
default: {
|
|
2397
|
-
throw new Error(parser, "Unknown state: " + parser.state);
|
|
2398
|
-
}
|
|
2399
|
-
}
|
|
2400
|
-
}
|
|
2401
|
-
if (parser.position >= parser.bufferCheckPosition) {
|
|
2402
|
-
checkBufferLength(parser);
|
|
2403
|
-
}
|
|
2404
|
-
return parser;
|
|
2405
|
-
}
|
|
2406
|
-
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
|
|
2407
|
-
if (!String.fromCodePoint) {
|
|
2408
|
-
(function() {
|
|
2409
|
-
var stringFromCharCode = String.fromCharCode;
|
|
2410
|
-
var floor = Math.floor;
|
|
2411
|
-
var fromCodePoint = function() {
|
|
2412
|
-
var MAX_SIZE = 16384;
|
|
2413
|
-
var codeUnits = [];
|
|
2414
|
-
var highSurrogate;
|
|
2415
|
-
var lowSurrogate;
|
|
2416
|
-
var index = -1;
|
|
2417
|
-
var length = arguments.length;
|
|
2418
|
-
if (!length) {
|
|
2419
|
-
return "";
|
|
2420
|
-
}
|
|
2421
|
-
var result = "";
|
|
2422
|
-
while (++index < length) {
|
|
2423
|
-
var codePoint = Number(arguments[index]);
|
|
2424
|
-
if (!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
|
|
2425
|
-
codePoint < 0 || // not a valid Unicode code point
|
|
2426
|
-
codePoint > 1114111 || // not a valid Unicode code point
|
|
2427
|
-
floor(codePoint) !== codePoint) {
|
|
2428
|
-
throw RangeError("Invalid code point: " + codePoint);
|
|
2429
|
-
}
|
|
2430
|
-
if (codePoint <= 65535) {
|
|
2431
|
-
codeUnits.push(codePoint);
|
|
2432
|
-
} else {
|
|
2433
|
-
codePoint -= 65536;
|
|
2434
|
-
highSurrogate = (codePoint >> 10) + 55296;
|
|
2435
|
-
lowSurrogate = codePoint % 1024 + 56320;
|
|
2436
|
-
codeUnits.push(highSurrogate, lowSurrogate);
|
|
2437
|
-
}
|
|
2438
|
-
if (index + 1 === length || codeUnits.length > MAX_SIZE) {
|
|
2439
|
-
result += stringFromCharCode.apply(null, codeUnits);
|
|
2440
|
-
codeUnits.length = 0;
|
|
2441
|
-
}
|
|
2442
|
-
}
|
|
2443
|
-
return result;
|
|
2444
|
-
};
|
|
2445
|
-
if (Object.defineProperty) {
|
|
2446
|
-
Object.defineProperty(String, "fromCodePoint", {
|
|
2447
|
-
value: fromCodePoint,
|
|
2448
|
-
configurable: true,
|
|
2449
|
-
writable: true
|
|
2450
|
-
});
|
|
2451
|
-
} else {
|
|
2452
|
-
String.fromCodePoint = fromCodePoint;
|
|
2453
|
-
}
|
|
2454
|
-
})();
|
|
2455
|
-
}
|
|
2456
|
-
})(exports);
|
|
2457
|
-
})(sax$1);
|
|
2458
|
-
return sax$1;
|
|
2459
|
-
}
|
|
2460
|
-
var saxExports = requireSax();
|
|
2461
|
-
const sax = /* @__PURE__ */ getDefaultExportFromCjs(saxExports);
|
|
2462
|
-
const namespaceMapping = {
|
|
2463
|
-
"http://www.w3.org/2000/svg": {
|
|
2464
|
-
ext: "svg",
|
|
2465
|
-
mime: "image/svg+xml"
|
|
2466
|
-
},
|
|
2467
|
-
"http://www.w3.org/1999/xhtml": {
|
|
2468
|
-
ext: "xhtml",
|
|
2469
|
-
mime: "application/xhtml+xml"
|
|
2470
|
-
},
|
|
2471
|
-
"http://www.opengis.net/kml/2.2": {
|
|
2472
|
-
ext: "kml",
|
|
2473
|
-
mime: "application/vnd.google-earth.kml+xml"
|
|
2474
|
-
},
|
|
2475
|
-
"http://www.opengis.net/gml": {
|
|
2476
|
-
ext: "gml",
|
|
2477
|
-
mime: "application/gml+xml"
|
|
2478
|
-
}
|
|
2479
|
-
};
|
|
2480
|
-
const rootNameMapping = {
|
|
2481
|
-
rss: {
|
|
2482
|
-
ext: "rss",
|
|
2483
|
-
mime: "application/rss+xml"
|
|
2484
|
-
},
|
|
2485
|
-
"score-partwise": {
|
|
2486
|
-
ext: "musicxml",
|
|
2487
|
-
mime: "application/vnd.recordare.musicxml+xml"
|
|
2488
|
-
},
|
|
2489
|
-
svg: {
|
|
2490
|
-
ext: "svg",
|
|
2491
|
-
mime: "image/svg+xml"
|
|
2492
|
-
}
|
|
2493
|
-
};
|
|
2494
|
-
class XmlTextDetector {
|
|
2495
|
-
constructor(options) {
|
|
2496
|
-
this.options = options ?? {};
|
|
2497
|
-
this.firstTag = true;
|
|
2498
|
-
this.onEnd = false;
|
|
2499
|
-
this.parser = sax.parser(true, { xmlns: true });
|
|
2500
|
-
this.nesting = 0;
|
|
2501
|
-
this.parser.onerror = (e) => {
|
|
2502
|
-
if (e.message.startsWith("Invalid character entity")) {
|
|
2503
|
-
return;
|
|
2504
|
-
}
|
|
2505
|
-
this.fileType = void 0;
|
|
2506
|
-
this.onEnd = true;
|
|
2507
|
-
};
|
|
2508
|
-
this.parser.onopentag = (node) => {
|
|
2509
|
-
++this.nesting;
|
|
2510
|
-
if (!this.firstTag || this.onEnd) {
|
|
2511
|
-
return;
|
|
2512
|
-
}
|
|
2513
|
-
this.firstTag = false;
|
|
2514
|
-
if (node.uri) {
|
|
2515
|
-
this.fileType = namespaceMapping[node.uri];
|
|
2516
|
-
} else if (node.name) {
|
|
2517
|
-
this.fileType = rootNameMapping[node.name.toLowerCase()];
|
|
2518
|
-
}
|
|
2519
|
-
if (this.fileType && !this.options.fullScan) {
|
|
2520
|
-
this.onEnd = true;
|
|
2521
|
-
}
|
|
2522
|
-
};
|
|
2523
|
-
this.parser.onclosetag = () => {
|
|
2524
|
-
--this.nesting;
|
|
2525
|
-
};
|
|
2526
|
-
}
|
|
2527
|
-
write(text) {
|
|
2528
|
-
this.parser.write(text);
|
|
2529
|
-
}
|
|
2530
|
-
close() {
|
|
2531
|
-
this.parser.close();
|
|
2532
|
-
this.onEnd = true;
|
|
2533
|
-
}
|
|
2534
|
-
isValid() {
|
|
2535
|
-
return this.nesting === 0;
|
|
2536
|
-
}
|
|
2537
|
-
}
|
|
2538
|
-
function isSvg(string, { validate = true } = {}) {
|
|
2539
|
-
if (typeof string !== "string") {
|
|
2540
|
-
throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
|
|
2541
|
-
}
|
|
2542
|
-
string = string.trim();
|
|
2543
|
-
if (string.length === 0) {
|
|
2544
|
-
return false;
|
|
2545
|
-
}
|
|
2546
|
-
const xmlTextDetector = new XmlTextDetector({ fullScan: validate });
|
|
2547
|
-
if (validate) {
|
|
2548
|
-
xmlTextDetector.write(string);
|
|
2549
|
-
if (!xmlTextDetector.isValid()) {
|
|
2550
|
-
return false;
|
|
2551
|
-
}
|
|
2552
|
-
} else {
|
|
2553
|
-
const chunkSize = 128;
|
|
2554
|
-
let offset = 0;
|
|
2555
|
-
while (string.length > offset && !xmlTextDetector.onEnd) {
|
|
2556
|
-
xmlTextDetector.write(string.slice(offset, Math.min(offset + chunkSize, string.length)));
|
|
2557
|
-
offset += chunkSize;
|
|
2558
|
-
}
|
|
2559
|
-
}
|
|
2560
|
-
return xmlTextDetector.fileType?.ext === "svg";
|
|
2561
|
-
}
|
|
2562
939
|
class View {
|
|
2563
940
|
_view;
|
|
2564
941
|
constructor(view) {
|
|
2565
|
-
|
|
942
|
+
validateView(view);
|
|
2566
943
|
this._view = view;
|
|
2567
944
|
}
|
|
2568
945
|
get id() {
|
|
@@ -2629,7 +1006,7 @@ class View {
|
|
|
2629
1006
|
return this._view.loadChildViews;
|
|
2630
1007
|
}
|
|
2631
1008
|
}
|
|
2632
|
-
|
|
1009
|
+
function validateView(view) {
|
|
2633
1010
|
if (!view.id || typeof view.id !== "string") {
|
|
2634
1011
|
throw new Error("View id is required and must be a string");
|
|
2635
1012
|
}
|
|
@@ -2676,7 +1053,74 @@ const isValidView = function(view) {
|
|
|
2676
1053
|
if (view.loadChildViews && typeof view.loadChildViews !== "function") {
|
|
2677
1054
|
throw new Error("View loadChildViews must be a function");
|
|
2678
1055
|
}
|
|
2679
|
-
|
|
1056
|
+
}
|
|
1057
|
+
class Navigation extends TypedEventTarget {
|
|
1058
|
+
_views = [];
|
|
1059
|
+
_currentView = null;
|
|
1060
|
+
/**
|
|
1061
|
+
* Register a new view on the navigation
|
|
1062
|
+
* @param view The view to register
|
|
1063
|
+
* @throws {Error} if a view with the same id is already registered
|
|
1064
|
+
* @throws {Error} if the registered view is invalid
|
|
1065
|
+
*/
|
|
1066
|
+
register(view) {
|
|
1067
|
+
if (this._views.find((search) => search.id === view.id)) {
|
|
1068
|
+
throw new Error(`IView id ${view.id} is already registered`);
|
|
1069
|
+
}
|
|
1070
|
+
validateView(view);
|
|
1071
|
+
this._views.push(view);
|
|
1072
|
+
this.dispatchTypedEvent("update", new CustomEvent("update"));
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Remove a registered view
|
|
1076
|
+
* @param id The id of the view to remove
|
|
1077
|
+
*/
|
|
1078
|
+
remove(id) {
|
|
1079
|
+
const index = this._views.findIndex((view) => view.id === id);
|
|
1080
|
+
if (index !== -1) {
|
|
1081
|
+
this._views.splice(index, 1);
|
|
1082
|
+
this.dispatchTypedEvent("update", new CustomEvent("update"));
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
/**
|
|
1086
|
+
* Set the currently active view
|
|
1087
|
+
*
|
|
1088
|
+
* @param id - The id of the view to set as active
|
|
1089
|
+
* @throws {Error} If no view with the given id was registered
|
|
1090
|
+
* @fires UpdateActiveViewEvent
|
|
1091
|
+
*/
|
|
1092
|
+
setActive(id) {
|
|
1093
|
+
if (id === null) {
|
|
1094
|
+
this._currentView = null;
|
|
1095
|
+
} else {
|
|
1096
|
+
const view = this._views.find(({ id: viewId }) => viewId === id);
|
|
1097
|
+
if (!view) {
|
|
1098
|
+
throw new Error(`No view with ${id} registered`);
|
|
1099
|
+
}
|
|
1100
|
+
this._currentView = view;
|
|
1101
|
+
}
|
|
1102
|
+
const event = new CustomEvent("updateActive", { detail: this._currentView });
|
|
1103
|
+
this.dispatchTypedEvent("updateActive", event);
|
|
1104
|
+
}
|
|
1105
|
+
/**
|
|
1106
|
+
* The currently active files view
|
|
1107
|
+
*/
|
|
1108
|
+
get active() {
|
|
1109
|
+
return this._currentView;
|
|
1110
|
+
}
|
|
1111
|
+
/**
|
|
1112
|
+
* All registered views
|
|
1113
|
+
*/
|
|
1114
|
+
get views() {
|
|
1115
|
+
return this._views;
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
const getNavigation = function() {
|
|
1119
|
+
if (typeof window._nc_navigation === "undefined") {
|
|
1120
|
+
window._nc_navigation = new Navigation();
|
|
1121
|
+
logger.debug("Navigation service initialized");
|
|
1122
|
+
}
|
|
1123
|
+
return window._nc_navigation;
|
|
2680
1124
|
};
|
|
2681
1125
|
var NewMenuEntryCategory = /* @__PURE__ */ ((NewMenuEntryCategory2) => {
|
|
2682
1126
|
NewMenuEntryCategory2[NewMenuEntryCategory2["UploadFromDevice"] = 0] = "UploadFromDevice";
|
|
@@ -2761,6 +1205,86 @@ function getNewFileMenuEntries(context) {
|
|
|
2761
1205
|
return a2.displayName.localeCompare(b2.displayName, void 0, { numeric: true, sensitivity: "base" });
|
|
2762
1206
|
});
|
|
2763
1207
|
}
|
|
1208
|
+
function registerSidebarTab(tab) {
|
|
1209
|
+
validateSidebarTab(tab);
|
|
1210
|
+
window._nc_files_sidebar_tabs ??= /* @__PURE__ */ new Map();
|
|
1211
|
+
if (window._nc_files_sidebar_tabs.has(tab.id)) {
|
|
1212
|
+
logger.warn(`Sidebar tab with id "${tab.id}" already registered. Skipping.`);
|
|
1213
|
+
return;
|
|
1214
|
+
}
|
|
1215
|
+
window._nc_files_sidebar_tabs.set(tab.id, tab);
|
|
1216
|
+
logger.debug(`New sidebar tab with id "${tab.id}" registered.`);
|
|
1217
|
+
}
|
|
1218
|
+
function getSidebarTabs() {
|
|
1219
|
+
if (window._nc_files_sidebar_tabs) {
|
|
1220
|
+
return [...window._nc_files_sidebar_tabs.values()];
|
|
1221
|
+
}
|
|
1222
|
+
return [];
|
|
1223
|
+
}
|
|
1224
|
+
function validateSidebarTab(tab) {
|
|
1225
|
+
if (typeof tab !== "object") {
|
|
1226
|
+
throw new Error("Sidebar tab is not an object");
|
|
1227
|
+
}
|
|
1228
|
+
if (!tab.id || typeof tab.id !== "string" || tab.id !== CSS.escape(tab.id)) {
|
|
1229
|
+
throw new Error("Sidebar tabs need to have an id conforming to the HTML id attribute specifications");
|
|
1230
|
+
}
|
|
1231
|
+
if (!tab.tagName || typeof tab.tagName !== "string") {
|
|
1232
|
+
throw new Error("Sidebar tabs need to have the tagName name set");
|
|
1233
|
+
}
|
|
1234
|
+
if (!tab.tagName.match(/^[a-z][a-z0-9-_]+$/)) {
|
|
1235
|
+
throw new Error("Sidebar tabs tagName name is invalid");
|
|
1236
|
+
}
|
|
1237
|
+
if (!tab.displayName || typeof tab.displayName !== "string") {
|
|
1238
|
+
throw new Error("Sidebar tabs need to have a name set");
|
|
1239
|
+
}
|
|
1240
|
+
if (typeof tab.iconSvgInline !== "string" || !isSvg(tab.iconSvgInline)) {
|
|
1241
|
+
throw new Error("Sidebar tabs need to have an valid SVG icon");
|
|
1242
|
+
}
|
|
1243
|
+
if (typeof tab.order !== "number") {
|
|
1244
|
+
throw new Error("Sidebar tabs need to have a numeric order set");
|
|
1245
|
+
}
|
|
1246
|
+
if (typeof tab.enabled !== "function") {
|
|
1247
|
+
throw new Error('Sidebar tabs need to have an "enabled" method');
|
|
1248
|
+
}
|
|
1249
|
+
const tagConstructor = window.customElements.get(tab.tagName);
|
|
1250
|
+
if (!tagConstructor) {
|
|
1251
|
+
throw new Error("Sidebar tab element not registered");
|
|
1252
|
+
}
|
|
1253
|
+
if (!("setActive" in tagConstructor.prototype)) {
|
|
1254
|
+
throw new Error("Sidebar tab elements must have the `setActive` method");
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
class SidebarProxy {
|
|
1258
|
+
get available() {
|
|
1259
|
+
return !!window.OCA?.Files?.Sidebar;
|
|
1260
|
+
}
|
|
1261
|
+
get open() {
|
|
1262
|
+
return !!window.OCA?.Files?.Sidebar?.state.file;
|
|
1263
|
+
}
|
|
1264
|
+
setOpen(open) {
|
|
1265
|
+
if (open) {
|
|
1266
|
+
window.OCA?.Files?.Sidebar?.open();
|
|
1267
|
+
} else {
|
|
1268
|
+
window.OCA?.Files?.Sidebar?.close();
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
setActiveTab(tabId) {
|
|
1272
|
+
window.OCA?.Files?.Sidebar?.setActiveTab(tabId);
|
|
1273
|
+
}
|
|
1274
|
+
registerTab(tab) {
|
|
1275
|
+
registerSidebarTab(tab);
|
|
1276
|
+
}
|
|
1277
|
+
getTabs(context) {
|
|
1278
|
+
const tabs = getSidebarTabs();
|
|
1279
|
+
if (context) {
|
|
1280
|
+
return tabs.filter((tab) => tab.enabled(context));
|
|
1281
|
+
}
|
|
1282
|
+
return tabs;
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
function getSidebar() {
|
|
1286
|
+
return new SidebarProxy();
|
|
1287
|
+
}
|
|
2764
1288
|
var InvalidFilenameErrorReason = /* @__PURE__ */ ((InvalidFilenameErrorReason2) => {
|
|
2765
1289
|
InvalidFilenameErrorReason2["ReservedName"] = "reserved name";
|
|
2766
1290
|
InvalidFilenameErrorReason2["Character"] = "character";
|
|
@@ -3001,6 +1525,7 @@ export {
|
|
|
3001
1525
|
getNavigation,
|
|
3002
1526
|
getNewFileMenu,
|
|
3003
1527
|
getNewFileMenuEntries,
|
|
1528
|
+
getSidebar,
|
|
3004
1529
|
getUniqueName,
|
|
3005
1530
|
isFilenameValid,
|
|
3006
1531
|
orderBy,
|
|
@@ -3012,6 +1537,7 @@ export {
|
|
|
3012
1537
|
removeNewFileMenuEntry,
|
|
3013
1538
|
sortNodes,
|
|
3014
1539
|
unregisterFileListFilter,
|
|
3015
|
-
validateFilename
|
|
1540
|
+
validateFilename,
|
|
1541
|
+
validateView
|
|
3016
1542
|
};
|
|
3017
1543
|
//# sourceMappingURL=index.mjs.map
|