@nextcloud/files 4.0.0-beta.4 → 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/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import { l as logger, F as FileType } from "./chunks/folder-QTYeAiOH.mjs";
2
- import { a, b, N, c, P } from "./chunks/folder-QTYeAiOH.mjs";
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 require$$1 from "string_decoder";
4
+ import isSvg from "is-svg";
5
5
  import { getCapabilities } from "@nextcloud/capabilities";
6
- import { extname, basename } from "path";
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
- // &amp 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="&quot;"
1323
- ATTRIB_VALUE_ENTITY_U: S++,
1324
- // <foo bar=&quot
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
- isValidView(view);
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
- const isValidView = function(view) {
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
- return true;
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